From f97b9fbe42e34b22bcde865327a4d541f03c792c Mon Sep 17 00:00:00 2001 From: tercio Date: Wed, 20 Aug 2014 18:02:20 -0300 Subject: [PATCH] - Left button on a enemy bar now show enemy damage taken, middle button open player detail window for that enemy. - Added new profile: Minimalistic v2. - Minimalistic v2 is now the default skin. - Graphical changes on icon packs with transparency. - Removed slash command '/d', added '/de' instead. - Added custom spells for Atonement Critical, Power Word: Solace Critical, Lifebloom (the blood effect). - Revision done on Welcome Screen, many things removed, other added. - New API: instance:GetNumRows() return how many bars fit within the instance height. - New API: instance:GetRow (number) return the bar object. - New API: actorcontainer:ListActors() return a ipairs list of characters objects inside the container. - New API: _detalhes:CreateTestBars() create 10 bars of random characters for damage and heal. - New API: _detalhes:StartTestBarUpdate() begin to add and subtract value from created test actors. - New API: _detalhes:StopTestBarUpdate() stop the bar update test. - New Event: DETAILS_INSTANCE_NEWROW triggers when a new row is created. Signature: [1] instance [2] bar object. --- boot.lua | 28 +- classes/classe_damage.lua | 8 +- classes/classe_instancia.lua | 10 +- classes/classe_instancia_include.lua | 2 +- classes/container_combatentes.lua | 4 + core/windows.lua | 88 +++++ functions/events.lua | 3 + functions/profiles.lua | 6 +- functions/skins.lua | 96 ++++- functions/slash.lua | 2 +- functions/spellcache.lua | 10 +- gumps/janela_options.lua | 65 +--- gumps/janela_principal.lua | 19 +- gumps/janela_welcome.lua | 514 +++++++++++++-------------- images/classes_small_alpha.tga | Bin 40090 -> 49561 bytes images/classes_small_alpha_bw.tga | Bin 39760 -> 48295 bytes images/icons.tga | Bin 539962 -> 530037 bytes startup.lua | 27 +- 18 files changed, 513 insertions(+), 369 deletions(-) diff --git a/boot.lua b/boot.lua index 30cb00a0..bf504df1 100644 --- a/boot.lua +++ b/boot.lua @@ -4,8 +4,8 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.build_counter = 38 --it's 38 for release - _detalhes.userversion = "v1.22.4" + _detalhes.build_counter = 38 --it's 41 for release + _detalhes.userversion = "v1.23.0" _detalhes.realversion = 25 _detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" @@ -19,19 +19,18 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) --[[ -|cFFFFFF00a1.22.0 (|cFFFFCC00Ago 15, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Added new skin: ElvUI Frame Style (Black White).\n\n -|cFFFFFF00-|r Align With Right Chat Window option now check if the window have statusbar enabled.\n\n -|cFFFFFF00-|r Added support for hotcorners.\n\n -|cFFFFFF00-|r Few improvements on report for Deaths and Spells over Player Detail Window.\n\n -|cFFFFFF00-|r Added option for disable window groups.\n\n -|cFFFFFF00-|r Added option to disable reset button (reset only using its tooltip menu).\n\n -|cFFFFFF00-|r Added option for select the icon pack to use, also added black white icon pack.\n\n -|cFFFFFF00-|r Fixed many bugs involving skins and profiles, thing should run more smooth now.\n\n -|cFFFFFF00-|r Plugin Time Attack now correctly saves the attempt when pressing the big save button.\n\n +|cFFFFFF00a1.23.0 (|cFFFFCC00Ago 20, 2014|r|cFFFFFF00)|r:\n\n +|cFFFFFF00-|r Swapped left and middle button for enemy bars, now left button open damage taken and middle button player detail window.\n\n +|cFFFFFF00-|r Added new skin: Minimalistic v2.\n\n +|cFFFFFF00-|r Minimalistic v2 is now the default skin.\n\n +|cFFFFFF00-|r Few changes on both icon packs with transparency.\n\n +|cFFFFFF00-|r Replaced the slash command '/d' with '/de' |cFF999999(thanks @kamuul-mmochampion forum)|r.\n\n +|cFFFFFF00-|r Added custom spells for Atonement, Power Word: Solance and Life Bloom |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n --]] - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00a1.22.4 (|cFFFFCC00Ago 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added new skin: ElvUI Frame Style (Black White).\n\n|cFFFFFF00-|r Align With Right Chat Window option now check if the window have statusbar enabled.\n\n|cFFFFFF00-|r Few improvements on report for Deaths and Spells over Player Detail Window.\n\n|cFFFFFF00-|r Added option to disable reset button (reset only using its tooltip menu).\n\n|cFFFFFF00-|r Added option for disable window groups.\n\n|cFFFFFF00-|r Added option for select the icon pack to use, also added black white icon pack.\n\n|cFFFFFF00-|r Fixed many bugs involving skins and profiles, thing should run more smooth now.\n\n|cFFFFFF00-|r Plugin Time Attack now correctly saves the attempt when pressing the big save button.\n\n|cFFFFFF00-|r Added support for hotcorners.\n\n|cFFFFFF00v1.21.4 (|cFFFFCC00Ago 9, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Shaman's Ancestral Guidance on cooldowns list |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added a profile selection screen when Details! are running for the first time on a character.\n\n|cFFFFFF00-|r Added Menu Text Size option over miscellaneous section on options panel |cFF999999(thanks @ Revi-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed a bug over Healing Player Details Window where pets wasn't being shown |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed issue with summoning pets with unknown owners where it was breaking the summon of all the others pets. |cFF999999(thanks @ThunderLost-curse website)|r.\n\n|cFFFFFF00-|r Hot Corners isn't no more a part of Details!, instead of that, Hot Corner is now a standalone addon which needs to be installed separately for who wants to use it.\n\n|cFFFFFF00-|r Skin data is now stored inside the profiles, many code parts got rewrite, still may have few bugs but it's more reliable then before.\n\n|cFFFFFF00-|r Rework on Auras and Voidzones: now shows damage, dps and percentage. Also its tooltip got fixes and now shows the correct damage done to players.\n\n|cFFFFFF00-|r Tooltip for Enemies now shows damage taken from players |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Right clicking a real-time enemy bar, makes it back to Enemies display instead of show Bookmark panel |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Tank comparison from previous segment now uses the same percentage method from player comparison panel.\n\n|cFFFFFF00-|r Fix bug with the slash command 'show' where was ignoring the window limit set on options panel |cFF999999(thanks @Castiel-US-Azralon realm)|r.\n\n|cFFFFFF00-|r Fixed few bugs with scroll bars, including scrolls on dropdown menu and player detail window |cFF999999(thanks @Revi-mmochampion forum)|r.\n\n|cFFFFFF00v1.20.2 (|cFFFFCC00Aug 1, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added a option under Miscellaneous section to provide spell link instead of spell name for helpful spells when reporting a death |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Improvements done on how deaths are handled, now latest events before death will be more precise.\n\n|cFFFFFF00-|r Implemented Damage Taken from environment like lava, gravity, etc.\n\n|cFFFFFF00-|r Added Warlock's Fire and Brimstone spell on customized spells.\n\n|cFFFFFF00-|r Added dwarf racial Stone Form on cooldown list |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Bookmark now are shared between all characters.\n\n|cFFFFFF00-|r Fixed few inconsistencies with trash recognition.\n\n|cFFFFFF00-|r Fixed Cloud Capture where sometimes it wasn't sharing.\n\n|cFFFFFF00-|r Fixed report where it wasn't sharing for guild and raid when the player name box were empty.\n\n|cFFFFFF00-|r Report box now also saves the position and the last channel used to report |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r You Are Not Prepared plugin now have tooltips for spells and its window auto opens after a boss encounter.\n\n|cFFFFFF00-|r Advanced Death Logs plugin got full rewrite (and still are in development).\n\n|cFFFFFF00v1.19.0 - v1.19.1 - v1.19.2 (|cFFFFCC00Jul 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! is now able to be translated by its community for all supported languages through Curse Forge Web Site:\n\n|cFFFFFF00http://wow.curseforge.com/addons/details/localization/|r\n\n|cFFFFFF00-|r Slash commands now are multi language, accepting both english and the localized language.\n\n|cFFFFFF00-|r Added Data Broker for: Combat Time, Player Dps and Player Hps.\n\n|cFFFFFF00-|r Rework on plugins: Timeline, You Are Not Prepared, Tiny Threat, Encounter Details. All those plugins got a options panel and few improvaments.\n\n|cFFFFFF00-|r Trash segments won't be saved anymore.\n\n|cFFFFFF00-|r Added support for plugins options.\n\n|cFFFFFF00-|r Revamp on Deaths report lines, adding links for harmful spells and changing the text order |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Modified the percentage used on Comparison panel |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed the Raid Dps and Hps data exported by Data Broker |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00v1.18.4 - v1.18.5 - v1.18.6 (|cFFFFCC00Jul 13, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added option to customize the bar left text.\n\n|cFFFFFF00-|r Added option for show or hide bar placement number.\n\n|cFFFFFF00-|r Spell icon is shown in the bar when the enemy character is a environment spell type.\n\n|cFFFFFF00-|r Changed the non-player enemy icon (monsters).\n\n|cFFFFFF00-|r Fixed bug on flex performance profile |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added new version tracker which should alert you when a newer Details! version is found.\n\n|cFFFFFF00-|r Added Enemy Damage Taken by clicking with middle mouse button over a enemy bar (enemies display).\n\n|cFFFFFF00-|r Added import/export for saved skins and custom displays created.\n\n|cFFFFFF00-|r Small changes on ElvUI Frame Style skin (need reaply).\n\n|cFFFFFF00-|r Fixed the death recognition for bosses, now it should show the correct color over segments menu.\n\n|cFFFFFF00-|r Fixed Dps inacuracy when plyaing solo (no party or raid group).\n\n|cFFFFFF00-|r Fixed the duration time of buffs applied before the pull, like pre-potions.\n\n|cFFFFFF00v1.17.5 (|cFFFFCC00Jun 30, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Shortcut panel is now known as Bookmarks and a revamp has done on its panel.\n\n|cFFFFFF00-|r NickTag now doesnt check anymore if a received nickname from other guild member is invalid.\n\n|cFFFFFF00-|r Healthstone now is considered a cooldown.\n\n|cFFFFFF00-|r Few improvements on Default Skin, Minimalistic Skin and ElvUI Frame Style Skin.\n\n|cFFFFFF00-|r Revamp on Image Editor, many bugs solves and now it is usable.\n\n|cFFFFFF00-|r 'Hide' slash command now hides all opened windows; 'Show', open all closed windows and 'New' create a new window.\n\n|cFFFFFF00-|r Added Devotion Aura, Rallying Cry as cooldowns.\n\n|cFFFFFF00-|r Added options for lock, unlock, break snap, close, reopen and create new window.\n\n|cFFFFFF00-|r Added a options panel for HotCorners, access it through options button or slash hotcorner command.\n\n|cFFFFFF00-|r Added 'Logos' and 'Raid & Dungeons' sections for Wallpapers. \n\n|cFFFFFF00-|r Added a option to load a image from the computer to use as wallpaper.\n\n|cFFFFFF00-|r Fixed the percent issue with Healing Done and HPS while in combat.\n\n|cFFFFFF00-|r Fixed non-combat switch by role where changing role wasnt changing the shown attribute.\n\n|cFFFFFF00-|r Fixed 'While in Combat' hiding schema |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed several bugs on Interact Auto Transparency.\n\n|cFFFFFF00-|r Fixed the report window alert when opening the report window and it already is opened |cFF999999(thanks @Rasstapp-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed the gap between last row created and the end of the window.\n\n|cFFFFFF00-|r Fixed all tooltips bugs on Wallpaper Section on Options Panel.\n\n|cFFFFFF00a1.17.0 (|cFFFFCC00Jun 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Support for Custom Displays has been rewrited, to access the new panel go to Sword Menu -> Custom -> Create New Display." + + + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00a1.23.0 (|cFFFFCC00Ago 20, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Swapped left and middle button for enemy bars, now left button open damage taken and middle button player detail window.\n\n|cFFFFFF00-|r Added new skin: Minimalistic v2.\n\n|cFFFFFF00-|r Minimalistic v2 is now the default skin.\n\n|cFFFFFF00-|r Few changes on both icon packs with transparency.\n\n|cFFFFFF00-|r Replaced the slash command '/d' with '/de' |cFF999999(thanks @kamuul-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added custom spells for Atonement, Power Word: Solance and Life Bloom |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00a1.22.4 (|cFFFFCC00Ago 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added new skin: ElvUI Frame Style (Black White).\n\n|cFFFFFF00-|r Align With Right Chat Window option now check if the window have statusbar enabled.\n\n|cFFFFFF00-|r Few improvements on report for Deaths and Spells over Player Detail Window.\n\n|cFFFFFF00-|r Added option to disable reset button (reset only using its tooltip menu).\n\n|cFFFFFF00-|r Added option for disable window groups.\n\n|cFFFFFF00-|r Added option for select the icon pack to use, also added black white icon pack.\n\n|cFFFFFF00-|r Fixed many bugs involving skins and profiles, thing should run more smooth now.\n\n|cFFFFFF00-|r Plugin Time Attack now correctly saves the attempt when pressing the big save button.\n\n|cFFFFFF00-|r Added support for hotcorners.\n\n|cFFFFFF00v1.21.4 (|cFFFFCC00Ago 9, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Shaman's Ancestral Guidance on cooldowns list |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added a profile selection screen when Details! are running for the first time on a character.\n\n|cFFFFFF00-|r Added Menu Text Size option over miscellaneous section on options panel |cFF999999(thanks @ Revi-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed a bug over Healing Player Details Window where pets wasn't being shown |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed issue with summoning pets with unknown owners where it was breaking the summon of all the others pets. |cFF999999(thanks @ThunderLost-curse website)|r.\n\n|cFFFFFF00-|r Hot Corners isn't no more a part of Details!, instead of that, Hot Corner is now a standalone addon which needs to be installed separately for who wants to use it.\n\n|cFFFFFF00-|r Skin data is now stored inside the profiles, many code parts got rewrite, still may have few bugs but it's more reliable then before.\n\n|cFFFFFF00-|r Rework on Auras and Voidzones: now shows damage, dps and percentage. Also its tooltip got fixes and now shows the correct damage done to players.\n\n|cFFFFFF00-|r Tooltip for Enemies now shows damage taken from players |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Right clicking a real-time enemy bar, makes it back to Enemies display instead of show Bookmark panel |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Tank comparison from previous segment now uses the same percentage method from player comparison panel.\n\n|cFFFFFF00-|r Fix bug with the slash command 'show' where was ignoring the window limit set on options panel |cFF999999(thanks @Castiel-US-Azralon realm)|r.\n\n|cFFFFFF00-|r Fixed few bugs with scroll bars, including scrolls on dropdown menu and player detail window |cFF999999(thanks @Revi-mmochampion forum)|r.\n\n|cFFFFFF00v1.20.2 (|cFFFFCC00Aug 1, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added a option under Miscellaneous section to provide spell link instead of spell name for helpful spells when reporting a death |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Improvements done on how deaths are handled, now latest events before death will be more precise.\n\n|cFFFFFF00-|r Implemented Damage Taken from environment like lava, gravity, etc.\n\n|cFFFFFF00-|r Added Warlock's Fire and Brimstone spell on customized spells.\n\n|cFFFFFF00-|r Added dwarf racial Stone Form on cooldown list |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Bookmark now are shared between all characters.\n\n|cFFFFFF00-|r Fixed few inconsistencies with trash recognition.\n\n|cFFFFFF00-|r Fixed Cloud Capture where sometimes it wasn't sharing.\n\n|cFFFFFF00-|r Fixed report where it wasn't sharing for guild and raid when the player name box were empty.\n\n|cFFFFFF00-|r Report box now also saves the position and the last channel used to report |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r You Are Not Prepared plugin now have tooltips for spells and its window auto opens after a boss encounter.\n\n|cFFFFFF00-|r Advanced Death Logs plugin got full rewrite (and still are in development).\n\n|cFFFFFF00v1.19.0 - v1.19.1 - v1.19.2 (|cFFFFCC00Jul 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! is now able to be translated by its community for all supported languages through Curse Forge Web Site:\n\n|cFFFFFF00http://wow.curseforge.com/addons/details/localization/|r\n\n|cFFFFFF00-|r Slash commands now are multi language, accepting both english and the localized language.\n\n|cFFFFFF00-|r Added Data Broker for: Combat Time, Player Dps and Player Hps.\n\n|cFFFFFF00-|r Rework on plugins: Timeline, You Are Not Prepared, Tiny Threat, Encounter Details. All those plugins got a options panel and few improvaments.\n\n|cFFFFFF00-|r Trash segments won't be saved anymore.\n\n|cFFFFFF00-|r Added support for plugins options.\n\n|cFFFFFF00-|r Revamp on Deaths report lines, adding links for harmful spells and changing the text order |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Modified the percentage used on Comparison panel |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed the Raid Dps and Hps data exported by Data Broker |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00v1.18.4 - v1.18.5 - v1.18.6 (|cFFFFCC00Jul 13, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added option to customize the bar left text.\n\n|cFFFFFF00-|r Added option for show or hide bar placement number.\n\n|cFFFFFF00-|r Spell icon is shown in the bar when the enemy character is a environment spell type.\n\n|cFFFFFF00-|r Changed the non-player enemy icon (monsters).\n\n|cFFFFFF00-|r Fixed bug on flex performance profile |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added new version tracker which should alert you when a newer Details! version is found.\n\n|cFFFFFF00-|r Added Enemy Damage Taken by clicking with middle mouse button over a enemy bar (enemies display).\n\n|cFFFFFF00-|r Added import/export for saved skins and custom displays created.\n\n|cFFFFFF00-|r Small changes on ElvUI Frame Style skin (need reaply).\n\n|cFFFFFF00-|r Fixed the death recognition for bosses, now it should show the correct color over segments menu.\n\n|cFFFFFF00-|r Fixed Dps inacuracy when plyaing solo (no party or raid group).\n\n|cFFFFFF00-|r Fixed the duration time of buffs applied before the pull, like pre-potions.\n\n|cFFFFFF00v1.17.5 (|cFFFFCC00Jun 30, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Shortcut panel is now known as Bookmarks and a revamp has done on its panel.\n\n|cFFFFFF00-|r NickTag now doesnt check anymore if a received nickname from other guild member is invalid.\n\n|cFFFFFF00-|r Healthstone now is considered a cooldown.\n\n|cFFFFFF00-|r Few improvements on Default Skin, Minimalistic Skin and ElvUI Frame Style Skin.\n\n|cFFFFFF00-|r Revamp on Image Editor, many bugs solves and now it is usable.\n\n|cFFFFFF00-|r 'Hide' slash command now hides all opened windows; 'Show', open all closed windows and 'New' create a new window.\n\n|cFFFFFF00-|r Added Devotion Aura, Rallying Cry as cooldowns.\n\n|cFFFFFF00-|r Added options for lock, unlock, break snap, close, reopen and create new window.\n\n|cFFFFFF00-|r Added a options panel for HotCorners, access it through options button or slash hotcorner command.\n\n|cFFFFFF00-|r Added 'Logos' and 'Raid & Dungeons' sections for Wallpapers. \n\n|cFFFFFF00-|r Added a option to load a image from the computer to use as wallpaper.\n\n|cFFFFFF00-|r Fixed the percent issue with Healing Done and HPS while in combat.\n\n|cFFFFFF00-|r Fixed non-combat switch by role where changing role wasnt changing the shown attribute.\n\n|cFFFFFF00-|r Fixed 'While in Combat' hiding schema |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed several bugs on Interact Auto Transparency.\n\n|cFFFFFF00-|r Fixed the report window alert when opening the report window and it already is opened |cFF999999(thanks @Rasstapp-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed the gap between last row created and the end of the window." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails!:|r " --> startup @@ -259,6 +258,9 @@ do SharedMedia:Register ("background", "Details Ground", [[Interface\AddOns\Details\images\background]]) SharedMedia:Register ("border", "Details BarBorder 1", [[Interface\AddOns\Details\images\border_1]]) SharedMedia:Register ("border", "Details BarBorder 2", [[Interface\AddOns\Details\images\border_2]]) + + --SharedMedia:Register ("font", "UT Saah", [[Interface\Addons\Details\fonts\utsaahb.ttf]]) + --> global 'vardump' for dump table contents over chat panel function vardump (t) diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index b0b16e33..22b7028e 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -1847,8 +1847,10 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) --> enemies if (instancia.sub_atributo == 6) then GameCooltip:AddLine (" ") + GameCooltip:AddLine (Loc ["STRING_LEFTCLICK_DAMAGETAKEN"]) + --GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 8/512, 70/512, 224/512, 306/512) GameCooltip:AddLine (Loc ["STRING_MIDDLECLICK_DAMAGETAKEN"]) - GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 14/512, 64/512, 127/512, 204/512) + --GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 14/512, 64/512, 127/512, 204/512) end return true @@ -1944,8 +1946,10 @@ function atributo_damage:ToolTip_DamageTaken (instancia, numero, barra, keydown) --> enemies if (instancia.sub_atributo == 6) then GameCooltip:AddLine (" ") + GameCooltip:AddLine (Loc ["STRING_LEFTCLICK_DAMAGETAKEN"]) + --GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 8/512, 70/512, 224/512, 306/512) GameCooltip:AddLine (Loc ["STRING_MIDDLECLICK_DAMAGETAKEN"]) - GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 14/512, 64/512, 127/512, 204/512) + --GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 10, 14, 14/512, 64/512, 127/512, 204/512) end return true diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index f7552f2c..01205c31 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -228,6 +228,14 @@ function _detalhes:GetFreeInstancesAmount() return _detalhes.instances_amount - #_detalhes.tabela_instancias end +function _detalhes:GetNumRows() + return self.rows_fit_in_window +end + +function _detalhes:GetRow (index) + return self.barras [index] +end + ------------------------------------------------------------------------------------------------------------------------ --> retorna se a instância esta ou não ativa @@ -1164,7 +1172,7 @@ end new_instance:ShowSideBars() new_instance.skin = "no skin" - new_instance:ChangeSkin ("Minimalistic") + new_instance:ChangeSkin ("Minimalistic v2") --> apply standard skin if have one saved --[[ diff --git a/classes/classe_instancia_include.lua b/classes/classe_instancia_include.lua index d0f2dc7d..5698d41c 100644 --- a/classes/classe_instancia_include.lua +++ b/classes/classe_instancia_include.lua @@ -44,7 +44,7 @@ end _detalhes.instance_defaults = { --skin - skin = "Minimalistic", + skin = "Minimalistic v2", --baseframe backdrop bg_alpha = 0.7, bg_r = 0.0941, diff --git a/classes/container_combatentes.lua b/classes/container_combatentes.lua index d7d1276f..64071ab6 100644 --- a/classes/container_combatentes.lua +++ b/classes/container_combatentes.lua @@ -87,6 +87,10 @@ return total end + function container_combatentes:ListActors() + return _ipairs (self._ActorTable) + end + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> internals diff --git a/core/windows.lua b/core/windows.lua index 3c4f038c..06462d17 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -1653,6 +1653,94 @@ end end + function _detalhes:TestBarsUpdate() + local current_combat = _detalhes:GetCombat ("current") + for index, actor in current_combat[1]:ListActors() do + actor.total = actor.total + (actor.total / 100 * math.random (1, 5)) + actor.total = actor.total - (actor.total / 100 * math.random (1, 5)) + end + for index, actor in current_combat[2]:ListActors() do + actor.total = actor.total + (actor.total / 100 * math.random (1, 5)) + actor.total = actor.total - (actor.total / 100 * math.random (1, 5)) + end + current_combat[1].need_refresh = true + current_combat[2].need_refresh = true + end + + function _detalhes:StartTestBarUpdate() + if (_detalhes.test_bar_update) then + _detalhes:CancelTimer (_detalhes.test_bar_update) + end + _detalhes.test_bar_update = _detalhes:ScheduleRepeatingTimer ("TestBarsUpdate", 0.1) + end + function _detalhes:StopTestBarUpdate() + if (_detalhes.test_bar_update) then + _detalhes:CancelTimer (_detalhes.test_bar_update) + end + _detalhes.test_bar_update = nil + end + + function _detalhes:CreateTestBars() + local current_combat = _detalhes:GetCombat ("current") + + local actors_name = {"Ragnaros", "The Lich King", "Your Neighbor", "Your Raid Leader", "Your Internet Girlfriend", "Mr. President", "A Shadow Priest Complaining About Dps", "Ms. Gray", "Parry Hotter", "Your Math Teacher", "King Djoffrey", UnitName ("player") .. " Snow", "A Drunk Dawrf", "Somebody That You Used To Know", "Low Dps Guy", "Helvis Phresley (Death Log Not Found)", "Stormwind Guard", "A PvP Player", "Bolvar Fordragon","Malygos","Akama","Anachronos","Lady Blaumeux","Cairne Bloodhoof","Borivar","C'Thun","Drek'Thar","Durotan","Eonar","Footman Malakai","Bolvar Fordragon","Fritz Fizzlesprocket","Lisa Gallywix","M'uru","High Priestess MacDonnell","Nazgrel","Ner'zhul","Saria Nightwatcher","Chief Ogg'ora","Ogoun","Grimm Onearm","Apothecary Oni'jus","Orman of Stromgarde","General Rajaxx","Baron Rivendare","Roland","Archmage Trelane","Liam Trollbane"} + local actors_classes = CLASS_SORT_ORDER + + local total_damage = 0 + local total_heal = 0 + + for i = 1, 10 do + local robot = current_combat[1]:PegarCombatente (0x0000000000000, actors_name [math.random (1, #actors_name)], 0x114, true) + robot.grupo = true + robot.classe = actors_classes [math.random (1, #actors_classes)] + robot.total = math.random (10000000, 60000000) + robot.damage_taken = math.random (10000000, 60000000) + robot.friendlyfire_total = math.random (10000000, 60000000) + + total_damage = total_damage + robot.total + + if (robot.nome == "King Djoffrey") then + local robot_death = current_combat[4]:PegarCombatente (0x0000000000000, robot.nome, 0x114, true) + robot_death.grupo = true + robot_death.classe = robot.classe + local esta_morte = {{true, 96648, 100000, time(), 0, "Lady Holenna"}, {true, 96648, 100000, time()-52, 100000, "Lady Holenna"}, {true, 96648, 100000, time()-86, 200000, "Lady Holenna"}, {true, 96648, 100000, time()-101, 300000, "Lady Holenna"}, {false, 55296, 400000, time()-54, 400000, "King Djoffrey"}, {true, 14185, 0, time()-59, 400000, "Lady Holenna"}, {false, 87351, 400000, time()-154, 400000, "King Djoffrey"}, {false, 56236, 400000, time()-158, 400000, "King Djoffrey"} } + local t = {esta_morte, time(), robot.nome, robot.classe, 400000, "52m 12s", ["dead"] = true} + table.insert (current_combat.last_events_tables, #current_combat.last_events_tables+1, t) + + elseif (robot.nome == "Mr. President") then + rawset (_detalhes.spellcache, 56488, {"Nuke", 56488, [[Interface\ICONS\inv_gizmo_supersappercharge]]}) + robot.spell_tables:PegaHabilidade (56488, true, "SPELL_DAMAGE") + robot.spell_tables._ActorTable [56488].total = robot.total + end + + local robot = current_combat[2]:PegarCombatente (0x0000000000000, actors_name [math.random (1, #actors_name)], 0x114, true) + robot.grupo = true + robot.classe = actors_classes [math.random (1, #actors_classes)] + robot.total = math.random (10000000, 60000000) + robot.totalover = math.random (10000000, 60000000) + robot.totalabsorb = math.random (10000000, 60000000) + robot.healing_taken = math.random (10000000, 60000000) + + total_heal = total_heal + robot.total + + end + + current_combat.start_time = time()-360 + current_combat.end_time = time() + + current_combat.totals_grupo [1] = total_damage + current_combat.totals_grupo [2] = total_heal + current_combat.totals [1] = total_damage + current_combat.totals [2] = total_heal + + for _, instance in ipairs (_detalhes.tabela_instancias) do + if (instance:IsEnabled()) then + instance:InstanceReset() + end + end + + end + --old versions dialog --[[ --print ("Last Version:", _detalhes_database.last_version, "Last Interval Version:", _detalhes_database.last_realversion) diff --git a/functions/events.lua b/functions/events.lua index 4b111865..10c0df94 100644 --- a/functions/events.lua +++ b/functions/events.lua @@ -21,6 +21,7 @@ ["DETAILS_INSTANCE_CHANGESEGMENT"] = {}, ["DETAILS_INSTANCE_CHANGEATTRIBUTE"] = {}, ["DETAILS_INSTANCE_CHANGEMODE"] = {}, + ["DETAILS_INSTANCE_NEWROW"] = {}, --> data ["DETAILS_DATA_RESET"] = {}, @@ -68,6 +69,7 @@ local common_events = { ["DETAILS_INSTANCE_CHANGESEGMENT"] = true, ["DETAILS_INSTANCE_CHANGEATTRIBUTE"] = true, ["DETAILS_INSTANCE_CHANGEMODE"] = true, + ["DETAILS_INSTANCE_NEWROW"] = true, ["DETAILS_DATA_RESET"] = true, ["DETAILS_DATA_SEGMENTREMOVED"] = true, ["COMBAT_PLAYER_ENTER"] = true, @@ -198,6 +200,7 @@ local common_events = { function _detalhes:SendEvent (event, object, ...) --> send event to all registred plugins + if (event == "PLUGIN_DISABLED" or event == "PLUGIN_ENABLED") then return object:OnDetailsEvent (event, ...) diff --git a/functions/profiles.lua b/functions/profiles.lua index 9d7508ff..72259c12 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -153,7 +153,7 @@ function _detalhes:ResetProfile (profile_name) instance:AtivarInstancia() end instance.skin = "" - instance:ChangeSkin ("Minimalistic") + instance:ChangeSkin ("Minimalistic v2") end for index, instance in pairs (_detalhes.unused_instances) do @@ -161,7 +161,7 @@ function _detalhes:ResetProfile (profile_name) instance:AtivarInstancia() end instance.skin = "" - instance:ChangeSkin ("Minimalistic") + instance:ChangeSkin ("Minimalistic v2") end --> reset the profile @@ -280,7 +280,7 @@ function _detalhes:ApplyProfile (profile_name, nosave, is_copy) --> apply default config on this instance (flat skin texture was 'ResetInstanceConfig' running). instance1:ResetInstanceConfig() instance1.skin = "no skin" - instance1:ChangeSkin ("Minimalistic") + instance1:ChangeSkin ("Minimalistic v2") --> release the snap and lock instance1:LoadLocalInstanceConfig() diff --git a/functions/skins.lua b/functions/skins.lua index 9212d52e..1910259e 100644 --- a/functions/skins.lua +++ b/functions/skins.lua @@ -143,12 +143,77 @@ local _ show_sidebars = false, show_statusbar = false, - color = {.3, .3, .3, 1}, + color = {.3, .3, .3, 0.81}, bg_alpha = 0.2, row_info = { texture = "Blizzard Character Skills Bar", font_face = "Arial Narrow", + texture_background_class_color = false, + texture_background = "Details Serenity", + fixed_texture_background_color = {0, 0, 0, 0.3186} + }, + attribute_text = {enabled = true, side = 1, text_size = 11, anchor = {-18, 4}, text_color = {1, 1, 1, 1}, text_face = "Arial Narrow"}, + }, + + callback = function (skin, instance, just_updating) + --none + end, + + }) + + _detalhes:InstallSkin ("Minimalistic v2", { + file = [[Interface\AddOns\Details\images\skins\classic_skin]], + author = "Details!", + version = "1.0", + site = "unknown", + desc = "classic skin.", + + micro_frames = {color = {1, 1, 1, 1}, font = "Friz Quadrata TT", size = 10}, + + can_change_alpha_head = true, + icon_anchor_main = {-1, -5}, + icon_anchor_plugins = {-7, -13}, + icon_plugins_size = {19, 18}, + + --anchors: + icon_point_anchor = {-37, 0}, + left_corner_anchor = {-107, 0}, + right_corner_anchor = {96, 0}, + + icon_point_anchor_bottom = {-37, 12}, + left_corner_anchor_bottom = {-107, 0}, + right_corner_anchor_bottom = {96, 0}, + + --overwrites + instance_cprops = { + hide_icon = true, + + menu_anchor = {-60, 0, side = 2}, + menu_anchor_down = {-55, -1}, + menu2_anchor = {32, 3}, + menu2_anchor_down = {32, 2}, + + menu_icons_size = 0.8, + plugins_grow_direction = 1, + + instancebutton_config = {size = {20, 16}, anchor = {5, 0}, textcolor = {.8, .6, .0, 0.8}, textsize = 11, textfont = "Friz Quadrata TT", highlight_texture = [[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]]}, + resetbutton_config = {size = {13, 13}, anchor = {2, 0}, normal_texture = [[Interface\Addons\Details\Images\reset_button2]], highlight_texture = [[Interface\Addons\Details\Images\reset_button2]]}, + closebutton_config = {size = {19, 19}, alpha = 0.8}, + + show_sidebars = false, + show_statusbar = false, + color = {.3, .3, .3, 0.80}, + bg_alpha = 0.2, + + row_info = { + texture = "Details Serenity", + font_face = "Arial Narrow", + texture_background_class_color = false, + texture_background = "Details Serenity", + fixed_texture_background_color = {0, 0, 0, 0.3186}, + icon_file = [[Interface\AddOns\Details\images\classes_small_alpha]], + start_after_icon = false, }, attribute_text = {enabled = true, side = 1, text_size = 11, anchor = {-18, 4}, text_color = {1, 1, 1, 1}, text_face = "Arial Narrow"}, }, @@ -188,22 +253,34 @@ local _ row_info = { textL_outline = false, textR_outline = false, - texture = "Blizzard Character Skills Bar", + texture = "Details Serenity", texture_background = "Details Serenity", texture_background_class_color = false, - fixed_texture_background_color = {0, 0, 0, .2}, + fixed_texture_background_color = {1, 1, 1, .2557}, + icon_file = [[Interface\AddOns\Details\images\classes_small_bw]], }, - menu_anchor = {2, -2, side = 1}, - menu_anchor_down = {2, -4}, - menu2_anchor = {32, 2}, + menu_anchor = {-60, 0, side = 2}, + menu_anchor_down = {-55, -1}, + menu2_anchor = {32, 3}, menu2_anchor_down = {32, 2}, + + menu_icons_size = 0.8, + plugins_grow_direction = 1, + + hide_icon = true, + desaturated_menu = true, + desaturated_menu2 = true, + + attribute_text = {enabled = true, anchor = {-20, 4}, text_face = "Friz Quadrata TT", text_size = 10, text_color = {1, 1, 1, .7}, side = 1, shadow = true}, instancebutton_config = {size = {20, 16}, anchor = {5, 1}, textcolor = {.9, .9, .9, 1}, textsize = 10, textfont = "Friz Quadrata TT", highlight_texture = [[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]]}, resetbutton_config = {size = {8, 16}, anchor = {1, -1}}, bg_alpha = 0.3, - + show_statusbar = false, + color = {1, 1, 1, 0.92}, + bg_alpha = 0.40, } }) @@ -545,7 +622,8 @@ local _ fixed_texture_background_color = {0, 0, 0, 0.471}, space = {left = 1, right = -2, between = 1}, backdrop = {enabled = true, size = 4, color = {0, 0, 0, 1}, texture = "Details BarBorder 2"}, - icon_file = [[Interface\AddOns\Details\images\classes_small_alpha]] + icon_file = [[Interface\AddOns\Details\images\classes_small_alpha]], + start_after_icon = false, }, wallpaper = { @@ -664,7 +742,7 @@ local _ }, ["backdrop"] = { ["enabled"] = true, - ["size"] = 20, + ["size"] = 10, ["color"] = { 0, -- [1] 0, -- [2] diff --git a/functions/slash.lua b/functions/slash.lua index f476373d..1bfcdf41 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -10,7 +10,7 @@ local UnitGUID = UnitGUID local tonumber= tonumber local LoggingCombat = LoggingCombat -SLASH_DETAILS1, SLASH_DETAILS2, SLASH_DETAILS3 = "/details", "/dt", "/d" +SLASH_DETAILS1, SLASH_DETAILS2, SLASH_DETAILS3 = "/details", "/dt", "/de" function SlashCmdList.DETAILS (msg, editbox) diff --git a/functions/spellcache.lua b/functions/spellcache.lua index 0acbcae4..0e6ae23b 100644 --- a/functions/spellcache.lua +++ b/functions/spellcache.lua @@ -69,6 +69,10 @@ do [124465] = {name = GetSpellInfo (124465) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> vampiric touch mastery proc (priest) [124468] = {name = GetSpellInfo (124468) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> mind flay mastery proc (priest) [124469] = {name = GetSpellInfo (124469) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> mind sear mastery proc (priest) + [94472] = {name = GetSpellInfo (94472) .. " (" .. Loc ["STRING_CRITICAL_ONLY"] .. ")"}, --> Atonement critical hit (priest) + [140816] = {name = GetSpellInfo (140816) .. " (" .. Loc ["STRING_CRITICAL_ONLY"] .. ")"}, --> Power Word: Solace critical hit (priest) + + [33778] = {name = GetSpellInfo (33778) .. " (bloom)"}, --lifebloom (bloom) [121414] = {name = GetSpellInfo (121414) .. " (Glaive #1)"}, --> glaive toss (hunter) [120761] = {name = GetSpellInfo (120761) .. " (Glaive #2)"}, --> glaive toss (hunter) @@ -77,9 +81,9 @@ do [45284] = {name = GetSpellInfo (45284) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> lightningbolt (shaman) [45297] = {name = GetSpellInfo (45297) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> chain lightning (shaman) - [131079] = {name = GetSpellInfo (131079) .. " (Icy Veins)"}, --> frostbolt with icy veins glyph (mage) - [131080] = {name = GetSpellInfo (131080) .. " (Icy Veins)"}, --> ice lance with icy veins glyph (mage) - [131081] = {name = GetSpellInfo (131081) .. " (Icy Veins)"}, --> frostfire with icy veins glyph (mage) + [131079] = {name = GetSpellInfo (131079) .. " (" .. GetSpellInfo (12472) .. ")"}, --> frostbolt with icy veins glyph (mage) + [131080] = {name = GetSpellInfo (131080) .. " (" .. GetSpellInfo (12472) .. ")"}, --> ice lance with icy veins glyph (mage) + [131081] = {name = GetSpellInfo (131081) .. " (" .. GetSpellInfo (12472) .. ")"}, --> frostfire with icy veins glyph (mage) [108686] = {name = GetSpellInfo (108686) .. " (" .. GetSpellInfo (108683) .. ")" }, --> immolate (brimstone) [108685] = {name = GetSpellInfo (108685) .. " (" .. GetSpellInfo (108683) .. ")" }, --> conflagrate (brimstone) diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index ab6b4af6..cb49ea69 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -321,69 +321,10 @@ function _detalhes:OpenOptionsWindow (instance, no_reopen) window.Disable3DColorPick:Hide() --> create bars - - local fill_bars = function() - local current_combat = _detalhes:GetCombat ("current") - - local actors_name = {"Ragnaros", "The Lich King", "Your Neighbor", "Your Raid Leader", "Your Internet Girlfriend", "Mr. President", "A Shadow Priest Complaining About Dps", "Ms. Gray", "Parry Hotter", "Your Math Teacher", "King Djoffrey", UnitName ("player") .. " Snow", "A Drunk Dawrf", "Somebody That You Used To Know", "Low Dps Guy", "Helvis Phresley (Death Log Not Found)", "Stormwind Guard", "A PvP Player", "Bolvar Fordragon","Malygos","Akama","Anachronos","Lady Blaumeux","Cairne Bloodhoof","Borivar","C'Thun","Drek'Thar","Durotan","Eonar","Footman Malakai","Bolvar Fordragon","Fritz Fizzlesprocket","Lisa Gallywix","M'uru","High Priestess MacDonnell","Nazgrel","Ner'zhul","Saria Nightwatcher","Chief Ogg'ora","Ogoun","Grimm Onearm","Apothecary Oni'jus","Orman of Stromgarde","General Rajaxx","Baron Rivendare","Roland","Archmage Trelane","Liam Trollbane"} - local actors_classes = CLASS_SORT_ORDER - - local total_damage = 0 - local total_heal = 0 - - for i = 1, 10 do - local robot = current_combat[1]:PegarCombatente (0x0000000000000, actors_name [math.random (1, #actors_name)], 0x114, true) - robot.grupo = true - robot.classe = actors_classes [math.random (1, #actors_classes)] - robot.total = math.random (10000000, 60000000) - robot.damage_taken = math.random (10000000, 60000000) - robot.friendlyfire_total = math.random (10000000, 60000000) - - total_damage = total_damage + robot.total - - if (robot.nome == "King Djoffrey") then - local robot_death = current_combat[4]:PegarCombatente (0x0000000000000, robot.nome, 0x114, true) - robot_death.grupo = true - robot_death.classe = robot.classe - local esta_morte = {{true, 96648, 100000, time(), 0, "Lady Holenna"}, {true, 96648, 100000, time()-52, 100000, "Lady Holenna"}, {true, 96648, 100000, time()-86, 200000, "Lady Holenna"}, {true, 96648, 100000, time()-101, 300000, "Lady Holenna"}, {false, 55296, 400000, time()-54, 400000, "King Djoffrey"}, {true, 14185, 0, time()-59, 400000, "Lady Holenna"}, {false, 87351, 400000, time()-154, 400000, "King Djoffrey"}, {false, 56236, 400000, time()-158, 400000, "King Djoffrey"} } - local t = {esta_morte, time(), robot.nome, robot.classe, 400000, "52m 12s", ["dead"] = true} - table.insert (current_combat.last_events_tables, #current_combat.last_events_tables+1, t) - - elseif (robot.nome == "Mr. President") then - rawset (_detalhes.spellcache, 56488, {"Nuke", 56488, [[Interface\ICONS\inv_gizmo_supersappercharge]]}) - robot.spell_tables:PegaHabilidade (56488, true, "SPELL_DAMAGE") - robot.spell_tables._ActorTable [56488].total = robot.total - end - - local robot = current_combat[2]:PegarCombatente (0x0000000000000, actors_name [math.random (1, #actors_name)], 0x114, true) - robot.grupo = true - robot.classe = actors_classes [math.random (1, #actors_classes)] - robot.total = math.random (10000000, 60000000) - robot.totalover = math.random (10000000, 60000000) - robot.totalabsorb = math.random (10000000, 60000000) - robot.healing_taken = math.random (10000000, 60000000) - - total_heal = total_heal + robot.total - - end - - current_combat.start_time = time()-360 - current_combat.end_time = time() - - current_combat.totals_grupo [1] = total_damage - current_combat.totals_grupo [2] = total_heal - current_combat.totals [1] = total_damage - current_combat.totals [2] = total_heal - - for _, instance in ipairs (_detalhes.tabela_instancias) do - if (instance:IsEnabled()) then - instance:InstanceReset() - end - end - - end - local fillbars = g:NewButton (window, _, "$parentCreateExampleBarsButton", nil, 110, 14, fill_bars, nil, nil, nil, Loc ["STRING_OPTIONS_TESTBARS"]) + + local fillbars = g:NewButton (window, _, "$parentCreateExampleBarsButton", nil, 110, 14, _detalhes.CreateTestBars, nil, nil, nil, Loc ["STRING_OPTIONS_TESTBARS"]) fillbars:SetPoint ("bottomleft", window.widget, "bottomleft", 200, 12) + --fillbars:InstallCustomTexture() --> right click to close diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 77f3b6c8..9e0d1993 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -1440,6 +1440,9 @@ local function barra_scripts (esta_barra, instancia, i) elseif (button == "MiddleButton") then --> verifica se é damage taken + + elseif (button == "LeftButton") then + if (instancia.atributo == 1 and instancia.sub_atributo == 6) then --> enemies local inimigo = esta_barra.minha_tabela.nome @@ -1478,10 +1481,9 @@ local function barra_scripts (esta_barra, instancia, i) instancia:TrocaTabela (instancia.segmento, 5, #_detalhes.custom) --func, true, 5, index - end - + end end - + esta_barra.texto_direita:SetPoint ("right", esta_barra.statusbar, "right", 1, -1) if (instancia.row_info.no_icon) then esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.statusbar, "left", 3, -1) @@ -1531,7 +1533,7 @@ local function barra_scripts (esta_barra, instancia, i) if (self.mouse_down and (self.mouse_down+0.4 > _GetTime() and (x == self.x and y == self.y)) or (x == self.x and y == self.y)) then --> a única maneira de abrir a janela de info é por aqui... - if (self.button == "LeftButton") then + if (self.button == "LeftButton" or self.button == "MiddleButton") then if (instancia.atributo == 5 or _IsShiftKeyDown()) then --> report return _detalhes:ReportSingleLine (instancia, self) @@ -2218,6 +2220,7 @@ end do + --search key: ~tooltip local tooltip_anchor = CreateFrame ("frame", "DetailsTooltipAnchor", UIParent) tooltip_anchor:SetSize (140, 20) tooltip_anchor:SetAlpha (0) @@ -2822,14 +2825,14 @@ function gump:CriaNovaBarra (instancia, index) new_row.w_mod = 0 new_row:EnableMouse (true) new_row:RegisterForClicks ("LeftButtonDown", "RightButtonDown") - + --> statusbar new_row.statusbar = CreateFrame ("StatusBar", "DetailsBarra_Statusbar_"..instancia.meu_id.."_"..index, new_row) --> frame for hold the backdrop border new_row.border = CreateFrame ("Frame", "DetailsBarra_Border_" .. instancia.meu_id .. "_" .. index, new_row.statusbar) new_row.border:SetFrameLevel (new_row.statusbar:GetFrameLevel()+1) new_row.border:SetAllPoints (new_row) - + --> create textures and icons new_row.textura = new_row.statusbar:CreateTexture (nil, "artwork") new_row.textura:SetHorizTile (false) @@ -2883,6 +2886,8 @@ function gump:CriaNovaBarra (instancia, index) --> refresh rows instancia:InstanceRefreshRows() + _detalhes:SendEvent ("DETAILS_INSTANCE_NEWROW", nil, instancia, new_row) + return new_row end @@ -4538,7 +4543,7 @@ function _detalhes:ChangeSkin (skin_name) local this_skin = _detalhes.skins [skin_name] if (not this_skin) then - skin_name = "Minimalistic" + skin_name = "Minimalistic v2" this_skin = _detalhes.skins [skin_name] end diff --git a/gumps/janela_welcome.lua b/gumps/janela_welcome.lua index a71ad02d..3ccfbe37 100644 --- a/gumps/janela_welcome.lua +++ b/gumps/janela_welcome.lua @@ -23,6 +23,13 @@ function _detalhes:OpenWelcomeWindow () window:SetMovable (true) window:SetScript ("OnMouseDown", function() window:StartMoving() end) window:SetScript ("OnMouseUp", function() window:StopMovingOrSizing() end) + window:SetScript ("OnHide", function() + --> start tutorial if this is first run + if (_detalhes.tutorial.logons < 2 and _detalhes.is_first_run) then + _detalhes:StartTutorial() + end + _detalhes.tabela_historico:resetar() + end) local background = window:CreateTexture (nil, "background") background:SetPoint ("topleft", window, "topleft") @@ -190,6 +197,19 @@ function _detalhes:OpenWelcomeWindow () _detalhes.standard_skin = savedObject end +-- frame alert + + local frame_alert = CreateFrame ("frame", nil, window) + frame_alert:SetPoint ("topright", window) + function _detalhes:StopPlayStretchAlert() + frame_alert.alert.animIn:Stop() + frame_alert.alert.animOut:Play() + _detalhes.stopwelcomealert = nil + end + frame_alert.alert = CreateFrame ("frame", "DetailsWelcomeWindowAlert", UIParent, "ActionBarButtonSpellActivationAlert") + frame_alert.alert:SetFrameStrata ("FULLSCREEN") + frame_alert.alert:Hide() + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> page 1 @@ -210,8 +230,129 @@ function _detalhes:OpenWelcomeWindow () pages [#pages+1] = {texto1, angel} + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--> Avatar and Nickname Page + + local bg555 = window:CreateTexture (nil, "overlay") + bg555:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) + bg555:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg555:SetHeight (125*3)--125 + bg555:SetWidth (89*3)--82 + bg555:SetAlpha (.05) + bg555:SetTexCoord (1, 0, 0, 1) + + local avatar_image = window:CreateTexture (nil, "overlay") + avatar_image:SetTexture ([[Interface\EncounterJournal\UI-EJ-BOSS-Default]]) + avatar_image:SetPoint ("topright", window, "topright", -5, -21) + avatar_image:SetWidth (128*1.2) + avatar_image:SetHeight (64*1.2) + local avatar_bg = g:NewImage (window, nil, 275, 60, nil, nil, "avatarPreview2", "$parentAvatarPreviewTexture2") + avatar_bg:SetTexture ([[Interface\PetBattles\Weather-StaticField]]) + avatar_bg:SetPoint ("topright", window, "topright", -5, -36) + avatar_bg:SetTexCoord (0, 1, 1, 0) + avatar_bg:SetSize (360, 60) + avatar_bg:SetVertexColor (.5, .5, .5, .5) + local nickname = g:NewLabel (window, _, "$parentAvatarNicknameLabel", "avatarNickname", UnitName ("player"), "GameFontHighlightSmall") + nickname:SetPoint ("center", avatar_bg, "center", 0, -15) + _detalhes:SetFontSize (nickname.widget, 18) + + avatar_bg:SetDrawLayer ("overlay", 2) + avatar_image:SetDrawLayer ("overlay", 3) + nickname:SetDrawLayer ("overlay", 3) + + local onPressEnter = function (_, _, text) + local accepted, errortext = _detalhes:SetNickname (text) + if (not accepted) then + _detalhes:Msg (errortext) + end + --> we call again here, because if not accepted the box return the previous value and if successful accepted, update the value for formated string. + local nick = _detalhes:GetNickname (UnitGUID ("player"), UnitName ("player"), true) + window.nicknameEntry.text = nick + nickname:SetText (nick) + nickname:SetPoint ("center", avatar_bg, "center", 0, -15) + end + + local nicknamelabel = g:NewLabel (window, nil, "$parentNickNameLabel", "nicknameLabel", Loc ["STRING_OPTIONS_NICKNAME"] .. ":", "GameFontHighlightLeft") + local nicknamebox = g:NewTextEntry (window, nil, "$parentNicknameEntry", "nicknameEntry", 140, 20, onPressEnter) + nicknamebox:HighlightText() + + nicknamebox:SetPoint ("left", nicknamelabel, "right", 2, 0) + nicknamelabel:SetPoint ("topleft", window, "topleft", 30, -160) + + function _detalhes:UpdateNicknameOnWelcomeWindow() + nicknamebox:SetText (select (1, UnitName ("player"))) + end + _detalhes:ScheduleTimer ("UpdateNicknameOnWelcomeWindow", 2) + + -- + + local avatarcallback = function (textureAvatar, textureAvatarTexCoord, textureBackground, textureBackgroundTexCoord, textureBackgroundColor) + _detalhes:SetNicknameBackground (textureBackground, textureBackgroundTexCoord, textureBackgroundColor, true) + _detalhes:SetNicknameAvatar (textureAvatar, textureAvatarTexCoord) + + avatar_image:SetTexture (textureAvatar) + avatar_image:SetTexCoord (1, 0, 0, 1) + + avatar_bg.texture = textureBackground + local r, l, t, b = unpack (textureBackgroundTexCoord) + avatar_bg:SetTexCoord (l, r, t, b) + local r, g, b = unpack (textureBackgroundColor) + avatar_bg:SetVertexColor (r, g, b, 1) + + _G.AvatarPickFrame.callback = nil + end + + local openAtavarPickFrame = function() + _G.AvatarPickFrame.callback = avatarcallback + _G.AvatarPickFrame:Show() + end + + local avatarbutton = g:NewButton (window, _, "$parentAvatarFrame", "chooseAvatarButton", 160, 18, openAtavarPickFrame, nil, nil, nil, "Pick Avatar", 1) + avatarbutton:InstallCustomTexture() + avatarbutton:SetPoint ("left", nicknamebox, "right", 10, 0) + -- + + local bg_avatar = window:CreateTexture (nil, "overlay") + bg_avatar:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg_avatar:SetHeight (125*3)--125 + bg_avatar:SetWidth (89*3)--82 + bg_avatar:SetAlpha (.1) + bg_avatar:SetTexCoord (1, 0, 0, 1) + + local texto_avatar1 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_avatar1:SetPoint ("topleft", window, "topleft", 20, -80) + texto_avatar1:SetText ("Nickname and Avatar") + + local texto_avatar2 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_avatar2:SetPoint ("topleft", window, "topleft", 30, -190) + texto_avatar2:SetText ("Avatars are shown up on tooltips and at the player detail window.") + texto_avatar2:SetTextColor (1, 1, 1, 1) + + local changemind = g:NewLabel (window, _, "$parentChangeMindAvatarLabel", "ChangeMindAvatarLabel", Loc ["STRING_WELCOME_2"], "GameFontNormal", 9, "orange") + changemind:SetPoint ("center", window, "center") + changemind:SetPoint ("bottom", window, "bottom", 0, 19) + changemind.align = "|" + + --Ambos são enviados aos demais membros da sua guilda que também usam Details!. Seu apelido é mostrado ao invés do nome do seu personagem. + + local texto_avatar3 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_avatar3:SetPoint ("topleft", window, "topleft", 30, -110) + texto_avatar3:SetText ("Both are sent to the other members of your guild who also use Details!. Your nickname is displayed instead of the name of your character.") + texto_avatar3:SetWidth (460) + texto_avatar3:SetHeight (100) + texto_avatar3:SetJustifyH ("left") + texto_avatar3:SetJustifyV ("top") + texto_avatar3:SetTextColor (1, 1, 1, 1) + + pages [#pages+1] = {bg555, bg_avatar, texto_avatar1, texto_avatar2, texto_avatar3, changemind, avatar_image, avatar_bg, nickname, nicknamelabel, nicknamebox, avatarbutton} + + for _, widget in ipairs (pages[#pages]) do + widget:Hide() + end + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> Skins Page @@ -222,7 +363,7 @@ function _detalhes:OpenWelcomeWindow () bg55:SetPoint ("bottomright", window, "bottomright", -10, 10) bg55:SetHeight (125*3)--125 bg55:SetWidth (89*3)--82 - bg55:SetAlpha (.1) + bg55:SetAlpha (.05) bg55:SetTexCoord (1, 0, 0, 1) local texto55 = window:CreateFontString (nil, "overlay", "GameFontNormal") @@ -255,10 +396,10 @@ function _detalhes:OpenWelcomeWindow () skins_image:SetHeight (133) skins_image:SetTexCoord (0, 0.41796875, 0, 0.259765625) --0, 0, 214 133 - --skin local onSelectSkin = function (_, _, skin_name) - instance:ChangeSkin (skin_name) + local instance1 = _detalhes:GetInstance (1) + instance1:ChangeSkin (skin_name) end local buildSkinMenu = function() @@ -269,7 +410,8 @@ function _detalhes:OpenWelcomeWindow () return skinOptions end - local skin_dropdown = g:NewDropDown (window, _, "$parentSkinDropdown", "skinDropdown", 140, 20, buildSkinMenu, 1) + local instance1 = _detalhes:GetInstance (1) + local skin_dropdown = g:NewDropDown (window, _, "$parentSkinDropdown", "skinDropdown", 140, 20, buildSkinMenu, instance1.skin) local skin_label = g:NewLabel (window, _, "$parentSkinLabel", "skinLabel", Loc ["STRING_OPTIONS_INSTANCE_SKIN"]) skin_dropdown:SetPoint ("left", skin_label, "right", 2) @@ -520,8 +662,17 @@ function _detalhes:OpenWelcomeWindow () instance:InstanceWallpaper (false) end end + + local created_test_bars = 0 + local skins_frame_alert = CreateFrame ("frame", nil, window) + skins_frame_alert:SetScript ("OnShow", function() + if (created_test_bars < 2) then + _detalhes:CreateTestBars() + created_test_bars = created_test_bars + 1 + end + end) - pages [#pages+1] = {bg55, texto55, texto555, skins_image, changemind, texto_appearance, skin_dropdown, skin_label, wallpaper_label_switch, wallpaper_switch, wallpaper_dropdown1, wallpaper_dropdown2, } + pages [#pages+1] = {skins_frame_alert, bg55, texto55, texto555, skins_image, changemind, texto_appearance, skin_dropdown, skin_label, wallpaper_label_switch, wallpaper_switch, wallpaper_dropdown1, wallpaper_dropdown2, } for _, widget in ipairs (pages[#pages]) do widget:Hide() @@ -537,7 +688,7 @@ function _detalhes:OpenWelcomeWindow () ampulheta:SetPoint ("bottomright", window, "bottomright", -10, 10) ampulheta:SetHeight (125*3)--125 ampulheta:SetWidth (89*3)--82 - ampulheta:SetAlpha (.1) + ampulheta:SetAlpha (.05) ampulheta:SetTexCoord (1, 0, 0, 1) g:NewLabel (window, _, "$parentChangeMind2Label", "changemind2Label", Loc ["STRING_WELCOME_2"], "GameFontNormal", 9, "orange") @@ -557,6 +708,21 @@ function _detalhes:OpenWelcomeWindow () _G ["WelcomeWindowChronometerText"]:SetText (Loc ["STRING_WELCOME_4"]) _G ["WelcomeWindowContinuousText"]:SetText (Loc ["STRING_WELCOME_5"]) + local sword_icon = window:CreateTexture (nil, "overlay") + sword_icon:SetTexture ([[Interface\TUTORIALFRAME\UI-TutorialFrame-AttackCursor]]) + sword_icon:SetPoint ("topright", window, "topright", -15, -30) + sword_icon:SetWidth (64*1.4) + sword_icon:SetHeight (64*1.4) + sword_icon:SetTexCoord (1, 0, 0, 1) + sword_icon:SetDrawLayer ("overlay", 2) + local thedude = window:CreateTexture (nil, "overlay") + thedude:SetTexture ([[Interface\TUTORIALFRAME\UI-TutorialFrame-TheDude]]) + thedude:SetPoint ("bottomright", sword_icon, "bottomleft", 70, 19) + thedude:SetWidth (128*1.0) + thedude:SetHeight (128*1.0) + thedude:SetTexCoord (0, 1, 0, 1) + thedude:SetDrawLayer ("overlay", 3) + local chronometer_text = window:CreateFontString (nil, "overlay", "GameFontNormal") chronometer_text:SetText (Loc ["STRING_WELCOME_6"]) chronometer_text:SetWidth (360) @@ -589,141 +755,11 @@ function _detalhes:OpenWelcomeWindow () chronometer:SetScript ("OnClick", function() continuous:SetChecked (false); _detalhes.time_type = 1 end) continuous:SetScript ("OnClick", function() chronometer:SetChecked (false); _detalhes.time_type = 2 end) - pages [#pages+1] = {ampulheta, texto2, chronometer, continuous, chronometer_text, continuous_text, window.changemind2Label} + pages [#pages+1] = {thedude, sword_icon, ampulheta, texto2, chronometer, continuous, chronometer_text, continuous_text, window.changemind2Label} for _, widget in ipairs (pages[#pages]) do widget:Hide() end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 3 - - --CAPTURES - - local mecanica = window:CreateTexture (nil, "overlay") - mecanica:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) - mecanica:SetPoint ("bottomright", window, "bottomright", -10, 10) - mecanica:SetHeight (125*3)--125 - mecanica:SetWidth (89*3)--82 - mecanica:SetAlpha (.1) - mecanica:SetTexCoord (1, 0, 0, 1) - - g:NewLabel (window, _, "$parentChangeMind3Label", "changemind3Label", Loc ["STRING_WELCOME_8"], "GameFontNormal", 9, "orange") - window.changemind3Label:SetPoint ("center", window, "center") - window.changemind3Label:SetPoint ("bottom", window, "bottom", 0, 19) - window.changemind3Label.align = "|" - - local texto3 = window:CreateFontString (nil, "overlay", "GameFontNormal") - texto3:SetPoint ("topleft", window, "topleft", 20, -80) - texto3:SetText (Loc ["STRING_WELCOME_40"]) - - local data_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - data_text:SetText (Loc ["STRING_WELCOME_9"]) - data_text:SetWidth (460) - data_text:SetHeight (40) - data_text:SetJustifyH ("left") - data_text:SetJustifyV ("top") - data_text:SetTextColor (1, 1, 1, 1) - data_text:SetPoint ("topleft", window, "topleft", 30, -105) - - local data_text2 = window:CreateFontString (nil, "overlay", "GameFontNormal") - --data_text2:SetText ("Tip: for a best experience, it's recommend leave all turned on.") - data_text2:SetText (Loc ["STRING_WELCOME_10"]) - data_text2:SetWidth (460) - data_text2:SetHeight (40) - data_text2:SetJustifyH ("left") - data_text2:SetJustifyV ("top") - data_text2:SetTextColor (1, 1, 1, 1) - data_text2:SetPoint ("topleft", window, "topleft", 30, -201) - - --------------- Captures - g:NewImage (window, [[Interface\AddOns\Details\images\atributos_captures]], 20, 20, nil, nil, "damageCaptureImage", "$parentCaptureDamage2") - window.damageCaptureImage:SetPoint (35, -155) - window.damageCaptureImage:SetTexCoord (0, 0.125, 0, 1) - - g:NewImage (window, [[Interface\AddOns\Details\images\atributos_captures]], 20, 20, nil, nil, "healCaptureImage", "$parentCaptureHeal2") - window.healCaptureImage:SetPoint (170, -155) - window.healCaptureImage:SetTexCoord (0.125, 0.25, 0, 1) - - g:NewImage (window, [[Interface\AddOns\Details\images\atributos_captures]], 20, 20, nil, nil, "energyCaptureImage", "$parentCaptureEnergy2") - window.energyCaptureImage:SetPoint (305, -155) - window.energyCaptureImage:SetTexCoord (0.25, 0.375, 0, 1) - - g:NewImage (window, [[Interface\AddOns\Details\images\atributos_captures]], 20, 20, nil, nil, "miscCaptureImage", "$parentCaptureMisc2") - window.miscCaptureImage:SetPoint (35, -175) - window.miscCaptureImage:SetTexCoord (0.375, 0.5, 0, 1) - - g:NewImage (window, [[Interface\AddOns\Details\images\atributos_captures]], 20, 20, nil, nil, "auraCaptureImage", "$parentCaptureAura2") - window.auraCaptureImage:SetPoint (170, -175) - window.auraCaptureImage:SetTexCoord (0.5, 0.625, 0, 1) - - g:NewLabel (window, _, "$parentCaptureDamageLabel", "damageCaptureLabel", "Damage") - window.damageCaptureLabel:SetPoint ("left", window.damageCaptureImage, "right", 2) - g:NewLabel (window, _, "$parentCaptureDamageLabel", "healCaptureLabel", "Healing") - window.healCaptureLabel:SetPoint ("left", window.healCaptureImage, "right", 2) - g:NewLabel (window, _, "$parentCaptureDamageLabel", "energyCaptureLabel", "Energy") - window.energyCaptureLabel:SetPoint ("left", window.energyCaptureImage, "right", 2) - g:NewLabel (window, _, "$parentCaptureDamageLabel", "miscCaptureLabel", "Misc") - window.miscCaptureLabel:SetPoint ("left", window.miscCaptureImage, "right", 2) - g:NewLabel (window, _, "$parentCaptureDamageLabel", "auraCaptureLabel", "Auras") - window.auraCaptureLabel:SetPoint ("left", window.auraCaptureImage, "right", 2) - - local switch_icon_color = function (icon, on_off) - icon:SetDesaturated (not on_off) - end - - g:NewSwitch (window, _, "$parentCaptureDamageSlider", "damageCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["damage"]) - window.damageCaptureSlider:SetPoint ("left", window.damageCaptureLabel, "right", 2) - window.damageCaptureSlider.tooltip = "Pause or enable capture of:\n- damage done\n- damage per second\n- friendly fire\n- damage taken" - window.damageCaptureSlider.OnSwitch = function (self, _, value) - _detalhes:CaptureSet (value, "damage", true) - switch_icon_color (window.damageCaptureImage, value) - end - switch_icon_color (window.damageCaptureImage, _detalhes.capture_real ["damage"]) - - g:NewSwitch (window, _, "$parentCaptureHealSlider", "healCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["heal"]) - window.healCaptureSlider:SetPoint ("left", window.healCaptureLabel, "right", 2) - window.healCaptureSlider.tooltip = "Pause or enable capture of:\n- healing done\n- absorbs\n- healing per second\n- overheal\n- healing taken\n- enemy healed" - window.healCaptureSlider.OnSwitch = function (self, _, value) - _detalhes:CaptureSet (value, "heal", true) - switch_icon_color (window.healCaptureImage, value) - end - switch_icon_color (window.healCaptureImage, _detalhes.capture_real ["heal"]) - - g:NewSwitch (window, _, "$parentCaptureEnergySlider", "energyCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["energy"]) - window.energyCaptureSlider:SetPoint ("left", window.energyCaptureLabel, "right", 2) - window.energyCaptureSlider.tooltip = "Pause or enable capture of:\n- mana restored\n- rage generated\n- energy generated\n- runic power generated" - window.energyCaptureSlider.OnSwitch = function (self, _, value) - _detalhes:CaptureSet (value, "energy", true) - switch_icon_color (window.energyCaptureImage, value) - end - switch_icon_color (window.energyCaptureImage, _detalhes.capture_real ["energy"]) - - g:NewSwitch (window, _, "$parentCaptureMiscSlider", "miscCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["miscdata"]) - window.miscCaptureSlider:SetPoint ("left", window.miscCaptureLabel, "right", 2) - window.miscCaptureSlider.tooltip = "Pause or enable capture of:\n- cc breaks\n- dispell\n- interrupts\n- ress\n- deaths\n- frags" - window.miscCaptureSlider.OnSwitch = function (self, _, value) - _detalhes:CaptureSet (value, "miscdata", true) - switch_icon_color (window.miscCaptureImage, value) - end - switch_icon_color (window.miscCaptureImage, _detalhes.capture_real ["miscdata"]) - - g:NewSwitch (window, _, "$parentCaptureAuraSlider", "auraCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["aura"]) - window.auraCaptureSlider:SetPoint ("left", window.auraCaptureLabel, "right", 2) - window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs uptime\n- debuffs uptime\n- void zones\n- cooldowns" - window.auraCaptureSlider.OnSwitch = function (self, _, value) - _detalhes:CaptureSet (value, "aura", true) - switch_icon_color (window.auraCaptureImage, value) - end - switch_icon_color (window.auraCaptureImage, _detalhes.capture_real ["aura"]) - - pages [#pages+1] = {mecanica, texto3, data_text, window.damageCaptureImage, window.healCaptureImage, window.energyCaptureImage, window.miscCaptureImage, - window.auraCaptureImage, window.damageCaptureSlider, window.healCaptureSlider, window.energyCaptureSlider, window.miscCaptureSlider, window.auraCaptureSlider, - window.damageCaptureLabel, window.healCaptureLabel, window.energyCaptureLabel, window.miscCaptureLabel, window.auraCaptureLabel, data_text2, window.changemind3Label} - - for _, widget in ipairs (pages[#pages]) do - widget:Hide() - end - -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> page 4 @@ -734,7 +770,7 @@ function _detalhes:OpenWelcomeWindow () bg:SetPoint ("bottomright", window, "bottomright", -10, 10) bg:SetHeight (125*3)--125 bg:SetWidth (89*3)--82 - bg:SetAlpha (.1) + bg:SetAlpha (.05) bg:SetTexCoord (1, 0, 0, 1) g:NewLabel (window, _, "$parentChangeMind4Label", "changemind4Label", Loc ["STRING_WELCOME_11"], "GameFontNormal", 9, "orange") @@ -752,7 +788,7 @@ function _detalhes:OpenWelcomeWindow () interval_text:SetHeight (40) interval_text:SetJustifyH ("left") interval_text:SetJustifyV ("top") - interval_text:SetTextColor (1, 1, 1, 1) + interval_text:SetTextColor (1, 1, 1, .9) interval_text:SetPoint ("topleft", window, "topleft", 30, -110) local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal") @@ -765,7 +801,7 @@ function _detalhes:OpenWelcomeWindow () dance_text:SetPoint ("topleft", window, "topleft", 30, -175) --------------- Update Speed - g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", Loc ["STRING_WELCOME_14"]) + g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", Loc ["STRING_WELCOME_14"] .. ":") window.updatespeedLabel:SetPoint (31, -150) -- @@ -800,66 +836,20 @@ function _detalhes:OpenWelcomeWindow () window.updatespeedSlider.tooltip = Loc ["STRING_WELCOME_15"] --------------- Animate Rows - g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", Loc ["STRING_WELCOME_16"]) - window.animateLabel:SetPoint (31, -175) + g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", Loc ["STRING_WELCOME_16"] .. ":") + window.animateLabel:SetPoint (31, -170) -- g:NewSwitch (window, _, "$parentAnimateSlider", "animateSlider", 60, 20, _, _, _detalhes.use_row_animations) -- ltext, rtext, defaultv window.animateSlider:SetPoint ("left",window.animateLabel, "right", 2, 0) window.animateSlider.OnSwitch = function (self, _, value) --> slider, fixedValue, sliderValue (false, true) - _detalhes.use_row_animations = value + _detalhes:SetUseAnimations (value) end window.animateSlider.tooltip = Loc ["STRING_WELCOME_17"] - pages [#pages+1] = {bg, texto4, interval_text, dance_text, window.updatespeedLabel, window.updatespeedSlider, window.animateLabel, window.animateSlider, window.changemind4Label} - for _, widget in ipairs (pages[#pages]) do - widget:Hide() - end - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 5 - - --max segments, memory - - local bg44 = window:CreateTexture (nil, "overlay") - bg44:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) - bg44:SetPoint ("bottomright", window, "bottomright", -10, 10) - bg44:SetHeight (125*3)--125 - bg44:SetWidth (89*3)--82 - bg44:SetAlpha (.1) - bg44:SetTexCoord (1, 0, 0, 1) - - g:NewLabel (window, _, "$parentChangeMind44Label", "changemind44Label", Loc ["STRING_WELCOME_18"], "GameFontNormal", 9, "orange") - window.changemind44Label:SetPoint ("center", window, "center") - window.changemind44Label:SetPoint ("bottom", window, "bottom", 0, 19) - window.changemind44Label.align = "|" - - local texto44 = window:CreateFontString (nil, "overlay", "GameFontNormal") - texto44:SetPoint ("topleft", window, "topleft", 20, -80) - texto44:SetText (Loc ["STRING_WELCOME_19"]) - - local interval_text4 = window:CreateFontString (nil, "overlay", "GameFontNormal") - interval_text4:SetText (Loc ["STRING_WELCOME_20"]) - interval_text4:SetWidth (460) - interval_text4:SetHeight (60) - interval_text4:SetJustifyH ("left") - interval_text4:SetJustifyV ("top") - interval_text4:SetTextColor (1, 1, 1, 1) - interval_text4:SetPoint ("topleft", window, "topleft", 30, -110) - - --[[ - local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - dance_text:SetText ("Low amount of segments can keep memory .") - dance_text:SetWidth (460) - dance_text:SetHeight (40) - dance_text:SetJustifyH ("left") - dance_text:SetJustifyV ("top") - dance_text:SetTextColor (1, 1, 1, 1) - dance_text:SetPoint ("topleft", window, "topleft", 30, -170) - --]] --------------- Max Segments - g:NewLabel (window, _, "$parentSliderLabel", "segmentsLabel", Loc ["STRING_WELCOME_21"]) - window.segmentsLabel:SetPoint (31, -170) + g:NewLabel (window, _, "$parentSliderLabel", "segmentsLabel", Loc ["STRING_WELCOME_21"] .. ":") + window.segmentsLabel:SetPoint (31, -190) -- g:NewSlider (window, _, "$parentSlider", "segmentsSlider", 120, 20, 1, 25, 1, _detalhes.segments_amount) -- min, max, step, defaultv window.segmentsSlider:SetPoint ("left", window.segmentsLabel, "right", 2, 0) @@ -868,64 +858,45 @@ function _detalhes:OpenWelcomeWindow () end) window.segmentsSlider.tooltip = Loc ["STRING_WELCOME_22"] - --------------- memory - g:NewLabel (window, _, "$parentLabelMemory", "memoryLabel", Loc ["STRING_WELCOME_23"]) - window.memoryLabel:SetPoint (31, -185) - -- - g:NewSlider (window, _, "$parentSliderMemory", "memorySlider", 130, 20, 1, 4, 1, _detalhes.memory_threshold) -- min, max, step, defaultv - window.memorySlider:SetPoint ("left", window.memoryLabel, "right", 2, 0) - window.memorySlider:SetHook ("OnValueChange", function (slider, _, amount) --> slider, fixedValue, sliderValue - - amount = math.floor (amount) - - if (amount == 1) then - slider.amt:SetText ("<= 1gb") - _detalhes.memory_ram = 16 - elseif (amount == 2) then - slider.amt:SetText ("2gb") - _detalhes.memory_ram = 32 - elseif (amount == 3) then - slider.amt:SetText ("4gb") - _detalhes.memory_ram = 64 - elseif (amount == 4) then - slider.amt:SetText (">= 6gb") - _detalhes.memory_ram = 128 - end - - _detalhes.memory_threshold = amount - return true - end) - window.memorySlider.tooltip = Loc ["STRING_WELCOME_24"] - window.memorySlider.thumb:SetSize (40, 10) - window.memorySlider.thumb:SetTexture ([[Interface\Buttons\UI-Listbox-Highlight2]]) - window.memorySlider.thumb:SetVertexColor (.2, .2, .2, .9) - local t = _detalhes.memory_threshold - window.memorySlider:SetValue (1) - window.memorySlider:SetValue (2) - window.memorySlider:SetValue (t) + -------------- + local mech_icon = window:CreateTexture (nil, "overlay") + mech_icon:SetTexture ([[Interface\Vehicles\UI-Vehicles-Endcap-Alliance]]) + mech_icon:SetPoint ("topright", window, "topright", -15, -15) + mech_icon:SetWidth (128*0.9) + mech_icon:SetHeight (128*0.9) + mech_icon:SetAlpha (0.8) - --------------- Max Segments Saved - g:NewLabel (window, _, "$parentLabelSegmentsSave", "segmentsSaveLabel", Loc ["STRING_WELCOME_25"]) - window.segmentsSaveLabel:SetPoint (31, -200) - -- - g:NewSlider (window, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", 120, 20, 1, 5, 1, _detalhes.segments_amount_to_save) -- min, max, step, defaultv - window.segmentsSliderToSave:SetPoint ("left", window.segmentsSaveLabel, "right") - window.segmentsSliderToSave:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue - _detalhes.segments_amount_to_save = math.floor (amount) - end) - window.segmentsSliderToSave.tooltip = "High values may increase the time between a\nlogout button click and your character selection screen.\n\nIf you rarely check 'last day data', it`s high recommeded save only 1." + local mech_icon2 = window:CreateTexture (nil, "overlay") + mech_icon2:SetTexture ([[Interface\Vehicles\UI-Vehicles-Trim-Alliance]]) + mech_icon2:SetPoint ("topright", window, "topright", -10, -142) + mech_icon2:SetWidth (128*1.0) + mech_icon2:SetHeight (128*0.6) + mech_icon2:SetAlpha (0.6) + mech_icon2:SetTexCoord (0, 1, 40/128, 1) + mech_icon2:SetDrawLayer ("overlay", 2) - pages [#pages+1] = {bg44, window.changemind44Label, texto44, interval_text4, window.memorySlider, window.memoryLabel, window.segmentsLabel, window.segmentsSlider, window.segmentsSaveLabel, window.segmentsSliderToSave} + ---------------- + + local update_frame_alert = CreateFrame ("frame", nil, window) + + + + update_frame_alert:SetScript ("OnShow", function() + _detalhes:StartTestBarUpdate() + end) + + update_frame_alert:SetScript ("OnHide", function() + _detalhes:StopTestBarUpdate() + end) + + ---------------- + + pages [#pages+1] = {update_frame_alert, mech_icon2, mech_icon, window.segmentsLabel, window.segmentsSlider, bg, texto4, interval_text, dance_text, window.updatespeedLabel, window.updatespeedSlider, window.animateLabel, window.animateSlider, window.changemind4Label} for _, widget in ipairs (pages[#pages]) do widget:Hide() end - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 5.5 - - -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> page 6 @@ -957,7 +928,24 @@ function _detalhes:OpenWelcomeWindow () stretch_image:SetHeight (61) stretch_image:SetTexCoord (0.716796875, 1, 0.876953125, 1) - pages [#pages+1] = {bg6, texto5, stretch_image, texto_stretch} + local stretch_frame_alert = CreateFrame ("frame", nil, window) + stretch_frame_alert:SetScript ("OnShow", function() + local instance = _detalhes:GetInstance (1) + _detalhes.OnEnterMainWindow (instance) + instance.baseframe.button_stretch:SetAlpha (1) + frame_alert.alert:SetPoint ("topleft", instance.baseframe.button_stretch, "topleft", -20, 6) + frame_alert.alert:SetPoint ("bottomright", instance.baseframe.button_stretch, "bottomright", 20, -14) + + frame_alert.alert.animOut:Stop() + frame_alert.alert.animIn:Play() + if (_detalhes.stopwelcomealert) then + _detalhes:CancelTimer (_detalhes.stopwelcomealert) + end + _detalhes.stopwelcomealert = _detalhes:ScheduleTimer ("StopPlayStretchAlert", 5) + end) + + + pages [#pages+1] = {bg6, texto5, stretch_image, texto_stretch, stretch_frame_alert} for _, widget in ipairs (pages[#pages]) do widget:Hide() @@ -994,7 +982,22 @@ function _detalhes:OpenWelcomeWindow () instance_button_image:SetHeight (141) instance_button_image:SetTexCoord (0.31640625, 0.71484375, 0.724609375, 1) - pages [#pages+1] = {bg6, texto6, instance_button_image, texto_instance_button} + local instance_frame_alert = CreateFrame ("frame", nil, window) + instance_frame_alert:SetScript ("OnShow", function() + local instance = _detalhes:GetInstance (1) + + frame_alert.alert:SetPoint ("topleft", instance.baseframe.cabecalho.novo, "topleft", -8, 6) + frame_alert.alert:SetPoint ("bottomright", instance.baseframe.cabecalho.novo, "bottomright", 8, -6) + + frame_alert.alert.animOut:Stop() + frame_alert.alert.animIn:Play() + if (_detalhes.stopwelcomealert) then + _detalhes:CancelTimer (_detalhes.stopwelcomealert) + end + _detalhes.stopwelcomealert = _detalhes:ScheduleTimer ("StopPlayStretchAlert", 5) + end) + + pages [#pages+1] = {bg6, texto6, instance_button_image, texto_instance_button, instance_frame_alert} for _, widget in ipairs (pages[#pages]) do widget:Hide() @@ -1185,14 +1188,7 @@ function _detalhes:OpenWelcomeWindow () texto:SetJustifyH ("left") texto:SetJustifyV ("top") texto:SetTextColor (1, 1, 1, 1) - - local report_image1 = window:CreateTexture (nil, "overlay") - report_image1:SetTexture ([[Interface\Addons\Details\images\icons]]) - report_image1:SetPoint ("topright", window, "topright", -30, -97) - report_image1:SetWidth (144) - report_image1:SetHeight (30) - report_image1:SetTexCoord (0.71875, 1, 0.81640625, 0.875) - + pages [#pages+1] = {bg8, texto8, texto, report_image1} for _, widget in ipairs (pages[#pages]) do @@ -1202,13 +1198,13 @@ function _detalhes:OpenWelcomeWindow () ------------------------------------------------------------------------------------------------------------------------------ --[[ - --forward:Click() - --forward:Click() - --forward:Click() - --forward:Click() - --forward:Click() - --forward:Click() - --forward:Click() + forward:Click() + forward:Click() + forward:Click() + forward:Click() + forward:Click() + forward:Click() + forward:Click() --forward:Click() --forward:Click() --forward:Click() diff --git a/images/classes_small_alpha.tga b/images/classes_small_alpha.tga index 0b35a995c9f17a4e9506e72c84fc4447cf14e185..ddd9fa4bc72c3ae0b91921f5b84d2b1c4fdc78d2 100644 GIT binary patch delta 31505 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 delta 22188 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 literal 39760 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 delta 7927 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 IJ$|MCZ$WhkN&o-= diff --git a/startup.lua b/startup.lua index 1680b51c..294fdea7 100644 --- a/startup.lua +++ b/startup.lua @@ -285,11 +285,6 @@ function _G._detalhes:Start() _detalhes:FillUserCustomSpells() end - --> start tutorial if this is first run - if (self.tutorial.logons < 2 and self.is_first_run) then - self:StartTutorial() - end - --> send feedback panel if the user got 100 or more logons with details if (self.tutorial.logons > 100) then -- and self.tutorial.logons < 104 if (not self.tutorial.feedback_window1) then @@ -325,13 +320,13 @@ function _G._detalhes:Start() instance:RestauraJanela() local skin = instance.skin instance:ChangeSkin ("Default Skin") - instance:ChangeSkin ("Minimalistic") + instance:ChangeSkin ("Minimalistic v2") instance:ChangeSkin (skin) instance:DesativarInstancia() else local skin = instance.skin instance:ChangeSkin ("Default Skin") - instance:ChangeSkin ("Minimalistic") + instance:ChangeSkin ("Minimalistic v2") instance:ChangeSkin (skin) end end @@ -432,6 +427,22 @@ function _G._detalhes:Start() if (self.is_first_run) then _detalhes:OpenWelcomeWindow() end - + + --test realtime dps + --[[ + local real_time_frame = CreateFrame ("frame", nil, UIParent) + local instance = _detalhes:GetInstance (1) + real_time_frame:SetScript ("OnUpdate", function (self, elapsed) + if (_detalhes.in_combat and instance.atributo == 1 and instance.sub_atributo == 1) then + for i = 1, instance:GetNumRows() do + local row = instance:GetRow (index) + if (row:IsShown()) then + local actor = row.minha_tabela + local right_text = row.texto_direita + end + end + end + end) + --]] end