From 7a0e045308af60c622645c6b092b23743f4c8e0b Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Thu, 13 Jul 2023 22:02:10 -0300 Subject: [PATCH] Real Time DPS, ten years old --- .gitignore | 1 + Libs/LibOpenRaid/LibOpenRaid.lua | 2 +- .../ThingsToMantain_Dragonflight.lua | 15 ++ boot.lua | 8 +- classes/class_damage.lua | 35 +-- core/parser.lua | 201 ++++++++++++++---- .../window_playerbreakdown_auras.lua | 18 +- .../window_playerbreakdown_list.lua | 12 +- frames/window_options2_sections.lua | 4 +- functions/profiles.lua | 2 +- functions/skins.lua | 185 ---------------- images/skins/ten_years_skin.tga | Bin 4194348 -> 0 bytes 12 files changed, 228 insertions(+), 255 deletions(-) delete mode 100644 images/skins/ten_years_skin.tga diff --git a/.gitignore b/.gitignore index e7deb61bc..c7bb7f339 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ plugins/Details_RaidCheck/.github/workflows/release.yml plugins/Details_Streamer/.github/workflows/release.yml plugins/Details_TinyThreat/.github/workflows/release.yml plugins/Details_Vanguard/.github/workflows/release.yml +photoshop/ten_years_skin.tga diff --git a/Libs/LibOpenRaid/LibOpenRaid.lua b/Libs/LibOpenRaid/LibOpenRaid.lua index b49844262..5784797c2 100644 --- a/Libs/LibOpenRaid/LibOpenRaid.lua +++ b/Libs/LibOpenRaid/LibOpenRaid.lua @@ -37,7 +37,7 @@ if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE and not isExpansion_Dragonflight()) t end local major = "LibOpenRaid-1.0" -local CONST_LIB_VERSION = 104 +local CONST_LIB_VERSION = 105 if (not LIB_OPEN_RAID_MAX_VERSION) then LIB_OPEN_RAID_MAX_VERSION = CONST_LIB_VERSION diff --git a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua index c64c61818..7de8f1364 100644 --- a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua +++ b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua @@ -730,6 +730,7 @@ do --evoker -- 1467 - Devastation -- 1468 - Preservation + -- 1473 - Augmentation [374251] = {cooldown = 60, duration = 0, specs = {1467, 1468}, talent = false, charges = 1, class = "EVOKER", type = 7}, --Cauterizing Flame [365585] = {cooldown = 8, duration = 0, specs = {1467}, talent = false, charges = 1, class = "EVOKER", type = 7}, --Expunge [360823] = {cooldown = 8, duration = 0, specs = {1468}, talent = false, charges = 1, class = "EVOKER", type = 7}, --Naturalize @@ -750,6 +751,20 @@ do [374968] = {cooldown = 120, duration = 10, specs = {1467, 1468}, talent = false, charges = 1, class = "EVOKER", type = 5}, --Time Spiral [374227] = {cooldown = 120, duration = 8, specs = {1467, 1468}, talent = false, charges = 1, class = "EVOKER", type = 4}, --Zephyr [360806] = {cooldown = 15, duration = 20, specs = {1467, 1468}, talent = false, charges = 1, class = "EVOKER", type = 8}, --Sleep Walk + + [360827] = {cooldown = 30, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 3}, --Blistering Scales + [395152] = {cooldown = 30, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 1}, --Ebon Might + --[395160] = {cooldown = 0, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 0}, --Eruption + [396286] = {cooldown = 40, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 1}, --Upheaval + --[403208] = {cooldown = 0, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 0}, --Draconic Attunements + --[403264] = {cooldown = 3, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 0}, --Black Attunement + --[403265] = {cooldown = 3, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 0}, --Bronze Attunement + [403631] = {cooldown = 120, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 1}, --Breath of Eons + [404977] = {cooldown = 180, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 1}, --Time Skip + [406732] = {cooldown = 120, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 3}, --Spatial Paradox + [408233] = {cooldown = 60, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 5}, --Bestow Weyrnstone + [409311] = {cooldown = 12, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 1}, --Prescience + --[412710] = {cooldown = 0, duration = 0, specs = {1473}, talent = false, charges = 1, class = "EVOKER", type = 0}, --Timelessness } --this table store all cooldowns the player currently have available diff --git a/boot.lua b/boot.lua index 6dc74acc3..3ff49401c 100644 --- a/boot.lua +++ b/boot.lua @@ -4,8 +4,6 @@ --test if the packager will deploy to wago --https://github.com/LuaLS/lua-language-server/wiki/Annotations#documenting-types ---make an option to show death in the order of newest to oldest - _ = nil _G.Details = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") @@ -15,12 +13,12 @@ local addonName, Details222 = ... local version, build, date, tocversion = GetBuildInfo() - Details.build_counter = 11023 - Details.alpha_build_counter = 11023 --if this is higher than the regular counter, use it instead + Details.build_counter = 11700 + Details.alpha_build_counter = 11700 --if this is higher than the regular counter, use it instead Details.dont_open_news = true Details.game_version = version Details.userversion = version .. " " .. Details.build_counter - Details.realversion = 153 --core version, this is used to check API version for scripts and plugins (see alias below) + Details.realversion = 154 --core version, this is used to check API version for scripts and plugins (see alias below) Details.APIVersion = Details.realversion --core version Details.version = Details.userversion .. " (core " .. Details.realversion .. ")" --simple stirng to show to players diff --git a/classes/class_damage.lua b/classes/class_damage.lua index 9b3fbfd64..b4a202c3d 100644 --- a/classes/class_damage.lua +++ b/classes/class_damage.lua @@ -2663,19 +2663,28 @@ function damageClass:RefreshLine(instance, lineContainer, whichRowLine, rank, to --calculate the actor dps if ((Details.time_type == 2 and self.grupo) or not Details:CaptureGet("damage") or instance.segmento == -1 or Details.time_type == 3) then - if (instance.segmento == -1 and combat_time == 0) then - local actor = currentCombat(1, self.nome) - if (actor) then - local combatTime = actor:Tempo() - dps = damageTotal / combatTime - self.last_dps = dps + if (Details.time_type == 3 and Details.in_combat) then + local currentDps = Details.CurrentDps.GetCurrentDps(self.serial) + if (currentDps) then + dps = currentDps + end + end + + if (not dps) then + if (instance.segmento == -1 and combat_time == 0) then + local actor = currentCombat(1, self.nome) + if (actor) then + local combatTime = actor:Tempo() + dps = damageTotal / combatTime + self.last_dps = dps + else + dps = damageTotal / combat_time + self.last_dps = dps + end else dps = damageTotal / combat_time self.last_dps = dps end - else - dps = damageTotal / combat_time - self.last_dps = dps end else if (not self.on_hold) then @@ -3500,7 +3509,7 @@ function damageClass:ToolTip_DamageDone (instancia, numero, barra, keydown) local timeInCombat = 0 if (Details.time_type == 1 or not self.grupo) then timeInCombat = petActorObject:Tempo() - elseif (Details.time_type == 2) then + elseif (Details.time_type == 2 or Details.time_type == 3) then timeInCombat = petActorObject:GetCombatTime() end @@ -4721,7 +4730,7 @@ function damageClass:MontaInfoDamageDone() --I guess this fills the list of spel local actorCombatTime if (Details.time_type == 1 or not actorObject.grupo) then actorCombatTime = actorObject:Tempo() - elseif (Details.time_type == 2) then + elseif (Details.time_type == 2 or Details.time_type == 3) then actorCombatTime = breakdownWindowFrame.instancia.showing:GetCombatTime() end @@ -5700,7 +5709,7 @@ function damageClass:MontaDetalhesDamageDone (spellId, spellLine, instance) --th if (Details.time_type == 1 or not self.grupo) then meu_tempo = self:Tempo() - elseif (Details.time_type == 2) then + elseif (Details.time_type == 2 or Details.time_type == 3) then meu_tempo = breakdownWindowFrame.instancia.showing:GetCombatTime() end @@ -6266,7 +6275,7 @@ function damageClass:MontaTooltipAlvos (thisLine, index, instancia) --~deprecate local meu_tempo if (Details.time_type == 1 or not self.grupo) then meu_tempo = self:Tempo() - elseif (Details.time_type == 2) then + elseif (Details.time_type == 2 or Details.time_type == 3) then meu_tempo = breakdownWindowFrame.instancia.showing:GetCombatTime() end diff --git a/core/parser.lua b/core/parser.lua index 91372b9e9..ad8b7ec8d 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -170,6 +170,24 @@ [406785] = true, --invigorating spore cloud } + --list of buffs given by another player but should be considered as a self buff + local buffs_makeyourown = { + [395152] = true, --ebon might (evoker 10.1.5) + [410089] = true, --prescience (evoker 10.1.5) + } + + ---@class evokerinfo : table + ---@field key1 serial + ---@field key2 actorname + ---@field key3 controlflags + ---@field key4 valueamount + + --store all information about augmentation evokers ~roskash + local augmentation_cache = { + ebon_might = {}, + prescience = {}, + } + local empower_cache = {} ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -1181,17 +1199,57 @@ end ------------------------------------------------------------------------------------------------ - --amount add ~roskash - if (Details222.Roskash[sourceSerial]) then - local rSourceSerial, rSourceName, rSourceFlags = unpack(Details222.Roskash[sourceSerial]) - local roskashActor = damage_cache[rSourceSerial] + --amount add + --~roskash - augmentation evoker damage buff + if (augmentation_cache.ebon_might[sourceSerial]) then + ---actor buffed with ebonmight -> list of evokers whose buffed + ---@type table + local currentlyBuffedWithEbonMight = augmentation_cache.ebon_might[sourceSerial] + + for i, evokerInfo in ipairs(currentlyBuffedWithEbonMight) do + ---@cast evokerInfo evokerinfo + + ---@type serial, actorname, controlflags + local evokerSourceSerial, evokerSourceName, evokerSourceFlags = unpack(evokerInfo) - if (not roskashActor) then - roskashActor = _current_damage_container:PegarCombatente(rSourceSerial, rSourceName, rSourceFlags, true) + ---@type actor + local evokerActor = damage_cache[evokerSourceSerial] + + if (not evokerActor) then + evokerActor = _current_damage_container:PegarCombatente(evokerSourceSerial, evokerSourceName, evokerSourceFlags, true) + end + + if (evokerActor) then + if (Details.zone_type == "raid") then + evokerActor.extra_bar = evokerActor.extra_bar + (amount * 0.1389541) + else + evokerActor.extra_bar = evokerActor.extra_bar + (amount * 0.1966044) + end + end end + end + + if (spellId == 404908 and augmentation_cache.prescience[sourceSerial]) then + ---actor buffed with prescience -> list of evokers whose buffed + ---@type table + local currentlyBuffedWithPrescience = augmentation_cache.prescience[sourceSerial] + + for i, evokerInfo in ipairs(currentlyBuffedWithPrescience) do + ---@cast evokerInfo evokerinfo + + ---@type serial, actorname, controlflags + local evokerSourceSerial, evokerSourceName, evokerSourceFlags = unpack(evokerInfo) + + ---@type actor + local evokerActor = damage_cache[evokerSourceSerial] + + if (not evokerActor) then + evokerActor = _current_damage_container:PegarCombatente(evokerSourceSerial, evokerSourceName, evokerSourceFlags, true) + end - if (roskashActor) then - roskashActor.extra_bar = roskashActor.extra_bar + (amount * 0.14) + if (evokerActor) then + evokerActor.extra_bar = evokerActor.extra_bar + amount + end end end @@ -1200,11 +1258,11 @@ ownerActor.total = ownerActor.total + amount --e adiciona o dano ao pet --add owner targets - ownerActor.targets [targetName] = (ownerActor.targets [targetName] or 0) + amount + ownerActor.targets[targetName] = (ownerActor.targets[targetName] or 0) + amount ownerActor.last_event = _tempo - if (RAID_TARGET_FLAGS [targetRaidFlags]) then + if (RAID_TARGET_FLAGS[targetRaidFlags]) then --add the amount done for the owner ownerActor.raid_targets [targetRaidFlags] = (ownerActor.raid_targets [targetRaidFlags] or 0) + amount end @@ -2460,7 +2518,20 @@ end if (spellId == 395152) then --~roskash - Details222.Roskash[targetSerial] = {sourceSerial, sourceName, sourceFlags} + augmentation_cache.ebon_might[targetSerial] = augmentation_cache.ebon_might[targetSerial] or {} + ---@type evokerinfo + local evokerInfo = {sourceSerial, sourceName, sourceFlags, amount} + table.insert(augmentation_cache.ebon_might[targetSerial], evokerInfo) + + elseif (spellId == 410089) then + augmentation_cache.prescience[targetSerial] = augmentation_cache.prescience[targetSerial] or {} + ---@type evokerinfo + local evokerInfo = {sourceSerial, sourceName, sourceFlags, amount} + table.insert(augmentation_cache.prescience[targetSerial], evokerInfo) + end + + if (buffs_makeyourown[spellId]) then + sourceSerial, sourceName, sourceFlags = targetSerial, targetName, targetFlags end ------------------------------------------------------------------------------------------------ @@ -2716,7 +2787,7 @@ end end - function parser:buff_refresh(token, time, sourceSerial, sourceName, sourceFlags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, spellschool, tipo, amount) + function parser:buff_refresh(token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, spellschool, tipo, amount) if (not sourceName) then sourceName = names_cache[spellName] if (not sourceName) then @@ -2748,36 +2819,69 @@ end if (spellid == 395152) then --~roskash - Details222.Roskash[alvo_serial] = {sourceSerial, sourceName, sourceFlags} + local bFound = false + augmentation_cache.ebon_might[targetSerial] = augmentation_cache.ebon_might[targetSerial] or {} + + for index, evokerInfo in ipairs(augmentation_cache.ebon_might[targetSerial]) do + if (evokerInfo[1] == sourceSerial) then + evokerInfo[4] = amount + bFound = true + break + end + end + + if (not bFound) then + table.insert(augmentation_cache.ebon_might[targetSerial], {sourceSerial, sourceName, sourceFlags, amount}) + end + + elseif (spellid == 410089) then + local bFound = false + augmentation_cache.prescience[targetSerial] = augmentation_cache.prescience[targetSerial] or {} + + for index, evokerInfo in ipairs(augmentation_cache.prescience[targetSerial]) do + if (evokerInfo[1] == sourceSerial) then + evokerInfo[4] = amount + bFound = true + break + end + end + + if (not bFound) then + table.insert(augmentation_cache.prescience[targetSerial], {sourceSerial, sourceName, sourceFlags, amount}) + end end - if (sourceName == alvo_name and raid_members_cache [sourceSerial] and _in_combat) then + if (buffs_makeyourown[spellid]) then + sourceSerial, sourceName, sourceFlags = targetSerial, targetName, targetFlags + end + + if (sourceName == targetName and raid_members_cache [sourceSerial] and _in_combat) then --call record buffs uptime - parser:add_buff_uptime (token, time, sourceSerial, sourceName, sourceFlags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_REFRESH") + parser:add_buff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_REFRESH") - elseif (container_pets [sourceSerial] and container_pets [sourceSerial][2] == alvo_serial) then + elseif (container_pets [sourceSerial] and container_pets [sourceSerial][2] == targetSerial) then --um pet colocando uma aura do dono - parser:add_buff_uptime (token, time, alvo_serial, alvo_name, alvo_flags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_REFRESH") + parser:add_buff_uptime (token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_REFRESH") elseif (buffs_to_other_players[spellid]) then - parser:add_buff_uptime(token, time, alvo_serial, alvo_name, alvo_flags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_REFRESH") + parser:add_buff_uptime(token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_REFRESH") end if (_use_shield_overheal) then if (shield_spellid_cache[spellid] and amount) then - if (shield_cache[alvo_name] and shield_cache[alvo_name][spellid] and shield_cache[alvo_name][spellid][sourceName]) then + if (shield_cache[targetName] and shield_cache[targetName][spellid] and shield_cache[targetName][spellid][sourceName]) then if (ignored_overheal[spellid]) then - shield_cache[alvo_name][spellid][sourceName] = amount --refresh gives the updated amount + shield_cache[targetName][spellid][sourceName] = amount --refresh gives the updated amount return end --get the shield overheal - local overhealAmount = shield_cache[alvo_name][spellid][sourceName] + local overhealAmount = shield_cache[targetName][spellid][sourceName] --set the new shield amount - shield_cache[alvo_name][spellid][sourceName] = amount + shield_cache[targetName][spellid][sourceName] = amount if (overhealAmount > 0) then - return parser:heal(token, time, sourceSerial, sourceName, sourceFlags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, nil, 0, ceil (overhealAmount), 0, nil, true) + return parser:heal(token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, nil, 0, ceil (overhealAmount), 0, nil, true) end end end @@ -2790,7 +2894,7 @@ if (isWOTLK) then --buff refresh if (spellid == 27162 and false) then --Judgement Of Light --which player applied the judgement of light on this mob - TBC_JudgementOfLightCache[alvo_name] = {sourceSerial, sourceName, sourceFlags} + TBC_JudgementOfLightCache[targetName] = {sourceSerial, sourceName, sourceFlags} end end @@ -2799,16 +2903,16 @@ --buff uptime if (raid_members_cache [sourceSerial]) then --call record debuffs uptime - parser:add_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, "DEBUFF_UPTIME_REFRESH") - elseif (raid_members_cache [alvo_serial] and not raid_members_cache [sourceSerial]) then --alvo � da raide e o caster � inimigo - parser:add_bad_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellName, spellschool, "DEBUFF_UPTIME_REFRESH", amount) + parser:add_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "DEBUFF_UPTIME_REFRESH") + elseif (raid_members_cache [targetSerial] and not raid_members_cache [sourceSerial]) then --alvo � da raide e o caster � inimigo + parser:add_bad_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, spellschool, "DEBUFF_UPTIME_REFRESH", amount) end end end end -- ~unbuff - function parser:unbuff(token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, spellSchool, tipo, amount) + function parser:unbuff(token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, spellSchool, tipo, amount) if (not sourceName) then sourceName = names_cache[spellName] if (not sourceName) then @@ -2821,7 +2925,28 @@ if (tipo == "BUFF") then if (spellid == 395152) then --~roskash - Details222.Roskash[targetSerial] = nil + if (augmentation_cache.ebon_might[targetSerial]) then + for index, evokerInfo in ipairs(augmentation_cache.ebon_might[targetSerial]) do + if (evokerInfo[1] == sourceSerial) then + table.remove(augmentation_cache.ebon_might[targetSerial], index) + break + end + end + end + + elseif (spellid == 410089) then + if (augmentation_cache.prescience[targetSerial]) then + for index, evokerInfo in ipairs(augmentation_cache.prescience[targetSerial]) do + if (evokerInfo[1] == sourceSerial) then + table.remove(augmentation_cache.prescience[targetSerial], index) + break + end + end + end + end + + if (buffs_makeyourown[spellid]) then + sourceSerial, sourceName, sourceFlags = targetSerial, targetName, targetFlags end if (spellid == 272790 and cacheAnything.track_hunter_frenzy) then --hunter pet Frenzy spellid @@ -2835,20 +2960,20 @@ if (sourceName == targetName and raid_members_cache [sourceSerial] and _in_combat) then --call record buffs uptime - parser:add_buff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_OUT") + parser:add_buff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_OUT") elseif (container_pets [sourceSerial] and container_pets [sourceSerial][2] == targetSerial) then --um pet colocando uma aura do dono - parser:add_buff_uptime (token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_OUT") + parser:add_buff_uptime (token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_OUT") elseif (buffs_to_other_players[spellid]) then - parser:add_buff_uptime(token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, "BUFF_UPTIME_OUT") + parser:add_buff_uptime(token, time, targetSerial, targetName, targetFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "BUFF_UPTIME_OUT") end if (spellid == SPELLID_MONK_GUARD) then --BfA monk talent if (monk_guard_talent [sourceSerial]) then local damage_prevented = monk_guard_talent [sourceSerial] - (amount or 0) - parser:heal (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, spellSchool, damage_prevented, ceil (amount or 0), 0, 0, true) + parser:heal (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, spellSchool, damage_prevented, ceil (amount or 0), 0, 0, true) end elseif (spellid == 388007 or spellid == 388011) then --buff: bleesing of the summer @@ -2869,7 +2994,7 @@ --can't use monk guard since its overheal is computed inside the unbuff if (amount > 0 and spellid ~= SPELLID_MONK_GUARD) then --removing the nil at the end before true for is_shield, I have no documentation change about it, not sure the reason why it was addded - return parser:heal (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, nil, 0, ceil (amount), 0, 0, true) --0, 0, nil, true + return parser:heal (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, nil, 0, ceil (amount), 0, 0, true) --0, 0, nil, true else return end @@ -2928,9 +3053,9 @@ --buff uptime if (raid_members_cache [sourceSerial]) then --call record debuffs uptime - parser:add_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, "DEBUFF_UPTIME_OUT") + parser:add_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, "DEBUFF_UPTIME_OUT") elseif (raid_members_cache [targetSerial] and not raid_members_cache [sourceSerial]) then --alvo � da raide e o caster � inimigo - parser:add_bad_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, alvo_flags2, spellid, spellName, spellSchool, "DEBUFF_UPTIME_OUT") + parser:add_bad_debuff_uptime (token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellid, spellName, spellSchool, "DEBUFF_UPTIME_OUT") end if ((bitfield_debuffs[spellName] or bitfield_debuffs[spellid]) and targetSerial) then @@ -6203,7 +6328,9 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 Details:Destroy(cacheAnything.paladin_vivaldi_blessings) Details:Destroy(cacheAnything.rampage_cast_amount) - Details:Destroy(Details222.Roskash) --~roskash + + Details:Destroy(augmentation_cache.ebon_might) --~roskash + Details:Destroy(augmentation_cache.prescience) cacheAnything.track_hunter_frenzy = Details.combat_log.track_hunter_frenzy diff --git a/frames/window_breakdown/window_playerbreakdown_auras.lua b/frames/window_breakdown/window_playerbreakdown_auras.lua index b2371ff0c..ccd559112 100644 --- a/frames/window_breakdown/window_playerbreakdown_auras.lua +++ b/frames/window_breakdown/window_playerbreakdown_auras.lua @@ -7,9 +7,9 @@ local CreateFrame = CreateFrame local GetSpellInfo = GetSpellInfo local createAuraTabOnBreakdownWindow = function(tab, frame) - local scroll_line_amount = 22 + local scroll_line_amount = 25 local scroll_width = 410 - local scrollHeight = 445 + local scrollHeight = 495 local scroll_line_height = 19 local text_size = 10 @@ -55,29 +55,34 @@ local createAuraTabOnBreakdownWindow = function(tab, frame) local iconTexture = line:CreateTexture("$parentIcon", "overlay") iconTexture:SetSize(scroll_line_height -2 , scroll_line_height - 2) local nameLabel = line:CreateFontString("$parentName", "overlay", "GameFontNormal") - local uptimeLabel = line:CreateFontString("$parentName", "overlay", "GameFontNormal") - local applyLabel = line:CreateFontString("$parentName", "overlay", "GameFontNormal") - local refreshLabel = line:CreateFontString("$parentName", "overlay", "GameFontNormal") + local uptimeLabel = line:CreateFontString("$parentUptime", "overlay", "GameFontNormal") + local uptimePercentLabel = line:CreateFontString("$parentPercent", "overlay", "GameFontNormal") + local applyLabel = line:CreateFontString("$parentApplyed", "overlay", "GameFontNormal") + local refreshLabel = line:CreateFontString("$parentRefreshed", "overlay", "GameFontNormal") detailsFramework:SetFontSize(nameLabel, text_size) detailsFramework:SetFontSize(uptimeLabel, text_size) + detailsFramework:SetFontSize(uptimePercentLabel, text_size) detailsFramework:SetFontSize(applyLabel, text_size) detailsFramework:SetFontSize(refreshLabel, text_size) iconTexture:SetPoint("left", line, "left", 2, 0) nameLabel:SetPoint("left", iconTexture, "right", 2, 0) uptimeLabel:SetPoint("left", line, "left", 186, 0) + uptimePercentLabel:SetPoint("left", line, "left", 220, 0) applyLabel:SetPoint("left", line, "left", 276, 0) refreshLabel:SetPoint("left", line, "left", 322, 0) line.Icon = iconTexture line.Name = nameLabel line.Uptime = uptimeLabel + line.UptimePercent = uptimePercentLabel line.Apply = applyLabel line.Refresh = refreshLabel nameLabel:SetJustifyH("left") uptimeLabel:SetJustifyH("left") + uptimePercentLabel:SetJustifyH("left") applyLabel:SetJustifyH("center") refreshLabel:SetJustifyH("center") @@ -102,7 +107,8 @@ local createAuraTabOnBreakdownWindow = function(tab, frame) line.Icon:SetTexCoord(.1, .9, .1, .9) line.Name:SetText(aura[2]) - line.Uptime:SetText(detailsFramework:IntegerToTimer(aura[3]) .. "(|cFFBBAAAA" .. math.floor(aura[6]) .. "%|r)") + line.Uptime:SetText(detailsFramework:IntegerToTimer(aura[3])) + line.UptimePercent:SetText("|cFFBBAAAA" .. math.floor(aura[6]) .. "%|r") line.Apply:SetText(aura[4]) line.Refresh:SetText(aura[5]) diff --git a/frames/window_breakdown/window_playerbreakdown_list.lua b/frames/window_breakdown/window_playerbreakdown_list.lua index 4a7bfb9af..ce08942e7 100644 --- a/frames/window_breakdown/window_playerbreakdown_list.lua +++ b/frames/window_breakdown/window_playerbreakdown_list.lua @@ -119,10 +119,12 @@ function breakdownWindowPlayerList.CreatePlayerListFrame() local playerObject = data[index] if (playerObject) then local line = self:GetLine(i) - line.playerObject = playerObject - line.combatObject = combatObject - line.index = index - line:UpdateLine(topResult, encounterId, difficultyId) + if (line) then + line.playerObject = playerObject + line.combatObject = combatObject + line.index = index + line:UpdateLine(topResult, encounterId, difficultyId) + end end end end @@ -472,7 +474,7 @@ function breakdownWindowPlayerList.CreatePlayerListFrame() local updatePlayerList = function() refreshPluginButtons() - playerScroll:SetNumFramesShown(math.floor(playerScroll:GetHeight() / player_line_height)) + playerScroll:SetNumFramesShown(math.floor(playerScroll:GetHeight() / player_line_height)) --looks like it is not updating the 'totalLines' at the refresh function ---@type actor[] local playerList = breakdownWindowPlayerList.BuildPlayerList() diff --git a/frames/window_options2_sections.lua b/frames/window_options2_sections.lua index 8959d9050..770c80c2e 100644 --- a/frames/window_options2_sections.lua +++ b/frames/window_options2_sections.lua @@ -7066,8 +7066,8 @@ do afterUpdate() Details:ClearParserCache() end, - name = DF:AddClassIconToText("Predict Augmentation Damage", false, "EVOKER"), - desc = "Predict Augmentation Damage", + name = DF:AddClassIconToText("Predict Augmentation Buffs", false, "EVOKER"), + desc = "Calculate how much the Augmentation Evoker are buffing other players", boxfirst = true, }, diff --git a/functions/profiles.lua b/functions/profiles.lua index d9f21a54b..2954429ce 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -1153,7 +1153,7 @@ local default_player_data = { merge_gemstones_1007 = false, merge_critical_heals = false, evoker_calc_damage = false, - evoker_show_realtimedps = true, + evoker_show_realtimedps = false, }, --this is used by the new data capture for charts diff --git a/functions/skins.lua b/functions/skins.lua index 1c0553103..549c670ff 100644 --- a/functions/skins.lua +++ b/functions/skins.lua @@ -2524,191 +2524,6 @@ local addonName, Details222 = ... }) - _detalhes:InstallSkin ("10 Years Anniversary", { - file = [[Interface\AddOns\Details\images\skins\ten_years_skin.tga]], - author = "Details!", - version = "1.0", - site = "unknown", - desc = "based on AddonSkins for ElvUI, this skin has opaque title bar and background.", - no_cache = true, - - --general - can_change_alpha_head = true, - - --icon anchors - icon_anchor_main = {-4, -5}, - icon_anchor_plugins = {-7, -13}, - icon_plugins_size = {19, 18}, - - --micro frames - micro_frames = { - color = {0.525490, 0.525490, 0.525490, 1}, - font = "FORCED SQUARE", - size = 11, - textymod = 1, - }, - - -- the four anchors (for when the toolbar is on the top side) - icon_point_anchor = {-35, -0.5}, - left_corner_anchor = {-107, 0}, - right_corner_anchor = {96, 0}, - - -- the four anchors (for when the toolbar is on the bottom side) - icon_point_anchor_bottom = {-37, 12}, - left_corner_anchor_bottom = {-107, 0}, - right_corner_anchor_bottom = {96, 0}, - - --[[ callback function execute after all changes on the window, first argument is this skin table, second is the instance where the skin was applied --]] - callback = function(self, instance) end, - --[[ control_script is a OnUpdate script, it start right after all changes on the window and also after the callback --]] - --[[ control_script_on_start run before the control_script, use it to reset values if needed --]] - control_script_on_start = nil, - control_script = nil, - - --instance overwrites - --[[ when a skin is selected, all customized properties of the window is reseted and then the overwrites are applied]] - --[[ for the complete cprop list see the file classe_instancia_include.lua]] - - icon_on_top = true, - icon_ignore_alpha = true, - icon_titletext_position = {2, 5}, - - instance_cprops = { - menu_icons_alpha = 0.92, - ["show_statusbar"] = false, - ["color"] = {1,1,1,1}, - ["menu_anchor"] = {17, 2, ["side"] = 2}, - ["bg_r"] = 0.517647058823529, - ["color_buttons"] = {1,1,1,1}, - ["bars_sort_direction"] = 1, - ["instance_button_anchor"] = {-27,1}, - ["row_info"] = { - ["textR_outline"] = false, - ["textL_outline"] = false, - ["use_spec_icons"] = true, - ["textL_enable_custom_text"] = false, - ["icon_file"] = "Interface\\AddOns\\Details\\images\\spec_icons_normal", - ["texture_background_file"] = "Interface\\AddOns\\Details\\images\\BantoBar", - ["start_after_icon"] = true, - ["texture_highlight"] = "Interface\\FriendsFrame\\UI-FriendsList-Highlight", - ["textR_enable_custom_text"] = false, - ["textR_custom_text"] = "{data1} ({data2}, {data3}%)", - ["percent_type"] = 1, - ["fixed_text_color"] = {0.905882352941177,0.905882352941177,0.905882352941177,1}, - ["space"] = { - ["right"] = -3, - ["right_noborder"] = -3, - ["left"] = 1, - ["left_noborder"] = 1, - ["between"] = 1, - }, - ["texture"] = "DGround", - ["texture_background_class_color"] = false, - ["fixed_texture_background_color"] = {0,0,0,0.295484036207199}, - ["font_face_file"] = "Fonts\\ARIALN.TTF", - ["alpha"] = 1, - ["textR_class_colors"] = false, - ["models"] = { - ["upper_model"] = "Spells\\AcidBreath_SuperGreen.M2", - ["lower_model"] = "World\\EXPANSION02\\DOODADS\\Coldarra\\COLDARRALOCUS.m2", - ["upper_alpha"] = 0.5, - ["lower_enabled"] = false, - ["lower_alpha"] = 0.1, - ["upper_enabled"] = false, - }, - ["backdrop"] = { - ["enabled"] = false, - ["size"] = 5, - ["color"] = {0, 0, 0, 1}, - ["texture"] = "Details BarBorder 1", - }, - ["texture_background"] = "BantoBar", - ["textL_custom_text"] = "{data1}. {data3}{data2}", - ["no_icon"] = false, - ["font_size"] = 16, - ["height"] = 21, - ["textL_class_colors"] = false, - ["font_face"] = "FORCED SQUARE", - ["texture_class_colors"] = true, - ["texture_file"] = "Interface\\AddOns\\Details\\images\\bar_background", - ["textL_show_number"] = true, - ["fixed_texture_color"] = {0.862745098039216,0.862745098039216,0.862745098039216,1}, - }, - ["bars_grow_direction"] = 1, - ["menu_alpha"] = { - ["enabled"] = false, - ["onleave"] = 1, - ["ignorebars"] = false, - ["iconstoo"] = true, - ["onenter"] = 1, - }, - ["total_bar"] = { - ["enabled"] = false, - ["only_in_group"] = true, - ["icon"] = "Interface\\ICONS\\INV_Sigil_Thorim", - ["color"] = {1,1,1}, - }, - ["plugins_grow_direction"] = 1, - ["strata"] = "LOW", - ["show_sidebars"] = true, - ["show_sidebars_need_resize_by"] = 1, - ["hide_in_combat_alpha"] = 0, - ["menu_icons"] = {true, true, true, true, true, false, ["space"] = -1, ["shadow"] = true}, - ["desaturated_menu"] = false, - ["auto_hide_menu"] = { - ["left"] = false, - ["right"] = false, - }, - ["window_scale"] = 1.0, - ["grab_on_top"] = false, - ["menu_anchor_down"] = {16, -2}, - ["statusbar_info"] = { - ["alpha"] = 1, - ["overlay"] = {1,1,1}, - }, - ["hide_icon"] = true, - ["micro_displays_side"] = 2, - ["bg_alpha"] = 1, - ["auto_current"] = true, - ["toolbar_side"] = 1, - ["bg_g"] = 0.517647058823529, - ["backdrop_texture"] = "Details Ground", - ["hide_in_combat"] = false, - ["skin"] = "ElvUI Style II", - ["menu_icons_size"] = 0.850000023841858, - ["wallpaper"] = { - ["enabled"] = true, - ["width"] = 265.999979475717, - ["texcoord"] = {0.0480000019073486,0.298000011444092,0.630999984741211,0.755999984741211}, - ["overlay"] = {0.999997794628143,0.999997794628143,0.999997794628143,0.799998223781586}, - ["anchor"] = "all", - ["height"] = 226.000007591173, - ["alpha"] = 0.800000071525574, - ["texture"] = "Interface\\AddOns\\Details\\images\\skins\\elvui", - }, - ["stretch_button_side"] = 1, - ["attribute_text"] = { - ["enabled"] = true, - ["shadow"] = true, - ["side"] = 1, - ["enable_custom_text"] = false, - ["custom_text"] = "{name}", - ["text_face"] = "FORCED SQUARE", - ["anchor"] = {-18, 5}, - ["text_color"] = {1,1,1,0.7}, - ["text_size"] = 12, - }, - ["bg_b"] = 0.517647058823529, - }, - - skin_options = { - {spacement = true, type = "button", name = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON1"], func = align_right_chat, desc = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON1_DESC"]}, - {type = "button", name = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON2"], func = set_tooltip_elvui1, desc = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON2_DESC"]}, - {type = "button", name = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON3"], func = set_tooltip_elvui2, desc = Loc ["STRING_OPTIONS_SKIN_ELVUI_BUTTON3_DESC"]}, - } - }) - - _detalhes:InstallSkin ("Safe Skin Legion Beta", { file = [[Interface\AddOns\Details\images\skins\classic_skin_v1.blp]], author = "Details!", diff --git a/images/skins/ten_years_skin.tga b/images/skins/ten_years_skin.tga deleted file mode 100644 index 71bccbbb5f0399e4c6f5828e9d87f05b38085b27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194348 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 z

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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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