From 7805d269e622c10021c1ba21a6001c3a321ee5ab Mon Sep 17 00:00:00 2001 From: Tercio Date: Wed, 27 Sep 2017 17:59:04 -0300 Subject: [PATCH] - Rolling back to Mercurial repository. --- Libs/DF/all_addons.tga | Bin 148370 -> 0 bytes Libs/DF/cooltip.lua | 14 +- Libs/DF/fw.lua | 2 +- boot.lua | 11 +- classes/classe_combate.lua | 92 +++++++++++++ classes/classe_damage.lua | 2 +- classes/container_historico.lua | 198 +++++++++++++++++--------- core/control.lua | 18 ++- core/parser.lua | 38 ++--- core/windows.lua | 54 +++++++- functions/boss.lua | 16 +++ functions/profiles.lua | 78 +++++++++++ functions/spells.lua | 6 +- gumps/janela_principal.lua | 30 +++- startup.lua | 237 ++++++++++++++++++++++++-------- 15 files changed, 626 insertions(+), 170 deletions(-) delete mode 100644 Libs/DF/all_addons.tga diff --git a/Libs/DF/all_addons.tga b/Libs/DF/all_addons.tga deleted file mode 100644 index 5b84de02b14642c3b9194ce6b8ea4111be84b367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148370 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 ~q2XkYE$!UwLXgn7 zPnqcy0Hbk2#&m^O2Eh)4bP2Gc63nOokKFc(GzK_J%VYy6CtTy^QsBbC8N;yp%?R z8?8vaY3-=vc6dz-{#Oeerv=-)&G=LxRxMAYme6Mn$W#Nu)qqARgL-fz2lsC0N}ODY zS=zF5Rg{q>cd=C-i&dp~ZC1k6rC^G))Jd$0JF|JXlK`mAI8ebTR7oT+R<8((D;`S7 zUg`pyxJwjau?04pXMsBrAi%!Qm@tWGBY|Q5E-tWecW|RZqL2p1coOy!o)XAu!<90Y zb}jx`3;eY?9#$<#-V~23$^C>;qY)Q+wxSfyXCqXOJHi>5 zvCfAxW=4c6P`U!1XQFv7?D{bWB=6JUFg|ae+(SEL2j(iUZ{k~kHM)Bv-86CPhiV4m z>h`{!j`@^zuT^y34pok9m3P`kMdoZ(aL#tf%qmF7HFe(kwVFv_#RK=`A!0$CxLa34uuEcucRSS;-m&A^)e_sVaw5@kD@cg2h zfkoTq8_K!xEfp_1PRwnO!ke*!j=zHxJ)?qa-&4uFqslvYUj^H5$UEmK_i#tfC1+J| z{zDaUOgj)-jlGcv zz@M{Qg}qyVSFU+3=KtVMMHwFA&+&|&{iYgDeWd#R_Z8WMQO|Yz=N|qHIDE}?;h=#( zBgTvzoG~<{d9!D$tG!buX{n$*Ph}|tUK1qDKq2tw=>Xum7@9jh>CbNdHtQ-{D^vj( zx@ZCZE^mZtw9w_-p&qS}oA!VL%@CeOk6bksDy=G2ae$XTfV2!2$?78LYa#oAPG$^p za~;FP<%~Tw7f>9YHcja({ybp(!sW}Cb<7~s69%kmYinhoF1_YS^T|M<`P#r)8Va8= z&}Y_|ZOub5&}a5FTRv;Pc+zb97%u`SGUetLXwsx9*ia@eNH!I4*8tizLB|@2#Wlc~8Ucl| zMtc5G1K?N>G$fINVWeh+y{dTnAwV~TAr%Bxf-D2Xz5TRu;3*GT7YFK^jWp#u8&GHR zy=>fJ33qM*3X8MyfHL5s0y0^ZlHXMgG$ly{NRk8);p%|c2+}##r22Rr;gl+j%^+_a zZ;;z37vwhTa;YRIOH(FHBwm^)52P;yd8{M{D@gMJ=m7vd;0^M|0H1{>kH(pnstr8V z6rq9?cif0HH!|2r?=G@YddZ;b#!xkqyDlA$;Qo=tDX6+huBc&M19Z|zToYz6He!E6 zZQ96BLM>|{t|m#Mmg9dK0-8`>wv)YW6exM+6@u;9t_IcgBYWEyFD^!=x#%Z zwh@Tx0u@0_e}`A0&HxC=eqBV{+X4!
  • (yDvL36hf7rwDp9cyH1reM_7^JOMkX3P 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

    2=fyEtDxDM-+5wtBsE@L0!~4}(0IUt_ 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 E0087Ry8r+H diff --git a/Libs/DF/cooltip.lua b/Libs/DF/cooltip.lua index 50ab5c49..14d5ed2b 100644 --- a/Libs/DF/cooltip.lua +++ b/Libs/DF/cooltip.lua @@ -351,14 +351,19 @@ function DF:CreateCoolTip() end end) - + frame1:SetScript ("OnHide", function (self) CoolTip.active = false CoolTip.buttonClicked = false CoolTip.mouseOver = false + + --> reset parent and strata + frame1:SetParent (UIParent) + frame2:SetParent (UIParent) + frame1:SetFrameStrata ("TOOLTIP") + frame2:SetFrameStrata ("TOOLTIP") end) - - + ---------------------------------------------------------------------- --> Button Creation Functions ---------------------------------------------------------------------- @@ -2903,9 +2908,10 @@ function DF:CreateCoolTip() CoolTip.Host = nil DF:FadeFrame (frame1, 1) DF:FadeFrame (frame2, 1) - end + + --> old function call function CoolTip:ShowMe (host, arg2) --> ignore if mouse is up me diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index 7ba82815..4692e714 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,5 +1,5 @@ -local dversion = 55 +local dversion = 56 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary (major, minor) diff --git a/boot.lua b/boot.lua index bf272f17..8dfae69f 100644 --- a/boot.lua +++ b/boot.lua @@ -3,7 +3,7 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.build_counter = 4690 + _detalhes.build_counter = 4771 _detalhes.userversion = "v7.3.0." .. _detalhes.build_counter _detalhes.realversion = 126 --core version _detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" @@ -21,12 +21,13 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) --[[ -|cFFFFFF00v7.3.0.4677.126 (|cFFFFCC00Set 10th, 2017|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r During mythic dungeons, the trash segments will be merged into a new segment at the end of the boss encounter (instead of merging on the fly while cleaning up).\n\n - +|cFFFFFF00v7.3.0.4723.126 (|cFFFFCC00Set 22th, 2017|r|cFFFFFF00)|r:\n\n +|cFFFFFF00-|r Fixed overall dungeon segments being added to overall data.\n\n --]] - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v7.3.0.4677.126 (|cFFFFCC00Set 10th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r During mythic dungeons, the trash segments will be merged into a new segment at the end of the boss encounter (instead of merging on the fly while cleaning up).\n\n|cFFFFFF00v7.3.0.4615.125 (|cFFFFCC00Set 09th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Setting up the dungeon stuff as opt-in for early adopters while we continue to make improvements on the system.\n\n|cFFFFFF00v7.3.0.4586.125 (|cFFFFCC00Set 08th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Formating mythic+ dungeon segments, each segment should count the boss trash + boss fight.\n\n|cFFFFFF00-|r At the end of the mythic+ dungeon, it should create a new segment adding up all segments described above.\n\n|cFFFFFF00v7.3.0.4499.124 (|cFFFFCC00Set 05th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added an option to always show all players when using the standard mode. Option under PvP/PvE bracket on the options panel.\n\n|cFFFFFF00-|r Added a setting to exclude healing done lines from the death log below a certain healing amount. This options is also under PvP/PvE bracket.\n\n|cFFFFFF00-|r Fixed the guild selection on the ranking panel.\n\n|cFFFFFF00v7.3.0.4467.124 (|cFFFFCC00August 29th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Damage or Healing record for the encounter should be printed on chat on the boss pull.\nUse /run Details.announce_damagerecord.enabled = false; to disable.\n\n|cFFFFFF00v7.2.5.4437.124 (|cFFFFCC00August 21th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added healing done cap for death log. Use /run Details.deathlog_healingdone_min = 10000\n\n|cFFFFFF00-|r Fixed an issue where the alpha from the fixed bar color was used even when this option was disabled.\n\n|cFFFFFF00v7.2.5.4436.124 (|cFFFFCC00August 17th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Attempt to fix the issue where the window doesn't update after entering a raid or reseting data.\n\n|cFFFFFF00v7.2.5.4434.124 (|cFFFFCC00August 10th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added buttons to create an aura at Aura tab on the Player Details window.\n\n|cFFFFFF00-|r Fixes and improvements on the damage rank panel.\n\n|cFFFFFF00-|r Best damage or healing for the player on the current boss encounter is now shown on the spec icon tooltip.\n\n|cFFFFFF00-|r Major revamp on the aura creation panel.\n\n|cFFFFFF00v7.2.5.4369.124 (|cFFFFCC00August 1st, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! can now track debuff applications (stack) and refreshes.\n\n|cFFFFFF00-|r Added new tab on Player Detail Window called 'Auras', you can see your buffs and debuffs from there.\n\n|cFFFFFF00-|r Death log now show debuff applications.\n\n|cFFFFFF00v7.2.5.4275.123 (|cFFFFCC00July 18th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed some issues with tooltiops popup when the user press SHIFT.\n\n|cFFFFFF00-|r Now is possible to change the bar durating when selecting Cast Start trigger on Details! Forge.\n\n|cFFFFFF00-|r Kil'Jaeden adds should be consolidated into only one actor instead of having one for each player targeted.\n\n|cFFFFFF00v7.2.5.4236.122 (|cFFFFCC00July 05th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r The alert to open the raid ranking after a boss kill, is now shown for 10 seconds (down from 40).\n\n|cFFFFFF00-|r Added a report button on the raid ranking panel and boss are sort alphabetically.\n\n|cFFFFFF00-|r Fixed some issues on the combatlog introduced on the wow patch 7.2.5 where sometimes the source of an event has no name.\n\n|cFFFFFF00-|r Ticket #209, fixed more issues with the comparison panel where are pets involved.\n\n|cFFFFFF00v7.2.5.4201.121 (|cFFFFCC00June 26th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed Monk Stagger where it was only shown on the friendly fire and not under the Damage Taken display.\n\n|cFFFFFF00-|r Added Forge and Ranking options on the main menu (orange cogwheel).\n\n|cFFFFFF00v7.2.5.4102.121 (|cFFFFCC00June 22th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! Forge has updated and now is more usder friendly.\n\n|cFFFFFF00-|r Fixed an issue with player buff uptime where sometimes some buffs wans't showing in the tooltip.\n\n|cFFFFFF00v7.2.5.3968.120 (|cFFFFCC00June 20th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r New Death Recap implemented! replaces the default from Blizzard and can be configured at Options > Raid Tools.\n\n|cFFFFFF00-|r New Guild Damage and Heal rank on '/details ranking' panel.\n\n|cFFFFFF00-|r Added a Guild Sync button on the Details! Ranking Panel.\n\n|cFFFFFF00-|r Added Custom display 'Damage on Shields', useful for encounter like Maiden of Vigilance where there's big shields to be removed and you want to know who is doing more damage to it.\n\n|cFFFFFF00-|r Added Heal Absorbed display under Heal bracket.\n\nHeal Absorb are the heal denied by abilities such like DK's Necrotic Strike or raid boss Sisters of the Moon 'Embrace of the Eclipse' ability.\nThe tooltip of this display shows which players got heal denied, which abilities absorbed the heal, which abilities tried to heal but got the heal denied.\n\n|cFFFFFF00-|r Added Alternate Power display under Energy bracket, it shows the total of alternate power gain from each player, useful for encounters such as Demonic Inquisition.\n\n|cFFFFFF00-|r 'First Hit' message after pulling a boss, now also shows who the boss is targeting (almost always is who pulled).\n\n|cFFFFFF00-|r Raid Dps {rdps} and Hps {rhps} can now be used on the Broker Data Feed..\n\n|cFFFFFF00-|r Fixed an issue with Chromie from the scenario 'The Deaths of Chromie' where she wasn't being shown on the meter.\n\n|cFFFFFF00-|r Fixed Paladin 'Light of the Martyr' damage to self.\n\n|cFFFFFF00-|r Ticket #198 'Script Error' Fixed.\n\n|cFFFFFF00v7.2.0.3703.119 (|cFFFFCC00May 29th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an error while killing low level mobs with warrior class.\n\n|cFFFFFF00v7.2.0.3693.118 (|cFFFFCC00May 25th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fury Warrior shouldn't be assigned as Protection any more.\n\n|cFFFFFF00-|r Some parser fixes.\n\n|cFFFFFF00v7.2.0.3673.118 (|cFFFFCC00May 09th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #187: Fixed an issue when comparing hunter pets on the player detail window.\n\n|cFFFFFF00-|r Ticket #189 #186: Fixed a taint issue for some classes when using friendly nameplates on.\n\n|cFFFFFF00v7.2.0.3512.116 (|cFFFFCC00April 27th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Havoc Demon Hunter: your fury energy is being shown under Mana Restored (don't ask me why, the combat log is telling us it's mana).\n\n|cFFFFFF00-|r Pets now are shown on damage tooltips.\n\n|cFFFFFF00-|r Pets are now also shown on the comparison panel.\n\n|cFFFFFF00v7.2.0.3474.116 (|cFFFFCC00April 20th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Plugin: Raid Check > added some food buffs which wasn't being tracked.\n\n|cFFFFFF00v7.2.0.3467.116 (|cFFFFCC00April 07th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fix for the custom display window where apply and cancel buttons where over the edit window.\n\n|cFFFFFF00-|r Fix for an issue on editing a bookmark.\n\n|cFFFFFF00v7.1.5.3459.116 (|cFFFFCC00Mar 21th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue on dynamic overall data where it wasn't showing DPS.\n\n|cFFFFFF00-|r Fixed an issue with Apply, Save and Cancel buttons when editing a custom display.\n\n|cFFFFFF00-|r Removed the Damage and Healing presets for custom displays, now is only possible create custom displays by scripting them.\n\n|cFFFFFF00v7.1.5.3431.116 (|cFFFFCC00Mar 15th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with bar orientation right to left where fixed bar color isn't working.\n\n|cFFFFFF00-|r The nickname field now use FrizQuadrataTT font and shall be compatible with Cyrillic.\n\n|cFFFFFF00v7.1.5.3418.116 (|cFFFFCC00Mar 1st, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #167 fix: Light of the Martyr self-damage now does reduce the healing done (following WCL method).\n\n|cFFFFFF00-|r Ticket #169 fix: Damage Prevented is now working for new segments.\n\n|cFFFFFF00-|r Fixed an issue where sometimes BeastMaster's Hati pet wasn't detected correctly.\n\n|cFFFFFF00v7.1.5.3369.116 (|cFFFFCC00Feb 07th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added custom display 'Dynamic Overall Damage' for mythic dungeons.\n\n|cFFFFFF00-|r Fix for Ticket #168: 'Auto Hide While [Not] Inside Instance is broken'.\n\n|cFFFFFF00-|r The bar truncate frame 'DetailsLeftTextAntiTruncate' is now created on Details! load instead on demand.\n\n|cFFFFFF00v7.1.5.3315.116 (|cFFFFCC00Jan 23th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #162: 'no Monochrome font' available, added an experimental slash command: /run _detalhes:UseOutline ('MONOCHROME').\n\n|cFFFFFF00-|r Ticket #158: 'no elapsed time shown on report to chat', added the elapsed time when reporting a segment.\n\n|cFFFFFF00-|r Ticket #164: 'error when browsing segments', an attempt to fix the problem has been made.\n\n|cFFFFFF00v7.1.5.3305.116 (|cFFFFCC00Jan 15th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Another fix for mythic dungeons overall data reset (thanks Tharai @ Curseforge).\n\n|cFFFFFF00-|r Fix for spec detection on PvP Arenas (thanks Pas06 @ Curseforge).\n\n|cFFFFFF00v7.1.0.3276.115 (|cFFFFCC00Jan 08th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the overall data not reseting when starting a new mythic+ dungeon.\n\n|cFFFFFF00v7.1.0.3266.115 (|cFFFFCC00Dec 29th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with overall data not updating correctly at the end of the combat.\n\n|cFFFFFF00-|r Added a tutorial line on the window when the user access overall data.\n\n|cFFFFFF00v7.1.0.3236.115 (|cFFFFCC00Dec 19th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Integration with BigWigs should be working okay now.\n\n|cFFFFFF00v7.1.0.3231.115 (|cFFFFCC00Dec 15th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Disabled the link with BigWigs to avoid the 'RegisterMessage' error on every login.\n\n|cFFFFFF00v7.1.0.3229.115 (|cFFFFCC00Dec 09th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r When a window is locked, resize grips shouldn't be enabled messing with bar mouse over.\n\n|cFFFFFF00v7.0.3.3222.115 (|cFFFFCC00November 28th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Unstable Affliction to common spells with the same name.\n\n|cFFFFFF00-|r Fixed few issues with built-in plugins.\n\n|cFFFFFF00v7.0.3.3202.115 (|cFFFFCC00November 08th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Weakauras creator from the Encounter Details plugin and '/details forge' shall work correctly now with Trials of Valor.\n\n|cFFFFFF00-|r Raid history should now be recording your Trials of Valor kills.\n\n|cFFFFFF00-|r Added Trials of Valor raid info, good luck and have fun!.\n\n|cFFFFFF00v7.0.3.3201.115 (|cFFFFCC00November 04th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fix for Paladin holy icon.\n\n|cFFFFFF00-|r Fix for Rogue outlaw icon.\n\n|cFFFFFF00-|r Fixed misc displays with bar sorted by ascending order.\n\n|cFFFFFF00-|r Fix for '/details show' command while the window is on auto hide.\n\n|cFFFFFF00v7.0.3.3114.115 (|cFFFFCC00October 26th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Encounter Details (plugin): tooltip tutorial is now clamped to screen and its close button should be visible.\n\n|cFFFFFF00-|r Raid Check (plugin): now also works on dungeons.\n\n|cFFFFFF00-|r Added Potion of the Prolongued Power to the tracker.\n\n|cFFFFFF00v7.1.0.3097.115 (|cFFFFCC00October 25th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r renamed 'report history' to 'latest reports'.\n\n|cFFFFFF00-|r attempt to make all Details! users on the party or raid to track rogue's akaari's soul." +--|cFFFFFF00v7.3.0.4705.126 (|cFFFFCC00Set 19th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed damage taken tooltip for Brewmaster Monk where sometimes the tooltip didn't open.\n\n|cFFFFFF00-|r Fixed overall data on mythic dungeon not adding trash segments even with the option enabled on the options panel.\n\n|cFFFFFF00-|r Fixed the guild selection dropdown reseting everytime the Guild Rank window is opened.\n\n + + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v7.3.0.4723.126 (|cFFFFCC00Set 22th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed overall dungeon segments being added to overall data.\n\n|cFFFFFF00v7.3.0.4705.126 (|cFFFFCC00Set 19th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed damage taken tooltip for Brewmaster Monk where sometimes the tooltip didn't open.\n\n|cFFFFFF00-|r Fixed overall data on mythic dungeon not adding trash segments even with the option enabled on the options panel.\n\n|cFFFFFF00-|r Fixed the guild selection dropdown reseting everytime the Guild Rank window is opened.\n\n|cFFFFFF00v7.3.0.4677.126 (|cFFFFCC00Set 10th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r During mythic dungeons, the trash segments will be merged into a new segment at the end of the boss encounter (instead of merging on the fly while cleaning up).\n\n|cFFFFFF00v7.3.0.4615.125 (|cFFFFCC00Set 09th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Setting up the dungeon stuff as opt-in for early adopters while we continue to make improvements on the system.\n\n|cFFFFFF00v7.3.0.4586.125 (|cFFFFCC00Set 08th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Formating mythic+ dungeon segments, each segment should count the boss trash + boss fight.\n\n|cFFFFFF00-|r At the end of the mythic+ dungeon, it should create a new segment adding up all segments described above.\n\n|cFFFFFF00v7.3.0.4499.124 (|cFFFFCC00Set 05th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added an option to always show all players when using the standard mode. Option under PvP/PvE bracket on the options panel.\n\n|cFFFFFF00-|r Added a setting to exclude healing done lines from the death log below a certain healing amount. This options is also under PvP/PvE bracket.\n\n|cFFFFFF00-|r Fixed the guild selection on the ranking panel.\n\n|cFFFFFF00v7.3.0.4467.124 (|cFFFFCC00August 29th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Damage or Healing record for the encounter should be printed on chat on the boss pull.\nUse /run Details.announce_damagerecord.enabled = false; to disable.\n\n|cFFFFFF00v7.2.5.4437.124 (|cFFFFCC00August 21th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added healing done cap for death log. Use /run Details.deathlog_healingdone_min = 10000\n\n|cFFFFFF00-|r Fixed an issue where the alpha from the fixed bar color was used even when this option was disabled.\n\n|cFFFFFF00v7.2.5.4436.124 (|cFFFFCC00August 17th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Attempt to fix the issue where the window doesn't update after entering a raid or reseting data.\n\n|cFFFFFF00v7.2.5.4434.124 (|cFFFFCC00August 10th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added buttons to create an aura at Aura tab on the Player Details window.\n\n|cFFFFFF00-|r Fixes and improvements on the damage rank panel.\n\n|cFFFFFF00-|r Best damage or healing for the player on the current boss encounter is now shown on the spec icon tooltip.\n\n|cFFFFFF00-|r Major revamp on the aura creation panel.\n\n|cFFFFFF00v7.2.5.4369.124 (|cFFFFCC00August 1st, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! can now track debuff applications (stack) and refreshes.\n\n|cFFFFFF00-|r Added new tab on Player Detail Window called 'Auras', you can see your buffs and debuffs from there.\n\n|cFFFFFF00-|r Death log now show debuff applications.\n\n|cFFFFFF00v7.2.5.4275.123 (|cFFFFCC00July 18th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed some issues with tooltiops popup when the user press SHIFT.\n\n|cFFFFFF00-|r Now is possible to change the bar durating when selecting Cast Start trigger on Details! Forge.\n\n|cFFFFFF00-|r Kil'Jaeden adds should be consolidated into only one actor instead of having one for each player targeted.\n\n|cFFFFFF00v7.2.5.4236.122 (|cFFFFCC00July 05th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r The alert to open the raid ranking after a boss kill, is now shown for 10 seconds (down from 40).\n\n|cFFFFFF00-|r Added a report button on the raid ranking panel and boss are sort alphabetically.\n\n|cFFFFFF00-|r Fixed some issues on the combatlog introduced on the wow patch 7.2.5 where sometimes the source of an event has no name.\n\n|cFFFFFF00-|r Ticket #209, fixed more issues with the comparison panel where are pets involved.\n\n|cFFFFFF00v7.2.5.4201.121 (|cFFFFCC00June 26th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed Monk Stagger where it was only shown on the friendly fire and not under the Damage Taken display.\n\n|cFFFFFF00-|r Added Forge and Ranking options on the main menu (orange cogwheel).\n\n|cFFFFFF00v7.2.5.4102.121 (|cFFFFCC00June 22th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! Forge has updated and now is more usder friendly.\n\n|cFFFFFF00-|r Fixed an issue with player buff uptime where sometimes some buffs wans't showing in the tooltip.\n\n|cFFFFFF00v7.2.5.3968.120 (|cFFFFCC00June 20th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r New Death Recap implemented! replaces the default from Blizzard and can be configured at Options > Raid Tools.\n\n|cFFFFFF00-|r New Guild Damage and Heal rank on '/details ranking' panel.\n\n|cFFFFFF00-|r Added a Guild Sync button on the Details! Ranking Panel.\n\n|cFFFFFF00-|r Added Custom display 'Damage on Shields', useful for encounter like Maiden of Vigilance where there's big shields to be removed and you want to know who is doing more damage to it.\n\n|cFFFFFF00-|r Added Heal Absorbed display under Heal bracket.\n\nHeal Absorb are the heal denied by abilities such like DK's Necrotic Strike or raid boss Sisters of the Moon 'Embrace of the Eclipse' ability.\nThe tooltip of this display shows which players got heal denied, which abilities absorbed the heal, which abilities tried to heal but got the heal denied.\n\n|cFFFFFF00-|r Added Alternate Power display under Energy bracket, it shows the total of alternate power gain from each player, useful for encounters such as Demonic Inquisition.\n\n|cFFFFFF00-|r 'First Hit' message after pulling a boss, now also shows who the boss is targeting (almost always is who pulled).\n\n|cFFFFFF00-|r Raid Dps {rdps} and Hps {rhps} can now be used on the Broker Data Feed..\n\n|cFFFFFF00-|r Fixed an issue with Chromie from the scenario 'The Deaths of Chromie' where she wasn't being shown on the meter.\n\n|cFFFFFF00-|r Fixed Paladin 'Light of the Martyr' damage to self.\n\n|cFFFFFF00-|r Ticket #198 'Script Error' Fixed.\n\n|cFFFFFF00v7.2.0.3703.119 (|cFFFFCC00May 29th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an error while killing low level mobs with warrior class.\n\n|cFFFFFF00v7.2.0.3693.118 (|cFFFFCC00May 25th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fury Warrior shouldn't be assigned as Protection any more.\n\n|cFFFFFF00-|r Some parser fixes.\n\n|cFFFFFF00v7.2.0.3673.118 (|cFFFFCC00May 09th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #187: Fixed an issue when comparing hunter pets on the player detail window.\n\n|cFFFFFF00-|r Ticket #189 #186: Fixed a taint issue for some classes when using friendly nameplates on.\n\n|cFFFFFF00v7.2.0.3512.116 (|cFFFFCC00April 27th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Havoc Demon Hunter: your fury energy is being shown under Mana Restored (don't ask me why, the combat log is telling us it's mana).\n\n|cFFFFFF00-|r Pets now are shown on damage tooltips.\n\n|cFFFFFF00-|r Pets are now also shown on the comparison panel.\n\n|cFFFFFF00v7.2.0.3474.116 (|cFFFFCC00April 20th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Plugin: Raid Check > added some food buffs which wasn't being tracked.\n\n|cFFFFFF00v7.2.0.3467.116 (|cFFFFCC00April 07th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fix for the custom display window where apply and cancel buttons where over the edit window.\n\n|cFFFFFF00-|r Fix for an issue on editing a bookmark.\n\n|cFFFFFF00v7.1.5.3459.116 (|cFFFFCC00Mar 21th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue on dynamic overall data where it wasn't showing DPS.\n\n|cFFFFFF00-|r Fixed an issue with Apply, Save and Cancel buttons when editing a custom display.\n\n|cFFFFFF00-|r Removed the Damage and Healing presets for custom displays, now is only possible create custom displays by scripting them.\n\n|cFFFFFF00v7.1.5.3431.116 (|cFFFFCC00Mar 15th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with bar orientation right to left where fixed bar color isn't working.\n\n|cFFFFFF00-|r The nickname field now use FrizQuadrataTT font and shall be compatible with Cyrillic.\n\n|cFFFFFF00v7.1.5.3418.116 (|cFFFFCC00Mar 1st, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #167 fix: Light of the Martyr self-damage now does reduce the healing done (following WCL method).\n\n|cFFFFFF00-|r Ticket #169 fix: Damage Prevented is now working for new segments.\n\n|cFFFFFF00-|r Fixed an issue where sometimes BeastMaster's Hati pet wasn't detected correctly.\n\n|cFFFFFF00v7.1.5.3369.116 (|cFFFFCC00Feb 07th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added custom display 'Dynamic Overall Damage' for mythic dungeons.\n\n|cFFFFFF00-|r Fix for Ticket #168: 'Auto Hide While [Not] Inside Instance is broken'.\n\n|cFFFFFF00-|r The bar truncate frame 'DetailsLeftTextAntiTruncate' is now created on Details! load instead on demand.\n\n|cFFFFFF00v7.1.5.3315.116 (|cFFFFCC00Jan 23th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Ticket #162: 'no Monochrome font' available, added an experimental slash command: /run _detalhes:UseOutline ('MONOCHROME').\n\n|cFFFFFF00-|r Ticket #158: 'no elapsed time shown on report to chat', added the elapsed time when reporting a segment.\n\n|cFFFFFF00-|r Ticket #164: 'error when browsing segments', an attempt to fix the problem has been made.\n\n|cFFFFFF00v7.1.5.3305.116 (|cFFFFCC00Jan 15th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Another fix for mythic dungeons overall data reset (thanks Tharai @ Curseforge).\n\n|cFFFFFF00-|r Fix for spec detection on PvP Arenas (thanks Pas06 @ Curseforge).\n\n|cFFFFFF00v7.1.0.3276.115 (|cFFFFCC00Jan 08th, 2017|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the overall data not reseting when starting a new mythic+ dungeon.\n\n|cFFFFFF00v7.1.0.3266.115 (|cFFFFCC00Dec 29th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with overall data not updating correctly at the end of the combat.\n\n|cFFFFFF00-|r Added a tutorial line on the window when the user access overall data.\n\n|cFFFFFF00v7.1.0.3236.115 (|cFFFFCC00Dec 19th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Integration with BigWigs should be working okay now.\n\n|cFFFFFF00v7.1.0.3231.115 (|cFFFFCC00Dec 15th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Disabled the link with BigWigs to avoid the 'RegisterMessage' error on every login.\n\n|cFFFFFF00v7.1.0.3229.115 (|cFFFFCC00Dec 09th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r When a window is locked, resize grips shouldn't be enabled messing with bar mouse over.\n\n|cFFFFFF00v7.0.3.3222.115 (|cFFFFCC00November 28th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Unstable Affliction to common spells with the same name.\n\n|cFFFFFF00-|r Fixed few issues with built-in plugins.\n\n|cFFFFFF00v7.0.3.3202.115 (|cFFFFCC00November 08th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Weakauras creator from the Encounter Details plugin and '/details forge' shall work correctly now with Trials of Valor.\n\n|cFFFFFF00-|r Raid history should now be recording your Trials of Valor kills.\n\n|cFFFFFF00-|r Added Trials of Valor raid info, good luck and have fun!.\n\n|cFFFFFF00v7.0.3.3201.115 (|cFFFFCC00November 04th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fix for Paladin holy icon.\n\n|cFFFFFF00-|r Fix for Rogue outlaw icon.\n\n|cFFFFFF00-|r Fixed misc displays with bar sorted by ascending order.\n\n|cFFFFFF00-|r Fix for '/details show' command while the window is on auto hide.\n\n|cFFFFFF00v7.0.3.3114.115 (|cFFFFCC00October 26th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Encounter Details (plugin): tooltip tutorial is now clamped to screen and its close button should be visible.\n\n|cFFFFFF00-|r Raid Check (plugin): now also works on dungeons.\n\n|cFFFFFF00-|r Added Potion of the Prolongued Power to the tracker.\n\n|cFFFFFF00v7.1.0.3097.115 (|cFFFFCC00October 25th, 2016|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r renamed 'report history' to 'latest reports'.\n\n|cFFFFFF00-|r attempt to make all Details! users on the party or raid to track rogue's akaari's soul." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails!:|r " diff --git a/classes/classe_combate.lua b/classes/classe_combate.lua index b5e10a4c..108f5ba4 100644 --- a/classes/classe_combate.lua +++ b/classes/classe_combate.lua @@ -138,10 +138,16 @@ function combate:GetCombatName (try_find) if (self.is_pvp) then return self.is_pvp.name + elseif (self.is_boss) then return self.is_boss.encounter + + elseif (self.is_mythic_dungeon_trash) then + return self.is_mythic_dungeon_trash.ZoneName .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")" + elseif (_rawget (self, "is_trash")) then return Loc ["STRING_SEGMENT_TRASH"] + else if (self.enemy) then return self.enemy @@ -152,6 +158,92 @@ end return Loc ["STRING_UNKNOW"] end + + --enum segments type + + DETAILS_SEGMENTTYPE_GENERIC = 0 + + DETAILS_SEGMENTTYPE_OVERALL = 1 + + DETAILS_SEGMENTTYPE_DUNGEON_TRASH = 5 + DETAILS_SEGMENTTYPE_DUNGEON_BOSS = 6 + + DETAILS_SEGMENTTYPE_RAID_TRASH = 7 + DETAILS_SEGMENTTYPE_RAID_BOSS = 8 + + DETAILS_SEGMENTTYPE_MYTHICDUNGEON_GENERIC = 10 + DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH = 11 + DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL = 12 + DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASHOVERALL = 13 + DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS = 14 + + DETAILS_SEGMENTTYPE_PVP_ARENA = 20 + DETAILS_SEGMENTTYPE_PVP_BATTLEGROUND = 21 + + function combate:GetCombatType() + --> mythic dungeon + local isMythicDungeon = is_mythic_dungeon_segment + if (isMythicDungeon) then + local isMythicDungeonTrash = self.is_mythic_dungeon_trash + if (isMythicDungeonTrash) then + return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH + else + local isMythicDungeonOverall = self.is_mythic_dungeon and self.is_mythic_dungeon.OverallSegment + local isMythicDungeonTrashOverall = self.is_mythic_dungeon and self.is_mythic_dungeon.TrashOverallSegment + if (isMythicDungeonOverall) then + return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL + elseif (isMythicDungeonTrashOverall) then + return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASHOVERALL + end + + local bossEncounter = self.is_boss + if (bossEncounter) then + return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS + end + + return DETAILS_SEGMENTTYPE_MYTHICDUNGEON_GENERIC + end + end + + --> arena + local arenaInfo = self.is_arena + if (arenaInfo) then + return DETAILS_SEGMENTTYPE_PVP_ARENA + end + + --> battleground + local battlegroundInfo = self.is_pvp + if (battlegroundInfo) then + return DETAILS_SEGMENTTYPE_PVP_BATTLEGROUND + end + + --> dungeon or raid + local instanceType = self.instance_type + + if (instanceType == "party") then + local bossEncounter = self.is_boss + if (bossEncounter) then + return DETAILS_SEGMENTTYPE_DUNGEON_BOSS + else + return DETAILS_SEGMENTTYPE_DUNGEON_TRASH + end + + elseif (instanceType == "raid") then + local bossEncounter = self.is_boss + if (bossEncounter) then + return DETAILS_SEGMENTTYPE_RAID_BOSS + else + return DETAILS_SEGMENTTYPE_RAID_TRASH + end + end + + --> overall data + if (self == _detalhes.tabela_overall) then + return DETAILS_SEGMENTTYPE_OVERALL + end + + return DETAILS_SEGMENTTYPE_GENERIC + end --return a numeric table with all actors on the specific containter function combate:GetActorList (container) diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index 879c0ada..e62b9dee 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -3371,7 +3371,7 @@ function atributo_damage:ToolTip_DamageTaken (instancia, numero, barra, keydown) if (nome == self.nome and self.classe == "MONK") then local ff = este_agressor.friendlyfire [nome] if (ff and ff.total > 0) then - local staggerDamage = ff.spells [124255] + local staggerDamage = ff.spells [124255] or 0 if (staggerDamage > 0) then if (table_added) then table_added [2] = table_added [2] + staggerDamage diff --git a/classes/container_historico.lua b/classes/container_historico.lua index 9e38f379..d336d245 100644 --- a/classes/container_historico.lua +++ b/classes/container_historico.lua @@ -30,6 +30,9 @@ function historico:adicionar_overall (tabela) --> only for raids if (tabela.instance_type == "raid" and tabela.is_boss) then if (_detalhes.last_encounter ~= _detalhes.last_encounter2) then + if (_detalhes.debug) then + _detalhes:Msg ("(debug) new boss detected 'overall_clear_newboss' is true, cleaning overall data.") + end for index, combat in ipairs (_detalhes.tabela_historico.tabelas) do combat.overall_added = false end @@ -37,14 +40,39 @@ function historico:adicionar_overall (tabela) end end end - + + if (tabela.overall_added) then + _detalhes:Msg ("error > attempt to add a segment already added > func historico:adicionar_overall()") + return + end + local mythicInfo = tabela.is_mythic_dungeon + if (mythicInfo) then + --> do not add overall mythic+ dungeon segments + if (mythicInfo.TrashOverallSegment) then + _detalhes:Msg ("error > attempt to add a TrashOverallSegment > func historico:adicionar_overall()") + return + elseif (mythicInfo.OverallSegment) then + _detalhes:Msg ("error > attempt to add a OverallSegment > func historico:adicionar_overall()") + return + end + end + --> store the segments added to the overall data _detalhes.tabela_overall.segments_added = _detalhes.tabela_overall.segments_added or {} local this_clock = tabela.data_inicio - tinsert (_detalhes.tabela_overall.segments_added, 1, {name = tabela:GetCombatName (true), elapsed = tabela:GetCombatTime(), clock = this_clock}) - if (#_detalhes.tabela_overall.segments_added > 20) then - tremove (_detalhes.tabela_overall.segments_added, 21) + local combatName = tabela:GetCombatName (true) + local combatTime = tabela:GetCombatTime() + local combatType = tabela:GetCombatType() + + tinsert (_detalhes.tabela_overall.segments_added, 1, {name = combatName, elapsed = combatTime, clock = this_clock, type = combatType}) + + if (#_detalhes.tabela_overall.segments_added > 30) then + tremove (_detalhes.tabela_overall.segments_added, 31) + end + + if (_detalhes.debug) then + _detalhes:Msg ("(debug) adding the segment to overall data: " .. (tabela:GetCombatName (true) or "no name") .. " with time of: " .. (tabela:GetCombatTime() or "no time")) end _detalhes.tabela_overall = _detalhes.tabela_overall + tabela @@ -97,6 +125,84 @@ function _detalhes:GetCombatSegments() return _detalhes.tabela_historico.tabelas end +function _detalhes:ScheduleAddCombatToOverall (combat) + local canAdd = _detalhes:CanAddCombatToOverall (combat) + if (canAdd) then + _detalhes.schedule_add_to_overall = _detalhes.schedule_add_to_overall or {} + tinsert (_detalhes.schedule_add_to_overall, combat) + end +end + +function _detalhes:CanAddCombatToOverall (tabela) + + --> already added + if (tabela.overall_added) then + return false + end + + --> already scheduled to add + if (_detalhes.schedule_add_to_overall) then + for _, combat in ipairs (_detalhes.schedule_add_to_overall) do + if (combat == tabela) then + return false + end + end + end + + --> special cases + local mythicInfo = tabela.is_mythic_dungeon + if (mythicInfo) then + --> do not add overall mythic+ dungeon segments + if (mythicInfo.TrashOverallSegment) then + return false + elseif (mythicInfo.OverallSegment) then + return false + end + end + + --> raid boss - flag 0x1 + if (bit.band (_detalhes.overall_flag, 0x1) ~= 0) then + if (tabela.is_boss and tabela.instance_type == "raid" and not tabela.is_pvp) then + if (tabela:GetCombatTime() >= 30) then + return true + end + end + end + + --> raid trash - flag 0x2 + if (bit.band (_detalhes.overall_flag, 0x2) ~= 0) then + if (tabela.is_trash and tabela.instance_type == "raid") then + return true + end + end + + --> dungeon boss - flag 0x4 + if (bit.band (_detalhes.overall_flag, 0x4) ~= 0) then + if (tabela.is_boss and tabela.instance_type == "party" and not tabela.is_pvp) then + return true + end + end + + --> dungeon trash - flag 0x8 + if (bit.band (_detalhes.overall_flag, 0x8) ~= 0) then + if ((tabela.is_trash or tabela.is_mythic_dungeon_trash) and tabela.instance_type == "party") then + return true + end + end + + --> any combat + if (bit.band (_detalhes.overall_flag, 0x10) ~= 0) then + return true + end + + --> is a PvP combat + if (tabela.is_pvp or tabela.is_arena) then + return true + end + + return false +end + --> sai do combate, chamou adicionar a tabela ao histórico function historico:adicionar (tabela) @@ -112,11 +218,10 @@ function historico:adicionar (tabela) _detalhes:InstanciaCallFunction (_detalhes.CheckFreeze, tamanho+1, ultima_tabela) end - --> adiciona no index #1 - + --> add to history table _table_insert (self.tabelas, 1, tabela) - --_detalhes.encounter_counter + --> count boss tries local boss = tabela.is_boss and tabela.is_boss.name if (boss) then local try_number = _detalhes.encounter_counter [boss] @@ -142,73 +247,26 @@ function historico:adicionar (tabela) tabela.is_boss.try_number = try_number end - local overall_added = false + --> see if can add the encounter to overall data + local canAddToOverall = _detalhes:CanAddCombatToOverall (tabela) - if (not overall_added and bit.band (_detalhes.overall_flag, 0x1) ~= 0) then --> raid boss - flag 0x1 - if (tabela.is_boss and tabela.instance_type == "raid" and not tabela.is_pvp) then - overall_added = true - end - --print ("0x1") - end - - if (not overall_added and bit.band (_detalhes.overall_flag, 0x2) ~= 0) then --> raid trash - flag 0x2 - if (tabela.is_trash and tabela.instance_type == "raid") then --check if the player is in a raid - overall_added = true - end - --print ("0x2") - end - - if (not overall_added and bit.band (_detalhes.overall_flag, 0x4) ~= 0) then --> dungeon boss - flag 0x4 - if (tabela.is_boss and tabela.instance_type == "party" and not tabela.is_pvp) then --check if this is a dungeon boss - overall_added = true - end - --print ("0x4") - end - - if (not overall_added and bit.band (_detalhes.overall_flag, 0x8) ~= 0) then --> dungeon trash - flag 0x8 - if (tabela.is_trash and tabela.instance_type == "party") then --check if the player is in a raid - overall_added = true - end - --print ("0x8") - end - - if (not overall_added and bit.band (_detalhes.overall_flag, 0x10) ~= 0) then --> any combat - overall_added = true - --print ("0x10") - end - - if (not overall_added and (tabela.is_pvp or tabela.is_arena)) then --> is a PvP combat - overall_added = true - --print ("0x10") - end - - if (overall_added) then - if (tabela.is_boss and tabela:InstanceType() == "raid" and tabela:GetCombatTime() < 30) then + if (canAddToOverall) then + if (InCombatLockdown()) then + _detalhes:ScheduleAddCombatToOverall (tabela) if (_detalhes.debug) then - _detalhes:Msg ("segment not added to overall (less than 30 seconds of combat time).") + _detalhes:Msg ("(debug) overall data flag match > in combat scheduling overall addition.") end else if (_detalhes.debug) then - _detalhes:Msg ("(debug) overall data flag match with the current combat.") - end - if (InCombatLockdown()) then - _detalhes.schedule_add_to_overall = _detalhes.schedule_add_to_overall or {} - tinsert (_detalhes.schedule_add_to_overall, tabela) - if (_detalhes.debug) then - _detalhes:Msg ("(debug) player is in combat, scheduling overall addition.") - end - else - historico:adicionar_overall (tabela) + _detalhes:Msg ("(debug) overall data flag match addind the combat to overall data.") end + historico:adicionar_overall (tabela) end end + --> erase trash segments if (self.tabelas[2]) then - - --> fazer limpeza na tabela - local _segundo_combate = self.tabelas[2] - local container_damage = _segundo_combate [1] local container_heal = _segundo_combate [2] @@ -236,10 +294,6 @@ function historico:adicionar (tabela) if (_terceiro_combate) then if ((_terceiro_combate.is_trash and not _terceiro_combate.is_boss) or (_terceiro_combate.is_temporary)) then - --if (_terceiro_combate.overall_added) then - -- _detalhes.tabela_overall = _detalhes.tabela_overall - _terceiro_combate - -- print ("removendo combate 1") - --end --> verificar novamente a time machine for _, jogador in ipairs (_terceiro_combate [1]._ActorTable) do --> damage if (jogador.timeMachine) then @@ -385,6 +439,16 @@ function historico:resetar() _detalhes.last_closed_combat = nil + --> remove mythic dungeon schedules if any + _detalhes.schedule_mythicdungeon_trash_merge = nil + _detalhes.schedule_mythicdungeon_endtrash_merge = nil + _detalhes.schedule_mythicdungeon_overallrun_merge = nil + + --> clear other schedules + _detalhes.schedule_flag_boss_components = nil + _detalhes.schedule_store_boss_encounter = nil + _detalhes.schedule_remove_overall = nil + --> fecha a janela de informações do jogador _detalhes:FechaJanelaInfo() diff --git a/core/control.lua b/core/control.lua index 6231c268..2ab0f7e4 100644 --- a/core/control.lua +++ b/core/control.lua @@ -300,9 +300,9 @@ -- ~start ~inicio ~novo ñovo function _detalhes:EntrarEmCombate (...) if (_detalhes.debug) then - _detalhes:Msg ("(debug) |cFFFFFF00started a new combat|r|cFFFF7700", _detalhes.encounter_table and _detalhes.encounter_table.name or "") - local from = debugstack (2, 1, 0) - print (from) + --_detalhes:Msg ("(debug) |cFFFFFF00started a new combat|r|cFFFF7700", _detalhes.encounter_table and _detalhes.encounter_table.name or "") + --local from = debugstack (2, 1, 0) + --print (from) end if (not _detalhes.tabela_historico.tabelas[1]) then @@ -312,7 +312,7 @@ _detalhes:InstanciaCallFunction (_detalhes.InstanciaFadeBarras, -1) --> esconde todas as barras _detalhes:InstanciaCallFunction (_detalhes.AtualizaSegmentos) --> atualiza o showing end - + --> re-lock nos tempos da tabela passada -- lock again last table times _detalhes.tabela_vigente:TravarTempos() @@ -336,7 +336,7 @@ --> é o timer que ve se o jogador ta em combate ou não -- check if any party or raid members are in combat _detalhes.tabela_vigente.verifica_combate = _detalhes:ScheduleRepeatingTimer ("EstaEmCombate", 1) - + _detalhes:ClearCCPetsBlackList() _table_wipe (_detalhes.encounter_end_table) @@ -514,9 +514,7 @@ if (not _detalhes.tabela_vigente.is_boss and from_encounter_end and type (from_encounter_end) == "table") then local encounterID, encounterName, difficultyID, raidSize, endStatus = unpack (from_encounter_end) - if (encounterID) then - local ZoneName, InstanceType, DifficultyID, DifficultyName, _, _, _, ZoneMapID = GetInstanceInfo() local ejid = EJ_GetCurrentInstance() if (ejid == 0) then @@ -542,7 +540,13 @@ if (_detalhes.MythicPlus.Started) then _detalhes.tabela_vigente.is_mythic_dungeon_segment = true _detalhes.tabela_vigente.is_mythic_dungeon_run_id = _detalhes.mythic_dungeon_id + else + local mythicLevel = C_ChallengeMode.GetActiveKeystoneInfo() + if (mythicLevel and mythicLevel >= 2) then + _detalhes.tabela_vigente.is_mythic_dungeon_segment = true + _detalhes.tabela_vigente.is_mythic_dungeon_run_id = _detalhes.mythic_dungeon_id end + end if (not _detalhes.tabela_vigente.is_boss) then diff --git a/core/parser.lua b/core/parser.lua index e1f93cc7..f01d285f 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -4252,7 +4252,6 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 end function _detalhes.parser_functions:PLAYER_REGEN_DISABLED (...) - if (not _detalhes:CaptureGet ("damage")) then _detalhes:EntrarEmCombate() end @@ -4269,22 +4268,36 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 end end end - - function _detalhes.parser_functions:PLAYER_REGEN_ENABLED (...) + function _detalhes.parser_functions:PLAYER_REGEN_ENABLED (...) + _detalhes.LatestCombatDone = GetTime() _current_encounter_id = nil - + --> playing alone, just finish the combat right now if (not _IsInGroup() and not IsInRaid()) then _detalhes.tabela_vigente.playing_solo = true _detalhes:SairDoCombate() end + --> add segments to overall data if any scheduled + if (_detalhes.schedule_add_to_overall and #_detalhes.schedule_add_to_overall > 0) then + if (_detalhes.debug) then + _detalhes:Msg ("(debug) adding ", #_detalhes.schedule_add_to_overall, "combats in queue to overall data.") + end + + for i = #_detalhes.schedule_add_to_overall, 1, -1 do + local CombatToAdd = tremove (_detalhes.schedule_add_to_overall, i) + if (CombatToAdd) then + _detalhes.historico:adicionar_overall (CombatToAdd) + end + end + end + if (_detalhes.schedule_mythicdungeon_trash_merge) then _detalhes.schedule_mythicdungeon_trash_merge = nil - DetailsMythicPlusFrame.MergeTrashCleanup() + DetailsMythicPlusFrame.MergeTrashCleanup (true) end if (_detalhes.schedule_mythicdungeon_endtrash_merge) then @@ -4313,7 +4326,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 _detalhes.schedule_flag_boss_components = false _detalhes:FlagActorsOnBossFight() end - + if (_detalhes.schedule_remove_overall) then if (_detalhes.debug) then _detalhes:Msg ("(debug) found schedule overall data clean up.") @@ -4322,19 +4335,6 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 _detalhes.tabela_historico:resetar_overall() end - if (_detalhes.schedule_add_to_overall and _detalhes.schedule_add_to_overall [1]) then - if (_detalhes.debug) then - _detalhes:Msg ("(debug) adding ", #_detalhes.schedule_add_to_overall, "combats in queue to overall data.") - end - - for i = #_detalhes.schedule_add_to_overall, 1, -1 do - local CombatToAdd = tremove (_detalhes.schedule_add_to_overall, i) - if (CombatToAdd) then - _detalhes.historico:adicionar_overall (CombatToAdd) - end - end - end - if (_detalhes.schedule_store_boss_encounter) then if (not _detalhes.logoff_saving_data) then --_detalhes.StoreEncounter() diff --git a/core/windows.lua b/core/windows.lua index 4596f6c8..637f7cd3 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -1253,10 +1253,11 @@ function f.BuildReport() if (f.LatestResourceTable) then local reportFunc = function (IsCurrent, IsReverse, AmtLines) - local bossName = f.select_boss.label:GetText() local bossDiff = f.select_diff.label:GetText() - local reportTable = {"Details!: DPS Rank for: " .. (bossDiff or "") .. " " .. (bossName or "--x--x--")} + local guildName = f.select_guild.label:GetText() + + local reportTable = {"Details!: DPS Rank for: " .. (bossDiff or "") .. " " .. (bossName or "--x--x--") .. " <" .. (guildName or "") .. ">"} local result = {} for i = 1, AmtLines do @@ -1348,6 +1349,7 @@ --> select raid: local on_raid_select = function (_, _, raid) + _detalhes.rank_window.last_raid = raid f:UpdateDropdowns (true) on_select() end @@ -1369,6 +1371,7 @@ --> select difficulty: local on_diff_select = function (_, _, diff) + _detalhes.rank_window.last_difficulty = diff on_select() end @@ -1494,6 +1497,20 @@ if (encounter) then local InstanceID = _detalhes:GetInstanceIdFromEncounterId (encounterId) if (raidSelected == InstanceID) then + --[=[ + local bossIndex = _detalhes:GetBossIndex (InstanceID, encounterId) + if (bossIndex) then + local l, r, t, b, texturePath = _detalhes:GetBossIcon (InstanceID, bossIndex) + if (texturePath) then + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = texturePath, texcoord = {l, r, t, b}, onclick = on_boss_select}) + else + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) + end + else + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) + end + --]=] + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) boss_repeated [encounterId] = true end @@ -1576,6 +1593,19 @@ if (encounter) then local InstanceID = _detalhes:GetInstanceIdFromEncounterId (encounterId) if (raidSelected == InstanceID) then + --[=[ + local bossIndex = _detalhes:GetBossIndex (InstanceID, encounterId) + if (bossIndex) then + local l, r, t, b, texturePath = _detalhes:GetBossIcon (InstanceID, bossIndex) + if (texturePath) then + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = texturePath, texcoord = {l, r, t, b}, onclick = on_boss_select}) + else + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) + end + else + tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) + end + --]=] tinsert (boss_list, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select}) boss_repeated [encounterId] = true end @@ -1897,10 +1927,11 @@ end end end - + + f.FirstRun = true + end - --> table means some button send the request - nil for other ways if (type (_raid) == "table" or (not _raid and not _boss and not _difficulty and not _role and not _guild and not _player_base and not _player_name)) then local f = _G.DetailsRaidHistoryWindow @@ -1915,6 +1946,21 @@ end end + if (_G.DetailsRaidHistoryWindow.FirstRun) then + _difficulty = _detalhes.rank_window.last_difficulty or _difficulty + if (IsInGuild()) then + local guildName = GetGuildInfo ("player") + if (guildName) then + _guild = guildName + end + end + if (_detalhes.rank_window.last_raid ~= "") then + _raid = _detalhes.rank_window.last_raid or _raid + end + + _G.DetailsRaidHistoryWindow.FirstRun = nil + end + _G.DetailsRaidHistoryWindow:UpdateDropdowns() _G.DetailsRaidHistoryWindow:UpdateDropdowns() diff --git a/functions/boss.lua b/functions/boss.lua index 91853564..a67f9e78 100644 --- a/functions/boss.lua +++ b/functions/boss.lua @@ -255,6 +255,22 @@ do return nil end + function _detalhes:GetBossIndex (mapid, encounterCLID, encounterEJID, encounterName) + local raidInfo = _detalhes.EncounterInformation [mapid] + if (raidInfo) then + local index = raidInfo.encounter_ids2 [encounterCLID] or raidInfo.encounter_ids [encounterEJID] + if (not index) then + for i = 1, #raidInfo.boss_names do + if (raidInfo.boss_names [i] == encounterName) then + index = i + break + end + end + end + return index + end + end + --> return the boss icon function _detalhes:GetBossIcon (mapid, bossindex) if (_detalhes.EncounterInformation [mapid]) then diff --git a/functions/profiles.lua b/functions/profiles.lua index 2c497334..ba85abd3 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -1075,6 +1075,17 @@ local default_player_data = { last_instance_id = 0, last_instance_time = 0, mythic_dungeon_id = 0, + mythic_dungeon_currentsaved = { + started = false, + run_id = 0, + dungeon_name = "", + dungeon_zone_id = 0, + started_at = 0, + segment_id = 0, + level = 0, + ej_id = 0, + previous_boss_killed_at = 0, + }, --> nicktag cache nick_tag_cache = {}, ignore_nicktag = false, @@ -1132,6 +1143,11 @@ local default_player_data = { frame = {}, }, + --> rank + rank_window = { + last_difficulty = 15, + last_raid = "", + }, } _detalhes.default_player_data = default_player_data @@ -1330,4 +1346,66 @@ function _detalhes:SaveProfileSpecial() --> end return profile +end + +--> save things for the mythic dungeon run +function _detalhes:SaveState_CurrentMythicDungeonRun (runID, zoneName, zoneID, startAt, segmentID, level, ejID, latestBossAt) + local savedTable = _detalhes.mythic_dungeon_currentsaved + savedTable.started = true + savedTable.run_id = runID + savedTable.dungeon_name = zoneName + savedTable.dungeon_zone_id = zoneID + savedTable.started_at = startAt + savedTable.segment_id = segmentID + savedTable.level = level + savedTable.ej_id = ejID + savedTable.previous_boss_killed_at = latestBossAt +end + +function _detalhes:UpdateState_CurrentMythicDungeonRun (stillOngoing, segmentID, latestBossAt) + local savedTable = _detalhes.mythic_dungeon_currentsaved + + if (not stillOngoing) then + savedTable.started = false + end + + if (segmentID) then + savedTable.segment_id = segmentID + end + + if (latestBossAt) then + savedTable.previous_boss_killed_at = latestBossAt + end +end + +function _detalhes:RestoreState_CurrentMythicDungeonRun() + local savedTable = _detalhes.mythic_dungeon_currentsaved + local mythicLevel = C_ChallengeMode.GetActiveKeystoneInfo() + local zoneName, _, _, _, _, _, _, currentZoneID = GetInstanceInfo() + local ejID = EJ_GetCurrentInstance() + + --> is there a saved state for the dungeon? + if (savedTable.started) then + --> player are within the same zone? + if (zoneName == savedTable.dungeon_name and currentZoneID == savedTable.dungeon_zone_id) then + --> is there a mythic run ongoing and the level is the same as the saved state? + if (mythicLevel and mythicLevel == savedTable.level) then + --> restore the state + _detalhes.MythicPlus.Started = true + _detalhes.MythicPlus.DungeonName = zoneName + _detalhes.MythicPlus.DungeonID = currentZoneID + _detalhes.MythicPlus.StartedAt = savedTable.started_at + _detalhes.MythicPlus.SegmentID = savedTable.segment_id + _detalhes.MythicPlus.Level = mythicLevel + _detalhes.MythicPlus.ejID = ejID + _detalhes.MythicPlus.PreviousBossKilledAt = savedTable.previous_boss_killed_at + _detalhes.MythicPlus.IsRestoredState = true + DetailsMythicPlusFrame.IsDoingMythicDungeon = true + return + end + end + + --> mythic run is over + savedTable.started = false + end end \ No newline at end of file diff --git a/functions/spells.lua b/functions/spells.lua index 6f5afd2e..d61cc131 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -117,11 +117,11 @@ do [171746] = 103, -- Claws of Shirvallah [22570] = 103, -- Maim [16974] = 103, -- Predatory Swiftness - [106785] = 103, -- Swipe - [1079] = 103, -- Rip + --[106785] = 103, -- Swipe + --[1079] = 103, -- Rip [52610] = 103, -- Savage Roar [5217] = 103, -- Tiger's Fury - [1822] = 103, -- Rake + --[1822] = 103, -- Rake -- Guardian Druid: [155835] = 104, -- Bristling Fur diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 48c322de..f0d2cb89 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -6135,7 +6135,7 @@ local build_segment_list = function (self, elapsed) if (trashInfo) then local backgroundImage = _detalhes:GetRaidIcon (trashInfo.MapID, trashInfo.EJID, "party") if (backgroundImage) then - CoolTip:SetWallpaper (2, backgroundImage, party_wallpaper_tex, {1, 1, 1, 0.5}, true) + CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true) end end end @@ -6414,7 +6414,7 @@ local build_segment_list = function (self, elapsed) local backgroundImage = _detalhes:GetRaidIcon (trashInfo.MapID, trashInfo.EJID, "party") if (backgroundImage) then - CoolTip:SetWallpaper (2, backgroundImage, party_wallpaper_tex, {1, 1, 1, 0.5}, true) + CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true) end end @@ -6534,12 +6534,15 @@ local build_segment_list = function (self, elapsed) local minutos, segundos = _math_floor (combat_time / 60), _math_floor (combat_time % 60) CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") - + + CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {0.085, 166/256, 0, 1}, {.42, .4, .4, 0.9}, true) + if (_detalhes.tooltip.submenu_wallpaper) then - CoolTip:SetWallpaper (2, [[Interface\PetPaperDollFrame\PetStatsBG-Hunter]], {321/512, 0, 0, 190/512}, {1, 1, 1, 0.9}, true) + --CoolTip:SetWallpaper (2, [[Interface\PetPaperDollFrame\PetStatsBG-Hunter]], {321/512, 0, 0, 190/512}, {1, 1, 1, 0.9}, true) + --CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {166/256, 1, 0, 1}, {1, 1, 1, 0.9}, true) else --> wallpaper = main window - CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) + --CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_overall.data_inicio, 2, "white", "white") @@ -6562,6 +6565,23 @@ local build_segment_list = function (self, elapsed) end CoolTip:AddLine ("" .. name, minutos.."m "..segundos.."s", 2, "white", "white") + + local segmentType = segment.type + if (segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH) then + CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 8, 479/512, 510/512, 24/512, 51/512, nil, nil, true) + + elseif (segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS) then + CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 12, 0.96875, 1, 0, 0.03125, party_line_color) + + elseif (segmentType == DETAILS_SEGMENTTYPE_RAID_TRASH or segmentType == DETAILS_SEGMENTTYPE_DUNGEON_TRASH) then + CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 10, 8, 0.02734375, 0.11328125, 0.19140625, 0.3125) + + elseif (segmentType == DETAILS_SEGMENTTYPE_RAID_BOSS) then + CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 12, 0.96875, 1, 0, 0.03125) + + end + + --CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.2, false, false, "Skyline") end --> fill é a quantidade de menu que esta sendo mostrada diff --git a/startup.lua b/startup.lua index 0fac3a70..51271bfe 100644 --- a/startup.lua +++ b/startup.lua @@ -316,6 +316,7 @@ function _G._detalhes:Start() newFrame:RegisterEvent ("CHALLENGE_MODE_COMPLETED") newFrame:RegisterEvent ("ZONE_CHANGED_NEW_AREA") newFrame:RegisterEvent ("ENCOUNTER_END") + newFrame:RegisterEvent ("START_TIMER") --]] --[[ @@ -338,7 +339,7 @@ function _G._detalhes:Start() -- at the end of a mythic run, if enable on settings, merge all the segments from the mythic run into only one function newFrame.MergeSegmentsOnEnd() if (newFrame.DevelopmentDebug) then - print ("Details!", "MythicDungeonFinished() > starting to merge mythic segments.", "InCombatLockdown():", InCombatLockdown()) + print ("Details!", "MergeSegmentsOnEnd() > starting to merge mythic segments.", "InCombatLockdown():", InCombatLockdown()) end --> create a new combat to be the overall for the mythic run @@ -351,11 +352,12 @@ function _G._detalhes:Start() local totalTime = 0 local startDate, endDate = "", "" local lastSegment - + local totalSegments = 0 + --> add all boss segments from this run to this new segment for i = 1, 25 do --> from the newer combat to the oldest local pastCombat = segmentHistory [i] - if (pastCombat and pastCombat.is_mythic_dungeon and pastCombat.is_mythic_dungeon.RunID == self.mythic_dungeon_id) then + if (pastCombat and pastCombat.is_mythic_dungeon_run_id == self.mythic_dungeon_id) then local canAddThisSegment = true if (_detalhes.mythic_plus.make_overall_boss_only) then if (not pastCombat.is_boss) then @@ -366,9 +368,10 @@ function _G._detalhes:Start() if (canAddThisSegment) then newCombat = newCombat + pastCombat totalTime = totalTime + pastCombat:GetCombatTime() + totalSegments = totalSegments + 1 if (newFrame.DevelopmentDebug) then - print ("MythicDungeonFinished() > adding time:", pastCombat:GetCombatTime(), pastCombat.is_boss and pastCombat.is_boss.name) + print ("MergeSegmentsOnEnd() > adding time:", pastCombat:GetCombatTime(), pastCombat.is_boss and pastCombat.is_boss.name) end if (endDate == "") then @@ -386,7 +389,7 @@ function _G._detalhes:Start() end if (newFrame.DevelopmentDebug) then - print ("Details!", "MythicDungeonFinished() > totalTime:", totalTime, "startDate:", startDate) + print ("Details!", "MergeSegmentsOnEnd() > totalTime:", totalTime, "startDate:", startDate) end local zoneName, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceMapID, instanceGroupSize = GetInstanceInfo() @@ -404,6 +407,8 @@ function _G._detalhes:Start() EJID = self.MythicPlus.ejID, } + newCombat.total_segments_added = totalSegments + newCombat.is_mythic_dungeon_segment = true newCombat.is_mythic_dungeon_run_id = self.mythic_dungeon_id @@ -423,14 +428,22 @@ function _G._detalhes:Start() self:AtualizaGumpPrincipal (-1, true) if (newFrame.DevelopmentDebug) then - print ("Details!", "MythicDungeonFinished() > finished merging segments.") - print ("Details!", "MythicDungeonFinished() > all done, check in the segments list if everything is correct, if something is weird: '/details feedback' thanks in advance!") + print ("Details!", "MergeSegmentsOnEnd() > finished merging segments.") + print ("Details!", "MergeSegmentsOnEnd() > all done, check in the segments list if everything is correct, if something is weird: '/details feedback' thanks in advance!") end - + + local lower_instance = self:GetLowerInstanceNumber() + if (lower_instance) then + local instance = self:GetInstance (lower_instance) + if (instance) then + local func = {function() end} + instance:InstanceAlert ("Showing Mythic+ Overall Segment", {[[Interface\AddOns\Details\images\icons]], 16, 16, false, 434/512, 466/512, 243/512, 273/512}, 6, func, true) + end + end end --> after each boss fight, if enalbed on settings, create an extra segment with all trash segments from the boss just killed - function newFrame.MergeTrashCleanup() + function newFrame.MergeTrashCleanup (isFromSchedule) if (newFrame.DevelopmentDebug) then print ("Details!", "MergeTrashCleanup() > running", newFrame.TrashMergeScheduled and #newFrame.TrashMergeScheduled) end @@ -506,44 +519,84 @@ function _G._detalhes:Start() --> immediatly finishes the segment just started self:SairDoCombate() - + --o combate agora é _tabela_vigente e [1] na tabela de overall --seria necessario passar essa tabela para [2] na overall local segmentHistory = self:GetCombatSegments() - local bossSegment = segmentHistory [2] - if (bossSegment) then - --set the boss as the current combat - _detalhes.tabela_vigente = bossSegment - --swap tables - segmentHistory [1] = bossSegment --as the boss combat is done, it is also the first combat in the past combats table - segmentHistory [2] = newCombat --se the overall trash as the second segment on the past table (the semgnet 2 was occupy by the boss segment) - end - --> update all windows - self:InstanciaCallFunction (self.gump.Fade, "in", nil, "barras") - self:InstanciaCallFunction (self.AtualizaSegmentos) - self:InstanciaCallFunction (self.AtualizaSoloMode_AfertReset) - self:InstanciaCallFunction (self.ResetaGump) - self:AtualizaGumpPrincipal (-1, true) + --> if was scheduled, needs to reorder the segments so it will the in the correct order + if (isFromSchedule) then + local bossSegment = segmentHistory [3] + local currentTrash = segmentHistory [2] + local trashOverall = segmentHistory [1] + + local bossCLID = bossSegment and bossSegment.is_mythic_dungeon and bossSegment.is_mythic_dungeon.EncounterID + local trashCLID = trashOverall and trashOverall.is_mythic_dungeon and trashOverall.is_mythic_dungeon.EncounterID + + --> check if the guessed boss and guessed trash overall segments are from the same boss + if (bossCLID == trashCLID and currentTrash.is_mythic_dungeon_trash) then + --set the boss as the current combat + _detalhes.tabela_vigente = currentTrash + --swap tables + segmentHistory [1] = currentTrash + segmentHistory [2] = bossSegment + segmentHistory [3] = trashOverall + else + --> if it fails to guess which are the boss and trash, just pull the current trash segment to index 1 + local currentTrash = segmentHistory [2] + if (currentTrash) then + --set the boss as the current combat + _detalhes.tabela_vigente = currentTrash + --swap tables + segmentHistory [1] = currentTrash --as the boss combat is done, it is also the first combat in the past combats table + segmentHistory [2] = newCombat --se the overall trash as the second segment on the past table (the semgnet 2 was occupy by the boss segment) + end + end + else + local bossSegment = segmentHistory [2] + if (bossSegment) then + --set the boss as the current combat + _detalhes.tabela_vigente = bossSegment + --swap tables + segmentHistory [1] = bossSegment --as the boss combat is done, it is also the first combat in the past combats table + segmentHistory [2] = newCombat --se the overall trash as the second segment on the past table (the semgnet 2 was occupy by the boss segment) + end + end if (newFrame.DevelopmentDebug) then print ("Details!", "MergeTrashCleanup() > finished merging trash segments.", _detalhes.tabela_vigente, _detalhes.tabela_vigente.is_boss) end + for i = #segmentsToMerge, 1, -1 do + local segment = segmentsToMerge [i] + if (segment == _detalhes.tabela_vigente) then + _detalhes:Msg ("unhandled exception > merged trash segment is current segment > MergeTrashCleanup() is scheduled:", isFromSchedule) + end + end + --> should delete the trash segments after the merge? if (_detalhes.mythic_plus.delete_trash_after_merge) then local segmentHistory = self:GetCombatSegments() for _, pastCombat in ipairs (segmentsToMerge) do for i = #segmentHistory, 1, -1 do local segment = segmentHistory [i] - if (segment == pastCombat) then - wipe (segment) + if (segment == pastCombat and _detalhes.tabela_vigente ~= segment) then + --> double check if the combat should be added first to overall data + if (_detalhes:CanAddCombatToOverall (segment)) then + --> actuallt is handled, but shouldn't happen, need to know which boss are triggering this + --_detalhes:Msg ("unhandled exception > attempt to erase a segment valid to overall data > MergeTrashCleanup() is scheduled:", isFromSchedule) + _detalhes.historico:adicionar_overall (segment) + end + + --> remove the segment tremove (segmentHistory, i) break end end end - wipe (segmentsToMerge) + for i = #segmentsToMerge, 1, -1 do + tremove (segmentsToMerge, i) + end self:SendEvent ("DETAILS_DATA_SEGMENTREMOVED") else --> clear the segments to merge table @@ -557,6 +610,13 @@ function _G._detalhes:Start() segmentsToMerge.EncounterID = nil segmentsToMerge.EncounterName = nil end + + --> update all windows + self:InstanciaCallFunction (self.gump.Fade, "in", nil, "barras") + self:InstanciaCallFunction (self.AtualizaSegmentos) + self:InstanciaCallFunction (self.AtualizaSoloMode_AfertReset) + self:InstanciaCallFunction (self.ResetaGump) + self:AtualizaGumpPrincipal (-1, true) end end @@ -616,20 +676,36 @@ function _G._detalhes:Start() print ("MergeRemainingTrashAfterAllBossesDone() > elapsed time after:", mythicDungeonInfo.EndedAt - mythicDungeonInfo.StartedAt) end + for i = #segmentsToMerge, 1, -1 do + local segment = segmentsToMerge [i] + if (segment == _detalhes.tabela_vigente) then + _detalhes:Msg ("unhandled exception > merged trash segment is current segment > MergeRemainingTrashAfterAllBossesDone()") + end + end + --> should delete the trash segments after the merge? if (_detalhes.mythic_plus.delete_trash_after_merge) then local segmentHistory = self:GetCombatSegments() for _, pastCombat in ipairs (segmentsToMerge) do for i = #segmentHistory, 1, -1 do local segment = segmentHistory [i] - if (segment == pastCombat) then - wipe (segment) + if (segment == pastCombat and _detalhes.tabela_vigente ~= segment) then + --> double check if the combat should be added first to overall data + if (_detalhes:CanAddCombatToOverall (segment)) then + --> actuallt is handled, but shouldn't happen, need to know which boss are triggering this + --_detalhes:Msg ("unhandled exception > attempt to erase a segment valid to overall data > MergeRemainingTrashAfterAllBossesDone()") + _detalhes.historico:adicionar_overall (segment) + end + + --> remove the segment tremove (segmentHistory, i) break end end end - wipe (segmentsToMerge) + for i = #segmentsToMerge, 1, -1 do + tremove (segmentsToMerge, i) + end self:SendEvent ("DETAILS_DATA_SEGMENTREMOVED") else --> clear the segments to merge table @@ -681,7 +757,7 @@ function _G._detalhes:Start() end --> check if need to merge the trash for this boss - if (_detalhes.mythic_plus.merge_boss_trash) then + if (_detalhes.mythic_plus.merge_boss_trash and not self.MythicPlus.IsRestoredState) then --> store on an table all segments which should be merged local segmentsToMerge = newFrame.TrashMergeScheduled or {} --> table with all past semgnets @@ -745,10 +821,13 @@ function _G._detalhes:Start() --> register the time when the last boss has been killed (started a clean up for the next trash) self.MythicPlus.PreviousBossKilledAt = time() + + --> update the saved table inside the profile + _detalhes:UpdateState_CurrentMythicDungeonRun (true, self.MythicPlus.SegmentID, self.MythicPlus.PreviousBossKilledAt) end end - function newFrame.MythicDungeonFinished() + function newFrame.MythicDungeonFinished (fromZoneLeft) if (newFrame.IsDoingMythicDungeon) then if (newFrame.DevelopmentDebug) then print ("Details!", "MythicDungeonFinished() > the dungeon was a Mythic+ and just ended.") @@ -758,6 +837,8 @@ function _G._detalhes:Start() self.MythicPlus.Started = false self.MythicPlus.EndedAt = time()-1.9 + self:UpdateState_CurrentMythicDungeonRun() + --> at this point, details! should not be in combat, but if something triggered a combat start, just close the combat right away if (self.in_combat) then if (newFrame.DevelopmentDebug) then @@ -769,7 +850,7 @@ function _G._detalhes:Start() local segmentsToMerge = {} --> check if there is trash segments after the last boss. need to merge these segments with the trash segment of the last boss - if (_detalhes.mythic_plus.merge_boss_trash) then + if (_detalhes.mythic_plus.merge_boss_trash and not self.MythicPlus.IsRestoredState and not fromZoneLeft) then --and false --> is the current combat not a boss fight? this means a combat was opened after the mythic run completed if (not self.tabela_vigente.is_boss and self.tabela_vigente:GetCombatTime() > 5) then if (newFrame.DevelopmentDebug) then @@ -807,7 +888,7 @@ function _G._detalhes:Start() end end - if (#segmentsToMerge > 0) then + if (#segmentsToMerge > 0) then --and false if (newFrame.DevelopmentDebug) then print ("Details!", "MythicDungeonFinished() > found ", #segmentsToMerge, "segments after the last boss") end @@ -843,7 +924,7 @@ function _G._detalhes:Start() end --> merge segments - if (_detalhes.mythic_plus.make_overall_when_done) then + if (_detalhes.mythic_plus.make_overall_when_done and not self.MythicPlus.IsRestoredState and not fromZoneLeft) then if (not InCombatLockdown() and not UnitAffectingCombat ("player")) then if (newFrame.DevelopmentDebug) then print ("Details!", "MythicDungeonFinished() > not in combat, creating overall segment now") @@ -856,6 +937,17 @@ function _G._detalhes:Start() _detalhes.schedule_mythicdungeon_overallrun_merge = true end end + + self.MythicPlus.IsRestoredState = nil + + --> shutdown parser for a few seconds to avoid opening new segments after the run ends + if (not fromZoneLeft) then + self:CaptureSet (false, "damage", false, 15) + self:CaptureSet (false, "energy", false, 15) + self:CaptureSet (false, "aura", false, 15) + self:CaptureSet (false, "energy", false, 15) + self:CaptureSet (false, "spellcast", false, 15) + end end end @@ -871,6 +963,9 @@ function _G._detalhes:Start() print ("Details!", "MythicDungeonStarted() > CHALLENGE_MODE_START triggered, setting up details!") end + --> this counter is individual for each character + self.mythic_dungeon_id = self.mythic_dungeon_id + 1 --14 --15 + local mythicLevel = C_ChallengeMode.GetActiveKeystoneInfo() local zoneName, _, _, _, _, _, _, currentZoneID = GetInstanceInfo() local ejID = EJ_GetCurrentInstance() @@ -880,13 +975,13 @@ function _G._detalhes:Start() self.MythicPlus.DungeonName = zoneName self.MythicPlus.DungeonID = currentZoneID self.MythicPlus.StartedAt = time()+9.7 --> there's the countdown timer of 10 seconds + self.MythicPlus.EndedAt = nil --reset self.MythicPlus.SegmentID = 1 self.MythicPlus.Level = mythicLevel self.MythicPlus.ejID = ejID self.MythicPlus.PreviousBossKilledAt = time() - - --> this counter is individual for each character - self.mythic_dungeon_id = self.mythic_dungeon_id + 1 --14 --15 + + self:SaveState_CurrentMythicDungeonRun (self.mythic_dungeon_id, zoneName, currentZoneID, time()+9.7, 1, mythicLevel, ejID, time()) --> start a new combat segment after 10 seconds if (_detalhes.mythic_plus.always_in_combat) then @@ -901,6 +996,8 @@ function _G._detalhes:Start() local name, groupType, difficultyID, difficult = GetInstanceInfo() if (groupType == "party" and self.overall_clear_newchallenge) then self.historico:resetar_overall() + self:Msg ("overall data are now reset.") + if (self.debug) then self:Msg ("(debug) timer is for a mythic+ dungeon, overall has been reseted.") end @@ -911,26 +1008,43 @@ function _G._detalhes:Start() end end + function newFrame.OnChallengeModeStart() + --> is this a mythic dungeon? + local _, _, difficulty, _, _, _, _, currentZoneID = GetInstanceInfo() + + if (newFrame.DevelopmentDebug) then + print ("Details!", "Dungeon Dificulty:", difficulty, currentZoneID) + end + + if (difficulty == 8 and newFrame.LastTimer and newFrame.LastTimer+2 > GetTime()) then + --> start the dungeon on Details! + newFrame.MythicDungeonStarted() + else + --> from zone changed + local mythicLevel = C_ChallengeMode.GetActiveKeystoneInfo() + local zoneName, _, _, _, _, _, _, currentZoneID = GetInstanceInfo() + + if (not self.MythicPlus.Started and self.MythicPlus.DungeonID == currentZoneID and self.MythicPlus.Level == mythicLevel) then + self.MythicPlus.Started = true + self.MythicPlus.EndedAt = nil + _detalhes.mythic_dungeon_currentsaved.started = true + newFrame.IsDoingMythicDungeon = true + end + end + end + newFrame:SetScript ("OnEvent", function (_, event, ...) - - if (event == "CHALLENGE_MODE_START") then + + if (event == "START_TIMER") then + newFrame.LastTimer = GetTime() + + elseif (event == "CHALLENGE_MODE_START") then --> CHALLENGE_MODE_START does trigger every time the player enters a mythic dungeon already in progress - + if (newFrame.DevelopmentDebug) then print ("Details!", event, ...) end - - --> is this a mythic dungeon? - local _, _, difficulty, _, _, _, _, currentZoneID = GetInstanceInfo() - - if (newFrame.DevelopmentDebug) then - print ("Details!", "Dungeon Dificulty:", difficulty, currentZoneID) - end - - if (difficulty == 8) then - --> start the dungeon on Details! - newFrame.MythicDungeonStarted() - end + C_Timer.After (0.5, newFrame.OnChallengeModeStart) elseif (event == "CHALLENGE_MODE_COMPLETED") then if (newFrame.DevelopmentDebug) then @@ -963,7 +1077,19 @@ function _G._detalhes:Start() end self:SairDoCombate() end + + --> just in case the combat get tagged as boss fight self.tabela_vigente.is_boss = nil + + --> tag the combat as mythic dungeon trash + local zoneName, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceMapID, instanceGroupSize = GetInstanceInfo() + self.tabela_vigente.is_mythic_dungeon_trash = { + ZoneName = zoneName, + MapID = instanceMapID, + Level = _detalhes.MythicPlus.Level, + EJID = _detalhes.MythicPlus.ejID, + } + end end end @@ -983,7 +1109,7 @@ function _G._detalhes:Start() newFrame.BossDefeated (true) --> finish the mythic run - newFrame.MythicDungeonFinished() + newFrame.MythicDungeonFinished (true) end end @@ -1306,6 +1432,9 @@ function _G._detalhes:Start() if (not _detalhes.schedule_chat_enter and not _detalhes.schedule_chat_leave) then _detalhes:ScheduleTimer ("CheckChatOnZoneChange", 60) end + + --> restore mythic dungeon state + _detalhes:RestoreState_CurrentMythicDungeonRun() --> open profiler _detalhes:OpenProfiler()