From c4ee7e89ea0f11fca2a29755125c4d097d49f079 Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Thu, 7 Mar 2024 16:05:47 -0300 Subject: [PATCH] End of mythic+ panel updates, training dummy icon, etc. - Added a round of polishing into the end of mythic+ panel. - Added: Details:RegisterFrameToColor(frame) the registered frame will use the same color scheme of all the other frames from Details!. - Segments menu will show a different icon for training dummies. - Fixed functions that retrieve information about a dungeon. - Fixed an issue while trying to report using the "Report Results" from the report results tooltip. --- .gitignore | 13 +- Definitions.lua | 5 +- Libs/DF/cooltip.lua | 4 +- boot.lua | 20 +++ classes/class_combat.lua | 21 +++ core/plugins.lua | 1 + .../window_playerbreakdown.lua | 12 ++ frames/window_main.lua | 11 +- frames/window_mythicplus/window_chart.lua | 2 +- .../window_mythicplus/window_end_of_run.lua | 148 +++++++++++------- frames/window_report.lua | 4 - functions/boss.lua | 15 +- functions/ej_cache.lua | 26 +-- images/bar_textures/bar_of_bars.png | Bin 0 -> 11379 bytes images/icons.tga | Bin 1048620 -> 1048620 bytes images/masks/white_rounded_512x512.png | Bin 0 -> 4619 bytes textures.lua | 28 ++++ 17 files changed, 218 insertions(+), 92 deletions(-) create mode 100644 images/bar_textures/bar_of_bars.png create mode 100644 images/masks/white_rounded_512x512.png diff --git a/.gitignore b/.gitignore index bc8bc2c5a..c89b853b1 100644 --- a/.gitignore +++ b/.gitignore @@ -35,7 +35,6 @@ functions/pack2.lua *.afphoto wowapi.lua plugins/Details_TinyThreat/Details_TinyThreat_original.lua -*.png Descriptions.lua plugins/Details_EncounterDetails/.github/workflows/release.yml plugins/Details_RaidCheck/.github/workflows/release.yml @@ -51,3 +50,15 @@ annotations.txt plugins/Details_Compare2/Definitions.lua plugins/Details_Compare2/DF/ plugins/Details_Compare2/LibLuaServer/ +images/castlog_image.png +images/castlog_image2.png +images/castlog_image3.png +images/castlog_raidcooldowns.png +images/chartviewer.png +images/getalpha_version.png +images/icons2.png +images/myself.png +images/package_addons.png +images/patreon_stuff.png +images/plater_darktheme_skin.png +images/Tutorial/DetailsMainWindow.png diff --git a/Definitions.lua b/Definitions.lua index 3e318b3f1..07c8745f9 100644 --- a/Definitions.lua +++ b/Definitions.lua @@ -1,5 +1,6 @@ ----lower instance: each instance has an ID, starts from 1 and goes on, the lower instance is the opened instance with the lower ID. +--lower instance: each instance has an ID, starts from 1 and goes on, the lower instance is the opened instance with the lower ID. +--training dummy: a npc within major cities in world of warcraft where players can cast spells and attack to test their damage and healing output ---@alias plugintype ---| "SOLO" @@ -218,7 +219,7 @@ ---@field bossTimers table[] stored timers for bigwigs and dbm ---@field last_events_tables table[] where the death log of each player is stored ---@field boss_hp number percentage of the health points of the boss ----@field +---@field training_dummy boolean if true, the combat is against a training dummy ---@field ---@field ---@field __call table diff --git a/Libs/DF/cooltip.lua b/Libs/DF/cooltip.lua index 82cd5d658..4c3622d8a 100644 --- a/Libs/DF/cooltip.lua +++ b/Libs/DF/cooltip.lua @@ -937,7 +937,7 @@ function DF:CreateCoolTip() if (gameCooltip.FunctionsTableMain[self.index]) then local parameterTable = gameCooltip.ParametersTableMain[self.index] local func = gameCooltip.FunctionsTableMain[self.index] - local okay, errortext = pcall(func, gameCooltip.Host, gameCooltip.FixedValue, parameterTable[1], parameterTable[2], parameterTable[3], button) + local okay, errortext = xpcall(func, geterrorhandler(), gameCooltip.Host, gameCooltip.FixedValue, parameterTable[1], parameterTable[2], parameterTable[3], button) if (not okay) then print("Cooltip OnClick Error:", errortext) end @@ -951,7 +951,7 @@ function DF:CreateCoolTip() if (gameCooltip.FunctionsTableSub[self.mainIndex] and gameCooltip.FunctionsTableSub[self.mainIndex][self.index]) then local parameterTable = gameCooltip.ParametersTableSub[self.mainIndex][self.index] local func = gameCooltip.FunctionsTableSub[self.mainIndex][self.index] - local okay, errortext = pcall(func, gameCooltip.Host, gameCooltip.FixedValue, parameterTable[1], parameterTable[2], parameterTable[3], button) + local okay, errortext = xpcall(func, geterrorhandler(), gameCooltip.Host, gameCooltip.FixedValue, parameterTable[1], parameterTable[2], parameterTable[3], button) if (not okay) then print("Cooltip OnClick Error:", errortext) end diff --git a/boot.lua b/boot.lua index c01787d27..0cb709341 100644 --- a/boot.lua +++ b/boot.lua @@ -87,6 +87,26 @@ end end + --cache of frames to call :SetColor() when the color scheme changes + Details222.RegisteredFramesToColor = {} + + Details222.TrainingDummiesNpcId = { + [194649] = true, --valdraken + [189617] = true, --valdraken + [194644] = true, --valdraken + [198594] = true, --valdraken + [194643] = true, --valdraken + [189632] = true, --valdraken + [194648] = true, --valdraken + [194646] = true, --valdraken + [197834] = true, --valdraken + [31146] = true, --orgrimmar + [153285] = true, --orgrimmar + [114840] = true, --orgrimmar + [114832] = true, --stormwind + [153292] = true, --stormwind + } + --namespace for damage spells (spellTable) Details222.DamageSpells = {} --namespace for texture diff --git a/classes/class_combat.lua b/classes/class_combat.lua index 982d84061..3edc3e617 100644 --- a/classes/class_combat.lua +++ b/classes/class_combat.lua @@ -38,6 +38,8 @@ local detailsFramework = DetailsFramework --[[global]] DETAILS_SEGMENTTYPE_EVENT_VALENTINEDAY = 30 +--[[global]] DETAILS_SEGMENTTYPE_TRAININGDUMMY = 40 + local segmentTypeToString = { [DETAILS_SEGMENTTYPE_GENERIC] = "Generic", [DETAILS_SEGMENTTYPE_OVERALL] = "Overall", @@ -403,6 +405,9 @@ local segmentTypeToString = { elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_GENERIC) then return textureAtlas["segment-icon-mythicplus"] + elseif (combatType == DETAILS_SEGMENTTYPE_TRAININGDUMMY) then + return textureAtlas["segment-icon-training-dummy-zoom"] + elseif (combatType == DETAILS_SEGMENTTYPE_PVP_ARENA) then return textureAtlas["segment-icon-arena"] @@ -687,6 +692,10 @@ local segmentTypeToString = { return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_GENERIC, DETAILS_SEGMENTTYPE_MYTHICDUNGEON end + if (self.training_dummy) then + return DETAILS_SEGMENTTYPE_TRAININGDUMMY + end + --arena local arenaInfo = self.is_arena if (arenaInfo) then @@ -1038,8 +1047,20 @@ function classCombat:NovaTabela(bTimeStarted, overallCombatObject, combatId, ... Details.combat_counter = Details.combat_counter + 1 combatObject.combat_counter = Details.combat_counter + --combatObject.training_dummy = false + --try discover if is a pvp combat local sourceGUID, sourceName, sourceFlags, targetGUID, targetName, targetFlags = ... + + if (targetGUID) then + local npcId = Details:GetNpcIdFromGuid(targetGUID) + if (npcId) then + if (Details222.TrainingDummiesNpcId[npcId]) then + combatObject.training_dummy = true + end + end + end + if (sourceGUID) then --aqui ir� identificar o boss ou o oponente if (targetName and bitBand (targetFlags, REACTION_HOSTILE) ~= 0) then --tentando pegar o inimigo pelo alvo combatObject.contra = targetName diff --git a/core/plugins.lua b/core/plugins.lua index 59ce40556..3b1ba014e 100644 --- a/core/plugins.lua +++ b/core/plugins.lua @@ -372,6 +372,7 @@ optionsFrame:Hide() detailsFramework:AddRoundedCornersToFrame(optionsFrame, Details.PlayerBreakdown.RoundedCornerPreset) + Details:RegisterFrameToColor(optionsFrame) --create a an icon to display the pluginIcon local pluginIconTexture = detailsFramework:CreateTexture(optionsFrame, pluginIcon, 20, 20, "artwork", pluginIconCoords or {0, 1, 0, 1}, "pluginIconTexture", "$parentPluginIconTexture") diff --git a/frames/window_breakdown/window_playerbreakdown.lua b/frames/window_breakdown/window_playerbreakdown.lua index a53b9a7ef..8bcad7299 100644 --- a/frames/window_breakdown/window_playerbreakdown.lua +++ b/frames/window_breakdown/window_playerbreakdown.lua @@ -263,6 +263,14 @@ Details.PlayerBreakdown.RoundedCornerPreset = { color = {.1, .1, .1, 0.834}, } +Details222.RegisteredFramesToColor = {} + +function Details:RegisterFrameToColor(frame) + Details222.RegisteredFramesToColor[#Details222.RegisteredFramesToColor+1] = frame + local colorTable = Details.frame_background_color + frame:SetColor(unpack(colorTable)) +end + function Details:RefreshWindowColor() local colorTable = Details.frame_background_color Details:SetWindowColor(unpack(colorTable)) @@ -290,6 +298,10 @@ function Details:SetWindowColor(r, g, b, a) DetailsSpellBreakdownOptionsPanel:SetColor(r, g, b, a) end + for idx, frame in ipairs(Details222.RegisteredFramesToColor) do + frame:SetColor(r, g, b, a) + end + local colorTable = Details.frame_background_color colorTable[1] = r colorTable[2] = g diff --git a/frames/window_main.lua b/frames/window_main.lua index 5c04348ab..05a34b8de 100644 --- a/frames/window_main.lua +++ b/frames/window_main.lua @@ -3,6 +3,9 @@ local Details = _G.Details local Loc = LibStub("AceLocale-3.0"):GetLocale("Details") local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local segmentos = Details.segmentos + + +---@type detailsframework local gump = Details.gump local _ @@ -6632,6 +6635,12 @@ local buildSegmentTooltip = function(self, deltaTime) gameCooltip:AddLine(combatName, formattedElapsedTime, 1, "hotpink", "hotpink") gameCooltip:AddIcon(thisCombat:GetCombatIcon(), "main", "left") + elseif (combatType == DETAILS_SEGMENTTYPE_TRAININGDUMMY) then + mythicDungeonRunId = false + local combatName, r, g, b = thisCombat:GetCombatName() + gameCooltip:AddLine(combatName, formattedElapsedTime, 1, "yellow", "yellow") + gameCooltip:AddIcon(thisCombat:GetCombatIcon(), "main", "left") + elseif (combatType == DETAILS_SEGMENTTYPE_PVP_BATTLEGROUND) then mythicDungeonRunId = false enemyName = thisCombat:GetCombatName() @@ -9232,7 +9241,7 @@ local reportButton_OnEnter = function(self, motion, forced) GameCooltip:AddLine(Loc["STRING_REPORT_TOOLTIP"], nil, 1, "white", nil, Details.font_sizes.menus, Details.font_faces.menus) GameCooltip:AddIcon([[Interface\Addons\Details\Images\report_button]], 1, 1, 12, 19) - GameCooltip:AddMenu(1, Details.Reportar, instancia, nil, "INSTANCE" .. instancia.meu_id) + GameCooltip:AddMenu(1, function() instancia:Reportar("INSTANCE" .. instancia.meu_id) end) show_anti_overlap(instancia, self, "top") Details:SetMenuOwner(self, instancia) diff --git a/frames/window_mythicplus/window_chart.lua b/frames/window_mythicplus/window_chart.lua index 87c85f05c..d26d9064e 100644 --- a/frames/window_mythicplus/window_chart.lua +++ b/frames/window_mythicplus/window_chart.lua @@ -22,7 +22,7 @@ function mythicDungeonCharts.ShowChart() dungeonChartFrame:SetSize(1200, 620) dungeonChartFrame:SetPoint("center", UIParent, "center", 0, 0) - dungeonChartFrame:SetFrameStrata("LOW") + dungeonChartFrame:SetFrameStrata("DIALOG") dungeonChartFrame:EnableMouse(true) dungeonChartFrame:SetMovable(true) DetailsFramework:ApplyStandardBackdrop(dungeonChartFrame) diff --git a/frames/window_mythicplus/window_end_of_run.lua b/frames/window_mythicplus/window_end_of_run.lua index 1475233f1..2a658a1b5 100644 --- a/frames/window_mythicplus/window_end_of_run.lua +++ b/frames/window_mythicplus/window_end_of_run.lua @@ -486,34 +486,45 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() readyFrame.entryAnimationDuration = 0.1 + --this frame is required due to the animation, the readyFrame and the contentFrame has their own animations + mythicDungeonFrames.ReadyFrameTop = CreateFrame("frame", "DetailsMythicDungeonReadyTopFrame", UIParent, "BackdropTemplate") + mythicDungeonFrames.ReadyFrameTop:SetPoint("bottomleft", readyFrame, "topleft", 0, 0) + mythicDungeonFrames.ReadyFrameTop:SetPoint("bottomright", readyFrame, "topright", 0, 0) + mythicDungeonFrames.ReadyFrameTop:SetHeight(1) + readyFrame.TopFrame = mythicDungeonFrames.ReadyFrameTop + local openingAnimationHub = detailsFramework:CreateAnimationHub(readyFrame, function() end, function() readyFrame:SetWidth(355); end) detailsFramework:CreateAnimation(openingAnimationHub, "Scale", 1, readyFrame.entryAnimationDuration, 0, 1, 1, 1, "center", 0, 0) readyFrame.OpeningAnimation = openingAnimationHub do --backdrop textures + local maskTexture = readyFrame:CreateMaskTexture("$parentDungeonBackdropTextureMaskTexture", "artwork") + maskTexture:SetTexture([[Interface\AddOns\Details\images\masks\white_rounded_512x512.png]]) + maskTexture:SetPoint("topleft", readyFrame, "topleft", 0, 0) + maskTexture:SetPoint("bottomright", readyFrame, "bottomright", 0, 0) + --backdrop gradient from bottom to top ---@type df_gradienttable - local gradientTable = {gradient = "vertical", fromColor = {0, 0, 0, 0.15}, toColor = "transparent"} - local gradientBelowTheLine = detailsFramework:CreateTexture(readyFrame, gradientTable, 1, readyFrame:GetHeight(), "artwork", {0, 1, 0, 1}, "backgroundGradient") - gradientBelowTheLine:SetPoint("bottoms") + local gradientTable = {gradient = "vertical", fromColor = {0, 0, 0, 0.8}, toColor = "transparent"} + local gradientBelowTheLine = detailsFramework:CreateTexture(readyFrame, gradientTable, 1, readyFrame:GetHeight()/3, "artwork", {0, 1, 0, 1}, "backgroundGradient") + gradientBelowTheLine:SetPoint("bottoms", 0, 0) + gradientBelowTheLine:AddMaskTexture(maskTexture) local dungeonBackdropTexture = readyFrame:CreateTexture("$parentDungeonBackdropTexture", "artwork", nil, -2) dungeonBackdropTexture:SetTexCoord(0.05, 0.70, 0.1, 0.82) dungeonBackdropTexture:SetVertexColor(0.2, 0.2, 0.2, 0.8) dungeonBackdropTexture:SetDesaturation(0.65) - dungeonBackdropTexture:SetAlpha(0.6) - dungeonBackdropTexture:SetPoint("topleft", readyFrame, "topleft", 0, 0) - dungeonBackdropTexture:SetPoint("topright", readyFrame, "topright", 0, 0) - dungeonBackdropTexture:SetPoint("bottomleft", readyFrame, "bottomleft", 0, 0) - dungeonBackdropTexture:SetPoint("bottomright", readyFrame, "bottomright", 0, 0) + dungeonBackdropTexture:SetAlpha(0.834) + dungeonBackdropTexture:SetAllPoints() + dungeonBackdropTexture:AddMaskTexture(maskTexture) readyFrame.DungeonBackdropTexture = dungeonBackdropTexture - local maskTexture = readyFrame:CreateMaskTexture("$parentDungeonBackdropTextureMaskTexture", "artwork") - maskTexture:SetAtlas("UI-Frame-IconMask") - local offset = 26 - maskTexture:SetPoint("topleft", readyFrame, "topleft", -offset, offset) - maskTexture:SetPoint("bottomright", readyFrame, "bottomright", offset, -offset) - dungeonBackdropTexture:AddMaskTexture(maskTexture) + local anotherBackdropTexture = readyFrame:CreateTexture("$parentAnotherBackdropTexture", "artwork", nil, -3) + anotherBackdropTexture:SetTexture([[Interface\GLUES\Models\UI_HighmountainTauren\7HM_RapidSimpleMask]]) + anotherBackdropTexture:AddMaskTexture(maskTexture) + anotherBackdropTexture:SetAllPoints() + anotherBackdropTexture:SetVertexColor(0.467, 0.416, 0.639, 1) + readyFrame.AnotherBackdropTexture = anotherBackdropTexture end --frame to place all texture that goes behind the readyFrame @@ -532,37 +543,39 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() do --use the same textures from the original end of dungeon panel - readyFrame.YellowSpikeCircle = contentFrame:CreateTexture("$parentSkullCircle", "overlay") - readyFrame.YellowSpikeCircle:SetSize(100, 100) - readyFrame.YellowSpikeCircle:SetPoint("center", readyFrame, "top", 0, 30) - readyFrame.YellowSpikeCircle:SetAtlas("ChallengeMode-SpikeyStar") - readyFrame.YellowSpikeCircle:SetAlpha(1) - readyFrame.YellowSpikeCircle:SetIgnoreParentAlpha(true) + local spikes = mythicDungeonFrames.ReadyFrameTop:CreateTexture("$parentSkullCircle", "overlay") + spikes:SetSize(100, 100) + spikes:SetPoint("center", readyFrame, "top", 0, 30) + spikes:SetAtlas("ChallengeMode-SpikeyStar") + spikes:SetAlpha(1) + spikes:SetIgnoreParentAlpha(true) + readyFrame.YellowSpikeCircle = spikes + + local yellowFlash = mythicDungeonFrames.ReadyFrameTop:CreateTexture("$parentYellowFlash", "artwork") + yellowFlash:SetSize(120, 120) + yellowFlash:SetPoint("center", readyFrame, "top", 0, 30) + yellowFlash:SetAtlas("BossBanner-RedFlash") + yellowFlash:SetAlpha(0) + yellowFlash:SetBlendMode("ADD") + yellowFlash:SetIgnoreParentAlpha(true) + readyFrame.YellowFlash = yellowFlash + + readyFrame.Level = mythicDungeonFrames.ReadyFrameTop:CreateFontString("$parentLevelText", "overlay", "GameFontNormalWTF2Outline") + readyFrame.Level:SetPoint("center", readyFrame.YellowSpikeCircle, "center", 0, 0) + readyFrame.Level:SetText("") + + --create the animation for the yellow flash + local flashAnimHub = detailsFramework:CreateAnimationHub(yellowFlash, function() yellowFlash:SetAlpha(0) end, function() yellowFlash:SetAlpha(0) end) + local flashAnim1 = detailsFramework:CreateAnimation(flashAnimHub, "Alpha", 1, 0.5, 0, 1) + local flashAnim2 = detailsFramework:CreateAnimation(flashAnimHub, "Alpha", 2, 0.5, 1, 0) --create the animation for the yellow spike circle - local MainAnimationGroup = readyFrame.YellowSpikeCircle:CreateAnimationGroup() - readyFrame.YellowSpikeCircle.scale1 = MainAnimationGroup:CreateAnimation("SCALE") - readyFrame.YellowSpikeCircle.scale1:SetOrder(1) - readyFrame.YellowSpikeCircle.scale1:SetDuration(0.3) - readyFrame.YellowSpikeCircle.scale1:SetScaleFrom(2, 2) - readyFrame.YellowSpikeCircle.scale1:SetScaleTo(1, 1) - readyFrame.YellowSpikeCircle.scale1:SetOrigin("center", 0, 0) - - --bugged - readyFrame.YellowSpikeCircle.OnShowAnimation = MainAnimationGroup - - --spinning animation for the yellow spike circle - --local yellowSpikeCircleSpinAnimationGroup = detailsFramework:CreateAnimationHub(readyFrame.YellowSpikeCircle, function()end, function()end) - --yellowSpikeCircleSpinAnimationGroup:SetLooping("REPEAT") - --local spikeRotationAnim = detailsFramework:CreateAnimation(yellowSpikeCircleSpinAnimationGroup, "Rotation", 1, 5, 1) - --spikeRotationAnim:SetSmoothing("IN_OUT") --"IN_OUT" "IN" "OUT" "NONE" - --spikeRotationAnim:SetSmoothProgress(50) - --readyFrame.YellowSpikeCircleSpinAnimation = yellowSpikeCircleSpinAnimationGroup - end + local spikeCircleAnimHub = detailsFramework:CreateAnimationHub(spikes, function() spikes:SetAlpha(0); spikes:SetScale(1) end, function() flashAnimHub:Play(); spikes:SetSize(100, 100); spikes:SetScale(1); spikes:SetAlpha(1) end) + local alphaAnim1 = detailsFramework:CreateAnimation(spikeCircleAnimHub, "Alpha", 1, 0.2960000038147, 0, 1) + local scaleAnim1 = detailsFramework:CreateAnimation(spikeCircleAnimHub, "Scale", 1, 0.21599999070168, 5, 5, 1, 1, "center", 0, 0) - readyFrame.Level = contentFrame:CreateFontString("$parentLevelText", "overlay", "GameFontNormalWTF2Outline") - readyFrame.Level:SetPoint("center", readyFrame.YellowSpikeCircle, "center", 0, 0) - readyFrame.Level:SetText("") + readyFrame.YellowSpikeCircle.OnShowAnimation = spikeCircleAnimHub + end readyFrame.leftFiligree = contentFrame:CreateTexture("$parentLeftFiligree", "artwork") readyFrame.leftFiligree:SetAtlas("BossBanner-LeftFillagree") @@ -605,10 +618,11 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() waitingForLootDotsAnimationLabel:SetPoint("left", waitingForLootLabel, "right", 0, 0) waitingForLootDotsAnimationLabel:Hide() + ---@type texture local topRedLineTexture = backgroundFrame:CreateTexture("$parentBannerTop", "border") topRedLineTexture:SetAtlas("BossBanner-BgBanner-Top") - topRedLineTexture:SetPoint("top", backgroundFrame, "top", 0, 155) - local topTextureAnimGroup = detailsFramework:CreateAnimationHub(topRedLineTexture, function()end, function() topRedLineTexture:SetWidth(480) end) + topRedLineTexture:SetPoint("top", backgroundFrame, "top", 0, 34) + local topTextureAnimGroup = detailsFramework:CreateAnimationHub(topRedLineTexture, function()end, function() topRedLineTexture:SetSize(388, 112) end) topRedLineTexture.Animation = topTextureAnimGroup local animDuration = 0.3 detailsFramework:CreateAnimation(topTextureAnimGroup, "Scale", 1, animDuration, 0, 1, 1, 1, "center", 0, 0) @@ -616,12 +630,25 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() local bottomRedLineTexture = backgroundFrame:CreateTexture("$parentBannerBottom", "border") bottomRedLineTexture:SetAtlas("BossBanner-BgBanner-Bottom") - bottomRedLineTexture:SetPoint("bottom", backgroundFrame, "bottom", 0, -115) - local bottomTextureAnimGroup = detailsFramework:CreateAnimationHub(bottomRedLineTexture, function()end, function() bottomRedLineTexture:SetWidth(480) end) + bottomRedLineTexture:SetPoint("bottom", backgroundFrame, "bottom", 0, -25) + local bottomTextureAnimGroup = detailsFramework:CreateAnimationHub(bottomRedLineTexture, function()end, function() bottomRedLineTexture:SetSize(388, 112) end) bottomRedLineTexture.Animation = bottomTextureAnimGroup detailsFramework:CreateAnimation(bottomTextureAnimGroup, "Scale", 1, animDuration, 0, 1, 0.5, 1, "center", 0, 0) readyFrame.BottomRedLineTexture = bottomRedLineTexture + --local leftRedLineTexture = backgroundFrame:CreateTexture("$parentBannerLeft", "border") + --leftRedLineTexture:SetAtlas("BossBanner-BgBanner-Top") + --leftRedLineTexture:SetPoint("topleft", backgroundFrame, "topleft", 0, 0) + --leftRedLineTexture:SetPoint("bottomleft", backgroundFrame, "bottomleft", 0, 0) + --leftRedLineTexture:SetWidth(388) + --leftRedLineTexture:SetRotation(-1.5708) + + --local centerGradient = backgroundFrame:CreateTexture("$parentCenterGradient", "artwork") + --centerGradient:SetAtlas("BossBanner-BgBanner-Mid") + --centerGradient:SetPoint("center", backgroundFrame, "center", 0, 0) + --centerGradient:SetSize(355, 390) + + --make a text dot animation, which will show no dots at start and then "." then ".." then "..." and back to "" and so on function readyFrame.StartTextDotAnimation() --update the Waiting for Loot labels @@ -661,6 +688,7 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() readyFrame:SetScript("OnHide", function(self) readyFrame.StopTextDotAnimation() + mythicDungeonFrames.ReadyFrameTop:Hide() end) local roundedCornerPreset = { @@ -677,7 +705,7 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() end ---@type df_button readyFrame.ShowBreakdownButton = DetailsFramework:CreateButton(contentFrame, showBreakdownFunc, 145, 30, "Show Breakdown") - PixelUtil.SetPoint(readyFrame.ShowBreakdownButton, "topleft", readyFrame, "topleft", 5, -30) + PixelUtil.SetPoint(readyFrame.ShowBreakdownButton, "topleft", readyFrame, "topleft", 31, -30) PixelUtil.SetSize(readyFrame.ShowBreakdownButton, 145, 32) readyFrame.ShowBreakdownButton:SetBackdrop(nil) readyFrame.ShowBreakdownButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {84/512, 120/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0) @@ -693,7 +721,7 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() end ---@type df_button readyFrame.ShowChartButton = DetailsFramework:CreateButton(contentFrame, showChartFunc, 145, 30, "Show Damage Graphic") - PixelUtil.SetPoint(readyFrame.ShowChartButton, "left", readyFrame.ShowBreakdownButton, "right", 5, 0) + PixelUtil.SetPoint(readyFrame.ShowChartButton, "left", readyFrame.ShowBreakdownButton, "right", 6, 0) PixelUtil.SetSize(readyFrame.ShowChartButton, 145, 32) readyFrame.ShowChartButton:SetBackdrop(nil) readyFrame.ShowChartButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {42/512, 75/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0) @@ -706,7 +734,8 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() end local elapsedTimeLabel = DetailsFramework:CreateLabel(contentFrame, "Run Time:", textSize, textColor) - elapsedTimeLabel:SetPoint("topleft", leftAnchor, "bottomleft", 0, -8) + --elapsedTimeLabel:SetPoint("topleft", leftAnchor, "bottomleft", 0, -8) + elapsedTimeLabel:SetPoint("topleft", readyFrame, "topleft", 5, -70) local elapsedTimeAmount = DetailsFramework:CreateLabel(contentFrame, "00:00", textSize, textColor) elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0) @@ -832,6 +861,9 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() local readyFrame = mythicDungeonFrames.ReadyFrame readyFrame:Show() + readyFrame.TopFrame:Show() + readyFrame.YellowSpikeCircle.OnShowAnimation:Play() + readyFrame.TopRedLineTexture:Hide() readyFrame.BottomRedLineTexture:Hide() readyFrame.ContentFrame:SetAlpha(0) @@ -851,9 +883,6 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() readyFrame.OpeningAnimation:Play() end) - --readyFrame.YellowSpikeCircle:SetAlpha(1) - --readyFrame.YellowSpikeCircle.OnShowAnimation:Play() - C_Timer.After(readyFrame.entryAnimationDuration+0.05, function() readyFrame.TopRedLineTexture:Show() readyFrame.BottomRedLineTexture:Show() @@ -868,6 +897,7 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() readyFrame.StartTextDotAnimation() --fin the overall mythic dungeon combat, starting with the current combat + ---@type combat local overallMythicDungeonCombat = Details:GetCurrentCombat() --if the latest segment isn't the overall mythic dungeon segment, then find it @@ -895,11 +925,21 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel() readyFrame.TimeNotInCombatAmountLabel.text = "Unknown for this run" end - if (not overallMythicDungeonCombat.is_mythic_dungeon) then + local mythicDungeonInfo = overallMythicDungeonCombat:GetMythicDungeonInfo() + + if (not mythicDungeonInfo) then return end - readyFrame.DungeonBackdropTexture:SetTexture(overallMythicDungeonCombat.is_mythic_dungeon.DungeonTexture) + ---@type details_instanceinfo + local instanceInfo = Details:GetInstanceInfo(mythicDungeonInfo.MapID) or Details:GetInstanceInfo(Details:GetCurrentCombat().mapId) + + if (instanceInfo) then + readyFrame.DungeonBackdropTexture:SetTexture(instanceInfo.iconLore) + else + readyFrame.DungeonBackdropTexture:SetTexture(overallMythicDungeonCombat.is_mythic_dungeon.DungeonTexture) + end + wipe(readyFrame.playerCacheByName) diff --git a/frames/window_report.lua b/frames/window_report.lua index cbe112d3b..c0c784405 100644 --- a/frames/window_report.lua +++ b/frames/window_report.lua @@ -199,11 +199,7 @@ local _ Details.janela_report.slider.lockTexture:Hide() Details.janela_report.slider.amt:Show() - --print("report is custom:", bIsCustom) if (options) then - --dumpt(param2) = {damage, spellName, spellId} - --print(param2, options._custom) options._custom = nil - --print("meu id:", self.meu_id) local bIsCustom = true Details.janela_report.enviar:SetScript("OnClick", function() self:monta_relatorio(param2, bIsCustom) end) else diff --git a/functions/boss.lua b/functions/boss.lua index dfd2eb079..309eefffc 100644 --- a/functions/boss.lua +++ b/functions/boss.lua @@ -505,18 +505,15 @@ do function Details222.EJCache.GetInstanceDataByName(instanceName) local raidData = Details222.EJCache.CacheRaidData_ByInstanceName[instanceName] - local dungeonData = Details222.EJCache.CacheDungeonData_ByInstanceName[instanceName] - return raidData or dungeonData + return raidData end function Details222.EJCache.GetInstanceDataByInstanceId(instanceId) local raidData = Details222.EJCache.CacheRaidData_ByInstanceId[instanceId] - local dungeonData = Details222.EJCache.CacheDungeonData_ByInstanceId[instanceId] - return raidData or dungeonData + return raidData end function Details222.EJCache.GetInstanceDataByMapId(mapId) local raidData = Details222.EJCache.CacheRaidData_ByMapId[mapId] - local dungeonData = Details222.EJCache.CacheDungeonData_ByMapId[mapId] - return raidData or dungeonData + return raidData end function Details222.EJCache.GetRaidDataByName(instanceName) @@ -530,13 +527,13 @@ do end function Details222.EJCache.GetDungeonDataByName(instanceName) - return Details222.EJCache.CacheDungeonData_ByInstanceName[instanceName] + return Details222.EJCache.CacheRaidData_ByInstanceName[instanceName] end function Details222.EJCache.GetDungeonDataByInstanceId(instanceId) - return Details222.EJCache.CacheDungeonData_ByInstanceId[instanceId] + return Details222.EJCache.CacheRaidData_ByInstanceId[instanceId] end function Details222.EJCache.GetDungeonDataByMapId(instanceId) - return Details222.EJCache.CacheDungeonData_ByMapId[instanceId] + return Details222.EJCache.CacheRaidData_ByMapId[instanceId] end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/functions/ej_cache.lua b/functions/ej_cache.lua index bfcf66f34..bcb369329 100644 --- a/functions/ej_cache.lua +++ b/functions/ej_cache.lua @@ -63,7 +63,11 @@ end ---@param id instanceid|instancename|mapid ---@return details_instanceinfo? function Details:GetInstanceInfo(id) - ---@type details_encounterinfo + if (id == 463) then --fall + id = 1209 + end + + ---@type details_instanceinfo local instanceData = Details222.EJCache.CacheRaidData_ByInstanceId[id] if (instanceData) then return instanceData @@ -78,21 +82,10 @@ function Details:GetInstanceInfo(id) if (instanceData) then return instanceData end +end - instanceData = Details222.EJCache.CacheDungeonData_ByInstanceId[id] - if (instanceData) then - return instanceData - end - - instanceData = Details222.EJCache.CacheDungeonData_ByInstanceName[id] - if (instanceData) then - return instanceData - end - - instanceData = Details222.EJCache.CacheDungeonData_ByMapId[id] - if (instanceData) then - return instanceData - end +function Details:DumpInstanceInfo() + dumpt(Details222.EJCache.CacheRaidData_ByInstanceId) end function Details:GetInstanceEJID(...) @@ -109,9 +102,6 @@ function Details222.EJCache.CreateEncounterJournalDump() Details222.EJCache.CacheRaidData_ByInstanceId = {} Details222.EJCache.CacheRaidData_ByInstanceName = {} --this is localized name Details222.EJCache.CacheRaidData_ByMapId = {} --retrivied from GetInstanceInfo() - Details222.EJCache.CacheDungeonData_ByInstanceId = {} - Details222.EJCache.CacheDungeonData_ByInstanceName = {} - Details222.EJCache.CacheDungeonData_ByMapId = {} Details222.EJCache.CacheEncountersByEncounterName = {} Details222.EJCache.CacheEncountersBy_EncounterName = {} Details222.EJCache.CacheEncountersBy_EncounterId = {} diff --git a/images/bar_textures/bar_of_bars.png b/images/bar_textures/bar_of_bars.png new file mode 100644 index 0000000000000000000000000000000000000000..94d598458fd688e57d2aaf0c1da065871347c234 GIT binary patch literal 11379 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 literal 0 HcmV?d00001 diff --git a/images/icons.tga b/images/icons.tga index c2354743b93fd17028fc79cb9f485b245f053460..43a8abda95c1ea15bd684b952bd381a3582c6d64 100644 GIT binary patch delta 4274 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 Wky*%WWDYVH2}b4(5G5f2-hTrU?-!;3 delta 557 zcmZ3};IO8_VS^;cM1wz@MLBucCmQ_SEGNheq`z(!ljH`{A2$mr@}DS)d}kFor0MAq!)u!Wg4g* zq0~_pceXZ47wZn=I*Pi}fugvOqTLmZq0TOd1*8-VRtVq%vXmfuk|>W-clOWygFo)% ze)spC-}imzdz>?=NKT4bM}CtG09Y3n8 zrJTkWDFrA^Cs#on0B*QW#TQCZf+9f0xPnI=YiglVa1oE15tK+zR7Ii^JobPZO+Ap5 zCOjY&vPIPJFfv!ifdq1t;8S#RnL@+S@u&`74t%$NMyM2r3L)iDGZT|3kxDg638Dqj z=+rPWg{u}}oRp~j&lf|9N0ktSii03pt(K-`(UfX2!eF!62%U*AnSoFvP@`86d|jYI z<8P;MazvpTp&C~axKcr}bMghsLV`!7LY(r#Gr4MkT%ma$J=_OG$5$Z?8XZ}xtdb}R zrADHB$&v+l#X^yA!HB9*EpzxU5+bM!m7@wm1N9lp452!FG3I4%*^w3W1dhE#-HxnK zhq*~iTySU^{fnsO@@4*Li0C4?anF3>!^gu|diWzJGoo}dE+GGI#iY!g~Oz4U`_IqRd4M21%zQODtur#O#em;fjPD0w-jsLvl7=gp6=X zPEm&2yNx5`E5tmiE>MJG{6ZN)4bw_+0)1DlEL4b4(YtUnbnxLK_EweQ&*>b}3qCHg z%ox{E$(&eRLnzhyCH7O%g5~xd9Z#V+>X^e9+Jom&RcfWEP>6~gDS(kUQH>HKw0t!h zA%-Q)qefsD4!229NwzmXg-K!3_P{ZB{PXi2RiOJjNA8y8vOy)*PBQwy$h zeuL8xj#Xq~u0mm9GNTGu!)iEpznx)c0YECnVKuI(LI8GE6;?IHyGCp%Z`uCdjlH{e z2{uO6ow?x|vF(W4(X#CA8;gV59tI2+^aR9S_LjMl&m6t9Z{9`jE{#ZjJ>o*0w|q~v zX8%VY8PKBUIji|{=qsJczm6LYqQ#2U*~YQL-MeY*k@l`X|LJhj)$1Q$G_TninN~j? zx*NN;b&oVXeEL$*e&JP@PY(1KM0coLQ(IY5cE_N+e|^B#W8@lgXwa3@<8|j^ZrNn& zGp3py($7o1F34Mt-9V1n1Oex24?lc3S(~bVI22}yKPfQGoW7Cw#E)?K_ml7QPp&Q2 zy@4fQULQ1WJ?@?UuiU;FjVK_aDyz2iZ@*l7d{FiA$rFzm6$N*N%#_zn&*rV?{oX1# zaelA<^QUd}yxFgs-D}VAi+$eQ|AVKjQdMOTLMls2KkkrcukV`;Zvz3lQumft{FJ!S$8`l_p4FAS8vXA{s9SY5`Xjfy&sz4 z`MFjVo23DO=5K#Uy4vs}0LX&4sE9OOwYB$GpZK6}l=hER-daPi@Njpz95OVeRh8Y#soFkQ=@NM*){<=ZlZZ^fRCVEOjw}H#zzIIc$wC-SK z=y$E4tHC;Dn9*Su$8b8xZ%Gnc?$mbmv;v1bKdtD+g_FH^mPr&6j|U{%pt#Wc0RW4;u`IdU)w~(8C?|0Y*}9^?i5aQGYKN;A1{&=-pwAui5Mdass7w zQ#Zc=p!EE20C@X%@P$GGAOhZf%G>~OTMK~aCIB{U2Y?d0s<65btM#zj7pwDObxy7x z2mepU;-ha(wnHPo0Hq(y$gwS;#ZSKhe5X3}89egmoJal~ya^O*df1@U^+ycD}xBwOAg!GqJ=O!2IAEk99W2=T*>E`45ABsQ5|E%z3gesQYTDs2O}NZ#KSh% zk|yu*?BOpA`mxjgkYVyc_VAJN@SH8aSLEGN)HBvO&*EC{$rNpK2 z=6zq+F_Xz^xWZ=b#Vi#iVg6tou?07I%=Xk6E{QGYCr;S_$a&-ya##D?JDWQ;+W*6e Mi%yEVxG%r#KldJh($ literal 0 HcmV?d00001 diff --git a/textures.lua b/textures.lua index 27b4bebf4..6bd30f424 100644 --- a/textures.lua +++ b/textures.lua @@ -57,6 +57,34 @@ Details.TextureAtlas = { nativeHeight = 512, }, + ["segment-icon-training-dummy"] = { + file = [[Interface\AddOns\Details\images\icons]], + width = 14, + height = 16, + leftTexCoord = 275/512, + rightTexCoord = 295/512, + topTexCoord = 110/512, + bottomTexCoord = 142/512, + tilesHorizontally = false, + tilesVertically = false, + nativeWidth = 512, + nativeHeight = 512, + }, + + ["segment-icon-training-dummy-zoom"] = { + file = [[Interface\AddOns\Details\images\icons]], + width = 12, + height = 16, + leftTexCoord = 298/512, + rightTexCoord = 320/512, + topTexCoord = 110/512, + bottomTexCoord = 142/512, + tilesHorizontally = false, + tilesVertically = false, + nativeWidth = 512, + nativeHeight = 512, + }, + ["small-pin-yellow"] = { file = [[Interface\BUTTONS\UI-RadioButton]], width = 12,