From bd7b2c3ecf15ba8c6c8a29ea442a3cd212f49f66 Mon Sep 17 00:00:00 2001 From: tercio Date: Sun, 14 Dec 2014 22:48:12 -0200 Subject: [PATCH] - Fixed tooltip for Auras and Voidzones, now shows sorted by damage and time. - More fixes for Korgath encounter on Highmaul. - Added slash commands: /details reset and /details config. - Spell bars on Player Details Window now is painted with the spell spellschool color. - Multistrike doesn't count any more for spell's Minimal Damage. - Resource display got an tooltip which shows what resource is and resource gained per minute. - Clicking on report button when the report window is already open, make it close. --- API UI.txt | 191 +++++++++++ boot.lua | 36 +- classes/classe_damage.lua | 192 ++++++++--- classes/classe_damage_habilidade.lua | 4 +- classes/classe_energy.lua | 40 ++- classes/classe_instancia.lua | 2 +- classes/container_combatentes.lua | 5 +- core/control.lua | 5 +- core/gears.lua | 323 +++++++++++++----- core/meta.lua | 11 + core/parser.lua | 54 ++- functions/boss.lua | 3 + functions/slash.lua | 6 +- functions/spells.lua | 53 +-- gumps/janela_info.lua | 71 ++-- gumps/janela_principal.lua | 18 +- gumps/janela_report.lua | 14 +- gumps/switch.lua | 7 +- images/bar_detalhes2.tga | Bin 24160 -> 45703 bytes images/info_window_background.tga | Bin 419124 -> 421107 bytes .../Details_DataStorage.lua | 25 +- .../boss_faces.tga | Bin 151162 -> 142498 bytes .../Details_RaidInfo-Highmaul/boss_faces.tga | Bin 114143 -> 100780 bytes startup.lua | 8 + 24 files changed, 830 insertions(+), 238 deletions(-) create mode 100644 API UI.txt diff --git a/API UI.txt b/API UI.txt new file mode 100644 index 00000000..b478c1f6 --- /dev/null +++ b/API UI.txt @@ -0,0 +1,191 @@ + + +instance:DesaturateMenu (enabled) +enabled = boolean, if true, buttons on the window's title bar became black and white. + +instance:HideMainIcon (enabled) +enabled = boolean, if true, hides the attribute icon on the title bar (recommended). + +instance:MenuAnchor (x, y) +x,y = number, adjust the axis x and y of the buttons on the title bar. + +instance:StretchButtonAnchor (side) +side = number, 1 = top side of the window, 2 = bottom. + +instance:StretchButtonAlwaysOnTop (enabled) +enabled = boolean, if true, the stretch grab is always above other frames. + +instance:ToolbarSide (side) +side = number, 1 = top side of the window, 2 = bottom. Adjust which side the title bar will attach. + +instance:SetWindowScale (scale, refresh_group) +scale = number, 0.65 to 1.5. +refresh_group = boolean, if true it apply the scale to all windows in the group (recommended). + +instance:MicroDisplaysSide (side) +side = number, 1 = top side of the window, 2 = bottom. + +instance:SetAutoHideMenu (enabled) +enabled = boolean, if true, the buttons on window's title bar auto hide when the player isn't interacting with the window. + +instance:SetBackdropTexture (texturename) +texturename = string, texture name for SharedMedia. + +instance:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, shadow) +enabled = boolean, show or hide the window's title text. +pos_x = number, position on x axis. +pos_y = number, position on y axis. +font = string, font name for SharedMedia. +size = number, font size. +color = table {r, b, g, a} or string html color name. +side = number, 1 = align it on top side, 2 = bottom side. +shadow = boolean, draw the outline shadow to the text. + +instance:LeftMenuAnchorSide (side) +side = number, 1 = left, 2 = right, set the anchor point for buttons on window's title bar. + +instance:SetFrameStrata (strata) +strata = string, "BACKGROUND", "LOW", "MEDIUM", "HIGH" or "DIALOG". + +instance:SetCombatAlpha (modify_type, alpha_amount) +modify_type = number, 1 = none, 2 = While In Combat, 3 = "While Out of Combat", 4 = "While Out of a Group" (can be only one type) +alpha_amount = number, the amount of alpha. + +instance:ChangeSkin (skin_name) +skin_name = string, the name of the skin to apply. +if skin name is nil, it reaply all config based on the window's config table. + +instance:ToolbarMenuSetButtons (mode, segment, attributes, report, reset, close) +mode = boolean, show or hide this button on window`s title bar. +segment = boolean +attributes = boolean +report = boolean +reset = boolean +close = boolean + +instance:ToolbarMenuSetButtonsOptions (spacement, shadow) +spacement = number between -5 to 10, adjust the gap size between each button on window's title bar. +shadow = boolean, is true, draws a shadow outline on the button. + +instance:ToolbarMenuButtonsSize (size) +size = number between 0.4 to 1.6, adjust the size of window's title bar buttons. + +instance:InstanceColor (red, green, blue, alpha, no_save, change_statusbar) +red = number, red color on 0 to 1 scale +green = number, green color on 0 to 1 scale +blue = number, blue color on 0 to 1 scale +alpha = number, alpha on 0 to 1 scale +no_save = boolean, if true, these values are applied only in the textures without chaging the value on the window's config table. +change_statusbar = boolean, if true, it also change the color of window's statusbar. + +instance:InstanceWallpaper (texture, anchor, alpha, texcoord, width, height, overlay) +texture = string, path to a image file. +anchor = string, "all", "center", "stretchLR", "stretchTB". Sets how the texture align within the window. +alpha = number +texcoord = table {L, R, T, B} +width = number, most of the times is ignored due to anchors settings. +height = number, most of the times is ignored due to anchors settings. +overlay = table {r, b, g, a} + +instance:SetBarSettings (height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile, barstart, spacement) +height = number, the height of the bars. +texture = texture name (SharedMedia), used on the statubar bar. +colorclass = boolean, if true, the bar is painted with the player's class color. +fixedcolor = table with {r, b, g, a} or html color string (e.g. "blue"). +backgroundtexture = texture name (SharedMedia), used below the bar, this bar always have the same width as the window. +backgroundcolorclass = boolean, if true, the bar is painted with the player's class color. +backgroundfixedcolor = table with {r, b, g, a} or html color string (e.g. "blue"). +alpha = number. +iconfile = string, icon file path to be used on bars. +barstart = boolean, if true the bar attaches on the right side of the icon, else, on the left side (useful for transparent icons). +spacement = number, how much space between bars. + +instance:SetBarModel (upper_enabled, upper_model, upper_alpha, lower_enabled, lower_model, lower_alpha) +upper_enabled = boolean +upper_model = string, path to the 3d model +upper_alpha = number +lower_enabled = boolean +lower_model = string, path to the 3d model +lower_alpha = number + +instance:SetBarBackdropSettings (enabled, size, color, texture) +enabled = boolean. +size = number, adjust the size of the border. +color = table, {r, g, b, a} +texture = string, edge name for SharedMedia:Fetch ("border", texture) + +instance:SetBarTextSettings (size, font, fixedcolor, leftcolorbyclass, rightcolorbyclass, leftoutline, rightoutline, customrighttextenabled, customrighttext, percentage_type, showposition, customlefttextenabled, customlefttext) +size = number, text size +font = string, text font, e.g "Arrial Narrow" +fixedcolor = table with {r, b, g, a} or html color string (e.g. "blue"). +leftcolorbyclass = boolean, if true text color uses the color of the shown player class, else, the color value on 'fixedcolor'. +rightcolorbyclass = boolean, if true text color uses the color of the shown player class, else, the color value on 'fixedcolor'. +leftoutline = boolean, if true, draws the outline shadow. +rightoutline = boolean, if true, draws the outline shadow. +customrighttextenabled = boolean, if true, uses the custom text. +customrighttext = string, the customized text to shown on the bar. +percentage_type = number, 1 = players's percentage is relative to total of all players. 2 = is relative to the top ranked player. +showposition = boolean, if true, show the rank number at the left side of the player's name. +customlefttextenabled = boolean, if true, uses the custom text. +customlefttext = string, the customized text to shown on the bar. + +instance:SetBarFollowPlayer (boolean) +when enabled the player's bar is always shown even if the player isn't in the top ranked. +example: player is the rank 13 on damage done, but the window only show 1-8. Window now shows 1-7 and 13. + +instance:SetBarGrowDirection (direction) +direction = 1 top to bottom / 2 bottom to top + +instance:HideStatusBar() // instance:ShowStatusBar() +Show or hide the statusbar for the window. + +instance:StatusBarColor (r, g, b, a, no_save) +r, g, b, a = number, color to set, +no_save = boolean, if true, the values isn't set on the instance config table. + +instance:ShowSideBars() // instance:HideSideBars() +Show or Hide the borders. + +-------------------- + +instance:InstanceMsg (text, icon, textcolor, iconcoords, iconcolor) +text = string or false to hide the alert +icon = texture path +textcolor = table with {r, b, g, a} or html color string (e.g. "blue"). +iconcoords = table with {L, R, T, B} +iconcolor = table with {r, b, g, a} or html color string (e.g. "blue"). + +instance:HaveInstanceAlert() +returns if the window is showing an alert. + +instance:InstanceAlert (msg, icon, time, clickfunc) +shows up an alert on the window. +msg = string or false to hide the alert +icon = texture path or NIL or table {texture, width, height, animate, coordL, coordR, coordT, coordB, r, g, b, a} +time = time in seconds the alert stay shown (default 15). +clickfunc = table {function, param1, param2, "left" or "right" button} + +-------------------- + +_detalhes:SetTooltipBackdrop (border_texture, border_size, border_color) +border_texture = string, border name for SharedMedia. +border_size = number, border size. +border_color = table {r, g, b, a} + +_detalhes:ReportSingleLine (instance, row object) +get the text on the chosen row and open report dialog for the player. + +-------------------- + +framework = _detalhes:GetFramework() +returns the framework object. + +framework:RegisterForDetailsMove (frame, instance) +set OnMouseDown and OnMouseUp scripts on 'frame', when is moved, the instance is also moved. + +instance:IsGroupedWith (instance) +returns true with the 'self instance' is groupped with the passed instance object. + +instance:GetInstanceGroup() +returns a table with instances objects of all instances inside the group. + diff --git a/boot.lua b/boot.lua index 7a4471b0..3bd1ad75 100644 --- a/boot.lua +++ b/boot.lua @@ -3,8 +3,8 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.build_counter = 259 --it's 259 for release - _detalhes.userversion = "v3.4.7" + _detalhes.build_counter = 281 --it's 281 for release + _detalhes.userversion = "v3.5.0" _detalhes.realversion = 49 --core version _detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" @@ -18,31 +18,17 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) --[[ -|cFFFFFF00v3.4.7 (|cFFFFCC00Dec 11, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Advanced Death Logs plugin got updates on Endurance Player Value and few bug fixes.\n\n -|cFFFFFF00-|r Max Window Amount options can new be set to 1, before the minimum was 3.\n\n -|cFFFFFF00-|r Fixed a problem with friendly fire tooltip where sometimes it doesn't show up.\n\n -|cFFFFFF00-|r Fixed cooldowns tooltip which wasn't showing rounded numbers (49.99 instead of 50).\n\n -|cFFFFFF00-|r Fixed Warrior's Shield Block which wasn't being count as a cooldown.\n\n -|cFFFFFF00-|r Fixed a problem where sometimes when a hunter pull and reset the boss right after, was causing segments to merge.\n\n - -|cFFFFFF00v3.4.4 (|cFFFFCC00Dec 05, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Fixed a issue with Ko'Ragh boss on Highmaul raid.\n\n -|cFFFFFF00-|r Few changes on Bookmark panel.\n\n - -|cFFFFFF00v3.4.3 (|cFFFFCC00Dec 02, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Removed 'Simple Gray' skin.\n\n -|cFFFFFF00-|r Addde new skin: 'Forced Square'.\n\n -|cFFFFFF00-|r 'Default Skin' got renamed to 'WoW Interface'.\n\n - -|cFFFFFF00v3.4.2 (|cFFFFCC00Dec 01, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Fixed a bug with menu desaturation where erase and close buttons stay colored after clicking on it.\n\n -|cFFFFFF00-|r Fixed stretch where sometimes after release the window, all exceeded bars shows up and fade in again.\n\n -|cFFFFFF00-|r Fixed a bug with the +- buttons on the window's scale option.\n\n -|cFFFFFF00-|r Fixed the border for sub menus on mode menu.\n\n +|cFFFFFF00v3.5.0 (|cFFFFCC00Dec 14, 2014|r|cFFFFFF00)|r:\n\n +|cFFFFFF00-|r Fixed tooltip for Auras and Voidzones, now shows sorted by damage and time.\n\n +|cFFFFFF00-|r More fixes for Korgath encounter on Highmaul.\n\n +|cFFFFFF00-|r Added slash commands: 'reset' 'config'.\n\n +|cFFFFFF00-|r Spell bars on Player Details Window now is painted with the spell spellschool color.\n\n +|cFFFFFF00-|r Multistrike doesn't count any more for spell's Minimal Damage.\n\n +|cFFFFFF00-|r Resource display got an tooltip which shows what resource is and resource gained per minute.\n\n +|cFFFFFF00-|r Clicking on report button when the report window is already open, make it close.\n\n --]] - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v3.4.7 (|cFFFFCC00Dec 11, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Advanced Death Logs plugin got updates on Endurance Player Value and few bug fixes.\n\n|cFFFFFF00-|r Max Window Amount options can new be set to 1, before the minimum was 3.\n\n|cFFFFFF00-|r Fixed a problem with friendly fire tooltip where sometimes it wasn't showing up.\n\n|cFFFFFF00-|r Fixed cooldowns tooltip which wasn't showing rounded numbers (49.99 instead of 50).\n\n|cFFFFFF00-|r Fixed Warrior's Shield Block which wasn't being count as a cooldown.\n\n|cFFFFFF00-|r Fixed a problem where sometimes when a hunter pull and reset the boss right after, was causing segments to merge.\n\n|cFFFFFF00v3.4.4 (|cFFFFCC00Dec 05, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a issue with Ko'Ragh boss on Highmaul raid.\n\n|cFFFFFF00-|r Few changes on Bookmark panel.\n\n|cFFFFFF00v3.4.3 (|cFFFFCC00Dec 02, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Removed 'Simple Gray' skin.\n\n|cFFFFFF00-|r Addde new skin: 'Forced Square'.\n\n|cFFFFFF00-|r 'Default Skin' got renamed to 'WoW Interface'.\n\n|cFFFFFF00v3.4.2 (|cFFFFCC00Dec 01, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a bug with menu desaturation where erase and close buttons stay colored after clicking on it.\n\n|cFFFFFF00-|r Fixed stretch where sometimes after release the window, all exceeded bars shows up and fade in again.\n\n|cFFFFFF00-|r Fixed a bug with the +- buttons on the window's scale option.\n\n|cFFFFFF00-|r Fixed the border for sub menus on mode menu.\n\n|cFFFFFF00v3.4.0 (|cFFFFCC00Nov 29, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed custom displays ignoring 'target' setted.\n\n|cFFFFFF00-|r Fixed plugins showing its icon even when auto hide menus is enabled.\n\n|cFFFFFF00-|r .Updates slash command 'worldboss' now it shows Draenor bosses.\n\n|cFFFFFF00v3.3.0 (|cFFFFCC00Nov 25, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added 3D models for the bars in the window. The options are at Appearance -> Rows: Advanced.\n\n|cFFFFFF00-|r Now when showing custom displays, clicking on a bar report what is shown on bar's tooltip.\n\n|cFFFFFF00-|r More fixes for dungeon bosses identification.\n\n|cFFFFFF00-|r Fixed a tooltip bug with Debuff Uptime and Aura & Voidzone displays.\n\n|cFFFFFF00-|r Fixed Player Details Window for friendly fire and damage taken.\n\n|cFFFFFF00-|r Fixed Molten Core Raid Finder version where all bosses was considered trash segments.\n\n|cFFFFFF00v3.2.4 (|cFFFFCC00Nov 19, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r More fixes for dungeon bosses recognition.\n\n|cFFFFFF00-|r Fixes for few errors during combat parser.\n\n|cFFFFFF00v3.2.3 (|cFFFFCC00Nov 18, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed Monk's Stagger ability which was counting as damage done.\n\n|cFFFFFF00-|r Added WoD dungeon information, this fixes dungeon bosses being assigned as 'trash cleanup'.\n\n|cFFFFFF00-|r Added more information on API.txt document (is in Details! root folder).\n\n|cFFFFFF00v3.2.1 (|cFFFFCC00Nov 14, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Custom Displays updated to track WoD potions.\n\n|cFFFFFF00-|r Added Feedback panel at options panel.\n\n|cFFFFFF00v3.2.0 (|cFFFFCC00Nov 11, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Major changes on the way Details! store information, these changes saves up to 40% memory and 4% cpu usage.\n\n|cFFFFFF00-|r Fixed problem with pet's healing messing with the owner activity time.\n\n|cFFFFFF00-|r Added Energy -> Resources.\n\n|cFFFFFF00-|r Fixed combat initialization when the player start casting a Dot spell.\n\n|cFFFFFF00-|r Added new custom display: Damage Taken By Spell.\n\n|cFFFFFF00v2.2.3 (|cFFFFCC00Oct 26, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the healing done problem with Priest's Spirit of Redemption.\n\n|cFFFFFF00-|r Fixed avoidance by absorb when the hit missed was a multistrike hit.\n\n|cFFFFFF00-|r Fixed a script time out problem when erasing data while in combat.\n\n|cFFFFFF00-|r Fixed bug with interrupt tooltip when the player have a pet.\n\n|cFFFFFF00v2.2.1 (|cFFFFCC00Oct 22, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the gap between the button and its menu which sometimes traveling the mouse between them was activating tooltips from window's bars.\n\n|cFFFFFF00-|r Fixed an annoying menu blink when the window was near the right side of the screen.\n\n|cFFFFFF00-|r Fixed the stretch grab which was over other windows even with the 'stretch always on top' option disabled.\n\n|cFFFFFF00-|r Few fixes on healing done from absorbs.\n\n|cFFFFFF00v2.1.6 (|cFFFFCC00Oct 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed death's tooltip which wasn't respecting tooltip's configuration set on options panel.\n\n|cFFFFFF00-|r Now when the window is close to the top of the screen, menus will anchor on bottom side of the menu icons.\n\n|cFFFFFF00-|r Added micro displays options on Window Settings bracket.\n\n|cFFFFFF00-|r Fixed the problem with bar's custom texts.\n\n|cFFFFFF00-|r Lua functions inside custom texts, Chart Data scripts and Custom Displays scripts are now protected calls and won't break the addon functionality if an error occurs. Unfortunately we still doesn't have a documentation for Details! API.\n\n|cFFFFFF00-|r Fixed an incomum bug with tank avoidance tables.\n\n|cFFFFFF00-|r Tiny Threat: added option to use class colors instead of green-to-red colors.\n\n|cFFFFFF00-|r Added option to enable shadows on toolbar's buttons.\n\n|cFFFFFF00-|r Added option to set the specing between each button on toolbar.\n\n|cFFFFFF00-|r Finally we merged the left and right menus into only one with 6 icons.\n\n|cFFFFFF00-|r Removed window button and added a new option bracket to manage windows under Mode Menu.\n\n|cFFFFFF00-|r Few changes on 'Default Skin', 'Minimalistic', 'Simple Gray' and 'ElvUI Frame Style BW' (need reaply).\n\n|cFFFFFF00- Important:|r If the menus is out of the position, just reaply the skin.\n\nv2.0.15 (|cFFFFCC00Oct 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed tooltips where sometimes it wans't showing at all.\n\n|cFFFFFF00-|r Fixed the healing done amount on Malkorok encounter.\n\nv2.0.14 (|cFFFFCC00Oct 14, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added pre-potion recognition for WoD pots.\n\n|cFFFFFF00-|r Added spell list for Blackrock Foundry encounters.\n\n|cFFFFFF00-|r Added mouse wheel scroll speed option.\n\n|cFFFFFF00-|r Added support for healing multistrike and damage multistrike.\n\n|cFFFFFF00-|r Added a Change Log button on Options Panel.\n\n|cFFFFFF00-|r When the windows is locked, trying to move the window through toolbar will stretch it instead.\n\n|cFFFFFF00-|r Renamed overheal for shields, now its called 'shield wasted'.\n\n|cFFFFFF00-|r Fine tuning on healing done, should have high accuracy now.\n\n|cFFFFFF00-|r Encounter Details plugin now supports Highmaul and Blackrock Foundry.\n\n|cFFFFFF00-|r New class cooldowns and spells recognition.\n\n|cFFFFFF00-|r Fixed few bugs on comparison panel and avoidance panel.\n\n|cFFFFFF00-|r Fixed encounter recognition, now it should show the encounter name over segments menu." + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v3.5.0 (|cFFFFCC00Dec 14, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed tooltip for Auras and Voidzones, now shows sorted by damage and time.\n\n|cFFFFFF00-|r More fixes for Korgath encounter on Highmaul.\n\n|cFFFFFF00-|r Added slash commands: 'reset' 'config'.\n\n|cFFFFFF00-|r Spell bars on Player Details Window now is painted with the spell spellschool color.\n\n|cFFFFFF00-|r Multistrike doesn't count any more for spell's Minimal Damage.\n\n|cFFFFFF00-|r Resource display got an tooltip which shows what resource is and resource gained per minute.\n\n|cFFFFFF00-|r Clicking on report button when the report window is already open, make it close.\n\n|cFFFFFF00v3.4.7 (|cFFFFCC00Dec 11, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Advanced Death Logs plugin got updates on Endurance Player Value and few bug fixes.\n\n|cFFFFFF00-|r Max Window Amount options can new be set to 1, before the minimum was 3.\n\n|cFFFFFF00-|r Fixed a problem with friendly fire tooltip where sometimes it wasn't showing up.\n\n|cFFFFFF00-|r Fixed cooldowns tooltip which wasn't showing rounded numbers (49.99 instead of 50).\n\n|cFFFFFF00-|r Fixed Warrior's Shield Block which wasn't being count as a cooldown.\n\n|cFFFFFF00-|r Fixed a problem where sometimes when a hunter pull and reset the boss right after, was causing segments to merge.\n\n|cFFFFFF00v3.4.4 (|cFFFFCC00Dec 05, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a issue with Ko'Ragh boss on Highmaul raid.\n\n|cFFFFFF00-|r Few changes on Bookmark panel.\n\n|cFFFFFF00v3.4.3 (|cFFFFCC00Dec 02, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Removed 'Simple Gray' skin.\n\n|cFFFFFF00-|r Addde new skin: 'Forced Square'.\n\n|cFFFFFF00-|r 'Default Skin' got renamed to 'WoW Interface'.\n\n|cFFFFFF00v3.4.2 (|cFFFFCC00Dec 01, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a bug with menu desaturation where erase and close buttons stay colored after clicking on it.\n\n|cFFFFFF00-|r Fixed stretch where sometimes after release the window, all exceeded bars shows up and fade in again.\n\n|cFFFFFF00-|r Fixed a bug with the +- buttons on the window's scale option.\n\n|cFFFFFF00-|r Fixed the border for sub menus on mode menu.\n\n|cFFFFFF00v3.4.0 (|cFFFFCC00Nov 29, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed custom displays ignoring 'target' setted.\n\n|cFFFFFF00-|r Fixed plugins showing its icon even when auto hide menus is enabled.\n\n|cFFFFFF00-|r .Updates slash command 'worldboss' now it shows Draenor bosses.\n\n|cFFFFFF00v3.3.0 (|cFFFFCC00Nov 25, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added 3D models for the bars in the window. The options are at Appearance -> Rows: Advanced.\n\n|cFFFFFF00-|r Now when showing custom displays, clicking on a bar report what is shown on bar's tooltip.\n\n|cFFFFFF00-|r More fixes for dungeon bosses identification.\n\n|cFFFFFF00-|r Fixed a tooltip bug with Debuff Uptime and Aura & Voidzone displays.\n\n|cFFFFFF00-|r Fixed Player Details Window for friendly fire and damage taken.\n\n|cFFFFFF00-|r Fixed Molten Core Raid Finder version where all bosses was considered trash segments.\n\n|cFFFFFF00v3.2.4 (|cFFFFCC00Nov 19, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r More fixes for dungeon bosses recognition.\n\n|cFFFFFF00-|r Fixes for few errors during combat parser.\n\n|cFFFFFF00v3.2.3 (|cFFFFCC00Nov 18, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed Monk's Stagger ability which was counting as damage done.\n\n|cFFFFFF00-|r Added WoD dungeon information, this fixes dungeon bosses being assigned as 'trash cleanup'.\n\n|cFFFFFF00-|r Added more information on API.txt document (is in Details! root folder).\n\n|cFFFFFF00v3.2.1 (|cFFFFCC00Nov 14, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Custom Displays updated to track WoD potions.\n\n|cFFFFFF00-|r Added Feedback panel at options panel.\n\n|cFFFFFF00v3.2.0 (|cFFFFCC00Nov 11, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Major changes on the way Details! store information, these changes saves up to 40% memory and 4% cpu usage.\n\n|cFFFFFF00-|r Fixed problem with pet's healing messing with the owner activity time.\n\n|cFFFFFF00-|r Added Energy -> Resources.\n\n|cFFFFFF00-|r Fixed combat initialization when the player start casting a Dot spell.\n\n|cFFFFFF00-|r Added new custom display: Damage Taken By Spell.\n\n|cFFFFFF00v2.2.3 (|cFFFFCC00Oct 26, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the healing done problem with Priest's Spirit of Redemption.\n\n|cFFFFFF00-|r Fixed avoidance by absorb when the hit missed was a multistrike hit.\n\n|cFFFFFF00-|r Fixed a script time out problem when erasing data while in combat.\n\n|cFFFFFF00-|r Fixed bug with interrupt tooltip when the player have a pet.\n\n|cFFFFFF00v2.2.1 (|cFFFFCC00Oct 22, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed the gap between the button and its menu which sometimes traveling the mouse between them was activating tooltips from window's bars.\n\n|cFFFFFF00-|r Fixed an annoying menu blink when the window was near the right side of the screen.\n\n|cFFFFFF00-|r Fixed the stretch grab which was over other windows even with the 'stretch always on top' option disabled.\n\n|cFFFFFF00-|r Few fixes on healing done from absorbs.\n\n|cFFFFFF00v2.1.6 (|cFFFFCC00Oct 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed death's tooltip which wasn't respecting tooltip's configuration set on options panel.\n\n|cFFFFFF00-|r Now when the window is close to the top of the screen, menus will anchor on bottom side of the menu icons.\n\n|cFFFFFF00-|r Added micro displays options on Window Settings bracket.\n\n|cFFFFFF00-|r Fixed the problem with bar's custom texts.\n\n|cFFFFFF00-|r Lua functions inside custom texts, Chart Data scripts and Custom Displays scripts are now protected calls and won't break the addon functionality if an error occurs. Unfortunately we still doesn't have a documentation for Details! API.\n\n|cFFFFFF00-|r Fixed an incomum bug with tank avoidance tables.\n\n|cFFFFFF00-|r Tiny Threat: added option to use class colors instead of green-to-red colors.\n\n|cFFFFFF00-|r Added option to enable shadows on toolbar's buttons.\n\n|cFFFFFF00-|r Added option to set the specing between each button on toolbar.\n\n|cFFFFFF00-|r Finally we merged the left and right menus into only one with 6 icons.\n\n|cFFFFFF00-|r Removed window button and added a new option bracket to manage windows under Mode Menu.\n\n|cFFFFFF00-|r Few changes on 'Default Skin', 'Minimalistic', 'Simple Gray' and 'ElvUI Frame Style BW' (need reaply).\n\n|cFFFFFF00- Important:|r If the menus is out of the position, just reaply the skin.\n\nv2.0.15 (|cFFFFCC00Oct 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed tooltips where sometimes it wans't showing at all.\n\n|cFFFFFF00-|r Fixed the healing done amount on Malkorok encounter.\n\nv2.0.14 (|cFFFFCC00Oct 14, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added pre-potion recognition for WoD pots.\n\n|cFFFFFF00-|r Added spell list for Blackrock Foundry encounters." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails!:|r " diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index 23ede4ef..49dd49b9 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -546,6 +546,24 @@ return _detalhes:Reportar (reportar, {_no_current = true, _no_inverse = true, _custom = true}) end + local sort_tooltip_void_zones = function (tabela1, tabela2) + if (tabela1 [2] > tabela2 [2]) then + return true + elseif (tabela1 [2] == tabela2 [2]) then + if (tabela1[1] ~= "" and tabela2[1] ~= "") then + return tabela1 [3].uptime > tabela2 [3].uptime + elseif (tabela1[1] ~= "") then + return true + elseif (tabela2[1] ~= "") then + return false + end + else + return false + end + end + + local tooltip_void_zone_temp = {} + function _detalhes:ToolTipVoidZones (instancia, actor, barra, keydown) local damage_actor = instancia.showing[1]:PegarCombatente (_, actor.damage_twin) @@ -574,35 +592,55 @@ debuff_table.damage = 0 end end - - --> sort no container: - _table_sort (container, function (tabela1, tabela2) - if (tabela1.damage > tabela2.damage) then - return true; - elseif (tabela1.damage == tabela2.damage) then - return tabela1.uptime > tabela2.uptime; + + for i = 1, #tooltip_void_zone_temp do + local t = tooltip_void_zone_temp [i] + t[1] = "" + t[2] = 0 + t[3] = 0 + end + + local i = 1 + for target_name, debuff_table in _pairs (container) do + local t = tooltip_void_zone_temp [i] + if (not t) then + t = {} + tinsert (tooltip_void_zone_temp, t) end - return false; - end) - - --actor.debuff_uptime_targets:remapear() + + t[1] = target_name + t[2] = debuff_table.damage + t[3] = debuff_table + + i = i + 1 + end + --> sort no container: + _table_sort (tooltip_void_zone_temp, sort_tooltip_void_zones) + --> monta o cooltip local GameCooltip = GameCooltip GameCooltip:AddLine (Loc ["STRING_VOIDZONE_TOOLTIP"], nil, nil, headerColor, nil, 12) GameCooltip:AddIcon ([[Interface\Addons\Details\images\icons]], 1, 1, 14, 14, 0.126953125, 0.1796875, 0, 0.0546875) - for target_name, debuff_table in _pairs (container) do + --for target_name, debuff_table in _pairs (container) do + for index, t in _ipairs (tooltip_void_zone_temp) do + + if (t[3] == 0) then + break + end + + local debuff_table = t[3] local minutos, segundos = _math_floor (debuff_table.uptime / 60), _math_floor (debuff_table.uptime % 60) if (minutos > 0) then - GameCooltip:AddLine (target_name, FormatTooltipNumber (_, debuff_table.damage) .. " (" .. minutos .. "m " .. segundos .. "s" .. ")") + GameCooltip:AddLine (t[1], FormatTooltipNumber (_, debuff_table.damage) .. " (" .. minutos .. "m " .. segundos .. "s" .. ")") else - GameCooltip:AddLine (target_name, FormatTooltipNumber (_, debuff_table.damage) .. " (" .. segundos .. "s" .. ")") + GameCooltip:AddLine (t[1], FormatTooltipNumber (_, debuff_table.damage) .. " (" .. segundos .. "s" .. ")") end - local classe = _detalhes:GetClass (target_name) + local classe = _detalhes:GetClass (t[1]) if (classe) then GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], nil, nil, 14, 14, unpack (_detalhes.class_coords [classe])) else @@ -2090,13 +2128,17 @@ function atributo_damage:MontaInfoFriendlyFire() local Skills = {} for target_name, ff_table in _pairs (self.friendlyfire) do - _table_insert (DamagedPlayers, {target_name, ff_table.total, ff_table.total / FriendlyFireTotal * 100, combat (1, target_name).classe}) - - for spellid, amount in _pairs (ff_table.spells) do - Skills [spellid] = (Skills [spellid] or 0) + amount + + local actor = combat (1, target_name) + if (actor) then + _table_insert (DamagedPlayers, {target_name, ff_table.total, ff_table.total / FriendlyFireTotal * 100, actor.classe}) + + for spellid, amount in _pairs (ff_table.spells) do + Skills [spellid] = (Skills [spellid] or 0) + amount + end end end - + _table_sort (DamagedPlayers, _detalhes.Sort2) local amt = #DamagedPlayers @@ -2137,12 +2179,12 @@ function atributo_damage:MontaInfoFriendlyFire() barra.textura:SetValue (tabela[2]/FirstPlaceDamage*100) end - barra.texto_esquerdo:SetText (index .. instancia.divisores.colocacao .. tabela[1]) --seta o texto da esqueda + barra.texto_esquerdo:SetText (index .. instancia.divisores.colocacao .. _detalhes:GetOnlyName (tabela[1])) --seta o texto da esqueda barra.texto_direita:SetText (_detalhes:comma_value (tabela[2]) .. " (" .. _cstr ("%.1f", tabela[3]) .."%)") --seta o texto da direita local classe = tabela[4] if (not classe) then - classe = "monster" + classe = "MONSTER" end barra.icone:SetTexture (info.instancia.row_info.icon_file) @@ -2153,6 +2195,13 @@ function atributo_damage:MontaInfoFriendlyFire() barra.icone:SetTexture (nil) end + local color = _detalhes.class_colors [classe] + if (color) then + barra.textura:SetStatusBarColor (_unpack (color)) + else + barra.textura:SetStatusBarColor (1, 1, 1) + end + barra.minha_tabela = self barra.show = tabela[1] barra:Show() @@ -2254,12 +2303,12 @@ function atributo_damage:MontaInfoDamageTaken() texCoords = _detalhes.class_coords ["UNKNOW"] end - self:UpdadeInfoBar (barra, index, tabela[1], tabela[1], tabela[2], _detalhes:comma_value (tabela[2]), max_, tabela[3], "Interface\\AddOns\\Details\\images\\classes_small", true, texCoords) + self:UpdadeInfoBar (barra, index, tabela[1], tabela[1], tabela[2], _detalhes:comma_value (tabela[2]), max_, tabela[3], "Interface\\AddOns\\Details\\images\\classes_small_alpha", true, texCoords, nil, tabela[4]) end end ---[[exported]] function _detalhes:UpdadeInfoBar (row, index, spellid, name, value, value_formated, max, percent, icon, detalhes, texCoords) +--[[exported]] function _detalhes:UpdadeInfoBar (row, index, spellid, name, value, value_formated, max, percent, icon, detalhes, texCoords, spellschool, class) --> seta o tamanho da barra if (index == 1) then row.textura:SetValue (100) @@ -2268,7 +2317,7 @@ end end --end - row.texto_esquerdo:SetText (index.."."..name) + row.texto_esquerdo:SetText (index .. ". " .. name) --> seta o texto da direita row.texto_direita:SetText (value_formated .. " (" .. _cstr ("%.1f", percent) .."%)") @@ -2292,6 +2341,25 @@ end row.show = spellid row:Show() --> mostra a barra + if (spellschool) then + local t = _detalhes.spells_school [spellschool] + if (t and t.decimals) then + row.textura:SetStatusBarColor (t.decimals[1], t.decimals[2], t.decimals[3]) + else + row.textura:SetStatusBarColor (1, 1, 1) + end + + elseif (class) then + local color = _detalhes.class_colors [class] + if (color) then + row.textura:SetStatusBarColor (_unpack (color)) + else + row.textura:SetStatusBarColor (1, 1, 1) + end + else + row.textura:SetStatusBarColor (1, 1, 1) + end + if (detalhes and self.detalhes and self.detalhes == spellid and info.showing == index) then --self:MontaDetalhes (spellid, row) --> poderia deixar isso pro final e montar uma tail call?? self:MontaDetalhes (row.show, row, info.instancia) --> poderia deixar isso pro final e montar uma tail call?? @@ -2339,22 +2407,22 @@ function atributo_damage:MontaInfoDamageDone() for _spellid, _skill in _pairs (ActorSkillsContainer) do --> da foreach em cada spellid do container local nome, _, icone = _GetSpellInfo (_spellid) - _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome, icone}) + _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome, icone, nil, _skill.spellschool}) end --> add pets local ActorPets = self.pets --local class_color = RAID_CLASS_COLORS [self.classe] and RAID_CLASS_COLORS [self.classe].colorStr local class_color = "FFDDDDDD" + local class_color = "FFDDDD44" for _, PetName in _ipairs (ActorPets) do local PetActor = instancia.showing (class_type, PetName) if (PetActor) then local PetSkillsContainer = PetActor.spells._ActorTable for _spellid, _skill in _pairs (PetSkillsContainer) do --> da foreach em cada spellid do container local nome, _, icone = _GetSpellInfo (_spellid) - _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome .. " (|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r)", icone, PetActor}) + _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome .. " |TInterface\\AddOns\\Details\\images\\classes_small_alpha:12:12:0:0:128:128:33:64:96:128|t|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r", icone, PetActor, _skill.spellschool}) end - --_table_insert (ActorSkillsSortTable, {PetName, PetActor.total, PetActor.total/ActorTotalDamage*100, PetName:gsub ((" <.*"), ""), "Interface\\AddOns\\Details\\images\\classes_small"}) end end @@ -2371,16 +2439,18 @@ function atributo_damage:MontaInfoDamageDone() barra = gump:CriaNovaBarraInfo1 (instancia, index) end - self:FocusLock (barra, tabela[1]) - barra.other_actor = tabela [6] + local name = tabela[4] + if (info.sub_atributo == 2) then - self:UpdadeInfoBar (barra, index, tabela[1], tabela[4], tabela[2], _detalhes:comma_value (_math_floor (tabela[2]/meu_tempo)), max_, tabela[3], tabela[5], true) + self:UpdadeInfoBar (barra, index, tabela[1], name, tabela[2], _detalhes:comma_value (_math_floor (tabela[2]/meu_tempo)), max_, tabela[3], tabela[5], true, nil, tabela [7]) else - self:UpdadeInfoBar (barra, index, tabela[1], tabela[4], tabela[2], _detalhes:comma_value (tabela[2]), max_, tabela[3], tabela[5], true) + self:UpdadeInfoBar (barra, index, tabela[1], name, tabela[2], _detalhes:comma_value (tabela[2]), max_, tabela[3], tabela[5], true, nil, tabela [7]) end - + + self:FocusLock (barra, tabela[1]) + end --> TOP INIMIGOS @@ -2432,10 +2502,10 @@ function atributo_damage:MontaInfoDamageDone() barra.textura:SetValue (tabela[2]/max_*100) end - barra.texto_esquerdo:SetText (index..instancia.divisores.colocacao..tabela[1]) --seta o texto da esqueda - barra.texto_direita:SetText (_detalhes:comma_value (tabela[2]) .." ".. instancia.divisores.abre .. _cstr ("%.1f", tabela[3]) .."%".. instancia.divisores.fecha) --seta o texto da direita + barra.texto_esquerdo:SetText (index .. ". " .. _detalhes:GetOnlyName (tabela[1])) --seta o texto da esqueda + barra.texto_direita:SetText (_detalhes:comma_value (tabela[2]) .. " (" .. _cstr ("%.1f", tabela[3]) .. "%)") --seta o texto da direita - barra.icone:SetTexture ([[Interface\AddOns\Details\images\classes_small]]) --CLASSE + barra.icone:SetTexture ([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE local texCoords = _detalhes.class_coords [tabela[4]] if (not texCoords) then @@ -2443,6 +2513,13 @@ function atributo_damage:MontaInfoDamageDone() end barra.icone:SetTexCoord (_unpack (texCoords)) + local color = _detalhes.class_colors [tabela[4]] + if (color) then + barra.textura:SetStatusBarColor (_unpack (color)) + else + barra.textura:SetStatusBarColor (1, 1, 1) + end + _detalhes:name_space_info (barra) if (barra.mouse_over) then --> atualizar o tooltip @@ -2501,6 +2578,13 @@ function atributo_damage:MontaInfoDamageDone() barra.textura:SetValue (tabela[2]/max_inimigos*100) end + barra.textura:SetStatusBarColor (1, 0.8, 0.8) + + barra.icone:SetTexture ([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE + + local texCoords = _detalhes.class_coords ["ENEMY"] + barra.icone:SetTexCoord (_unpack (texCoords)) + barra.texto_esquerdo:SetText (index..instancia.divisores.colocacao..tabela[1]) --seta o texto da esqueda if (info.sub_atributo == 2) then barra.texto_direita:SetText (_detalhes:comma_value ( _math_floor (tabela[2]/meu_tempo)) .." ".. instancia.divisores.abre .._cstr("%.1f", tabela[3]) .. instancia.divisores.fecha) --seta o texto da direita @@ -2638,7 +2722,7 @@ function atributo_damage:MontaDetalhesEnemy (spellid, barra) barra.textura:SetValue (tabela[2]/max_*100) --> muito mais rapido... end - barra.texto_esquerdo:SetText (index .. ". " .. tabela [1]) --seta o texto da esqueda + barra.texto_esquerdo:SetText (index .. ". " .. _detalhes:GetOnlyName (tabela [1])) --seta o texto da esqueda _detalhes:name_space_info (barra) if (spell.total > 0) then @@ -2652,7 +2736,14 @@ function atributo_damage:MontaDetalhesEnemy (spellid, barra) texCoords = _detalhes.class_coords ["UNKNOW"] end - barra.icone:SetTexture ("Interface\\AddOns\\Details\\images\\classes_small") + local color = _detalhes.class_colors [tabela[3]] + if (color) then + barra.textura:SetStatusBarColor (_unpack (color)) + else + barra.textura:SetStatusBarColor (1, 1, 1, 1) + end + + barra.icone:SetTexture ("Interface\\AddOns\\Details\\images\\classes_small_alpha") barra.icone:SetTexCoord (unpack (texCoords)) barra:Show() --> mostra a barra @@ -2739,10 +2830,15 @@ function atributo_damage:MontaDetalhesDamageTaken (nome, barra) end ------ Detalhe Info Damage Done e Dps -local defenses_table = {c = {117/255, 58/255, 0/255}, p = 0} -local normal_table = {c = {255/255, 180/255, 0/255, 0.5}, p = 0} -local multistrike_table = {c = {223/255, 249/255, 45/255, 0.5}, p = 0} -local critical_table = {c = {249/255, 74/255, 45/255, 0.5}, p = 0} +--local defenses_table = {c = {117/255, 58/255, 0/255}, p = 0} +--local normal_table = {c = {255/255, 180/255, 0/255, 0.5}, p = 0} +--local multistrike_table = {c = {223/255, 249/255, 45/255, 0.5}, p = 0} +--local critical_table = {c = {249/255, 74/255, 45/255, 0.5}, p = 0} + +local defenses_table = {c = {1, 1, 1, 0.5}, p = 0} +local normal_table = {c = {1, 1, 1, 0.5}, p = 0} +local multistrike_table = {c = {1, 1, 1, 0.5}, p = 0} +local critical_table = {c = {1, 1, 1, 0.5}, p = 0} local data_table = {} local t1, t2, t3, t4 = {}, {}, {}, {} @@ -2793,12 +2889,20 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) else this_dps = Loc ["STRING_DPS"] .. ": " .. Loc ["STRING_SEE_BELOW"] end + + local spellschool, schooltext = esta_magia.spellschool, "" + if (spellschool) then + local t = _detalhes.spells_school [spellschool] + if (t and t.name) then + schooltext = t.formated + end + end gump:SetaDetalheInfoTexto ( index, 100, Loc ["STRING_GERAL"], Loc ["STRING_DAMAGE"]..": ".._detalhes:ToK (esta_magia.total), --Loc ["STRING_MULTISTRIKE"] .. ": " .. _cstr ("%.1f", esta_magia.counter/esta_magia.m_amt*100) .. "%", - "", --offhand, + schooltext, --offhand, Loc ["STRING_AVERAGE"] .. ": " .. _detalhes:comma_value (media), this_dps, Loc ["STRING_HITS"]..": " .. total_hits) @@ -2925,7 +3029,7 @@ function atributo_damage:MontaTooltipDamageTaken (esta_barra, index) for spellid, spell in _pairs (container) do for target_name, amount in _pairs (spell.targets) do if (target_name == self.nome) then - total = total + actor.total + total = total + amount habilidades [#habilidades+1] = {spellid, amount} end end diff --git a/classes/classe_damage_habilidade.lua b/classes/classe_damage_habilidade.lua index d1d4a1a9..96230999 100644 --- a/classes/classe_damage_habilidade.lua +++ b/classes/classe_damage_habilidade.lua @@ -131,7 +131,7 @@ if (amount > self.c_max) then self.c_max = amount end - if (self.c_min > amount or self.c_min == 0) then + if ((self.c_min > amount or self.c_min == 0) and not multistrike) then self.c_min = amount end else @@ -140,7 +140,7 @@ if (amount > self.n_max) then self.n_max = amount end - if (self.n_min > amount or self.n_min == 0) then + if ((self.n_min > amount or self.n_min == 0) and not multistrike) then self.n_min = amount end end diff --git a/classes/classe_energy.lua b/classes/classe_energy.lua index 8bcc19aa..0847b115 100644 --- a/classes/classe_energy.lua +++ b/classes/classe_energy.lua @@ -834,9 +834,29 @@ function atributo_energy:KeyNames (sub_atributo) end ---------> TOOLTIPS BIFURCAÇÃO + +local resource_bg_color = {.1, .1, .1, 0.6} +local resource_bg_coords = {.6, 0.1, 0, 0.64453125} + function atributo_energy:ToolTip (instancia, numero, barra, keydown) if (instancia.sub_atributo <= 4) then return self:ToolTipRegenRecebido (instancia, numero, barra, keydown) + + elseif (instancia.sub_atributo == 5) then --resources + + local resource_string = _detalhes.resource_strings [self.resource_type] + + if (resource_string) then + + local icon = _detalhes.resource_icons [self.resource_type] + + GameCooltip:AddLine (resource_string, _cstr ("%.2f", self.resource / instancia.showing:GetCombatTime()) .. " per minute", 1, "white") + GameCooltip:AddIcon (icon.file, 1, 1, 16, 16, unpack (icon.coords)) + GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], resource_bg_coords, resource_bg_color, true) + + return true + end + end end @@ -1401,6 +1421,11 @@ end --> restaura a meta e indexes ao ator _detalhes.refresh:r_atributo_energy (actor, shadow) shadow.powertype = actor.powertype + + if (actor.resource) then + shadow.resource = (shadow.resource or 0) + actor.resource + shadow.resource_type = actor.resource_type + end --> targets for target_name, amount in _pairs (actor.targets) do @@ -1447,10 +1472,15 @@ end shadow.received = shadow.received + actor.received if (not actor.powertype) then - print ("actor without powertype", actor.nome, actor.powertype) + --print ("actor without powertype", actor.nome, actor.powertype) end shadow.powertype = actor.powertype + + if (actor.resource) then + shadow.resource = (shadow.resource or 0) + actor.resource + shadow.resource_type = actor.resource_type + end --> total no combate overall (captura de dados) _detalhes.tabela_overall.totals[3] [actor.powertype] = _detalhes.tabela_overall.totals[3] [actor.powertype] + actor.total @@ -1511,6 +1541,10 @@ atributo_energy.__add = function (tabela1, tabela2) if (not tabela1.powertype) then tabela1.powertype = tabela2.powertype end + + if (tabela1.resource) then + tabela1.resource = tabela1.resource + (tabela2.resource or 0) + end --> total and received tabela1.total = tabela1.total + tabela2.total @@ -1544,6 +1578,10 @@ atributo_energy.__sub = function (tabela1, tabela2) if (not tabela1.powertype) then tabela1.powertype = tabela2.powertype end + + if (tabela1.resource) then + tabela1.resource = tabela1.resource - (tabela2.resource or 0) + end --> total and received tabela1.total = tabela1.total - tabela2.total diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index 93e35ecc..935061b3 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -2121,7 +2121,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini end if (_detalhes.janela_info:IsShown() and instancia == _detalhes.janela_info.instancia) then - if (not instancia.showing) then + if (not instancia.showing or instancia.atributo > 4) then _detalhes:FechaJanelaInfo() else local actor = instancia.showing (instancia.atributo, _detalhes.janela_info.jogador.nome) diff --git a/classes/container_combatentes.lua b/classes/container_combatentes.lua index c0904c49..47a2a140 100644 --- a/classes/container_combatentes.lua +++ b/classes/container_combatentes.lua @@ -562,7 +562,10 @@ function _detalhes.clear:c_container_combatentes (container) container.__index = nil container.shadow = nil - container._NameIndexTable = nil + --container._NameIndexTable = nil container.need_refresh = nil container.funcao_de_criacao = nil + end + function _detalhes.clear:c_container_combatentes_index (container) + container._NameIndexTable = nil end \ No newline at end of file diff --git a/core/control.lua b/core/control.lua index 87784976..57927da0 100644 --- a/core/control.lua +++ b/core/control.lua @@ -457,7 +457,10 @@ --> add to storage if (not InCombatLockdown() and not UnitAffectingCombat ("player") and not _detalhes.logoff_saving_data) then - pcall (_detalhes.StoreEncounter) + local successful, errortext = pcall (_detalhes.StoreEncounter) + if (not successful) then + _detalhes:Msg ("error occurred on StoreEncounter():", errortext) + end else _detalhes.schedule_store_boss_encounter = true end diff --git a/core/gears.lua b/core/gears.lua index dbebc7ac..6311b3b7 100644 --- a/core/gears.lua +++ b/core/gears.lua @@ -227,99 +227,270 @@ function _detalhes:StoreEncounter (combat) return end - --> check if is a mythic encounter - local diff = combat:GetDifficulty() - if (difficulty ~= 16) then - --if (diff ~= 16 and false) then --> debug - return - end - local boss_info = combat:GetBossInfo() local encounter_id = boss_info and boss_info.id if (not encounter_id) then return end - - --> check the guild name - local match = 0 - local guildName = select (1, GetGuildInfo ("player")) - local raid_size = GetNumGroupMembers() or 0 - if (guildName) then - for i = 1, raid_size do - local gName = select (1, GetGuildInfo ("raid" .. i)) or "" - if (gName == guildName) then - match = match + 1 + local diff = combat:GetDifficulty() + + --> check for heroic mode + if (diff == 5 or diff == 6 or diff == 15) then + + local role = UnitGroupRolesAssigned ("player") + if (role ~= "DAMAGER" and role ~= "HEALER") then + return + end + + --> check if the storage is already loaded + if (not IsAddOnLoaded ("Details_DataStorage")) then + local loaded, reason = LoadAddOn ("Details_DataStorage") + if (not loaded) then + return end end - if (match < raid_size * 0.75) then + --> get the storage table + local db = DetailsDataStorage + + if (not db and _detalhes.CreateStorageDB) then + db = _detalhes:CreateStorageDB() + if (not db) then + return + end + elseif (not db) then return end - else - return - end - --> check if the storage is already loaded - if (not IsAddOnLoaded ("Details_DataStorage")) then - local loaded, reason = LoadAddOn ("Details_DataStorage") - if (not loaded) then + local self_database = db.SELF_STORAGE + + if (not self_database) then + --> outdate database? return end - end - - --> get the storage table - local db = DetailsDataStorage - - if (not db and _detalhes.CreateStorageDB) then - db = _detalhes:CreateStorageDB() - if (not db) then - return - end - end - - local raid_database = db.RAID_STORAGE - - if (not raid_database) then - db.RAID_STORAGE = {} - raid_database = db.RAID_STORAGE - end - - --> encounter_database: numeric table with combats - local encounter_database = raid_database [encounter_id] - - if (not encounter_database) then - raid_database [encounter_id] = {} - encounter_database = raid_database [encounter_id] - end - - --> get raid members data - local this_combat_data = { - damage = {}, - heal = {}, - date = date ("%H:%M %d/%m/%y"), - time = time(), - elapsed = combat:GetCombatTime(), - guild = guildName, - } - - for i = 1, raid_size do - local player_name, player_realm = UnitName ("raid" .. i) - if (player_realm and player_realm ~= "") then - player_name = player_name .. "-" .. player_realm - end - local damage_actor = combat (1, player_name) - if (damage_actor) then - this_combat_data.damage [player_name] = floor (damage_actor.total) + local heroic_branch = self_database ["HEROIC"] + if (not heroic_branch) then + heroic_branch = {} + self_database ["HEROIC"] = heroic_branch end - local heal_actor = combat (2, player_name) - if (heal_actor) then - this_combat_data.heal [player_name] = floor (heal_actor.total) + --> heroic database: numeric table with combats + local encounter_database = heroic_branch [encounter_id] + + if (not encounter_database) then + heroic_branch [encounter_id] = {} + encounter_database = heroic_branch [encounter_id] + end + + --> get player data + local t = { + total = 0, + spells = {}, + } + + if (role == "DAMAGER") then + local player = combat (1, _detalhes.player_name) + if (player) then + t.total = player.total + for spellid, spell in pairs (player.spells._ActorTable) do + t.spells [spellid] = spell.total + end + end + + elseif (role == "HEALER") then + local player = combat (2, _detalhes.player_name) + if (player) then + t.total = player.total + for spellid, spell in pairs (player.spells._ActorTable) do + t.spells [spellid] = spell.total + end + end end - end - - tinsert (encounter_database, this_combat_data) + if (t.total > 0) then + local this_combat_data = { + total = t.total, + spells = t.spells, + date = date ("%H:%M %d/%m/%y"), + time = time(), + elapsed = combat:GetCombatTime(), + } + tinsert (encounter_database, this_combat_data) + end + + --> check for normal mode + elseif (diff == 3 or diff == 4 or diff == 14) then + + local role = UnitGroupRolesAssigned ("player") + if (role ~= "DAMAGER" and role ~= "HEALER") then + return + end + + --> check if the storage is already loaded + if (not IsAddOnLoaded ("Details_DataStorage")) then + local loaded, reason = LoadAddOn ("Details_DataStorage") + if (not loaded) then + return + end + end + + --> get the storage table + local db = DetailsDataStorage + + if (not db and _detalhes.CreateStorageDB) then + db = _detalhes:CreateStorageDB() + if (not db) then + return + end + elseif (not db) then + return + end + + local self_database = db.SELF_STORAGE + + if (not self_database) then + --> outdate database? + return + end + + local normal_branch = self_database ["NORMAL"] + if (not normal_branch) then + normal_branch = {} + self_database ["NORMAL"] = normal_branch + end + + --> heroic database: numeric table with combats + local encounter_database = normal_branch [encounter_id] + + if (not encounter_database) then + normal_branch [encounter_id] = {} + encounter_database = normal_branch [encounter_id] + end + + --> get player data + local t = { + total = 0, + spells = {}, + role = role, + } + + if (role == "DAMAGER") then + local player = combat (1, _detalhes.player_name) + if (player) then + t.total = player.total + for spellid, spell in pairs (player.spells._ActorTable) do + t.spells [spellid] = spell.total + end + end + + elseif (role == "HEALER") then + local player = combat (2, _detalhes.player_name) + if (player) then + t.total = player.total + for spellid, spell in pairs (player.spells._ActorTable) do + t.spells [spellid] = spell.total + end + end + end + + if (t.total > 0) then + local this_combat_data = { + total = t.total, + spells = t.spells, + date = date ("%H:%M %d/%m/%y"), + time = time(), + elapsed = combat:GetCombatTime(), + } + tinsert (encounter_database, this_combat_data) + end + + --> check if is a mythic encounter and store the mythic encounter + elseif (difficulty == 16) then + + --> check the guild name + local match = 0 + local guildName = select (1, GetGuildInfo ("player")) + local raid_size = GetNumGroupMembers() or 0 + + if (guildName) then + for i = 1, raid_size do + local gName = select (1, GetGuildInfo ("raid" .. i)) or "" + if (gName == guildName) then + match = match + 1 + end + end + + if (match < raid_size * 0.75) then + return + end + else + return + end + + --> check if the storage is already loaded + if (not IsAddOnLoaded ("Details_DataStorage")) then + local loaded, reason = LoadAddOn ("Details_DataStorage") + if (not loaded) then + return + end + end + + --> get the storage table + local db = DetailsDataStorage + + if (not db and _detalhes.CreateStorageDB) then + db = _detalhes:CreateStorageDB() + if (not db) then + return + end + elseif (not db) then + return + end + + local raid_database = db.RAID_STORAGE + + if (not raid_database) then + db.RAID_STORAGE = {} + raid_database = db.RAID_STORAGE + end + + --> encounter_database: numeric table with combats + local encounter_database = raid_database [encounter_id] + + if (not encounter_database) then + raid_database [encounter_id] = {} + encounter_database = raid_database [encounter_id] + end + + --> get raid members data + local this_combat_data = { + damage = {}, + heal = {}, + date = date ("%H:%M %d/%m/%y"), + time = time(), + elapsed = combat:GetCombatTime(), + guild = guildName, + } + + for i = 1, raid_size do + local player_name, player_realm = UnitName ("raid" .. i) + if (player_realm and player_realm ~= "") then + player_name = player_name .. "-" .. player_realm + end + + local damage_actor = combat (1, player_name) + if (damage_actor) then + this_combat_data.damage [player_name] = floor (damage_actor.total) + end + + local heal_actor = combat (2, player_name) + if (heal_actor) then + this_combat_data.heal [player_name] = floor (heal_actor.total) + end + end + + tinsert (encounter_database, this_combat_data) + end end \ No newline at end of file diff --git a/core/meta.lua b/core/meta.lua index 1008db37..07b08535 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -321,6 +321,14 @@ end end + function _detalhes:DoContainerIndexCleanup() + for index, combat in _ipairs (_detalhes.tabela_historico.tabelas or {}) do + for index, container in _ipairs (combat) do + _detalhes.clear:c_container_combatentes_index (container) + end + end + end + --> limpa indexes, metatables e shadows function _detalhes:PrepareTablesForSave() @@ -507,6 +515,9 @@ --> clear owners _detalhes:DoOwnerCleanup() + + --> cleaer container indexes + _detalhes:DoContainerIndexCleanup() end function _detalhes:reset_window (instancia) diff --git a/core/parser.lua b/core/parser.lua index ea021eca..8fda7ceb 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -757,7 +757,8 @@ --> group checks if (este_jogador.grupo) then - _current_combat.totals_grupo[2] = _current_combat.totals_grupo[2] + cura_efetiva + --_current_combat.totals_grupo[2] = _current_combat.totals_grupo[2] + cura_efetiva + _current_gtotal [2] = _current_gtotal [2] + cura_efetiva end if (jogador_alvo.grupo) then @@ -1463,14 +1464,34 @@ } local resource_power_type = { - [4] = 3, --cat druids and rogues uses energy - [SPELL_POWER_SOUL_SHARDS] = 0, --warlock uses mana - [SPELL_POWER_ECLIPSE] = 0, --moonkin uses mana - [SPELL_POWER_HOLY_POWER] = 0, --paladins uses mana - [SPELL_POWER_SHADOW_ORBS] = 0, --shadow preist uses mana - [SPELL_POWER_DEMONIC_FURY] = 0, --warlock uses mana - [SPELL_POWER_BURNING_EMBERS] = 0, --warlock uses mana + [4] = SPELL_POWER_ENERGY, --combo points + [SPELL_POWER_SOUL_SHARDS] = SPELL_POWER_MANA, + [SPELL_POWER_ECLIPSE] = SPELL_POWER_MANA, + [SPELL_POWER_HOLY_POWER] = SPELL_POWER_MANA, + [SPELL_POWER_SHADOW_ORBS] = SPELL_POWER_MANA, + [SPELL_POWER_DEMONIC_FURY] = SPELL_POWER_MANA, + [SPELL_POWER_BURNING_EMBERS] = SPELL_POWER_MANA, } + + _detalhes.resource_strings = { + [4] = "Combo Point", + [SPELL_POWER_SOUL_SHARDS] = "Soul Shard", + [SPELL_POWER_ECLIPSE] = "Eclipse", + [SPELL_POWER_HOLY_POWER] = "Holy Power", + [SPELL_POWER_SHADOW_ORBS] = "Shadow Orb", + [SPELL_POWER_DEMONIC_FURY] = "Demonic Fury", + [SPELL_POWER_BURNING_EMBERS] = "Burning Embers", + } + + _detalhes.resource_icons = { + [4] = {file = [[Interface\CHARACTERFRAME\ComboPoint]], coords = {1/32, 18/32, 1/16, 14/16}}, + [SPELL_POWER_SOUL_SHARDS] = {file = [[Interface\PLAYERFRAME\UI-WARLOCKSHARD]], coords = {2/64, 2/64, 17/128, 16/128}}, + [SPELL_POWER_ECLIPSE] = {file = [[Interface\PLAYERFRAME\DruidEclipse]], coords = {117/256, 138/256, 72/128, 113/128}}, + [SPELL_POWER_HOLY_POWER] = {file = [[Interface\PLAYERFRAME\PALADINPOWERTEXTURES]], coords = {75/256, 94/256, 87/128, 100/128}}, + [SPELL_POWER_SHADOW_ORBS] = {file = [[Interface\PLAYERFRAME\Priest-ShadowUI]], coords = {119/256, 150/256, 61/128, 94/128}}, + [SPELL_POWER_DEMONIC_FURY] = {file = [[Interface\PLAYERFRAME\Warlock-DemonologyUI]], coords = {76/256, 109/256, 90/256, 104/256}}, + [SPELL_POWER_BURNING_EMBERS] = {file = [[Interface\PLAYERFRAME\Warlock-DestructionUI]], coords = {3/256, 33/256, 23/64, 52/64}} + } function parser:energize (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spelltype, amount, powertype, p6, p7) @@ -1487,7 +1508,7 @@ --> check if is energy or resource --> get resource type - local is_resource, resource_amount = resource_power_type [powertype], amount + local is_resource, resource_amount, resource_id = resource_power_type [powertype], amount, powertype --> check if is valid if (not energy_types [powertype] and not is_resource) then @@ -1575,6 +1596,7 @@ else --> is a resource este_jogador.resource = este_jogador.resource + resource_amount + este_jogador.resource_type = resource_id end end @@ -2337,6 +2359,8 @@ token_list ["RANGE_MISSED"] = nil token_list ["SWING_MISSED"] = nil token_list ["SPELL_MISSED"] = nil + token_list ["SPELL_PERIODIC_MISSED"] = nil + token_list ["DAMAGE_SHIELD_MISSED"] = nil token_list ["ENVIRONMENTAL_DAMAGE"] = nil elseif (capture_type == "heal") then @@ -2376,16 +2400,11 @@ end end - --SPELL_PERIODIC_MISSED --> need research - --DAMAGE_SHIELD_MISSED --> need research - --SPELL_EXTRA_ATTACKS --> need research --SPELL_DRAIN --> need research --SPELL_LEECH --> need research --SPELL_PERIODIC_DRAIN --> need research --SPELL_PERIODIC_LEECH --> need research --SPELL_DISPEL_FAILED --> need research - --SPELL_ABSORBED - function _detalhes:CaptureEnable (capture_type) @@ -2402,6 +2421,8 @@ token_list ["RANGE_MISSED"] = parser.rangemissed token_list ["SWING_MISSED"] = parser.swingmissed token_list ["SPELL_MISSED"] = parser.missed + token_list ["SPELL_PERIODIC_MISSED"] = parser.missed + token_list ["DAMAGE_SHIELD_MISSED"] = parser.missed token_list ["ENVIRONMENTAL_DAMAGE"] = parser.environment elseif (capture_type == "heal") then @@ -2701,7 +2722,10 @@ if (_detalhes.schedule_store_boss_encounter) then if (not _detalhes.logoff_saving_data) then - pcall (_detalhes.StoreEncounter) + local successful, errortext = pcall (_detalhes.StoreEncounter) + if (not successful) then + _detalhes:Msg ("error occurred on StoreEncounter():", errortext) + end end _detalhes.schedule_store_boss_encounter = nil end diff --git a/functions/boss.lua b/functions/boss.lua index 0bb3b286..83357cd4 100644 --- a/functions/boss.lua +++ b/functions/boss.lua @@ -174,6 +174,9 @@ do --> return the boss portrit function _detalhes:GetBossPortrait (mapid, bossindex) if (mapid and bossindex) then + --print (_detalhes.EncounterInformation [mapid]) + --print (_detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters) + --print (_detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters and _detalhes.EncounterInformation [mapid].encounters [bossindex]) return _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex].portrait else return false diff --git a/functions/slash.lua b/functions/slash.lua index de4707b9..5af769d7 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -29,6 +29,9 @@ function SlashCmdList.DETAILS (msg, editbox) elseif (command == Loc ["STRING_SLASH_WIPECONFIG"] or command == "reinstall") then _detalhes:WipeConfig() + elseif (command == Loc ["STRING_SLASH_RESET"] or command == Loc ["STRING_SLASH_RESET_ALIAS1"] or command == "reset") then + _detalhes.tabela_historico:resetar() + elseif (command == Loc ["STRING_SLASH_DISABLE"] or command == "disable") then _detalhes:CaptureSet (false, "damage", true) @@ -47,7 +50,7 @@ function SlashCmdList.DETAILS (msg, editbox) _detalhes:CaptureSet (true, "aura", true) print (Loc ["STRING_DETAILS1"] .. Loc ["STRING_SLASH_CAPTUREON"]) - elseif (command == Loc ["STRING_SLASH_OPTIONS"] or command == "options") then + elseif (command == Loc ["STRING_SLASH_OPTIONS"] or command == "options" or command == "config") then if (rest and tonumber (rest)) then local instanceN = tonumber (rest) @@ -844,6 +847,7 @@ function SlashCmdList.DETAILS (msg, editbox) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_HIDE"] .. "|r: " .. Loc ["STRING_SLASH_HIDE_DESC"]) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_ENABLE"] .. "|r: " .. Loc ["STRING_SLASH_ENABLE_DESC"]) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_DISABLE"] .. "|r: " .. Loc ["STRING_SLASH_DISABLE_DESC"]) + print ("|cffffaeae/details " .. Loc ["STRING_SLASH_RESET"] .. "|r: " .. Loc ["STRING_SLASH_RESET_DESC"]) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_OPTIONS"] .. "|r|cfffcffb0 |r: " .. Loc ["STRING_SLASH_OPTIONS_DESC"]) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_CHANGES"] .. "|r: " .. Loc ["STRING_SLASH_CHANGES_DESC"]) print ("|cffffaeae/details " .. Loc ["STRING_SLASH_WIPECONFIG"] .. "|r: " .. Loc ["STRING_SLASH_WIPECONFIG_DESC"]) diff --git a/functions/spells.lua b/functions/spells.lua index 61835e9a..f130b34b 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -2180,35 +2180,36 @@ do [1] = {name = "Physical", formated = "|cFFFFFF00Physical|r", hex = "FFFFFF00", rgb = {255, 255, 0}, decimals = {1.00, 1.00, 0.00}}, [2] = {name = "Holy", formated = "|cFFFFE680Holy|r", hex = "FFFFE680", rgb = {255, 230, 128}, decimals = {1.00, 0.90, 0.50}}, [4] = {name = "Fire", formated = "|cFFFF8000Fire|r", hex = "FFFF8000", rgb = {255, 128, 0}, decimals = {1.00, 0.50, 0.00}}, - [8] = {name = "Nature", formated = "|cFF4DFF4DNature|r", hex = "FF4DFF4D", rgb = {77, 255, 77}, decimals = {0.30, 1.00, 0.30}}, + [8] = {name = "Nature", formated = "|cFFbeffbeNature|r", hex = "FFbeffbe", rgb = {190, 190, 190}, decimals = {0.7451, 1.0000, 0.7451}}, [16] = {name = "Frost", formated = "|cFF80FFFFFrost|r", hex = "FF80FFFF", rgb = {128, 255, 255}, decimals = {0.50, 1.00, 1.00}}, [32] = {name = "Shadow", formated = "|cFF8080FFShadow|r", hex = "FF8080FF", rgb = {128, 128, 255}, decimals = {0.50, 0.50, 1.00}}, [64] = {name = "Arcane", formated = "|cFFFF80FFArcane|r", hex = "FFFF80FF", rgb = {255, 128, 255}, decimals = {1.00, 0.50, 1.00}}, - [3] = {name = "Holystrike", formated = "|cFFFFE680Holy|r + |cFFFFFF00Physical|r"}, - [5] = {name = "Flamestrike", formated = "|cFFFF8000Fire|r + |cFFFFFF00Physical|r"}, - [6] = {name = "Holyfire", formated = "|cFFFF8000Fire|r + |cFFFFE680Holy|r"}, - [9] = {name = "Stormstrike", formated = "|cFF4DFF4DNature|r + |cFFFFFF00Physical|r"}, - [10] = {name = "Holystorm", formated = "|cFF4DFF4DNature|r + |cFFFFE680Holy|r"}, - [12] = {name = "Firestorm", formated = "|cFF4DFF4DNature|r + |cFFFF8000Fire|r"}, - [17] = {name = "Froststrike", formated = "|cFF80FFFFFrost|r + |cFFFFFF00Physical|r"}, - [18] = {name = "Holyfrost", formated = "|cFF80FFFFFrost|r + |cFFFFE680Holy|r"}, - [20] = {name = "Frostfire", formated = "|cFF80FFFFFrost|r + |cFFFF8000Fire|r"}, - [24] = {name = "Froststorm", formated = "|cFF80FFFFFrost|r + |cFF4DFF4DNature|r"}, - [33] = {name = "Shadowstrike", formated = "|cFF8080FFShadow|r + |cFFFFFF00Physical|r"}, - [34] = {name = "Shadowlight (Twilight)", formated = "|cFF8080FFShadow|r + |cFFFFE680Holy|r"}, - [36] = {name = "Shadowflame", formated = "|cFF8080FFShadow|r + |cFFFF8000Fire|r"}, - [40] = {name = "Shadowstorm (Plague)", formated = "|cFF8080FFShadow|r + |cFF4DFF4DNature|r"}, - [48] = {name = "Shadowfrost", formated = "|cFF8080FFShadow|r + |cFF80FFFFFrost|r"}, - [65] = {name = "Spellstrike", formated = "|cFFFF80FFArcane|r + |cFFFFFF00Physical|r"}, - [66] = {name = "Divine", formated = "|cFFFF80FFArcane|r + |cFFFFE680Holy|r"}, - [68] = {name = "Spellfire", formated = "|cFFFF80FFArcane|r + |cFFFF8000Fire|r"}, - [72] = {name = "Spellstorm", formated = "|cFFFF80FFArcane|r + |cFF4DFF4DNature|r"}, - [80] = {name = "Spellfrost", formated = "|cFFFF80FFArcane|r + |cFF80FFFFFrost|r"}, - [96] = {name = "Spellshadow", formated = "|cFFFF80FFArcane|r + |cFF8080FFShadow|r"}, - [28] = {name = "Elemental", formated = "|cFF80FFFFFrost|r + |cFF4DFF4DNature|r + |cFFFF8000Fire|r"}, - [124] = {name = "Chromatic", formated = "|cFFFF80FFArcane|r + |cFF8080FFShadow|r + |cFF80FFFFFrost|r + |cFF4DFF4DNature|r + |cFFFF8000Fire|r"}, - [126] = {name = "Magic", formated = "|cFFFF80FFArcane|r + |cFF8080FFShadow|r + |cFF80FFFFFrost|r + |cFF4DFF4DNature|r + |cFFFF8000Fire|r + |cFFFFE680Holy|r"}, - [127] = {name = "Chaos", formated = "|cFFFF80FFArcane|r + |cFF8080FFShadow|r + |cFF80FFFFFrost|r + |cFF4DFF4DNature|r + |cFFFF8000Fire|r + |cFFFFE680Holy|r + |cFFFFFF00Physical|r"}, + [3] = {name = "Holystrike", formated = "|cFFFFF240Holystrike|r", hex = "FFFFF240", rgb = {255, 64, 64}, decimals = {1.0000, 0.9490, 0.2510}}, --#FFF240 + [5] = {name = "Flamestrike", formated = "|cFFFFB900Flamestrike|r", hex = "FFFFB900", rgb = {255, 0, 0}, decimals = {1.0000, 0.7255, 0.0000}}, --#FFB900 + [6] = {name = "Holyfire", formated = "|cFFFFD266Holyfire|r", hex = "FFFFD266", rgb = {255, 102, 102}, decimals = {1.0000, 0.8235, 0.4000}}, --#FFD266 + [9] = {name = "Stormstrike", formated = "|cFFAFFF23Stormstrike|r", hex = "FFAFFF23", rgb = {175, 35, 35}, decimals = {0.6863, 1.0000, 0.1373}}, --#AFFF23 + [10] = {name = "Holystorm", formated = "|cFFC1EF6EHolystorm|r", hex = "FFC1EF6E", rgb = {193, 110, 110}, decimals = {0.7569, 0.9373, 0.4314}}, --#C1EF6E + [12] = {name = "Firestorm", formated = "|cFFAFB923Firestorm|r", hex = "FFAFB923", rgb = {175, 35, 35}, decimals = {0.6863, 0.7255, 0.1373}}, --#AFB923 + [17] = {name = "Froststrike", formated = "|cFFB3FF99Froststrike|r", hex = "FFB3FF99", rgb = {179, 153, 153}, decimals = {0.7020, 1.0000, 0.6000}},--#B3FF99 + [18] = {name = "Holyfrost", formated = "|cFFCCF0B3Holyfrost|r", hex = "FFCCF0B3", rgb = {204, 179, 179}, decimals = {0.8000, 0.9412, 0.7020}},--#CCF0B3 + [20] = {name = "Frostfire", formated = "|cFFC0C080Frostfire|r", hex = "FFC0C080", rgb = {192, 128, 128}, decimals = {0.7529, 0.7529, 0.5020}}, --#C0C080 + [24] = {name = "Froststorm", formated = "|cFF69FFAFFroststorm|r", hex = "FF69FFAF", rgb = {105, 175, 175}, decimals = {0.4118, 1.0000, 0.6863}}, --#69FFAF + [33] = {name = "Shadowstrike", formated = "|cFFC6C673Shadowstrike|r", hex = "FFC6C673", rgb = {198, 115, 115}, decimals = {0.7765, 0.7765, 0.4510}},--#C6C673 + [34] = {name = "Shadowlight (Twilight)", formated = "|cFFD3C2ACShadowlight (Twilight)|r", hex = "FFD3C2AC", rgb = {211, 172, 172}, decimals = {0.8275, 0.7608, 0.6745}},--#D3C2AC + [36] = {name = "Shadowflame", formated = "|cFFB38099Shadowflame|r", hex = "FFB38099", rgb = {179, 153, 153}, decimals = {0.7020, 0.5020, 0.6000}}, -- #B38099 + [40] = {name = "Shadowstorm (Plague)", formated = "|cFF6CB3B8Shadowstorm (Plague)|r", hex = "FF6CB3B8", rgb = {108, 184, 184}, decimals = {0.4235, 0.7020, 0.7216}}, --#6CB3B8 + [48] = {name = "Shadowfrost", formated = "|cFF80C6FFShadowfrost|r", hex = "FF80C6FF", rgb = {128, 255, 255}, decimals = {0.5020, 0.7765, 1.0000}},--#80C6FF + [65] = {name = "Spellstrike", formated = "|cFFFFCC66Spellstrike|r", hex = "FFFFCC66", rgb = {255, 102, 102}, decimals = {1.0000, 0.8000, 0.4000}},--#FFCC66 + [66] = {name = "Divine", formated = "|cFFFFBDB3Divine|r", hex = "FFFFBDB3", rgb = {255, 179, 179}, decimals = {1.0000, 0.7412, 0.7020}},--#FFBDB3 + [68] = {name = "Spellfire", formated = "|cFFFF808CSpellfire|r", hex = "FFFF808C", rgb = {255, 140, 140}, decimals = {1.0000, 0.5020, 0.5490}}, --#FF808C + [72] = {name = "Spellstorm", formated = "|cFFAFB9AFSpellstorm|r", hex = "FFAFB9AF", rgb = {175, 175, 175}, decimals = {0.6863, 0.7255, 0.6863}}, --#AFB9AF + [80] = {name = "Spellfrost", formated = "|cFFC0C0FFSpellfrost|r", hex = "FFC0C0FF", rgb = {192, 255, 255}, decimals = {0.7529, 0.7529, 1.0000}},--#C0C0FF + [96] = {name = "Spellshadow", formated = "|cFFB980FFSpellshadow|r", hex = "FFB980FF", rgb = {185, 255, 255}, decimals = {0.7255, 0.5020, 1.0000}},--#B980FF + + [28] = {name = "Elemental", formated = "|cFF0070DEElemental|r", hex = "FF0070DE", rgb = {0, 222, 222}, decimals = {0.0000, 0.4392, 0.8706}}, + [124] = {name = "Chromatic", formated = "|cFFC0C0C0Chromatic|r", hex = "FFC0C0C0", rgb = {192, 192, 192}, decimals = {0.7529, 0.7529, 0.7529}}, + [126] = {name = "Magic", formated = "|cFF1111FFMagic|r", hex = "FF1111FF", rgb = {17, 255, 255}, decimals = {0.0667, 0.0667, 1.0000}}, + [127] = {name = "Chaos", formated = "|cFFFF1111Chaos|r", hex = "FFFF1111", rgb = {255, 17, 17}, decimals = {1.0000, 0.0667, 0.0667}}, } function _detalhes:GetSpellSchoolName (school) diff --git a/gumps/janela_info.lua b/gumps/janela_info.lua index 868c8740..e390addf 100644 --- a/gumps/janela_info.lua +++ b/gumps/janela_info.lua @@ -589,7 +589,7 @@ local function cria_textos (este_gump) este_gump.atributo_nome = este_gump:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") este_gump.targets = este_gump:CreateFontString (nil, "OVERLAY", "QuestFont_Large") - este_gump.targets:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 24, -235) + este_gump.targets:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 24, -233) este_gump.targets:SetText (Loc ["STRING_TARGETS"] .. ":") este_gump.avatar = este_gump:CreateTexture (nil, "overlay") @@ -3212,6 +3212,11 @@ function _detalhes.janela_info:monta_relatorio (botao) return instancia:envia_relatorio (report_lines) end +local row_backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + insets = {left = 0, right = 0, top = 0, bottom = 0}} +local row_backdrop_onleave = {bgFile = "", edgeFile = "", tile = true, tileSize = 16, edgeSize = 32, + insets = {left = 1, right = 1, top = 0, bottom = 1}} + local row_on_enter = function (self) if (info.fading_in or info.faded) then return @@ -3219,33 +3224,31 @@ local row_on_enter = function (self) self.mouse_over = true + for index, block in pairs (_detalhes.janela_info.grupos_detalhes) do + detalhe_infobg_onleave (block.bg) + end + --> aumenta o tamanho da barra self:SetHeight (17) --> altura determinada pela instância --> poe a barra com alfa 1 ao invés de 0.9 self:SetAlpha(1) --> troca a cor da barra enquanto o mouse estiver em cima dela - self:SetBackdrop({ - --bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 16, edgeSize = 10, - insets = {left = 1, right = 1, top = 0, bottom = 1},}) - self:SetBackdropBorderColor (0.666, 0.666, 0.666) - self:SetBackdropColor (0.0941, 0.0941, 0.0941) + self:SetBackdrop (row_backdrop) + self:SetBackdropColor (0.8, 0.8, 0.8, 0.3) if (self.isAlvo) then --> monta o tooltip do alvo --> talvez devesse escurecer a janela no fundo... pois o tooltip é transparente e pode confundir GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") - -- ~erro if (self.spellid == "enemies") then --> damage taken enemies if (not self.minha_tabela or not self.minha_tabela:MontaTooltipDamageTaken (self, self._index, info.instancia)) then -- > poderia ser aprimerado para uma tailcall return end - elseif (not self.minha_tabela or not self.minha_tabela:MontaTooltipAlvos (self, self._index, info.instancia)) then -- > poderia ser aprimerado para uma tailcall return - end + GameTooltip:Show() elseif (self.isMain) then @@ -3289,9 +3292,7 @@ local row_on_leave = function (self) self:SetAlpha(0.9) --> volto o background ao normal - self:SetBackdrop({ - bgFile = "", edgeFile = "", tile = true, tileSize = 16, edgeSize = 32, - insets = {left = 1, right = 1, top = 0, bottom = 1},}) + self:SetBackdrop (row_backdrop_onleave) self:SetBackdropBorderColor (0, 0, 0, 0) self:SetBackdropColor (0, 0, 0, 0) @@ -3302,7 +3303,7 @@ local row_on_leave = function (self) self.icone:SetWidth (14) self.icone:SetHeight (14) --> volta com a alfa antiga da barra - self.icone:SetAlpha (0.8) + self.icone:SetAlpha (1) --> remover o conteúdo que estava sendo mostrado na direita if (info.mostrando_mouse_over) then @@ -3402,19 +3403,29 @@ local function SetBarraScripts (esta_barra, instancia, i) end local function CriaTexturaBarra (instancia, barra) + barra.textura = _CreateFrame ("StatusBar", nil, barra) + + barra.textura:SetFrameLevel (barra:GetFrameLevel()-1) + barra.textura:SetAllPoints (barra) - --barra.textura:SetStatusBarTexture (instancia.row_info.texture_file) - barra.textura:SetStatusBarTexture (_detalhes.default_texture) + barra.textura:SetAlpha (0.5) + --barra.textura:SetStatusBarTexture ([[Interface\AddOns\Details\images\bar_serenity]]) + barra.textura:SetStatusBarTexture ([[Interface\AddOns\Details\images\bar_skyline]]) + --barra.textura:SetStatusBarTexture (_detalhes.default_texture) barra.textura:SetStatusBarColor (.5, .5, .5, 0) barra.textura:SetMinMaxValues (0,100) + barra.textura.bg = barra.textura:CreateTexture (nil, "background") + barra.textura.bg:SetAllPoints() + barra.textura.bg:SetTexture (1, 1, 1, 0.08) + if (barra.targets) then barra.targets:SetParent (barra.textura) barra.targets:SetFrameLevel (barra.textura:GetFrameLevel()+2) end - barra.texto_esquerdo = barra.textura:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") + barra.texto_esquerdo = barra:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") barra.texto_esquerdo:SetPoint ("LEFT", barra.textura, "LEFT", 22, 0) barra.texto_esquerdo:SetJustifyH ("LEFT") barra.texto_esquerdo:SetTextColor (1,1,1,1) @@ -3422,7 +3433,7 @@ local function CriaTexturaBarra (instancia, barra) barra.texto_esquerdo:SetNonSpaceWrap (true) barra.texto_esquerdo:SetWordWrap (false) - barra.texto_direita = barra.textura:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") + barra.texto_direita = barra:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") if (barra.targets) then barra.texto_direita:SetPoint ("RIGHT", barra.targets, "LEFT", -2, 0) else @@ -3590,18 +3601,18 @@ function gump:CriaNovaBarraInfo1 (instancia, index) --> icone esta_barra.miniframe = CreateFrame ("frame", nil, esta_barra) esta_barra.miniframe:SetSize (14, 14) - esta_barra.miniframe:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 20, 0) + esta_barra.miniframe:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 18, 0) esta_barra.miniframe:SetScript ("OnEnter", miniframe_func_on_enter) esta_barra.miniframe:SetScript ("OnLeave", miniframe_func_on_leave) - esta_barra.icone = esta_barra.textura:CreateTexture (nil, "OVERLAY") + esta_barra.icone = esta_barra:CreateTexture (nil, "OVERLAY") esta_barra.icone:SetWidth (14) esta_barra.icone:SetHeight (14) - esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 20, 0) + esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 18, 0) esta_barra:SetAlpha(0.9) - esta_barra.icone:SetAlpha (0.8) + esta_barra.icone:SetAlpha (1) esta_barra.isMain = true @@ -3642,13 +3653,13 @@ function gump:CriaNovaBarraInfo2 (instancia, index) CriaTexturaBarra (instancia, esta_barra) --> icone - esta_barra.icone = esta_barra.textura:CreateTexture (nil, "OVERLAY") + esta_barra.icone = esta_barra:CreateTexture (nil, "OVERLAY") esta_barra.icone:SetWidth (14) esta_barra.icone:SetHeight (14) - esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 0+20, 0) + esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 18, 0) - esta_barra:SetAlpha(0.9) - esta_barra.icone:SetAlpha (0.8) + esta_barra:SetAlpha (0.9) + esta_barra.icone:SetAlpha (1) esta_barra.isAlvo = true @@ -3687,13 +3698,13 @@ function gump:CriaNovaBarraInfo3 (instancia, index) CriaTexturaBarra (instancia, esta_barra) --> icone - esta_barra.icone = esta_barra.textura:CreateTexture (nil, "OVERLAY") + esta_barra.icone = esta_barra:CreateTexture (nil, "OVERLAY") esta_barra.icone:SetWidth (14) esta_barra.icone:SetHeight (14) - esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 0+20, 0) + esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 18, 0) - esta_barra:SetAlpha(0.9) - esta_barra.icone:SetAlpha (0.8) + esta_barra:SetAlpha (0.9) + esta_barra.icone:SetAlpha (1) esta_barra.isDetalhe = true diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 0e948254..d8984e70 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -2474,7 +2474,7 @@ function CreateAlertFrame (baseframe, instancia) frame_upper:SetPoint ("left", baseframe, "left", 3, 0) frame_upper:SetPoint ("right", baseframe, "right", -3, 0) frame_upper:SetHeight (13) - frame_upper:SetFrameStrata ("fullscreen") + frame_upper:SetFrameStrata ("TOOLTIP") local frame_lower = CreateFrame ("frame", "DetailsAlertFrameScrollChild" .. instancia.meu_id, frame_upper) frame_lower:SetHeight (25) @@ -2490,7 +2490,7 @@ function CreateAlertFrame (baseframe, instancia) alert_bg:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}}) alert_bg:SetBackdropColor (.1, .1, .1, 1) - alert_bg:SetFrameStrata ("HIGH") + alert_bg:SetFrameStrata ("FULLSCREEN") alert_bg:SetFrameLevel (baseframe:GetFrameLevel() + 6) alert_bg:Hide() @@ -2512,6 +2512,7 @@ function CreateAlertFrame (baseframe, instancia) rotate_frame:SetWidth (12) rotate_frame:SetPoint ("right", alert_bg, "right", -2, 0) rotate_frame:SetHeight (alert_bg:GetWidth()) + rotate_frame:SetFrameStrata ("FULLSCREEN") local icon = rotate_frame:CreateTexture (nil, "overlay") icon:SetPoint ("center", rotate_frame, "center") @@ -2521,6 +2522,7 @@ function CreateAlertFrame (baseframe, instancia) local button = gump:NewButton (alert_bg, nil, "DetailsInstance"..instancia.meu_id.."AlertButton", nil, 1, 1) button:SetAllPoints() button:SetHook ("OnMouseUp", function() alert_bg:Hide() end) + button:SetFrameStrata ("FULLSCREEN") local RotateAnimGroup = rotate_frame:CreateAnimationGroup() local rotate = RotateAnimGroup:CreateAnimation ("Rotation") @@ -4709,6 +4711,14 @@ local build_mode_list = function (self, elapsed) end end + if (ClosedInstances > 0 or _detalhes:GetNumInstancesAmount() < _detalhes:GetMaxInstancesAmount()) then + GameCooltip:AddLine ("$div", nil, 2, nil, -5, -11) + end + + GameCooltip:AddLine (Loc ["STRING_MENU_CLOSE_INSTANCE"], nil, 2, "white", nil, _detalhes.font_sizes.menus, font) + GameCooltip:AddIcon ([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 2, 1, 14, 14, 0.2, 0.8, 0.2, 0.8) + GameCooltip:AddMenu (2, _detalhes.close_instancia_func, instancia.baseframe.cabecalho.fechar) + CoolTip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true) --> options @@ -6880,7 +6890,7 @@ function gump:CriaCabecalho (baseframe, instancia) _G.GameCooltip:CoolTipInject (baseframe.cabecalho.atributo) --> REPORTAR ~report ---------------------------------------------------------------------------------------------------------------------------------------------------- - baseframe.cabecalho.report = gump:NewButton (baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, _detalhes.Reportar, instancia, nil, [[Interface\Addons\Details\Images\report_button]]) + baseframe.cabecalho.report = gump:NewButton (baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, _detalhes.Reportar, instancia, "INSTANCE" .. instancia.meu_id, [[Interface\Addons\Details\Images\report_button]]) local b = baseframe.cabecalho.report.widget b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) @@ -6915,7 +6925,7 @@ function gump:CriaCabecalho (baseframe, instancia) GameCooltip:AddLine ("Report Results", nil, 1, "white", nil, _detalhes.font_sizes.menus, SharedMedia:Fetch ("font", "Friz Quadrata TT")) GameCooltip:AddIcon ([[Interface\Addons\Details\Images\report_button]], 1, 1, 12, 19) - GameCooltip:AddMenu (1, _detalhes.Reportar, instancia) + GameCooltip:AddMenu (1, _detalhes.Reportar, instancia, nil, "INSTANCE" .. instancia.meu_id) GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true) GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color) diff --git a/gumps/janela_report.lua b/gumps/janela_report.lua index 7bedf620..4da78bb1 100644 --- a/gumps/janela_report.lua +++ b/gumps/janela_report.lua @@ -137,7 +137,7 @@ local _UISpecialFrames = UISpecialFrames --> wow api locals --> internal details report functions ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - function _detalhes:Reportar (param2, options, arg3) + function _detalhes:Reportar (param2, options, arg3, id) if (not _detalhes.janela_report) then _detalhes.janela_report = gump:CriaJanelaReport() @@ -147,6 +147,18 @@ local _UISpecialFrames = UISpecialFrames --> wow api locals self = options end + if (type (param2) == "string") then + id = param2 + end + + if (_detalhes.last_report_id and id and _detalhes.last_report_id == id) then + _detalhes.last_report_id = nil + _detalhes.janela_report.fechar:Click() + return + end + + _detalhes.last_report_id = id + --> trabalha com as opções: if (options and options._no_current) then _G ["Details_Report_CB_1"]:Disable() diff --git a/gumps/switch.lua b/gumps/switch.lua index f0a745ad..60002735 100644 --- a/gumps/switch.lua +++ b/gumps/switch.lua @@ -15,17 +15,16 @@ do local gump_fundo_backdrop = { bgFile = "Interface\\AddOns\\Details\\images\\background", - --edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", - tile = true, tileSize = 16, --edgeSize = 4, + tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}} local frame = _CreateFrame ("frame", "DetailsSwitchPanel", _UIParent) frame:SetPoint ("center", _UIParent, "center", 500, -300) frame:SetWidth (250) frame:SetHeight (100) - --frame:SetBackdrop (gump_fundo_backdrop) + frame:SetBackdrop (gump_fundo_backdrop) frame:SetBackdropBorderColor (170/255, 170/255, 170/255) - frame:SetBackdropColor (24/255, 24/255, 24/255, .8) + frame:SetBackdropColor (0, 0, 0, .7) frame:SetFrameStrata ("FULLSCREEN") frame:SetFrameLevel (16) diff --git a/images/bar_detalhes2.tga b/images/bar_detalhes2.tga index 6c1c696eed8085ad0d0892a9616665d6a0ca1369..be5104277c776b0449ab0619d645fa1be5252898 100644 GIT binary patch literal 45703 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 literal 24160 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΅S#; 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 delta 86821 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 B{Ez?u diff --git a/plugins/Details_DataStorage/Details_DataStorage.lua b/plugins/Details_DataStorage/Details_DataStorage.lua index 9bde97df..950bbf3c 100644 --- a/plugins/Details_DataStorage/Details_DataStorage.lua +++ b/plugins/Details_DataStorage/Details_DataStorage.lua @@ -1,14 +1,27 @@ -DETAILS_STORAGE_VERSION = 1 +DETAILS_STORAGE_VERSION = 2 function _detalhes:CreateStorageDB() - DetailsDataStorage = {VERSION = DETAILS_STORAGE_VERSION, RAID_STORAGE = {}} + DetailsDataStorage = {VERSION = DETAILS_STORAGE_VERSION, RAID_STORAGE = {}, SELF_STORAGE = {}} return DetailsDataStorage end -DetailsDataStorage = DetailsDataStorage or _detalhes:CreateStorageDB() +local f = CreateFrame ("frame", nil, UIParent) +f:Hide() +f:RegisterEvent ("ADDON_LOADED") -if (DetailsDataStorage.VERSION < DETAILS_STORAGE_VERSION) then - --> do revisions -end +f:SetScript ("OnEvent", function (self, event, addonName) + if (addonName == "Details_DataStorage") then + DetailsDataStorage = DetailsDataStorage or _detalhes:CreateStorageDB() + if (DetailsDataStorage.VERSION < DETAILS_STORAGE_VERSION) then + --> do revisions + if (DetailsDataStorage.VERSION == 1) then + DetailsDataStorage.SELF_STORAGE = {} + DetailsDataStorage.VERSION = 2 + end + end + print ("|cFFFFFF00Details! Storage|r: loaded!") + DETAILS_STORAGE_LOADED = true + end +end) diff --git a/plugins/Details_RaidInfo-BlackrockFoundry/boss_faces.tga b/plugins/Details_RaidInfo-BlackrockFoundry/boss_faces.tga index be925024957d08f81edfc63482ad7faa5c919eff..4ef7e39626db7c8f7e787c8d5480e7b785d3357f 100644 GIT binary patch delta 2876 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 delta 16386 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 PXaAga%4xG$)42ZwByYH* diff --git a/startup.lua b/startup.lua index 7ca268f8..aa35d313 100644 --- a/startup.lua +++ b/startup.lua @@ -160,6 +160,9 @@ function _G._detalhes:Start() self.RefreshAfterStartup = nil function _detalhes:CheckWallpaperAfterStartup() + + --print ("1 Checking WallPaper...") + if (not _detalhes.profile_loaded) then return _detalhes:ScheduleTimer ("CheckWallpaperAfterStartup", 2) end @@ -170,6 +173,11 @@ function _G._detalhes:Start() if (not instance.wallpaper.enabled) then instance:InstanceWallpaper (false) end + + --print ("==== 2 Moving Window ", instance.meu_id, instance.ativa) + --vardump (instance.snap) + --print ("===============") + self.move_janela_func (instance.baseframe, true, instance) self.move_janela_func (instance.baseframe, false, instance) end