From 9974a87119e8f0efcac8e743132d7a0bd7b6789a Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Sun, 9 Oct 2022 17:12:13 -0300 Subject: [PATCH] Format the text in the breakdown player list using the same font, size and outline of the damage window --- API.txt | 2 +- Libs/DF/auras.lua | 76 +- Libs/DF/button.lua | 34 +- Libs/DF/fw.lua | 228 +- Libs/DF/help.lua | 6 +- Libs/DF/label.lua | 4 +- Libs/DF/mixins.lua | 33 +- Libs/DF/normal_bar.lua | 90 +- Libs/DF/panel.lua | 625 ++- Libs/DF/slider.lua | 58 +- Libs/DF/split_bar.lua | 88 +- Libs/DF/textentry.lua | 46 +- Libs/DF/timebar.lua | 2 +- Libs/LibCompress/LibCompress.lua | 8 +- Libs/NickTag-1.0/NickTag-1.0.lua | 18 +- boot.lua | 76 +- classes/class_combat.lua | 6 +- classes/class_custom.lua | 36 +- classes/class_damage.lua | 3538 ++++++++--------- classes/class_error.lua | 2 +- classes/class_heal.lua | 38 +- classes/class_instance.lua | 944 ++--- classes/class_resources.lua | 22 +- classes/class_spellutility.lua | 2 +- classes/class_utility.lua | 84 +- classes/container_actors.lua | 8 +- classes/custom_damagedone.lua | 8 +- classes/custom_healingdone.lua | 8 +- core/control.lua | 8 +- core/gears.lua | 16 +- core/parser.lua | 32 +- core/plugins.lua | 16 +- core/plugins_raid.lua | 20 +- core/plugins_statusbar.lua | 26 +- core/plugins_toolbar.lua | 2 +- core/timemachine.lua | 4 +- core/util.lua | 20 +- core/windows.lua | 30 +- frames/fw_mods.lua | 24 +- frames/window_api.lua | 20 +- frames/window_benchmark.lua | 2 +- frames/window_bookmark.lua | 10 +- frames/window_brokertexteditor.lua | 4 +- frames/window_cdtracker.lua | 26 +- frames/window_classcolor.lua | 10 +- frames/window_currentdps.lua | 32 +- frames/window_custom.lua | 54 +- frames/window_dump.lua | 4 +- frames/window_eventtracker.lua | 66 +- frames/window_forge.lua | 60 +- frames/window_macros.lua | 16 +- frames/window_main.lua | 1926 +++++---- frames/window_news.lua | 85 +- frames/window_options2_sections.lua | 538 +-- frames/window_plater.lua | 40 +- frames/window_playerbreakdown.lua | 1991 +++++----- frames/window_playerbreakdown_list.lua | 82 +- frames/window_profiler.lua | 2 +- frames/window_rowtexteditor.lua | 4 +- frames/window_runcode.lua | 6 +- frames/window_scrolldamage.lua | 6 +- frames/window_statistics.lua | 28 +- frames/window_switch.lua | 16 +- frames/window_wa.lua | 32 +- frames/window_welcome.lua | 34 +- functions/api2.lua | 28 +- functions/bossmods.lua | 4 +- functions/buff.lua | 2 +- functions/deathmenu.lua | 18 +- functions/deathrecap.lua | 14 +- functions/dungeon.lua | 16 +- functions/events.lua | 4 +- functions/immersion.lua | 2 +- functions/mythicdungeon.lua | 2 +- functions/plater.lua | 4 +- functions/profiles.lua | 2 +- functions/rowanimation.lua | 2 +- functions/skins.lua | 16 +- functions/slash.lua | 22 +- functions/spellcache.lua | 64 +- functions/spells.lua | 4 +- functions/testbars.lua | 18 +- functions/timedata.lua | 2 +- .../gradient_white_10percent_left.tga | Bin 0 -> 32812 bytes images/spec_icons_normal.tga | Bin 1048620 -> 1048620 bytes .../Details_DataStorage.lua | 2 +- .../Details_EncounterDetails.lua | 48 +- plugins/Details_EncounterDetails/frames.lua | 126 +- .../Details_RaidCheck/Details_RaidCheck.lua | 14 +- plugins/Details_Streamer/Details_Streamer.lua | 104 +- .../Details_TinyThreat/Details_TinyThreat.lua | 20 +- plugins/Details_Vanguard/Details_Vanguard.lua | 38 +- 92 files changed, 5980 insertions(+), 5978 deletions(-) create mode 100644 images/bar_textures/gradient_white_10percent_left.tga diff --git a/API.txt b/API.txt index 9d2298c0..de95609d 100644 --- a/API.txt +++ b/API.txt @@ -662,7 +662,7 @@ there is two ways for do this: end end - table.sort (actorsAmount, function (a,b) return a.total > b.total end) + table.sort (actorsAmount, function(a,b) return a.total > b.total end) 2 - replacing the member "custom" on the actor: diff --git a/Libs/DF/auras.lua b/Libs/DF/auras.lua index 63ddf765..ab16dc6a 100644 --- a/Libs/DF/auras.lua +++ b/Libs/DF/auras.lua @@ -73,7 +73,7 @@ function DF:LoadAllSpells (hashMap, indexTable, allSpellsSameName) C_Timer.After (0, function() if (hashMap and not indexTable) then for i = 1, CONST_MAX_SPELLS do - local spellName = GetSpellInfo (i) + local spellName = GetSpellInfo(i) if (spellName) then hashMap [lower (spellName)] = i end @@ -81,7 +81,7 @@ function DF:LoadAllSpells (hashMap, indexTable, allSpellsSameName) elseif (not hashMap and indexTable) then for i = 1, CONST_MAX_SPELLS do - local spellName = GetSpellInfo (i) + local spellName = GetSpellInfo(i) if (spellName) then indexTable [#indexTable+1] = lower (spellName) end @@ -91,7 +91,7 @@ function DF:LoadAllSpells (hashMap, indexTable, allSpellsSameName) --DF_CALC_PERFORMANCE() if (allSpellsSameName) then for i = 1, CONST_MAX_SPELLS do - local spellName = GetSpellInfo (i) + local spellName = GetSpellInfo(i) if (spellName) then spellName = lower (spellName) indexTable [#indexTable + 1] = spellName @@ -108,7 +108,7 @@ function DF:LoadAllSpells (hashMap, indexTable, allSpellsSameName) end else for i = 1, CONST_MAX_SPELLS do - local spellName = GetSpellInfo (i) + local spellName = GetSpellInfo(i) if (spellName) then spellName = lower (spellName) indexTable [#indexTable + 1] = spellName @@ -155,7 +155,7 @@ end local AuraTrackerMetaFunctions = _G[DF.GlobalWidgetControlNames["aura_tracker"]] --create panels -local on_profile_changed = function (self, newdb) +local on_profile_changed = function(self, newdb) self.db = newdb @@ -232,7 +232,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t ------------- - local on_switch_tracking_method = function (self) + local on_switch_tracking_method = function(self) local method = self.Method f.db.aura_tracker.track_method = method @@ -304,7 +304,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t --store a table with spell name as key and in the value an index table with spell IDs local AllSpellsSameName = {} - local load_all_spells = function (self, capsule) + local load_all_spells = function(self, capsule) if (not next (AllSpellsMap)) then DF:LoadAllSpells (AllSpellsMap, AllSpellNames, AllSpellsSameName) @@ -369,8 +369,8 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t debuff_name_blacklist_entry.tooltip = "Enter the debuff name using lower case letters." f_auto.AddDebuffBlacklistTextBox = debuff_name_blacklist_entry - local same_name_spells_add = function (spellID, t) - local spellName = GetSpellInfo (spellID) + local same_name_spells_add = function(spellID, t) + local spellName = GetSpellInfo(spellID) if (spellName) then if (not next (AllSpellsMap)) then load_all_spells() @@ -389,11 +389,11 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t end DF.AddSpellWithSameName = same_name_spells_add - local get_spellID_from_string = function (text) + local get_spellID_from_string = function(text) --check if the user entered a spell ID local isSpellID = tonumber (text) if (isSpellID and isSpellID > 1 and isSpellID < 10000000) then - local isValidSpellID = GetSpellInfo (isSpellID) + local isValidSpellID = GetSpellInfo(isSpellID) if (isValidSpellID) then return isSpellID else @@ -691,7 +691,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t --options passed to the create aura panel local width, height, row_height = options.width, options.height, options.row_height - local autoTrackList_LineOnEnter = function (self, capsule, value) + local autoTrackList_LineOnEnter = function(self, capsule, value) local flag = self.Flag value = value or self.SpellID @@ -701,7 +701,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t GameCooltip2:SetOwner (self, "left", "right", 2, 0) GameCooltip2:SetOption ("TextSize", 10) - local spellName, _, spellIcon = GetSpellInfo (value) + local spellName, _, spellIcon = GetSpellInfo(value) if (spellName) then GameCooltip2:AddLine (spellName .. " (" .. value .. ")") GameCooltip2:AddIcon (spellIcon, 1, 1, 14, 14, .1, .9, .1, .9) @@ -709,7 +709,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t GameCooltip2:Show() else - local spellName = GetSpellInfo (value) + local spellName = GetSpellInfo(value) if (spellName) then local spellsWithSameName = db.aura_cache_by_name [lower (spellName)] @@ -724,7 +724,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t GameCooltip2:SetOption ("TextSize", 10) for i, spellID in ipairs (spellsWithSameName) do - local spellName, _, spellIcon = GetSpellInfo (spellID) + local spellName, _, spellIcon = GetSpellInfo(spellID) if (spellName) then GameCooltip2:AddLine (spellName .. " (" .. spellID .. ")") GameCooltip2:AddIcon (spellIcon, 1, 1, 14, 14, .1, .9, .1, .9) @@ -749,9 +749,9 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local backdropColor = {.8, .8, .8, 0.2} local backdropColor_OnEnter = {.8, .8, .8, 0.4} - local createAuraScrollBox = function (parent, name, member, title, db, removeFunc) + local createAuraScrollBox = function(parent, name, member, title, db, removeFunc) - local updateFunc = function (self, data, offset, totalLines) + local updateFunc = function(self, data, offset, totalLines) for i = 1, totalLines do local index = i + offset local auraTable = data [index] @@ -776,21 +776,21 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t end end - local lineOnEnter = function (self) + local lineOnEnter = function(self) self:SetBackdropColor (unpack (backdropColor_OnEnter)) --GameTooltip:SetOwner (self, "ANCHOR_CURSOR") - --GameTooltip:SetSpellByID (self.SpellID) + --GameTooltip:SetSpellByID(self.SpellID) --GameTooltip:AddLine (" ") --GameTooltip:Show() end - local lineOnLeave = function (self) + local lineOnLeave = function(self) self:SetBackdropColor (unpack (backdropColor)) --GameTooltip:Hide() end - local onRemoveClick = function (self) + local onRemoveClick = function(self) local spellID = self:GetParent().SpellID db [spellID] = nil db ["".. (spellID or "")] = nil -- cleanup... @@ -800,7 +800,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t end end - local createLineFunc = function (self, index) + local createLineFunc = function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 1, - ((index - 1) * (lineHeight + 1)) - 1) line:SetSize (scrollWidth - 2, lineHeight) @@ -835,7 +835,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t end local scroll = DF:CreateScrollBox (parent, name, updateFunc, db, scrollWidth, scrollHeight, lineAmount, lineHeight) - DF:ReskinSlider (scroll) + DF:ReskinSlider(scroll) parent [member] = scroll scroll.OriginalData = db @@ -843,7 +843,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local t = {} local added = {} for spellID, flag in pairs (scroll.OriginalData) do - local spellName, _, spellIcon = GetSpellInfo (spellID) + local spellName, _, spellIcon = GetSpellInfo(spellID) if (spellName and not added[tonumber(spellID) or 0]) then local lowerSpellName = spellName:lower() tinsert (t, {spellID, spellName, spellIcon, lowerSpellName, flag}) @@ -851,7 +851,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t end end - table.sort (t, function (t1, t2) return t1[4] < t2[4] end) + table.sort (t, function(t1, t2) return t1[4] < t2[4] end) self:SetData (t) self:Refresh() @@ -952,23 +952,23 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local backdrop_color = {.8, .8, .8, 0.2} local backdrop_color_on_enter = {.8, .8, .8, 0.4} - local line_onenter = function (self) + local line_onenter = function(self) self:SetBackdropColor (unpack (backdrop_color_on_enter)) - local spellid = select (7, GetSpellInfo (self.value)) + local spellid = select (7, GetSpellInfo(self.value)) if (spellid) then GameTooltip:SetOwner (self, "ANCHOR_CURSOR") - GameTooltip:SetSpellByID (spellid) + GameTooltip:SetSpellByID(spellid) GameTooltip:AddLine (" ") GameTooltip:Show() end end - local line_onleave = function (self) + local line_onleave = function(self) self:SetBackdropColor (unpack (backdrop_color)) GameTooltip:Hide() end - local onclick_remove_button = function (self) + local onclick_remove_button = function(self) local spell = self:GetParent().value local data = self:GetParent():GetParent():GetData() @@ -982,7 +982,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t self:GetParent():GetParent():Refresh() end - local scroll_createline = function (self, index) + local scroll_createline = function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 1, -((index-1)*(scroll_line_height+1)) - 1) line:SetSize (scroll_width - 2, scroll_line_height) @@ -1013,13 +1013,13 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t return line end - local scroll_refresh = function (self, data, offset, total_lines) + local scroll_refresh = function(self, data, offset, total_lines) for i = 1, total_lines do local index = i + offset local aura = data [index] if (aura) then local line = self:GetLine (i) - local name, _, icon = GetSpellInfo (aura) + local name, _, icon = GetSpellInfo(aura) line.value = aura if (name) then line.name:SetText (name) @@ -1035,7 +1035,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local buffs_added = self:CreateScrollBox (f_manual, "$parentBuffsAdded", scroll_refresh, f.db.aura_tracker.buff, scroll_width, scroll_height, scroll_lines, scroll_line_height) buffs_added:SetPoint ("topleft", f_manual, "topleft", 0, y) - DF:ReskinSlider (buffs_added) + DF:ReskinSlider(buffs_added) for i = 1, scroll_lines do buffs_added:CreateLine (scroll_createline) @@ -1043,7 +1043,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local debuffs_added = self:CreateScrollBox (f_manual, "$parentDebuffsAdded", scroll_refresh, f.db.aura_tracker.debuff, scroll_width, scroll_height, scroll_lines, scroll_line_height) debuffs_added:SetPoint ("topleft", f_manual, "topleft", width+30, y) - DF:ReskinSlider (debuffs_added) + DF:ReskinSlider(debuffs_added) for i = 1, scroll_lines do debuffs_added:CreateLine (scroll_createline) @@ -1182,7 +1182,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local export_buff_button = self:CreateButton (f_manual, function() local str = "" for _, spellId in ipairs (f.db.aura_tracker.buff) do - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) if (spellName) then str = str .. spellName .. "; " end @@ -1196,7 +1196,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t local export_debuff_button = self:CreateButton (f_manual, function() local str = "" for _, spellId in ipairs (f.db.aura_tracker.debuff) do - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) if (spellName) then str = str .. spellName .. "; " end @@ -1246,7 +1246,7 @@ function DF:GetAllPlayerSpells (include_lower_case) local index = offset + i local spellType, spellId = GetSpellBookItemInfo (index, "player") if (spellType == "SPELL") then - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) tinsert (playerSpells, spellName) if (include_lower_case) then tinsert (playerSpells, lower (spellName)) diff --git a/Libs/DF/button.lua b/Libs/DF/button.lua index 11b4fe89..3082208f 100644 --- a/Libs/DF/button.lua +++ b/Libs/DF/button.lua @@ -125,7 +125,7 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) ButtonMetaFunctions.GetMembers["textfont"] = gmember_textfont --alias ButtonMetaFunctions.GetMembers["textsize"] = gmember_textsize --alias - ButtonMetaFunctions.__index = function (_table, _member_requested) + ButtonMetaFunctions.__index = function(_table, _member_requested) local func = ButtonMetaFunctions.GetMembers [_member_requested] if (func) then @@ -143,12 +143,12 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) ------------------------------------------------------------------------------------------------------------------------------------------------------------------- --tooltip - local smember_tooltip = function (_object, _value) + local smember_tooltip = function(_object, _value) return _object:SetTooltip (_value) end --show - local smember_show = function (_object, _value) + local smember_show = function(_object, _value) if (_value) then return _object:Show() else @@ -157,7 +157,7 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) end --hide - local smember_hide = function (_object, _value) + local smember_hide = function(_object, _value) if (not _value) then return _object:Show() else @@ -166,53 +166,53 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) end --frame width - local smember_width = function (_object, _value) + local smember_width = function(_object, _value) return _object.button:SetWidth (_value) end --frame height - local smember_height = function (_object, _value) + local smember_height = function(_object, _value) return _object.button:SetHeight (_value) end --text - local smember_text = function (_object, _value) + local smember_text = function(_object, _value) return _object.button.text:SetText (_value) end --function - local smember_function = function (_object, _value) + local smember_function = function(_object, _value) return rawset(_object, "func", _value) end --param1 - local smember_param1 = function (_object, _value) + local smember_param1 = function(_object, _value) return rawset(_object, "param1", _value) end --param2 - local smember_param2 = function (_object, _value) + local smember_param2 = function(_object, _value) return rawset(_object, "param2", _value) end --text color - local smember_textcolor = function (_object, _value) + local smember_textcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) return _object.button.text:SetTextColor (_value1, _value2, _value3, _value4) end --text font - local smember_textfont = function (_object, _value) + local smember_textfont = function(_object, _value) return DF:SetFontFace (_object.button.text, _value) end --text size - local smember_textsize = function (_object, _value) + local smember_textsize = function(_object, _value) return DF:SetFontSize (_object.button.text, _value) end --texture - local smember_texture = function (_object, _value) + local smember_texture = function(_object, _value) if (type (_value) == "table") then local _value1, _value2, _value3, _value4 = unpack (_value) if (_value1) then @@ -237,7 +237,7 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) end --locked - local smember_locked = function (_object, _value) + local smember_locked = function(_object, _value) if (_value) then _object.button:SetMovable (false) return rawset(_object, "is_locked", true) @@ -249,7 +249,7 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) end --text align - local smember_textalign = function (_object, _value) + local smember_textalign = function(_object, _value) if (_value == "left" or _value == "<") then _object.button.text:SetPoint ("left", _object.button, "left", 2, 0) _object.capsule_textalign = "left" @@ -282,7 +282,7 @@ DF:Mixin(ButtonMetaFunctions, DF.FrameMixin) ButtonMetaFunctions.SetMembers ["locked"] = smember_locked ButtonMetaFunctions.SetMembers ["textalign"] = smember_textalign - ButtonMetaFunctions.__newindex = function (_table, _key, _value) + ButtonMetaFunctions.__newindex = function(_table, _key, _value) local func = ButtonMetaFunctions.SetMembers [_key] if (func) then return func (_table, _value) diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index 0fdfc7fb..b118a3be 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,6 +1,6 @@ -local dversion = 377 +local dversion = 379 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary(major, minor) @@ -184,7 +184,7 @@ function DF:GetRoleByClassicTalentTree() local MIN_SPECS = 4 --put the spec with more talent point to the top - table.sort(pointsPerSpec, function (t1, t2) return t1[2] > t2[2] end) + table.sort(pointsPerSpec, function(t1, t2) return t1[2] > t2[2] end) --get the spec with more points spent local spec = pointsPerSpec[1] @@ -1374,6 +1374,7 @@ end if (text) then if (useColon) then text = text .. ":" + return text else return text end @@ -1551,6 +1552,8 @@ end end end + local extraPaddingY = 0 + if (not widgetTable.novolatile) then --step a line if (widgetTable.type == "blank" or widgetTable.type == "space") then @@ -1667,6 +1670,13 @@ end if (widgetTable.boxfirst or useBoxFirstOnAllWidgets) then switch:SetPoint (currentXOffset, currentYOffset) switch.hasLabel:SetPoint ("left", switch, "right", 2) + + local nextWidgetTable = menuOptions[index+1] + if (nextWidgetTable) then + if (nextWidgetTable.type ~= "blank" and nextWidgetTable.type ~= "breakline" and nextWidgetTable.type ~= "toggle" and nextWidgetTable.type ~= "color") then + extraPaddingY = 4 + end + end else switch.hasLabel:SetPoint (currentXOffset, currentYOffset) switch:SetPoint ("left", switch.hasLabel, "right", 2) @@ -1893,6 +1903,10 @@ end end end + if (extraPaddingY > 0) then + currentYOffset = currentYOffset - extraPaddingY + end + if (widgetTable.type == "breakline" or currentYOffset < height) then currentYOffset = yOffset currentXOffset = currentXOffset + maxColumnWidth + 20 @@ -2077,12 +2091,12 @@ end local nextWidgetTable = menuOptions[index+1] if (nextWidgetTable) then if (nextWidgetTable.type ~= "blank" and nextWidgetTable.type ~= "breakline" and nextWidgetTable.type ~= "toggle" and nextWidgetTable.type ~= "color") then - extraPaddingY = 3 + extraPaddingY = 4 end end else label:SetPoint(currentXOffset, currentYOffset) - switch:SetPoint("left", label, "right", 2) + switch:SetPoint("left", label, "right", 2, 0) end switch.hasLabel = label @@ -2396,7 +2410,7 @@ end frame:RegisterEvent ("PLAYER_REGEN_DISABLED") frame:RegisterEvent ("PLAYER_REGEN_ENABLED") - frame:SetScript ("OnEvent", function (self, event) + frame:SetScript ("OnEvent", function(self, event) if (event == "PLAYER_REGEN_DISABLED") then in_combat_background:Show() in_combat_label:Show() @@ -2424,7 +2438,7 @@ end TutorialAlertFrame:SetFrameStrata ("TOOLTIP") TutorialAlertFrame:Hide() - TutorialAlertFrame:SetScript ("OnMouseUp", function (self) + TutorialAlertFrame:SetScript ("OnMouseUp", function(self) if (self.clickfunc and type (self.clickfunc) == "function") then self.clickfunc() end @@ -2442,7 +2456,7 @@ end TutorialAlertFrame:Show() end - local refresh_options = function (self) + local refresh_options = function(self) for _, widget in ipairs (self.widget_list) do if (widget._get) then if (widget.widget_type == "label") then @@ -2467,7 +2481,7 @@ end end end - local get_frame_by_id = function (self, id) + local get_frame_by_id = function(self, id) return self.widgetids [id] end @@ -3054,7 +3068,7 @@ local FrameshakeUpdateFrame = DetailsFrameworkFrameshakeControl or CreateFrame ( --> store the frame which has frame shakes registered FrameshakeUpdateFrame.RegisteredFrames = FrameshakeUpdateFrame.RegisteredFrames or {} -FrameshakeUpdateFrame.RegisterFrame = function (newFrame) +FrameshakeUpdateFrame.RegisterFrame = function(newFrame) --> add the frame into the registered frames to update DF.table.addunique (FrameshakeUpdateFrame.RegisteredFrames, newFrame) end @@ -3062,7 +3076,7 @@ end --forward declared local frameshake_do_update -FrameshakeUpdateFrame:SetScript ("OnUpdate", function (self, deltaTime) +FrameshakeUpdateFrame:SetScript ("OnUpdate", function(self, deltaTime) for i = 1, #FrameshakeUpdateFrame.RegisteredFrames do local parent = FrameshakeUpdateFrame.RegisteredFrames [i] --> check if there's a shake running @@ -3079,7 +3093,7 @@ FrameshakeUpdateFrame:SetScript ("OnUpdate", function (self, deltaTime) end) -local frameshake_shake_finished = function (parent, shakeObject) +local frameshake_shake_finished = function(parent, shakeObject) if (shakeObject.IsPlaying) then shakeObject.IsPlaying = false shakeObject.TimeLeft = 0 @@ -3117,7 +3131,7 @@ local frameshake_shake_finished = function (parent, shakeObject) end --already declared above the update function -frameshake_do_update = function (parent, shakeObject, deltaTime) +frameshake_do_update = function(parent, shakeObject, deltaTime) --> check delta time deltaTime = deltaTime or 0 @@ -3193,12 +3207,12 @@ frameshake_do_update = function (parent, shakeObject, deltaTime) end end -local frameshake_stop = function (parent, shakeObject) +local frameshake_stop = function(parent, shakeObject) frameshake_shake_finished (parent, shakeObject) end --> scale direction scales the X and Y coordinates, scale strength scales the amplitude and frequency -local frameshake_play = function (parent, shakeObject, scaleDirection, scaleAmplitude, scaleFrequency, scaleDuration) +local frameshake_play = function(parent, shakeObject, scaleDirection, scaleAmplitude, scaleFrequency, scaleDuration) --> check if is already playing if (shakeObject.TimeLeft > 0) then @@ -3271,7 +3285,7 @@ local frameshake_play = function (parent, shakeObject, scaleDirection, scaleAmpl frameshake_do_update (parent, shakeObject) end -local frameshake_set_config = function (parent, shakeObject, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints) +local frameshake_set_config = function(parent, shakeObject, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints) shakeObject.Amplitude = amplitude or shakeObject.Amplitude shakeObject.Frequency = frequency or shakeObject.Frequency shakeObject.Duration = duration or shakeObject.Duration @@ -3348,7 +3362,7 @@ end ----------------------------- --> glow overlay -local glow_overlay_play = function (self) +local glow_overlay_play = function(self) if (not self:IsShown()) then self:Show() end @@ -3361,7 +3375,7 @@ local glow_overlay_play = function (self) end end -local glow_overlay_stop = function (self) +local glow_overlay_stop = function(self) if (self.animOut:IsPlaying()) then self.animOut:Stop() end @@ -3373,7 +3387,7 @@ local glow_overlay_stop = function (self) end end -local glow_overlay_setcolor = function (self, antsColor, glowColor) +local glow_overlay_setcolor = function(self, antsColor, glowColor) if (antsColor) then local r, g, b, a = DF:ParseColors (antsColor) self.ants:SetVertexColor (r, g, b, a) @@ -3393,11 +3407,11 @@ local glow_overlay_setcolor = function (self, antsColor, glowColor) end end -local glow_overlay_onshow = function (self) +local glow_overlay_onshow = function(self) glow_overlay_play (self) end -local glow_overlay_onhide = function (self) +local glow_overlay_onhide = function(self) glow_overlay_stop (self) end @@ -3437,7 +3451,7 @@ function DF:CreateGlowOverlay (parent, antsColor, glowColor) end --> custom glow with ants animation -local ants_set_texture_offset = function (self, leftOffset, rightOffset, topOffset, bottomOffset) +local ants_set_texture_offset = function(self, leftOffset, rightOffset, topOffset, bottomOffset) leftOffset = leftOffset or 0 rightOffset = rightOffset or 0 topOffset = topOffset or 0 @@ -3469,7 +3483,7 @@ function DF:CreateAnts (parent, antTable, leftOffset, rightOffset, topOffset, bo f.AntTable = antTable - f:SetScript ("OnUpdate", function (self, deltaTime) + f:SetScript ("OnUpdate", function(self, deltaTime) AnimateTexCoords (t, self.AntTable.TextureWidth, self.AntTable.TextureHeight, self.AntTable.TexturePartsWidth, self.AntTable.TexturePartsHeight, self.AntTable.AmountParts, deltaTime, self.AntTable.Throttle or 0.025) end) @@ -3489,7 +3503,7 @@ local default_border_color1 = .5 local default_border_color2 = .3 local default_border_color3 = .1 -local SetBorderAlpha = function (self, alpha1, alpha2, alpha3) +local SetBorderAlpha = function(self, alpha1, alpha2, alpha3) self.Borders.Alpha1 = alpha1 or self.Borders.Alpha1 self.Borders.Alpha2 = alpha2 or self.Borders.Alpha2 self.Borders.Alpha3 = alpha3 or self.Borders.Alpha3 @@ -3505,7 +3519,7 @@ local SetBorderAlpha = function (self, alpha1, alpha2, alpha3) end end -local SetBorderColor = function (self, r, g, b) +local SetBorderColor = function(self, r, g, b) for _, texture in ipairs (self.Borders.Layer1) do texture:SetColorTexture (r, g, b) end @@ -3517,7 +3531,7 @@ local SetBorderColor = function (self, r, g, b) end end -local SetLayerVisibility = function (self, layer1Shown, layer2Shown, layer3Shown) +local SetLayerVisibility = function(self, layer1Shown, layer2Shown, layer3Shown) for _, texture in ipairs (self.Borders.Layer1) do texture:SetShown (layer1Shown) @@ -3829,144 +3843,106 @@ function DF:CreateBorderWithSpread (parent, alpha1, alpha2, alpha3, size, spread end -function DF:ReskinSlider (slider, heightOffset) +function DF:ReskinSlider(slider, heightOffset) if (slider.slider) then - slider.cima:SetNormalTexture ([[Interface\Buttons\Arrow-Up-Up]]) - slider.cima:SetPushedTexture ([[Interface\Buttons\Arrow-Up-Down]]) - slider.cima:SetDisabledTexture ([[Interface\Buttons\Arrow-Up-Disabled]]) + slider.cima:SetNormalTexture([[Interface\Buttons\Arrow-Up-Up]]) + slider.cima:SetPushedTexture([[Interface\Buttons\Arrow-Up-Down]]) + slider.cima:SetDisabledTexture([[Interface\Buttons\Arrow-Up-Disabled]]) slider.cima:GetNormalTexture():ClearAllPoints() slider.cima:GetPushedTexture():ClearAllPoints() slider.cima:GetDisabledTexture():ClearAllPoints() - slider.cima:GetNormalTexture():SetPoint ("center", slider.cima, "center", 1, 1) - slider.cima:GetPushedTexture():SetPoint ("center", slider.cima, "center", 1, 1) - slider.cima:GetDisabledTexture():SetPoint ("center", slider.cima, "center", 1, 1) - slider.cima:SetSize (16, 16) - --[=[ - slider.cima:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) - slider.cima:SetBackdropColor (0, 0, 0, 0.3) - slider.cima:SetBackdropBorderColor (0, 0, 0, 1) - ]=] - - slider.baixo:SetNormalTexture ([[Interface\Buttons\Arrow-Down-Up]]) - slider.baixo:SetPushedTexture ([[Interface\Buttons\Arrow-Down-Down]]) - slider.baixo:SetDisabledTexture ([[Interface\Buttons\Arrow-Down-Disabled]]) + slider.cima:GetNormalTexture():SetPoint("center", slider.cima, "center", 1, 1) + slider.cima:GetPushedTexture():SetPoint("center", slider.cima, "center", 1, 1) + slider.cima:GetDisabledTexture():SetPoint("center", slider.cima, "center", 1, 1) + slider.cima:SetSize(16, 16) + + slider.baixo:SetNormalTexture([[Interface\Buttons\Arrow-Down-Up]]) + slider.baixo:SetPushedTexture([[Interface\Buttons\Arrow-Down-Down]]) + slider.baixo:SetDisabledTexture([[Interface\Buttons\Arrow-Down-Disabled]]) slider.baixo:GetNormalTexture():ClearAllPoints() slider.baixo:GetPushedTexture():ClearAllPoints() slider.baixo:GetDisabledTexture():ClearAllPoints() - slider.baixo:GetNormalTexture():SetPoint ("center", slider.baixo, "center", 1, -5) - slider.baixo:GetPushedTexture():SetPoint ("center", slider.baixo, "center", 1, -5) - slider.baixo:GetDisabledTexture():SetPoint ("center", slider.baixo, "center", 1, -5) - slider.baixo:SetSize (16, 16) - --[=[ - slider.baixo:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) - slider.baixo:SetBackdropColor (0, 0, 0, 0.35) - slider.baixo:SetBackdropBorderColor (0, 0, 0, 1) - - slider.slider:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) - slider.slider:SetBackdropColor (0, 0, 0, 0.35) - slider.slider:SetBackdropBorderColor (0, 0, 0, 1) - ]=] - - --slider.slider:Altura (164) - slider.slider:cimaPoint (0, 13) - slider.slider:baixoPoint (0, -13) - slider.slider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]]) - slider.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512) - slider.slider.thumb:SetSize (12, 12) - slider.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95) + slider.baixo:GetNormalTexture():SetPoint("center", slider.baixo, "center", 1, -5) + slider.baixo:GetPushedTexture():SetPoint("center", slider.baixo, "center", 1, -5) + slider.baixo:GetDisabledTexture():SetPoint("center", slider.baixo, "center", 1, -5) + slider.baixo:SetSize(16, 16) + + slider.slider:cimaPoint(0, 13) + slider.slider:baixoPoint(0, -13) + slider.slider.thumb:SetTexture([[Interface\AddOns\Details\images\icons2]]) + slider.slider.thumb:SetTexCoord(482/512, 492/512, 104/512, 120/512) + slider.slider.thumb:SetSize(12, 12) + slider.slider.thumb:SetVertexColor(0.6, 0.6, 0.6, 0.95) else --up button - local offset = 1 --space between the scrollbox and the scrollar do local normalTexture = slider.ScrollBar.ScrollUpButton.Normal - normalTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Up]]) - normalTexture:SetTexCoord (0, 1, .2, 1) + normalTexture:SetTexture([[Interface\Buttons\Arrow-Up-Up]]) + normalTexture:SetTexCoord(0, 1, .2, 1) - normalTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) - normalTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) + normalTexture:SetPoint("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) + normalTexture:SetPoint("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) local pushedTexture = slider.ScrollBar.ScrollUpButton.Pushed - pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Down]]) - pushedTexture:SetTexCoord (0, 1, .2, 1) + pushedTexture:SetTexture([[Interface\Buttons\Arrow-Up-Down]]) + pushedTexture:SetTexCoord(0, 1, .2, 1) - pushedTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) - pushedTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) + pushedTexture:SetPoint("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) + pushedTexture:SetPoint("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) local disabledTexture = slider.ScrollBar.ScrollUpButton.Disabled - disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Disabled]]) - disabledTexture:SetTexCoord (0, 1, .2, 1) - disabledTexture:SetAlpha (.5) + disabledTexture:SetTexture([[Interface\Buttons\Arrow-Up-Disabled]]) + disabledTexture:SetTexCoord(0, 1, .2, 1) + disabledTexture:SetAlpha(.5) - disabledTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) - disabledTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) + disabledTexture:SetPoint("topleft", slider.ScrollBar.ScrollUpButton, "topleft", offset, 0) + disabledTexture:SetPoint("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", offset, 0) - slider.ScrollBar.ScrollUpButton:SetSize (16, 16) - --[=[ - slider.ScrollBar.ScrollUpButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"}) - slider.ScrollBar.ScrollUpButton:SetBackdropColor (0, 0, 0, 0.3) - slider.ScrollBar.ScrollUpButton:SetBackdropBorderColor (0, 0, 0, 1) - ]=] - --it was having problems with the texture anchor when calling ClearAllPoints() and setting new points different from the original - --now it is using the same points from the original with small offsets tp align correctly + slider.ScrollBar.ScrollUpButton:SetSize(16, 16) end --down button do local normalTexture = slider.ScrollBar.ScrollDownButton.Normal - normalTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Up]]) - normalTexture:SetTexCoord (0, 1, 0, .8) + normalTexture:SetTexture([[Interface\Buttons\Arrow-Down-Up]]) + normalTexture:SetTexCoord(0, 1, 0, .8) - normalTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) - normalTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) + normalTexture:SetPoint("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) + normalTexture:SetPoint("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) local pushedTexture = slider.ScrollBar.ScrollDownButton.Pushed - pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Down]]) - pushedTexture:SetTexCoord (0, 1, 0, .8) + pushedTexture:SetTexture([[Interface\Buttons\Arrow-Down-Down]]) + pushedTexture:SetTexCoord(0, 1, 0, .8) - pushedTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) - pushedTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) + pushedTexture:SetPoint("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) + pushedTexture:SetPoint("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) local disabledTexture = slider.ScrollBar.ScrollDownButton.Disabled - disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Disabled]]) - disabledTexture:SetTexCoord (0, 1, 0, .8) - disabledTexture:SetAlpha (.5) + disabledTexture:SetTexture([[Interface\Buttons\Arrow-Down-Disabled]]) + disabledTexture:SetTexCoord(0, 1, 0, .8) + disabledTexture:SetAlpha(.5) - disabledTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) - disabledTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) + disabledTexture:SetPoint("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) + disabledTexture:SetPoint("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) slider.ScrollBar.ScrollDownButton:SetSize (16, 16) - --[=[ - slider.ScrollBar.ScrollDownButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"}) - slider.ScrollBar.ScrollDownButton:SetBackdropColor (0, 0, 0, 0.3) - slider.ScrollBar.ScrollDownButton:SetBackdropBorderColor (0, 0, 0, 1) - ]=] - - -- - --slider.ScrollBar.ScrollDownButton:SetPoint ("top", slider.ScrollBar, "bottom", 0, 0) end --if the parent has a editbox, this is a code editor if (slider:GetParent().editbox) then - slider.ScrollBar:SetPoint ("TOPLEFT", slider, "TOPRIGHT", 12 + offset, -6) - slider.ScrollBar:SetPoint ("BOTTOMLEFT", slider, "BOTTOMRIGHT", 12 + offset, 6 + (heightOffset and heightOffset*-1 or 0)) + slider.ScrollBar:SetPoint("TOPLEFT", slider, "TOPRIGHT", 12 + offset, -6) + slider.ScrollBar:SetPoint("BOTTOMLEFT", slider, "BOTTOMRIGHT", 12 + offset, 6 + (heightOffset and heightOffset*-1 or 0)) else - slider.ScrollBar:SetPoint ("TOPLEFT", slider, "TOPRIGHT", 6, -16) - slider.ScrollBar:SetPoint ("BOTTOMLEFT", slider, "BOTTOMRIGHT", 6, 16 + (heightOffset and heightOffset*-1 or 0)) + slider.ScrollBar:SetPoint("TOPLEFT", slider, "TOPRIGHT", 6, -16) + slider.ScrollBar:SetPoint("BOTTOMLEFT", slider, "BOTTOMRIGHT", 6, 16 + (heightOffset and heightOffset*-1 or 0)) end - slider.ScrollBar.ThumbTexture:SetColorTexture (.5, .5, .5, .3) - slider.ScrollBar.ThumbTexture:SetSize (12, 8) - - -- - --[=[ - slider.ScrollBar:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"}) - slider.ScrollBar:SetBackdropColor (0, 0, 0, 0.35) - slider.ScrollBar:SetBackdropBorderColor (0, 0, 0, 1) - ]=] + slider.ScrollBar.ThumbTexture:SetColorTexture(.5, .5, .5, .3) + slider.ScrollBar.ThumbTexture:SetSize(12, 8) end end @@ -4004,7 +3980,7 @@ function DF:GetClassSpecIDs (class) return specs_per_class [class] end -local dispatch_error = function (context, errortext) +local dispatch_error = function(context, errortext) DF:Msg ( (context or "") .. " |cFFFF9900error|r: " .. (errortext or "")) end @@ -4074,7 +4050,7 @@ function DF_CALC_PERFORMANCE() local F = CreateFrame ("frame") local T = GetTime() local J = false - F:SetScript ("OnUpdate", function (self, deltaTime) + F:SetScript ("OnUpdate", function(self, deltaTime) if (not J) then J = true return @@ -4646,7 +4622,7 @@ if (not DetailsFrameworkDeltaTimeFrame) then end local deltaTimeFrame = DetailsFrameworkDeltaTimeFrame -deltaTimeFrame:SetScript ("OnUpdate", function (self, deltaTime) +deltaTimeFrame:SetScript ("OnUpdate", function(self, deltaTime) self.deltaTime = deltaTime end) @@ -4727,11 +4703,11 @@ DF.DebugMixin = { debug = true, - CheckPoint = function (self, checkPointName, ...) + CheckPoint = function(self, checkPointName, ...) print (self:GetName(), checkPointName, ...) end, - CheckVisibilityState = function (self, widget) + CheckVisibilityState = function(self, widget) self = widget or self @@ -4744,7 +4720,7 @@ DF.DebugMixin = { print ("shown:", self:IsShown(), "visible:", self:IsVisible(), "alpha:", self:GetAlpha(), "size:", width, height, "points:", numPoints) end, - CheckStack = function (self) + CheckStack = function(self) local stack = debugstack() Details:Dump (stack) end, @@ -4973,7 +4949,7 @@ end end DF.DefaultSecureScriptEnvironmentHandle = { - __index = function (env, key) + __index = function(env, key) if (forbiddenFunction[key]) then return nil diff --git a/Libs/DF/help.lua b/Libs/DF/help.lua index 0825fba0..c8e545f9 100644 --- a/Libs/DF/help.lua +++ b/Libs/DF/help.lua @@ -14,7 +14,7 @@ local HelpMetaFunctions = {} local get_members_function_index = {} - HelpMetaFunctions.__index = function (_table, _member_requested) + HelpMetaFunctions.__index = function(_table, _member_requested) local func = get_members_function_index [_member_requested] if (func) then @@ -31,7 +31,7 @@ local HelpMetaFunctions = {} local set_members_function_index = {} - HelpMetaFunctions.__newindex = function (_table, _key, _value) + HelpMetaFunctions.__newindex = function(_table, _key, _value) local func = set_members_function_index [_key] if (func) then return func (_table, _value) @@ -83,7 +83,7 @@ function DF:NewHelp (parent, width, height, x, y, buttonWidth, buttonHeight, nam local idx = getmetatable (helpButton).__index for funcName, funcAddress in pairs (idx) do if (not HelpMetaFunctions [funcName]) then - HelpMetaFunctions [funcName] = function (object, ...) + HelpMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G."..object.button:GetName()..":"..funcName.."(...)") return x (...) end diff --git a/Libs/DF/label.lua b/Libs/DF/label.lua index 40f6337d..6e34e620 100644 --- a/Libs/DF/label.lua +++ b/Libs/DF/label.lua @@ -202,7 +202,7 @@ detailsFramework:Mixin(LabelMetaFunctions, detailsFramework.SetPointMixin) LabelMetaFunctions.SetMembers["textsize"] = smember_textsize--alias LabelMetaFunctions.SetMembers["shadow"] = smember_outline LabelMetaFunctions.SetMembers["outline"] = smember_outline--alias - LabelMetaFunctions.SetMembers["rotation"] = smember_rotation--alias + LabelMetaFunctions.SetMembers["rotation"] = smember_rotation LabelMetaFunctions.__newindex = function(object, key, value) local func = LabelMetaFunctions.SetMembers[key] @@ -296,7 +296,7 @@ detailsFramework:Mixin(LabelMetaFunctions, detailsFramework.SetPointMixin) local idx = getmetatable(labelObject.label).__index for funcName, funcAddress in pairs(idx) do if (not LabelMetaFunctions[funcName]) then - LabelMetaFunctions[funcName] = function (object, ...) + LabelMetaFunctions[funcName] = function(object, ...) local x = loadstring( "return _G['"..object.label:GetName().."']:"..funcName.."(...)") return x(...) end diff --git a/Libs/DF/mixins.lua b/Libs/DF/mixins.lua index 4395d5b4..f51ae067 100644 --- a/Libs/DF/mixins.lua +++ b/Libs/DF/mixins.lua @@ -222,7 +222,7 @@ detailsFramework.SetPointMixin = { --mixin for options functions detailsFramework.OptionsFunctions = { - SetOption = function (self, optionName, optionValue) + SetOption = function(self, optionName, optionValue) if (self.options) then self.options [optionName] = optionValue else @@ -235,11 +235,11 @@ detailsFramework.OptionsFunctions = { end end, - GetOption = function (self, optionName) + GetOption = function(self, optionName) return self.options and self.options [optionName] end, - GetAllOptions = function (self) + GetAllOptions = function(self) if (self.options) then local optionsTable = {} for key, _ in pairs (self.options) do @@ -251,7 +251,7 @@ detailsFramework.OptionsFunctions = { end end, - BuildOptionsTable = function (self, defaultOptions, userOptions) + BuildOptionsTable = function(self, defaultOptions, userOptions) self.options = self.options or {} detailsFramework.table.deploy (self.options, userOptions or {}) detailsFramework.table.deploy (self.options, defaultOptions or {}) @@ -299,6 +299,7 @@ detailsFramework.PayloadMixin = { detailsFramework.ScrollBoxFunctions = { Refresh = function(self) --hide all frames and tag as not in use + self._LinesInUse = 0 for index, frame in ipairs(self.Frames) do frame:Hide() frame._InUse = nil @@ -322,13 +323,25 @@ detailsFramework.ScrollBoxFunctions = { self:Show() - if (self.HideScrollBar) then - local frameName = self:GetName() - if (frameName) then + local frameName = self:GetName() + if (frameName) then + if (self.HideScrollBar) then local scrollBar = _G[frameName .. "ScrollBar"] if (scrollBar) then scrollBar:Hide() end + else + --[=[ --maybe in the future I visit this again + local scrollBar = _G[frameName .. "ScrollBar"] + local height = self:GetHeight() + local totalLinesRequired = #self.data + local linesShown = self._LinesInUse + + local percent = linesShown / totalLinesRequired + local thumbHeight = height * percent + scrollBar.ThumbTexture:SetSize(12, thumbHeight) + print("thumbHeight:", thumbHeight) + --]=] end end return self.Frames @@ -367,6 +380,8 @@ detailsFramework.ScrollBoxFunctions = { if (line) then line._InUse = true end + + self._LinesInUse = self._LinesInUse + 1 return line end, @@ -538,10 +553,10 @@ detailsFramework.ScrollBoxFunctions = { } local SortMember = "" -local SortByMember = function (t1, t2) +local SortByMember = function(t1, t2) return t1[SortMember] > t2[SortMember] end -local SortByMemberReverse = function (t1, t2) +local SortByMemberReverse = function(t1, t2) return t1[SortMember] < t2[SortMember] end diff --git a/Libs/DF/normal_bar.lua b/Libs/DF/normal_bar.lua index f37735dd..3825ee56 100644 --- a/Libs/DF/normal_bar.lua +++ b/Libs/DF/normal_bar.lua @@ -49,7 +49,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] ------------------------------------------------------------------------------------------------------------ --> metatables - BarMetaFunctions.__call = function (_table, value) + BarMetaFunctions.__call = function(_table, value) if (not value) then return _table.statusbar:GetValue() else @@ -57,7 +57,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - BarMetaFunctions.__add = function (v1, v2) + BarMetaFunctions.__add = function(v1, v2) if (_type (v1) == "table") then local v = v1.statusbar:GetValue() v = v + v2 @@ -69,7 +69,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - BarMetaFunctions.__sub = function (v1, v2) + BarMetaFunctions.__sub = function(v1, v2) if (_type (v1) == "table") then local v = v1.statusbar:GetValue() v = v - v2 @@ -89,58 +89,58 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] return _object:GetTooltip() end --> shown - local gmember_shown = function (_object) + local gmember_shown = function(_object) return _object.statusbar:IsShown() end --> frame width - local gmember_width = function (_object) + local gmember_width = function(_object) return _object.statusbar:GetWidth() end --> frame height - local gmember_height = function (_object) + local gmember_height = function(_object) return _object.statusbar:GetHeight() end --> value - local gmember_value = function (_object) + local gmember_value = function(_object) return _object.statusbar:GetValue() end --> right text - local gmember_rtext = function (_object) + local gmember_rtext = function(_object) return _object.textright:GetText() end --> left text - local gmember_ltext = function (_object) + local gmember_ltext = function(_object) return _object.textleft:GetText() end --> left color - local gmember_color = function (_object) + local gmember_color = function(_object) local r, g, b, a = _object._texture:GetVertexColor() return r, g, b, a end --> icon - local gmember_icon = function (_object) + local gmember_icon = function(_object) return _object._icon:GetTexture() end --> texture - local gmember_texture = function (_object) + local gmember_texture = function(_object) return _object._texture:GetTexture() end --> font size - local gmember_textsize = function (_object) + local gmember_textsize = function(_object) local _, fontsize = _object.textleft:GetFont() return fontsize end --> font face - local gmember_textfont = function (_object) + local gmember_textfont = function(_object) local fontface = _object.textleft:GetFont() return fontface end --> font color - local gmember_textcolor = function (_object) + local gmember_textcolor = function(_object) return _object.textleft:GetTextColor() end --> alpha - local gmember_alpha= function (_object) + local gmember_alpha= function(_object) return _object:GetAlpha() end @@ -163,7 +163,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] BarMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias BarMetaFunctions.GetMembers ["alpha"] = gmember_alpha - BarMetaFunctions.__index = function (_table, _member_requested) + BarMetaFunctions.__index = function(_table, _member_requested) local func = BarMetaFunctions.GetMembers [_member_requested] if (func) then @@ -183,11 +183,11 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] --> tooltip - local smember_tooltip = function (_object, _value) + local smember_tooltip = function(_object, _value) return _object:SetTooltip (_value) end --> show - local smember_shown = function (_object, _value) + local smember_shown = function(_object, _value) if (_value) then return _object:Show() else @@ -195,7 +195,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end --> hide - local smember_hide = function (_object, _value) + local smember_hide = function(_object, _value) if (_value) then return _object:Hide() else @@ -203,28 +203,28 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end --> width - local smember_width = function (_object, _value) + local smember_width = function(_object, _value) return _object.statusbar:SetWidth (_value) end --> height - local smember_height = function (_object, _value) + local smember_height = function(_object, _value) return _object.statusbar:SetHeight (_value) end --> statusbar value - local smember_value = function (_object, _value) + local smember_value = function(_object, _value) _object.statusbar:SetValue (_value) return _object.div:SetPoint ("left", _object.statusbar, "left", _value * (_object.statusbar:GetWidth()/100) - 16, 0) end --> right text - local smember_rtext = function (_object, _value) + local smember_rtext = function(_object, _value) return _object.textright:SetText (_value) end --> left text - local smember_ltext = function (_object, _value) + local smember_ltext = function(_object, _value) return _object.textleft:SetText (_value) end --> color - local smember_color = function (_object, _value) + local smember_color = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) _object.statusbar:SetStatusBarColor (_value1, _value2, _value3, _value4) @@ -236,12 +236,12 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] return _object._texture:SetVertexColor (_value1, _value2, _value3, _value4) end --> background color - local smember_backgroundcolor = function (_object, _value) + local smember_backgroundcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) return _object.background:SetVertexColor (_value1, _value2, _value3, _value4) end --> icon - local smember_icon = function (_object, _value) + local smember_icon = function(_object, _value) if (type (_value) == "table") then local _value1, _value2 = _unpack (_value) _object._icon:SetTexture (_value1) @@ -254,7 +254,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] return end --> texture - local smember_texture = function (_object, _value) + local smember_texture = function(_object, _value) if (type (_value) == "table") then local _value1, _value2 = _unpack (_value) _object._texture:SetTexture (_value1) @@ -284,7 +284,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] return end --> background texture - local smember_backgroundtexture = function (_object, _value) + local smember_backgroundtexture = function(_object, _value) if (_value:find ("\\")) then _object.background:SetTexture (_value) else @@ -298,28 +298,28 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] return end --> font face - local smember_textfont = function (_object, _value) + local smember_textfont = function(_object, _value) DF:SetFontFace (_object.textleft, _value) return DF:SetFontFace (_object.textright, _value) end --> font size - local smember_textsize = function (_object, _value) + local smember_textsize = function(_object, _value) DF:SetFontSize (_object.textleft, _value) return DF:SetFontSize (_object.textright, _value) end --> font color - local smember_textcolor = function (_object, _value) + local smember_textcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) _object.textleft:SetTextColor (_value1, _value2, _value3, _value4) return _object.textright:SetTextColor (_value1, _value2, _value3, _value4) end --> outline (shadow) - local smember_outline = function (_object, _value) + local smember_outline = function(_object, _value) DF:SetFontOutline (_object.textleft, _value) return DF:SetFontOutline (_object.textright, _value) end --> alpha - local smember_alpha= function (_object, _value) + local smember_alpha= function(_object, _value) return _object:SetAlpha (_value) end @@ -346,7 +346,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] BarMetaFunctions.SetMembers["outline"] = smember_outline --alias BarMetaFunctions.SetMembers["alpha"] = smember_alpha - BarMetaFunctions.__newindex = function (_table, _key, _value) + BarMetaFunctions.__newindex = function(_table, _key, _value) local func = BarMetaFunctions.SetMembers [_key] if (func) then @@ -488,7 +488,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] ------------------------------------------------------------------------------------------------------------ --> scripts - local OnEnter = function (frame) + local OnEnter = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule) if (kill) then @@ -505,7 +505,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end - local OnLeave = function (frame) + local OnLeave = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule) if (kill) then @@ -519,7 +519,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - local OnHide = function (frame) + local OnHide = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule) if (kill) then @@ -527,7 +527,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - local OnShow = function (frame) + local OnShow = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule) if (kill) then @@ -535,7 +535,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - local OnMouseDown = function (frame, button) + local OnMouseDown = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule) if (kill) then @@ -550,7 +550,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - local OnMouseUp = function (frame, button) + local OnMouseUp = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule) if (kill) then @@ -602,7 +602,7 @@ local BarMetaFunctions = _G[DF.GlobalWidgetControlNames ["normal_bar"]] end end - local OnUpdate = function (self, elapsed) + local OnUpdate = function(self, elapsed) --> percent of elapsed local pct = abs (self.end_timer - GetTime() - self.tempo) / self.tempo @@ -691,7 +691,7 @@ function DetailsFrameworkNormalBar_OnCreate (self) return true end -local build_statusbar = function (self) +local build_statusbar = function(self) self:SetSize (300, 14) @@ -808,7 +808,7 @@ function DF:NewBar (parent, container, name, member, w, h, value, texture_name) local idx = getmetatable (BarObject.statusbar).__index for funcName, funcAddress in pairs (idx) do if (not BarMetaFunctions [funcName]) then - BarMetaFunctions [funcName] = function (object, ...) + BarMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G['"..object.statusbar:GetName().."']:"..funcName.."(...)") return x (...) end diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index e002d941..53292ffb 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -82,7 +82,7 @@ local default_framelayout_options = { --> mixin for frame layout DF.LayoutFrame = { - AnchorTo = function (self, anchor, point, x, y) + AnchorTo = function(self, anchor, point, x, y) if (point == "top") then self:ClearAllPoints() self:SetPoint ("bottom", anchor, "top", x or 0, y or 0) @@ -101,7 +101,7 @@ DF.LayoutFrame = { end end, - ArrangeFrames = function (self, frameList, options) + ArrangeFrames = function(self, frameList, options) if (not frameList) then frameList = {self:GetChildren()} @@ -206,7 +206,7 @@ DF.LayoutFrame = { ------------------------------------------------------------------------------------------------------------ --> metatables - PanelMetaFunctions.__call = function (_table, value) + PanelMetaFunctions.__call = function(_table, value) --> nothing to do return true end @@ -215,31 +215,31 @@ DF.LayoutFrame = { --> members --> tooltip - local gmember_tooltip = function (_object) + local gmember_tooltip = function(_object) return _object:GetTooltip() end --> shown - local gmember_shown = function (_object) + local gmember_shown = function(_object) return _object:IsShown() end --> backdrop color - local gmember_color = function (_object) + local gmember_color = function(_object) return _object.frame:GetBackdropColor() end --> backdrop table - local gmember_backdrop = function (_object) + local gmember_backdrop = function(_object) return _object.frame:GetBackdrop() end --> frame width - local gmember_width = function (_object) + local gmember_width = function(_object) return _object.frame:GetWidth() end --> frame height - local gmember_height = function (_object) + local gmember_height = function(_object) return _object.frame:GetHeight() end --> locked - local gmember_locked = function (_object) + local gmember_locked = function(_object) return _rawget (_object, "is_locked") end @@ -252,7 +252,7 @@ DF.LayoutFrame = { PanelMetaFunctions.GetMembers ["height"] = gmember_height PanelMetaFunctions.GetMembers ["locked"] = gmember_locked - PanelMetaFunctions.__index = function (_table, _member_requested) + PanelMetaFunctions.__index = function(_table, _member_requested) local func = PanelMetaFunctions.GetMembers [_member_requested] if (func) then @@ -269,11 +269,11 @@ DF.LayoutFrame = { --> tooltip - local smember_tooltip = function (_object, _value) + local smember_tooltip = function(_object, _value) return _object:SetTooltip (_value) end --> show - local smember_show = function (_object, _value) + local smember_show = function(_object, _value) if (_value) then return _object:Show() else @@ -281,7 +281,7 @@ DF.LayoutFrame = { end end --> hide - local smember_hide = function (_object, _value) + local smember_hide = function(_object, _value) if (not _value) then return _object:Show() else @@ -289,21 +289,21 @@ DF.LayoutFrame = { end end --> backdrop color - local smember_color = function (_object, _value) + local smember_color = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) return _object:SetBackdropColor (_value1, _value2, _value3, _value4) end --> frame width - local smember_width = function (_object, _value) + local smember_width = function(_object, _value) return _object.frame:SetWidth (_value) end --> frame height - local smember_height = function (_object, _value) + local smember_height = function(_object, _value) return _object.frame:SetHeight (_value) end --> locked - local smember_locked = function (_object, _value) + local smember_locked = function(_object, _value) if (_value) then _object.frame:SetMovable (false) return _rawset (_object, "is_locked", true) @@ -315,12 +315,12 @@ DF.LayoutFrame = { end --> backdrop - local smember_backdrop = function (_object, _value) + local smember_backdrop = function(_object, _value) return _object.frame:SetBackdrop (_value) end --> close with right button - local smember_right_close = function (_object, _value) + local smember_right_close = function(_object, _value) return _rawset (_object, "rightButtonClose", _value) end @@ -335,7 +335,7 @@ DF.LayoutFrame = { PanelMetaFunctions.SetMembers["locked"] = smember_locked PanelMetaFunctions.SetMembers["close_with_right"] = smember_right_close - PanelMetaFunctions.__newindex = function (_table, _key, _value) + PanelMetaFunctions.__newindex = function(_table, _key, _value) local func = PanelMetaFunctions.SetMembers [_key] if (func) then return func (_table, _value) @@ -495,7 +495,7 @@ DF.LayoutFrame = { ------------------------------------------------------------------------------------------------------------ --> scripts - local OnEnter = function (frame) + local OnEnter = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule) if (kill) then @@ -512,7 +512,7 @@ DF.LayoutFrame = { end end - local OnLeave = function (frame) + local OnLeave = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule) if (kill) then @@ -525,7 +525,7 @@ DF.LayoutFrame = { end - local OnHide = function (frame) + local OnHide = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule) if (kill) then @@ -533,7 +533,7 @@ DF.LayoutFrame = { end end - local OnShow = function (frame) + local OnShow = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule) if (kill) then @@ -541,7 +541,7 @@ DF.LayoutFrame = { end end - local OnMouseDown = function (frame, button) + local OnMouseDown = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule) if (kill) then @@ -564,7 +564,7 @@ DF.LayoutFrame = { end - local OnMouseUp = function (frame, button) + local OnMouseUp = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule) if (kill) then @@ -645,7 +645,7 @@ function DF:NewPanel (parent, container, name, member, w, h, backdrop, backdropc local idx = getmetatable (PanelObject.frame).__index for funcName, funcAddress in pairs (idx) do if (not PanelMetaFunctions [funcName]) then - PanelMetaFunctions [funcName] = function (object, ...) + PanelMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G['"..object.frame:GetName().."']:"..funcName.."(...)") return x (...) end @@ -696,20 +696,20 @@ end ------------fill panel -local button_on_enter = function (self) +local button_on_enter = function(self) self.MyObject._icon:SetBlendMode ("ADD") if (self.MyObject.onenter_func) then pcall (self.MyObject.onenter_func, self.MyObject) end end -local button_on_leave = function (self) +local button_on_leave = function(self) self.MyObject._icon:SetBlendMode ("BLEND") if (self.MyObject.onleave_func) then pcall (self.MyObject.onleave_func, self.MyObject) end end -local add_row = function (self, t, need_update) +local add_row = function(self, t, need_update) local index = #self.rows+1 local thisrow = DF:NewPanel (self, self, "$parentHeader_" .. self._name .. index, nil, 1, 20) @@ -739,7 +739,7 @@ local add_row = function (self, t, need_update) end end -local align_rows = function (self) +local align_rows = function(self) local rows_shown = 0 for index, row in ipairs (self.rows) do @@ -934,7 +934,7 @@ local align_rows = function (self) self.showing_amt = rows_shown end -local update_rows = function (self, updated_rows) +local update_rows = function(self, updated_rows) for i = 1, #updated_rows do local t = updated_rows [i] @@ -1022,13 +1022,13 @@ local update_rows = function (self, updated_rows) end -local create_panel_text = function (self, row) +local create_panel_text = function(self, row) row.text_total = row.text_total + 1 local text = DF:NewLabel (row, nil, self._name .. "$parentLabel" .. row.text_total, "text" .. row.text_total) tinsert (row.text_available, text) end -local create_panel_entry = function (self, row) +local create_panel_entry = function(self, row) row.entry_total = row.entry_total + 1 local editbox = DF:NewTextEntry (row, nil, "$parentEntry" .. row.entry_total, "entry", 120, 20) editbox.align = "left" @@ -1059,7 +1059,7 @@ local create_panel_entry = function (self, row) tinsert (row.entry_available, editbox) end -local create_panel_checkbox = function (self, row) +local create_panel_checkbox = function(self, row) --row.checkbox_available row.checkbox_total = row.checkbox_total + 1 @@ -1070,7 +1070,7 @@ local create_panel_checkbox = function (self, row) tinsert (row.checkbox_available, switch) end -local create_panel_button = function (self, row) +local create_panel_button = function(self, row) row.button_total = row.button_total + 1 local button = DF:NewButton (row, nil, "$parentButton" .. row.button_total, "button" .. row.button_total, 120, 20) @@ -1087,12 +1087,12 @@ local create_panel_button = function (self, row) tinsert (row.button_available, button) end -local icon_onclick = function (texture, iconbutton) +local icon_onclick = function(texture, iconbutton) iconbutton._icon.texture = texture iconbutton.func (iconbutton.index, texture) end -local create_panel_icon = function (self, row) +local create_panel_icon = function(self, row) row.icon_total = row.icon_total + 1 local iconbutton = DF:NewButton (row, nil, "$parentIconButton" .. row.icon_total, "iconbutton", 22, 20) @@ -1112,23 +1112,23 @@ local create_panel_icon = function (self, row) tinsert (row.icon_available, iconbutton) end -local create_panel_texture = function (self, row) +local create_panel_texture = function(self, row) row.texture_total = row.texture_total + 1 local texture = DF:NewImage (row, nil, 20, 20, "artwork", nil, "_icon" .. row.texture_total, "$parentIcon" .. row.texture_total) tinsert (row.texture_available, texture) end -local set_fill_function = function (self, func) +local set_fill_function = function(self, func) self._fillfunc = func end -local set_total_function = function (self, func) +local set_total_function = function(self, func) self._totalfunc = func end -local drop_header_function = function (self) +local drop_header_function = function(self) wipe (self.rows) end -local fillpanel_update_size = function (self, elapsed) +local fillpanel_update_size = function(self, elapsed) local panel = self.MyObject panel._width = panel:GetWidth() @@ -1145,13 +1145,12 @@ end -- ~fillpanel --alias -function DF:CreateFillPanel (parent, rows, w, h, total_lines, fill_row, autowidth, options, member, name) - return DF:NewFillPanel (parent, rows, name, member, w, h, total_lines, fill_row, autowidth, options) +function DF:CreateFillPanel(parent, rows, w, h, total_lines, fill_row, autowidth, options, member, name) + return DF:NewFillPanel(parent, rows, name, member, w, h, total_lines, fill_row, autowidth, options) end -function DF:NewFillPanel (parent, rows, name, member, w, h, total_lines, fill_row, autowidth, options) - - local panel = DF:NewPanel (parent, parent, name, member, w, h) +function DF:NewFillPanel(parent, rows, name, member, w, h, total_lines, fill_row, autowidth, options) + local panel = DF:NewPanel(parent, parent, name, member, w, h) panel.backdrop = nil options = options or {rowheight = 20} @@ -1179,21 +1178,19 @@ function DF:NewFillPanel (parent, rows, name, member, w, h, total_lines, fill_ro panel._totalfunc = total_lines panel._autowidth = autowidth - panel:SetScript ("OnSizeChanged", function() - panel:SetScript ("OnUpdate", fillpanel_update_size) + panel:SetScript("OnSizeChanged", function() + panel:SetScript("OnUpdate", fillpanel_update_size) end) - for index, t in ipairs (rows) do - panel.AddRow (panel, t) + for index, t in ipairs(rows) do + panel.AddRow(panel, t) end - local refresh_fillbox = function (self) - - local offset = FauxScrollFrame_GetOffset (self) - local filled_lines = panel._totalfunc (panel) + local refresh_fillbox = function(self) + local offset = FauxScrollFrame_GetOffset(self) + local filled_lines = panel._totalfunc(panel) for index = 1, #self.lines do - local row = self.lines [index] if (index <= filled_lines) then @@ -1384,7 +1381,7 @@ function DF:NewFillPanel (parent, rows, name, member, w, h, total_lines, fill_ro end local scrollframe = CreateFrame ("scrollframe", name .. "Scroll", panel.widget, "FauxScrollFrameTemplate", "BackdropTemplate") - scrollframe:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, panel.Refresh) end) + scrollframe:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, panel.Refresh) end) scrollframe:SetPoint ("topleft", panel.widget, "topleft", 0, -21) scrollframe:SetPoint ("topright", panel.widget, "topright", -23, -21) scrollframe:SetPoint ("bottomleft", panel.widget, "bottomleft") @@ -1393,7 +1390,7 @@ function DF:NewFillPanel (parent, rows, name, member, w, h, total_lines, fill_ro panel.scrollframe = scrollframe scrollframe.lines = {} - DF:ReskinSlider (scrollframe) + DF:ReskinSlider(scrollframe) --create lines function panel:UpdateRowAmount() @@ -1510,14 +1507,14 @@ function DF:IconPick (callback, close_when_select, param1, param2) DF.IconPickFrame:SetBackdropColor (24/255, 24/255, 24/255, .8) DF.IconPickFrame:SetFrameLevel (5000) - DF.IconPickFrame:SetScript ("OnMouseDown", function (self) + DF.IconPickFrame:SetScript ("OnMouseDown", function(self) if (not self.isMoving) then DF.IconPickFrame:StartMoving() self.isMoving = true end end) - DF.IconPickFrame:SetScript ("OnMouseUp", function (self) + DF.IconPickFrame:SetScript ("OnMouseUp", function(self) if (self.isMoving) then DF.IconPickFrame:StopMovingOrSizing() self.isMoving = nil @@ -1675,13 +1672,13 @@ function DF:IconPick (callback, close_when_select, param1, param2) end end - local onEnter = function (self) + local onEnter = function(self) DF.IconPickFrame.preview:SetPoint ("bottom", self, "top", 0, 2) DF.IconPickFrame.preview.icon:SetTexture(self.icon:GetTexture()) DF.IconPickFrame.preview:Show() self.icon:SetBlendMode ("ADD") end - local onLeave = function (self) + local onLeave = function(self) DF.IconPickFrame.preview:Hide() self.icon:SetBlendMode ("BLEND") end @@ -1853,7 +1850,7 @@ end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -local simple_panel_mouse_down = function (self, button) +local simple_panel_mouse_down = function(self, button) if (button == "RightButton") then if (self.IsMoving) then self.IsMoving = false @@ -1872,7 +1869,7 @@ local simple_panel_mouse_down = function (self, button) self:StartMoving() end end -local simple_panel_mouse_up = function (self, button) +local simple_panel_mouse_up = function(self, button) if (self.IsMoving) then self.IsMoving = false self:StopMovingOrSizing() @@ -1881,11 +1878,11 @@ local simple_panel_mouse_up = function (self, button) end end end -local simple_panel_settitle = function (self, title) +local simple_panel_settitle = function(self, title) self.Title:SetText (title) end -local simple_panel_close_click = function (self) +local simple_panel_close_click = function(self) self:GetParent():GetParent():Hide() end @@ -2065,10 +2062,10 @@ end local Panel1PxBackdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 64, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, insets = {left = 2, right = 2, top = 3, bottom = 3}} -local Panel1PxOnClickClose = function (self) +local Panel1PxOnClickClose = function(self) self:GetParent():Hide() end -local Panel1PxOnToggleLock = function (self) +local Panel1PxOnToggleLock = function(self) if (self.IsLocked) then self.IsLocked = false self:SetMovable (true) @@ -2097,15 +2094,15 @@ local Panel1PxOnToggleLock = function (self) end end end -local Panel1PxOnClickLock = function (self) +local Panel1PxOnClickLock = function(self) local f = self:GetParent() Panel1PxOnToggleLock (f) end -local Panel1PxSetTitle = function (self, text) +local Panel1PxSetTitle = function(self, text) self.Title:SetText (text or "") end -local Panel1PxSetLocked= function (self, lock_state) +local Panel1PxSetLocked= function(self, lock_state) if (type (lock_state) ~= "boolean") then return end @@ -2120,7 +2117,7 @@ local Panel1PxSetLocked= function (self, lock_state) end end -local Panel1PxReadConfig = function (self) +local Panel1PxReadConfig = function(self) local db = self.db if (db) then db.IsLocked = db.IsLocked or false @@ -2164,11 +2161,11 @@ function DF:RestoreFramePosition (frame) end end -local Panel1PxSavePosition= function (self) +local Panel1PxSavePosition= function(self) DF:SavePositionOnScreen (self) end -local Panel1PxHasPosition = function (self) +local Panel1PxHasPosition = function(self) local db = self.db if (db) then if (db.position and db.position.x and (db.position.x ~= 0 or db.position.y ~= 0)) then @@ -2376,7 +2373,7 @@ function DF:ShowTextPromptPanel (message, callback) f:RegisterForDrag ("LeftButton") f:SetScript ("OnDragStart", function() f:StartMoving() end) f:SetScript ("OnDragStop", function() f:StopMovingOrSizing() end) - f:SetScript ("OnMouseDown", function (self, button) if (button == "RightButton") then f.EntryBox:ClearFocus() f:Hide() end end) + f:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then f.EntryBox:ClearFocus() f:Hide() end end) tinsert (UISpecialFrames, "DetailsFrameworkPrompt") DF:CreateTitleBar (f, "Prompt!") @@ -2451,12 +2448,12 @@ function DF:CreateOptionsButton (parent, callback, name) b:SetAlpha (0.7) b:SetScript ("OnClick", callback) - b:SetScript ("OnEnter", function (self) + b:SetScript ("OnEnter", function(self) GameCooltip2:Reset() GameCooltip2:AddLine ("Options") GameCooltip2:ShowCooltip (self, "tooltip") end) - b:SetScript ("OnLeave", function (self) + b:SetScript ("OnLeave", function(self) GameCooltip2:Hide() end) @@ -2471,12 +2468,12 @@ function DF:CreateFeedbackButton (parent, callback, name) local b = CreateFrame ("button", name, parent, "BackdropTemplate") b:SetSize (12, 13) b:SetScript ("OnClick", callback) - b:SetScript ("OnEnter", function (self) + b:SetScript ("OnEnter", function(self) GameCooltip2:Reset() GameCooltip2:AddLine ("Send Feedback") GameCooltip2:ShowCooltip (self, "tooltip") end) - b:SetScript ("OnLeave", function (self) + b:SetScript ("OnLeave", function(self) GameCooltip2:Hide() end) @@ -2488,14 +2485,14 @@ end local backdrop_fb_line = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, tile = true, tileSize = 64, insets = {left = 2, right = 2, top = 2, bottom = 2}} -local on_enter_feedback = function (self) +local on_enter_feedback = function(self) self:SetBackdropColor (1, 1, 0, 0.5) end -local on_leave_feedback = function (self) +local on_leave_feedback = function(self) self:SetBackdropColor (0, 0, 0, 0.3) end -local on_click_feedback = function (self) +local on_click_feedback = function(self) local feedback_link_textbox = DF.feedback_link_textbox @@ -2531,7 +2528,7 @@ local on_click_feedback = function (self) feedback_link_textbox:SetFrameLevel (self:GetFrameLevel()+2) end -local feedback_get_fb_line = function (self) +local feedback_get_fb_line = function(self) local line = self.feedback_lines [self.next_feedback] if (not line) then @@ -2565,7 +2562,7 @@ local feedback_get_fb_line = function (self) return line end -local on_click_feedback = function (self) +local on_click_feedback = function(self) local feedback_link_textbox = DF.feedback_link_textbox @@ -2601,7 +2598,7 @@ local on_click_feedback = function (self) feedback_link_textbox:SetFrameLevel (self:GetFrameLevel()+2) end -local on_enter_addon = function (self) +local on_enter_addon = function(self) if (self.tooltip) then GameCooltip2:Preset (2) GameCooltip2:AddLine ("|cFFFFFF00" .. self.name .. "|r") @@ -2611,13 +2608,13 @@ local on_enter_addon = function (self) end self.icon:SetBlendMode ("ADD") end -local on_leave_addon = function (self) +local on_leave_addon = function(self) if (self.tooltip) then GameCooltip2:Hide() end self.icon:SetBlendMode ("BLEND") end -local on_click_addon = function (self) +local on_click_addon = function(self) local addon_link_textbox = DF.addon_link_textbox if (not addon_link_textbox) then @@ -2652,7 +2649,7 @@ local on_click_addon = function (self) addon_link_textbox:SetFrameLevel (self:GetFrameLevel()+2) end -local feedback_get_addons_line = function (self) +local feedback_get_addons_line = function(self) local line = self.addons_lines [self.next_addons] if (not line) then @@ -2687,7 +2684,7 @@ local feedback_get_addons_line = function (self) end local default_coords = {0, 1, 0, 1} -local feedback_add_fb = function (self, table) +local feedback_add_fb = function(self, table) local line = self:GetFeedbackLine() line.icon:SetTexture (table.icon) line.icon:SetTexCoord (unpack (table.coords or default_coords)) @@ -2696,7 +2693,7 @@ local feedback_add_fb = function (self, table) line:Show() end -local feedback_add_addon = function (self, table) +local feedback_add_addon = function(self, table) local block = self:GetAddonsLine() block.icon:SetTexture (table.icon) block.icon:SetTexCoord (unpack (table.coords or default_coords)) @@ -2706,7 +2703,7 @@ local feedback_add_addon = function (self, table) block:Show() end -local feedback_hide_all = function (self) +local feedback_hide_all = function(self) self.next_feedback = 1 self.next_addons = 1 @@ -2790,7 +2787,7 @@ end local chart_panel_backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 32, insets = {left = 5, right = 5, top = 5, bottom = 5}} -local chart_panel_align_timelabels = function (self, elapsed_time) +local chart_panel_align_timelabels = function(self, elapsed_time) self.TimeScale = elapsed_time @@ -2835,7 +2832,7 @@ local chart_panel_align_timelabels = function (self, elapsed_time) end -local chart_panel_set_scale = function (self, amt, func, text) +local chart_panel_set_scale = function(self, amt, func, text) if (type (amt) ~= "number") then return end @@ -2856,11 +2853,11 @@ local chart_panel_set_scale = function (self, amt, func, text) end end -local chart_panel_can_move = function (self, can) +local chart_panel_can_move = function(self, can) self.can_move = can end -local chart_panel_overlay_reset = function (self) +local chart_panel_overlay_reset = function(self) self.OverlaysAmount = 1 for index, pack in ipairs (self.Overlays) do for index2, texture in ipairs (pack) do @@ -2869,7 +2866,7 @@ local chart_panel_overlay_reset = function (self) end end -local chart_panel_reset = function (self) +local chart_panel_reset = function(self) self.Graphic:ResetData() self.Graphic.max_value = 0 @@ -2891,7 +2888,7 @@ local chart_panel_reset = function (self) chart_panel_overlay_reset (self) end -local chart_panel_enable_line = function (f, thisbox) +local chart_panel_enable_line = function(f, thisbox) local index = thisbox.index local type = thisbox.type @@ -2947,7 +2944,7 @@ local chart_panel_enable_line = function (f, thisbox) end end -local create_box = function (self, next_box) +local create_box = function(self, next_box) local thisbox = {} self.BoxLabels [next_box] = thisbox @@ -2995,7 +2992,7 @@ local create_box = function (self, next_box) end -local realign_labels = function (self) +local realign_labels = function(self) if (not self.ShowHeader) then for _, box in ipairs (self.BoxLabels) do @@ -3044,7 +3041,7 @@ local realign_labels = function (self) end -local chart_panel_add_label = function (self, color, name, type, number) +local chart_panel_add_label = function(self, color, name, type, number) local next_box = self.BoxLabelsAmount local thisbox = self.BoxLabels [next_box] @@ -3075,7 +3072,7 @@ local chart_panel_add_label = function (self, color, name, type, number) end local line_default_color = {1, 1, 1} -local draw_overlay = function (self, this_overlay, overlayData, color) +local draw_overlay = function(self, this_overlay, overlayData, color) local pixel = self.Graphic:GetWidth() / self.TimeScale local index = 1 @@ -3108,7 +3105,7 @@ local draw_overlay = function (self, this_overlay, overlayData, color) end -local chart_panel_add_overlay = function (self, overlayData, color, name, icon) +local chart_panel_add_overlay = function(self, overlayData, color, name, icon) if (not self.TimeScale) then error ("Use SetTime (time) before adding an overlay.") @@ -3144,7 +3141,7 @@ function calc_cubeweight (i, j, d) return w end -local calc_lowess_smoothing = function (self, data, bandwidth) +local calc_lowess_smoothing = function(self, data, bandwidth) local length = #data local newData = {} @@ -3191,7 +3188,7 @@ local calc_lowess_smoothing = function (self, data, bandwidth) return newData end -local calc_stddev = function (self, data) +local calc_stddev = function(self, data) local total = 0 for i = 1, #data do total = total + data[i] @@ -3217,7 +3214,7 @@ local reset_SMA = function() end local calc_SMA -calc_SMA = function (a, b, ...) +calc_SMA = function(a, b, ...) if (b) then return calc_SMA (a + b, ...) else @@ -3225,7 +3222,7 @@ calc_SMA = function (a, b, ...) end end -local do_SMA = function (value, max_value) +local do_SMA = function(value, max_value) if (#SMA_table == 10) then tremove (SMA_table, 1) @@ -3244,7 +3241,7 @@ local do_SMA = function (value, max_value) end -local chart_panel_onresize = function (self) +local chart_panel_onresize = function(self) local width, height = self:GetSize() local spacement = width - 78 - 60 spacement = spacement / 16 @@ -3265,7 +3262,7 @@ local chart_panel_onresize = function (self) self.Graphic:SetPoint ("topleft", self, "topleft", 108, -35) end -local chart_panel_add_data = function (self, graphicData, color, name, elapsed_time, lineTexture, smoothLevel, firstIndex) +local chart_panel_add_data = function(self, graphicData, color, name, elapsed_time, lineTexture, smoothLevel, firstIndex) local f = self self = self.Graphic @@ -3405,25 +3402,25 @@ end -local chart_panel_vlines_on = function (self) +local chart_panel_vlines_on = function(self) for i = 1, 17 do local label = self.TimeLabels [i] label.line:Show() end end -local chart_panel_vlines_off = function (self) +local chart_panel_vlines_off = function(self) for i = 1, 17 do local label = self.TimeLabels [i] label.line:Hide() end end -local chart_panel_set_title = function (self, title) +local chart_panel_set_title = function(self, title) self.chart_title.text = title end -local chart_panel_mousedown = function (self, button) +local chart_panel_mousedown = function(self, button) if (button == "LeftButton" and self.can_move) then if (not self.isMoving) then self:StartMoving() @@ -3435,18 +3432,18 @@ local chart_panel_mousedown = function (self, button) end end end -local chart_panel_mouseup = function (self, button) +local chart_panel_mouseup = function(self, button) if (button == "LeftButton" and self.isMoving) then self:StopMovingOrSizing() self.isMoving = nil end end -local chart_panel_hide_close_button = function (self) +local chart_panel_hide_close_button = function(self) self.CloseButton:Hide() end -local chart_panel_right_click_close = function (self, value) +local chart_panel_right_click_close = function(self, value) if (type (value) == "boolean") then if (value) then self.no_right_click_close = nil @@ -3588,7 +3585,7 @@ end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -- ~gframe -local gframe_on_enter_line = function (self) +local gframe_on_enter_line = function(self) self:SetBackdropColor (0, 0, 0, 0) local parent = self:GetParent() @@ -3601,7 +3598,7 @@ local gframe_on_enter_line = function (self) end end -local gframe_on_leave_line = function (self) +local gframe_on_leave_line = function(self) self:SetBackdropColor (0, 0, 0, .6) local parent = self:GetParent() @@ -3614,7 +3611,7 @@ local gframe_on_leave_line = function (self) end end -local gframe_create_line = function (self) +local gframe_create_line = function(self) local index = #self._lines+1 local f = CreateFrame ("frame", nil, self, "BackdropTemplate") @@ -3672,7 +3669,7 @@ local gframe_create_line = function (self) return f end -local gframe_getline = function (self, index) +local gframe_getline = function(self, index) local line = self._lines [index] if (not line) then line = gframe_create_line (self) @@ -3680,7 +3677,7 @@ local gframe_getline = function (self, index) return line end -local gframe_reset = function (self) +local gframe_reset = function(self) for i, line in ipairs (self._lines) do line:Hide() end @@ -3693,7 +3690,7 @@ local gframe_reset = function (self) end end -local gframe_update = function (self, lines) +local gframe_update = function(self, lines) local g = LibStub:GetLibrary ("LibGraph-2.0") local h = self:GetHeight()/100 @@ -3816,7 +3813,7 @@ DF.TabContainerFunctions = {} local button_tab_template = DF.table.copy ({}, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE")) button_tab_template.backdropbordercolor = nil -DF.TabContainerFunctions.CreateUnderlineGlow = function (button) +DF.TabContainerFunctions.CreateUnderlineGlow = function(button) local selectedGlow = button:CreateTexture (nil, "background", nil, -4) selectedGlow:SetPoint ("topleft", button.widget, "bottomleft", -7, 0) selectedGlow:SetPoint ("topright", button.widget, "bottomright", 7, 0) @@ -3829,7 +3826,7 @@ DF.TabContainerFunctions.CreateUnderlineGlow = function (button) button.selectedUnderlineGlow = selectedGlow end -DF.TabContainerFunctions.OnMouseDown = function (self, button) +DF.TabContainerFunctions.OnMouseDown = function(self, button) --> search for UIParent local f = DF:FindHighestParent (self) local container = self:GetParent() @@ -3857,7 +3854,7 @@ DF.TabContainerFunctions.OnMouseDown = function (self, button) end end -DF.TabContainerFunctions.OnMouseUp = function (self, button) +DF.TabContainerFunctions.OnMouseUp = function(self, button) local f = DF:FindHighestParent (self) if (f.IsMoving) then f:StopMovingOrSizing() @@ -3865,7 +3862,7 @@ DF.TabContainerFunctions.OnMouseUp = function (self, button) end end -DF.TabContainerFunctions.SelectIndex = function (self, fixedParam, menuIndex) +DF.TabContainerFunctions.SelectIndex = function(self, fixedParam, menuIndex) local mainFrame = self.AllFrames and self or self.mainFrame or self:GetParent() for i = 1, #mainFrame.AllFrames do @@ -3895,11 +3892,11 @@ DF.TabContainerFunctions.SelectIndex = function (self, fixedParam, menuIndex) end end -DF.TabContainerFunctions.SetIndex = function (self, index) +DF.TabContainerFunctions.SetIndex = function(self, index) self.CurrentIndex = index end -local tab_container_on_show = function (self) +local tab_container_on_show = function(self) local index = self.CurrentIndex self.SelectIndex (self.AllButtons[index], nil, index) end @@ -4038,23 +4035,23 @@ end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -- ~listbox -local simple_list_box_ResetWidgets = function (self) +local simple_list_box_ResetWidgets = function(self) for _, widget in ipairs (self.widgets) do widget:Hide() end self.nextWidget = 1 end -local simple_list_box_onenter = function (self, capsule) +local simple_list_box_onenter = function(self, capsule) self:GetParent().options.onenter (self, capsule, capsule.value) end -local simple_list_box_onleave = function (self, capsule) +local simple_list_box_onleave = function(self, capsule) self:GetParent().options.onleave (self, capsule, capsule.value) GameTooltip:Hide() end -local simple_list_box_GetOrCreateWidget = function (self) +local simple_list_box_GetOrCreateWidget = function(self) local index = self.nextWidget local widget = self.widgets [index] if (not widget) then @@ -4080,7 +4077,7 @@ local simple_list_box_GetOrCreateWidget = function (self) return widget end -local simple_list_box_RefreshWidgets = function (self) +local simple_list_box_RefreshWidgets = function(self) self:ResetWidgets() local amt = 0 for value, _ in pairs (self.list_table) do @@ -4159,12 +4156,12 @@ local default_options = { backdrop_color = {1, 1, 1, .5}, panel_border_color = {0, 0, 0, 0.5}, - onenter = function (self, capsule) + onenter = function(self, capsule) if (capsule) then capsule.textcolor = "white" end end, - onleave = function (self, capsule) + onleave = function(self, capsule) if (capsule) then capsule.textcolor = self:GetParent().options.textcolor end @@ -4172,7 +4169,7 @@ local default_options = { end, } -local simple_list_box_SetData = function (self, t) +local simple_list_box_SetData = function(self, t) self.list_table = t end @@ -4185,7 +4182,7 @@ function DF:CreateSimpleListBox (parent, name, title, empty_text, list_table, on f.SetData = simple_list_box_SetData f.nextWidget = 1 f.list_table = list_table - f.func = function (self, button, value) + f.func = function(self, button, value) --onclick (value) DF:QuickDispatch (onclick, value) f:Refresh() @@ -4199,7 +4196,7 @@ function DF:CreateSimpleListBox (parent, name, title, empty_text, list_table, on if (f.options.x_button_func) then local original_X_function = f.options.x_button_func - f.options.x_button_func = function (self, button, value) + f.options.x_button_func = function(self, button, value) DF:QuickDispatch (original_X_function, value) f:Refresh() end @@ -4343,7 +4340,7 @@ local keysToMouse = { ["type16"] = "Button16", } -local keybind_set_data = function (self, new_data_table) +local keybind_set_data = function(self, new_data_table) self.Data = new_data_table self.keybindScroll:UpdateScroll() end @@ -4397,7 +4394,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ new_keybind_frame.CurrentKeybindEditingSet = new_keybind_frame.Data [new_keybind_frame.EditingSpec] local allSpecButtons = {} - local switch_spec = function (self, button, specID) + local switch_spec = function(self, button, specID) new_keybind_frame.EditingSpec = specID new_keybind_frame.CurrentKeybindEditingSet = new_keybind_frame.Data [specID] @@ -4467,7 +4464,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ enter_the_key.text:SetPoint ("center", enter_the_key, "center") enter_the_key:Hide() - local registerKeybind = function (self, key) + local registerKeybind = function(self, key) if (ignoredKeys [key]) then return end @@ -4494,7 +4491,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ DF:QuickDispatch (callback) end - local set_keybind_key = function (self, button, keybindIndex) + local set_keybind_key = function(self, button, keybindIndex) if (new_keybind_frame.IsListening) then key = mouseKeys [button] or button return registerKeybind (new_keybind_frame, key) @@ -4507,19 +4504,19 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ enter_the_key:SetPoint ("bottom", self, "top") end - local new_key_bind = function (self, button, specID) + local new_key_bind = function(self, button, specID) tinsert (new_keybind_frame.CurrentKeybindEditingSet, {key = "-none-", action = "_target", actiontext = ""}) FauxScrollFrame_SetOffset (new_keybind_frame.keybindScroll, max (#new_keybind_frame.CurrentKeybindEditingSet-SCROLL_ROLL_AMOUNT, 0)) new_keybind_frame.keybindScroll:UpdateScroll() end - local set_action_text = function (keybindIndex, _, text) + local set_action_text = function(keybindIndex, _, text) local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex] keybind.actiontext = text DF:QuickDispatch (callback) end - local set_action_on_espace_press = function (textentry, capsule) + local set_action_on_espace_press = function(textentry, capsule) capsule = capsule or textentry.MyObject local keybind = new_keybind_frame.CurrentKeybindEditingSet [capsule.CurIndex] textentry:SetText (keybind.actiontext) @@ -4535,7 +4532,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ ["_macro"] = false, } - local change_key_action = function (self, keybindIndex, value) + local change_key_action = function(self, keybindIndex, value) local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex] keybind.action = value new_keybind_frame.keybindScroll:UpdateScroll() @@ -4553,7 +4550,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ local dispelString = "\n" for specID, spellid in pairs (dispel) do local specid, specName = DetailsFramework.GetSpecializationInfoByID (specID) - local spellName = GetSpellInfo (spellid) + local spellName = GetSpellInfo(spellid) dispelString = dispelString .. "|cFFE5E5E5" .. (specName or "") .. "|r: |cFFFFFFFF" .. spellName .. "\n" end dispel = dispelString @@ -4571,7 +4568,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ } end - local copy_keybind = function (self, button, keybindIndex) + local copy_keybind = function(self, button, keybindIndex) local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex] for specID, t in pairs (new_keybind_frame.Data) do if (specID ~= new_keybind_frame.EditingSpec) then @@ -4584,7 +4581,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ DF:QuickDispatch (callback) end - local delete_keybind = function (self, button, keybindIndex) + local delete_keybind = function(self, button, keybindIndex) tremove (new_keybind_frame.CurrentKeybindEditingSet, keybindIndex) new_keybind_frame.keybindScroll:UpdateScroll() DF:QuickDispatch (callback) @@ -4596,7 +4593,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ createNewKeybind:SetPoint ("topleft", newTitle, "bottomleft", 0, -10) --createNewKeybind:SetIcon ([[Interface\Buttons\UI-GuildButton-PublicNote-Up]]) - local update_keybind_list = function (self) + local update_keybind_list = function(self) local keybinds = new_keybind_frame.CurrentKeybindEditingSet FauxScrollFrame_Update (self, #keybinds, SCROLL_ROLL_AMOUNT, 21) @@ -4650,17 +4647,17 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ - keybindScroll:SetScript ("OnVerticalScroll", function (self, offset) + keybindScroll:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 21, update_keybind_list) end) keybindScroll.UpdateScroll = update_keybind_list local backdropColor = {.3, .3, .3, .3} local backdropColorOnEnter = {.6, .6, .6, .6} - local on_enter = function (self) + local on_enter = function(self) self:SetBackdropColor (unpack (backdropColorOnEnter)) end - local on_leave = function (self) + local on_leave = function(self) self:SetBackdropColor (unpack (backdropColor)) end @@ -4706,7 +4703,7 @@ function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_ local index = offset + i local spellType, spellId = GetSpellBookItemInfo (index, "player") if (spellType == "SPELL") then - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) tinsert (playerSpells, spellName) end end @@ -4892,7 +4889,7 @@ end DF.TitleFunctions = { - SetTitle = function (self, titleText, titleColor, font, size) + SetTitle = function(self, titleText, titleColor, font, size) self.TitleLabel:SetText (titleText or self.TitleLabel:GetText()) if (titleColor) then @@ -4962,7 +4959,7 @@ end DF.IconRowFunctions = { - GetIcon = function (self) + GetIcon = function(self) local iconFrame = self.IconPool [self.NextIcon] if (not iconFrame) then @@ -5039,7 +5036,7 @@ DF.IconRowFunctions = { end, --adds only if not existing already in the cache - AddSpecificIcon = function (self, identifierKey, spellId, borderColor, startTime, duration, forceTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff) + AddSpecificIcon = function(self, identifierKey, spellId, borderColor, startTime, duration, forceTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff) if not identifierKey or identifierKey == "" then return end @@ -5051,9 +5048,9 @@ DF.IconRowFunctions = { end end, - SetIcon = function (self, spellId, borderColor, startTime, duration, forceTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff, modRate) + SetIcon = function(self, spellId, borderColor, startTime, duration, forceTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff, modRate) - local actualSpellName, _, spellIcon = GetSpellInfo (spellId) + local actualSpellName, _, spellIcon = GetSpellInfo(spellId) if forceTexture then spellIcon = forceTexture @@ -5172,7 +5169,7 @@ DF.IconRowFunctions = { end end, - OnIconTick = function (self, deltaTime) + OnIconTick = function(self, deltaTime) local now = GetTime() if (self.lastUpdateCooldown + 0.05) <= now then self.timeRemaining = self.expirationTime - now @@ -5189,7 +5186,7 @@ DF.IconRowFunctions = { end end, - FormatCooldownTime = function (formattedTime) + FormatCooldownTime = function(formattedTime) if (formattedTime >= 3600) then formattedTime = floor (formattedTime / 3600) .. "h" @@ -5202,7 +5199,7 @@ DF.IconRowFunctions = { return formattedTime end, - FormatCooldownTimeDecimal = function (formattedTime) + FormatCooldownTimeDecimal = function(formattedTime) if formattedTime < 10 then return ("%.1f"):format(formattedTime) elseif formattedTime < 60 then @@ -5216,7 +5213,7 @@ DF.IconRowFunctions = { end end, - RemoveSpecificIcon = function (self, identifierKey) + RemoveSpecificIcon = function(self, identifierKey) if not identifierKey or identifierKey == "" then return end @@ -5244,7 +5241,7 @@ DF.IconRowFunctions = { end, - ClearIcons = function (self, resetBuffs, resetDebuffs) + ClearIcons = function(self, resetBuffs, resetDebuffs) resetBuffs = resetBuffs ~= false resetDebuffs = resetDebuffs ~= false table.wipe (self.AuraCache) @@ -5273,7 +5270,7 @@ DF.IconRowFunctions = { end, - AlignAuraIcons = function (self) + AlignAuraIcons = function(self) local iconPool = self.IconPool local iconAmount = #iconPool @@ -5317,7 +5314,7 @@ DF.IconRowFunctions = { end, - GetIconGrowDirection = function (self) + GetIconGrowDirection = function(self) local side = self.options.anchor.side if (side == 1) then @@ -5349,7 +5346,7 @@ DF.IconRowFunctions = { end end, - OnOptionChanged = function (self, optionName) + OnOptionChanged = function(self, optionName) self:SetBackdropColor (unpack (self.options.backdrop_color)) self:SetBackdropBorderColor (unpack (self.options.backdrop_border_color)) end, @@ -5845,7 +5842,7 @@ local default_radiogroup_options = { } DF.RadioGroupCoreFunctions = { - Disable = function (self) + Disable = function(self) local frameList = self:GetAllCheckboxes() for _, checkbox in ipairs(frameList) do checkbox = checkbox.GetCapsule and checkbox:GetCapsule() or checkbox @@ -5853,7 +5850,7 @@ DF.RadioGroupCoreFunctions = { end end, - Enable = function (self) + Enable = function(self) local frameList = self:GetAllCheckboxes() for _, checkbox in ipairs(frameList) do checkbox = checkbox.GetCapsule and checkbox:GetCapsule() or checkbox @@ -6075,7 +6072,7 @@ function DF:CreateLoadFilterParser (callback) f:RegisterEvent ("ENCOUNTER_START") f:RegisterEvent ("PLAYER_REGEN_ENABLED") - f:SetScript ("OnEvent", function (self, event, ...) + f:SetScript ("OnEvent", function(self, event, ...) if (event == "ENCOUNTER_START") then local encounterID = ... f.EncounterIDCached = encounterID @@ -6338,14 +6335,14 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) --when the user click on an option or when the panel is opened --check if there's an option enabled and fadein all options, fadeout otherwise - f.OnRadioStateChanged = function (radioGroup, subConfigTable) + f.OnRadioStateChanged = function(radioGroup, subConfigTable) subConfigTable.Enabled = nil subConfigTable.Enabled = next (subConfigTable) and true or nil radioGroup:SetFadeState (subConfigTable.Enabled) end --create the radio group for character class - f.OnRadioCheckboxClick = function (self, key, value) + f.OnRadioCheckboxClick = function(self, key, value) --hierarchy: DBKey ["class"] key ["HUNTER"] value TRUE local DBKey = self:GetParent().DBKey f.OptionsTable [DBKey] [key and key .. ""] = value and true or nil @@ -6434,7 +6431,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) otherTalents.Texture = DF:CreateImage (otherTalents, [[Interface\BUTTONS\AdventureGuideMicrobuttonAlert]], 24, 24) otherTalents.Texture:SetAllPoints() - local removeTalent = function (_, _, talentID) + local removeTalent = function(_, _, talentID) f.OptionsTable.talent [talentID] = nil GameCooltip2:Hide() f.OnRadioStateChanged (talentGroup, f.OptionsTable [talentGroup.DBKey]) @@ -6467,8 +6464,8 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) otherTalents.CoolTip = { Type = "menu", BuildFunc = buildTalentMenu, - OnEnterFunc = function (self) end, - OnLeaveFunc = function (self) end, + OnEnterFunc = function(self) end, + OnLeaveFunc = function(self) end, FixedValue = "none", ShowSpeed = 0.05, Options = function() @@ -6534,7 +6531,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) otherTalents.Texture = DF:CreateImage (otherTalents, [[Interface\BUTTONS\AdventureGuideMicrobuttonAlert]], 24, 24) otherTalents.Texture:SetAllPoints() - local removeTalent = function (_, _, talentID) + local removeTalent = function(_, _, talentID) f.OptionsTable.pvptalent [talentID] = nil GameCooltip2:Hide() f.OnRadioStateChanged (pvpTalentGroup, f.OptionsTable [pvpTalentGroup.DBKey]) @@ -6567,8 +6564,8 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) otherTalents.CoolTip = { Type = "menu", BuildFunc = buildTalentMenu, - OnEnterFunc = function (self) end, - OnLeaveFunc = function (self) end, + OnEnterFunc = function(self) end, + OnLeaveFunc = function(self) end, FixedValue = "none", ShowSpeed = 0.05, Options = function() @@ -6660,7 +6657,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) end --text entries functions - local textEntryRefresh = function (self) + local textEntryRefresh = function(self) local idList = f.OptionsTable [self.DBKey] self:SetText ("") for _, id in pairs(idList) do @@ -6671,7 +6668,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) self:SetText (self:GetText():gsub ("^ ", "")) end - local textEntryOnEnterPressed = function (_, self) + local textEntryOnEnterPressed = function(_, self) wipe (f.OptionsTable [self.DBKey]) local text = self:GetText() @@ -6781,7 +6778,7 @@ end --> simple data scroll DF.DataScrollFunctions = { - RefreshScroll = function (self, data, offset, totalLines) + RefreshScroll = function(self, data, offset, totalLines) local filter = self.Filter local currentData = {} if (type (filter) == "string" and filter ~= "") then @@ -6812,7 +6809,7 @@ DF.DataScrollFunctions = { end end, - CreateLine = function (self, index) + CreateLine = function(self, index) --create a new line local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate") line.Update = self.options.update_line_func @@ -6858,18 +6855,18 @@ DF.DataScrollFunctions = { return line end, - LineOnEnter = function (self) + LineOnEnter = function(self) self:SetBackdropColor (unpack (self.backdrop_color_highlight)) end, - LineOnLeave = function (self) + LineOnLeave = function(self) self:SetBackdropColor (unpack (self.backdrop_color)) end, - OnClick = function (self) + OnClick = function(self) end, - UpdateLine = function (line, lineIndex, data) + UpdateLine = function(line, lineIndex, data) local parent = line:GetParent() if (parent.options.show_title) then @@ -6928,7 +6925,7 @@ function DF:CreateDataScrollFrame (parent, name, options) --scroll frame local newScroll = DF:CreateScrollBox (parent, name, optionsTable.refresh_func, optionsTable.data, optionsTable.width, optionsTable.height, optionsTable.line_amount, optionsTable.line_height) - DF:ReskinSlider (newScroll) + DF:ReskinSlider(newScroll) DF:Mixin (newScroll, DF.OptionsFunctions) DF:Mixin (newScroll, DF.LayoutFrame) @@ -7118,11 +7115,11 @@ end --]=] DF.StatusBarFunctions = { - SetTexture = function (self, texture) + SetTexture = function(self, texture) self.barTexture:SetTexture (texture) end, - GetTexture = function (self) + GetTexture = function(self) return self.barTexture:GetTexture() end, @@ -7142,12 +7139,12 @@ DF.StatusBarFunctions = { return self.barTexture:GetTexCoord() end, - SetColor = function (self, r, g, b, a) + SetColor = function(self, r, g, b, a) r, g, b, a = DF:ParseColors (r, g, b, a) self:SetStatusBarColor (r, g, b, a) end, - GetColor = function (self) + GetColor = function(self) return self:GetStatusBarColor() end, @@ -7435,7 +7432,7 @@ DF.StatusBarFunctions = { } --> setup the castbar to be used by another unit - healthBarMetaFunctions.SetUnit = function (self, unit, displayedUnit) + healthBarMetaFunctions.SetUnit = function(self, unit, displayedUnit) if (self.unit ~= unit or self.displayedUnit ~= displayedUnit or unit == nil) then self.unit = unit @@ -7500,7 +7497,7 @@ DF.StatusBarFunctions = { end end - healthBarMetaFunctions.Initialize = function (self) + healthBarMetaFunctions.Initialize = function(self) PixelUtil.SetWidth (self, self.Settings.Width, 1) PixelUtil.SetHeight (self, self.Settings.Height, 1) @@ -7526,10 +7523,10 @@ DF.StatusBarFunctions = { end --call every tick - healthBarMetaFunctions.OnTick = function (self, deltaTime) end --if overrided, set 'CanTick' to true on the settings table + healthBarMetaFunctions.OnTick = function(self, deltaTime) end --if overrided, set 'CanTick' to true on the settings table --when an event happen for this unit, send it to the apropriate function - healthBarMetaFunctions.OnEvent = function (self, event, ...) + healthBarMetaFunctions.OnEvent = function(self, event, ...) local eventFunc = self [event] if (eventFunc) then --the function doesn't receive which event was, only 'self' and the parameters @@ -7538,7 +7535,7 @@ DF.StatusBarFunctions = { end --when the unit max health is changed - healthBarMetaFunctions.UpdateMaxHealth = function (self) + healthBarMetaFunctions.UpdateMaxHealth = function(self) local maxHealth = UnitHealthMax (self.displayedUnit) self:SetMinMaxValues (0, maxHealth) self.currentHealthMax = maxHealth @@ -7561,7 +7558,7 @@ DF.StatusBarFunctions = { end --health and absorbs prediction - healthBarMetaFunctions.UpdateHealPrediction = function (self) + healthBarMetaFunctions.UpdateHealPrediction = function(self) local currentHealth = self.currentHealth local currentHealthMax = self.currentHealthMax local healthPercent = currentHealth / currentHealthMax @@ -7631,42 +7628,42 @@ DF.StatusBarFunctions = { end --> Health Events - healthBarMetaFunctions.PLAYER_ENTERING_WORLD = function (self, ...) + healthBarMetaFunctions.PLAYER_ENTERING_WORLD = function(self, ...) self:UpdateMaxHealth() self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_HEALTH = function (self, ...) + healthBarMetaFunctions.UNIT_HEALTH = function(self, ...) self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_HEALTH_FREQUENT = function (self, ...) + healthBarMetaFunctions.UNIT_HEALTH_FREQUENT = function(self, ...) self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_MAXHEALTH = function (self, ...) + healthBarMetaFunctions.UNIT_MAXHEALTH = function(self, ...) self:UpdateMaxHealth() self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_HEAL_PREDICTION = function (self, ...) + healthBarMetaFunctions.UNIT_HEAL_PREDICTION = function(self, ...) self:UpdateMaxHealth() self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_ABSORB_AMOUNT_CHANGED = function (self, ...) + healthBarMetaFunctions.UNIT_ABSORB_AMOUNT_CHANGED = function(self, ...) self:UpdateMaxHealth() self:UpdateHealth() self:UpdateHealPrediction() end - healthBarMetaFunctions.UNIT_HEAL_ABSORB_AMOUNT_CHANGED = function (self, ...) + healthBarMetaFunctions.UNIT_HEAL_ABSORB_AMOUNT_CHANGED = function(self, ...) self:UpdateMaxHealth() self:UpdateHealth() self:UpdateHealPrediction() @@ -7773,7 +7770,7 @@ DF.PowerFrameFunctions = { }, --> setup the castbar to be used by another unit - SetUnit = function (self, unit, displayedUnit) + SetUnit = function(self, unit, displayedUnit) if (self.unit ~= unit or self.displayedUnit ~= displayedUnit or unit == nil) then self.unit = unit self.displayedUnit = displayedUnit or unit @@ -7815,7 +7812,7 @@ DF.PowerFrameFunctions = { end end, - Initialize = function (self) + Initialize = function(self) PixelUtil.SetWidth (self, self.Settings.Width) PixelUtil.SetHeight (self, self.Settings.Height) @@ -7839,10 +7836,10 @@ DF.PowerFrameFunctions = { end, --> call every tick - OnTick = function (self, deltaTime) end, --if overrided, set 'CanTick' to true on the settings table + OnTick = function(self, deltaTime) end, --if overrided, set 'CanTick' to true on the settings table --> when an event happen for this unit, send it to the apropriate function - OnEvent = function (self, event, ...) + OnEvent = function(self, event, ...) local eventFunc = self [event] if (eventFunc) then --the function doesn't receive which event was, only 'self' and the parameters @@ -7850,7 +7847,7 @@ DF.PowerFrameFunctions = { end end, - UpdatePowerBar = function (self) + UpdatePowerBar = function(self) self:UpdatePowerInfo() self:UpdateMaxPower() self:UpdatePower() @@ -7858,7 +7855,7 @@ DF.PowerFrameFunctions = { end, --> power update - UpdateMaxPower = function (self) + UpdateMaxPower = function(self) self.currentPowerMax = UnitPowerMax (self.displayedUnit, self.powerType) self:SetMinMaxValues (self.minPower, self.currentPowerMax) @@ -7866,7 +7863,7 @@ DF.PowerFrameFunctions = { self:Hide() end end, - UpdatePower = function (self) + UpdatePower = function(self) self.currentPower = UnitPower (self.displayedUnit, self.powerType) PixelUtil.SetStatusBarValue (self, self.currentPower) @@ -7876,7 +7873,7 @@ DF.PowerFrameFunctions = { end, --> when a event different from unit_power_update is triggered, update which type of power the unit should show - UpdatePowerInfo = function (self) + UpdatePowerInfo = function(self) if (IS_WOW_PROJECT_MAINLINE and self.Settings.ShowAlternatePower) then -- not available in classic local barID = UnitPowerBarID(self.displayedUnit) local barInfo = GetUnitPowerBarInfoByID(barID) @@ -7894,7 +7891,7 @@ DF.PowerFrameFunctions = { end, --> tint the bar with the color of the power, e.g. blue for a mana bar - UpdatePowerColor = function (self) + UpdatePowerColor = function(self) if (not UnitIsConnected (self.unit)) then self:SetStatusBarColor (.5, .5, .5) return @@ -7924,27 +7921,27 @@ DF.PowerFrameFunctions = { end, --> events - PLAYER_ENTERING_WORLD = function (self, ...) + PLAYER_ENTERING_WORLD = function(self, ...) self:UpdatePowerBar() end, - UNIT_DISPLAYPOWER = function (self, ...) + UNIT_DISPLAYPOWER = function(self, ...) self:UpdatePowerBar() end, - UNIT_POWER_BAR_SHOW = function (self, ...) + UNIT_POWER_BAR_SHOW = function(self, ...) self:UpdatePowerBar() end, - UNIT_POWER_BAR_HIDE = function (self, ...) + UNIT_POWER_BAR_HIDE = function(self, ...) self:UpdatePowerBar() end, - UNIT_MAXPOWER = function (self, ...) + UNIT_MAXPOWER = function(self, ...) self:UpdateMaxPower() self:UpdatePower() end, - UNIT_POWER_UPDATE = function (self, ...) + UNIT_POWER_UPDATE = function(self, ...) self:UpdatePower() end, - UNIT_POWER_FREQUENT = function (self, ...) + UNIT_POWER_FREQUENT = function(self, ...) self:UpdatePower() end, } @@ -8071,7 +8068,7 @@ DF.CastFrameFunctions = { SparkOffset = 0, }, - Initialize = function (self) + Initialize = function(self) self.unit = "unutilized unit" self.lazyUpdateCooldown = self.Settings.LazyUpdateCooldown self.Colors = self.Settings.Colors @@ -8106,13 +8103,13 @@ DF.CastFrameFunctions = { self.fadeInAnimation.alpha1:SetDuration (self.Settings.FadeInTime) end, - SetDefaultColor = function (self, colorType, r, g, b, a) + SetDefaultColor = function(self, colorType, r, g, b, a) assert (type (colorType) == "string", "DetailsFramework: CastBar:SetDefaultColor require a string in the first argument.") self.Colors [colorType]:SetColor (r, g, b, a) end, --> this get a color suggestion based on the type of cast being shown in the cast bar - GetCastColor = function (self) + GetCastColor = function(self) if (not self.canInterrupt) then return self.Colors.NonInterruptible @@ -8134,13 +8131,13 @@ DF.CastFrameFunctions = { end, --> update all colors of the cast bar - UpdateCastColor = function (self) + UpdateCastColor = function(self) local castColor = self:GetCastColor() self:SetColor (castColor) --SetColor handles with ParseColors() end, --> initial checks to know if this is a valid cast and should show the cast bar, if this fails the cast bar won't show - IsValid = function (self, unit, castName, isTradeSkill, ignoreVisibility) + IsValid = function(self, unit, castName, isTradeSkill, ignoreVisibility) if (not ignoreVisibility and not self:IsShown()) then return false end @@ -8160,7 +8157,7 @@ DF.CastFrameFunctions = { --> handle the interrupt state of the cast --> this does not change the cast bar color because this function is called inside the start cast where is already handles the cast color - UpdateInterruptState = function (self) + UpdateInterruptState = function(self) if (self.Settings.ShowShield and not self.canInterrupt) then self.BorderShield:Show() else @@ -8169,7 +8166,7 @@ DF.CastFrameFunctions = { end, --> this check if the cast did reach 100% in the statusbar, mostly called from OnTick - CheckCastIsDone = function (self, event, isFinished) + CheckCastIsDone = function(self, event, isFinished) --> check max value if (not isFinished and not self.finished) then @@ -8206,7 +8203,7 @@ DF.CastFrameFunctions = { end, --> setup the castbar to be used by another unit - SetUnit = function (self, unit, displayedUnit) + SetUnit = function(self, unit, displayedUnit) if (self.unit ~= unit or self.displayedUnit ~= displayedUnit or unit == nil) then self.unit = unit self.displayedUnit = displayedUnit or unit @@ -8273,7 +8270,7 @@ DF.CastFrameFunctions = { end, --> executed after a scheduled to hide timer is done - DoScheduledHide = function (timerObject) + DoScheduledHide = function(timerObject) timerObject.castBar.scheduledHideTime = nil --just to make sure it isn't casting @@ -8286,18 +8283,18 @@ DF.CastFrameFunctions = { end end, - HasScheduledHide = function (self) + HasScheduledHide = function(self) return self.scheduledHideTime and not self.scheduledHideTime:IsCancelled() end, - CancelScheduleToHide = function (self) + CancelScheduleToHide = function(self) if (self:HasScheduledHide()) then self.scheduledHideTime:Cancel() end end, --> after an interrupt, do not immediately hide the cast bar, let it up for short amount of time to give feedback to the player - ScheduleToHide = function (self, delay) + ScheduleToHide = function(self, delay) if (not delay) then if (self.scheduledHideTime and not self.scheduledHideTime:IsCancelled()) then self.scheduledHideTime:Cancel() @@ -8316,7 +8313,7 @@ DF.CastFrameFunctions = { self.scheduledHideTime.castBar = self end, - OnHide = function (self) + OnHide = function(self) --> just in case some other effects made it have a different alpha since SetUnit won't load if the unit is the same. self:SetAlpha (1) --> cancel any timer to hide scheduled @@ -8325,7 +8322,7 @@ DF.CastFrameFunctions = { --> just update the current value if a spell is being cast since it wasn't running its tick function during the hide state --> everything else should be in the correct state - OnShow = function (self) + OnShow = function(self) self.flashTexture:Hide() if (self.unit) then @@ -8355,7 +8352,7 @@ DF.CastFrameFunctions = { end, --it's triggering several events since it's not registered for the unit with RegisterUnitEvent - OnEvent = function (self, event, ...) + OnEvent = function(self, event, ...) local arg1 = ... local unit = self.unit @@ -8376,7 +8373,7 @@ DF.CastFrameFunctions = { end end, - OnTick_LazyTick = function (self) + OnTick_LazyTick = function(self) --> run the lazy tick if allowed if (self.Settings.CanLazyTick) then --> update the cast time @@ -8403,7 +8400,7 @@ DF.CastFrameFunctions = { end, --> tick function for regular casts - OnTick_Casting = function (self, deltaTime) + OnTick_Casting = function(self, deltaTime) self.value = self.value + deltaTime if (self:CheckCastIsDone()) then @@ -8421,7 +8418,7 @@ DF.CastFrameFunctions = { end, --> tick function for channeling casts - OnTick_Channeling = function (self, deltaTime) + OnTick_Channeling = function(self, deltaTime) self.value = self.value - deltaTime if (self:CheckCastIsDone()) then @@ -8437,7 +8434,7 @@ DF.CastFrameFunctions = { return true end, - OnTick = function (self, deltaTime) + OnTick = function(self, deltaTime) if (self.casting) then if (not self:OnTick_Casting (deltaTime)) then return @@ -8465,31 +8462,31 @@ DF.CastFrameFunctions = { end, --> animation start script - Animation_FadeOutStarted = function (self) + Animation_FadeOutStarted = function(self) end, --> animation finished script - Animation_FadeOutFinished = function (self) + Animation_FadeOutFinished = function(self) local castBar = self:GetParent() castBar:SetAlpha (1) castBar:Hide() end, --> animation start script - Animation_FadeInStarted = function (self) + Animation_FadeInStarted = function(self) end, --> animation finished script - Animation_FadeInFinished = function (self) + Animation_FadeInFinished = function(self) local castBar = self:GetParent() castBar:Show() castBar:SetAlpha (1) end, --> animation calls - Animation_FadeOut = function (self) + Animation_FadeOut = function(self) self:ScheduleToHide (false) if (self.fadeInAnimation:IsPlaying()) then @@ -8501,7 +8498,7 @@ DF.CastFrameFunctions = { end end, - Animation_FadeIn = function (self) + Animation_FadeIn = function(self) self:ScheduleToHide (false) if (self.fadeOutAnimation:IsPlaying()) then @@ -8513,13 +8510,13 @@ DF.CastFrameFunctions = { end end, - Animation_Flash = function (self) + Animation_Flash = function(self) if (not self.flashAnimation:IsPlaying()) then self.flashAnimation:Play() end end, - Animation_StopAllAnimations = function (self) + Animation_StopAllAnimations = function(self) if (self.flashAnimation:IsPlaying()) then self.flashAnimation:Stop() end @@ -8533,7 +8530,7 @@ DF.CastFrameFunctions = { end end, - PLAYER_ENTERING_WORLD = function (self, unit, arg1) + PLAYER_ENTERING_WORLD = function(self, unit, arg1) local isChannel = UnitChannelInfo (unit) local isRegularCast = UnitCastingInfo (unit) @@ -8558,7 +8555,7 @@ DF.CastFrameFunctions = { end end, - UpdateCastingInfo = function (self, unit) + UpdateCastingInfo = function(self, unit) local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellID = UnitCastingInfo (unit) --> is valid? @@ -8613,14 +8610,14 @@ DF.CastFrameFunctions = { end, - UNIT_SPELLCAST_START = function (self, unit) + UNIT_SPELLCAST_START = function(self, unit) self:UpdateCastingInfo(unit) self:RunHooksForWidget ("OnCastStart", self, self.unit, "UNIT_SPELLCAST_START") end, - UpdateChannelInfo = function (self, unit, ...) + UpdateChannelInfo = function(self, unit, ...) local name, text, texture, startTime, endTime, isTradeSkill, notInterruptible, spellID = UnitChannelInfo (unit) --> is valid? @@ -8676,14 +8673,14 @@ DF.CastFrameFunctions = { end, - UNIT_SPELLCAST_CHANNEL_START = function (self, unit, ...) + UNIT_SPELLCAST_CHANNEL_START = function(self, unit, ...) self:UpdateChannelInfo(unit, ...) self:RunHooksForWidget ("OnCastStart", self, self.unit, "UNIT_SPELLCAST_CHANNEL_START") end, - UNIT_SPELLCAST_STOP = function (self, unit, ...) + UNIT_SPELLCAST_STOP = function(self, unit, ...) local unitID, castID, spellID = ... if (self.castID == castID) then self.Spark:Hide() @@ -8714,7 +8711,7 @@ DF.CastFrameFunctions = { end end, - UNIT_SPELLCAST_CHANNEL_STOP = function (self, unit, ...) + UNIT_SPELLCAST_CHANNEL_STOP = function(self, unit, ...) local unitID, castID, spellID = ... if (self.channeling and castID == self.castID) then @@ -8746,7 +8743,7 @@ DF.CastFrameFunctions = { end end, - UNIT_SPELLCAST_FAILED = function (self, unit, ...) + UNIT_SPELLCAST_FAILED = function(self, unit, ...) local unitID, castID, spellID = ... if ((self.casting or self.channeling) and castID == self.castID and not self.fadeOut) then @@ -8767,7 +8764,7 @@ DF.CastFrameFunctions = { end end, - UNIT_SPELLCAST_INTERRUPTED = function (self, unit, ...) + UNIT_SPELLCAST_INTERRUPTED = function(self, unit, ...) local unitID, castID, spellID = ... if ((self.casting or self.channeling) and castID == self.castID and not self.fadeOut) then @@ -8788,7 +8785,7 @@ DF.CastFrameFunctions = { end end, - UNIT_SPELLCAST_DELAYED = function (self, unit, ...) + UNIT_SPELLCAST_DELAYED = function(self, unit, ...) local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible = UnitCastingInfo (unit) if (not self:IsValid (unit, name, isTradeSkill)) then @@ -8803,7 +8800,7 @@ DF.CastFrameFunctions = { self:SetMinMaxValues (0, self.maxValue) end, - UNIT_SPELLCAST_CHANNEL_UPDATE = function (self, unit, ...) + UNIT_SPELLCAST_CHANNEL_UPDATE = function(self, unit, ...) local name, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo (unit) if (not self:IsValid (unit, name, isTradeSkill)) then @@ -8825,14 +8822,14 @@ DF.CastFrameFunctions = { end, --> cast changed its state to interruptable - UNIT_SPELLCAST_INTERRUPTIBLE = function (self, unit, ...) + UNIT_SPELLCAST_INTERRUPTIBLE = function(self, unit, ...) self.canInterrupt = true self:UpdateCastColor() self:UpdateInterruptState() end, --> cast changed its state to non interruptable - UNIT_SPELLCAST_NOT_INTERRUPTIBLE = function (self, unit, ...) + UNIT_SPELLCAST_NOT_INTERRUPTIBLE = function(self, unit, ...) self.canInterrupt = false self:UpdateCastColor() self:UpdateInterruptState() @@ -8845,7 +8842,7 @@ local LibCC = LibStub ("LibClassicCasterino", true) if IS_WOW_PROJECT_CLASSIC_ERA and LibCC then local fCast = CreateFrame("frame") - local getCastBar = function (unitId) + local getCastBar = function(unitId) local plateFrame = C_NamePlate.GetNamePlateForUnit (unitId) if (not plateFrame) then return @@ -8859,48 +8856,48 @@ if IS_WOW_PROJECT_CLASSIC_ERA and LibCC then return castBar end - local triggerCastEvent = function (castBar, event, unitId, ...) + local triggerCastEvent = function(castBar, event, unitId, ...) if (castBar and castBar.OnEvent) then castBar.OnEvent (castBar, event, unitId) end end - local funcCast = function (event, unitId, ...) + local funcCast = function(event, unitId, ...) local castBar = getCastBar (unitId) if (castBar) then triggerCastEvent (castBar, event, unitId) end end - fCast.UNIT_SPELLCAST_START = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_START = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_STOP = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_STOP = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_DELAYED = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_DELAYED = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_FAILED = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_FAILED = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_INTERRUPTED = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_INTERRUPTED = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_CHANNEL_START = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_CHANNEL_START = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_CHANNEL_UPDATE = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_CHANNEL_UPDATE = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end - fCast.UNIT_SPELLCAST_CHANNEL_STOP = function (self, event, unitId, ...) + fCast.UNIT_SPELLCAST_CHANNEL_STOP = function(self, event, unitId, ...) triggerCastEvent (getCastBar (unitId), event, unitId) end @@ -9024,14 +9021,14 @@ end --]=] DF.BorderFunctions = { - SetBorderColor = function (self, r, g, b, a) + SetBorderColor = function(self, r, g, b, a) r, g, b, a = DF:ParseColors (r, g, b, a) for _, texture in ipairs (self.allTextures) do texture:SetVertexColor (r, g, b, a) end end, - SetBorderThickness = function (self, newThickness) + SetBorderThickness = function(self, newThickness) PixelUtil.SetWidth (self.leftBorder, newThickness, newThickness) PixelUtil.SetWidth (self.rightBorder, newThickness, newThickness) PixelUtil.SetHeight (self.topBorder, newThickness, newThickness) @@ -9118,7 +9115,7 @@ end --> unit frame --> return true if the unit has been claimed by another player (health bar is gray) - local unit_is_tap_denied = function (unit) + local unit_is_tap_denied = function(unit) return unit and not UnitPlayerControlled (unit) and UnitIsTapDenied (unit) end @@ -9179,7 +9176,7 @@ end ["UNIT_THREAT_LIST_UPDATE"] = true, }, - Initialize = function (self) + Initialize = function(self) self.border:SetBorderColor (self.Settings.BorderColor) PixelUtil.SetWidth (self, self.Settings.Width, 1) @@ -9195,12 +9192,12 @@ end PixelUtil.SetHeight (self.castBar, self.Settings.CastBarHeight, 1) end, - SetHealthBarColor = function (self, r, g, b, a) + SetHealthBarColor = function(self, r, g, b, a) self.healthBar:SetColor (r, g, b, a) end, --> register all events which will be used by the unit frame - RegisterEvents = function (self) + RegisterEvents = function(self) --> register events for index, eventTable in ipairs (self.UnitFrameEvents) do local event, isUnitEvent = unpack (eventTable) @@ -9226,7 +9223,7 @@ end end, --> unregister events, called when this unit frame losses its unit - UnregisterEvents = function (self) + UnregisterEvents = function(self) for index, eventTable in ipairs (self.UnitFrameEvents) do local event, firstUnit, secondUnit = unpack (eventTable) self:UnregisterEvent (event) @@ -9238,10 +9235,10 @@ end end, --> call every tick - OnTick = function (self, deltaTime) end, --if overrided, set 'CanTick' to true on the settings table + OnTick = function(self, deltaTime) end, --if overrided, set 'CanTick' to true on the settings table --> when an event happen for this unit, send it to the apropriate function - OnEvent = function (self, event, ...) + OnEvent = function(self, event, ...) --> run the function for this event local eventFunc = self [event] if (eventFunc) then @@ -9258,14 +9255,14 @@ end end end, - OnHide = function (self) + OnHide = function(self) if (self.Settings.ClearUnitOnHide) then self:SetUnit (nil) end end, --> run if the unit currently shown is different than the new one - SetUnit = function (self, unit) + SetUnit = function(self, unit) if (unit ~= self.unit or unit == nil) then self.unit = unit --absolute unit self.displayedUnit = unit --~todo rename to 'displayedUnit' for back compatibility with older scripts in Plater @@ -9314,7 +9311,7 @@ end --> if the unit is controlling a vehicle, need to show the vehicle instead --> .unit and .displayedUnit is always the same execept when the unit is controlling a vehicle, then .displayedUnit is the unitID for the vehicle --> todo: see what 'UnitTargetsVehicleInRaidUI' is, there's a call for this in the CompactUnitFrame.lua but zero documentation - CheckVehiclePossession = function (self) + CheckVehiclePossession = function(self) --> this unit is possessing a vehicle? local unitPossessVehicle = (IS_WOW_PROJECT_MAINLINE) and UnitHasVehicleUI (self.unit) or false if (unitPossessVehicle) then @@ -9348,7 +9345,7 @@ end end, --> find a color for the health bar, if a color has been passed in the arguments use it instead, 'CanModifyHealhBarColor' must be true for this function run - UpdateHealthColor = function (self, r, g, b) + UpdateHealthColor = function(self, r, g, b) --> check if color changes is disabled if (not self.Settings.CanModifyHealhBarColor) then @@ -9438,7 +9435,7 @@ end end, --> misc - UpdateName = function (self) + UpdateName = function(self) if (not self.Settings.ShowUnitName) then return end @@ -9451,7 +9448,7 @@ end --> this runs when the player it self changes its target, need to update the current target overlay --> todo: add focus overlay - UpdateTargetOverlay = function (self) + UpdateTargetOverlay = function(self) if (not self.Settings.ShowTargetOverlay) then self.targetOverlay:Hide() return @@ -9464,7 +9461,7 @@ end end end, - UpdateAllWidgets = function (self) + UpdateAllWidgets = function(self) if (UnitExists (self.displayedUnit)) then local unit = self.unit local displayedUnit = self.displayedUnit @@ -9488,7 +9485,7 @@ end end, --> update the unit frame and its widgets - UpdateUnitFrame = function (self) + UpdateUnitFrame = function(self) local unitInVehicle = self:CheckVehiclePossession() --> if the unit is inside a vehicle, the vehicle possession function will call an update on all widgets @@ -9498,47 +9495,47 @@ end end, --> event handles - PLAYER_ENTERING_WORLD = function (self, ...) + PLAYER_ENTERING_WORLD = function(self, ...) self:UpdateUnitFrame() end, --> update overlays when the player changes its target - PLAYER_TARGET_CHANGED = function (self, ...) + PLAYER_TARGET_CHANGED = function(self, ...) self:UpdateTargetOverlay() end, --> unit received a name update - UNIT_NAME_UPDATE = function (self, ...) + UNIT_NAME_UPDATE = function(self, ...) self:UpdateName() end, --> this is registered only if .settings.ColorByAggro is true - UNIT_THREAT_LIST_UPDATE = function (self, ...) + UNIT_THREAT_LIST_UPDATE = function(self, ...) if (self.Settings.ColorByAggro) then self:UpdateHealthColor() end end, --> vehicle - UNIT_ENTERED_VEHICLE = function (self, ...) + UNIT_ENTERED_VEHICLE = function(self, ...) self:UpdateUnitFrame() end, - UNIT_EXITED_VEHICLE = function (self, ...) + UNIT_EXITED_VEHICLE = function(self, ...) self:UpdateUnitFrame() end, --> pet - UNIT_PET = function (self, ...) + UNIT_PET = function(self, ...) self:UpdateUnitFrame() end, --> player connection - UNIT_CONNECTION = function (self, ...) + UNIT_CONNECTION = function(self, ...) if (UnitIsConnected (self.unit)) then self:UpdateUnitFrame() end end, - PARTY_MEMBER_ENABLE = function (self, ...) + PARTY_MEMBER_ENABLE = function(self, ...) if (UnitIsConnected (self.unit)) then self:UpdateName() end @@ -9652,17 +9649,17 @@ local timeline_options = { title_template = "ORANGE_FONT_TEMPLATE", text_tempate = "OPTIONS_FONT_TEMPLATE", - on_enter = function (self) + on_enter = function(self) self:SetBackdropColor (unpack (self.backdrop_color_highlight)) end, - on_leave = function (self) + on_leave = function(self) self:SetBackdropColor (unpack (self.backdrop_color)) end, - block_on_enter = function (self) + block_on_enter = function(self) end, - block_on_leave = function (self) + block_on_leave = function(self) end, } @@ -9687,7 +9684,7 @@ local elapsedtime_frame_options = { DF.TimeLineElapsedTimeFunctions = { --get a label and update its appearance - GetLabel = function (self, index) + GetLabel = function(self, index) local label = self.labels [index] if (not label) then @@ -9714,13 +9711,13 @@ DF.TimeLineElapsedTimeFunctions = { return label end, - Reset = function (self) + Reset = function(self) for i = 1, #self.labels do self.labels [i]:Hide() end end, - Refresh = function (self, elapsedTime, scale) + Refresh = function(self, elapsedTime, scale) local parent = self:GetParent() self:SetHeight (self.options.height) @@ -9775,7 +9772,7 @@ end DF.TimeLineBlockFunctions = { --self is the line - SetBlock = function (self, index, blockInfo) + SetBlock = function(self, index, blockInfo) --get the block information --see what is the current scale --adjust the block position @@ -9792,7 +9789,7 @@ DF.TimeLineBlockFunctions = { end, - SetBlocksFromData = function (self) + SetBlocksFromData = function(self) local parent = self:GetParent():GetParent() local data = parent.data local defaultColor = parent.defaultColor --guarantee to have a value @@ -9901,7 +9898,7 @@ DF.TimeLineBlockFunctions = { end end, - GetBlock = function (self, index) + GetBlock = function(self, index) local block = self.blocks [index] if (not block) then block = CreateFrame ("frame", nil, self, "BackdropTemplate") @@ -9936,7 +9933,7 @@ DF.TimeLineBlockFunctions = { return block end, - Reset = function (self) + Reset = function(self) --attention, it doesn't reset icon texture, text and background color for i = 1, #self.blocks do self.blocks [i]:Hide() @@ -9946,7 +9943,7 @@ DF.TimeLineBlockFunctions = { } DF.TimeLineFunctions = { - GetLine = function (self, index) + GetLine = function(self, index) local line = self.lines [index] if (not line) then --create a new line @@ -9999,13 +9996,13 @@ DF.TimeLineFunctions = { return line end, - ResetAllLines = function (self) + ResetAllLines = function(self) for i = 1, #self.lines do self.lines [i]:Reset() end end, - AdjustScale = function (self, index) + AdjustScale = function(self, index) end, @@ -10074,7 +10071,7 @@ DF.TimeLineFunctions = { self.elapsedTimeFrame:Refresh (self.data.length, self.currentScale) end, - SetData = function (self, data) + SetData = function(self, data) self.data = data self:RefreshTimeLine() end, @@ -10299,7 +10296,7 @@ function DF:ShowErrorMessage (errorMessage, titleText) f:RegisterForDrag ("LeftButton") f:SetScript ("OnDragStart", function() f:StartMoving() end) f:SetScript ("OnDragStop", function() f:StopMovingOrSizing() end) - f:SetScript ("OnMouseDown", function (self, button) if (button == "RightButton") then f:Hide() end end) + f:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then f:Hide() end end) tinsert (UISpecialFrames, "DetailsFrameworkErrorMessagePanel") DF.ErrorMessagePanel = f diff --git a/Libs/DF/slider.lua b/Libs/DF/slider.lua index 2a922bc7..ae22dce3 100644 --- a/Libs/DF/slider.lua +++ b/Libs/DF/slider.lua @@ -208,7 +208,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) DFSliderMetaFunctions.SetMembers["fractional"] = smember_fractional DFSliderMetaFunctions.SetMembers["value"] = smember_value - DFSliderMetaFunctions.__newindex = function (object, key, value) + DFSliderMetaFunctions.__newindex = function(object, key, value) local func = DFSliderMetaFunctions.SetMembers[key] if (func) then return func(object, value) @@ -313,7 +313,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) ------------------------------------------------------------------------------------------------------------ --> scripts - local OnEnter = function (slider) + local OnEnter = function(slider) if (rawget (slider.MyObject, "lockdown")) then return end @@ -344,7 +344,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - local OnLeave = function (slider) + local OnLeave = function(slider) if (rawget (slider.MyObject, "lockdown")) then return @@ -412,23 +412,23 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) buttonPlus:SetFrameStrata (f:GetFrameStrata()) buttonMinor:SetFrameStrata (f:GetFrameStrata()) - buttonPlus:SetScript ("OnEnter", function (self) + buttonPlus:SetScript ("OnEnter", function(self) if (f.isGoingToHide) then f:SetScript ("OnUpdate", nil) f.isGoingToHide = false end end) - buttonMinor:SetScript ("OnEnter", function (self) + buttonMinor:SetScript ("OnEnter", function(self) if (f.isGoingToHide) then f:SetScript ("OnUpdate", nil) f.isGoingToHide = false end end) - buttonPlus:SetScript ("OnLeave", function (self) + buttonPlus:SetScript ("OnLeave", function(self) f:PrepareToHide() end) - buttonMinor:SetScript ("OnLeave", function (self) + buttonMinor:SetScript ("OnLeave", function(self) f:PrepareToHide() end) @@ -488,7 +488,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end - buttonPlus:SetScript ("OnMouseUp", function (self) + buttonPlus:SetScript ("OnMouseUp", function(self) if (not buttonPlus.got_click) then plus_button_script() end @@ -496,7 +496,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) self:SetScript ("OnUpdate", nil) end) - local on_update = function (self, elapsed) + local on_update = function(self, elapsed) timer = timer + elapsed if (timer > 0.4) then change_timer = change_timer + elapsed @@ -507,7 +507,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end end - buttonPlus:SetScript ("OnMouseDown", function (self) + buttonPlus:SetScript ("OnMouseDown", function(self) timer = 0 change_timer = 0 self:SetScript ("OnUpdate", on_update) @@ -539,7 +539,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - buttonMinor:SetScript ("OnMouseUp", function (self) + buttonMinor:SetScript ("OnMouseUp", function(self) if (not buttonMinor.got_click) then minor_button_script() end @@ -547,7 +547,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) self:SetScript ("OnUpdate", nil) end) - local on_update = function (self, elapsed) + local on_update = function(self, elapsed) timer = timer + elapsed if (timer > 0.4) then change_timer = change_timer + elapsed @@ -558,13 +558,13 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end end - buttonMinor:SetScript ("OnMouseDown", function (self) + buttonMinor:SetScript ("OnMouseDown", function(self) timer = 0 change_timer = 0 self:SetScript ("OnUpdate", on_update) end) - local do_precision = function (text) + local do_precision = function(text) if (type (text) == "string" and text:find ("%.")) then local left, right = strsplit (".", text) left = tonumber (left) @@ -645,7 +645,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - local OnMouseDown = function (slider, button) + local OnMouseDown = function(slider, button) slider.MyObject.IsValueChanging = true local capsule = slider.MyObject @@ -659,7 +659,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - local OnMouseUp = function (slider, button) + local OnMouseUp = function(slider, button) slider.MyObject.IsValueChanging = nil local capsule = slider.MyObject @@ -669,7 +669,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - local OnHide = function (slider) + local OnHide = function(slider) local capsule = slider.MyObject local kill = capsule:RunHooksForWidget ("OnHide", slider, capsule) if (kill) then @@ -683,7 +683,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) end end - local OnShow = function (slider) + local OnShow = function(slider) local capsule = slider.MyObject local kill = capsule:RunHooksForWidget ("OnShow", slider, capsule) if (kill) then @@ -694,7 +694,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) local table_insert = table.insert local table_remove = table.remove - local OnValueChanged = function (slider) + local OnValueChanged = function(slider) local amt if (slider.MyObject.useDecimals) then @@ -743,7 +743,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin) ------------------------------------------------------------------------------------------------------------ --> object constructor -local SwitchOnClick = function (self, button, forced_value, value) +local SwitchOnClick = function(self, button, forced_value, value) local slider = self.MyObject @@ -804,7 +804,7 @@ local SwitchOnClick = function (self, button, forced_value, value) end -local default_switch_func = function (self, passed_value) +local default_switch_func = function(self, passed_value) if (self.value) then return false else @@ -812,11 +812,11 @@ local default_switch_func = function (self, passed_value) end end -local switch_get_value = function (self) +local switch_get_value = function(self) return self.value end -local switch_set_value = function (self, value) +local switch_set_value = function(self, value) if (self.switch_func) then value = self:switch_func (value) end @@ -824,11 +824,11 @@ local switch_set_value = function (self, value) SwitchOnClick (self.widget, nil, true, value) end -local switch_set_fixparameter = function (self, value) +local switch_set_fixparameter = function(self, value) rawset (self, "FixedValue", value) end -local switch_disable = function (self) +local switch_disable = function(self) if (self.is_checkbox) then self.checked_texture:Hide() @@ -845,7 +845,7 @@ local switch_disable = function (self) self:SetAlpha (.4) rawset (self, "lockdown", true) end -local switch_enable = function (self) +local switch_enable = function(self) if (self.is_checkbox) then if (rawget (self, "value")) then self.checked_texture:Show() @@ -866,11 +866,11 @@ local switch_enable = function (self) return rawset (self, "lockdown", false) end -local set_switch_func = function (self, newFunction) +local set_switch_func = function(self, newFunction) self.OnSwitch = newFunction end -local set_as_checkbok = function (self) +local set_as_checkbok = function(self) if self.is_checkbox and self.checked_texture then return end local checked = self:CreateTexture (self:GetName() .. "CheckTexture", "overlay") checked:SetTexture ([[Interface\Buttons\UI-CheckBox-Check]]) @@ -1126,7 +1126,7 @@ function DF:NewSlider (parent, container, name, member, w, h, min, max, step, de local idx = getmetatable (SliderObject.slider).__index for funcName, funcAddress in pairs (idx) do if (not DFSliderMetaFunctions [funcName]) then - DFSliderMetaFunctions [funcName] = function (object, ...) + DFSliderMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G['"..object.slider:GetName().."']:"..funcName.."(...)") return x (...) end diff --git a/Libs/DF/split_bar.lua b/Libs/DF/split_bar.lua index 7558d58a..e261611d 100644 --- a/Libs/DF/split_bar.lua +++ b/Libs/DF/split_bar.lua @@ -47,7 +47,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] ------------------------------------------------------------------------------------------------------------ --> metatables - SplitBarMetaFunctions.__call = function (_table, value) + SplitBarMetaFunctions.__call = function(_table, value) if (not value) then return _table.statusbar:GetValue() else @@ -56,7 +56,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - SplitBarMetaFunctions.__add = function (v1, v2) + SplitBarMetaFunctions.__add = function(v1, v2) if (_type (v1) == "table") then local v = v1.statusbar:GetValue() v = v + v2 @@ -70,7 +70,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - SplitBarMetaFunctions.__sub = function (v1, v2) + SplitBarMetaFunctions.__sub = function(v1, v2) if (_type (v1) == "table") then local v = v1.statusbar:GetValue() v = v - v2 @@ -92,61 +92,61 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] return _object:GetTooltip() end --> shown - local gmember_shown = function (_object) + local gmember_shown = function(_object) return _object.statusbar:IsShown() end --> frame width - local gmember_width = function (_object) + local gmember_width = function(_object) return _object.statusbar:GetWidth() end --> frame height - local gmember_height = function (_object) + local gmember_height = function(_object) return _object.statusbar:GetHeight() end --> value - local gmember_value = function (_object) + local gmember_value = function(_object) return _object.statusbar:GetValue() end --> right text - local gmember_rtext = function (_object) + local gmember_rtext = function(_object) return _object.textright:GetText() end --> left text - local gmember_ltext = function (_object) + local gmember_ltext = function(_object) return _object.textleft:GetText() end --> right color - local gmember_rcolor = function (_object) + local gmember_rcolor = function(_object) return _object.rightTexture.original_colors end --> left color - local gmember_lcolor = function (_object) + local gmember_lcolor = function(_object) return _object.texture.original_colors end --> right icon - local gmember_ricon = function (_object) + local gmember_ricon = function(_object) return _object.iconright:GetTexture() end --> left icon - local gmember_licon = function (_object) + local gmember_licon = function(_object) return _object.iconleft:GetTexture() end --> texture - local gmember_texture = function (_object) + local gmember_texture = function(_object) return _object.texture:GetTexture() end --> font size - local gmember_textsize = function (_object) + local gmember_textsize = function(_object) local _, fontsize = _object.textleft:GetFont() return fontsize end --> font face - local gmember_textfont = function (_object) + local gmember_textfont = function(_object) local fontface = _object.textleft:GetFont() return fontface end --> font color - local gmember_textcolor = function (_object) + local gmember_textcolor = function(_object) return _object.textleft:GetTextColor() end @@ -170,7 +170,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] SplitBarMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias SplitBarMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias - SplitBarMetaFunctions.__index = function (_table, _member_requested) + SplitBarMetaFunctions.__index = function(_table, _member_requested) local func = SplitBarMetaFunctions.GetMembers [_member_requested] if (func) then @@ -188,11 +188,11 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> tooltip - local smember_tooltip = function (_object, _value) + local smember_tooltip = function(_object, _value) return _object:SetTooltip (_value) end --> show - local smember_shown = function (_object, _value) + local smember_shown = function(_object, _value) if (_value) then return _object:Show() else @@ -200,7 +200,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end --> hide - local smember_hide = function (_object, _value) + local smember_hide = function(_object, _value) if (_value) then return _object:Hide() else @@ -208,34 +208,34 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end --> width - local smember_width = function (_object, _value) + local smember_width = function(_object, _value) return _object.statusbar:SetWidth (_value) end --> height - local smember_height = function (_object, _value) + local smember_height = function(_object, _value) return _object.statusbar:SetHeight (_value) end --> statusbar value - local smember_value = function (_object, _value) + local smember_value = function(_object, _value) _object.statusbar:SetValue (_value) return _object.spark:SetPoint ("left", _object.statusbar, "left", _value * (_object.statusbar:GetWidth()/100) - 18, 0) end --> right text - local smember_rtext = function (_object, _value) + local smember_rtext = function(_object, _value) return _object.textright:SetText (_value) end --> left text - local smember_ltext = function (_object, _value) + local smember_ltext = function(_object, _value) return _object.textleft:SetText (_value) end --> right color - local smember_rcolor = function (_object, _value) + local smember_rcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) _object.rightTexture.original_colors = {_value1, _value2, _value3, _value4} return _object.rightTexture:SetVertexColor (_value1, _value2, _value3, _value4) end --> left color - local smember_lcolor = function (_object, _value) + local smember_lcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) _object.statusbar:SetStatusBarColor (_value1, _value2, _value3, _value4) @@ -243,7 +243,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] return _object.texture:SetVertexColor (_value1, _value2, _value3, _value4) end --> right icon - local smember_ricon = function (_object, _value) + local smember_ricon = function(_object, _value) if (type (_value) == "table") then local _value1, _value2 = _unpack (_value) _object.iconright:SetTexture (_value1) @@ -256,7 +256,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] return end --> left icon - local smember_licon = function (_object, _value) + local smember_licon = function(_object, _value) if (type (_value) == "table") then local _value1, _value2 = _unpack (_value) _object.iconleft:SetTexture (_value1) @@ -269,7 +269,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] return end --> texture - local smember_texture = function (_object, _value) + local smember_texture = function(_object, _value) if (type (_value) == "table") then local _value1, _value2 = _unpack (_value) _object.texture:SetTexture (_value1) @@ -285,17 +285,17 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] return end --> font face - local smember_textfont = function (_object, _value) + local smember_textfont = function(_object, _value) DF:SetFontFace (_object.textleft, _value) return DF:SetFontFace (_object.textright, _value) end --> font size - local smember_textsize = function (_object, _value) + local smember_textsize = function(_object, _value) DF:SetFontSize (_object.textleft, _value) return DF:SetFontSize (_object.textright, _value) end --> font color - local smember_textcolor = function (_object, _value) + local smember_textcolor = function(_object, _value) local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) _object.textleft:SetTextColor (_value1, _value2, _value3, _value4) return _object.textright:SetTextColor (_value1, _value2, _value3, _value4) @@ -321,7 +321,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] SplitBarMetaFunctions.SetMembers ["textfont"] = smember_textfont --alias SplitBarMetaFunctions.SetMembers ["textcolor"] = smember_textcolor --alias - SplitBarMetaFunctions.__newindex = function (_table, _key, _value) + SplitBarMetaFunctions.__newindex = function(_table, _key, _value) local func = SplitBarMetaFunctions.SetMembers [_key] if (func) then return func (_table, _value) @@ -562,7 +562,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] ------------------------------------------------------------------------------------------------------------ --> scripts - local OnEnter = function (frame) + local OnEnter = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule) if (kill) then @@ -576,7 +576,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnLeave = function (frame) + local OnLeave = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule) if (kill) then @@ -588,7 +588,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnHide = function (frame) + local OnHide = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule) if (kill) then @@ -596,7 +596,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnShow = function (frame) + local OnShow = function(frame) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule) if (kill) then @@ -604,7 +604,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnMouseDown = function (frame, button) + local OnMouseDown = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule) if (kill) then @@ -619,7 +619,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnMouseUp = function (frame, button) + local OnMouseUp = function(frame, button) local capsule = frame.MyObject local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule) if (kill) then @@ -632,7 +632,7 @@ local SplitBarMetaFunctions = _G[DF.GlobalWidgetControlNames ["split_bar"]] end end - local OnSizeChanged = function (statusbar) + local OnSizeChanged = function(statusbar) statusbar.MyObject.spark:SetPoint ("left", statusbar, "left", statusbar:GetValue() * (statusbar:GetWidth()/100) - 18, 0) statusbar.MyObject.rightTexture:SetWidth(statusbar:GetWidth() - statusbar.MyObject.texture:GetWidth()) end @@ -651,7 +651,7 @@ function DF:CreateSplitBar(parent, width, height, member, name) return DF:NewSplitBar(parent, nil, name, member, width, height) end -local build_statusbar = function (self) +local build_statusbar = function(self) self:SetSize (300, 14) @@ -757,7 +757,7 @@ function DF:NewSplitBar (parent, container, name, member, w, h) local idx = getmetatable (SplitBarObject.statusbar).__index for funcName, funcAddress in pairs (idx) do if (not SplitBarMetaFunctions [funcName]) then - SplitBarMetaFunctions [funcName] = function (object, ...) + SplitBarMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G['"..object.statusbar:GetName().."']:"..funcName.."(...)") return x (...) end diff --git a/Libs/DF/textentry.lua b/Libs/DF/textentry.lua index 1e1f4a88..c486a181 100644 --- a/Libs/DF/textentry.lua +++ b/Libs/DF/textentry.lua @@ -285,7 +285,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 ------------------------------------------------------------------------------------------------------------ --> scripts and hooks - local OnEnter = function (textentry) + local OnEnter = function(textentry) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnEnter", textentry, capsule) @@ -307,7 +307,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnLeave = function (textentry) + local OnLeave = function(textentry) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnLeave", textentry, capsule) @@ -326,7 +326,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnHide = function (textentry) + local OnHide = function(textentry) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnHide", textentry, capsule) @@ -335,7 +335,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnShow = function (textentry) + local OnShow = function(textentry) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnShow", textentry, capsule) @@ -377,7 +377,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnEscapePressed = function (textentry) + local OnEscapePressed = function(textentry) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnEscapePressed", textentry, capsule, capsule.text) @@ -451,7 +451,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnTextChanged = function (textentry, byUser) + local OnTextChanged = function(textentry, byUser) local capsule = textentry.MyObject local kill = capsule:RunHooksForWidget ("OnTextChanged", textentry, byUser, capsule) @@ -460,7 +460,7 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 end end - local OnTabPressed = function (textentry) + local OnTabPressed = function(textentry) local capsule = textentry.MyObject @@ -582,7 +582,7 @@ function DF:NewTextEntry (parent, container, name, member, w, h, func, param1, p local idx = getmetatable (TextEntryObject.editbox).__index for funcName, funcAddress in pairs (idx) do if (not TextEntryMetaFunctions [funcName]) then - TextEntryMetaFunctions [funcName] = function (object, ...) + TextEntryMetaFunctions [funcName] = function(object, ...) local x = loadstring ( "return _G['"..object.editbox:GetName().."']:"..funcName.."(...)") return x (...) end @@ -688,16 +688,16 @@ function DF:NewSpellEntry (parent, func, w, h, param1, param2, member, name) return editbox end -local function_gettext = function (self) +local function_gettext = function(self) return self.editbox:GetText() end -local function_settext = function (self, text) +local function_settext = function(self, text) return self.editbox:SetText (text) end -local function_clearfocus = function (self) +local function_clearfocus = function(self) return self.editbox:ClearFocus() end -local function_setfocus = function (self) +local function_setfocus = function(self) return self.editbox:SetFocus (true) end @@ -812,7 +812,7 @@ local function ColorSelection ( self, ColorCode ) end -- end of the block --------------------- -local get_last_word = function (self) +local get_last_word = function(self) self.lastword = "" local cursor_pos = self.editbox:GetCursorPosition() local text = self.editbox:GetText() @@ -828,7 +828,7 @@ local get_last_word = function (self) end --On Text Changed -local AutoComplete_OnTextChanged = function (editboxWidget, byUser, capsule) +local AutoComplete_OnTextChanged = function(editboxWidget, byUser, capsule) capsule = capsule or editboxWidget.MyObject or editboxWidget local chars_now = editboxWidget:GetText():len() @@ -848,7 +848,7 @@ local AutoComplete_OnTextChanged = function (editboxWidget, byUser, capsule) capsule.characters_count = chars_now end -local AutoComplete_OnSpacePressed = function (editboxWidget, capsule) +local AutoComplete_OnSpacePressed = function(editboxWidget, capsule) capsule = capsule or editboxWidget.MyObject or editboxWidget -- if (not gotMatch) then @@ -856,11 +856,11 @@ local AutoComplete_OnSpacePressed = function (editboxWidget, capsule) -- end end -local AutoComplete_OnEscapePressed = function (editboxWidget) +local AutoComplete_OnEscapePressed = function(editboxWidget) editboxWidget.end_selection = nil end -local AutoComplete_OnEnterPressed = function (editboxWidget) +local AutoComplete_OnEnterPressed = function(editboxWidget) local capsule = editboxWidget.MyObject or editboxWidget if (editboxWidget.end_selection) then @@ -886,7 +886,7 @@ local AutoComplete_OnEnterPressed = function (editboxWidget) end -local AutoComplete_OnEditFocusGained = function (editboxWidget) +local AutoComplete_OnEditFocusGained = function(editboxWidget) local capsule = editboxWidget.MyObject or editboxWidget capsule:GetLastWord() --print ("last word:", editboxWidget.lastword) @@ -895,7 +895,7 @@ local AutoComplete_OnEditFocusGained = function (editboxWidget) capsule.characters_count = editboxWidget:GetText():len() end -local OptimizeAutoCompleteTable = function (self, wordList) +local OptimizeAutoCompleteTable = function(self, wordList) local optimizedTable = {} local lower = string.lower @@ -926,7 +926,7 @@ local OptimizeAutoCompleteTable = function (self, wordList) wordList.Optimized = optimizedTable end -local AutoComplete_OnChar = function (editboxWidget, char, capsule) +local AutoComplete_OnChar = function(editboxWidget, char, capsule) if (char == "") then return end @@ -1110,7 +1110,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show scrollframe:SetPoint ("bottomright", borderframe, "bottomright", -10, 10) --when the lua code field scrolls, make the lua field scroll too - scrollframe:SetScript ("OnVerticalScroll", function (self, offset) + scrollframe:SetScript ("OnVerticalScroll", function(self, offset) scrollframeNumberLines:SetVerticalScroll(scrollframe:GetVerticalScroll()) scrollframeNumberLines.ScrollBar:Hide() end) @@ -1122,7 +1122,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show scrollframeNumberLines.editbox:SetJustifyH ("left") scrollframeNumberLines.editbox:SetJustifyV ("top") - scrollframeNumberLines:SetScript ("OnSizeChanged", function (self) + scrollframeNumberLines:SetScript ("OnSizeChanged", function(self) scrollframeNumberLines.editbox:SetSize (self:GetSize()) scrollframeNumberLines.ScrollBar:Hide() end) @@ -1149,7 +1149,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show borderframe.SetAsAutoComplete = TextEntryMetaFunctions.SetAsAutoComplete - scrollframe:SetScript ("OnSizeChanged", function (self) + scrollframe:SetScript ("OnSizeChanged", function(self) scrollframe.editbox:SetSize (self:GetSize()) end) diff --git a/Libs/DF/timebar.lua b/Libs/DF/timebar.lua index db0faa7e..c9ff4899 100644 --- a/Libs/DF/timebar.lua +++ b/Libs/DF/timebar.lua @@ -52,7 +52,7 @@ local TimeBarMetaFunctions = _G[DF.GlobalWidgetControlNames["timebar"]] TimeBarMetaFunctions.SetMembers = TimeBarMetaFunctions.SetMembers or {} TimeBarMetaFunctions.GetMembers = TimeBarMetaFunctions.GetMembers or {} -TimeBarMetaFunctions.__index = function (table, key) +TimeBarMetaFunctions.__index = function(table, key) local func = TimeBarMetaFunctions.GetMembers[key] if (func) then return func(table, key) diff --git a/Libs/LibCompress/LibCompress.lua b/Libs/LibCompress/LibCompress.lua index c75a470c..ce83a0dc 100644 --- a/Libs/LibCompress/LibCompress.lua +++ b/Libs/LibCompress/LibCompress.lua @@ -509,7 +509,7 @@ end -- lookuptable (cached between calls) local lshiftMask = {} setmetatable(lshiftMask, { - __index = function (t, k) + __index = function(t, k) local v = bit_lshift(1, k) rawset(t, k, v) return v @@ -519,7 +519,7 @@ setmetatable(lshiftMask, { -- lookuptable (cached between calls) local lshiftMinusOneMask = {} setmetatable(lshiftMinusOneMask, { - __index = function (t, k) + __index = function(t, k) local v = bit_lshift(1, k) - 1 rawset(t, k, v) return v @@ -644,7 +644,7 @@ function LibCompress:DecompressHuffman(compressed) local bitfield_len = 0 local map = {} -- only table not reused in Huffman decode. setmetatable(map, { - __index = function (t, k) + __index = function(t, k) local v = {} rawset(t, k, v) return v @@ -696,7 +696,7 @@ function LibCompress:DecompressHuffman(compressed) -- But do return an empty table to prevent runtime errors. (instead of returning nil) local mt = {} setmetatable(map, { - __index = function (t, k) + __index = function(t, k) return mt end }) diff --git a/Libs/NickTag-1.0/NickTag-1.0.lua b/Libs/NickTag-1.0/NickTag-1.0.lua index 91ec9b0a..6b336625 100644 --- a/Libs/NickTag-1.0/NickTag-1.0.lua +++ b/Libs/NickTag-1.0/NickTag-1.0.lua @@ -480,13 +480,13 @@ end return from > #s and "" or s:match(".*%S", from) end -- - local titlecase = function (first, rest) + local titlecase = function(first, rest) return first:upper()..rest:lower() end -- local have_repeated = false local count_spaces = 0 - local check_repeated = function (char) + local check_repeated = function(char) if (char == " ") then have_repeated = true elseif (string.len (char) > 2) then @@ -858,7 +858,7 @@ do name:SetText (UnitName ("player")) --- - local OnClickFunction = function (button) + local OnClickFunction = function(button) if (button.isAvatar) then local avatar = NickTag.avatar_pool [button.IconID] _G.AvatarPickFrameAvatarPreview:SetTexture ( avatar [1] ) @@ -884,7 +884,7 @@ do okey:SetPoint ("bottomright", avatar_pick_frame, "bottomright", -37, 12) okey:SetText ("Accept") okey:SetFrameLevel (avatar_pick_frame:GetFrameLevel()+2) - okey:SetScript ("OnClick", function (self) + okey:SetScript ("OnClick", function(self) avatar_pick_frame:Hide() if (avatar_pick_frame.callback) then avatar_pick_frame.callback (avatar_pick_frame.selected_avatar, {0, 1, 0, 1}, avatar_pick_frame.selected_background, avatar_pick_frame.selected_texcoord, avatar_pick_frame.selected_color) @@ -895,7 +895,7 @@ do change_color:SetText ("Color") change_color:SetFrameLevel (avatar_pick_frame:GetFrameLevel()+2) - change_color:SetScript ("OnClick", function (self) + change_color:SetScript ("OnClick", function(self) ColorPickerFrame.func = selectedColor ColorPickerFrame.hasOpacity = false ColorPickerFrame:SetParent (avatar_pick_frame) @@ -940,7 +940,7 @@ do background_list:SetWidth (275) background_list:SetHeight (140) - local avatar_scroll_update = function (self) + local avatar_scroll_update = function(self) local numMacroIcons = #NickTag.avatar_pool local macroPopupIcon, macroPopupButton, index, texture local macroPopupOffset = FauxScrollFrame_GetOffset (avatar_list) @@ -964,7 +964,7 @@ do end FauxScrollFrame_Update (avatar_list, numMacroIcons , 3, 64) end - local background_scroll_update = function (self) + local background_scroll_update = function(self) local numMacroIcons = #NickTag.background_pool local macroPopupIcon, macroPopupButton, index, texture local macroPopupOffset = FauxScrollFrame_GetOffset (background_list) @@ -989,10 +989,10 @@ do FauxScrollFrame_Update (background_list, numMacroIcons , 3, 40) end - avatar_list:SetScript ("OnVerticalScroll", function (self, offset) + avatar_list:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (avatar_list, offset, 64, avatar_scroll_update) end) - background_list:SetScript ("OnVerticalScroll", function (self, offset) + background_list:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (background_list, offset, 40, background_scroll_update) end) diff --git a/boot.lua b/boot.lua index c5625f67..7e21c3ca 100644 --- a/boot.lua +++ b/boot.lua @@ -46,6 +46,9 @@ return Details.gameVersionPrefix .. Details.build_counter .. "." .. Details.acounter .. "." .. alphaId .. "(" .. Details.game_version .. ")" end + --namespace for the player breakdown window + Details.PlayerBreakdown = {} + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> initialization stuff local _ @@ -938,42 +941,45 @@ do --> register textures and fonts for shared media local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") --default bars - SharedMedia:Register ("statusbar", "Details D'ictum", [[Interface\AddOns\Details\images\bar4]]) - SharedMedia:Register ("statusbar", "Details Vidro", [[Interface\AddOns\Details\images\bar4_vidro]]) - SharedMedia:Register ("statusbar", "Details D'ictum (reverse)", [[Interface\AddOns\Details\images\bar4_reverse]]) - --flat bars - SharedMedia:Register ("statusbar", "Details Serenity", [[Interface\AddOns\Details\images\bar_serenity]]) - SharedMedia:Register ("statusbar", "BantoBar", [[Interface\AddOns\Details\images\BantoBar]]) - SharedMedia:Register ("statusbar", "Skyline", [[Interface\AddOns\Details\images\bar_skyline]]) - SharedMedia:Register ("statusbar", "WorldState Score", [[Interface\WorldStateFrame\WORLDSTATEFINALSCORE-HIGHLIGHT]]) - SharedMedia:Register ("statusbar", "DGround", [[Interface\AddOns\Details\images\bar_background]]) - SharedMedia:Register ("statusbar", "Details Flat", [[Interface\AddOns\Details\images\bar_background]]) - SharedMedia:Register ("statusbar", "Splitbar", [[Interface\AddOns\Details\images\bar_textures\split_bar]]) - SharedMedia:Register ("statusbar", "Details2020", [[Interface\AddOns\Details\images\bar_textures\texture2020]]) - - --window bg and bar border - 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 ("border", "Details BarBorder 3", [[Interface\AddOns\Details\images\border_3]]) - SharedMedia:Register ("border", "1 Pixel", [[Interface\Buttons\WHITE8X8]]) - --misc fonts - SharedMedia:Register ("font", "Oswald", [[Interface\Addons\Details\fonts\Oswald-Regular.ttf]]) - SharedMedia:Register ("font", "Nueva Std Cond", [[Interface\Addons\Details\fonts\Nueva Std Cond.ttf]]) - SharedMedia:Register ("font", "Accidental Presidency", [[Interface\Addons\Details\fonts\Accidental Presidency.ttf]]) - SharedMedia:Register ("font", "TrashHand", [[Interface\Addons\Details\fonts\TrashHand.TTF]]) - SharedMedia:Register ("font", "Harry P", [[Interface\Addons\Details\fonts\HARRYP__.TTF]]) - SharedMedia:Register ("font", "FORCED SQUARE", [[Interface\Addons\Details\fonts\FORCED SQUARE.ttf]]) - - SharedMedia:Register ("sound", "d_gun1", [[Interface\Addons\Details\sounds\sound_gun2.ogg]]) - SharedMedia:Register ("sound", "d_gun2", [[Interface\Addons\Details\sounds\sound_gun3.ogg]]) - SharedMedia:Register ("sound", "d_jedi1", [[Interface\Addons\Details\sounds\sound_jedi1.ogg]]) - SharedMedia:Register ("sound", "d_whip1", [[Interface\Addons\Details\sounds\sound_whip1.ogg]]) + SharedMedia:Register("statusbar", "Details D'ictum", [[Interface\AddOns\Details\images\bar4]]) + SharedMedia:Register("statusbar", "Details Vidro", [[Interface\AddOns\Details\images\bar4_vidro]]) + SharedMedia:Register("statusbar", "Details D'ictum (reverse)", [[Interface\AddOns\Details\images\bar4_reverse]]) - SharedMedia:Register ("sound", "Details Threat Warning Volume 1", [[Interface\Addons\Details\sounds\threat_warning_1.ogg]]) - SharedMedia:Register ("sound", "Details Threat Warning Volume 2", [[Interface\Addons\Details\sounds\threat_warning_2.ogg]]) - SharedMedia:Register ("sound", "Details Threat Warning Volume 3", [[Interface\Addons\Details\sounds\threat_warning_3.ogg]]) - SharedMedia:Register ("sound", "Details Threat Warning Volume 4", [[Interface\Addons\Details\sounds\threat_warning_4.ogg]]) + --flat bars + SharedMedia:Register("statusbar", "Details Serenity", [[Interface\AddOns\Details\images\bar_serenity]]) + SharedMedia:Register("statusbar", "BantoBar", [[Interface\AddOns\Details\images\BantoBar]]) + SharedMedia:Register("statusbar", "Skyline", [[Interface\AddOns\Details\images\bar_skyline]]) + SharedMedia:Register("statusbar", "WorldState Score", [[Interface\WorldStateFrame\WORLDSTATEFINALSCORE-HIGHLIGHT]]) + SharedMedia:Register("statusbar", "DGround", [[Interface\AddOns\Details\images\bar_background]]) + SharedMedia:Register("statusbar", "Details Flat", [[Interface\AddOns\Details\images\bar_background]]) + SharedMedia:Register("statusbar", "Splitbar", [[Interface\AddOns\Details\images\bar_textures\split_bar]]) + SharedMedia:Register("statusbar", "Details2020", [[Interface\AddOns\Details\images\bar_textures\texture2020]]) + SharedMedia:Register("statusbar", "Left White Gradient", [[Interface\AddOns\Details\images\bar_textures\gradient_white_10percent_left]]) + + --window bg and bar order + 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("border", "Details BarBorder 3", [[Interface\AddOns\Details\images\border_3]]) + SharedMedia:Register("border", "1 Pixel", [[Interface\Buttons\WHITE8X8]]) + + --misc fonts + SharedMedia:Register("font", "Oswald", [[Interface\Addons\Details\fonts\Oswald-Regular.ttf]]) + SharedMedia:Register("font", "Nueva Std Cond", [[Interface\Addons\Details\fonts\Nueva Std Cond.ttf]]) + SharedMedia:Register("font", "Accidental Presidency", [[Interface\Addons\Details\fonts\Accidental Presidency.ttf]]) + SharedMedia:Register("font", "TrashHand", [[Interface\Addons\Details\fonts\TrashHand.TTF]]) + SharedMedia:Register("font", "Harry P", [[Interface\Addons\Details\fonts\HARRYP__.TTF]]) + SharedMedia:Register("font", "FORCED SQUARE", [[Interface\Addons\Details\fonts\FORCED SQUARE.ttf]]) + + SharedMedia:Register("sound", "d_gun1", [[Interface\Addons\Details\sounds\sound_gun2.ogg]]) + SharedMedia:Register("sound", "d_gun2", [[Interface\Addons\Details\sounds\sound_gun3.ogg]]) + SharedMedia:Register("sound", "d_jedi1", [[Interface\Addons\Details\sounds\sound_jedi1.ogg]]) + SharedMedia:Register("sound", "d_whip1", [[Interface\Addons\Details\sounds\sound_whip1.ogg]]) + + SharedMedia:Register("sound", "Details Threat Warning Volume 1", [[Interface\Addons\Details\sounds\threat_warning_1.ogg]]) + SharedMedia:Register("sound", "Details Threat Warning Volume 2", [[Interface\Addons\Details\sounds\threat_warning_2.ogg]]) + SharedMedia:Register("sound", "Details Threat Warning Volume 3", [[Interface\Addons\Details\sounds\threat_warning_3.ogg]]) + SharedMedia:Register("sound", "Details Threat Warning Volume 4", [[Interface\Addons\Details\sounds\threat_warning_4.ogg]]) diff --git a/classes/class_combat.lua b/classes/class_combat.lua index fe46a57d..68fcc8e9 100644 --- a/classes/class_combat.lua +++ b/classes/class_combat.lua @@ -40,7 +40,7 @@ --> api functions --combat (container type, actor name) - _detalhes.call_combate = function (self, class_type, name) + _detalhes.call_combate = function(self, class_type, name) local container = self[class_type] local index_mapa = container._NameIndexTable [name] local actor = container._ActorTable [index_mapa] @@ -664,7 +664,7 @@ tabela_combate.shadow = nil end - combate.__sub = function (combate1, combate2) + combate.__sub = function(combate1, combate2) if (combate1 ~= _detalhes.tabela_overall) then return @@ -739,7 +739,7 @@ end - combate.__add = function (combate1, combate2) + combate.__add = function(combate1, combate2) local all_containers = {combate2 [class_type_dano]._ActorTable, combate2 [class_type_cura]._ActorTable, combate2 [class_type_e_energy]._ActorTable, combate2 [class_type_misc]._ActorTable} local custom_combat diff --git a/classes/class_custom.lua b/classes/class_custom.lua index 1b31eacf..3f0f6aa9 100644 --- a/classes/class_custom.lua +++ b/classes/class_custom.lua @@ -169,7 +169,7 @@ --> get the attribute local attribute = custom_object:GetAttribute() --"damagedone" - --> get the custom function (actor, source, target, spellid) + --> get the custom function(actor, source, target, spellid) local func = atributo_custom [attribute] --> get the combat container @@ -249,9 +249,9 @@ if (actor.id) then if (actor.id == 1) then - actor.report_name = GetSpellLink (6603) + actor.report_name = GetSpellLink(6603) elseif (actor.id > 10) then - actor.report_name = GetSpellLink (actor.id) + actor.report_name = GetSpellLink(actor.id) else actor.report_name = actor.nome end @@ -755,7 +755,7 @@ function atributo_custom:ResetCustomActorContainer() for _, actor in _ipairs (self._ActorTable) do actor.value = actor.value - _math_floor (actor.value) - --actor.value = _detalhes:GetOrderNumber (actor.nome) + --actor.value = _detalhes:GetOrderNumber(actor.nome) end end @@ -880,7 +880,7 @@ if (icon_cache [actor.nome]) then newActor.icon = icon_cache [actor.nome] else - local _, _, icon = _GetSpellInfo (actor.id) + local _, _, icon = _GetSpellInfo(actor.id) if (icon) then icon_cache [actor.nome] = icon newActor.icon = icon @@ -924,7 +924,7 @@ }, {__index = atributo_custom}) end - local custom_sort = function (t1, t2) + local custom_sort = function(t1, t2) return t1.value > t2.value end function atributo_custom:Sort (container) @@ -964,7 +964,7 @@ end if (actor.id) then - _detalhes:AddTooltipSpellHeaderText (select (1, _GetSpellInfo (actor.id)), "yellow", 1, select (3, _GetSpellInfo (actor.id)), 0.90625, 0.109375, 0.15625, 0.875) + _detalhes:AddTooltipSpellHeaderText (select (1, _GetSpellInfo(actor.id)), "yellow", 1, select (3, _GetSpellInfo(actor.id)), 0.90625, 0.109375, 0.15625, 0.875) else _detalhes:AddTooltipSpellHeaderText (custom_object:GetName(), "yellow", 1, custom_object:GetIcon(), 0.90625, 0.109375, 0.15625, 0.875) end @@ -1272,7 +1272,7 @@ if (debuff_uptime_container) then local focus_potion = debuff_uptime_container [DETAILS_FOCUS_POTION_ID] if (focus_potion) then - local name, _, icon = GetSpellInfo (DETAILS_FOCUS_POTION_ID) + local name, _, icon = GetSpellInfo(DETAILS_FOCUS_POTION_ID) GameCooltip:AddLine (name, 1) --> can use only 1 focus potion (can't be pre-potion) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) @@ -1286,7 +1286,7 @@ local potionUsed = buff_uptime_container [spellId] if (potionUsed) then - local name, _, icon = GetSpellInfo (spellId) + local name, _, icon = GetSpellInfo(spellId) GameCooltip:AddLine (name, potionUsed.activedamt) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) @@ -1367,28 +1367,28 @@ local hs = actor:GetSpell (6262) if (hs) then GameCooltip:AddLine (select (1, GetSpellInfo(6262)), _detalhes:ToK(hs.total)) - GameCooltip:AddIcon (select (3, GetSpellInfo (6262)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) + GameCooltip:AddIcon (select (3, GetSpellInfo(6262)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) GameCooltip:AddStatusBar (100, 1, R, G, B, A) end local pot = actor:GetSpell (DETAILS_HEALTH_POTION_ID) if (pot) then GameCooltip:AddLine (select (1, GetSpellInfo(DETAILS_HEALTH_POTION_ID)), _detalhes:ToK(pot.total)) - GameCooltip:AddIcon (select (3, GetSpellInfo (DETAILS_HEALTH_POTION_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) + GameCooltip:AddIcon (select (3, GetSpellInfo(DETAILS_HEALTH_POTION_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) GameCooltip:AddStatusBar (100, 1, R, G, B, A) end local pot = actor:GetSpell (DETAILS_HEALTH_POTION2_ID) if (pot) then GameCooltip:AddLine (select (1, GetSpellInfo(DETAILS_HEALTH_POTION2_ID)), _detalhes:ToK(pot.total)) - GameCooltip:AddIcon (select (3, GetSpellInfo (DETAILS_HEALTH_POTION2_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) + GameCooltip:AddIcon (select (3, GetSpellInfo(DETAILS_HEALTH_POTION2_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) GameCooltip:AddStatusBar (100, 1, R, G, B, A) end local pot = actor:GetSpell (DETAILS_REJU_POTION_ID) if (pot) then GameCooltip:AddLine (select (1, GetSpellInfo(DETAILS_REJU_POTION_ID)), _detalhes:ToK(pot.total)) - GameCooltip:AddIcon (select (3, GetSpellInfo (DETAILS_REJU_POTION_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) + GameCooltip:AddIcon (select (3, GetSpellInfo(DETAILS_REJU_POTION_ID)), 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) GameCooltip:AddStatusBar (100, 1, R, G, B, A) end @@ -1591,7 +1591,7 @@ table.sort (spells, _detalhes.Sort2) for index, spell in ipairs (spells) do - local name, _, icon = GetSpellInfo (spell [1]) + local name, _, icon = GetSpellInfo(spell [1]) GameCooltip:AddLine (name, spell [2]) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) @@ -1733,7 +1733,7 @@ table.sort (spells, _detalhes.Sort2) for index, spell in ipairs (spells) do - local name, _, icon = GetSpellInfo (spell [1]) + local name, _, icon = GetSpellInfo(spell [1]) GameCooltip:AddLine (name, spell [2]) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height) @@ -1894,9 +1894,9 @@ local spell_cast = misc_actor.spell_cast and misc_actor.spell_cast [spell.id] if (not spell_cast and misc_actor.spell_cast) then - local spellname = GetSpellInfo (spell.id) + local spellname = GetSpellInfo(spell.id) for casted_spellid, amount in pairs (misc_actor.spell_cast) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then spell_cast = amount .. " (|cFFFFFF00?|r)" end @@ -2388,7 +2388,7 @@ for i, t in ipairs (sortedList) do local spellID, total = unpack (t) if (total > 1) then - local spellName, _, spellIcon = Details.GetSpellInfo (spellID) + local spellName, _, spellIcon = Details.GetSpellInfo(spellID) local spellPercent = total / playerTotal * 100 local formatedSpellPercent = format("%.1f", spellPercent) diff --git a/classes/class_damage.lua b/classes/class_damage.lua index a466c4ec..47ff2792 100644 --- a/classes/class_damage.lua +++ b/classes/class_damage.lua @@ -1,5 +1,5 @@ --- damage object +--damage object local Details = _G.Details local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) local Translit = LibStub ("LibTranslit-1.0") @@ -7,9 +7,9 @@ local _ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> local pointers +--local pointers - local _cstr = string.format --lua local + local format = string.format --lua local local _math_floor = math.floor --lua local local _table_sort = table.sort --lua local local _table_insert = table.insert --lua local @@ -22,20 +22,20 @@ local _math_min = math.min --lua local local _math_max = math.max --lua local local _math_abs = math.abs --lua local - local _bit_band = bit.band --lua local - local _unpack = unpack --lua local + local bitBand = bit.band --lua local + local unpack = unpack --lua local local _type = type --lua local local GameTooltip = GameTooltip --api local local _IsInRaid = IsInRaid --api local local _IsInGroup = IsInGroup --api local - + local GetSpellInfo = GetSpellInfo --api local local _GetSpellInfo = Details.getspellinfo --details api - local _string_replace = Details.string.replace --details api + local stringReplace = Details.string.replace --details api --show more information about spells local debugmode = false - + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> constants @@ -55,12 +55,12 @@ local class_type = Details.atributos.dano local ToKFunctions = Details.ToKFunctions - local SelectedToKFunction = ToKFunctions [1] - + local SelectedToKFunction = ToKFunctions[1] + local UsingCustomLeftText = false local UsingCustomRightText = false - - local FormatTooltipNumber = ToKFunctions [8] + + local FormatTooltipNumber = ToKFunctions[8] local TooltipMaximizedMethod = 1 --local CLASS_ICON_TCOORDS = _G.CLASS_ICON_TCOORDS @@ -68,19 +68,19 @@ Details.tooltip_key_overlay1 = {1, 1, 1, .2} Details.tooltip_key_overlay2 = {1, 1, 1, .5} - + Details.tooltip_key_size_width = 24 Details.tooltip_key_size_height = 10 local enemies_background = {value = 100, color = {0.1960, 0.1960, 0.1960, 0.8697}, texture = "Interface\\AddOns\\Details\\images\\bar_background2"} - + local headerColor = {1, 0.9, 0.0, 1} local info = Details.playerDetailWindow local keyName local OBJECT_TYPE_PLAYER = 0x00000400 - + local ntable = {} --temp local vtable = {} --temp local tooltip_void_zone_temp = {} --temp @@ -88,325 +88,337 @@ local bs_index_table = {} --temp local bs_tooltip_table local frags_tooltip_table - + local tooltip_temp_table = {} local OBJECT_TYPE_FRIENDLY_NPC = 0x00000A18 + local ignoredEnemyNpcsTable = { + [31216] = true, --mirror image + [53006] = true, --spirit link totem + [63508] = true, --xuen + [73967] = true, --xuen + } + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> exported functions +--exported functions ---[[exported]] function Details:CreateActorLastEventTable() - local t = { {}, {}, {}, {}, {}, {}, {}, {} } - t.n = 1 - return t - end - - function atributo_damage:CreateFFTable (target_name) - local new_table = {total = 0, spells = {}} - self.friendlyfire [target_name] = new_table - return new_table - end - ---[[exported]] function Details:CreateActorAvoidanceTable (no_overall) - if (no_overall) then - local t = {["ALL"] = 0, ["DODGE"] = 0, ["PARRY"] = 0, ["HITS"] = 0, ["ABSORB"] = 0, --quantas vezes foi dodge, parry, quandos hits tomou, quantos absorbs teve - ["FULL_HIT"] = 0, ["FULL_ABSORBED"] = 0, ["PARTIAL_ABSORBED"] = 0, --full hit full absorbed and partial absortion - ["FULL_HIT_AMT"] = 0, ["PARTIAL_ABSORB_AMT"] = 0, ["ABSORB_AMT"] = 0, ["FULL_ABSORB_AMT"] = 0, --amounts - ["BLOCKED_HITS"] = 0, ["BLOCKED_AMT"] = 0, --amount of hits blocked - amout of damage mitigated - } - return t - else - local t = { - overall = {["ALL"] = 0, ["DODGE"] = 0, ["PARRY"] = 0, ["HITS"] = 0, ["ABSORB"] = 0, --quantas vezes foi dodge, parry, quandos hits tomou, quantos absorbs teve - ["FULL_HIT"] = 0, ["FULL_ABSORBED"] = 0, ["PARTIAL_ABSORBED"] = 0, --full hit full absorbed and partial absortion - ["FULL_HIT_AMT"] = 0, ["PARTIAL_ABSORB_AMT"] = 0, ["ABSORB_AMT"] = 0, ["FULL_ABSORB_AMT"] = 0, --amounts - ["BLOCKED_HITS"] = 0, ["BLOCKED_AMT"] = 0, --amount of hits blocked - amout of damage mitigated - } - } - return t - end +function Details:CreateActorLastEventTable() --[[exported]] + local t = { {}, {}, {}, {}, {}, {}, {}, {} } + t.n = 1 + return t +end + +function atributo_damage:CreateFFTable(targetName) --[[exported]] + local newTable = {total = 0, spells = {}} + self.friendlyfire[targetName] = newTable + return newTable +end + +function Details:CreateActorAvoidanceTable(noOverall) --[[exported]] + if (noOverall) then + local avoidanceTable = {["ALL"] = 0, ["DODGE"] = 0, ["PARRY"] = 0, ["HITS"] = 0, ["ABSORB"] = 0, --quantas vezes foi dodge, parry, quandos hits tomou, quantos absorbs teve + ["FULL_HIT"] = 0, ["FULL_ABSORBED"] = 0, ["PARTIAL_ABSORBED"] = 0, --full hit full absorbed and partial absortion + ["FULL_HIT_AMT"] = 0, ["PARTIAL_ABSORB_AMT"] = 0, ["ABSORB_AMT"] = 0, ["FULL_ABSORB_AMT"] = 0, --amounts + ["BLOCKED_HITS"] = 0, ["BLOCKED_AMT"] = 0, --amount of hits blocked - amout of damage mitigated + } + return avoidanceTable + else + local avoidanceTable = { + overall = {["ALL"] = 0, ["DODGE"] = 0, ["PARRY"] = 0, ["HITS"] = 0, ["ABSORB"] = 0, --quantas vezes foi dodge, parry, quandos hits tomou, quantos absorbs teve + ["FULL_HIT"] = 0, ["FULL_ABSORBED"] = 0, ["PARTIAL_ABSORBED"] = 0, --full hit full absorbed and partial absortion + ["FULL_HIT_AMT"] = 0, ["PARTIAL_ABSORB_AMT"] = 0, ["ABSORB_AMT"] = 0, ["FULL_ABSORB_AMT"] = 0, --amounts + ["BLOCKED_HITS"] = 0, ["BLOCKED_AMT"] = 0, --amount of hits blocked - amout of damage mitigated + } + } + return avoidanceTable + end +end + +function Details.SortGroup(container, keyName2) --[[exported]] + keyName = keyName2 + return _table_sort(container, Details.SortKeyGroup) +end + +function Details.SortKeyGroup (table1, table2) --[[exported]] + if (table1.grupo and table2.grupo) then + return table1[keyName] > table2[keyName] + + elseif (table1.grupo and not table2.grupo) then + return true + + elseif (not table1.grupo and table2.grupo) then + return false + + else + return table1[keyName] > table2[keyName] + end +end + + +function Details.SortKeySimple(table1, table2) --[[exported]] + return table1[keyName] > table2[keyName] +end + + +function Details:ContainerSort (container, amount, keyName2) --[[exported]] + keyName = keyName2 + _table_sort(container, Details.SortKeySimple) + + if (amount) then + for i = amount, 1, -1 do --> de tr�s pra frente + if (container[i][keyName] < 1) then + amount = amount-1 + else + break end + end ---[[exported]] function Details.SortGroup (container, keyName2) - keyName = keyName2 - return _table_sort (container, Details.SortKeyGroup) - end + return amount + end +end ---[[exported]] function Details.SortKeyGroup (table1, table2) - if (table1.grupo and table2.grupo) then - return table1 [keyName] > table2 [keyName] +function Details:IsGroupPlayer() --[[exported]] + return self.grupo +end - elseif (table1.grupo and not table2.grupo) then - return true - elseif (not table1.grupo and table2.grupo) then - return false +function Details:IsPetOrGuardian() --[[exported]] + return self.owner and true or false +end - else - return table1 [keyName] > table2 [keyName] - end - end +function Details:IsPlayer() --[[exported]] + if (self.flag_original) then + if (bitBand(self.flag_original, OBJECT_TYPE_PLAYER) ~= 0) then + return true + end + end + return false +end ---[[exported]] function Details.SortKeySimple (table1, table2) - return table1 [keyName] > table2 [keyName] - end - ---[[exported]] function Details:ContainerSort (container, amount, keyName2) - keyName = keyName2 - _table_sort (container, Details.SortKeySimple) - - if (amount) then - for i = amount, 1, -1 do --> de tr�s pra frente - if (container[i][keyName] < 1) then - amount = amount-1 - else - break - end - end - - return amount - end - end - ---[[ exported]] function Details:IsGroupPlayer() - return self.grupo - end - ---[[ exported]] function Details:IsPetOrGuardian() - return self.owner and true or false - end - ---[[ exported]] function Details:IsPlayer() - if (self.flag_original) then - if (_bit_band (self.flag_original, OBJECT_TYPE_PLAYER) ~= 0) then - return true - end - end +function Details:IsNeutralOrEnemy() --[[exported]] + if (self.flag_original) then + if (bitBand(self.flag_original, 0x00000060) ~= 0) then + local npcid1 = Details:GetNpcIdFromGuid(self.serial) + if (ignoredEnemyNpcsTable[npcid1]) then return false end + return true + end + end + return false +end - local ignored_enemy_npcs = { - [31216] = true, --mirror image - [53006] = true, --spirit link totem - [63508] = true, --xuen - [73967] = true, --xuen - } - - -- Night-Twisted Brute - Creature-0-3024-1228-19402-85241-00001E2097 - ---[[ exported]] function Details:IsNeutralOrEnemy() - if (self.flag_original) then - if (_bit_band (self.flag_original, 0x00000060) ~= 0) then - local npcid1 = Details:GetNpcIdFromGuid (self.serial) - if (ignored_enemy_npcs [npcid1]) then - return false - end - return true - end - end - return false - end - - function Details:IsFriendlyNpc() - local flag = self.flag_original - if (flag) then - if (bit.band(flag, 0x00000008) ~= 0) then - if (bit.band(flag, 0x00000010) ~= 0) then - if (bit.band(flag, 0x00000800) ~= 0) then - return true - end - end - end - end - return false - end - ---[[ exported]] function Details:IsEnemy() - if (self.flag_original) then - if (_bit_band (self.flag_original, 0x00000060) ~= 0) then - local npcid1 = Details:GetNpcIdFromGuid (self.serial) - if (ignored_enemy_npcs [npcid1]) then - return false - end - return true - end - end - return false - end - ---[[ exported]] function Details:GetSpellList() - return self.spells._ActorTable - end - - -- enemies (sort function) - local sortEnemies = function (t1, t2) - local a = _bit_band (t1.flag_original, 0x00000060) - local b = _bit_band (t2.flag_original, 0x00000060) - - if (a ~= 0 and b ~= 0) then - local npcid1 = Details:GetNpcIdFromGuid (t1.serial) - local npcid2 = Details:GetNpcIdFromGuid (t2.serial) - - if (not ignored_enemy_npcs [npcid1] and not ignored_enemy_npcs [npcid2]) then - return t1.damage_taken > t2.damage_taken - elseif (ignored_enemy_npcs [npcid1] and not ignored_enemy_npcs [npcid2]) then - return false - elseif (not ignored_enemy_npcs [npcid1] and ignored_enemy_npcs [npcid2]) then - return true - else - return t1.damage_taken > t2.damage_taken - end - - elseif (a ~= 0 and b == 0) then +function Details:IsFriendlyNpc() --[[exported]] + local flag = self.flag_original + if (flag) then + if (bitBand(flag, 0x00000008) ~= 0) then + if (bitBand(flag, 0x00000010) ~= 0) then + if (bitBand(flag, 0x00000800) ~= 0) then return true - elseif (a == 0 and b ~= 0) then - return false end - + end + end + end + return false +end + +function Details:IsEnemy() --[[exported]] + if (self.flag_original) then + if (bitBand(self.flag_original, 0x00000060) ~= 0) then + local npcId = Details:GetNpcIdFromGuid(self.serial) + if (ignoredEnemyNpcsTable[npcId]) then return false end + return true + end + end + return false +end + +function Details:GetSpellList() --[[ exported]] + return self.spells._ActorTable +end ---[[exported]] function Details:ContainerSortEnemies (container, amount, keyName2) +--enemies(sort function) +local sortEnemies = function(t1, t2) + local a = bitBand(t1.flag_original, 0x00000060) + local b = bitBand(t2.flag_original, 0x00000060) - keyName = keyName2 - - _table_sort (container, sortEnemies) - - local total = 0 - - for index, player in _ipairs (container) do - local npcid1 = Details:GetNpcIdFromGuid (player.serial) - --p rint (player.nome, npcid1, ignored_enemy_npcs [npcid1]) - if (_bit_band (player.flag_original, 0x00000060) ~= 0 and not ignored_enemy_npcs [npcid1]) then --> � um inimigo - total = total + player [keyName] - else - amount = index-1 - break - end - end - - return amount, total - end + if (a ~= 0 and b ~= 0) then + local npcid1 = Details:GetNpcIdFromGuid(t1.serial) + local npcid2 = Details:GetNpcIdFromGuid(t2.serial) + + if (not ignoredEnemyNpcsTable[npcid1] and not ignoredEnemyNpcsTable[npcid2]) then + return t1.damage_taken > t2.damage_taken + + elseif (ignoredEnemyNpcsTable[npcid1] and not ignoredEnemyNpcsTable[npcid2]) then + return false + + elseif (not ignoredEnemyNpcsTable[npcid1] and ignoredEnemyNpcsTable[npcid2]) then + return true + else + return t1.damage_taken > t2.damage_taken + end + + elseif (a ~= 0 and b == 0) then + return true + + elseif (a == 0 and b ~= 0) then + return false + end + + return false +end + +function Details:ContainerSortEnemies (container, amount, keyName2) --[[exported]] + keyName = keyName2 + + _table_sort(container, sortEnemies) + + local total = 0 + + for index, player in _ipairs (container) do + local npcid1 = Details:GetNpcIdFromGuid(player.serial) + --p rint (player.nome, npcid1, ignored_enemy_npcs [npcid1]) + if (bitBand(player.flag_original, 0x00000060) ~= 0 and not ignoredEnemyNpcsTable [npcid1]) then --> � um inimigo + total = total + player [keyName] + else + amount = index-1 + break + end + end + + return amount, total +end + +function Details:TooltipForCustom (barra) --[[exported]] + GameCooltip:AddLine (Loc ["STRING_LEFT_CLICK_SHARE"]) + return true +end ---[[Exported]] function Details:TooltipForCustom (barra) - GameCooltip:AddLine (Loc ["STRING_LEFT_CLICK_SHARE"]) - return true - end - --[[ Void Zone Sort]] - local void_zone_sort = function (t1, t2) - if (t1.damage == t2.damage) then - return t1.nome <= t2.nome - else - return t1.damage > t2.damage - end - end +local void_zone_sort = function(t1, t2) + if (t1.damage == t2.damage) then + return t1.nome <= t2.nome + else + return t1.damage > t2.damage + end +end ---[[exported]] function Details.Sort1 (table1, table2) - return table1 [1] > table2 [1] - end - ---[[exported]] function Details.Sort2 (table1, table2) - return table1 [2] > table2 [2] - end - ---[[exported]] function Details.Sort3 (table1, table2) - return table1 [3] > table2 [3] - end - ---[[exported]] function Details.Sort4 (table1, table2) - return table1 [4] > table2 [4] - end - ---[[exported]] function Details.Sort4Reverse (table1, table2) - if (not table2) then - return true - end - return table1 [4] < table2 [4] - end +function Details.Sort1 (table1, table2) --[[exported]] + return table1[1] > table2[1] +end ---[[exported]] function Details:GetBarColor(actor) - actor = actor or self +function Details.Sort2 (table1, table2) --[[exported]] + return table1[2] > table2[2] +end - if (actor.monster) then - return _unpack(Details.class_colors.ENEMY) +function Details.Sort3 (table1, table2) --[[exported]] + return table1[3] > table2[3] +end - elseif (actor.customColor) then - return _unpack(actor.customColor) +function Details.Sort4 (table1, table2) --[[exported]] + return table1[4] > table2[4] +end - elseif (actor.spellicon) then - return 0.729, 0.917, 1 +function Details.Sort4Reverse (table1, table2) --[[exported]] + if (not table2) then + return true + end + return table1[4] < table2[4] +end - elseif (actor.owner) then - return _unpack(Details.class_colors[actor.owner.classe or "UNKNOW"]) +function Details:GetBarColor(actor) --[[exported]] + actor = actor or self - elseif (actor.arena_team and Details.color_by_arena_team) then - if (actor.arena_team == 0) then - return _unpack(Details.class_colors.ARENA_GREEN) - else - return _unpack(Details.class_colors.ARENA_YELLOW) - end + if (actor.monster) then + return unpack(Details.class_colors.ENEMY) - else - if (not is_player_class [actor.classe] and actor.flag_original and _bit_band (actor.flag_original, 0x00000020) ~= 0) then --> neutral - return _unpack(Details.class_colors.NEUTRAL) - elseif (actor.color) then - return _unpack(actor.color) - else - return _unpack(Details.class_colors [actor.classe or "UNKNOW"]) - end - end - end + elseif (actor.customColor) then + return unpack(actor.customColor) + + elseif (actor.spellicon) then + return 0.729, 0.917, 1 + + elseif (actor.owner) then + return unpack(Details.class_colors[actor.owner.classe or "UNKNOW"]) + + elseif (actor.arena_team and Details.color_by_arena_team) then + if (actor.arena_team == 0) then + return unpack(Details.class_colors.ARENA_GREEN) + else + return unpack(Details.class_colors.ARENA_YELLOW) + end + + else + if (not is_player_class[actor.classe] and actor.flag_original and bitBand(actor.flag_original, 0x00000020) ~= 0) then --> neutral + return unpack(Details.class_colors.NEUTRAL) + + elseif (actor.color) then + return unpack(actor.color) + + else + return unpack(Details.class_colors[actor.classe or "UNKNOW"]) + end + end +end + +function Details:GetSpellLink(spellid) --[[exported]] + if (_type(spellid) ~= "number") then + return spellid + end + + if (spellid == 1) then --melee + return GetSpellLink(6603) + + elseif (spellid == 2) then --autoshot + return GetSpellLink(75) + + elseif (spellid > 10) then + return GetSpellLink(spellid) + else + local spellname = _GetSpellInfo(spellid) + return spellname + end +end + +function Details:GameTooltipSetSpellByID(spellid) --[[exported]] + if (spellid == 1) then + GameTooltip:SetSpellByID(6603) + + elseif (spellid == 2) then + GameTooltip:SetSpellByID(75) + + elseif (spellid > 10) then + GameTooltip:SetSpellByID(spellid) + + else + GameTooltip:SetSpellByID(spellid) + end +end ---[[exported]] function Details:GetSpellLink (spellid) - if (_type (spellid) ~= "number") then - return spellid - end - if (spellid == 1) then --melee - return GetSpellLink (6603) - elseif (spellid == 2) then --autoshot - return GetSpellLink (75) - elseif (spellid > 10) then - return GetSpellLink (spellid) - else - local spellname = _GetSpellInfo (spellid) - return spellname - end - end - ---[[exported]] function Details:GameTooltipSetSpellByID (spellid) - if (spellid == 1) then - GameTooltip:SetSpellByID (6603) - elseif (spellid == 2) then - GameTooltip:SetSpellByID (75) - elseif (spellid > 10) then - GameTooltip:SetSpellByID (spellid) - else - GameTooltip:SetSpellByID (spellid) - end - end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> class constructor +--class constructor function atributo_damage:NovaTabela (serial, nome, link) - local alphabetical = Details:GetOrderNumber (nome) - + local alphabetical = Details:GetOrderNumber(nome) + --> constructor local _new_damageActor = { - + tipo = class_type, - + total = alphabetical, totalabsorbed = alphabetical, total_without_pet = alphabetical, custom = 0, - + damage_taken = alphabetical, damage_from = {}, - + dps_started = false, last_event = 0, on_hold = false, @@ -416,32 +428,32 @@ end_time = nil, start_time = 0, - + pets = {}, - + raid_targets = {}, - + friendlyfire_total = 0, friendlyfire = {}, targets = {}, spells = container_habilidades:NovoContainer (container_damage) } - + _setmetatable (_new_damageActor, atributo_damage) - + return _new_damageActor end - - + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> special cases -- dps (calculate dps for actors) function atributo_damage:ContainerRefreshDps (container, combat_time) - + local total = 0 - + if (Details.time_type == 2 or not Details:CaptureGet ("damage")) then for _, actor in _ipairs (container) do if (actor.grupo) then @@ -457,15 +469,15 @@ total = total + actor.last_dps end end - + return total - end + end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> damage taken by spell - + local byspell_tooltip_background = {value = 100, color = {0.1960, 0.1960, 0.1960, 0.9097}, texture = [[Interface\AddOns\Details\images\bar_background2]]} - + function Details:ToolTipBySpell (instance, tabela, thisLine, keydown) local GameCooltip = GameCooltip @@ -473,7 +485,7 @@ local from_spell = tabela [1] --spellid local from_spellname if (from_spell) then - from_spellname = select (1, GetSpellInfo (from_spell)) + from_spellname = select (1, GetSpellInfo(from_spell)) end --> get a list of all damage actors @@ -494,15 +506,15 @@ for index, character in ipairs (AllDamageCharacters) do if (is_custom_spell) then - for playername, ff_table in pairs (character.friendlyfire) do + for playername, ff_table in pairs(character.friendlyfire) do if (ff_table.spells [from_spell]) then local damage_actor = combat (1, playername) local heal_actor = combat (2, playername) - + if ((damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()))) then - + local got - + for index, t in ipairs (Targets) do if (t[1] == playername) then t[2] = t[2] + ff_table.spells [from_spell] @@ -514,7 +526,7 @@ break end end - + if (not got) then Targets [#Targets+1] = {playername, ff_table.spells [from_spell]} total = total + ff_table.spells [from_spell] @@ -526,12 +538,12 @@ end end else - for playername, ff_table in pairs (character.friendlyfire) do - for spellid, amount in pairs (ff_table.spells) do - local spellname = select (1, GetSpellInfo (spellid)) + for playername, ff_table in pairs(character.friendlyfire) do + for spellid, amount in pairs(ff_table.spells) do + local spellname = select (1, GetSpellInfo(spellid)) if (spellname == from_spellname) then local damage_actor = combat (1, playername) - local heal_actor = combat (2, playername) + local heal_actor = combat (2, playername) if ((damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()))) then local got for index, t in ipairs (Targets) do @@ -545,30 +557,30 @@ break end end - + if (not got) then Targets [#Targets+1] = {playername, amount} total = total + amount if (amount > top) then top = amount end - end + end end - end + end end end end - + --> search actors which used the spell shown in the bar local spell = character.spells._ActorTable [from_spell] - + if (spell) then - for targetname, amount in pairs (spell.targets) do - + for targetname, amount in pairs(spell.targets) do + local got = false local damage_actor = combat (1, targetname) local heal_actor = combat (2, targetname) - + if ( (damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()) ) ) then for index, t in ipairs (Targets) do if (t[1] == targetname) then @@ -581,7 +593,7 @@ break end end - + if (not got) then Targets [#Targets+1] = {targetname, amount} total = total + amount @@ -592,18 +604,18 @@ end end end - + if (not is_custom_spell) then - for spellid, spell in pairs (character.spells._ActorTable) do + for spellid, spell in pairs(character.spells._ActorTable) do if (spellid ~= from_spell) then - local spellname = select (1, GetSpellInfo (spellid)) + local spellname = select (1, GetSpellInfo(spellid)) if (spellname == from_spellname) then - for targetname, amount in pairs (spell.targets) do - + for targetname, amount in pairs(spell.targets) do + local got = false local damage_actor = combat (1, targetname) local heal_actor = combat (2, targetname) - + if ( (damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()) ) ) then for index, t in ipairs (Targets) do if (t[1] == targetname) then @@ -616,7 +628,7 @@ break end end - + if (not got) then Targets [#Targets+1] = {targetname, amount} total = total + amount @@ -626,9 +638,9 @@ end end end - end - end - end + end + end + end end end @@ -638,22 +650,22 @@ GameCooltip:SetOption ("StatusBarTexture", "Interface\\AddOns\\Details\\images\\bar_serenity") - local spellname, _, spellicon = select (1, _GetSpellInfo (from_spell)) + local spellname, _, spellicon = select (1, _GetSpellInfo(from_spell)) GameCooltip:AddLine (spellname .. " " .. Loc ["STRING_CUSTOM_ATTRIBUTE_DAMAGE"], nil, nil, headerColor, nil, 10) GameCooltip:AddIcon (spellicon, 1, 1, 14, 14, 0.078125, 0.921875, 0.078125, 0.921875) GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) Details:AddTooltipHeaderStatusbar (1, 1, 1, 0.5) - + local top = Targets[1] and Targets[1][2] local lineHeight = Details.tooltip.line_height - + for index, t in ipairs (Targets) do - GameCooltip:AddLine (Details:GetOnlyName(t[1]), Details:ToK (t[2]) .. " (" .. _cstr ("%.1f", t[2]/total*100) .. "%)") + GameCooltip:AddLine (Details:GetOnlyName(t[1]), Details:ToK(t[2]) .. " (" .. format ("%.1f", t[2]/total*100) .. "%)") local class, _, _, _, _, r, g, b = Details:GetClass (t[1]) - + GameCooltip:AddStatusBar (t[2]/top*100, 1, r, g, b, 0.8, false, byspell_tooltip_background) - + if (class) then local specID = Details:GetSpec (t[1]) if (specID) then @@ -663,7 +675,7 @@ local texture, l, r, t, b = Details:GetClassIcon (class) GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small_alpha", 1, 1, lineHeight, lineHeight, l, r, t, b) end - + elseif (t[1] == Loc ["STRING_TARGETS_OTHER1"]) then GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small_alpha", 1, 1, lineHeight, lineHeight, 0.25, 0.49609375, 0.75, 1) end @@ -671,22 +683,22 @@ GameCooltip:AddLine (" ") Details:AddTooltipReportLineText() - + GameCooltip:SetOption ("YSpacingMod", 0) GameCooltip:SetOwner (thisLine) GameCooltip:Show() - + end - + local function RefreshBarraBySpell (tabela, barra, instancia) atributo_damage:AtualizarBySpell (tabela, tabela.minha_barra, barra.colocacao, instancia) end - local on_switch_DTBS_show = function (instance) + local on_switch_DTBS_show = function(instance) instance:TrocaTabela (instance, true, 1, 8) return true end - + local DTBS_search_code = [[ --> get the parameters passed local combat, instance_container, instance = ... @@ -694,11 +706,11 @@ local total, top, amount = 0, 0, 0 --> hold the targets local Targets = {} - + local from_spell = @SPELLID@ local from_spellname if (from_spell) then - from_spellname = select (1, GetSpellInfo (from_spell)) + from_spellname = select (1, GetSpellInfo(from_spell)) end --> get a list of all damage actors @@ -712,17 +724,17 @@ end for index, character in ipairs (AllDamageCharacters) do - + if (is_custom_spell) then - for playername, ff_table in pairs (character.friendlyfire) do + for playername, ff_table in pairs(character.friendlyfire) do if (ff_table.spells [from_spell]) then local damage_actor = combat (1, playername) local heal_actor = combat (2, playername) - + if ((damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()))) then - + local got - + for index, t in ipairs (Targets) do if (t[1] == playername) then t[2] = t[2] + ff_table.spells [from_spell] @@ -733,7 +745,7 @@ break end end - + if (not got) then Targets [#Targets+1] = {playername, ff_table.spells [from_spell], damage_actor or heal_actor} if (ff_table.spells [from_spell] > top) then @@ -744,13 +756,13 @@ end end else - - for playername, ff_table in pairs (character.friendlyfire) do - for spellid, amount in pairs (ff_table.spells) do - local spellname = select (1, GetSpellInfo (spellid)) + + for playername, ff_table in pairs(character.friendlyfire) do + for spellid, amount in pairs(ff_table.spells) do + local spellname = select (1, GetSpellInfo(spellid)) if (spellname == from_spellname) then local damage_actor = combat (1, playername) - local heal_actor = combat (2, playername) + local heal_actor = combat (2, playername) if ((damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()))) then local got for index, t in ipairs (Targets) do @@ -763,30 +775,30 @@ break end end - + if (not got) then Targets [#Targets+1] = {playername, amount, damage_actor or heal_actor} if (amount > top) then top = amount end - end + end end - end + end end end end - + --> search actors which used the spell shown in the bar local spell = character.spells._ActorTable [from_spell] - + if (spell) then - for targetname, amount in pairs (spell.targets) do - + for targetname, amount in pairs(spell.targets) do + local got = false - + local damage_actor = combat (1, targetname) local heal_actor = combat (2, targetname) - + if ( (damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()) ) ) then for index, t in ipairs (Targets) do if (t[1] == targetname) then @@ -807,19 +819,19 @@ end end end - + if (not is_custom_spell) then - for spellid, spell in pairs (character.spells._ActorTable) do + for spellid, spell in pairs(character.spells._ActorTable) do if (spellid ~= from_spell) then - local spellname = select (1, GetSpellInfo (spellid)) + local spellname = select (1, GetSpellInfo(spellid)) if (spellname == from_spellname) then - for targetname, amount in pairs (spell.targets) do - + for targetname, amount in pairs(spell.targets) do + local got = false - + local damage_actor = combat (1, targetname) local heal_actor = combat (2, targetname) - + if ( (damage_actor or heal_actor) and ( (damage_actor and damage_actor:IsPlayer()) or (heal_actor and heal_actor:IsPlayer()) ) ) then for index, t in ipairs (Targets) do if (t[1] == targetname) then @@ -839,15 +851,15 @@ end end end - end - end - end - end - + end + end + end + end + end table.sort (Targets, Details.Sort2) - + local amount = 0 for index, t in ipairs (Targets) do instance_container:AddValue (t[3], t[2]) @@ -856,13 +868,13 @@ end return total, top, amount - ]] - + ]] + local function ShowDTBSInWindow (spell, instance) - local spellname, _, icon = _GetSpellInfo (spell [1]) + local spellname, _, icon = _GetSpellInfo(spell [1]) local custom_name = spellname .. " - " .. Loc ["STRING_CUSTOM_DTBS"] .. "" - + --check if already exists for index, CustomObject in _ipairs (Details.custom) do if (CustomObject:GetName() == custom_name) then @@ -873,7 +885,7 @@ return instance:TrocaTabela (instance.segmento, 5, index) end end - + --create a custom for this spell local new_custom_object = { name = custom_name, @@ -889,37 +901,37 @@ notooltip = true, OnSwitchShow = on_switch_DTBS_show, } - + local new_code = DTBS_search_code new_code = new_code:gsub ("@SPELLID@", spell [1]) new_custom_object.script = new_code - + tinsert (Details.custom, new_custom_object) setmetatable (new_custom_object, Details.atributo_custom) new_custom_object.__index = Details.atributo_custom return instance:TrocaTabela (instance.segmento, 5, #Details.custom) end - - local DTBS_format_name = function (player_name) return Details:GetOnlyName (player_name) end - local DTBS_format_amount = function (amount) return Details:ToK (amount) .. " (" .. _cstr ("%.1f", amount / bs_tooltip_table.damage_total * 100) .. "%)" end - + + local DTBS_format_name = function(player_name) return Details:GetOnlyName (player_name) end + local DTBS_format_amount = function(amount) return Details:ToK(amount) .. " (" .. format ("%.1f", amount / bs_tooltip_table.damage_total * 100) .. "%)" end + function atributo_damage:ReportSingleDTBSLine (spell, instance, ShiftKeyDown, ControlKeyDown) if (ControlKeyDown) then - local spellname, _, spellicon = _GetSpellInfo (spell[1]) + local spellname, _, spellicon = _GetSpellInfo(spell[1]) return Details:OpenAuraPanel (spell[1], spellname, spellicon) elseif (ShiftKeyDown) then return ShowDTBSInWindow (spell, instance) end - - local spelllink = Details:GetSpellLink (spell [1]) + + local spelllink = Details:GetSpellLink(spell [1]) local report_table = {"Details!: " .. Loc ["STRING_CUSTOM_DTBS"] .. " " .. spelllink} - + Details:FormatReportLines (report_table, bs_tooltip_table, DTBS_format_name, DTBS_format_amount) return Details:Reportar (report_table, {_no_current = true, _no_inverse = true, _custom = true}) end - + function atributo_damage:AtualizarBySpell (tabela, whichRowLine, colocacao, instance) tabela ["byspell"] = true --> marca que esta tabela � uma tabela de frags, usado no controla na hora de montar o tooltip local thisLine = instance.barras [whichRowLine] --> pega a refer�ncia da barra na janela @@ -931,14 +943,14 @@ thisLine.minha_tabela = tabela - local spellname, _, spellicon = _GetSpellInfo (tabela [1]) + local spellname, _, spellicon = _GetSpellInfo(tabela [1]) tabela.nome = spellname --> evita dar erro ao redimencionar a janela tabela.minha_barra = whichRowLine thisLine.colocacao = colocacao - if (not _getmetatable (tabela)) then - _setmetatable (tabela, {__call = RefreshBarraBySpell}) + if (not _getmetatable (tabela)) then + _setmetatable (tabela, {__call = RefreshBarraBySpell}) tabela._custom = true end @@ -946,9 +958,9 @@ local porcentagem if (instance.row_info.percent_type == 1) then - porcentagem = _cstr ("%.1f", tabela [2] / total * 100) + porcentagem = format ("%.1f", tabela [2] / total * 100) elseif (instance.row_info.percent_type == 2) then - porcentagem = _cstr ("%.1f", tabela [2] / instance.top * 100) + porcentagem = format ("%.1f", tabela [2] / instance.top * 100) end thisLine.lineText1:SetText(colocacao .. ". " .. spellname) @@ -968,68 +980,68 @@ local bars_brackets = instance:GetBarBracket() -- if (instance.use_multi_fontstrings) then - instance:SetInLineTexts(thisLine, "", (spell_damage and SelectedToKFunction (_, spell_damage) or ""), porcentagem) + instance:SetInLineTexts(thisLine, "", (spell_damage and SelectedToKFunction(_, spell_damage) or ""), porcentagem) else - thisLine.lineText4:SetText ((spell_damage and SelectedToKFunction (_, spell_damage) or "") .. bars_brackets[1] .. porcentagem .. bars_brackets[2]) + thisLine.lineText4:SetText((spell_damage and SelectedToKFunction(_, spell_damage) or "") .. bars_brackets[1] .. porcentagem .. bars_brackets[2]) end thisLine.lineText1:SetTextColor(1, 1, 1, 1) thisLine.lineText2:SetTextColor(1, 1, 1, 1) thisLine.lineText3:SetTextColor(1, 1, 1, 1) thisLine.lineText4:SetTextColor(1, 1, 1, 1) - - thisLine.lineText1:SetSize (thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) - + + thisLine.lineText1:SetSize(thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) + if (colocacao == 1) then - thisLine:SetValue (100) + thisLine:SetValue(100) else - thisLine:SetValue (tabela [2] / instance.top * 100) + thisLine:SetValue(tabela [2] / instance.top * 100) end - + if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then - Details.FadeHandler.Fader (thisLine, "out") + Details.FadeHandler.Fader(thisLine, "out") end - + if (instance.row_info.texture_class_colors) then if (tabela [3] > 1) then local r, g, b = Details:GetSpellSchoolColor (tabela [3]) - thisLine.textura:SetVertexColor (r, g, b) + thisLine.textura:SetVertexColor(r, g, b) else local r, g, b = Details:GetSpellSchoolColor (0) - thisLine.textura:SetVertexColor (r, g, b) + thisLine.textura:SetVertexColor(r, g, b) end end - thisLine.icone_classe:SetTexture (spellicon) - thisLine.icone_classe:SetTexCoord (0.078125, 0.921875, 0.078125, 0.921875) - thisLine.icone_classe:SetVertexColor (1, 1, 1) + thisLine.icone_classe:SetTexture(spellicon) + thisLine.icone_classe:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875) + thisLine.icone_classe:SetVertexColor(1, 1, 1) end - + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> frags - + function Details:ToolTipFrags (instancia, frag, thisLine, keydown) local name = frag [1] local GameCooltip = GameCooltip - + --> mantendo a fun��o o mais low level poss�vel local damage_container = instancia.showing [1] - + local frag_actor = damage_container._ActorTable [damage_container._NameIndexTable [ name ]] if (frag_actor) then - + local damage_taken_table = {} local took_damage_from = frag_actor.damage_from local total_damage_taken = frag_actor.damage_taken local total = 0 - for aggressor, _ in _pairs (took_damage_from) do - + for aggressor, _ in _pairs(took_damage_from) do + local damager_actor = damage_container._ActorTable [damage_container._NameIndexTable [ aggressor ]] - + if (damager_actor and not damager_actor.owner) then --> checagem por causa do total e do garbage collector que n�o limpa os names que deram dano local target_amount = damager_actor.targets [name] if (target_amount) then @@ -1038,9 +1050,9 @@ end end end - - _table_sort (damage_taken_table, Details.Sort2) - + + _table_sort(damage_taken_table, Details.Sort2) + Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_FROM"], headerColor, #damage_taken_table, [[Interface\Addons\Details\images\icons]], 0.126953125, 0.1796875, 0, 0.0546875) Details:AddTooltipHeaderStatusbar (1, 1, 1, 0.5) GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) @@ -1052,99 +1064,99 @@ min = 99 ismaximized = true end - + if (ismaximized) then GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) else GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1) end - + local top = damage_taken_table[1] and damage_taken_table[1][2] frags_tooltip_table = damage_taken_table frags_tooltip_table.damage_total = total - + local lineHeight = Details.tooltip.line_height - + if (#damage_taken_table > 0) then - for i = 1, math.min (min, #damage_taken_table) do + for i = 1, math.min (min, #damage_taken_table) do local t = damage_taken_table [i] - - GameCooltip:AddLine (Details:GetOnlyName (t[1]), FormatTooltipNumber (_, t[2]) .. " (" .. _cstr ("%.1f", t[2] / total * 100) .. "%)") + + GameCooltip:AddLine (Details:GetOnlyName (t[1]), FormatTooltipNumber (_, t[2]) .. " (" .. format ("%.1f", t[2] / total * 100) .. "%)") local classe = t[3] if (not classe) then classe = "UNKNOW" end - + if (classe == "UNKNOW") then GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, lineHeight, lineHeight, .25, .5, 0, 1) else - + local specID = Details:GetSpec (t[1]) if (specID) then local texture, l, r, t, b = Details:GetSpecIcon (specID, false) GameCooltip:AddIcon (texture, 1, 1, lineHeight, lineHeight, l, r, t, b) else - GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], nil, nil, lineHeight, lineHeight, _unpack (Details.class_coords [classe])) + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], nil, nil, lineHeight, lineHeight, unpack(Details.class_coords [classe])) end end - + local _, _, _, _, _, r, g, b = Details:GetClass (t[1]) GameCooltip:AddStatusBar (t[2] / top * 100, 1, r, g, b, 1, false, enemies_background) end else GameCooltip:AddLine (Loc ["STRING_NO_DATA"], nil, 1, "white") - GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, 14, 14, _unpack (Details.class_coords ["UNKNOW"])) + GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, 14, 14, unpack(Details.class_coords ["UNKNOW"])) end - + GameCooltip:AddLine (" ") Details:AddTooltipReportLineText() - + GameCooltip:SetOption ("StatusBarTexture", "Interface\\AddOns\\Details\\images\\bar_serenity") GameCooltip:ShowCooltip() end - end - - local function RefreshBarraFrags (tabela, barra, instancia) - atributo_damage:AtualizarFrags (tabela, tabela.minha_barra, barra.colocacao, instancia) end - function atributo_damage:AtualizarFrags (tabela, whichRowLine, colocacao, instancia) + local function RefreshBarraFrags (tabela, barra, instancia) + atributo_damage:AtualizarFrags(tabela, tabela.minha_barra, barra.colocacao, instancia) + end + + function atributo_damage:AtualizarFrags(tabela, whichRowLine, colocacao, instancia) tabela ["frags"] = true --> marca que esta tabela � uma tabela de frags, usado no controla na hora de montar o tooltip local thisLine = instancia.barras [whichRowLine] --> pega a refer�ncia da barra na janela - + if (not thisLine) then print ("DEBUG: problema com "..whichRowLine.." "..rank) return end - + local previousData = thisLine.minha_tabela - + thisLine.minha_tabela = tabela - + tabela.nome = tabela [1] --> evita dar erro ao redimencionar a janela tabela.minha_barra = whichRowLine thisLine.colocacao = colocacao - - if (not _getmetatable (tabela)) then - _setmetatable (tabela, {__call = RefreshBarraFrags}) + + if (not _getmetatable (tabela)) then + _setmetatable (tabela, {__call = RefreshBarraFrags}) tabela._custom = true end local total = instancia.showing.totals.frags_total local porcentagem - + if (instancia.row_info.percent_type == 1) then - porcentagem = _cstr ("%.1f", tabela [2] / total * 100) + porcentagem = format ("%.1f", tabela [2] / total * 100) elseif (instancia.row_info.percent_type == 2) then - porcentagem = _cstr ("%.1f", tabela [2] / instancia.top * 100) + porcentagem = format ("%.1f", tabela [2] / instancia.top * 100) end - - thisLine.lineText1:SetText (colocacao .. ". " .. tabela [1]) + + thisLine.lineText1:SetText(colocacao .. ". " .. tabela [1]) local bars_show_data = instancia.row_info.textR_show_data local bars_brackets = instancia:GetBarBracket() - + local total_frags = tabela [2] if (not bars_show_data [1]) then total_frags = "" @@ -1154,83 +1166,83 @@ else porcentagem = porcentagem .. "%" end - + -- if (instancia.use_multi_fontstrings) then instancia:SetInLineTexts(thisLine, "", total_frags, porcentagem) else - thisLine.lineText4:SetText (total_frags .. bars_brackets[1] .. porcentagem .. bars_brackets[2]) + thisLine.lineText4:SetText(total_frags .. bars_brackets[1] .. porcentagem .. bars_brackets[2]) end - thisLine.lineText1:SetSize (thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) - + thisLine.lineText1:SetSize(thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) + if (colocacao == 1) then - thisLine:SetValue (100) + thisLine:SetValue(100) else - thisLine:SetValue (tabela [2] / instancia.top * 100) - end - - thisLine.lineText1:SetTextColor (1, 1, 1, 1) - thisLine.lineText4:SetTextColor (1, 1, 1, 1) - - if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then - Details.FadeHandler.Fader (thisLine, "out") + thisLine:SetValue(tabela [2] / instancia.top * 100) end - Details:SetBarColors (thisLine, instancia, _unpack (Details.class_colors [tabela [3]])) + thisLine.lineText1:SetTextColor(1, 1, 1, 1) + thisLine.lineText4:SetTextColor(1, 1, 1, 1) + + if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then + Details.FadeHandler.Fader(thisLine, "out") + end + + Details:SetBarColors (thisLine, instancia, unpack(Details.class_colors [tabela [3]])) if (tabela [3] == "UNKNOW" or tabela [3] == "UNGROUPPLAYER" or tabela [3] == "ENEMY") then - thisLine.icone_classe:SetTexture ([[Interface\AddOns\Details\images\classes_plus]]) - thisLine.icone_classe:SetTexCoord (0.50390625, 0.62890625, 0, 0.125) - thisLine.icone_classe:SetVertexColor (1, 1, 1) + thisLine.icone_classe:SetTexture([[Interface\AddOns\Details\images\classes_plus]]) + thisLine.icone_classe:SetTexCoord(0.50390625, 0.62890625, 0, 0.125) + thisLine.icone_classe:SetVertexColor(1, 1, 1) else - thisLine.icone_classe:SetTexture (instancia.row_info.icon_file) - thisLine.icone_classe:SetTexCoord (_unpack (Details.class_coords [tabela [3]])) - thisLine.icone_classe:SetVertexColor (1, 1, 1) + thisLine.icone_classe:SetTexture(instancia.row_info.icon_file) + thisLine.icone_classe:SetTexCoord(unpack(Details.class_coords [tabela [3]])) + thisLine.icone_classe:SetVertexColor(1, 1, 1) end if (thisLine.mouse_over and not instancia.baseframe.isMoving) then --> precisa atualizar o tooltip - --gump:UpdateTooltip (whichRowLine, thisLine, instancia) + --gump:UpdateTooltip(whichRowLine, thisLine, instancia) end end - + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> void zones - local on_switch_AVZ_show = function (instance) + local on_switch_AVZ_show = function(instance) instance:TrocaTabela (instance, true, 1, 7) return true end - - local AVZ_search_code = [[ + + local AVZ_search_code = [[ --> get the parameters passed local combat, instance_container, instance = ... --> declade the values to return local total, top, amount = 0, 0, 0 - + local actor_name = "@ACTORNAME@" local actor = combat (4, actor_name) - + if (not actor) then return 0, 0, 0 end - + local damage_actor = combat (1, actor.damage_twin) - + local habilidade local alvos - + if (damage_actor) then habilidade = damage_actor.spells._ActorTable [actor.damage_spellid] end if (habilidade) then alvos = habilidade.targets end - + local container = actor.debuff_uptime_targets local tooltip_void_zone_temp = {} - - for target_name, debuff_table in pairs (container) do + + for target_name, debuff_table in pairs(container) do if (alvos) then local damage_alvo = alvos [target_name] if (damage_alvo) then @@ -1242,33 +1254,33 @@ debuff_table.damage = 0 end end - + local i = 1 - for target_name, debuff_table in pairs (container) do - local t = tooltip_void_zone_temp [i] + 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 - + local target_actor = combat (1, target_name) or combat (2, target_name) or combat (4, target_name) t[1] = target_name t[2] = debuff_table.damage t[3] = debuff_table t[4] = target_actor - + i = i + 1 end - + --> sort no container: table.sort (tooltip_void_zone_temp, Details.sort_tooltip_void_zones) for index, t in ipairs (tooltip_void_zone_temp) do instance_container:AddValue (t[4], t[2]) - + local custom_actor = instance_container:GetActorTable (t[4]) custom_actor.uptime = t[3].uptime - + total = total + t[2] amount = amount + 1 if (t[2] > top) then @@ -1278,11 +1290,11 @@ return total, top, amount ]] - + local AVZ_total_code = [[ local value, top, total, combat, instance, custom_actor = ... local uptime = custom_actor.uptime or 0 - + local minutos, segundos = floor (uptime / 60), floor (uptime % 60) if (minutos > 0) then uptime = "" .. minutos .. "m " .. segundos .. "s" .. "" @@ -1290,16 +1302,16 @@ uptime = "" .. segundos .. "s" .. "" end - return Details:ToK2 (value) .. " - " .. uptime .. " " + return Details:ToK2(value) .. " - " .. uptime .. " " ]] - + local function ShowVoidZonesInWindow (actor, instance) - + local spellid = tooltip_void_zone_temp.spellid - - local spellname, _, icon = _GetSpellInfo (spellid) + + local spellname, _, icon = _GetSpellInfo(spellid) local custom_name = spellname .. " - " .. Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS_REPORT"] .. "" - + --check if already exists for index, CustomObject in _ipairs (Details.custom) do if (CustomObject:GetName() == custom_name) then @@ -1310,7 +1322,7 @@ return instance:TrocaTabela (instance.segmento, 5, index) end end - + --create a custom for this spell local new_custom_object = { name = custom_name, @@ -1326,43 +1338,43 @@ notooltip = true, OnSwitchShow = on_switch_AVZ_show, } - + local new_code = AVZ_search_code new_code = new_code:gsub ("@ACTORNAME@", actor.nome) new_custom_object.script = new_code - + local new_total_code = AVZ_total_code new_total_code = new_total_code:gsub ("@ACTORNAME@", actor.nome) new_total_code = new_total_code:gsub ("@SPELLID@", spellid) new_custom_object.total_script = new_total_code - + tinsert (Details.custom, new_custom_object) setmetatable (new_custom_object, Details.atributo_custom) new_custom_object.__index = Details.atributo_custom - + return instance:TrocaTabela (instance.segmento, 5, #Details.custom) end - + function atributo_damage:ReportSingleVoidZoneLine (actor, instance, ShiftKeyDown, ControlKeyDown) - + local spellid = tooltip_void_zone_temp.spellid - + if (ControlKeyDown) then - local spellname, _, spellicon = _GetSpellInfo (spellid) + local spellname, _, spellicon = _GetSpellInfo(spellid) return Details:OpenAuraPanel (spellid, spellname, spellicon) elseif (ShiftKeyDown) then return ShowVoidZonesInWindow (actor, instance) end - - local spelllink = Details:GetSpellLink (spellid) + + local spelllink = Details:GetSpellLink(spellid) local report_table = {"Details!: " .. spelllink .. " " .. Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS_REPORT"]} - + local t = {} for index, void_table in ipairs (tooltip_void_zone_temp) do --ir� reportar dano zero tamb�m if (void_table[1] and type (void_table[1]) == "string" and void_table[2] and void_table[3] and type (void_table[3]) == "table") then local actor_table = {Details:GetOnlyName (void_table[1])} - local m, s = _math_floor (void_table[3].uptime / 60), _math_floor (void_table[3].uptime % 60) + local m, s = _math_floor(void_table[3].uptime / 60), _math_floor(void_table[3].uptime % 60) if (m > 0) then actor_table [2] = FormatTooltipNumber (_, void_table[3].damage) .. " (" .. m .. "m " .. s .. "s" .. ")" else @@ -1371,13 +1383,13 @@ t [#t+1] = actor_table end end - + Details:FormatReportLines (report_table, t) - + return Details:Reportar (report_table, {_no_current = true, _no_inverse = true, _custom = true}) end - local sort_tooltip_void_zones = function (tabela1, tabela2) + local sort_tooltip_void_zones = function(tabela1, tabela2) if (tabela1 [2] > tabela2 [2]) then return true elseif (tabela1 [2] == tabela2 [2]) then @@ -1393,25 +1405,25 @@ end end Details.sort_tooltip_void_zones = sort_tooltip_void_zones - - + + function Details:ToolTipVoidZones (instancia, actor, barra, keydown) - + local damage_actor = instancia.showing[1]:PegarCombatente (_, actor.damage_twin) local habilidade local alvos - + if (damage_actor) then habilidade = damage_actor.spells._ActorTable [actor.damage_spellid] end - + if (habilidade) then alvos = habilidade.targets end - + local container = actor.debuff_uptime_targets - - for target_name, debuff_table in _pairs (container) do + + for target_name, debuff_table in _pairs(container) do if (alvos) then local damage_alvo = alvos [target_name] if (damage_alvo) then @@ -1423,66 +1435,66 @@ debuff_table.damage = 0 end end - + 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] + 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 - + 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) + _table_sort(tooltip_void_zone_temp, sort_tooltip_void_zones) --> monta o cooltip local GameCooltip = GameCooltip - - local spellname, _, spellicon = _GetSpellInfo (actor.damage_spellid) + + local spellname, _, spellicon = _GetSpellInfo(actor.damage_spellid) Details:AddTooltipSpellHeaderText (spellname .. " " .. Loc ["STRING_VOIDZONE_TOOLTIP"], headerColor, #tooltip_void_zone_temp, spellicon, 0.078125, 0.921875, 0.078125, 0.921875) Details:AddTooltipHeaderStatusbar (1, 1, 1, 0.5) GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) - --for target_name, debuff_table in _pairs (container) do + --for target_name, debuff_table in _pairs(container) do local first = tooltip_void_zone_temp [1] and tooltip_void_zone_temp [1][3] if (type (first) == "table") then first = first.damage end - + tooltip_void_zone_temp.spellid = actor.damage_spellid tooltip_void_zone_temp.current_actor = actor - + local lineHeight = Details.tooltip.line_height - + 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) + local minutos, segundos = _math_floor(debuff_table.uptime / 60), _math_floor(debuff_table.uptime % 60) if (minutos > 0) then GameCooltip:AddLine (Details:GetOnlyName (t[1]), FormatTooltipNumber (_, debuff_table.damage) .. " (" .. minutos .. "m " .. segundos .. "s" .. ")") else GameCooltip:AddLine (Details:GetOnlyName (t[1]), FormatTooltipNumber (_, debuff_table.damage) .. " (" .. segundos .. "s" .. ")") end - + local classe = Details:GetClass (t[1]) if (classe) then local specID = Details:GetSpec (t[1]) @@ -1490,28 +1502,28 @@ local texture, l, r, t, b = Details:GetSpecIcon (specID, false) GameCooltip:AddIcon (texture, 1, 1, lineHeight, lineHeight, l, r, t, b) else - GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], nil, nil, lineHeight, lineHeight, unpack (Details.class_coords [classe])) + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], nil, nil, lineHeight, lineHeight, unpack(Details.class_coords [classe])) end else GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, lineHeight, lineHeight, .25, .5, 0, 1) end - + local _, _, _, _, _, r, g, b = Details:GetClass (t[1]) if (first == 0) then first = 0.0000000001 end GameCooltip:AddStatusBar (debuff_table.damage / first * 100, 1, r, g, b, 1, false, enemies_background) --Details:AddTooltipBackgroundStatusbar() - + end - + GameCooltip:AddLine (" ") Details:AddTooltipReportLineText() - + GameCooltip:SetOption ("StatusBarTexture", "Interface\\AddOns\\Details\\images\\bar_serenity") - + GameCooltip:ShowCooltip() - + end local function RefreshBarraVoidZone (tabela, barra, instancia) @@ -1522,39 +1534,39 @@ --> pega a refer�ncia da barra na janela local thisLine = instancia.barras [whichRowLine] - + if (not thisLine) then print ("DEBUG: problema com "..whichRowLine.." "..rank) return end - + self._refresh_window = RefreshBarraVoidZone - + local previousData = thisLine.minha_tabela - + thisLine.minha_tabela = self - + self.minha_barra = whichRowLine thisLine.colocacao = colocacao - + local total = instancia.showing.totals.voidzone_damage local combat_time = instancia.showing:GetCombatTime() - local dps = _math_floor (self.damage / combat_time) - - local formated_damage = SelectedToKFunction (_, self.damage) - local formated_dps = SelectedToKFunction (_, dps) - + local dps = _math_floor(self.damage / combat_time) + + local formated_damage = SelectedToKFunction(_, self.damage) + local formated_dps = SelectedToKFunction(_, dps) + local porcentagem - + if (instancia.row_info.percent_type == 1) then total = max (total, 0.0001) - porcentagem = _cstr ("%.1f", self.damage / total * 100) + porcentagem = format ("%.1f", self.damage / total * 100) elseif (instancia.row_info.percent_type == 2) then local top = max (instancia.top, 0.0001) - porcentagem = _cstr ("%.1f", self.damage / top * 100) + porcentagem = format ("%.1f", self.damage / top * 100) end - + local bars_show_data = instancia.row_info.textR_show_data local bars_brackets = instancia:GetBarBracket() local bars_separator = instancia:GetBarSeparator() @@ -1573,38 +1585,38 @@ local rightText = formated_damage .. bars_brackets[1] .. formated_dps .. bars_separator .. porcentagem .. bars_brackets[2] if (UsingCustomRightText) then - thisLine.lineText4:SetText (_string_replace (instancia.row_info.textR_custom_text, formated_damage, formated_dps, porcentagem, self, instancia.showing, instancia, rightText)) + thisLine.lineText4:SetText(stringReplace(instancia.row_info.textR_custom_text, formated_damage, formated_dps, porcentagem, self, instancia.showing, instancia, rightText)) else if (instancia.use_multi_fontstrings) then instancia:SetInLineTexts(thisLine, formated_damage, formated_dps, porcentagem) else - thisLine.lineText4:SetText (rightText) + thisLine.lineText4:SetText(rightText) end end - thisLine.lineText1:SetText (colocacao .. ". " .. self.nome) - thisLine.lineText1:SetSize (thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) - - thisLine.lineText1:SetTextColor (1, 1, 1, 1) - thisLine.lineText4:SetTextColor (1, 1, 1, 1) - - thisLine:SetValue (100) - + thisLine.lineText1:SetText(colocacao .. ". " .. self.nome) + thisLine.lineText1:SetSize(thisLine:GetWidth() - thisLine.lineText4:GetStringWidth() - 20, 15) + + thisLine.lineText1:SetTextColor(1, 1, 1, 1) + thisLine.lineText4:SetTextColor(1, 1, 1, 1) + + thisLine:SetValue(100) + if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then - Details.FadeHandler.Fader (thisLine, "out") + Details.FadeHandler.Fader(thisLine, "out") end - - local _, _, icon = GetSpellInfo (self.damage_spellid) + + local _, _, icon = GetSpellInfo(self.damage_spellid) local school_color = Details.school_colors [self.spellschool] if (not school_color) then school_color = Details.school_colors ["unknown"] end - - Details:SetBarColors (thisLine, instancia, _unpack (school_color)) - - thisLine.icone_classe:SetTexture (icon) - thisLine.icone_classe:SetTexCoord (0.078125, 0.921875, 0.078125, 0.921875) - thisLine.icone_classe:SetVertexColor (1, 1, 1) + + Details:SetBarColors (thisLine, instancia, unpack(school_color)) + + thisLine.icone_classe:SetTexture(icon) + thisLine.icone_classe:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875) + thisLine.icone_classe:SetVertexColor(1, 1, 1) if (thisLine.mouse_over and not instancia.baseframe.isMoving) then --need call a refresh function @@ -1613,119 +1625,127 @@ end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> main refresh function +--main refresh function +function atributo_damage:RefreshWindow (instancia, combatObject, forcar, exportar, refreshRequired) + local showing = combatObject[class_type] --o que esta sendo mostrado -> [1] - dano [2] - cura --pega o container com ._NameIndexTable ._ActorTable -function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, exportar, refresh_needed) - - local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable - - --> n�o h� barras para mostrar -- not have something to show - if (#showing._ActorTable < 1) then - + --not have something to show + if (#showing._ActorTable < 1) then if (Details.debug and false) then Details.showing_ActorTable_Timer = Details.showing_ActorTable_Timer or 0 if (time() > Details.showing_ActorTable_Timer) then - Details:Msg ("(debug) nothing to show -> #showing._ActorTable < 1") - Details.showing_ActorTable_Timer = time()+5 + Details:Msg("(debug) nothing to show -> #showing._ActorTable < 1") + Details.showing_ActorTable_Timer = time() + 5 end end - - --> colocado isso recentemente para fazer as barras de dano sumirem na troca de atributo - return Details:EsconderBarrasNaoUsadas (instancia, showing), "", 0, 0 + + --colocado isso recentemente para fazer as barras de dano sumirem na troca de atributo + return Details:EsconderBarrasNaoUsadas(instancia, showing), "", 0, 0 end - - --> total + + --total local total = 0 - --> top actor #1 + --top actor #1 instancia.top = 0 - - local using_cache = false - - local sub_atributo = instancia.sub_atributo --> o que esta sendo mostrado nesta inst�ncia - local conteudo = showing._ActorTable --> pega a lista de jogadores -- get actors table from container - local amount = #conteudo - local modo = instancia.modo - - --> pega qual a sub key que ser� usada --sub keys + + local isUsingCache = false + local subAttribute = instancia.sub_atributo + local actorTableContent = showing._ActorTable + local amount = #actorTableContent + local windowMode = instancia.modo + + --pega qual a sub key que ser� usada --sub keys if (exportar) then - - if (_type (exportar) == "boolean") then - if (sub_atributo == 1) then --> DAMAGE DONE + if (_type(exportar) == "boolean") then + if (subAttribute == 1) then --DAMAGE DONE keyName = "total" - elseif (sub_atributo == 2) then --> DPS + + elseif (subAttribute == 2) then --DPS keyName = "last_dps" - elseif (sub_atributo == 3) then --> TAMAGE TAKEN + + elseif (subAttribute == 3) then --TAMAGE TAKEN keyName = "damage_taken" - if (Details.damage_taken_everything) then - modo = modo_ALL - end - elseif (sub_atributo == 4) then --> FRIENDLY FIRE + if (Details.damage_taken_everything) then + windowMode = modo_ALL + end + + elseif (subAttribute == 4) then --FRIENDLY FIRE keyName = "friendlyfire_total" - elseif (sub_atributo == 5) then --> FRAGS + + elseif (subAttribute == 5) then --FRAGS keyName = "frags" - elseif (sub_atributo == 6) then --> ENEMIES + + elseif (subAttribute == 6) then --ENEMIES keyName = "enemies" - elseif (sub_atributo == 7) then --> AURAS VOIDZONES + + elseif (subAttribute == 7) then --AURAS VOIDZONES keyName = "voidzones" - - elseif (sub_atributo == 8) then --> BY SPELL + + elseif (subAttribute == 8) then --BY SPELL keyName = "damage_taken_by_spells" end else keyName = exportar.key - modo = exportar.modo + windowMode = exportar.modo end - elseif (instancia.atributo == 5) then --> custom + + elseif (instancia.atributo == 5) then --custom keyName = "custom" - total = tabela_do_combate.totals [instancia.customName] + total = combatObject.totals [instancia.customName] + else - if (sub_atributo == 1) then --> DAMAGE DONE + if (subAttribute == 1) then --DAMAGE DONE keyName = "total" - elseif (sub_atributo == 2) then --> DPS + + elseif (subAttribute == 2) then --DPS keyName = "last_dps" - elseif (sub_atributo == 3) then --> TAMAGE TAKEN + + elseif (subAttribute == 3) then --TAMAGE TAKEN keyName = "damage_taken" if (Details.damage_taken_everything) then - modo = modo_ALL + windowMode = modo_ALL end - elseif (sub_atributo == 4) then --> FRIENDLY FIRE + + elseif (subAttribute == 4) then --FRIENDLY FIRE keyName = "friendlyfire_total" - elseif (sub_atributo == 5) then --> FRAGS + + elseif (subAttribute == 5) then --FRAGS keyName = "frags" - elseif (sub_atributo == 6) then --> ENEMIES + + elseif (subAttribute == 6) then --ENEMIES keyName = "enemies" - elseif (sub_atributo == 7) then --> AURAS VOIDZONES + + elseif (subAttribute == 7) then --AURAS VOIDZONES keyName = "voidzones" - elseif (sub_atributo == 8) then --> BY SPELL + elseif (subAttribute == 8) then --BY SPELL keyName = "damage_taken_by_spells" end end - - if (keyName == "frags") then - + + if (keyName == "frags") then local frags = instancia.showing.frags local frags_total_kills = 0 local index = 0 - - for fragName, fragAmount in _pairs (frags) do - + + for fragName, fragAmount in _pairs(frags) do + index = index + 1 - + local fragged_actor = showing._NameIndexTable [fragName] --> get index local actor_classe if (fragged_actor) then fragged_actor = showing._ActorTable [fragged_actor] --> get object actor_classe = fragged_actor.classe end - + if (fragged_actor and fragged_actor.monster) then actor_classe = "ENEMY" elseif (not actor_classe) then actor_classe = "UNGROUPPLAYER" end - + if (ntable [index]) then ntable [index] [1] = fragName ntable [index] [2] = fragAmount @@ -1733,83 +1753,81 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex else ntable [index] = {fragName, fragAmount, actor_classe} end - + frags_total_kills = frags_total_kills + fragAmount - end - + local tsize = #ntable if (index < tsize) then for i = index+1, tsize do ntable [i][2] = 0 end end - + instancia.top = 0 if (tsize > 0) then - _table_sort (ntable, Details.Sort2) + _table_sort(ntable, Details.Sort2) instancia.top = ntable [1][2] end - + total = index - - if (exportar) then + + if (exportar) then local export = {} - for i = 1, index do + for i = 1, index do export [i] = {ntable[i][1], ntable[i][2], ntable[i][3]} end return export end - + if (total < 1) then instancia:EsconderScrollBar() - return Details:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh end - - tabela_do_combate.totals.frags_total = frags_total_kills - - instancia:RefreshScrollBar (total) - + + combatObject.totals.frags_total = frags_total_kills + + instancia:RefreshScrollBar(total) + local whichRowLine = 1 local lineContainer = instancia.barras - - for i = instancia.barraS[1], instancia.barraS[2], 1 do - atributo_damage:AtualizarFrags (ntable[i], whichRowLine, i, instancia) + for i = instancia.barraS[1], instancia.barraS[2], 1 do + atributo_damage:AtualizarFrags(ntable[i], whichRowLine, i, instancia) whichRowLine = whichRowLine+1 end - - return Details:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh - - elseif (keyName == "damage_taken_by_spells") then - + + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh + + elseif (keyName == "damage_taken_by_spells") then + local bs_index, total = 0, 0 wipe (bs_index_table) - - local combat = tabela_do_combate + + local combat = combatObject local AllDamageCharacters = combat:GetActorList (DETAILS_ATTRIBUTE_DAMAGE) --> do a loop amoung the actors for index, character in ipairs (AllDamageCharacters) do - + --> is the actor a player? if (character:IsPlayer()) then - for source_name, _ in pairs (character.damage_from) do - + for source_name, _ in pairs(character.damage_from) do + local source = combat (1, source_name) - + if (source) then --> came from an enemy if (not source:IsPlayer()) then - + local AllSpells = source:GetSpellList() - for spellid, spell in pairs (AllSpells) do + for spellid, spell in pairs(AllSpells) do local on_player = spell.targets [character.nome] - + if (on_player and on_player >= 1) then - - local spellname = _GetSpellInfo (spellid) + + local spellname = _GetSpellInfo(spellid) if (spellname) then local has_index = bs_index_table [spellname] local this_spell @@ -1821,10 +1839,10 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex if (this_spell) then this_spell [1] = spellid this_spell [2] = 0 - this_spell [3] = spell.spellschool or Details.spell_school_cache [select (1, GetSpellInfo (spellid))] or 1 + this_spell [3] = spell.spellschool or Details.spell_school_cache [select (1, GetSpellInfo(spellid))] or 1 bs_index_table [spellname] = bs_index else - this_spell = {spellid, 0, spell.spellschool or Details.spell_school_cache [select (1, GetSpellInfo (spellid))] or 1} + this_spell = {spellid, 0, spell.spellschool or Details.spell_school_cache [select (1, GetSpellInfo(spellid))] or 1} bs_table [bs_index] = this_spell bs_index_table [spellname] = bs_index end @@ -1836,15 +1854,15 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex end end end - + elseif (source:IsGroupPlayer()) then -- friendly fire - + local AllSpells = source.friendlyfire [character.nome] and source.friendlyfire [character.nome].spells if (AllSpells) then -- se n�o existir pode ter vindo de um pet, talvez - for spellid, on_player in pairs (AllSpells) do + for spellid, on_player in pairs(AllSpells) do if (on_player and on_player >= 1) then - - local spellname = _GetSpellInfo (spellid) + + local spellname = _GetSpellInfo(spellid) if (spellname) then local has_index = bs_index_table [spellname] local this_spell @@ -1856,10 +1874,10 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex if (this_spell) then this_spell [1] = spellid this_spell [2] = 0 - this_spell [3] = Details.spell_school_cache [select (1, GetSpellInfo (spellid))] or 1 + this_spell [3] = Details.spell_school_cache [select (1, GetSpellInfo(spellid))] or 1 bs_index_table [spellname] = bs_index else - this_spell = {spellid, 0, Details.spell_school_cache [select (1, GetSpellInfo (spellid))] or 1} + this_spell = {spellid, 0, Details.spell_school_cache [select (1, GetSpellInfo(spellid))] or 1} bs_table [bs_index] = this_spell bs_index_table [spellname] = bs_index end @@ -1872,9 +1890,9 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex end end end - end + end end - end + end end end @@ -1884,16 +1902,16 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex bs_table [i][2] = 0 end end - + instancia.top = 0 if (tsize > 0) then - _table_sort (bs_table, Details.Sort2) + _table_sort(bs_table, Details.Sort2) instancia.top = bs_table [1][2] end - + local total2 = bs_index - - if (exportar) then + + if (exportar) then local export = {} for i = 1, bs_index do -- spellid, total, spellschool @@ -1901,55 +1919,55 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex end return total, "damage", instancia.top, bs_index, export end - + if (bs_index < 1) then instancia:EsconderScrollBar() - return Details:EndRefresh (instancia, bs_index, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + return Details:EndRefresh(instancia, bs_index, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh end - - tabela_do_combate.totals.by_spell = total - - instancia:RefreshScrollBar (bs_index) - + + combatObject.totals.by_spell = total + + instancia:RefreshScrollBar(bs_index) + local whichRowLine = 1 local lineContainer = instancia.barras - + --print (bs_index, #bs_table, instancia.barraS[1], instancia.barraS[2]) - - for i = instancia.barraS[1], instancia.barraS[2], 1 do + + for i = instancia.barraS[1], instancia.barraS[2], 1 do atributo_damage:AtualizarBySpell (bs_table[i], whichRowLine, i, instancia) whichRowLine = whichRowLine+1 end - - return Details:EndRefresh (instancia, bs_index, tabela_do_combate, showing) - - elseif (keyName == "voidzones") then - + + return Details:EndRefresh(instancia, bs_index, combatObject, showing) + + elseif (keyName == "voidzones") then + local index = 0 - local misc_container = tabela_do_combate [4] + local misc_container = combatObject [4] local voidzone_damage_total = 0 - + for _, actor in _ipairs (misc_container._ActorTable) do if (actor.boss_debuff) then index = index + 1 - + --pega no container de dano o actor respons�vel por aplicar o debuff local twin_damage_actor = showing._NameIndexTable [actor.damage_twin] or showing._NameIndexTable ["[*] " .. actor.damage_twin] - + if (twin_damage_actor) then local index = twin_damage_actor twin_damage_actor = showing._ActorTable [twin_damage_actor] local spell = twin_damage_actor.spells._ActorTable [actor.damage_spellid] - + if (spell) then - + --> fix spell, sometimes there is two spells with the same name, one is the cast and other is the debuff if (spell.total == 0 and not actor.damage_spellid_fixed) then - local curname = _GetSpellInfo (actor.damage_spellid) - for spellid, spelltable in _pairs (twin_damage_actor.spells._ActorTable) do + local curname = _GetSpellInfo(actor.damage_spellid) + for spellid, spelltable in _pairs(twin_damage_actor.spells._ActorTable) do if (spelltable.total > spell.total) then - local name = _GetSpellInfo (spellid) + local name = _GetSpellInfo(spellid) if (name == curname) then actor.damage_spellid = spellid spell = spelltable @@ -1958,16 +1976,16 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex end actor.damage_spellid_fixed = true end - + actor.damage = spell.total voidzone_damage_total = voidzone_damage_total + spell.total - + elseif (not actor.damage_spellid_fixed) then --not --> fix spell, if the spellid passed for debuff uptime is actully the spell id of a ability and not if the aura it self actor.damage_spellid_fixed = true local found = false - for spellid, spelltable in _pairs (twin_damage_actor.spells._ActorTable) do - local name = _GetSpellInfo (spellid) + for spellid, spelltable in _pairs(twin_damage_actor.spells._ActorTable) do + local name = _GetSpellInfo(spellid) if (actor.damage_twin:find (name)) then actor.damage = spelltable.total voidzone_damage_total = voidzone_damage_total + spelltable.total @@ -1976,7 +1994,7 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex break end end - + if (not found) then actor.damage = 0 end @@ -1986,66 +2004,66 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex else actor.damage = 0 end - + vtable [index] = actor end end - + local tsize = #vtable if (index < tsize) then for i = index+1, tsize do vtable [i] = nil end end - + if (tsize > 0 and vtable[1]) then - _table_sort (vtable, void_zone_sort) + _table_sort(vtable, void_zone_sort) instancia.top = vtable [1].damage end - total = index - - if (exportar) then + total = index + + if (exportar) then for _, t in ipairs (vtable) do - t.report_name = Details:GetSpellLink (t.damage_spellid) + t.report_name = Details:GetSpellLink(t.damage_spellid) end return voidzone_damage_total, "damage", instancia.top, total, vtable, "report_name" end - + if (total < 1) then instancia:EsconderScrollBar() - return Details:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh end - - tabela_do_combate.totals.voidzone_damage = voidzone_damage_total - - instancia:RefreshScrollBar (total) - + + combatObject.totals.voidzone_damage = voidzone_damage_total + + instancia:RefreshScrollBar(total) + local whichRowLine = 1 local lineContainer = instancia.barras - for i = instancia.barraS[1], instancia.barraS[2], 1 do + for i = instancia.barraS[1], instancia.barraS[2], 1 do vtable[i]:AtualizarVoidZone (whichRowLine, i, instancia) whichRowLine = whichRowLine+1 end - - return Details:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh - + + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh + else --/run Details:Dump(Details:GetCurrentCombat():GetActor(1, "Injured Steelspine 1")) if (keyName == "enemies") then - amount, total = Details:ContainerSortEnemies (conteudo, amount, "damage_taken") + amount, total = Details:ContainerSortEnemies (actorTableContent, amount, "damage_taken") --remove actors with zero damage taken local newAmount = 0 - for i = 1, #conteudo do - if (conteudo[i].damage_taken < 1) then + for i = 1, #actorTableContent do + if (actorTableContent[i].damage_taken < 1) then newAmount = i-1 break end end --if all units shown are enemies and all have damage taken, check if newAmount is zero and #conteudo has value bigger than 0 - if (newAmount == 0 and #conteudo > 0) then + if (newAmount == 0 and #actorTableContent > 0) then amount = amount else amount = newAmount @@ -2053,102 +2071,102 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex --keyName = "damage_taken" --result of the first actor - instancia.top = conteudo[1] and conteudo[1][keyName] - - elseif (modo == modo_ALL) then --> mostrando ALL - + instancia.top = actorTableContent[1] and actorTableContent[1][keyName] + + elseif (windowMode == modo_ALL) then --> mostrando ALL + --> faz o sort da categoria e retorna o amount corrigido --print (keyName) - if (sub_atributo == 2) then + if (subAttribute == 2) then local combat_time = instancia.showing:GetCombatTime() - total = atributo_damage:ContainerRefreshDps (conteudo, combat_time) + total = atributo_damage:ContainerRefreshDps (actorTableContent, combat_time) else --> pega o total ja aplicado na tabela do combate - total = tabela_do_combate.totals [class_type] + total = combatObject.totals [class_type] end - - amount = Details:ContainerSort (conteudo, amount, keyName) - + + amount = Details:ContainerSort (actorTableContent, amount, keyName) + --> grava o total - instancia.top = conteudo[1][keyName] - - elseif (modo == modo_GROUP) then --> mostrando GROUP - + instancia.top = actorTableContent[1][keyName] + + elseif (windowMode == modo_GROUP) then --> mostrando GROUP + --> organiza as tabelas - + if (Details.in_combat and instancia.segmento == 0 and not exportar) then - using_cache = true + isUsingCache = true end - - if (using_cache) then - - conteudo = Details.cache_damage_group - - if (sub_atributo == 2) then --> dps + + if (isUsingCache) then + + actorTableContent = Details.cache_damage_group + + if (subAttribute == 2) then --> dps local combat_time = instancia.showing:GetCombatTime() - atributo_damage:ContainerRefreshDps (conteudo, combat_time) + atributo_damage:ContainerRefreshDps (actorTableContent, combat_time) end - - if (#conteudo < 1) then + + if (#actorTableContent < 1) then if (Details.debug and false) then Details.showing_ActorTable_Timer2 = Details.showing_ActorTable_Timer2 or 0 if (time() > Details.showing_ActorTable_Timer2) then - Details:Msg ("(debug) nothing to show -> #conteudo < 1 (using cache)") + Details:Msg("(debug) nothing to show -> #conteudo < 1 (using cache)") Details.showing_ActorTable_Timer2 = time()+5 end end - + return Details:EsconderBarrasNaoUsadas (instancia, showing), "", 0, 0 end - - _table_sort (conteudo, Details.SortKeySimple) - - if (conteudo[1][keyName] < 1) then + + _table_sort(actorTableContent, Details.SortKeySimple) + + if (actorTableContent[1][keyName] < 1) then amount = 0 else - instancia.top = conteudo[1][keyName] - amount = #conteudo - end - - for i = 1, amount do - total = total + conteudo[i][keyName] - end - else - if (sub_atributo == 2) then --> dps - local combat_time = instancia.showing:GetCombatTime() - atributo_damage:ContainerRefreshDps (conteudo, combat_time) + instancia.top = actorTableContent[1][keyName] + amount = #actorTableContent end - _table_sort (conteudo, Details.SortKeyGroup) + for i = 1, amount do + total = total + actorTableContent[i][keyName] + end + else + if (subAttribute == 2) then --> dps + local combat_time = instancia.showing:GetCombatTime() + atributo_damage:ContainerRefreshDps (actorTableContent, combat_time) + end + + _table_sort(actorTableContent, Details.SortKeyGroup) end -- - if (not using_cache) then - for index, player in _ipairs (conteudo) do + if (not isUsingCache) then + for index, player in _ipairs (actorTableContent) do if (player.grupo) then --> � um player e esta em grupo if (player[keyName] < 1) then --> dano menor que 1, interromper o loop amount = index - 1 break end - + total = total + player[keyName] else amount = index-1 break end end - - instancia.top = conteudo[1] and conteudo[1][keyName] + + instancia.top = actorTableContent[1] and actorTableContent[1][keyName] end end end - + --> refaz o mapa do container - if (not using_cache) then + if (not isUsingCache) then showing:remapear() end - - if (exportar) then + + if (exportar) then return total, keyName, instancia.top, amount end @@ -2156,45 +2174,45 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex if (forcar) then if (instancia.modo == 2) then --> group for i = 1, instancia.rows_fit_in_window do - Details.FadeHandler.Fader (instancia.barras [i], "in", Details.fade_speed) + Details.FadeHandler.Fader(instancia.barras [i], "in", Details.fade_speed) end end end instancia:EsconderScrollBar() --> precisaria esconder a scroll bar - + if (Details.debug and false) then Details.showing_ActorTable_Timer2 = Details.showing_ActorTable_Timer2 or 0 if (time() > Details.showing_ActorTable_Timer2) then - Details:Msg ("(debug) nothing to show -> amount < 1") + Details:Msg("(debug) nothing to show -> amount < 1") Details.showing_ActorTable_Timer2 = time()+5 end end - - return Details:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh end - instancia:RefreshScrollBar (amount) - + instancia:RefreshScrollBar(amount) + local whichRowLine = 1 local lineContainer = instancia.barras - local percentage_type = instancia.row_info.percent_type - local bars_show_data = instancia.row_info.textR_show_data - local bars_brackets = instancia:GetBarBracket() - local bars_separator = instancia:GetBarSeparator() + local percentageType = instancia.row_info.percent_type + local barsShowData = instancia.row_info.textR_show_data + local barsBrackets = instancia:GetBarBracket() + local barsSeparator = instancia:GetBarSeparator() local baseframe = instancia.baseframe - local use_animations = Details.is_using_row_animations and (not baseframe.isStretching and not forcar and not baseframe.isResizing) - + local useAnimations = Details.is_using_row_animations and (not baseframe.isStretching and not forcar and not baseframe.isResizing) + if (total == 0) then total = 0.00000001 end - + local myPos - local following = instancia.following.enabled and sub_atributo ~= 6 - + local following = instancia.following.enabled and subAttribute ~= 6 + if (following) then - if (using_cache) then + if (isUsingCache) then local pname = Details.playername - for i, actor in _ipairs (conteudo) do + for i, actor in _ipairs (actorTableContent) do if (actor.nome == pname) then myPos = i break @@ -2205,78 +2223,72 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex end end - local combat_time = instancia.showing:GetCombatTime() - + local combatTime = instancia.showing:GetCombatTime() UsingCustomLeftText = instancia.row_info.textL_enable_custom_text UsingCustomRightText = instancia.row_info.textR_enable_custom_text - - local use_total_bar = false + + local useTotalBar = false if (instancia.total_bar.enabled) then - - use_total_bar = true - + useTotalBar = true + if (instancia.total_bar.only_in_group and (not _IsInGroup() and not _IsInRaid())) then - use_total_bar = false + useTotalBar = false end - - if (sub_atributo > 4) then --enemies, frags, void zones - use_total_bar = false + + if (subAttribute > 4) then --enemies, frags, void zones + useTotalBar = false end - end - - if (sub_atributo == 2) then --> dps - instancia.player_top_dps = conteudo [1].last_dps + + if (subAttribute == 2) then --dps + instancia.player_top_dps = actorTableContent [1].last_dps instancia.player_top_dps_threshold = instancia.player_top_dps - (instancia.player_top_dps * 0.65) end - + local totalBarIsShown - + if (instancia.bars_sort_direction == 1) then --top to bottom - - if (use_total_bar and instancia.barraS[1] == 1) then - + if (useTotalBar and instancia.barraS[1] == 1) then whichRowLine = 2 - local iter_last = instancia.barraS[2] - if (iter_last == instancia.rows_fit_in_window) then - iter_last = iter_last - 1 + local iterLast = instancia.barraS[2] + if (iterLast == instancia.rows_fit_in_window) then + iterLast = iterLast - 1 end - + local row1 = lineContainer [1] row1.minha_tabela = nil - row1.lineText1:SetText (Loc ["STRING_TOTAL"]) + row1.lineText1:SetText(Loc ["STRING_TOTAL"]) if (instancia.use_multi_fontstrings) then row1.lineText2:SetText("") - row1.lineText3:SetText(Details:ToK2 (total)) - row1.lineText4:SetText(Details:ToK (total / combat_time)) + row1.lineText3:SetText(Details:ToK2(total)) + row1.lineText4:SetText(Details:ToK(total / combatTime)) else - row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combat_time) .. ")") + row1.lineText4:SetText(Details:ToK2(total) .. " (" .. Details:ToK(total / combatTime) .. ")") end - - row1:SetValue (100) - local r, g, b = unpack (instancia.total_bar.color) - row1.textura:SetVertexColor (r, g, b) - - row1.icone_classe:SetTexture (instancia.total_bar.icon) - row1.icone_classe:SetTexCoord (0.0625, 0.9375, 0.0625, 0.9375) - - Details.FadeHandler.Fader (row1, "out") + + row1:SetValue(100) + local r, g, b = unpack(instancia.total_bar.color) + row1.textura:SetVertexColor(r, g, b) + row1.icone_classe:SetTexture(instancia.total_bar.icon) + row1.icone_classe:SetTexCoord(0.0625, 0.9375, 0.0625, 0.9375) + + Details.FadeHandler.Fader(row1, "out") totalBarIsShown = true - + if (following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS[2] < myPos) then - for i = instancia.barraS[1], iter_last-1, 1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[1], iterLast-1, 1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end - conteudo[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + actorTableContent[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 else - for i = instancia.barraS[1], iter_last, 1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[1], iterLast, 1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end @@ -2284,126 +2296,126 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex else if (following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS[2] < myPos) then - for i = instancia.barraS[1], instancia.barraS[2]-1, 1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[1], instancia.barraS[2]-1, 1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end - - conteudo[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + + actorTableContent[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 else - for i = instancia.barraS[1], instancia.barraS[2], 1 do - if (conteudo[i]) then - - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[1], instancia.barraS[2], 1 do + if (actorTableContent[i]) then + + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end end end - + elseif (instancia.bars_sort_direction == 2) then --bottom to top - - if (use_total_bar and instancia.barraS[1] == 1) then - + + if (useTotalBar and instancia.barraS[1] == 1) then + whichRowLine = 2 local iter_last = instancia.barraS[2] if (iter_last == instancia.rows_fit_in_window) then iter_last = iter_last - 1 end - + local row1 = lineContainer [1] row1.minha_tabela = nil - row1.lineText1:SetText (Loc ["STRING_TOTAL"]) - + row1.lineText1:SetText(Loc ["STRING_TOTAL"]) + if (instancia.use_multi_fontstrings) then row1.lineText2:SetText("") - row1.lineText3:SetText(Details:ToK2 (total)) - row1.lineText4:SetText(Details:ToK (total / combat_time)) + row1.lineText3:SetText(Details:ToK2(total)) + row1.lineText4:SetText(Details:ToK(total / combatTime)) else - row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combat_time) .. ")") + row1.lineText4:SetText(Details:ToK2(total) .. " (" .. Details:ToK(total / combatTime) .. ")") end - row1:SetValue (100) - local r, g, b = unpack (instancia.total_bar.color) - row1.textura:SetVertexColor (r, g, b) - - row1.icone_classe:SetTexture (instancia.total_bar.icon) - row1.icone_classe:SetTexCoord (0.0625, 0.9375, 0.0625, 0.9375) - - Details.FadeHandler.Fader (row1, "out") + row1:SetValue(100) + local r, g, b = unpack(instancia.total_bar.color) + row1.textura:SetVertexColor(r, g, b) + + row1.icone_classe:SetTexture(instancia.total_bar.icon) + row1.icone_classe:SetTexCoord(0.0625, 0.9375, 0.0625, 0.9375) + + Details.FadeHandler.Fader(row1, "out") totalBarIsShown = true - + if (following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS[2] < myPos) then - conteudo[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + actorTableContent[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 - for i = iter_last-1, instancia.barraS[1], -1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = iter_last-1, instancia.barraS[1], -1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end else - for i = iter_last, instancia.barraS[1], -1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = iter_last, instancia.barraS[1], -1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end end else if (following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS[2] < myPos) then - conteudo[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + actorTableContent[myPos]:RefreshLine (instancia, lineContainer, whichRowLine, myPos, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 - for i = instancia.barraS[2]-1, instancia.barraS[1], -1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[2]-1, instancia.barraS[1], -1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end else -- /run print (Details:GetInstance(1).barraS[2]) -- vai do 5 ao 1 -- qual barra come�a no 1 -- i = 5 at� 1 -- player 5 atualiza na barra 1 / player 1 atualiza na barra 5 - for i = instancia.barraS[2], instancia.barraS[1], -1 do - if (conteudo[i]) then - conteudo[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) + for i = instancia.barraS[2], instancia.barraS[1], -1 do + if (actorTableContent[i]) then + actorTableContent[i]:RefreshLine (instancia, lineContainer, whichRowLine, i, total, subAttribute, forcar, keyName, combatTime, percentageType, useAnimations, barsShowData, barsBrackets, barsSeparator) whichRowLine = whichRowLine+1 end end end end - + end - + if (totalBarIsShown) then instancia:RefreshScrollBar(amount + 1) else instancia:RefreshScrollBar(amount) end - - if (use_animations) then + + if (useAnimations) then instancia:PerformAnimations(whichRowLine - 1) end - + --> beta, hidar barras n�o usadas durante um refresh for�ado if (forcar) then if (instancia.modo == 2) then --> group for i = whichRowLine, instancia.rows_fit_in_window do - Details.FadeHandler.Fader (instancia.barras [i], "in", Details.fade_speed) + Details.FadeHandler.Fader(instancia.barras [i], "in", Details.fade_speed) end end end - + Details.LastFullDamageUpdate = Details._tempo - + instancia:AutoAlignInLineFontStrings() - return Details:EndRefresh(instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + return Details:EndRefresh(instancia, total, combatObject, showing) --> retorna a tabela que precisa ganhar o refresh end --[[exported]] function Details:AutoAlignInLineFontStrings() - + --if this instance is using in line texts, check the min distance and the length of strings to make them more spread appart if (self.use_multi_fontstrings and self.use_auto_align_multi_fontstrings) then local maxStringLength_StringFour = 0 @@ -2424,7 +2436,7 @@ end local stringLength = thisLine.lineText4:GetStringWidth() maxStringLength_StringFour = stringLength > maxStringLength_StringFour and stringLength or maxStringLength_StringFour end - + --check strings 2 and 3 if (thisLine.lineText2:GetText() ~= "" and thisLine.lineText3:GetText() ~= "") then --the length of the middle string determines the space between it and the next string in the left @@ -2567,14 +2579,13 @@ end -- ~atualizar ~barra ~update function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, rank, total, sub_atributo, forcar, keyName, combat_time, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator) - - local thisLine = lineContainer [whichRowLine] - + local thisLine = lineContainer[whichRowLine] + if (not thisLine) then print ("DEBUG: problema com "..whichRowLine.." "..rank) return end - + local previousData = thisLine.minha_tabela thisLine.minha_tabela = self --store references self.minha_barra = thisLine --store references @@ -2582,55 +2593,54 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran thisLine.colocacao = rank self.colocacao = rank - local damage_total = self.total --total damage of this actor + local damageTotal = self.total --total damage of this actor local dps - - local porcentagem - local esta_porcentagem - + local percentString + local percentNumber + --calc the percent amount base on the percent type if (percentage_type == 1) then - porcentagem = _cstr ("%.1f", self [keyName] / total * 100) + percentString = format ("%.1f", self [keyName] / total * 100) elseif (percentage_type == 2) then - porcentagem = _cstr ("%.1f", self [keyName] / instance.top * 100) + percentString = format ("%.1f", self [keyName] / instance.top * 100) end - --> calculate the actor dps - if ( (Details.time_type == 2 and self.grupo) or not Details:CaptureGet ("damage") or instance.segmento == -1) then - if (instance.segmento == -1 and combat_time == 0) then - local p = Details.tabela_vigente (1, self.nome) - if (p) then - local t = p:Tempo() - dps = damage_total / t - self.last_dps = dps - else - dps = damage_total / combat_time - self.last_dps = dps - end + --calculate the actor dps + if ((Details.time_type == 2 and self.grupo) or not Details:CaptureGet ("damage") or instance.segmento == -1) then + if (instance.segmento == -1 and combat_time == 0) then + local p = Details.tabela_vigente (1, self.nome) + if (p) then + local t = p:Tempo() + dps = damageTotal / t + self.last_dps = dps else - dps = damage_total / combat_time + dps = damageTotal / combat_time self.last_dps = dps end else - if (not self.on_hold) then - dps = damage_total/self:Tempo() --calcula o dps deste objeto - self.last_dps = dps --salva o dps dele + dps = damageTotal / combat_time + self.last_dps = dps + end + else + if (not self.on_hold) then + dps = damageTotal/self:Tempo() --calcula o dps deste objeto + self.last_dps = dps --salva o dps dele + else + if (self.last_dps == 0) then --> n�o calculou o dps dele ainda mas entrou em standby + dps = damageTotal/self:Tempo() + self.last_dps = dps else - if (self.last_dps == 0) then --> n�o calculou o dps dele ainda mas entrou em standby - dps = damage_total/self:Tempo() - self.last_dps = dps - else - dps = self.last_dps - end + dps = self.last_dps end end - + end + --right text if (sub_atributo == 1) then --damage done - dps = _math_floor (dps) - local formated_damage = SelectedToKFunction (_, damage_total) - local formated_dps = SelectedToKFunction (_, dps) + dps = _math_floor(dps) + local formated_damage = SelectedToKFunction(_, damageTotal) + local formated_dps = SelectedToKFunction(_, dps) thisLine.ps_text = formated_dps if (not bars_show_data [1]) then @@ -2640,40 +2650,39 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran formated_dps = "" end if (not bars_show_data [3]) then - porcentagem = "" + percentString = "" else - porcentagem = porcentagem .. "%" + percentString = percentString .. "%" end - - local rightText = formated_damage .. bars_brackets[1] .. formated_dps .. bars_separator .. porcentagem .. bars_brackets[2] + + local rightText = formated_damage .. bars_brackets[1] .. formated_dps .. bars_separator .. percentString .. bars_brackets[2] if (UsingCustomRightText) then - thisLine.lineText4:SetText(_string_replace (instance.row_info.textR_custom_text, formated_damage, formated_dps, porcentagem, self, instance.showing, instance, rightText)) + thisLine.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formated_damage, formated_dps, percentString, self, instance.showing, instance, rightText)) else if (instance.use_multi_fontstrings) then - instance:SetInLineTexts(thisLine, formated_damage, formated_dps, porcentagem) + instance:SetInLineTexts(thisLine, formated_damage, formated_dps, percentString) else thisLine.lineText4:SetText(rightText) end end - - esta_porcentagem = _math_floor ((damage_total/instance.top) * 100) + + percentNumber = _math_floor((damageTotal/instance.top) * 100) elseif (sub_atributo == 2) then --dps - local raw_dps = dps - dps = _math_floor (dps) - - local formated_damage = SelectedToKFunction (_, damage_total) - local formated_dps = SelectedToKFunction (_, dps) + dps = _math_floor(dps) + + local formated_damage = SelectedToKFunction(_, damageTotal) + local formated_dps = SelectedToKFunction(_, dps) thisLine.ps_text = formated_dps - + local diff_from_topdps - + if (rank > 1) then diff_from_topdps = instance.player_top_dps - raw_dps end - + local rightText if (diff_from_topdps) then local threshold = diff_from_topdps / instance.player_top_dps_threshold * 100 @@ -2682,24 +2691,24 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran else threshold = 5 end - + local rr, gg, bb = Details:percent_color ( threshold ) - - rr, gg, bb = Details:hex (_math_floor (rr*255)), Details:hex (_math_floor (gg*255)), "28" + + rr, gg, bb = Details:hex (_math_floor(rr*255)), Details:hex (_math_floor(gg*255)), "28" local color_percent = "" .. rr .. gg .. bb .. "" - + if (not bars_show_data [1]) then formated_dps = "" end if (not bars_show_data [2]) then color_percent = "" else - color_percent = bars_brackets[1] .. "|cFFFF4444-|r|cFF" .. color_percent .. SelectedToKFunction (_, _math_floor (diff_from_topdps)) .. "|r" .. bars_brackets[2] + color_percent = bars_brackets[1] .. "|cFFFF4444-|r|cFF" .. color_percent .. SelectedToKFunction(_, _math_floor(diff_from_topdps)) .. "|r" .. bars_brackets[2] end - + rightText = formated_dps .. color_percent + else - local icon = " |TInterface\\GROUPFRAME\\UI-Group-LeaderIcon:14:14:0:0:16:16:0:16:0:16|t " if (not bars_show_data [1]) then formated_dps = "" @@ -2707,12 +2716,12 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran if (not bars_show_data [2]) then icon = "" end - + rightText = formated_dps .. icon end if (UsingCustomRightText) then - thisLine.lineText4:SetText (_string_replace (instance.row_info.textR_custom_text, formated_dps, formated_damage, porcentagem, self, instance.showing, instance, rightText)) + thisLine.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formated_dps, formated_damage, percentString, self, instance.showing, instance, rightText)) else if (instance.use_multi_fontstrings) then --instance:SetInLineTexts(thisLine, formated_damage, formated_dps, porcentagem) @@ -2722,14 +2731,13 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran end end - esta_porcentagem = _math_floor ((dps/instance.top) * 100) - - elseif (sub_atributo == 3) then --damage taken + percentNumber = _math_floor((dps/instance.top) * 100) + elseif (sub_atributo == 3) then --damage taken local dtps = self.damage_taken / combat_time - - local formated_damage_taken = SelectedToKFunction (_, self.damage_taken) - local formated_dtps = SelectedToKFunction (_, dtps) + + local formated_damage_taken = SelectedToKFunction(_, self.damage_taken) + local formated_dtps = SelectedToKFunction(_, dtps) thisLine.ps_text = formated_dtps if (not bars_show_data [1]) then @@ -2739,177 +2747,168 @@ function atributo_damage:RefreshLine (instance, lineContainer, whichRowLine, ran formated_dtps = "" end if (not bars_show_data [3]) then - porcentagem = "" + percentString = "" else - porcentagem = porcentagem .. "%" + percentString = percentString .. "%" end - - local rightText = formated_damage_taken .. bars_brackets[1] .. formated_dtps .. bars_separator .. porcentagem .. bars_brackets[2] + + local rightText = formated_damage_taken .. bars_brackets[1] .. formated_dtps .. bars_separator .. percentString .. bars_brackets[2] if (UsingCustomRightText) then - thisLine.lineText4:SetText (_string_replace (instance.row_info.textR_custom_text, formated_damage_taken, formated_dtps, porcentagem, self, instance.showing, instance, rightText)) + thisLine.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formated_damage_taken, formated_dtps, percentString, self, instance.showing, instance, rightText)) else if (instance.use_multi_fontstrings) then - instance:SetInLineTexts(thisLine, formated_damage_taken, formated_dtps, porcentagem) + instance:SetInLineTexts(thisLine, formated_damage_taken, formated_dtps, percentString) else thisLine.lineText4:SetText(rightText) end end - - esta_porcentagem = _math_floor ((self.damage_taken/instance.top) * 100) - + + percentNumber = _math_floor((self.damage_taken/instance.top) * 100) + elseif (sub_atributo == 4) then --friendly fire - - local formated_friendly_fire = SelectedToKFunction (_, self.friendlyfire_total) + local formated_friendly_fire = SelectedToKFunction(_, self.friendlyfire_total) if (not bars_show_data [1]) then formated_friendly_fire = "" end if (not bars_show_data [3]) then - porcentagem = "" + percentString = "" else - porcentagem = porcentagem .. "%" + percentString = percentString .. "%" end - - local rightText = formated_friendly_fire .. bars_brackets[1] .. porcentagem .. bars_brackets[2] + + local rightText = formated_friendly_fire .. bars_brackets[1] .. percentString .. bars_brackets[2] if (UsingCustomRightText) then - thisLine.lineText4:SetText (_string_replace (instance.row_info.textR_custom_text, formated_friendly_fire, "", porcentagem, self, instance.showing, instance, rightText)) + thisLine.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formated_friendly_fire, "", percentString, self, instance.showing, instance, rightText)) else if (instance.use_multi_fontstrings) then - instance:SetInLineTexts(thisLine, "", formated_friendly_fire, porcentagem) + instance:SetInLineTexts(thisLine, "", formated_friendly_fire, percentString) else thisLine.lineText4:SetText(rightText) end end - esta_porcentagem = _math_floor ((self.friendlyfire_total/instance.top) * 100) - + percentNumber = _math_floor((self.friendlyfire_total/instance.top) * 100) + elseif (sub_atributo == 6) then --enemies - local dtps = self.damage_taken / combat_time - - local formated_damage_taken = SelectedToKFunction (_, self.damage_taken) - local formated_dtps = SelectedToKFunction (_, dtps) - thisLine.ps_text = formated_dtps + + local formatedDamageTaken = SelectedToKFunction(_, self.damage_taken) + local formatedDtps = SelectedToKFunction(_, dtps) + thisLine.ps_text = formatedDtps if (not bars_show_data [1]) then - formated_damage_taken = "" + formatedDamageTaken = "" end if (not bars_show_data [2]) then - formated_dtps = "" + formatedDtps = "" end if (not bars_show_data [3]) then - porcentagem = "" + percentString = "" else - porcentagem = porcentagem .. "%" + percentString = percentString .. "%" end - - local rightText = formated_damage_taken .. bars_brackets[1] .. formated_dtps .. bars_separator .. porcentagem .. bars_brackets[2] + + local rightText = formatedDamageTaken .. bars_brackets[1] .. formatedDtps .. bars_separator .. percentString .. bars_brackets[2] if (UsingCustomRightText) then - thisLine.lineText4:SetText (_string_replace (instance.row_info.textR_custom_text, formated_damage_taken, formated_dtps, porcentagem, self, instance.showing, instance, rightText)) + thisLine.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formatedDamageTaken, formatedDtps, percentString, self, instance.showing, instance, rightText)) else if (instance.use_multi_fontstrings) then - instance:SetInLineTexts(thisLine, formated_damage_taken, formated_dtps, porcentagem) + instance:SetInLineTexts(thisLine, formatedDamageTaken, formatedDtps, percentString) else thisLine.lineText4:SetText(rightText) end end - - esta_porcentagem = _math_floor ((self.damage_taken/instance.top) * 100) + + percentNumber = _math_floor((self.damage_taken/instance.top) * 100) end --need tooltip update? if (thisLine.mouse_over and not instance.baseframe.isMoving) then - gump:UpdateTooltip (whichRowLine, thisLine, instance) + gump:UpdateTooltip(whichRowLine, thisLine, instance) end if (self.need_refresh) then self.need_refresh = false forcar = true end - + actor_class_color_r, actor_class_color_g, actor_class_color_b = self:GetBarColor() - - return self:RefreshLineValue(thisLine, instance, previousData, forcar, esta_porcentagem, whichRowLine, lineContainer, use_animations) + + return self:RefreshLineValue(thisLine, instance, previousData, forcar, percentNumber, whichRowLine, lineContainer, use_animations) end ---[[ exported]] function Details:RefreshLineValue(thisLine, instance, previousData, forcar, esta_porcentagem, whichRowLine, lineContainer, use_animations) - - --> primeiro colocado + +function Details:RefreshLineValue(thisLine, instance, previousData, isForceRefresh, percent, whichRowLine, lineContainer, useAnimations) --[[ exported]] if (thisLine.colocacao == 1) then - --aqui thisLine.animacao_ignorar = true - - if (not previousData or previousData ~= thisLine.minha_tabela or forcar) then - thisLine:SetValue (100) - + + if (not previousData or previousData ~= thisLine.minha_tabela or isForceRefresh) then + thisLine:SetValue(100) + if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then - Details.FadeHandler.Fader (thisLine, "out") + Details.FadeHandler.Fader(thisLine, "out") end - - return self:RefreshBarra (thisLine, instance) + + return self:RefreshBarra(thisLine, instance) else return end else if (thisLine.hidden or thisLine.fading_in or thisLine.faded) then - --> setando o valor mesmo com anima��es pq o barra esta hidada com o value do �ltimo actor que ela mostrou - if (use_animations) then - thisLine.animacao_fim = esta_porcentagem - thisLine:SetValue (esta_porcentagem) + --setando o valor mesmo com anima��es pq o barra esta hidada com o value do �ltimo actor que ela mostrou + if (useAnimations) then + thisLine.animacao_fim = percent + thisLine:SetValue(percent) else - thisLine:SetValue (esta_porcentagem) + thisLine:SetValue(percent) thisLine.animacao_ignorar = true end - - Details.FadeHandler.Fader (thisLine, "out") - return self:RefreshBarra (thisLine, instance) + Details.FadeHandler.Fader(thisLine, "out") + + return self:RefreshBarra(thisLine, instance) else - --> agora esta comparando se a tabela da barra � diferente da tabela na atualiza��o anterior - if (not previousData or previousData ~= thisLine.minha_tabela or forcar) then --> aqui diz se a barra do jogador mudou de posi��o ou se ela apenas ser� atualizada - if (use_animations) then - thisLine.animacao_fim = esta_porcentagem + --agora esta comparando se a tabela da barra � diferente da tabela na atualiza��o anterior + if (not previousData or previousData ~= thisLine.minha_tabela or isForceRefresh) then --aqui diz se a barra do jogador mudou de posi��o ou se ela apenas ser� atualizada + if (useAnimations) then + thisLine.animacao_fim = percent else - thisLine:SetValue (esta_porcentagem) + thisLine:SetValue(percent) thisLine.animacao_ignorar = true end - - thisLine.last_value = esta_porcentagem --> reseta o ultimo valor da barra - - return self:RefreshBarra (thisLine, instance) - - elseif (esta_porcentagem ~= thisLine.last_value) then --> continua mostrando a mesma tabela ent�o compara a porcentagem - --> apenas atualizar - if (use_animations) then - thisLine.animacao_fim = esta_porcentagem + + thisLine.last_value = percent --reseta o ultimo valor da barra + + return self:RefreshBarra(thisLine, instance) + + elseif (percent ~= thisLine.last_value) then --continua mostrando a mesma tabela ent�o compara a porcentagem + --apenas atualizar + if (useAnimations) then + thisLine.animacao_fim = percent else - thisLine:SetValue (esta_porcentagem) + thisLine:SetValue(percent) end - thisLine.last_value = esta_porcentagem - - return self:RefreshBarra (thisLine, instance) + thisLine.last_value = percent + + return self:RefreshBarra(thisLine, instance) end end - end - end -local set_text_size = function (bar, instance) +local setLineTextSize = function(line, instance) if (instance.bars_inverted) then - bar.lineText4:SetSize (instance.cached_bar_width - bar.lineText1:GetStringWidth() - 20, 15) + line.lineText4:SetSize(instance.cached_bar_width - line.lineText1:GetStringWidth() - 20, 15) else - bar.lineText1:SetSize (instance.cached_bar_width - bar.lineText4:GetStringWidth() - 20, 15) + line.lineText1:SetSize(instance.cached_bar_width - line.lineText4:GetStringWidth() - 20, 15) end end ---> this is the in bar icon (icon inside the player bar, like faction or role icon) padding, icon has the row height as is width and height - padding -local InBarIconPadding = 6 ---[[ exported]] function Details:SetBarLeftText (bar, instance, enemy, arena_enemy, arena_ally, UsingCustomLeftText) - - local bar_number = "" +function Details:SetBarLeftText(bar, instance, enemy, arenaEnemy, arenaAlly, usingCustomLeftText) --[[ exported]] + local barNumber = "" if (instance.row_info.textL_show_number) then - bar_number = bar.colocacao .. ". " + barNumber = bar.colocacao .. ". " end --translate cyrillic alphabet to western alphabet by Vardex (https://github.com/Vardex May 22, 2019) @@ -2918,79 +2917,78 @@ local InBarIconPadding = 6 end if (enemy) then - if (arena_enemy) then + if (arenaEnemy) then if (instance.row_info.show_arena_role_icon) then - --> show arena role icon + --show arena role icon local sizeOffset = instance.row_info.arena_role_icon_size_offset - local leftText = bar_number .. "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t " .. self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t ", self, instance.showing, instance, leftText)) + local leftText = barNumber .. "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t " .. self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t ", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) + bar.lineText1:SetText(leftText) end else --don't show arena role icon - local leftText = bar_number .. self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, " ", self, instance.showing, instance, leftText)) + local leftText = barNumber .. self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, " ", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) + bar.lineText1:SetText(leftText) end end else if (instance.row_info.show_faction_icon) then local sizeOffset = instance.row_info.faction_icon_size_offset if (Details.faction_against == "Horde") then - local leftText = bar_number .. "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:0:32:0:32|t"..self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:0:32:0:32|t", self, instance.showing, instance, leftText)) + local leftText = barNumber .. "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:0:32:0:32|t"..self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:0:32:0:32|t", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) --seta o texto da esqueda -- HORDA + bar.lineText1:SetText(leftText) --seta o texto da esqueda -- HORDA end else --alliance - local leftText = bar_number .. "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:32:64:0:32|t"..self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:32:64:0:32|t", self, instance.showing, instance, leftText)) + local leftText = barNumber .. "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:32:64:0:32|t"..self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\AddOns\\Details\\images\\icones_barra:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:32:32:64:0:32|t", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) --seta o texto da esqueda -- ALLY + bar.lineText1:SetText(leftText) --seta o texto da esqueda -- ALLY end end else --don't show faction icon - local leftText = bar_number .. self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, " ", self, instance.showing, instance, leftText)) + local leftText = barNumber .. self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, " ", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) + bar.lineText1:SetText(leftText) end end end else - if (arena_ally and instance.row_info.show_arena_role_icon) then + if (arenaAlly and instance.row_info.show_arena_role_icon) then local sizeOffset = instance.row_info.arena_role_icon_size_offset - local leftText = bar_number .. "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t " .. self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t ", self, instance.showing, instance, leftText)) + local leftText = barNumber .. "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t " .. self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. (instance.row_info.height + sizeOffset)..":"..(instance.row_info.height + sizeOffset) .. ":0:0:256:256:" .. Details.role_texcoord [self.role or "NONE"] .. "|t ", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) + bar.lineText1:SetText(leftText) end else - local leftText = bar_number .. self.displayName - if (UsingCustomLeftText) then - bar.lineText1:SetText (_string_replace (instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "", self, instance.showing, instance, leftText)) + local leftText = barNumber .. self.displayName + if (usingCustomLeftText) then + bar.lineText1:SetText(stringReplace(instance.row_info.textL_custom_text, bar.colocacao, self.displayName, "", self, instance.showing, instance, leftText)) else - bar.lineText1:SetText (leftText) --seta o texto da esqueda + bar.lineText1:SetText(leftText) --seta o texto da esqueda end end end - - set_text_size (bar, instance) + + setLineTextSize (bar, instance) end --[[ exported]] function Details:SetBarColors(bar, instance, r, g, b, a) - a = a or 1 - + if (instance.row_info.texture_class_colors) then --[[ Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis if (instance.bars_inverted) then @@ -3000,11 +2998,11 @@ end end]] bar.textura:SetVertexColor(r, g, b, a) end - + if (instance.row_info.texture_background_class_color) then bar.background:SetVertexColor(r, g, b, a) end - + if (instance.row_info.textL_class_colors) then bar.lineText1:SetTextColor(r, g, b, a) end @@ -3020,12 +3018,10 @@ end local alpha = instance.row_info.backdrop.color[4] bar.lineBorder:SetVertexColor(r, g, b, alpha) end -end +end --@self: actor object ---[[ exported]] function Details:SetClassIcon (texture, instance, classe) --self is the actorObject - - +function Details:SetClassIcon(texture, instance, class) --[[ exported]] local customIcon if (Details.immersion_unit_special_icons) then customIcon = Details.Immersion.GetIcon(self.aID) @@ -3043,136 +3039,132 @@ end texture:SetVertexColor(1, 1, 1) elseif (self.spellicon) then - texture:SetTexture (self.spellicon) - texture:SetTexCoord (0.078125, 0.921875, 0.078125, 0.921875) - - elseif (classe == "UNKNOW") then - texture:SetTexture ([[Interface\AddOns\Details\images\classes_plus]]) - texture:SetTexCoord (0.50390625, 0.62890625, 0, 0.125) - texture:SetVertexColor (1, 1, 1) - - elseif (classe == "UNGROUPPLAYER") then + texture:SetTexture(self.spellicon) + texture:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875) + + elseif (class == "UNKNOW") then + texture:SetTexture([[Interface\AddOns\Details\images\classes_plus]]) + texture:SetTexCoord(0.50390625, 0.62890625, 0, 0.125) + texture:SetVertexColor(1, 1, 1) + + elseif (class == "UNGROUPPLAYER") then if (self.enemy) then if (Details.faction_against == "Horde") then - texture:SetTexture ("Interface\\ICONS\\Achievement_Character_Troll_Male") - texture:SetTexCoord (0.05, 0.95, 0.05, 0.95) + texture:SetTexture("Interface\\ICONS\\Achievement_Character_Troll_Male") + texture:SetTexCoord(0.05, 0.95, 0.05, 0.95) else - texture:SetTexture ("Interface\\ICONS\\Achievement_Character_Nightelf_Female") - texture:SetTexCoord (0.05, 0.95, 0.05, 0.95) + texture:SetTexture("Interface\\ICONS\\Achievement_Character_Nightelf_Female") + texture:SetTexCoord(0.05, 0.95, 0.05, 0.95) end else if (Details.faction_against == "Horde") then - texture:SetTexture ("Interface\\ICONS\\Achievement_Character_Nightelf_Female") - texture:SetTexCoord (0.05, 0.95, 0.05, 0.95) + texture:SetTexture("Interface\\ICONS\\Achievement_Character_Nightelf_Female") + texture:SetTexCoord(0.05, 0.95, 0.05, 0.95) else - texture:SetTexture ("Interface\\ICONS\\Achievement_Character_Troll_Male") - texture:SetTexCoord (0.05, 0.95, 0.05, 0.95) + texture:SetTexture("Interface\\ICONS\\Achievement_Character_Troll_Male") + texture:SetTexCoord(0.05, 0.95, 0.05, 0.95) end end - texture:SetVertexColor (1, 1, 1) - - elseif (classe == "PET") then + + texture:SetVertexColor(1, 1, 1) + + elseif (class == "PET") then texture:SetTexture(instance and instance.row_info.icon_file or [[Interface\AddOns\Details\images\classes_small]]) texture:SetTexCoord(0.25, 0.49609375, 0.75, 1) texture:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b) + else if (instance and instance.row_info.use_spec_icons) then if (self.spec and Details.class_specs_coords[self.spec]) then texture:SetTexture(instance.row_info.spec_file) - texture:SetTexCoord(_unpack (Details.class_specs_coords[self.spec])) + texture:SetTexCoord(unpack(Details.class_specs_coords[self.spec])) texture:SetVertexColor(1, 1, 1) else - --if (self.spec and not Details.class_specs_coords[self.spec]) then - -- print("|cFFFFAA00Details!|r error 0x8525, report on discord", self.spec, self.classe) - --end - texture:SetTexture(instance.row_info.icon_file or [[Interface\AddOns\Details\images\classes_small]]) - texture:SetTexCoord(_unpack (Details.class_coords[classe])) + texture:SetTexCoord(unpack(Details.class_coords[class])) texture:SetVertexColor(1, 1, 1) end else texture:SetTexture(instance and instance.row_info.icon_file or [[Interface\AddOns\Details\images\classes_small]]) - texture:SetTexCoord(_unpack (Details.class_coords[classe])) + texture:SetTexCoord(unpack(Details.class_coords[class])) texture:SetVertexColor(1, 1, 1) end end end ---endd elsefi - ---[[ exported]] function Details:RefreshBarra (thisLine, instance, from_resize) - - local class, enemy, arena_enemy, arena_ally = self.classe, self.enemy, self.arena_enemy, self.arena_ally - + + +function Details:RefreshBarra(thisLine, instance, fromResize) --[[ exported]] + local class, enemy, arenaEnemy, arenaAlly = self.classe, self.enemy, self.arena_enemy, self.arena_ally + if (not class) then - Details:Msg ("Warning, actor without a class:", self.nome, self.flag_original, self.serial) + Details:Msg("Warning, actor without a class:", self.nome, self.flag_original, self.serial) self.classe = "UNKNOW" class = "UNKNOW" end - - if (from_resize) then + + if (fromResize) then actor_class_color_r, actor_class_color_g, actor_class_color_b = self:GetBarColor() end - --> icon + --icon self:SetClassIcon(thisLine.icone_classe, instance, class) - --> texture color + + --texture color self:SetBarColors(thisLine, instance, actor_class_color_r, actor_class_color_g, actor_class_color_b) - --> left text - self:SetBarLeftText(thisLine, instance, enemy, arena_enemy, arena_ally, UsingCustomLeftText) - + + --left text + self:SetBarLeftText(thisLine, instance, enemy, arenaEnemy, arenaAlly, UsingCustomLeftText) end --------------------------------------------- // TOOLTIPS // --------------------------------------------- - - ---------> TOOLTIPS BIFURCA��O -- ~tooltip function atributo_damage:ToolTip (instance, numero, barra, keydown) --> seria possivel aqui colocar o icone da classe dele? if (instance.atributo == 5) then --> custom - return self:TooltipForCustom (barra) + return self:TooltipForCustom(barra) else if (instance.sub_atributo == 1 or instance.sub_atributo == 2) then --> damage done or Dps or enemy - return self:ToolTip_DamageDone (instance, numero, barra, keydown) + return self:ToolTip_DamageDone(instance, numero, barra, keydown) + elseif (instance.sub_atributo == 3) then --> damage taken - return self:ToolTip_DamageTaken (instance, numero, barra, keydown) + return self:ToolTip_DamageTaken(instance, numero, barra, keydown) + elseif (instance.sub_atributo == 6) then --> enemies - return self:ToolTip_Enemies (instance, numero, barra, keydown) + return self:ToolTip_Enemies(instance, numero, barra, keydown) + elseif (instance.sub_atributo == 4) then --> friendly fire - return self:ToolTip_FriendlyFire (instance, numero, barra, keydown) + return self:ToolTip_FriendlyFire(instance, numero, barra, keydown) end end end ---> tooltip locals + +--tooltip locals local r, g, b local barAlha = .6 - - ---------> DAMAGE DONE & DPS - function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) - local owner = self.owner if (owner and owner.classe) then - r, g, b = unpack (Details.class_colors [owner.classe]) + r, g, b = unpack(Details.class_colors [owner.classe]) else if (not Details.class_colors [self.classe]) then return print ("Details!: error class not found:", self.classe, "for", self.nome) end - r, g, b = unpack (Details.class_colors [self.classe]) + r, g, b = unpack(Details.class_colors [self.classe]) end --> habilidades local icon_size = Details.tooltip.icon_size local icon_border = Details.tooltip.icon_border_texcoord - + do --> TOP HABILIDADES - + --get variables --local ActorDamage = self.total_without_pet --mostrando os pets no tooltip local ActorDamage = self.total @@ -3184,7 +3176,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) local ActorSkillsSortTable = {} local reflectionSpells = {} - + --get time type local meu_tempo if (Details.time_type == 1 or not self.grupo) then @@ -3194,7 +3186,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) end --add actor spells - for _spellid, _skill in _pairs (ActorSkillsContainer) do + for _spellid, _skill in _pairs(ActorSkillsContainer) do ActorSkillsSortTable [#ActorSkillsSortTable+1] = {_spellid, _skill.total, _skill.total/meu_tempo} if (_skill.isReflection) then reflectionSpells[#reflectionSpells+1] = _skill @@ -3205,36 +3197,36 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) for petIndex, petName in _ipairs (self:Pets()) do local petActor = instancia.showing[class_type]:PegarCombatente (nil, petName) if (petActor) then - for _spellid, _skill in _pairs (petActor:GetActorSpells()) do + for _spellid, _skill in _pairs(petActor:GetActorSpells()) do ActorSkillsSortTable [#ActorSkillsSortTable+1] = {_spellid, _skill.total, _skill.total/meu_tempo, petName:gsub ((" <.*"), "")} end end end --sort - _table_sort (ActorSkillsSortTable, Details.Sort2) - + _table_sort(ActorSkillsSortTable, Details.Sort2) + --> TOP INIMIGOS --get variables local ActorTargetsSortTable = {} - + --add - for target_name, amount in _pairs (self.targets) do + for target_name, amount in _pairs(self.targets) do ActorTargetsSortTable [#ActorTargetsSortTable+1] = {target_name, amount} end --sort - _table_sort (ActorTargetsSortTable, Details.Sort2) + _table_sort(ActorTargetsSortTable, Details.Sort2) --tooltip stuff local tooltip_max_abilities = Details.tooltip.tooltip_max_abilities - + local is_maximized = false if (keydown == "shift" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3) then tooltip_max_abilities = 99 is_maximized = true end - + --> MOSTRA HABILIDADES - Details:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, #ActorSkillsSortTable, Details.tooltip_spell_icon.file, unpack (Details.tooltip_spell_icon.coords)) + Details:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, #ActorSkillsSortTable, Details.tooltip_spell_icon.file, unpack(Details.tooltip_spell_icon.coords)) if (is_maximized) then --highlight shift key @@ -3244,20 +3236,20 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1) Details:AddTooltipHeaderStatusbar (r, g, b, barAlha) end - + local topAbility = ActorSkillsSortTable [1] and ActorSkillsSortTable [1][2] or 0.0001 - + if (#ActorSkillsSortTable > 0) then for i = 1, _math_min (tooltip_max_abilities, #ActorSkillsSortTable) do - + local SkillTable = ActorSkillsSortTable [i] - + local spellID = SkillTable [1] local totalDamage = SkillTable [2] local totalDPS = SkillTable [3] local petName = SkillTable [4] - - local nome_magia, _, icone_magia = _GetSpellInfo (spellID) + + local nome_magia, _, icone_magia = _GetSpellInfo(spellID) if (petName) then if (not nome_magia) then spellID = spellID or "spellId?" @@ -3266,8 +3258,8 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) nome_magia = nome_magia .. " (|cFFCCBBBB" .. petName .. "|r)" end end - - local percent = _cstr("%.1f", totalDamage/ActorDamage*100) + + local percent = format("%.1f", totalDamage/ActorDamage*100) if (string.len(percent) < 4) then percent = percent .. "0" end @@ -3275,9 +3267,9 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) if (instancia.sub_atributo == 1 or instancia.sub_atributo == 6) then GameCooltip:AddLine (nome_magia, FormatTooltipNumber (_, totalDamage) .." ("..percent.."%)") else - GameCooltip:AddLine (nome_magia, FormatTooltipNumber (_, _math_floor (totalDPS)) .." ("..percent.."%)") + GameCooltip:AddLine (nome_magia, FormatTooltipNumber (_, _math_floor(totalDPS)) .." ("..percent.."%)") end - + GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W + 4, icon_size.H + 4, icon_border.L, icon_border.R, icon_border.T, icon_border.B) Details:AddTooltipBackgroundStatusbar (false, totalDamage/topAbility*100) end @@ -3299,18 +3291,18 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) local spellName, _, spellIcon = _GetSpellInfo(spellId) if (spellName) then - GameCooltip:AddLine (spellName, FormatTooltipNumber (_, damageDone) .. " (" .. _math_floor (damageDone / self.total * 100) .. "%)") + GameCooltip:AddLine (spellName, FormatTooltipNumber (_, damageDone) .. " (" .. _math_floor(damageDone / self.total * 100) .. "%)") Details:AddTooltipBackgroundStatusbar (false, damageDone / self.total * 100) GameCooltip:AddIcon (spellIcon, 1, 1, icon_size.W, icon_size.H, 0.1, 0.9, 0.1, 0.9) end end end - end + end --> MOSTRA INIMIGOS local topEnemy = ActorTargetsSortTable [1] and ActorTargetsSortTable [1][2] or 0 if (instancia.sub_atributo == 1 or instancia.sub_atributo == 6) then - + --small blank space Details:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) @@ -3322,7 +3314,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) max_targets = 99 is_maximized = true end - + if (is_maximized) then --highlight GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_ctrl]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) @@ -3334,35 +3326,35 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) for i = 1, _math_min (max_targets, #ActorTargetsSortTable) do local este_inimigo = ActorTargetsSortTable [i] - GameCooltip:AddLine (este_inimigo[1], FormatTooltipNumber (_, este_inimigo[2]) .." (".._cstr("%.1f", este_inimigo[2]/ActorDamageWithPet*100).."%)") + GameCooltip:AddLine (este_inimigo[1], FormatTooltipNumber (_, este_inimigo[2]) .." ("..format("%.1f", este_inimigo[2]/ActorDamageWithPet*100).."%)") GameCooltip:AddIcon ([[Interface\PetBattles\PetBattle-StatIcons]], nil, nil, icon_size.W, icon_size.H, 0, 0.5, 0, 0.5, {.7, .7, .7, 1}, nil, true) Details:AddTooltipBackgroundStatusbar (false, este_inimigo[2] / topEnemy * 100) end end end - + --> PETS local meus_pets = self.pets if (#meus_pets > 0) then --> teve ajudantes - + local quantidade = {} --> armazena a quantidade de pets iguais local danos = {} --> armazena as habilidades local alvos = {} --> armazena os alvos local totais = {} --> armazena o dano total de cada objeto - + --small blank space Details:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) for index, nome in _ipairs (meus_pets) do if (not quantidade [nome]) then quantidade [nome] = 1 - + local my_self = instancia.showing[class_type]:PegarCombatente (nil, nome) if (my_self) then local meu_total = my_self.total_without_pet local tabela = my_self.spells._ActorTable local meus_danos = {} - + --totais [nome] = my_self.total_without_pet local meu_tempo if (Details.time_type == 1 or not self.grupo) then @@ -3371,51 +3363,51 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) meu_tempo = my_self:GetCombatTime() end totais [#totais+1] = {nome, my_self.total_without_pet, my_self.total_without_pet/meu_tempo} - - for spellid, tabela in _pairs (tabela) do - local nome, rank, icone = _GetSpellInfo (spellid) + + for spellid, tabela in _pairs(tabela) do + local nome, rank, icone = _GetSpellInfo(spellid) _table_insert (meus_danos, {spellid, tabela.total, tabela.total/meu_total*100, {nome, rank, icone}}) end - _table_sort (meus_danos, Details.Sort2) + _table_sort(meus_danos, Details.Sort2) danos [nome] = meus_danos - + local meus_inimigos = {} tabela = my_self.targets - for target_name, amount in _pairs (tabela) do + for target_name, amount in _pairs(tabela) do _table_insert (meus_inimigos, {target_name, amount, amount/meu_total*100}) end - _table_sort (meus_inimigos,Details.Sort2) + _table_sort(meus_inimigos,Details.Sort2) alvos [nome] = meus_inimigos end - + else quantidade [nome] = quantidade [nome]+1 end end - + --GameTooltip:AddLine (" ") --GameCooltip:AddLine (" ") - + local _quantidade = 0 local added_logo = false - - _table_sort (totais, Details.Sort2) - + + _table_sort(totais, Details.Sort2) + local ismaximized = false if (keydown == "alt" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 5) then ismaximized = true end - + local topPet = totais [1] and totais [1][2] or 0 for index, _table in _ipairs (totais) do - + if (_table [2] > 0 and (index <= Details.tooltip.tooltip_max_pets or ismaximized)) then - + if (not added_logo) then added_logo = true - + Details:AddTooltipSpellHeaderText (Loc ["STRING_PETS"], headerColor, #totais, [[Interface\COMMON\friendship-heart]], 0.21875, 0.78125, 0.09375, 0.6875) - + if (ismaximized) then GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_alt]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) Details:AddTooltipHeaderStatusbar (r, g, b, 1) @@ -3425,22 +3417,22 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) end end - + local n = _table [1]:gsub (("%s%<.*"), "") if (instancia.sub_atributo == 1) then - GameCooltip:AddLine (n, FormatTooltipNumber (_, _table [2]) .. " (" .. _math_floor (_table [2]/self.total*100) .. "%)") + GameCooltip:AddLine (n, FormatTooltipNumber (_, _table [2]) .. " (" .. _math_floor(_table [2]/self.total*100) .. "%)") else - GameCooltip:AddLine (n, FormatTooltipNumber (_, _math_floor (_table [3])) .. " (" .. _math_floor (_table [2]/self.total*100) .. "%)") + GameCooltip:AddLine (n, FormatTooltipNumber (_, _math_floor(_table [3])) .. " (" .. _math_floor(_table [2]/self.total*100) .. "%)") end - + Details:AddTooltipBackgroundStatusbar (false, _table [2] / topPet * 100) - + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], 1, 1, icon_size.W, icon_size.H, 0.25, 0.49609375, 0.75, 1) end end - + end - + --> ~Phases local segment = instancia:GetShowingCombat() if (segment and self.grupo) then @@ -3448,25 +3440,25 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) local phasesInfo = segment:GetPhases() if (bossInfo and phasesInfo) then if (#phasesInfo > 1) then - + --small blank space Details:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) Details:AddTooltipSpellHeaderText ("Damage by Encounter Phase", headerColor, 1, [[Interface\Garrison\orderhall-missions-mechanic8]], 11/64, 53/64, 11/64, 53/64) --localize-me Details:AddTooltipHeaderStatusbar (r, g, b, barAlha) - + local playerPhases = {} local totalDamage = 0 - - for phase, playersTable in pairs (phasesInfo.damage) do --each phase - + + for phase, playersTable in pairs(phasesInfo.damage) do --each phase + local allPlayers = {} --all players for this phase - for playerName, amount in pairs (playersTable) do + for playerName, amount in pairs(playersTable) do tinsert (allPlayers, {playerName, amount}) totalDamage = totalDamage + amount end table.sort (allPlayers, function(a, b) return a[2] > b[2] end) - + local myRank = 0 for i = 1, #allPlayers do if (allPlayers [i] [1] == self.nome) then @@ -3474,15 +3466,15 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) break end end - + tinsert (playerPhases, {phase, playersTable [self.nome] or 0, myRank, (playersTable [self.nome] or 0) / totalDamage * 100}) end - + table.sort (playerPhases, function(a, b) return a[1] < b[1] end) - + for i = 1, #playerPhases do --[1] Phase Number [2] Amount Done [3] Rank [4] Percent - GameCooltip:AddLine ("|cFFF0F0F0Phase|r " .. playerPhases [i][1], FormatTooltipNumber (_, playerPhases [i][2]) .. " (|cFFFFFF00#" .. playerPhases [i][3] .. "|r, " .. _cstr ("%.1f", playerPhases [i][4]) .. "%)") + GameCooltip:AddLine ("|cFFF0F0F0Phase|r " .. playerPhases [i][1], FormatTooltipNumber (_, playerPhases [i][2]) .. " (|cFFFFFF00#" .. playerPhases [i][3] .. "|r, " .. format ("%.1f", playerPhases [i][4]) .. "%)") GameCooltip:AddIcon ([[Interface\Garrison\orderhall-missions-mechanic9]], 1, 1, 14, 14, 11/64, 53/64, 11/64, 53/64) Details:AddTooltipBackgroundStatusbar() end @@ -3493,18 +3485,18 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown) return true end -local on_switch_show_enemies = function (instance) +local on_switch_show_enemies = function(instance) instance:TrocaTabela (instance, true, 1, 6) return true end -local on_switch_show_frags = function (instance) +local on_switch_show_frags = function(instance) instance:TrocaTabela (instance, true, 1, 5) return true end -local ENEMIES_format_name = function (player) if (player == 0) then return false end return Details:GetOnlyName (player.nome) end -local ENEMIES_format_amount = function (amount) if (amount <= 0) then return false end return Details:ToK (amount) .. " (" .. _cstr ("%.1f", amount / tooltip_temp_table.damage_total * 100) .. "%)" end +local ENEMIES_format_name = function(player) if (player == 0) then return false end return Details:GetOnlyName (player.nome) end +local ENEMIES_format_amount = function(amount) if (amount <= 0) then return false end return Details:ToK(amount) .. " (" .. format ("%.1f", amount / tooltip_temp_table.damage_total * 100) .. "%)" end function atributo_damage:ReportEnemyDamageTaken (actor, instance, ShiftKeyDown, ControlKeyDown, fromFrags) if (ShiftKeyDown) then @@ -3543,16 +3535,16 @@ function atributo_damage:ReportEnemyDamageTaken (actor, instance, ShiftKeyDown, return instance:TrocaTabela (instance.segmento, 5, #Details.custom) end - + local report_table = {"Details!: " .. actor.nome .. " - " .. Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"]} - + Details:FormatReportLines (report_table, tooltip_temp_table, ENEMIES_format_name, ENEMIES_format_amount) return Details:Reportar (report_table, {_no_current = true, _no_inverse = true, _custom = true}) end -local FRAGS_format_name = function (player_name) return Details:GetOnlyName (player_name) end -local FRAGS_format_amount = function (amount) return Details:ToK (amount) .. " (" .. _cstr ("%.1f", amount / frags_tooltip_table.damage_total * 100) .. "%)" end +local FRAGS_format_name = function(player_name) return Details:GetOnlyName (player_name) end +local FRAGS_format_amount = function(amount) return Details:ToK(amount) .. " (" .. format ("%.1f", amount / frags_tooltip_table.damage_total * 100) .. "%)" end function atributo_damage:ReportSingleFragsLine (frag, instance, ShiftKeyDown, ControlKeyDown) @@ -3561,28 +3553,28 @@ function atributo_damage:ReportSingleFragsLine (frag, instance, ShiftKeyDown, Co end local report_table = {"Details!: " .. frag [1] .. " - " .. Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"]} - + Details:FormatReportLines (report_table, frags_tooltip_table, FRAGS_format_name, FRAGS_format_amount) return Details:Reportar (report_table, {_no_current = true, _no_inverse = true, _custom = true}) end function atributo_damage:ToolTip_Enemies (instancia, numero, barra, keydown) - + local owner = self.owner if (owner and owner.classe) then - r, g, b = unpack (Details.class_colors [owner.classe]) + r, g, b = unpack(Details.class_colors [owner.classe]) else - r, g, b = unpack (Details.class_colors [self.classe]) + r, g, b = unpack(Details.class_colors [self.classe]) end - + local combat = instancia:GetShowingCombat() local enemy_name = self:name() - + --> enemy damage taken local i = 1 local damage_taken = 0 - for _, actor in _ipairs (combat[1]._ActorTable) do + for _, actor in _ipairs (combat[1]._ActorTable) do if (actor.grupo and actor.targets [self.nome]) then local t = tooltip_temp_table [i] if (not t) then @@ -3595,15 +3587,15 @@ function atributo_damage:ToolTip_Enemies (instancia, numero, barra, keydown) i = i + 1 end end - + for o = i, #tooltip_temp_table do local t = tooltip_temp_table [o] t[2] = 0 t[1] = 0 end - _table_sort (tooltip_temp_table, Details.Sort2) - + _table_sort(tooltip_temp_table, Details.Sort2) + -- enemy damage taken Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_TAKEN_FROM"], headerColor, i-1, [[Interface\Buttons\UI-MicroStream-Red]], 0.1875, 0.8125, 0.15625, 0.78125) GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) @@ -3613,17 +3605,17 @@ function atributo_damage:ToolTip_Enemies (instancia, numero, barra, keydown) --> build the tooltip local top = (tooltip_temp_table [1] and tooltip_temp_table [1][2]) or 0 tooltip_temp_table.damage_total = damage_taken - + local lineHeight = Details.tooltip.line_height - + for o = 1, i-1 do local player = tooltip_temp_table [o][1] local total = tooltip_temp_table [o][2] local player_name = Details:GetOnlyName (player:name()) - - GameCooltip:AddLine (player_name .. " ", FormatTooltipNumber (_, total) .." (" .. _cstr ("%.1f", (total / damage_taken) * 100) .. "%)") - + + GameCooltip:AddLine (player_name .. " ", FormatTooltipNumber (_, total) .." (" .. format ("%.1f", (total / damage_taken) * 100) .. "%)") + local classe = player:class() if (not classe) then classe = "UNKNOW" @@ -3636,38 +3628,38 @@ function atributo_damage:ToolTip_Enemies (instancia, numero, barra, keydown) local texture, l, r, t, b = Details:GetSpecIcon (specID, false) GameCooltip:AddIcon (texture, 1, 1, lineHeight, lineHeight, l, r, t, b) else - GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, lineHeight, lineHeight, _unpack (Details.class_coords [classe])) + GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, lineHeight, lineHeight, unpack(Details.class_coords [classe])) end end - - local r, g, b = unpack (Details.class_colors [classe]) + + local r, g, b = unpack(Details.class_colors [classe]) GameCooltip:AddStatusBar (total/top*100, 1, r, g, b, 1, false, enemies_background) end - + GameCooltip:SetOption ("StatusBarTexture", "Interface\\AddOns\\Details\\images\\bar_serenity") - + --> damage done and heal GameCooltip:AddLine (" ") - GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES_DONE"], FormatTooltipNumber (_, _math_floor (self.total))) + GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES_DONE"], FormatTooltipNumber (_, _math_floor(self.total))) local half = 0.00048828125 GameCooltip:AddIcon (instancia:GetSkinTexture(), 1, 1, 14, 14, 0.005859375 + half, 0.025390625 - half, 0.3623046875, 0.3818359375) GameCooltip:AddStatusBar (0, 1, r, g, b, 1, false, enemies_background) - + local heal_actor = instancia.showing (2, self.nome) if (heal_actor) then - GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_ENEMY"], FormatTooltipNumber (_, _math_floor (heal_actor.heal_enemy_amt))) + GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_ENEMY"], FormatTooltipNumber (_, _math_floor(heal_actor.heal_enemy_amt))) else GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_ENEMY"], 0) end GameCooltip:AddIcon (instancia:GetSkinTexture(), 1, 1, 14, 14, 0.037109375 + half, 0.056640625 - half, 0.3623046875, 0.3818359375) GameCooltip:AddStatusBar (0, 1, r, g, b, 1, false, enemies_background) - + GameCooltip:AddLine (" ") Details:AddTooltipReportLineText() - + GameCooltip:SetOption ("YSpacingMod", 0) - + return true end @@ -3676,43 +3668,43 @@ function atributo_damage:ToolTip_DamageTaken (instancia, numero, barra, keydown) local owner = self.owner if (owner and owner.classe) then - r, g, b = unpack (Details.class_colors [owner.classe]) + r, g, b = unpack(Details.class_colors [owner.classe]) else - r, g, b = unpack (Details.class_colors [self.classe]) + r, g, b = unpack(Details.class_colors [self.classe]) end local agressores = self.damage_from local damage_taken = self.damage_taken - + local tabela_do_combate = instancia.showing local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable - + local meus_agressores = {} if (instancia.sub_atributo == 6) then - for _, actor in _ipairs (showing._ActorTable) do + for _, actor in _ipairs (showing._ActorTable) do if (actor.grupo and actor.targets [self.nome]) then meus_agressores [#meus_agressores+1] = {actor.nome, actor.targets [self.nome], actor.classe, actor} end end else - + --> aggressors - for nome, _ in _pairs (agressores) do --who damaged the player + for nome, _ in _pairs(agressores) do --who damaged the player --get the aggressor local este_agressor = showing._ActorTable [showing._NameIndexTable [nome]] if (este_agressor) then --> checagem por causa do total e do garbage collector que n�o limpa os nomes que deram dano local name = nome local table_added local damage_amount = este_agressor.targets [self.nome] - + if (damage_amount) then if (este_agressor:IsPlayer() or este_agressor:IsNeutralOrEnemy()) then table_added = {name, damage_amount, este_agressor.classe, este_agressor} meus_agressores [#meus_agressores+1] = table_added end end - + --special cases - Monk stagger if (nome == self.nome and self.classe == "MONK") then local ff = este_agressor.friendlyfire [nome] @@ -3732,13 +3724,13 @@ function atributo_damage:ToolTip_DamageTaken (instancia, numero, barra, keydown) end - _table_sort (meus_agressores, Details.Sort2) - + _table_sort(meus_agressores, Details.Sort2) + local max = #meus_agressores if (max > 10) then max = 10 end - + local ismaximized = false if (keydown == "shift" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3 or instancia.sub_atributo == 6 or Details.damage_taken_everything) then max = #meus_agressores @@ -3766,86 +3758,86 @@ function atributo_damage:ToolTip_DamageTaken (instancia, numero, barra, keydown) else Details:AddTooltipHeaderStatusbar (r, g, b, barAlha) end - end - + end + local icon_size = Details.tooltip.icon_size local icon_border = Details.tooltip.icon_border_texcoord - + for i = 1, max do local aggressor = meus_agressores[i][4] - + --only shows damage from enemies or from the player it self --the player it self can only be placed on the list by the iteration above --the iteration doesnt check friendly fire for all actors, only a few cases like Monk Stagger - + if (aggressor:IsNeutralOrEnemy() or aggressor.nome == self.nome) then - + local all_spells = {} - - for spellid, spell in _pairs (aggressor.spells._ActorTable) do + + for spellid, spell in _pairs(aggressor.spells._ActorTable) do local on_target = spell.targets [self.nome] if (on_target) then tinsert (all_spells, {spellid, on_target, aggressor.nome}) end end - + --friendly fire local friendlyFire = aggressor.friendlyfire [self.nome] if (friendlyFire) then - for spellid, amount in _pairs (friendlyFire.spells) do + for spellid, amount in _pairs(friendlyFire.spells) do tinsert (all_spells, {spellid, amount, aggressor.nome}) end end - + for _, spell in _ipairs (all_spells) do - local spellname, _, spellicon = _GetSpellInfo (spell [1]) - GameCooltip:AddLine (spellname .. " (|cFFFFFF00" .. spell [3] .. "|r)", FormatTooltipNumber (_, spell [2]).." (" .. _cstr ("%.1f", (spell [2] / damage_taken) * 100).."%)") + local spellname, _, spellicon = _GetSpellInfo(spell [1]) + GameCooltip:AddLine (spellname .. " (|cFFFFFF00" .. spell [3] .. "|r)", FormatTooltipNumber (_, spell [2]).." (" .. format ("%.1f", (spell [2] / damage_taken) * 100).."%)") GameCooltip:AddIcon (spellicon, 1, 1, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) Details:AddTooltipBackgroundStatusbar() end - + else local aggressorName = Details:GetOnlyName (meus_agressores[i][1]) if (ismaximized and meus_agressores[i][1]:find (Details.playername)) then - GameCooltip:AddLine (aggressorName, FormatTooltipNumber (_, meus_agressores[i][2]).." (".._cstr("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)", nil, "yellow") + GameCooltip:AddLine (aggressorName, FormatTooltipNumber (_, meus_agressores[i][2]).." ("..format("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)", nil, "yellow") else - GameCooltip:AddLine (aggressorName, FormatTooltipNumber (_, meus_agressores[i][2]).." (".._cstr("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)") + GameCooltip:AddLine (aggressorName, FormatTooltipNumber (_, meus_agressores[i][2]).." ("..format("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)") end local classe = meus_agressores[i][3] - + if (not classe) then classe = "UNKNOW" end - + if (classe == "UNKNOW") then GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, icon_size.W, icon_size.H, .25, .5, 0, 1) else - GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, icon_size.W, icon_size.H, _unpack (Details.class_coords [classe])) + GameCooltip:AddIcon (instancia.row_info.icon_file, nil, nil, icon_size.W, icon_size.H, unpack(Details.class_coords [classe])) end Details:AddTooltipBackgroundStatusbar() end end if (instancia.sub_atributo == 6) then - + GameCooltip:AddLine (" ") - GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_DAMAGE_DONE"], FormatTooltipNumber (_, _math_floor (self.total))) + GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_DAMAGE_DONE"], FormatTooltipNumber (_, _math_floor(self.total))) local half = 0.00048828125 GameCooltip:AddIcon (instancia:GetSkinTexture(), 1, 1, icon_size.W, icon_size.H, 0.005859375 + half, 0.025390625 - half, 0.3623046875, 0.3818359375) Details:AddTooltipBackgroundStatusbar() - + local heal_actor = instancia.showing (2, self.nome) if (heal_actor) then - GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_DONE"], FormatTooltipNumber (_, _math_floor (heal_actor.heal_enemy_amt))) + GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_DONE"], FormatTooltipNumber (_, _math_floor(heal_actor.heal_enemy_amt))) else GameCooltip:AddLine (Loc ["STRING_ATTRIBUTE_HEAL_DONE"], 0) end GameCooltip:AddIcon (instancia:GetSkinTexture(), 1, 1, icon_size.W, icon_size.H, 0.037109375 + half, 0.056640625 - half, 0.3623046875, 0.3818359375) Details:AddTooltipBackgroundStatusbar() - + end - + return true end @@ -3854,9 +3846,9 @@ function atributo_damage:ToolTip_FriendlyFire (instancia, numero, barra, keydown local owner = self.owner if (owner and owner.classe) then - r, g, b = unpack (Details.class_colors [owner.classe]) + r, g, b = unpack(Details.class_colors [owner.classe]) else - r, g, b = unpack (Details.class_colors [self.classe]) + r, g, b = unpack(Details.class_colors [self.classe]) end local FriendlyFire = self.friendlyfire @@ -3869,24 +3861,24 @@ function atributo_damage:ToolTip_FriendlyFire (instancia, numero, barra, keydown local icon_size = Details.tooltip.icon_size local icon_border = Details.tooltip.icon_border_texcoord local lineHeight = Details.tooltip.line_height - + local DamagedPlayers = {} local Skills = {} - for target_name, ff_table in _pairs (FriendlyFire) do + for target_name, ff_table in _pairs(FriendlyFire) do local actor = combat (1, target_name) if (actor) then DamagedPlayers [#DamagedPlayers+1] = {target_name, ff_table.total, actor.classe} - for spellid, amount in _pairs (ff_table.spells) do + for spellid, amount in _pairs(ff_table.spells) do Skills [spellid] = (Skills [spellid] or 0) + amount end end end - - _table_sort (DamagedPlayers, Details.Sort2) - Details:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, #DamagedPlayers, Details.tooltip_target_icon.file, unpack (Details.tooltip_target_icon.coords)) - + _table_sort(DamagedPlayers, Details.Sort2) + + Details:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, #DamagedPlayers, Details.tooltip_target_icon.file, unpack(Details.tooltip_target_icon.coords)) + local ismaximized = false if (keydown == "shift" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3) then GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) @@ -3896,38 +3888,38 @@ function atributo_damage:ToolTip_FriendlyFire (instancia, numero, barra, keydown GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1) Details:AddTooltipHeaderStatusbar (r, g, b, barAlha) end - + local max_abilities = Details.tooltip.tooltip_max_abilities if (ismaximized) then max_abilities = 99 end - + for i = 1, _math_min (max_abilities, #DamagedPlayers) do local classe = DamagedPlayers[i][3] if (not classe) then classe = "UNKNOW" end - GameCooltip:AddLine (Details:GetOnlyName (DamagedPlayers[i][1]), FormatTooltipNumber (_, DamagedPlayers[i][2]).." (".._cstr("%.1f", DamagedPlayers[i][2]/FriendlyFireTotal*100).."%)") + GameCooltip:AddLine (Details:GetOnlyName (DamagedPlayers[i][1]), FormatTooltipNumber (_, DamagedPlayers[i][2]).." ("..format("%.1f", DamagedPlayers[i][2]/FriendlyFireTotal*100).."%)") GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\espadas", nil, nil, lineHeight, lineHeight) Details:AddTooltipBackgroundStatusbar() - + if (classe == "UNKNOW") then - GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, nil, lineHeight, lineHeight, _unpack (Details.class_coords ["UNKNOW"])) + GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, nil, lineHeight, lineHeight, unpack(Details.class_coords ["UNKNOW"])) else local specID = Details:GetSpec (DamagedPlayers[i][1]) if (specID) then local texture, l, r, t, b = Details:GetSpecIcon (specID, false) GameCooltip:AddIcon (texture, 1, 1, lineHeight, lineHeight, l, r, t, b) else - GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, nil, lineHeight, lineHeight, _unpack (Details.class_coords [classe])) + GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, nil, lineHeight, lineHeight, unpack(Details.class_coords [classe])) end end - + end - - Details:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, 1, Details.tooltip_spell_icon.file, unpack (Details.tooltip_spell_icon.coords)) - + + Details:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, 1, Details.tooltip_spell_icon.file, unpack(Details.tooltip_spell_icon.coords)) + local ismaximized = false if (keydown == "ctrl" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 4) then GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_ctrl]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) @@ -3937,26 +3929,26 @@ function atributo_damage:ToolTip_FriendlyFire (instancia, numero, barra, keydown GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_ctrl]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1) Details:AddTooltipHeaderStatusbar (r, g, b, barAlha) end - + local max_abilities2 = Details.tooltip.tooltip_max_abilities if (ismaximized) then max_abilities2 = 99 end - + --spells usadas no friendly fire local SpellsInOrder = {} - for spellID, amount in _pairs (Skills) do + for spellID, amount in _pairs(Skills) do SpellsInOrder [#SpellsInOrder+1] = {spellID, amount} end - _table_sort (SpellsInOrder, Details.Sort2) - + _table_sort(SpellsInOrder, Details.Sort2) + for i = 1, _math_min (max_abilities2, #SpellsInOrder) do - local nome, _, icone = _GetSpellInfo (SpellsInOrder[i][1]) - GameCooltip:AddLine (nome, FormatTooltipNumber (_, SpellsInOrder[i][2]).." (".._cstr("%.1f", SpellsInOrder[i][2]/FriendlyFireTotal*100).."%)") + local nome, _, icone = _GetSpellInfo(SpellsInOrder[i][1]) + GameCooltip:AddLine (nome, FormatTooltipNumber (_, SpellsInOrder[i][2]).." ("..format("%.1f", SpellsInOrder[i][2]/FriendlyFireTotal*100).."%)") GameCooltip:AddIcon (icone, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) Details:AddTooltipBackgroundStatusbar() - end - + end + return true end @@ -3984,7 +3976,7 @@ function atributo_damage:MontaDetalhes (spellid, barra, instancia) elseif (info.sub_atributo == 4) then return self:MontaDetalhesFriendlyFire (spellid, barra, instancia) elseif (info.sub_atributo == 6) then - if (_bit_band (self.flag_original, 0x00000400) ~= 0) then --� um jogador + if (bitBand(self.flag_original, 0x00000400) ~= 0) then --� um jogador return self:MontaDetalhesDamageDone (spellid, barra, instancia) end return self:MontaDetalhesEnemy (spellid, barra, instancia) @@ -4001,31 +3993,31 @@ function atributo_damage:MontaInfoFriendlyFire() local barras = info.barras1 local barras2 = info.barras2 local barras3 = info.barras3 - + local FriendlyFireTotal = self.friendlyfire_total - + local DamagedPlayers = {} local Skills = {} - - for target_name, ff_table in _pairs (self.friendlyfire) do - + + for target_name, ff_table in _pairs(self.friendlyfire) do + 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 + + for spellid, amount in _pairs(ff_table.spells) do Skills [spellid] = (Skills [spellid] or 0) + amount end end end - _table_sort (DamagedPlayers, Details.Sort2) - + _table_sort(DamagedPlayers, Details.Sort2) + local amt = #DamagedPlayers gump:JI_AtualizaContainerBarras (amt) - + local FirstPlaceDamage = DamagedPlayers [1] and DamagedPlayers [1][2] or 0 - + for index, tabela in _ipairs (DamagedPlayers) do local barra = barras [index] @@ -4034,7 +4026,7 @@ function atributo_damage:MontaInfoFriendlyFire() barra.textura:SetStatusBarColor (1, 1, 1, 1) barra.on_focus = false end - + if (not info.mostrando_mouse_over) then if (tabela[1] == self.detalhes) then --> tabela [1] = NOME = NOME que esta na caixa da direita if (not barra.on_focus) then --> se a barra n�o tiver no foco @@ -4052,32 +4044,32 @@ function atributo_damage:MontaInfoFriendlyFire() end end end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/FirstPlaceDamage*100) + barra.textura:SetValue(tabela[2]/FirstPlaceDamage*100) end - - barra.lineText1:SetText (index .. instancia.divisores.colocacao .. Details:GetOnlyName (tabela[1])) --seta o texto da esqueda - barra.lineText4:SetText (Details:comma_value (tabela[2]) .. " (" .. _cstr ("%.1f", tabela[3]) .."%)") --seta o texto da direita - + + barra.lineText1:SetText(index .. instancia.divisores.colocacao .. Details:GetOnlyName (tabela[1])) --seta o texto da esqueda + barra.lineText4:SetText(Details:comma_value (tabela[2]) .. " (" .. format ("%.1f", tabela[3]) .."%)") --seta o texto da direita + local classe = tabela[4] if (not classe) then classe = "MONSTER" end - - barra.icone:SetTexture (info.instancia.row_info.icon_file) - + + barra.icone:SetTexture(info.instancia.row_info.icon_file) + if (Details.class_coords [classe]) then - barra.icone:SetTexCoord (_unpack (Details.class_coords [classe])) + barra.icone:SetTexCoord(unpack(Details.class_coords [classe])) else - barra.icone:SetTexture ("") + barra.icone:SetTexture("") end local color = Details.class_colors [classe] if (color) then - barra.textura:SetStatusBarColor (_unpack (color)) + barra.textura:SetStatusBarColor (unpack(color)) else barra.textura:SetStatusBarColor (1, 1, 1) end @@ -4092,45 +4084,45 @@ function atributo_damage:MontaInfoFriendlyFire() end local SkillTable = {} - for spellid, amt in _pairs (Skills) do - local nome, _, icone = _GetSpellInfo (spellid) + for spellid, amt in _pairs(Skills) do + local nome, _, icone = _GetSpellInfo(spellid) SkillTable [#SkillTable+1] = {nome, amt, amt/FriendlyFireTotal*100, icone} end - _table_sort (SkillTable, Details.Sort2) - + _table_sort(SkillTable, Details.Sort2) + amt = #SkillTable if (amt < 1) then return end gump:JI_AtualizaContainerAlvos (amt) - + FirstPlaceDamage = SkillTable [1] and SkillTable [1][2] or 0 - + for index, tabela in _ipairs (SkillTable) do local barra = barras2 [index] - + if (not barra) then barra = gump:CriaNovaBarraInfo2 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/FirstPlaceDamage*100) + barra.textura:SetValue(tabela[2]/FirstPlaceDamage*100) end - - barra.lineText1:SetText (index..instancia.divisores.colocacao..tabela[1]) --seta o texto da esqueda - barra.lineText4:SetText (Details:comma_value (tabela[2]) .." (" .._cstr("%.1f", tabela[3]) .. ")") --seta o texto da direita - barra.icone:SetTexture (tabela[4]) - + + barra.lineText1:SetText(index..instancia.divisores.colocacao..tabela[1]) --seta o texto da esqueda + barra.lineText4:SetText(Details:comma_value (tabela[2]) .." (" ..format("%.1f", tabela[3]) .. ")") --seta o texto da direita + barra.icone:SetTexture(tabela[4]) + barra.minha_tabela = nil --> desativa o tooltip - + barra:Show() end - + end ------ Damage Taken @@ -4141,11 +4133,11 @@ function atributo_damage:MontaInfoDamageTaken() local instancia = info.instancia local tabela_do_combate = instancia.showing local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable - local barras = info.barras1 + local barras = info.barras1 local meus_agressores = {} - - local este_agressor - for nome, _ in _pairs (agressores) do + + local este_agressor + for nome, _ in _pairs(agressores) do este_agressor = showing._ActorTable[showing._NameIndexTable[nome]] if (este_agressor) then local alvos = este_agressor.targets @@ -4157,14 +4149,14 @@ function atributo_damage:MontaInfoDamageTaken() end local amt = #meus_agressores - + if (amt < 1) then --> caso houve apenas friendly fire return true end - - --_table_sort (meus_agressores, function (a, b) return a[2] > b[2] end) - _table_sort (meus_agressores, Details.Sort2) - + + --_table_sort(meus_agressores, function(a, b) return a[2] > b[2] end) + _table_sort(meus_agressores, Details.Sort2) + gump:JI_AtualizaContainerBarras (amt) local max_ = meus_agressores [1] and meus_agressores [1][2] or 0 @@ -4177,75 +4169,75 @@ function atributo_damage:MontaInfoDamageTaken() end self:FocusLock (barra, tabela[1]) - + local texCoords = Details.class_coords [tabela[4]] if (not texCoords) then texCoords = Details.class_coords ["UNKNOW"] end - - local formated_value = SelectedToKFunction (_, _math_floor (tabela[2])) + + local formated_value = SelectedToKFunction(_, _math_floor(tabela[2])) self:UpdadeInfoBar (barra, index, tabela[1], tabela[1], tabela[2], formated_value, max_, tabela[3], "Interface\\AddOns\\Details\\images\\classes_small_alpha", true, texCoords, nil, tabela[4]) end - + end --[[exported]] function Details: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) + row.textura:SetValue(100) else max = math.max(max, 0.001) - row.textura:SetValue (value/max*100) + row.textura:SetValue(value/max*100) end - + if (type (index) == "number") then if (debugmode) then - row.lineText1:SetText (index .. ". " .. name .. " (" .. spellid .. ")") + row.lineText1:SetText(index .. ". " .. name .. " (" .. spellid .. ")") else - row.lineText1:SetText (index .. ". " .. name) + row.lineText1:SetText(index .. ". " .. name) end else - row.lineText1:SetText (name) + row.lineText1:SetText(name) end - + row.lineText1.text = row.lineText1:GetText() - + if (value_formated) then - row.lineText4:SetText (value_formated .. " (" .. _cstr ("%.1f", percent) .."%)") + row.lineText4:SetText(value_formated .. " (" .. format ("%.1f", percent) .."%)") end - - row.lineText1:SetSize (row:GetWidth() - row.lineText4:GetStringWidth() - 40, 15) + + row.lineText1:SetSize(row:GetWidth() - row.lineText4:GetStringWidth() - 40, 15) --> seta o icone - if (icon) then - row.icone:SetTexture (icon) + if (icon) then + row.icone:SetTexture(icon) if (icon == "Interface\\AddOns\\Details\\images\\classes_small") then - row.icone:SetTexCoord (0.25, 0.49609375, 0.75, 1) + row.icone:SetTexCoord(0.25, 0.49609375, 0.75, 1) else - row.icone:SetTexCoord (0, 1, 0, 1) + row.icone:SetTexCoord(0, 1, 0, 1) end else - row.icone:SetTexture ("") + row.icone:SetTexture("") end - + if (not row.IconUpBorder) then row.IconUpBorder = CreateFrame ("frame", nil, row,"BackdropTemplate") row.IconUpBorder:SetAllPoints (row.icone) row.IconUpBorder:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1}) row.IconUpBorder:SetBackdropBorderColor (0, 0, 0, 0.75) end - + if (texCoords) then - row.icone:SetTexCoord (unpack (texCoords)) + row.icone:SetTexCoord(unpack(texCoords)) else local icon_border = Details.tooltip.icon_border_texcoord - row.icone:SetTexCoord (icon_border.L, icon_border.R, icon_border.T, icon_border.B) + row.icone:SetTexCoord(icon_border.L, icon_border.R, icon_border.T, icon_border.B) end - + row.minha_tabela = self row.show = spellid row:Show() --> mostra a barra - + if (spellschool) then local t = Details.spells_school [spellschool] if (t and t.decimals) then @@ -4253,11 +4245,11 @@ end else row.textura:SetStatusBarColor (1, 1, 1) end - + elseif (class) then local color = Details.class_colors [class] if (color) then - row.textura:SetStatusBarColor (_unpack (color)) + row.textura:SetStatusBarColor (unpack(color)) else row.textura:SetStatusBarColor (1, 1, 1) end @@ -4268,7 +4260,7 @@ end row.textura:SetStatusBarColor (1, 1, 1) end 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?? @@ -4297,15 +4289,15 @@ end ------ Damage Done & Dps function atributo_damage:MontaInfoDamageDone() - + local barras = info.barras1 local instancia = info.instancia - local total = self.total_without_pet --> total de dano aplicado por este jogador - + local total = self.total_without_pet --> total de dano aplicado por este jogador + local ActorTotalDamage = self.total local ActorSkillsSortTable = {} local ActorSkillsContainer = self.spells._ActorTable - + --get time type local meu_tempo if (Details.time_type == 1 or not self.grupo) then @@ -4313,19 +4305,19 @@ function atributo_damage:MontaInfoDamageDone() elseif (Details.time_type == 2) then meu_tempo = info.instancia.showing:GetCombatTime() end - - for _spellid, _skill in _pairs (ActorSkillsContainer) do --> da foreach em cada spellid do container - local nome, _, icone = _GetSpellInfo (_spellid) + + for _spellid, _skill in _pairs(ActorSkillsContainer) do --> da foreach em cada spellid do container + local nome, _, icone = _GetSpellInfo(_spellid) if (nome) then _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome, icone, nil, _skill.spellschool}) end end - + --damage rank local combat = instancia:GetShowingCombat() local diff = combat:GetDifficulty() local attribute, subattribute = instancia:GetDisplay() - + --> check if is a raid encounter and if is heroic or mythic if (diff and (diff == 15 or diff == 16)) then local db = Details.OpenStorage() @@ -4334,7 +4326,7 @@ function atributo_damage:MontaInfoDamageDone() if (bestRank) then --> discover which are the player position in the guild rank local playerTable, onEncounter, rankPosition = Details.storage:GetPlayerGuildRank (diff, combat:GetBossInfo().id, "damage", self.nome, true) - local text1 = self.nome .. " Guild Rank on " .. (combat:GetBossInfo().name or "") .. ": |cFFFFFF00" .. (rankPosition or "x") .. "|r Best Dps: |cFFFFFF00" .. Details:ToK2 ((bestRank[1] or 0) / encounterTable.elapsed) .. "|r (" .. encounterTable.date:gsub (".*%s", "") .. ")" + local text1 = self.nome .. " Guild Rank on " .. (combat:GetBossInfo().name or "") .. ": |cFFFFFF00" .. (rankPosition or "x") .. "|r Best Dps: |cFFFFFF00" .. Details:ToK2((bestRank[1] or 0) / encounterTable.elapsed) .. "|r (" .. encounterTable.date:gsub (".*%s", "") .. ")" info:SetStatusbarText (text1, 10, "gray") else info:SetStatusbarText() @@ -4345,7 +4337,7 @@ function atributo_damage:MontaInfoDamageDone() else info:SetStatusbarText() end - + --> add pets local ActorPets = self.pets --local class_color = RAID_CLASS_COLORS [self.classe] and RAID_CLASS_COLORS [self.classe].colorStr @@ -4353,10 +4345,10 @@ function atributo_damage:MontaInfoDamageDone() --local class_color = "FFDDDD44" for _, PetName in _ipairs (ActorPets) do local PetActor = instancia.showing (class_type, PetName) - if (PetActor) then + 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) + 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 .. " |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}) if (nome) then _table_insert (ActorSkillsSortTable, {_spellid, _skill.total, _skill.total/ActorTotalDamage*100, nome .. " (|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r)", icone, PetActor, _skill.spellschool}) @@ -4364,15 +4356,15 @@ function atributo_damage:MontaInfoDamageDone() end end end - - _table_sort (ActorSkillsSortTable, Details.Sort2) - + + _table_sort(ActorSkillsSortTable, Details.Sort2) + gump:JI_AtualizaContainerBarras (#ActorSkillsSortTable + 1) - + local max_ = ActorSkillsSortTable[1] and ActorSkillsSortTable[1][2] or 0 --> dano que a primeiro magia vez - + local barra - + --aura bar if (false) then --> disabled for now barra = barras [1] @@ -4382,10 +4374,10 @@ function atributo_damage:MontaInfoDamageDone() self:UpdadeInfoBar (barra, "", -51, "Auras", max_, false, max_, 100, [[Interface\BUTTONS\UI-GroupLoot-DE-Up]], true, nil, nil) barra.textura:SetStatusBarColor (Details.gump:ParseColors ("purple")) end - + --spell bars for index, tabela in _ipairs (ActorSkillsSortTable) do - + --index = index + 1 --with the aura bar index = index barra = barras [index] @@ -4396,30 +4388,30 @@ function atributo_damage:MontaInfoDamageDone() barra.other_actor = tabela [6] local name = tabela[4] - + if (info.sub_atributo == 2) then - local formated_value = SelectedToKFunction (_, _math_floor (tabela[2]/meu_tempo)) + local formated_value = SelectedToKFunction(_, _math_floor(tabela[2]/meu_tempo)) self:UpdadeInfoBar (barra, index, tabela[1], name, tabela[2], formated_value, max_, tabela[3], tabela[5], true, nil, tabela [7]) else - local formated_value = SelectedToKFunction (_, _math_floor (tabela[2])) + local formated_value = SelectedToKFunction(_, _math_floor(tabela[2])) self:UpdadeInfoBar (barra, index, tabela[1], name, tabela[2], formated_value, max_, tabela[3], tabela[5], true, nil, tabela [7]) end - + self:FocusLock (barra, tabela[1]) end - + --> TOP INIMIGOS if (instancia.sub_atributo == 6) then - + local damage_taken = self.damage_taken local agressores = self.damage_from local tabela_do_combate = instancia.showing local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable local barras = info.barras2 local meus_agressores = {} - - local este_agressor - for nome, _ in _pairs (agressores) do + + local este_agressor + for nome, _ in _pairs(agressores) do este_agressor = showing._ActorTable[showing._NameIndexTable[nome]] if (este_agressor) then local este_alvo = este_agressor.targets [self.nome] @@ -4430,18 +4422,18 @@ function atributo_damage:MontaInfoDamageDone() end local amt = #meus_agressores - + if (amt < 1) then --> caso houve apenas friendly fire return true end - + gump:JI_AtualizaContainerAlvos (amt) - - --_table_sort (meus_agressores, function (a, b) return a[2] > b[2] end) - _table_sort (meus_agressores, Details.Sort2) - + + --_table_sort(meus_agressores, function(a, b) return a[2] > b[2] end) + _table_sort(meus_agressores, Details.Sort2) + local max_ = meus_agressores[1] and meus_agressores[1][2] or 0 --> dano que a primeiro magia vez - + local barra for index, tabela in _ipairs (meus_agressores) do barra = barras [index] @@ -4450,36 +4442,36 @@ function atributo_damage:MontaInfoDamageDone() barra = gump:CriaNovaBarraInfo2 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) --> isso aqui � a parte da sele��o e descele��o end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/max_*100) + barra.textura:SetValue(tabela[2]/max_*100) end - barra.lineText1:SetText (index .. ". " .. Details:GetOnlyName (tabela[1])) --seta o texto da esqueda - barra.lineText4:SetText (Details:comma_value (tabela[2]) .. " (" .. _cstr ("%.1f", tabela[3]) .. "%)") --seta o texto da direita - - barra.icone:SetTexture ([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE - + barra.lineText1:SetText(index .. ". " .. Details:GetOnlyName (tabela[1])) --seta o texto da esqueda + barra.lineText4:SetText(Details:comma_value (tabela[2]) .. " (" .. format ("%.1f", tabela[3]) .. "%)") --seta o texto da direita + + barra.icone:SetTexture([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE + local texCoords = Details.class_coords [tabela[4]] if (not texCoords) then texCoords = Details.class_coords ["UNKNOW"] end - barra.icone:SetTexCoord (_unpack (texCoords)) - + barra.icone:SetTexCoord(unpack(texCoords)) + local color = Details.class_colors [tabela[4]] if (color) then - barra.textura:SetStatusBarColor (_unpack (color)) + barra.textura:SetStatusBarColor (unpack(color)) else barra.textura:SetStatusBarColor (1, 1, 1) end - + Details:name_space_info (barra) - + if (barra.mouse_over) then --> atualizar o tooltip if (barra.isAlvo) then - GameTooltip:Hide() + GameTooltip:Hide() GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") if (not barra.minha_tabela:MontaTooltipDamageTaken (barra, index)) then return @@ -4487,10 +4479,10 @@ function atributo_damage:MontaInfoDamageDone() GameTooltip:Show() end end - + barra.minha_tabela = self --> grava o jogador na tabela barra.nome_inimigo = tabela [1] --> salva o nome do inimigo na barra --> isso � necess�rio? - + -- no rank do spell id colocar o que? barra.spellid = "enemies" @@ -4498,64 +4490,64 @@ function atributo_damage:MontaInfoDamageDone() end else local meus_inimigos = {} - + --> my target container conteudo = self.targets - for target_name, amount in _pairs (conteudo) do + for target_name, amount in _pairs(conteudo) do _table_insert (meus_inimigos, {target_name, amount, amount/total*100}) end - + --> sort - _table_sort (meus_inimigos, Details.Sort2) - + _table_sort(meus_inimigos, Details.Sort2) + local amt_alvos = #meus_inimigos if (amt_alvos < 1) then return end - + gump:JI_AtualizaContainerAlvos (amt_alvos) - + local max_inimigos = meus_inimigos[1] and meus_inimigos[1][2] or 0 - + local barra for index, tabela in _ipairs (meus_inimigos) do - + barra = info.barras2 [index] - + if (not barra) then barra = gump:CriaNovaBarraInfo2 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/max_inimigos*100) + barra.textura:SetValue(tabela[2]/max_inimigos*100) end - + local target_actor = instancia.showing (1, tabela[1]) if (target_actor) then - target_actor:SetClassIcon (barra.icone, instancia, target_actor.classe) + target_actor:SetClassIcon(barra.icone, instancia, target_actor.classe) else - barra.icone:SetTexture ([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE + barra.icone:SetTexture([[Interface\AddOns\Details\images\classes_small_alpha]]) --CLASSE local texCoords = Details.class_coords ["ENEMY"] - barra.icone:SetTexCoord (_unpack (texCoords)) + barra.icone:SetTexCoord(unpack(texCoords)) end - + barra.textura:SetStatusBarColor (1, 0.8, 0.8) barra.textura:SetStatusBarColor (1, 1, 1, 1) - - barra.lineText1:SetText (index .. ". " .. Details:GetOnlyName (tabela[1])) - + + barra.lineText1:SetText(index .. ". " .. Details:GetOnlyName (tabela[1])) + if (info.sub_atributo == 2) then - barra.lineText4:SetText (Details:comma_value ( _math_floor (tabela[2]/meu_tempo)) .. " (" .. _cstr ("%.1f", tabela[3]) .. "%)") + barra.lineText4:SetText(Details:comma_value ( _math_floor(tabela[2]/meu_tempo)) .. " (" .. format ("%.1f", tabela[3]) .. "%)") else - barra.lineText4:SetText (SelectedToKFunction (_, tabela[2]) .." (" .. _cstr ("%.1f", tabela[3]) .. "%)") + barra.lineText4:SetText(SelectedToKFunction(_, tabela[2]) .." (" .. format ("%.1f", tabela[3]) .. "%)") end - + if (barra.mouse_over) then --> atualizar o tooltip if (barra.isAlvo) then - --GameTooltip:Hide() + --GameTooltip:Hide() --GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") if (not barra.minha_tabela:MontaTooltipAlvos (barra, index, instancia)) then return @@ -4563,10 +4555,10 @@ function atributo_damage:MontaInfoDamageDone() --GameTooltip:Show() end end - + barra.minha_tabela = self --> grava o jogador na tabela barra.nome_inimigo = tabela [1] --> salva o nome do inimigo na barra --> isso � necess�rio? - + -- no rank do spell id colocar o que? barra.spellid = tabela[5] barra:Show() @@ -4578,13 +4570,13 @@ end ------ Detalhe Info Friendly Fire function atributo_damage:MontaDetalhesFriendlyFire (nome, barra) - for _, barra in _ipairs (info.barras3) do + for _, barra in _ipairs (info.barras3) do barra:Hide() end local barras = info.barras3 local instancia = info.instancia - + local tabela_do_combate = info.instancia.showing local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable @@ -4595,18 +4587,18 @@ function atributo_damage:MontaDetalhesFriendlyFire (nome, barra) return end local total = ff_table.total - + local minhas_magias = {} - for spellid, amount in _pairs (ff_table.spells) do --> da foreach em cada spellid do container - local nome, _, icone = _GetSpellInfo (spellid) + for spellid, amount in _pairs(ff_table.spells) do --> da foreach em cada spellid do container + local nome, _, icone = _GetSpellInfo(spellid) _table_insert (minhas_magias, {spellid, amount, amount / total * 100, nome, icone}) end - _table_sort (minhas_magias, Details.Sort2) + _table_sort(minhas_magias, Details.Sort2) local max_ = minhas_magias[1] and minhas_magias[1][2] or 0 --> dano que a primeiro magia vez - + local barra for index, tabela in _ipairs (minhas_magias) do barra = barras [index] @@ -4615,44 +4607,44 @@ function atributo_damage:MontaDetalhesFriendlyFire (nome, barra) barra = gump:CriaNovaBarraInfo3 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) --> isso aqui � a parte da sele��o e descele��o end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/max_*100) --> muito mais rapido... + barra.textura:SetValue(tabela[2]/max_*100) --> muito mais rapido... end - barra.lineText1:SetText (index..instancia.divisores.colocacao..tabela[4]) --seta o texto da esqueda - barra.lineText4:SetText (Details:comma_value (tabela[2]) .. " " .. instancia.divisores.abre .. _cstr ("%.1f", tabela[3]) .. "%" .. instancia.divisores.fecha) --seta o texto da direita - - barra.icone:SetTexture (tabela[5]) - barra.icone:SetTexCoord (0, 1, 0, 1) - + barra.lineText1:SetText(index..instancia.divisores.colocacao..tabela[4]) --seta o texto da esqueda + barra.lineText4:SetText(Details:comma_value (tabela[2]) .. " " .. instancia.divisores.abre .. format ("%.1f", tabela[3]) .. "%" .. instancia.divisores.fecha) --seta o texto da direita + + barra.icone:SetTexture(tabela[5]) + barra.icone:SetTexCoord(0, 1, 0, 1) + barra:Show() --> mostra a barra - - if (index == 15) then + + if (index == 15) then break end end - + end -- detalhes info enemies function atributo_damage:MontaDetalhesEnemy (spellid, barra) - - for _, barra in _ipairs (info.barras3) do + + for _, barra in _ipairs (info.barras3) do barra:Hide() end local container = info.instancia.showing[1] local barras = info.barras3 local instancia = info.instancia - + local other_actor = barra.other_actor if (other_actor) then self = other_actor end - + if (barra.lineText1:IsTruncated()) then Details:CooltipPreset (2) GameCooltip:SetOption ("FixedWidth", nil) @@ -4660,13 +4652,13 @@ function atributo_damage:MontaDetalhesEnemy (spellid, barra) GameCooltip:SetOwner (barra, "bottomleft", "topleft", 5, -10) GameCooltip:ShowCooltip() end - + local spell = self.spells:PegaHabilidade (spellid) - + local targets = spell.targets local target_pool = {} - - for target_name, amount in _pairs (targets) do + + for target_name, amount in _pairs(targets) do local classe local this_actor = info.instancia.showing (1, target_name) if (this_actor) then @@ -4677,11 +4669,11 @@ function atributo_damage:MontaDetalhesEnemy (spellid, barra) target_pool [#target_pool+1] = {target_name, amount, classe} end - - _table_sort (target_pool, Details.Sort2) - + + _table_sort(target_pool, Details.Sort2) + local max_ = target_pool [1] and target_pool [1][2] or 0 - + local barra for index, tabela in _ipairs (target_pool) do barra = barras [index] @@ -4690,88 +4682,88 @@ function atributo_damage:MontaDetalhesEnemy (spellid, barra) barra = gump:CriaNovaBarraInfo3 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) --> isso aqui � a parte da sele��o e descele��o end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/max_*100) --> muito mais rapido... + barra.textura:SetValue(tabela[2]/max_*100) --> muito mais rapido... end - barra.lineText1:SetText (index .. ". " .. Details:GetOnlyName (tabela [1])) --seta o texto da esqueda + barra.lineText1:SetText(index .. ". " .. Details:GetOnlyName (tabela [1])) --seta o texto da esqueda Details:name_space_info (barra) - + if (spell.total > 0) then - barra.lineText4:SetText (Details:comma_value (tabela[2]) .." (".. _cstr("%.1f", tabela[2] / spell.total * 100) .."%)") --seta o texto da direita + barra.lineText4:SetText(Details:comma_value (tabela[2]) .." (".. format("%.1f", tabela[2] / spell.total * 100) .."%)") --seta o texto da direita else - barra.lineText4:SetText (tabela[2] .." (0%)") --seta o texto da direita + barra.lineText4:SetText(tabela[2] .." (0%)") --seta o texto da direita end - + local texCoords = Details.class_coords [tabela[3]] if (not texCoords) then texCoords = Details.class_coords ["UNKNOW"] end - + local color = Details.class_colors [tabela[3]] if (color) then - barra.textura:SetStatusBarColor (_unpack (color)) + 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.icone:SetTexture("Interface\\AddOns\\Details\\images\\classes_small_alpha") + barra.icone:SetTexCoord(unpack(texCoords)) barra:Show() --> mostra a barra - - if (index == 15) then + + if (index == 15) then break end end - + end ------ Detalhe Info Damage Taken function atributo_damage:MontaDetalhesDamageTaken (nome, barra) - for _, barra in _ipairs (info.barras3) do + for _, barra in _ipairs (info.barras3) do barra:Hide() end local barras = info.barras3 local instancia = info.instancia - + local tabela_do_combate = info.instancia.showing local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable local este_agressor = showing._ActorTable[showing._NameIndexTable[nome]] - - if (not este_agressor ) then + + if (not este_agressor ) then return end - + local conteudo = este_agressor.spells._ActorTable --> _pairs[] com os IDs das magias - + local actor = info.jogador.nome - + local total = este_agressor.targets [actor] or 0 local minhas_magias = {} - for spellid, tabela in _pairs (conteudo) do --> da foreach em cada spellid do container + for spellid, tabela in _pairs(conteudo) do --> da foreach em cada spellid do container local este_alvo = tabela.targets [actor] if (este_alvo) then --> esta magia deu dano no actor - local spell_nome, rank, icone = _GetSpellInfo (spellid) + local spell_nome, rank, icone = _GetSpellInfo(spellid) _table_insert (minhas_magias, {spellid, este_alvo, este_alvo/total*100, spell_nome, icone}) end end - _table_sort (minhas_magias, Details.Sort2) + _table_sort(minhas_magias, Details.Sort2) --local amt = #minhas_magias --gump:JI_AtualizaContainerBarras (amt) local max_ = minhas_magias[1] and minhas_magias[1][2] or 0 --> dano que a primeiro magia vez - + local barra for index, tabela in _ipairs (minhas_magias) do barra = barras [index] @@ -4780,28 +4772,28 @@ function atributo_damage:MontaDetalhesDamageTaken (nome, barra) barra = gump:CriaNovaBarraInfo3 (instancia, index) barra.textura:SetStatusBarColor (1, 1, 1, 1) --> isso aqui � a parte da sele��o e descele��o end - + if (index == 1) then - barra.textura:SetValue (100) + barra.textura:SetValue(100) else - barra.textura:SetValue (tabela[2]/max_*100) + barra.textura:SetValue(tabela[2]/max_*100) end - barra.lineText1:SetText (index .. "." .. tabela[4]) --seta o texto da esqueda + barra.lineText1:SetText(index .. "." .. tabela[4]) --seta o texto da esqueda Details:name_space_info (barra) - - barra.lineText4:SetText (Details:comma_value (tabela[2]) .." ".. instancia.divisores.abre .._cstr("%.1f", tabela[3]) .."%".. instancia.divisores.fecha) --seta o texto da direita - - barra.icone:SetTexture (tabela[5]) - barra.icone:SetTexCoord (0, 1, 0, 1) + + barra.lineText4:SetText(Details:comma_value (tabela[2]) .." ".. instancia.divisores.abre ..format("%.1f", tabela[3]) .."%".. instancia.divisores.fecha) --seta o texto da direita + + barra.icone:SetTexture(tabela[5]) + barra.icone:SetTexCoord(0, 1, 0, 1) barra:Show() --> mostra a barra - - if (index == 15) then + + if (index == 15) then break end end - + end ------ Detalhe Info Damage Done e Dps @@ -4818,16 +4810,16 @@ local t1, t2, t3, t4 = {}, {}, {}, {} local function FormatSpellString(str) return (string.gsub(str, "%d+", function(spellID) - local name, _, icon = GetSpellInfo (spellID); + local name, _, icon = GetSpellInfo(spellID); return string.format("|T%s:16|t", icon); end)); end -local MontaDetalhesBuffProcs = function (actor, row, instance) - +local MontaDetalhesBuffProcs = function(actor, row, instance) + instance = instance or info.instancia - + local spec = actor.spec if (spec) then local mainAuras = Details.important_auras [spec] @@ -4840,25 +4832,25 @@ local MontaDetalhesBuffProcs = function (actor, row, instance) local spellID = mainAuras [i] local spellObject = miscActor.buff_uptime_spells._ActorTable [spellID] if (spellObject) then - local spellName, spellIcon = GetSpellInfo (spellID) + local spellName, spellIcon = GetSpellInfo(spellID) local spellUptime = spellObject.uptime local spellApplies = spellObject.appliedamt local spellRefreshes = spellObject.refreshamt - + gump:SetaDetalheInfoTexto (i, 100, FormatSpellString ("" .. spellID .. " " .. spellName), "Activations: " .. spellApplies, " ", "Refreshes: " .. spellRefreshes, " ", "Uptime: " .. spellUptime .. "s") added = added + 1 end end - + for i = added + 1, 5 do gump:HidaDetalheInfo (i) end - + return end end end - + for i = 1, 5 do gump:HidaDetalheInfo (i) end @@ -4878,25 +4870,25 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) if (spellid == -51) then return MontaDetalhesBuffProcs (self, barra, instancia) end - + if (not esta_magia) then return end - - --> icone direito superior - local _, _, icone = _GetSpellInfo (spellid) - Details.playerDetailWindow.spell_icone:SetTexture (icone) + --> icone direito superior + local _, _, icone = _GetSpellInfo(spellid) + + Details.playerDetailWindow.spell_icone:SetTexture(icone) local total = self.total - + local meu_tempo if (Details.time_type == 1 or not self.grupo) then meu_tempo = self:Tempo() elseif (Details.time_type == 2) then meu_tempo = info.instancia.showing:GetCombatTime() end - + local total_hits = esta_magia.counter local index = 1 local data = data_table @@ -4912,7 +4904,7 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) if (total_hits > 0) then media = esta_magia.total/total_hits end - + local this_dps = nil if (esta_magia.counter > esta_magia.c_amt) then this_dps = Loc ["STRING_DPS"] .. ": " .. Details:comma_value (esta_magia.total/meu_tempo) @@ -4927,30 +4919,30 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) schooltext = t.formated end end - + local hits_string = "" .. total_hits local cast_string = Loc ["STRING_CAST"] .. ": " - + local misc_actor = info.instancia.showing (4, self:name()) if (misc_actor) then - + local uptime_spellid = esta_magia.id --if (uptime_spellid == 233490) then -- uptime_spellid = 233496 -- uptime_spellid = 233490 --end - + local debuff_uptime = misc_actor.debuff_uptime_spells and misc_actor.debuff_uptime_spells._ActorTable [uptime_spellid] and misc_actor.debuff_uptime_spells._ActorTable [uptime_spellid].uptime if (debuff_uptime) then - hits_string = hits_string .. " |cFFDDDD44(" .. _math_floor (debuff_uptime / info.instancia.showing:GetCombatTime() * 100) .. "% uptime)|r" + hits_string = hits_string .. " |cFFDDDD44(" .. _math_floor(debuff_uptime / info.instancia.showing:GetCombatTime() * 100) .. "% uptime)|r" end - + local spell_cast = misc_actor.spell_cast and misc_actor.spell_cast [spellid] - + if (not spell_cast and misc_actor.spell_cast) then - local spellname = GetSpellInfo (spellid) - for casted_spellid, amount in _pairs (misc_actor.spell_cast) do - local casted_spellname = GetSpellInfo (casted_spellid) + local spellname = GetSpellInfo(spellid) + for casted_spellid, amount in _pairs(misc_actor.spell_cast) do + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then spell_cast = amount .. " (|cFFFFFF00?|r)" end @@ -4961,15 +4953,15 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) end cast_string = cast_string .. spell_cast end - + gump:SetaDetalheInfoTexto ( index, 100, cast_string, - Loc ["STRING_DAMAGE"]..": "..Details:ToK (esta_magia.total), + Loc ["STRING_DAMAGE"]..": "..Details:ToK(esta_magia.total), schooltext, --offhand, - Loc ["STRING_AVERAGE"] .. ": " .. Details:comma_value (media), + Loc ["STRING_AVERAGE"] .. ": " .. Details:comma_value (media), this_dps, Loc ["STRING_HITS"]..": " .. hits_string) - + --> NORMAL local normal_hits = esta_magia.n_amt if (normal_hits > 0) then @@ -4982,7 +4974,7 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) normal_table.p = normal_hits/total_hits*100 data[#data+1] = t1 - + t1[1] = esta_magia.n_amt t1[2] = normal_table t1[3] = Loc ["STRING_NORMAL_HITS"] @@ -4990,12 +4982,12 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) t1[5] = Loc ["STRING_MAXIMUM_SHORT"] .. ": " .. Details:comma_value (esta_magia.n_max) t1[6] = Loc ["STRING_AVERAGE"] .. ": " .. Details:comma_value (media_normal) t1[7] = Loc ["STRING_DPS"] .. ": " .. Details:comma_value (normal_dmg/T) - t1[8] = normal_hits .. " [|cFFC0C0C0" .. _cstr ("%.1f", normal_hits/max(total_hits, 0.0001)*100) .. "%|r]" - + t1[8] = normal_hits .. " [|cFFC0C0C0" .. format ("%.1f", normal_hits/max(total_hits, 0.0001)*100) .. "%|r]" + end --> CRITICO - if (esta_magia.c_amt > 0) then + if (esta_magia.c_amt > 0) then local media_critico = esta_magia.c_dmg/esta_magia.c_amt local T = (meu_tempo*esta_magia.c_dmg)/esta_magia.total local P = media/max(media_critico, 0.0001)*100 @@ -5004,11 +4996,11 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) if (not crit_dps) then crit_dps = 0 end - + critical_table.p = esta_magia.c_amt/total_hits*100 - + data[#data+1] = t2 - + t2[1] = esta_magia.c_amt t2[2] = critical_table t2[3] = Loc ["STRING_CRITICAL_HITS"] @@ -5016,10 +5008,10 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) t2[5] = Loc ["STRING_MAXIMUM_SHORT"] .. ": " .. Details:comma_value (esta_magia.c_max) t2[6] = Loc ["STRING_AVERAGE"] .. ": " .. Details:comma_value (media_critico) t2[7] = Loc ["STRING_DPS"] .. ": " .. Details:comma_value (crit_dps) - t2[8] = esta_magia.c_amt .. " [|cFFC0C0C0" .. _cstr ("%.1f", esta_magia.c_amt/total_hits*100) .. "%|r]" + t2[8] = esta_magia.c_amt .. " [|cFFC0C0C0" .. format ("%.1f", esta_magia.c_amt/total_hits*100) .. "%|r]" end - + --> Outros erros: GLACING, resisted, blocked, absorbed local outros_desvios = esta_magia.g_amt + esta_magia.b_amt local parry = esta_magia ["PARRY"] or 0 @@ -5027,78 +5019,78 @@ function atributo_damage:MontaDetalhesDamageDone (spellid, barra, instancia) local erros = parry + dodge if (outros_desvios > 0 or erros > 0) then - + local porcentagem_defesas = (outros_desvios+erros) / total_hits * 100 data[#data+1] = t3 defenses_table.p = porcentagem_defesas - + t3[1] = outros_desvios+erros t3[2] = defenses_table t3[3] = Loc ["STRING_DEFENSES"] - t3[4] = Loc ["STRING_GLANCING"] .. ": " .. _math_floor (esta_magia.g_amt/esta_magia.counter*100) .. "%" + t3[4] = Loc ["STRING_GLANCING"] .. ": " .. _math_floor(esta_magia.g_amt/esta_magia.counter*100) .. "%" t3[5] = Loc ["STRING_PARRY"] .. ": " .. parry t3[6] = Loc ["STRING_DODGE"] .. ": " .. dodge - t3[7] = Loc ["STRING_BLOCKED"] .. ": " .. _math_floor (esta_magia.b_amt/esta_magia.counter*100) - t3[8] = (outros_desvios+erros) .. " / " .. _cstr ("%.1f", porcentagem_defesas) .. "%" + t3[7] = Loc ["STRING_BLOCKED"] .. ": " .. _math_floor(esta_magia.b_amt/esta_magia.counter*100) + t3[8] = (outros_desvios+erros) .. " / " .. format ("%.1f", porcentagem_defesas) .. "%" end --Details:BuildPlayerDetailsSpellChart() --DetailsPlayerDetailSmallChart.ShowChart (Details.playerDetailWindow.grupos_detalhes [5].bg, info.instancia.showing, info.instancia.showing.cleu_events, self.nome, false, spellid, 1, 2, 3, 4, 5, 6, 7, 8, 15) - + --> spell damage chart --events: 1 2 3 4 5 6 7 8 15 - - _table_sort (data, Details.Sort1) - + + _table_sort(data, Details.Sort1) + for index, tabela in _ipairs (data) do gump:SetaDetalheInfoTexto (index+1, tabela[2], tabela[3], tabela[4], tabela[5], tabela[6], tabela[7], tabela[8]) end - + for i = #data+2, 5 do gump:HidaDetalheInfo (i) end - + end function Details:BuildPlayerDetailsSpellChart() local playerDetailSmallChart = DetailsPlayerDetailSmallChart - + if (not playerDetailSmallChart) then - + playerDetailSmallChart = CreateFrame ("frame", "DetailsPlayerDetailSmallChart", info,"BackdropTemplate") DetailsFramework:ApplyStandardBackdrop (playerDetailSmallChart) playerDetailSmallChart.Lines = {} - + for i = 1, 200 do local texture = playerDetailSmallChart:CreateTexture (nil, "artwork") texture:SetColorTexture (1, 1, 1, 1) tinsert (playerDetailSmallChart.Lines, texture) end - + --Details.playerDetailWindow.grupos_detalhes [index] function playerDetailSmallChart.ShowChart (parent, combatObject, cleuData, playerName, targetName, spellId, ...) local tokenIdList = {} local eventList = {} - + --build the list of tokens for i = 1, select ("#", ... ) do local tokenId = select (i, ...) tokenIdList [tokenId] = true end - + --check which lines can be added local index = 1 local peakValue = 0 - + for i = 1, cleuData.n -1 do local event = cleuData [i] if (event [2]) then --index 2 = token local playerNameFilter = playerName and playerName == event [3] local targetNameFilter = targetName and targetName == event [4] local spellIdFilter = spellId and spellId == event [5] - + if (playerNameFilter or targetNameFilter or spellIdFilter) then eventList [index] = cleuData [i] if (peakValue < cleuData [i] [6]) then @@ -5112,22 +5104,22 @@ function Details:BuildPlayerDetailsSpellChart() --200 lines, adjust the mini chart playerDetailSmallChart:SetPoint ("topleft", parent, "topleft") playerDetailSmallChart:SetPoint ("bottomright", parent, "bottomright") - + --update lines local width = playerDetailSmallChart:GetWidth() local combatTime = combatObject:GetCombatTime() local secondsPerBar = combatTime / 200 local barWidth = width / 200 local barHeight = playerDetailSmallChart:GetHeight() - + local currentTime = eventList [1][1] local currentIndex = 1 local eventAmount = #eventList - + for i = 1, #playerDetailSmallChart.Lines do playerDetailSmallChart.Lines [i]:SetWidth (width / 200) playerDetailSmallChart.Lines [i]:SetHeight (1) - + for o = currentIndex, eventAmount do if (eventList [o][1] <= currentTime + secondsPerBar or eventList [o][1] >= currentTime) then playerDetailSmallChart.Lines [i]:SetPoint ("bottomleft", playerDetailSmallChart, "bottomleft", barWidth * (i - 1), 0) @@ -5138,7 +5130,7 @@ function Details:BuildPlayerDetailsSpellChart() break end end - + currentTime = currentTime + secondsPerBar end end @@ -5146,15 +5138,15 @@ function Details:BuildPlayerDetailsSpellChart() end function atributo_damage:MontaTooltipDamageTaken (thisLine, index) - + local aggressor = info.instancia.showing [1]:PegarCombatente (_, thisLine.nome_inimigo) local container = aggressor.spells._ActorTable local habilidades = {} local total = 0 - - for spellid, spell in _pairs (container) do - for target_name, amount in _pairs (spell.targets) do + + for spellid, spell in _pairs(container) do + for target_name, amount in _pairs(spell.targets) do if (target_name == self.nome) then total = total + amount habilidades [#habilidades+1] = {spellid, amount} @@ -5162,59 +5154,59 @@ function atributo_damage:MontaTooltipDamageTaken (thisLine, index) end end - _table_sort (habilidades, Details.Sort2) + _table_sort(habilidades, Details.Sort2) GameTooltip:AddLine (index..". "..thisLine.nome_inimigo) GameTooltip:AddLine (Loc ["STRING_DAMAGE_TAKEN_FROM2"]..":") GameTooltip:AddLine (" ") - + for index, tabela in _ipairs (habilidades) do - local nome, _, icone = _GetSpellInfo (tabela[1]) + local nome, _, icone = _GetSpellInfo(tabela[1]) if (index < 8) then - GameTooltip:AddDoubleLine (index..". |T"..icone..":0|t "..nome, Details:comma_value (tabela[2]).." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) + GameTooltip:AddDoubleLine (index..". |T"..icone..":0|t "..nome, Details:comma_value (tabela[2]).." ("..format("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) else - GameTooltip:AddDoubleLine (index..". "..nome, Details:comma_value (tabela[2]).." (".._cstr("%.1f", tabela[2]/total*100).."%)", .65, .65, .65, .65, .65, .65) + GameTooltip:AddDoubleLine (index..". "..nome, Details:comma_value (tabela[2]).." ("..format("%.1f", tabela[2]/total*100).."%)", .65, .65, .65, .65, .65, .65) end end - + return true --GameTooltip:AddDoubleLine (meus_danos[i][4][1]..": ", meus_danos[i][2].." (".._cstr("%.1f", meus_danos[i][3]).."%)", 1, 1, 1, 1, 1, 1) - + end function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) - + local inimigo = thisLine.nome_inimigo local habilidades = {} local total = self.total local i = 1 - + Details:FormatCooltipForSpells() GameCooltip:SetOwner(thisLine, "bottom", "top", 4, -2) GameCooltip:SetOption ("MinWidth", _math_max (230, thisLine:GetWidth()*0.98)) - for spellid, spell in _pairs (self.spells._ActorTable) do + for spellid, spell in _pairs(self.spells._ActorTable) do if (spell.isReflection) then - for target_name, amount in _pairs (spell.targets) do + for target_name, amount in _pairs(spell.targets) do if (target_name == inimigo) then - for reflectedSpellId, amount in _pairs (spell.extra) do + for reflectedSpellId, amount in _pairs(spell.extra) do local spellName, _, spellIcon = _GetSpellInfo(reflectedSpellId) local t = habilidades [i] if (not t) then habilidades [i] = {} t = habilidades [i] end - + t[1], t[2], t[3] = spellName .. " (|cFFCCBBBBreflected|r)", amount, spellIcon i = i + 1 end end end - else - for target_name, amount in _pairs (spell.targets) do + else + for target_name, amount in _pairs(spell.targets) do if (target_name == inimigo) then - local nome, _, icone = _GetSpellInfo (spellid) - + local nome, _, icone = _GetSpellInfo(spellid) + local t = habilidades [i] if (not t) then habilidades [i] = {} @@ -5231,23 +5223,23 @@ function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) --> add pets for _, PetName in _ipairs (self.pets) do local PetActor = instancia.showing (class_type, PetName) - if (PetActor) then + if (PetActor) then local PetSkillsContainer = PetActor.spells._ActorTable - for _spellid, _skill in _pairs (PetSkillsContainer) do - + for _spellid, _skill in _pairs(PetSkillsContainer) do + local alvos = _skill.targets - for target_name, amount in _pairs (alvos) do + for target_name, amount in _pairs(alvos) do if (target_name == inimigo) then - + local t = habilidades [i] if (not t) then habilidades [i] = {} t = habilidades [i] end - - local nome, _, icone = _GetSpellInfo (_spellid) + + local nome, _, icone = _GetSpellInfo(_spellid) t[1], t[2], t[3] = nome .. " (" .. PetName:gsub ((" <.*"), "") .. ")", amount, icone - + i = i + 1 end end @@ -5255,7 +5247,7 @@ function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) end end - _table_sort (habilidades, Details.Sort2) + _table_sort(habilidades, Details.Sort2) --get time type local meu_tempo @@ -5264,15 +5256,15 @@ function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) elseif (Details.time_type == 2) then meu_tempo = info.instancia.showing:GetCombatTime() end - + local is_dps = info.instancia.sub_atributo == 2 - + if (is_dps) then - Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_DPS_IN"] .. ":", {1, 0.9, 0.0, 1}, 1, Details.tooltip_spell_icon.file, unpack (Details.tooltip_spell_icon.coords)) + Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_DPS_IN"] .. ":", {1, 0.9, 0.0, 1}, 1, Details.tooltip_spell_icon.file, unpack(Details.tooltip_spell_icon.coords)) Details:AddTooltipHeaderStatusbar (1, 1, 1, 1) else - Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_FROM"] .. ":", {1, 0.9, 0.0, 1}, 1, Details.tooltip_spell_icon.file, unpack (Details.tooltip_spell_icon.coords)) + Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_FROM"] .. ":", {1, 0.9, 0.0, 1}, 1, Details.tooltip_spell_icon.file, unpack(Details.tooltip_spell_icon.coords)) Details:AddTooltipHeaderStatusbar (1, 1, 1, 1) end @@ -5288,11 +5280,11 @@ function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) end if (is_dps) then - --GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t "..tabela[1], Details:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) - GameCooltip:AddLine (tabela[1], Details:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)") + --GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t "..tabela[1], Details:comma_value ( _math_floor(tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (tabela[1], Details:comma_value ( _math_floor(tabela[2] / meu_tempo) ).." ("..format("%.1f", tabela[2]/total*100).."%)") else - --GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t " .. tabela[1], SelectedToKFunction (_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) - GameCooltip:AddLine (tabela[1], SelectedToKFunction (_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)") + --GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t " .. tabela[1], SelectedToKFunction(_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (tabela[1], SelectedToKFunction(_, tabela[2]) .. " ("..format("%.1f", tabela[2]/total*100).."%)") end GameCooltip:AddIcon (tabela[3], nil, nil, icon_size.W + 4, icon_size.H + 4, icon_border.L, icon_border.R, icon_border.T, icon_border.B) @@ -5301,14 +5293,14 @@ function atributo_damage:MontaTooltipAlvos (thisLine, index, instancia) end GameCooltip:Show() - + return true - + end --> controla se o dps do jogador esta travado ou destravado function atributo_damage:Iniciar (iniciar) - if (iniciar == nil) then + if (iniciar == nil) then return self.dps_started --> retorna se o dps esta aberto ou fechado para este jogador elseif (iniciar) then self.dps_started = true @@ -5333,7 +5325,7 @@ end for i = #bs_table, 1, -1 do bs_table [i] = nil end - + if (bs_tooltip_table) then wipe (bs_tooltip_table) end @@ -5366,7 +5358,7 @@ end combat_table.totals_grupo [class_type] = combat_table.totals_grupo [class_type] + self.total end end - + --> restaura a tabela de last event function atributo_damage:r_last_events_table (actor) if (not actor) then @@ -5374,16 +5366,16 @@ end end --actor.last_events_table = Details:CreateActorLastEventTable() end - + --> restaura e liga o ator com a sua shadow durante a inicializa��o (startup function) function atributo_damage:r_onlyrefresh_shadow (actor) --> criar uma shadow desse ator se ainda n�o tiver uma local overall_dano = Details.tabela_overall [1] local shadow = overall_dano._ActorTable [overall_dano._NameIndexTable [actor.nome]] - - if (not shadow) then + + if (not shadow) then shadow = overall_dano:PegarCombatente (actor.serial, actor.nome, actor.flag_original, true) - + shadow.classe = actor.classe shadow.spec = actor.spec shadow.grupo = actor.grupo @@ -5392,68 +5384,68 @@ end shadow.boss = actor.boss shadow.boss_fight_component = actor.boss_fight_component shadow.fight_component = actor.fight_component - + shadow.start_time = time() - 3 shadow.end_time = time() end --> restaura a meta e indexes ao ator Details.refresh:r_atributo_damage (actor, shadow) - + --> copia o container de alvos (captura de dados) - for target_name, amount in _pairs (actor.targets) do + for target_name, amount in _pairs(actor.targets) do --> cria e soma o valor do total if (not shadow.targets [target_name]) then shadow.targets [target_name] = 0 end end - + --> copia o container de habilidades (captura de dados) - for spellid, habilidade in _pairs (actor.spells._ActorTable) do + for spellid, habilidade in _pairs(actor.spells._ActorTable) do --> cria e soma o valor local habilidade_shadow = shadow.spells:PegaHabilidade (spellid, true, nil, true) --> create the target value - for target_name, amount in _pairs (habilidade.targets) do + for target_name, amount in _pairs(habilidade.targets) do if (not habilidade_shadow.targets [target_name]) then habilidade_shadow.targets [target_name] = 0 end end --> create the extra value - for spellId, amount in _pairs (habilidade.extra) do + for spellId, amount in _pairs(habilidade.extra) do if (not habilidade_shadow.extra [spellId]) then habilidade_shadow.extra [spellId] = 0 end end end - + --> copia o container de friendly fire (captura de dados) - for target_name, ff_table in _pairs (actor.friendlyfire) do + for target_name, ff_table in _pairs(actor.friendlyfire) do --> cria ou pega a shadow local friendlyFire_shadow = shadow.friendlyfire [target_name] or shadow:CreateFFTable (target_name) --> some as spells - for spellid, amount in _pairs (ff_table.spells) do + for spellid, amount in _pairs(ff_table.spells) do friendlyFire_shadow.spells [spellid] = 0 end end - + return shadow end - + function atributo_damage:r_connect_shadow (actor, no_refresh, combat_object) - + --check if there's a custom combat, if not just use the overall container local host_combat = combat_object or Details.tabela_overall - + --check if the host combat object has a shadow actor for this actor, if not, just create one new local overall_dano = host_combat [1] local shadow = overall_dano._ActorTable [overall_dano._NameIndexTable [actor.nome]] - - if (not shadow) then + + if (not shadow) then shadow = overall_dano:PegarCombatente (actor.serial, actor.nome, actor.flag_original, true) - + shadow.classe = actor.classe shadow.spec = actor.spec shadow.isTank = actor.isTank @@ -5462,7 +5454,7 @@ end shadow.boss = actor.boss shadow.boss_fight_component = actor.boss_fight_component shadow.fight_component = actor.fight_component - + shadow.start_time = time() - 3 shadow.end_time = time() end @@ -5472,7 +5464,7 @@ end shadow.boss_fight_component = actor.boss_fight_component or shadow.boss_fight_component shadow.fight_component = actor.fight_component or shadow.fight_component shadow.grupo = actor.grupo or shadow.grupo - + --check if need to restore meta tables and indexes for this actor if (not no_refresh) then Details.refresh:r_atributo_damage (actor, shadow) @@ -5483,10 +5475,10 @@ end if (not actor.end_time) then end_time = time() end - + local tempo = end_time - actor.start_time shadow.start_time = shadow.start_time - tempo - + --> pets (add unique pet names) for _, petName in _ipairs (actor.pets) do local hasPet = false @@ -5496,14 +5488,14 @@ end break end end - + if (not hasPet) then shadow.pets [#shadow.pets+1] = petName end end - + --> total de dano (captura de dados) - shadow.total = shadow.total + actor.total + shadow.total = shadow.total + actor.total shadow.totalabsorbed = shadow.totalabsorbed + actor.totalabsorbed --> total de dano sem o pet (captura de dados) shadow.total_without_pet = shadow.total_without_pet + actor.total_without_pet @@ -5517,46 +5509,46 @@ end if (actor.grupo) then host_combat.totals_grupo[1] = host_combat.totals_grupo[1] + actor.total end - + --> copia o damage_from (captura de dados) - for nome, _ in _pairs (actor.damage_from) do + for nome, _ in _pairs(actor.damage_from) do shadow.damage_from [nome] = true end - + --> copia o container de alvos (captura de dados) - for target_name, amount in _pairs (actor.targets) do + for target_name, amount in _pairs(actor.targets) do shadow.targets [target_name] = (shadow.targets [target_name] or 0) + amount end - + --> copiar o container de raid targets - for flag, amount in _pairs (actor.raid_targets) do + for flag, amount in _pairs(actor.raid_targets) do shadow.raid_targets = shadow.raid_targets or {} --deu invalido noutro dia shadow.raid_targets [flag] = (shadow.raid_targets [flag] or 0) + amount end - + --> copia o container de habilidades (captura de dados) - for spellid, habilidade in _pairs (actor.spells._ActorTable) do + for spellid, habilidade in _pairs(actor.spells._ActorTable) do --> cria e soma o valor local habilidade_shadow = shadow.spells:PegaHabilidade (spellid, true, nil, true) --> refresh e soma os valores dos alvos - for target_name, amount in _pairs (habilidade.targets) do + for target_name, amount in _pairs(habilidade.targets) do habilidade_shadow.targets [target_name] = (habilidade_shadow.targets [target_name] or 0) + amount end --> refresh and add extra values - for spellId, amount in _pairs (habilidade.extra) do + for spellId, amount in _pairs(habilidade.extra) do habilidade_shadow.extra [spellId] = (habilidade_shadow.extra [spellId] or 0) + amount end --> soma todos os demais valores - for key, value in _pairs (habilidade) do - if (_type (value) == "number") then + for key, value in _pairs(habilidade) do + if (_type(value) == "number") then if (key ~= "id" and key ~= "spellschool") then - if (not habilidade_shadow [key]) then + if (not habilidade_shadow [key]) then habilidade_shadow [key] = 0 end - + if (key == "n_min" or key == "c_min") then if (habilidade_shadow [key] > value) then habilidade_shadow [key] = value @@ -5573,19 +5565,19 @@ end end end end - + --> copia o container de friendly fire (captura de dados) - for target_name, ff_table in _pairs (actor.friendlyfire) do + for target_name, ff_table in _pairs(actor.friendlyfire) do --> cria ou pega a shadow local friendlyFire_shadow = shadow.friendlyfire [target_name] or shadow:CreateFFTable (target_name) --> soma o total friendlyFire_shadow.total = friendlyFire_shadow.total + ff_table.total --> some as spells - for spellid, amount in _pairs (ff_table.spells) do + for spellid, amount in _pairs(ff_table.spells) do friendlyFire_shadow.spells [spellid] = (friendlyFire_shadow.spells [spellid] or 0) + amount end end - + return shadow end @@ -5681,12 +5673,12 @@ function Details.SumDamageActors(actor1, actor2, actorContainer) end -atributo_damage.__add = function (tabela1, tabela2) +atributo_damage.__add = function(tabela1, tabela2) --> tempo decorrido local tempo = (tabela2.end_time or time()) - tabela2.start_time tabela1.start_time = tabela1.start_time - tempo - + --> total de dano tabela1.total = tabela1.total + tabela2.total tabela1.totalabsorbed = tabela1.totalabsorbed + tabela2.totalabsorbed @@ -5698,10 +5690,10 @@ atributo_damage.__add = function (tabela1, tabela2) tabela1.friendlyfire_total = tabela1.friendlyfire_total + tabela2.friendlyfire_total --> soma o damage_from - for nome, _ in _pairs (tabela2.damage_from) do + for nome, _ in _pairs(tabela2.damage_from) do tabela1.damage_from [nome] = true end - + --> pets (add unique pet names) for _, petName in _ipairs (tabela2.pets) do local hasPet = false @@ -5711,45 +5703,45 @@ atributo_damage.__add = function (tabela1, tabela2) break end end - + if (not hasPet) then tabela1.pets [#tabela1.pets+1] = petName end end - + --> soma os containers de alvos - for target_name, amount in _pairs (tabela2.targets) do + for target_name, amount in _pairs(tabela2.targets) do tabela1.targets [target_name] = (tabela1.targets [target_name] or 0) + amount end - + --> soma o container de raid targets - for flag, amount in _pairs (tabela2.raid_targets) do + for flag, amount in _pairs(tabela2.raid_targets) do tabela1.raid_targets [flag] = (tabela1.raid_targets [flag] or 0) + amount end - + --> soma o container de habilidades - for spellid, habilidade in _pairs (tabela2.spells._ActorTable) do + for spellid, habilidade in _pairs(tabela2.spells._ActorTable) do --> pega a habilidade no primeiro ator local habilidade_tabela1 = tabela1.spells:PegaHabilidade (spellid, true, "SPELL_DAMAGE", false) --> soma os alvos - for target_name, amount in _pairs (habilidade.targets) do + for target_name, amount in _pairs(habilidade.targets) do habilidade_tabela1.targets[target_name] = (habilidade_tabela1.targets [target_name] or 0) + amount end --> soma os extras - for spellId, amount in _pairs (habilidade.extra) do + for spellId, amount in _pairs(habilidade.extra) do habilidade_tabela1.extra = (habilidade_tabela1.extra [spellId] or 0) + amount end --> soma os valores da habilidade - for key, value in _pairs (habilidade) do - if (_type (value) == "number") then + for key, value in _pairs(habilidade) do + if (_type(value) == "number") then if (key ~= "id" and key ~= "spellschool") then - if (not habilidade_tabela1 [key]) then + if (not habilidade_tabela1 [key]) then habilidade_tabela1 [key] = 0 end - + if (key == "n_min" or key == "c_min") then if (habilidade_tabela1 [key] > value) then habilidade_tabela1 [key] = value @@ -5761,21 +5753,21 @@ atributo_damage.__add = function (tabela1, tabela2) else habilidade_tabela1 [key] = habilidade_tabela1 [key] + value end - + end end end end - + --> soma o container de friendly fire - for target_name, ff_table in _pairs (tabela2.friendlyfire) do + for target_name, ff_table in _pairs(tabela2.friendlyfire) do --> pega o ator ff no ator principal local friendlyFire_tabela1 = tabela1.friendlyfire [target_name] or tabela1:CreateFFTable (target_name) --> soma o total friendlyFire_tabela1.total = friendlyFire_tabela1.total + ff_table.total - + --> soma as habilidades - for spellid, amount in _pairs (ff_table.spells) do + for spellid, amount in _pairs(ff_table.spells) do friendlyFire_tabela1.spells [spellid] = (friendlyFire_tabela1.spells [spellid] or 0) + amount end end @@ -5783,45 +5775,45 @@ atributo_damage.__add = function (tabela1, tabela2) return tabela1 end -atributo_damage.__sub = function (tabela1, tabela2) +atributo_damage.__sub = function(tabela1, tabela2) --> tempo decorrido local tempo = (tabela2.end_time or time()) - tabela2.start_time tabela1.start_time = tabela1.start_time + tempo - + --> total de dano tabela1.total = tabela1.total - tabela2.total tabela1.totalabsorbed = tabela1.totalabsorbed - tabela2.totalabsorbed - + --> total de dano sem o pet tabela1.total_without_pet = tabela1.total_without_pet - tabela2.total_without_pet --> total de dano que o cara levou tabela1.damage_taken = tabela1.damage_taken - tabela2.damage_taken --> total do friendly fire causado tabela1.friendlyfire_total = tabela1.friendlyfire_total - tabela2.friendlyfire_total - + --> reduz os containers de alvos - for target_name, amount in _pairs (tabela2.targets) do + for target_name, amount in _pairs(tabela2.targets) do local alvo_tabela1 = tabela1.targets [target_name] if (alvo_tabela1) then tabela1.targets [target_name] = tabela1.targets [target_name] - amount end end - + --> reduz o container de raid targets - for flag, amount in _pairs (tabela2.raid_targets) do + for flag, amount in _pairs(tabela2.raid_targets) do if (tabela1.raid_targets [flag]) then tabela1.raid_targets [flag] = _math_max (tabela1.raid_targets [flag] - amount, 0) end end - + --> reduz o container de habilidades - for spellid, habilidade in _pairs (tabela2.spells._ActorTable) do + for spellid, habilidade in _pairs(tabela2.spells._ActorTable) do --> get the spell from the first actor local habilidade_tabela1 = tabela1.spells:PegaHabilidade (spellid, true, "SPELL_DAMAGE", false) --> subtract targets - for target_name, amount in _pairs (habilidade.targets) do + for target_name, amount in _pairs(habilidade.targets) do local alvo_tabela1 = habilidade_tabela1.targets [target_name] if (alvo_tabela1) then habilidade_tabela1.targets [target_name] = habilidade_tabela1.targets [target_name] - amount @@ -5829,7 +5821,7 @@ atributo_damage.__sub = function (tabela1, tabela2) end --> subtract extra table - for spellId, amount in _pairs (habilidade.extra) do + for spellId, amount in _pairs(habilidade.extra) do local extra_tabela1 = habilidade_tabela1.extra [spellId] if (extra_tabela1) then habilidade_tabela1.extra [spellId] = habilidade_tabela1.extra [spellId] - amount @@ -5837,10 +5829,10 @@ atributo_damage.__sub = function (tabela1, tabela2) end --> subtrai os valores da habilidade - for key, value in _pairs (habilidade) do - if (_type (value) == "number") then + for key, value in _pairs(habilidade) do + if (_type(value) == "number") then if (key ~= "id" and key ~= "spellschool") then - if (not habilidade_tabela1 [key]) then + if (not habilidade_tabela1 [key]) then habilidade_tabela1 [key] = 0 end if (key == "n_min" or key == "c_min") then @@ -5858,21 +5850,21 @@ atributo_damage.__sub = function (tabela1, tabela2) end end end - + --> reduz o container de friendly fire - for target_name, ff_table in _pairs (tabela2.friendlyfire) do + for target_name, ff_table in _pairs(tabela2.friendlyfire) do --> pega o ator ff no ator principal local friendlyFire_tabela1 = tabela1.friendlyfire [target_name] if (friendlyFire_tabela1) then friendlyFire_tabela1.total = friendlyFire_tabela1.total - ff_table.total - for spellid, amount in _pairs (ff_table.spells) do + for spellid, amount in _pairs(ff_table.spells) do if (friendlyFire_tabela1.spells [spellid]) then friendlyFire_tabela1.spells [spellid] = friendlyFire_tabela1.spells [spellid] - amount end end end end - + return tabela1 end @@ -5899,11 +5891,11 @@ end i = 1 local enemy = combat (1, enemy_name) if (enemy) then - + local damage_done = 0 - + --> get targets - for target_name, amount in _pairs (enemy.targets) do + for target_name, amount in _pairs(enemy.targets) do local player = combat (1, target_name) if (player and player.grupo) then local t = tooltip_temp_table [i] @@ -5917,7 +5909,7 @@ end i = i + 1 end end - + --> first clenup for o = i, #tooltip_temp_table do local t = tooltip_temp_table [o] @@ -5925,27 +5917,27 @@ end t[1] = 0 end - _table_sort (tooltip_temp_table, Details.Sort2) - + _table_sort(tooltip_temp_table, Details.Sort2) + --> enemy damage taken Details:AddTooltipSpellHeaderText (Loc ["STRING_ATTRIBUTE_DAMAGE"], headerColor, i-1, true) GameCooltip:AddIcon ([=[Interface\Buttons\UI-MicroStream-Green]=], 2, 1, 14, 14, 0.1875, 0.8125, 0.15625, 0.78125) GameCooltip:AddIcon ([=[Interface\AddOns\Details\images\key_shift]=], 2, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2) GameCooltip:AddStatusBar (100, 2, 0.7, g, b, 1) - + --> build the tooltip for o = 1, i-1 do local player = tooltip_temp_table [o][1] local total = tooltip_temp_table [o][2] local player_name = player:name() - + if (player_name:find (Details.playername)) then GameCooltip:AddLine (player_name .. ": ", FormatTooltipNumber (_, total) .. " (" .. _cstr ("%.1f", (total / damage_done) * 100) .. "%)", 2, "yellow") else GameCooltip:AddLine (player_name .. ": ", FormatTooltipNumber (_, total) .." (" .. _cstr ("%.1f", (total / damage_done) * 100) .. "%)", 2) end - + local classe = player:class() if (not classe) then classe = "UNKNOW" @@ -5953,14 +5945,14 @@ end if (classe == "UNKNOW") then GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", 2, nil, 14, 14, .25, .5, 0, 1) else - GameCooltip:AddIcon (instancia.row_info.icon_file, 2, nil, 14, 14, _unpack (Details.class_coords [classe])) + GameCooltip:AddIcon (instancia.row_info.icon_file, 2, nil, 14, 14, _unpack(Details.class_coords [classe])) end Details:AddTooltipBackgroundStatusbar (2) end - + end - + --> clean up for o = 1, #tooltip_temp_table do local t = tooltip_temp_table [o] diff --git a/classes/class_error.lua b/classes/class_error.lua index 0161a614..b6a408a0 100644 --- a/classes/class_error.lua +++ b/classes/class_error.lua @@ -13,7 +13,7 @@ do _error.__tostring = function() return _error.errortext end - _error.__call = function (_this) + _error.__call = function(_this) print (_this.errortext) end diff --git a/classes/class_heal.lua b/classes/class_heal.lua index ea9f0b4d..c2ab82a6 100644 --- a/classes/class_heal.lua +++ b/classes/class_heal.lua @@ -70,7 +70,7 @@ local keyName function atributo_heal:NovaTabela (serial, nome, link) - local alphabetical = _detalhes:GetOrderNumber (nome) + local alphabetical = _detalhes:GetOrderNumber(nome) --> constructor local _new_healActor = { @@ -978,7 +978,7 @@ function _detalhes:CloseShields (combat) for spellid, owner_table in _pairs (spellid_table) do - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) for owner, amount in _pairs (owner_table) do if (amount > 0) then @@ -1095,7 +1095,7 @@ function atributo_heal:ToolTip_HealingDenied (instancia, numero, barra, keydown) break end - local spellName, _, spellIcon = _GetSpellInfo (spellObject.id) + local spellName, _, spellIcon = _GetSpellInfo(spellObject.id) GameCooltip:AddLine (spellName .. ": ", FormatTooltipNumber (_, spellTotal) .. " (" .. _cstr ("%.1f", spellTotal / totalDenied) .."%)") @@ -1175,7 +1175,7 @@ function atributo_heal:ToolTip_HealingDenied (instancia, numero, barra, keydown) break end - local spellName, _, spellIcon = _GetSpellInfo (spellID) + local spellName, _, spellIcon = _GetSpellInfo(spellID) GameCooltip:AddLine (spellName .. ": ", FormatTooltipNumber (_, spellTotal) .. " (" .. _cstr ("%.1f", spellTotal / totalDenied) .."%)") @@ -1261,7 +1261,7 @@ function atributo_heal:ToolTip_HealingTaken (instancia, numero, barra, keydown) _detalhes:AddTooltipHeaderStatusbar (r, g, b, barAlha) end - _table_sort (meus_curadores, function (a, b) return a[2] > b[2] end) + _table_sort (meus_curadores, function(a, b) return a[2] > b[2] end) local max = #meus_curadores if (max > 9) then max = 9 @@ -1339,7 +1339,7 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown) --add actor spells for _spellid, _skill in _pairs (ActorSkillsContainer) do - local SkillName, _, SkillIcon = _GetSpellInfo (_spellid) + local SkillName, _, SkillIcon = _GetSpellInfo(_spellid) if (_skill [skill_key] > 0 or _skill.anti_heal) then _table_insert (ActorHealingTable, { _spellid, @@ -1360,7 +1360,7 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown) if (petActor) then for _spellid, _skill in _pairs (petActor:GetActorSpells()) do if (_skill [skill_key] > 0) then - local SkillName, _, SkillIcon = _GetSpellInfo (_spellid) + local SkillName, _, SkillIcon = _GetSpellInfo(_spellid) local petName = petName:gsub ((" <.*"), "") ActorHealingTable [#ActorHealingTable+1] = { _spellid, @@ -1739,7 +1739,7 @@ function atributo_heal:MontaInfoOverHealing() local barras = info.barras1 for spellid, tabela in _pairs (tabela) do - local nome, _, icone = _GetSpellInfo (spellid) + local nome, _, icone = _GetSpellInfo(spellid) _table_insert (minhas_curas, {spellid, tabela.overheal, tabela.overheal/total*100, nome, icone}) end @@ -1751,7 +1751,7 @@ function atributo_heal:MontaInfoOverHealing() 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) + local nome, _, icone = _GetSpellInfo(_spellid) _table_insert (minhas_curas, {_spellid, _skill.overheal, _skill.overheal/total*100, nome .. " (|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r)", icone, PetActor}) end end @@ -1888,7 +1888,7 @@ function atributo_heal:MontaInfoHealingDone() end for spellid, tabela in _pairs (tabela) do - local nome, rank, icone = _GetSpellInfo (spellid) + local nome, rank, icone = _GetSpellInfo(spellid) _table_insert (minhas_curas, { spellid, tabela.total, @@ -1911,7 +1911,7 @@ function atributo_heal:MontaInfoHealingDone() 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) + local nome, _, icone = _GetSpellInfo(_spellid) _table_insert (minhas_curas, { _spellid, _skill.total, @@ -2049,7 +2049,7 @@ function atributo_heal:MontaTooltipAlvos (thisLine, index, instancia) for spellid, tabela in _pairs (container) do for target_name, amount in _pairs (tabela ["targets" .. targets_key]) do if (target_name == inimigo) then - local nome, _, icone = _GetSpellInfo (spellid) + local nome, _, icone = _GetSpellInfo(spellid) habilidades [#habilidades+1] = {nome, amount, icone} end end @@ -2065,7 +2065,7 @@ function atributo_heal:MontaTooltipAlvos (thisLine, index, instancia) for target_name, amount in _pairs (_skill ["targets" .. targets_key]) do if (target_name == inimigo) then - local nome, _, icone = _GetSpellInfo (_spellid) + local nome, _, icone = _GetSpellInfo(_spellid) habilidades [#habilidades+1] = {nome, amount, icone} end end @@ -2161,7 +2161,7 @@ function atributo_heal:MontaDetalhesHealingTaken (nome, barra) for spellid, tabela in _pairs (conteudo) do --> da foreach em cada spellid do container if (tabela.targets [actor]) then - local spell_nome, _, icone = _GetSpellInfo (spellid) + local spell_nome, _, icone = _GetSpellInfo(spellid) _table_insert (minhas_magias, {spellid, tabela.targets [actor], tabela.targets [actor] / total*100, spell_nome, icone}) end end @@ -2221,7 +2221,7 @@ function atributo_heal:MontaDetalhesHealingDone (spellid, barra) end --> icone direito superior - local _, _, icone = _GetSpellInfo (spellid) + local _, _, icone = _GetSpellInfo(spellid) info.spell_icone:SetTexture (icone) local total = self.total @@ -2278,9 +2278,9 @@ function atributo_heal:MontaDetalhesHealingDone (spellid, barra) local spell_cast = misc_actor.spell_cast and misc_actor.spell_cast [spellid] if (not spell_cast and misc_actor.spell_cast) then - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) for casted_spellid, amount in _pairs (misc_actor.spell_cast) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then spell_cast = amount .. " (|cFFFFFF00?|r)" end @@ -2702,7 +2702,7 @@ function atributo_heal:ColetarLixo (lastevent) return _detalhes:ColetarLixo (class_type, lastevent) end -atributo_heal.__add = function (tabela1, tabela2) +atributo_heal.__add = function(tabela1, tabela2) --> tempo decorrido local tempo = (tabela2.end_time or time()) - tabela2.start_time @@ -2805,7 +2805,7 @@ atributo_heal.__add = function (tabela1, tabela2) return tabela1 end -atributo_heal.__sub = function (tabela1, tabela2) +atributo_heal.__sub = function(tabela1, tabela2) --> tempo decorrido local tempo = (tabela2.end_time or time()) - tabela2.start_time diff --git a/classes/class_instance.lua b/classes/class_instance.lua index 6f472901..a5e02d9a 100644 --- a/classes/class_instance.lua +++ b/classes/class_instance.lua @@ -40,21 +40,21 @@ local segmentos = _detalhes.segmentos function _detalhes:RestartInstances() return _detalhes:ReativarInstancias() end - + function _detalhes:ReativarInstancias() - + _detalhes.opened_windows = 0 - + --> set metatables - for index = 1, #_detalhes.tabela_instancias do + for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (not _getmetatable (instancia)) then _setmetatable (_detalhes.tabela_instancias[index], _detalhes) end end - + --> create frames - for index = 1, #_detalhes.tabela_instancias do + for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (instancia:IsEnabled()) then _detalhes.opened_windows = _detalhes.opened_windows + 1 @@ -63,9 +63,9 @@ local segmentos = _detalhes.segmentos instancia.iniciada = false end end - + --> load - for index = 1, #_detalhes.tabela_instancias do + for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (instancia:IsEnabled()) then instancia.iniciada = true @@ -73,9 +73,9 @@ local segmentos = _detalhes.segmentos instancia:ChangeSkin() end end - + --> send open event - for index = 1, #_detalhes.tabela_instancias do + for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (instancia:IsEnabled()) then if (not _detalhes.initializing) then @@ -84,7 +84,7 @@ local segmentos = _detalhes.segmentos end end end - + ------------------------------------------------------------------------------------------------------------------------ --> API: call a function to all enabled instances @@ -248,7 +248,7 @@ function _detalhes:GetCustomObject (object_name) end function _detalhes:ResetAttribute() - if (self.iniciada) then + if (self.iniciada) then self:TrocaTabela (nil, 1, 1, true) else self.atributo = 1 @@ -356,7 +356,7 @@ function Details:GetActorByRank(attributeId, rankIndex) for i = 1, #actorTable do local actor = actorTable[rankIndex] return actor - end + end --]=] end @@ -384,11 +384,11 @@ end function _detalhes:LoadLocalInstanceConfig() local config = _detalhes.local_instances_config [self.meu_id] if (config) then - + if (not _detalhes.profile_save_pos) then self.posicao = Details.CopyTable (config.pos) end - + if (_type (config.attribute) ~= "number") then config.attribute = 1 end @@ -398,7 +398,7 @@ end if (_type (config.segment) ~= "number") then config.segment = 1 end - + self.ativa = config.is_open self.atributo = config.attribute self.sub_atributo = config.sub_attribute @@ -431,17 +431,17 @@ end function _detalhes:Shutdown(all) return self:DesativarInstancia(all) end - + function _detalhes:GetNumWindows() - + end --> desativando a inst�ncia ela fica em stand by e apenas hida a janela ~shutdown ~close ~fechar function _detalhes:DesativarInstancia(all) - + self.ativa = false _detalhes.opened_windows = _detalhes.opened_windows-1 - + if (not self.baseframe) then --> windown isn't initialized yet if (_detalhes.debug) then @@ -449,43 +449,43 @@ end end return end - + local lower = _detalhes:GetLowerInstanceNumber() _detalhes:GetLowerInstanceNumber() - + if (lower == self.meu_id) then --> os icones dos plugins estao hostiados nessa instancia. _detalhes.ToolBar:ReorganizeIcons (true) --n�o precisa recarregar toda a skin end - + if (_detalhes.switch.current_instancia and _detalhes.switch.current_instancia == self) then _detalhes.switch:CloseMe() end - + self:ResetaGump() - + Details.FadeHandler.Fader (self.baseframe.cabecalho.ball, 1) Details.FadeHandler.Fader (self.baseframe, 1) Details.FadeHandler.Fader (self.rowframe, 1) Details.FadeHandler.Fader (self.windowSwitchButton, 1) - + if (not all) then self:Desagrupar (-1) end if (self.modo == modo_raid) then _detalhes.RaidTables:DisableRaidMode (self) - + elseif (self.modo == modo_alone) then _detalhes.SoloTables:switch() self.atualizando = false _detalhes.solo = nil end - + if (not _detalhes.initializing) then _detalhes:SendEvent ("DETAILS_INSTANCE_CLOSE", nil, self) end - + end ------------------------------------------------------------------------------------------------------------------------ @@ -502,7 +502,7 @@ end function _detalhes:ToggleWindow (index) local window = _detalhes:GetInstance (index) - + if (window and _getmetatable (window)) then if (window:IsEnabled()) then window:ShutDown() @@ -515,33 +515,33 @@ end _detalhes.move_janela_func (instance2.baseframe, true, instance2, true) _detalhes.move_janela_func (instance2.baseframe, false, instance2, true) end - + elseif (window.meu_id == 2) then _detalhes.move_janela_func (window.baseframe, true, window, true) _detalhes.move_janela_func (window.baseframe, false, window, true) end - + end end end - + function _detalhes:CheckCoupleWindows (instance1, instance2) instance1 = instance1 or _detalhes:GetInstance (1) instance2 = instance2 or _detalhes:GetInstance (2) - + if (instance1 and instance2 and not instance1.ignore_mass_showhide and not instance1.ignore_mass_showhide) then - + instance1.baseframe:ClearAllPoints() instance2.baseframe:ClearAllPoints() - + instance1:RestoreMainWindowPosition() instance2:RestoreMainWindowPosition() - + instance1:AtualizaPontos() instance2:AtualizaPontos() - + local _R, _T, _L, _B = _detalhes.VPL (instance2, instance1), _detalhes.VPB (instance2, instance1), _detalhes.VPR (instance2, instance1), _detalhes.VPT (instance2, instance1) - + if (_R) then instance2:MakeInstanceGroup ({false, false, 1, false}) elseif (_T) then @@ -552,13 +552,13 @@ end instance2:MakeInstanceGroup ({false, 1, false, false}) end end - + end - + function _detalhes:ToggleWindows() - + local instance - + for i = 1, #_detalhes.tabela_instancias do local this_instance = _detalhes:GetInstance (i) if (this_instance and not this_instance.ignore_mass_showhide) then @@ -566,16 +566,16 @@ end break end end - + if (instance) then if (instance:IsEnabled()) then _detalhes:ShutDownAllInstances() else _detalhes:ReabrirTodasInstancias() - + local instance1 = _detalhes:GetInstance(1) local instance2 = _detalhes:GetInstance(2) - + if (instance1 and instance2) then if (not Details.disable_window_groups) then if (not instance1.ignore_mass_showhide and not instance2.ignore_mass_showhide) then @@ -586,23 +586,23 @@ end end end end - + -- reabre todas as instancias function _detalhes:ReabrirTodasInstancias (temp) - for index = math.min (#_detalhes.tabela_instancias, _detalhes.instances_amount), 1, -1 do + for index = math.min (#_detalhes.tabela_instancias, _detalhes.instances_amount), 1, -1 do local instancia = _detalhes:GetInstance (index) if (instancia and not instancia.ignore_mass_showhide) then instancia:AtivarInstancia (temp, true) end end end - + function _detalhes:LockInstance (flag) - + if (type (flag) == "boolean") then self.isLocked = not flag end - + if (self.isLocked) then self.isLocked = false if (self.baseframe) then @@ -627,15 +627,15 @@ end end end end - + function _detalhes:TravasInstancias() - for index, instancia in ipairs (_detalhes.tabela_instancias) do + for index, instancia in ipairs (_detalhes.tabela_instancias) do instancia:LockInstance (true) end end - + function _detalhes:DestravarInstancias() - for index, instancia in ipairs (_detalhes.tabela_instancias) do + for index, instancia in ipairs (_detalhes.tabela_instancias) do instancia:LockInstance (false) end end @@ -647,20 +647,20 @@ end function _detalhes:EnableInstance (temp, all) return self:AtivarInstancia (temp, all) end - + function _detalhes:AtivarInstancia (temp, all) self.ativa = true self.cached_bar_width = self.cached_bar_width or 0 self.modo = self.modo or 2 - + local lower = _detalhes:GetLowerInstanceNumber() - + if (lower == self.meu_id) then --> os icones dos plugins precisam ser hostiados nessa instancia. _detalhes.ToolBar:ReorganizeIcons (true) --> n�o precisa recarregar toda a skin end - + if (not self.iniciada) then self:RestauraJanela (self.meu_id, nil, true) --parece que esta chamando o ativar instance denovo... passei true no load_only vamos ver o resultado --tiny threat parou de funcionar depois de /reload depois dessa mudança, talvez tenha algo para carregar ainda @@ -677,12 +677,12 @@ end else Details.FadeHandler.Fader (self.baseframe.cabecalho.atributo_icon, 0) end - + Details.FadeHandler.Fader (self.baseframe.cabecalho.ball, 0) Details.FadeHandler.Fader (self.baseframe, 0) Details.FadeHandler.Fader (self.rowframe, 0) Details.FadeHandler.Fader (self.windowSwitchButton, 0) - + self:SetMenuAlpha() self.baseframe.cabecalho.fechar:Enable() self:ChangeIcon() @@ -690,12 +690,12 @@ end if (not temp) then if (self.modo == modo_raid) then _detalhes.RaidTables:EnableRaidMode(self) - + elseif (self.modo == modo_alone) then self:SoloMode (true) end end - + if (_detalhes.LastShowCommand and _detalhes.LastShowCommand+10 > GetTime()) then self:ToolbarMenuButtons() self:ToolbarSide() @@ -709,16 +709,16 @@ end if (not all) then self:Desagrupar (-1) end - + self:CheckFor_EnabledTrashSuppression() - + if (not temp and not _detalhes.initializing) then _detalhes:SendEvent ("DETAILS_INSTANCE_OPEN", nil, self) end if (self.modo == modo_raid) then _detalhes.RaidTables:EnableRaidMode(self) - + elseif (self.modo == modo_alone) then self:SoloMode (true) end @@ -744,7 +744,7 @@ end function _detalhes:DeleteInstance (id) local instance = _detalhes:GetInstance (id) - + if (not instance) then return false end @@ -766,7 +766,7 @@ end end end end - + --> re align snaps for higher instances for i = id+1, #_detalhes.tabela_instancias do local this_instance = _detalhes:GetInstance (i) @@ -781,7 +781,7 @@ end end end end - + table.remove (_detalhes.tabela_instancias, id) end @@ -796,14 +796,14 @@ end function _detalhes:CriarInstancia (_, id) if (id and _type (id) == "boolean") then - + if (#_detalhes.tabela_instancias >= _detalhes.instances_amount) then _detalhes:Msg (Loc ["STRING_INSTANCE_LIMIT"]) return false end - + local next_id = #_detalhes.tabela_instancias+1 - + if (_detalhes.unused_instances [next_id]) then local new_instance = _detalhes.unused_instances [next_id] _detalhes.tabela_instancias [next_id] = new_instance @@ -811,9 +811,9 @@ end new_instance:AtivarInstancia() return new_instance end - + local new_instance = _detalhes:NovaInstancia (next_id) - + if (_detalhes.standard_skin) then for key, value in pairs (_detalhes.standard_skin) do if (type (value) == "table") then @@ -823,7 +823,7 @@ end end end new_instance:ChangeSkin() - + else --> se n�o tiver um padr�o, criar de outra inst�ncia j� aberta. local copy_from @@ -834,9 +834,9 @@ end break end end - + if (copy_from) then - for key, value in pairs (copy_from) do + for key, value in pairs (copy_from) do if (_detalhes.instance_defaults [key] ~= nil) then if (type (value) == "table") then new_instance [key] = Details.CopyTable (value) @@ -848,9 +848,9 @@ end new_instance:ChangeSkin() end end - + return new_instance - + elseif (id) then local instancia = _detalhes.tabela_instancias [id] if (instancia and not instancia:IsAtiva()) then @@ -859,7 +859,7 @@ end return instancia end end - + --> antes de criar uma nova, ver se n�o h� alguma para reativar for index, instancia in _ipairs (_detalhes.tabela_instancias) do if (not instancia:IsAtiva()) then @@ -867,34 +867,34 @@ end return instancia end end - + if (#_detalhes.tabela_instancias >= _detalhes.instances_amount) then return _detalhes:Msg (Loc ["STRING_INSTANCE_LIMIT"]) end - + --> verifica se n�o tem uma janela na pool de janelas fechadas local next_id = #_detalhes.tabela_instancias+1 - + if (_detalhes.unused_instances [next_id]) then local new_instance = _detalhes.unused_instances [next_id] _detalhes.tabela_instancias [next_id] = new_instance _detalhes.unused_instances [next_id] = nil new_instance:AtivarInstancia() - + _detalhes:GetLowerInstanceNumber() - + return new_instance end - + --> cria uma nova janela local new_instance = _detalhes:NovaInstancia (#_detalhes.tabela_instancias+1) - + if (not _detalhes.initializing) then _detalhes:SendEvent ("DETAILS_INSTANCE_OPEN", nil, new_instance) end - + _detalhes:GetLowerInstanceNumber() - + return new_instance end ------------------------------------------------------------------------------------------------------------------------ @@ -902,7 +902,7 @@ end --> self � a inst�ncia que esta sendo movida.. instancia � a que esta parada function _detalhes:EstaAgrupada (esta_instancia, lado) --> lado //// 1 = encostou na esquerda // 2 = escostou emaixo // 3 = encostou na direita // 4 = encostou em cima --local meu_snap = self.snap --> pegou a tabela com {side, side, side, side} - + if (esta_instancia.snap [lado]) then return true --> ha possui uma janela grudapa neste lado elseif (lado == 1) then @@ -940,7 +940,7 @@ function _detalhes:BaseFrameSnap() for _, instance in _ipairs (group) do instance:SetWindowScale (scale) end - + local my_baseframe = self.baseframe for lado, snap_to in _pairs (self.snap) do local instancia_alvo = _detalhes.tabela_instancias [snap_to] @@ -949,17 +949,17 @@ function _detalhes:BaseFrameSnap() if (instancia_alvo.ativa and instancia_alvo.baseframe) then if (lado == 1) then --> a esquerda instancia_alvo.baseframe:SetPoint ("TOPRIGHT", my_baseframe, "TOPLEFT") - + elseif (lado == 2) then --> em baixo local statusbar_y_mod = 0 if (not self.show_statusbar) then statusbar_y_mod = 14 end instancia_alvo.baseframe:SetPoint ("TOPLEFT", my_baseframe, "BOTTOMLEFT", 0, -34 + statusbar_y_mod) - + elseif (lado == 3) then --> a direita instancia_alvo.baseframe:SetPoint ("BOTTOMLEFT", my_baseframe, "BOTTOMRIGHT") - + elseif (lado == 4) then --> em cima local statusbar_y_mod = 0 if (not instancia_alvo.show_statusbar) then @@ -974,7 +974,7 @@ function _detalhes:BaseFrameSnap() --[ --> aqui precisa de um efeito reverso - local reverso = self.meu_id - 2 --> se existir + local reverso = self.meu_id - 2 --> se existir if (reverso > 0) then --> se tiver uma inst�ncia l� tr�s --> aqui faz o efeito reverso: local inicio_retro = self.meu_id - 1 @@ -982,7 +982,7 @@ function _detalhes:BaseFrameSnap() local instancia = _detalhes.tabela_instancias [meu_id] for lado, snap_to in _pairs (instancia.snap) do if (snap_to < instancia.meu_id and snap_to ~= self.meu_id) then --> se o lado que esta grudado for menor que o meu id... EX instnacia #2 grudada na #1 - + --> ent�o tenho que pegar a inst�ncia do snap local instancia_alvo = _detalhes.tabela_instancias [snap_to] @@ -999,31 +999,31 @@ function _detalhes:BaseFrameSnap() --> fazer os setpoints if (instancia_alvo.ativa and instancia_alvo.baseframe) then - + if (lado_reverso == 1) then --> a esquerda instancia_alvo.baseframe:SetPoint ("BOTTOMLEFT", instancia.baseframe, "BOTTOMRIGHT") - + elseif (lado_reverso == 2) then --> em baixo - + local statusbar_y_mod = 0 if (not instancia_alvo.show_statusbar) then statusbar_y_mod = -14 end - + instancia_alvo.baseframe:SetPoint ("BOTTOMLEFT", instancia.baseframe, "TOPLEFT", 0, 34 + statusbar_y_mod) -- + (statusbar_y_mod*-1) - + elseif (lado_reverso == 3) then --> a direita instancia_alvo.baseframe:SetPoint ("TOPRIGHT", instancia.baseframe, "TOPLEFT") - + elseif (lado_reverso == 4) then --> em cima - + local statusbar_y_mod = 0 if (not instancia.show_statusbar) then statusbar_y_mod = 14 end - + instancia_alvo.baseframe:SetPoint ("TOPLEFT", instancia.baseframe, "BOTTOMLEFT", 0, -34 + statusbar_y_mod) - + end end end @@ -1031,36 +1031,36 @@ function _detalhes:BaseFrameSnap() end end --]] - + for meu_id, instancia in _ipairs (_detalhes.tabela_instancias) do if (meu_id > self.meu_id) then for lado, snap_to in _pairs (instancia.snap) do if (snap_to > instancia.meu_id and snap_to ~= self.meu_id) then local instancia_alvo = _detalhes.tabela_instancias [snap_to] - + if (instancia_alvo.ativa and instancia_alvo.baseframe) then if (lado == 1) then --> a esquerda instancia_alvo.baseframe:SetPoint ("TOPRIGHT", instancia.baseframe, "TOPLEFT") - + elseif (lado == 2) then --> em baixo local statusbar_y_mod = 0 if (not instancia.show_statusbar) then statusbar_y_mod = 14 end instancia_alvo.baseframe:SetPoint ("TOPLEFT", instancia.baseframe, "BOTTOMLEFT", 0, -34 + statusbar_y_mod) - + elseif (lado == 3) then --> a direita instancia_alvo.baseframe:SetPoint ("BOTTOMLEFT", instancia.baseframe, "BOTTOMRIGHT") - + elseif (lado == 4) then --> em cima - + local statusbar_y_mod = 0 if (not instancia_alvo.show_statusbar) then statusbar_y_mod = -14 end - + instancia_alvo.baseframe:SetPoint ("BOTTOMLEFT", instancia.baseframe, "TOPLEFT", 0, 34 + statusbar_y_mod) - + end end end @@ -1072,104 +1072,104 @@ end function _detalhes:agrupar_janelas (lados) local instancia = self - + for lado, esta_instancia in _pairs (lados) do if (esta_instancia) then instancia.baseframe:ClearAllPoints() esta_instancia = _detalhes.tabela_instancias [esta_instancia] - + instancia:SetWindowScale (esta_instancia.window_scale) - + if (lado == 3) then --> direita --> mover frame instancia.baseframe:SetPoint ("TOPRIGHT", esta_instancia.baseframe, "TOPLEFT") instancia.baseframe:SetPoint ("RIGHT", esta_instancia.baseframe, "LEFT") instancia.baseframe:SetPoint ("BOTTOMRIGHT", esta_instancia.baseframe, "BOTTOMLEFT") - + local _, height = esta_instancia:GetSize() instancia:SetSize (nil, height) - + --> salva o snap self.snap [3] = esta_instancia.meu_id esta_instancia.snap [1] = self.meu_id - + elseif (lado == 4) then --> cima --> mover frame - + local statusbar_y_mod = 0 if (not esta_instancia.show_statusbar) then statusbar_y_mod = 14 end - + instancia.baseframe:SetPoint ("TOPLEFT", esta_instancia.baseframe, "BOTTOMLEFT", 0, -34 + statusbar_y_mod) instancia.baseframe:SetPoint ("TOP", esta_instancia.baseframe, "BOTTOM", 0, -34 + statusbar_y_mod) instancia.baseframe:SetPoint ("TOPRIGHT", esta_instancia.baseframe, "BOTTOMRIGHT", 0, -34 + statusbar_y_mod) - + local _, height = esta_instancia:GetSize() instancia:SetSize (nil, height) - + --> salva o snap self.snap [4] = esta_instancia.meu_id esta_instancia.snap [2] = self.meu_id elseif (lado == 1) then --> esquerda --> mover frame - + instancia.baseframe:SetPoint ("TOPLEFT", esta_instancia.baseframe, "TOPRIGHT") instancia.baseframe:SetPoint ("LEFT", esta_instancia.baseframe, "RIGHT") instancia.baseframe:SetPoint ("BOTTOMLEFT", esta_instancia.baseframe, "BOTTOMRIGHT") - + local _, height = esta_instancia:GetSize() instancia:SetSize (nil, height) - + --> salva o snap self.snap [1] = esta_instancia.meu_id esta_instancia.snap [3] = self.meu_id - + elseif (lado == 2) then --> baixo --> mover frame - + local statusbar_y_mod = 0 if (not instancia.show_statusbar) then statusbar_y_mod = -14 end - + instancia.baseframe:SetPoint ("BOTTOMLEFT", esta_instancia.baseframe, "TOPLEFT", 0, 34 + statusbar_y_mod) instancia.baseframe:SetPoint ("BOTTOM", esta_instancia.baseframe, "TOP", 0, 34 + statusbar_y_mod) instancia.baseframe:SetPoint ("BOTTOMRIGHT", esta_instancia.baseframe, "TOPRIGHT", 0, 34 + statusbar_y_mod) - + local _, height = esta_instancia:GetSize() instancia:SetSize (nil, height) - + --> salva o snap self.snap [2] = esta_instancia.meu_id esta_instancia.snap [4] = self.meu_id end - + if (not esta_instancia.ativa) then esta_instancia:AtivarInstancia() end - + end end - + if (not _detalhes.disable_lock_ungroup_buttons) then instancia.break_snap_button:SetAlpha (1) end - + if (_detalhes.tutorial.unlock_button < 4) then - + _detalhes.temp_table1.IconSize = 32 _detalhes.temp_table1.TextHeightMod = -6 _detalhes.popup:ShowMe (instancia.break_snap_button, "tooltip", "Interface\\Buttons\\LockButton-Unlocked-Up", Loc ["STRING_UNLOCK"], 150, _detalhes.temp_table1) - + --UIFrameFlash (instancia.break_snap_button, .5, .5, 5, false, 0, 0) _detalhes.tutorial.unlock_button = _detalhes.tutorial.unlock_button + 1 end - + _detalhes:DelayOptionsRefresh() - + end _detalhes.MakeInstanceGroup = _detalhes.agrupar_janelas @@ -1189,26 +1189,26 @@ function _detalhes:Desagrupar (instancia, lado, lado2) lado = instancia instancia = self end - + if (_type (instancia) == "number") then --> significa que passou o n�mero da inst�ncia instancia = _detalhes.tabela_instancias [instancia] end - + _detalhes:DelayOptionsRefresh (nil, true) - + if (not lado) then return end - + if (lado < 0) then --> clicou no bot�o para desagrupar tudo local ID = instancia.meu_id - - for id, esta_instancia in _ipairs (_detalhes.tabela_instancias) do + + for id, esta_instancia in _ipairs (_detalhes.tabela_instancias) do for index, iid in _pairs (esta_instancia.snap) do -- index = 1 left , 3 right, 2 bottom, 4 top if (iid and (iid == ID or id == ID)) then -- iid = instancia.meu_id - + esta_instancia.snap [index] = nil - + if (instancia.verticalSnap or esta_instancia.verticalSnap) then if (not esta_instancia.snap [2] and not esta_instancia.snap [4]) then esta_instancia.verticalSnap = false @@ -1220,33 +1220,33 @@ function _detalhes:Desagrupar (instancia, lado, lado2) esta_instancia.verticalSnap = false end end - + if (index == 2) then -- index � o codigo do snap --esta_instancia.baseframe.rodape.StatusBarLeftAnchor:SetPoint ("left", esta_instancia.baseframe.rodape.top_bg, "left", 5, 58) --esta_instancia.baseframe.rodape.StatusBarCenterAnchor:SetPoint ("center", esta_instancia.baseframe.rodape.top_bg, "center", 0, 58) --esta_instancia.baseframe.rodape.esquerdo:SetTexture ("Interface\\AddOns\\Details\\images\\bar_down_left") --esta_instancia.baseframe.rodape.esquerdo.have_snap = nil end - + end end end - + instancia.break_snap_button:SetAlpha (0) - + instancia.verticalSnap = false instancia.horizontalSnap = false return end - + local esta_instancia = _detalhes.tabela_instancias [instancia.snap[lado]] - + if (not esta_instancia) then return end - + instancia.snap [lado] = nil - + if (lado == 1) then esta_instancia.snap [3] = nil elseif (lado == 2) then @@ -1258,21 +1258,21 @@ function _detalhes:Desagrupar (instancia, lado, lado2) end instancia.break_snap_button:SetAlpha (0) - - + + if (instancia.iniciada) then instancia:SaveMainWindowPosition() instancia:RestoreMainWindowPosition() end - + if (esta_instancia.iniciada) then esta_instancia:SaveMainWindowPosition() - esta_instancia:RestoreMainWindowPosition() + esta_instancia:RestoreMainWindowPosition() end end function _detalhes:SnapTextures (remove) - for id, esta_instancia in _ipairs (_detalhes.tabela_instancias) do + for id, esta_instancia in _ipairs (_detalhes.tabela_instancias) do if (esta_instancia:IsAtiva()) then if (esta_instancia.baseframe.rodape.esquerdo.have_snap) then if (remove) then @@ -1288,7 +1288,7 @@ end --> cria uma janela para uma nova inst�ncia --> search key: ~new ~nova function _detalhes:CreateDisabledInstance (ID, skin_table) - + --> first check if we can recycle a old instance if (_detalhes.unused_instances [ID]) then local new_instance = _detalhes.unused_instances [ID] @@ -1296,16 +1296,16 @@ end _detalhes.unused_instances [ID] = nil --> replace the values on recycled instance new_instance:ResetInstanceConfig() - + --> copy values from a previous skin saved if (skin_table) then --> copy from skin_table to new_instance _detalhes.table.copy (new_instance, skin_table) end - + return new_instance end - + --> must create a new one local new_instance = { --> instance id @@ -1316,8 +1316,8 @@ end rolagem = false, --barra de rolagem n�o esta sendo mostrada largura_scroll = 26, bar_mod = 0, - bgdisplay_loc = 0, - + bgdisplay_loc = 0, + --> displaying row info rows_created = 0, rows_showing = 0, @@ -1328,21 +1328,21 @@ end ["normal"] = {x = 1, y = 2, w = 300, h = 200}, ["solo"] = {x = 1, y = 2, w = 300, h = 200} }, - + --> save information about window snaps snap = {}, - + --> current state starts as normal mostrando = "normal", --> menu consolidated consolidate = false, --deprecated icons = {true, true, true, true}, - + --> status bar stuff StatusBar = {options = {}}, --> more stuff - atributo = 1, --> dano + atributo = 1, --> dano sub_atributo = 1, --> damage done sub_atributo_last = {1, 1, 1, 1, 1}, segmento = 0, --> combate atual @@ -1350,35 +1350,35 @@ end last_modo = modo_grupo, LastModo = modo_grupo, } - + _setmetatable (new_instance, _detalhes) _detalhes.tabela_instancias [#_detalhes.tabela_instancias+1] = new_instance --> fill the empty instance with default values new_instance:ResetInstanceConfig() - + --> copy values from a previous skin saved if (skin_table) then --> copy from skin_table to new_instance _detalhes.table.copy (new_instance, skin_table) end - + --> setup default wallpaper new_instance.wallpaper.texture = "Interface\\AddOns\\Details\\images\\background" - + --> finish return new_instance end - + function _detalhes:NovaInstancia (ID) local new_instance = {} _setmetatable (new_instance, _detalhes) _detalhes.tabela_instancias [#_detalhes.tabela_instancias+1] = new_instance - + --> instance number new_instance.meu_id = ID - + --> setup all config new_instance:ResetInstanceConfig() --> setup default wallpaper @@ -1392,21 +1392,21 @@ end new_instance.bar_mod = 0 new_instance.bgdisplay_loc = 0 new_instance.cached_bar_width = 0 - + --> displaying row info new_instance.rows_created = 0 new_instance.rows_showing = 0 new_instance.rows_max = 50 new_instance.rows_fit_in_window = nil - + --> saved pos for normal mode and lone wolf mode new_instance.posicao = { ["normal"] = {x = 1, y = 2, w = 300, h = 200}, ["solo"] = {x = 1, y = 2, w = 300, h = 200} - } + } --> save information about window snaps new_instance.snap = {} - + --> current state starts as normal new_instance.mostrando = "normal" --> menu consolidated @@ -1414,7 +1414,7 @@ end new_instance.icons = {true, true, true, true} --> create window frames - + local _baseframe, _bgframe, _bgframe_display, _scrollframe = gump:CriaJanelaPrincipal (ID, new_instance, true) new_instance.baseframe = _baseframe new_instance.bgframe = _bgframe @@ -1430,44 +1430,44 @@ end local clock = _detalhes.StatusBar:CreateStatusBarChildForInstance (new_instance, "DETAILS_STATUSBAR_PLUGIN_CLOCK") _detalhes.StatusBar:SetCenterPlugin (new_instance, clock) - + local segment = _detalhes.StatusBar:CreateStatusBarChildForInstance (new_instance, "DETAILS_STATUSBAR_PLUGIN_PSEGMENT") _detalhes.StatusBar:SetLeftPlugin (new_instance, segment) - + local dps = _detalhes.StatusBar:CreateStatusBarChildForInstance (new_instance, "DETAILS_STATUSBAR_PLUGIN_PDPS") _detalhes.StatusBar:SetRightPlugin (new_instance, dps) --> internal stuff new_instance.alturaAntiga = _baseframe:GetHeight() - new_instance.atributo = 1 --> dano + new_instance.atributo = 1 --> dano new_instance.sub_atributo = 1 --> damage done new_instance.sub_atributo_last = {1, 1, 1, 1, 1} new_instance.segmento = -1 --> combate atual new_instance.modo = modo_grupo new_instance.last_modo = modo_grupo new_instance.LastModo = modo_grupo - + --> change the attribute _detalhes:TrocaTabela (new_instance, 0, 1, 1) - + --> internal stuff new_instance.row_height = new_instance.row_info.height + new_instance.row_info.space.between - + new_instance.oldwith = new_instance.baseframe:GetWidth() new_instance.iniciada = true new_instance:SaveMainWindowPosition() new_instance:ReajustaGump() - + new_instance.rows_fit_in_window = _math_floor (new_instance.posicao[new_instance.mostrando].h / new_instance.row_height) - + --> all done new_instance:AtivarInstancia() - + new_instance:ShowSideBars() new_instance.skin = "no skin" new_instance:ChangeSkin (_detalhes.default_skin_to_use) - + --> apply standard skin if have one saved --[[ if (_detalhes.standard_skin) then @@ -1475,10 +1475,10 @@ end local style = _detalhes.standard_skin local instance = new_instance local skin = style.skin - + instance.skin = "" instance:ChangeSkin (skin) - + --> overwrite all instance parameters with saved ones for key, value in pairs (style) do if (key ~= "skin") then @@ -1492,10 +1492,10 @@ end end --]] - + --> apply all changed attributes --new_instance:ChangeSkin() - + return new_instance end ------------------------------------------------------------------------------------------------------------------------ @@ -1504,8 +1504,8 @@ end --print ("fixing...", instance.meu_id) --instance:ToolbarMenuButtons() end - - + + --> ao reiniciar o addon esta fun��o � rodada para recriar a janela da inst�ncia --> search key: ~restaura ~inicio ~start @@ -1538,22 +1538,22 @@ function _detalhes:RestauraJanela(index, temp, load_only) self.cached_bar_width = self.cached_bar_width or 0 self.row_height = self.row_info.height + self.row_info.space.between self.rows_fit_in_window = _math_floor (self.posicao[self.mostrando].h / self.row_height) - + --> create frames local isLocked = self.isLocked local _baseframe, _bgframe, _bgframe_display, _scrollframe = gump:CriaJanelaPrincipal (self.meu_id, self) self.baseframe = _baseframe self.bgframe = _bgframe self.bgdisplay = _bgframe_display - self.scroll = _scrollframe + self.scroll = _scrollframe _baseframe:EnableMouseWheel (false) self.alturaAntiga = _baseframe:GetHeight() - + --self.isLocked = isLocked --window isn't locked when just created it --> change the attribute _detalhes:TrocaTabela (self, self.segmento, self.atributo, self.sub_atributo, true) --> passando true no 5� valor para a fun��o ignorar a checagem de valores iguais - + --> set wallpaper if (self.wallpaper.enabled) then self:InstanceWallpaper (true) @@ -1561,7 +1561,7 @@ function _detalhes:RestauraJanela(index, temp, load_only) --> set the color of this instance window self:InstanceColor (self.color) - + --> scrollbar self:EsconderScrollBar (true) @@ -1630,35 +1630,35 @@ function _detalhes:RestauraJanela(index, temp, load_only) self:RestoreMainWindowPosition() self:ReajustaGump() --self:SaveMainWindowPosition() - + if (not load_only) then self.iniciada = true self:AtivarInstancia (temp) self:ChangeSkin() end - + --> all done return end function _detalhes:SwitchBack() local prev_switch = self.auto_switch_to_old - + if (prev_switch) then if (self.modo ~= prev_switch [1]) then _detalhes:AlteraModo (self, prev_switch [1]) end - + if (self.modo == _detalhes._detalhes_props["MODO_RAID"]) then _detalhes.RaidTables:switch (nil, prev_switch [5], self) - + elseif (self.modo == _detalhes._detalhes_props["MODO_ALONE"]) then _detalhes.SoloTables:switch (nil, prev_switch [6]) - + else _detalhes:TrocaTabela (self, prev_switch [4], prev_switch [2], prev_switch [3]) end - + self.auto_switch_to_old = nil end end @@ -1672,7 +1672,7 @@ function _detalhes:SwitchTo (switch_table, nosave) local plugin_global_name, can_switch = switch_table[2], true --plugin global name - for _, instance in ipairs (_detalhes.tabela_instancias) do + for _, instance in ipairs (_detalhes.tabela_instancias) do if (instance ~= self and instance:IsEnabled() and instance.baseframe and instance.modo == modo_raid) then if (instance.current_raid_plugin == plugin_global_name) then can_switch = false @@ -1680,7 +1680,7 @@ function _detalhes:SwitchTo (switch_table, nosave) end end end - + if (can_switch) then _detalhes.RaidTables:EnableRaidMode (self, switch_table [2]) else @@ -1702,29 +1702,29 @@ function _detalhes:CheckSwitchOnCombatEnd (nowipe, warning) local old_attribute, old_sub_atribute = self:GetDisplay() self:SwitchBack() - + local role = _UnitGroupRolesAssigned ("player") - + local got_switch = false - + if (role == "DAMAGER" and self.switch_damager) then self:SwitchTo (self.switch_damager) got_switch = true - + elseif (role == "HEALER" and self.switch_healer) then self:SwitchTo (self.switch_healer) got_switch = true - + elseif (role == "TANK" and self.switch_tank) then self:SwitchTo (self.switch_tank, true) got_switch = true - + elseif (role == "NONE" and _detalhes.last_assigned_role ~= "NONE") then self:SwitchBack() got_switch = true - + end - + if (warning and got_switch) then local current_attribute, current_sub_atribute = self:GetDisplay() if (current_attribute ~= old_attribute or current_sub_atribute ~= old_sub_atribute) then @@ -1732,18 +1732,18 @@ function _detalhes:CheckSwitchOnCombatEnd (nowipe, warning) self:InstanceAlert (string.format (Loc ["STRING_SWITCH_WARNING"], attribute_name), {[[Interface\CHARACTERFRAME\UI-StateIcon]], 18, 18, false, 0.5, 1, 0, 0.5}, 4) end end - + if (self.switch_all_roles_after_wipe and not nowipe) then if (_detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.instance_type == "raid" and not _detalhes.tabela_vigente.is_boss.killed and _detalhes.tabela_vigente.is_boss.name) then self:SwitchBack() self:SwitchTo (self.switch_all_roles_after_wipe) end end - + end function _detalhes:CheckSwitchOnLogon (warning) - for index, instancia in ipairs (_detalhes.tabela_instancias) do + for index, instancia in ipairs (_detalhes.tabela_instancias) do if (instancia.ativa) then instancia:CheckSwitchOnCombatEnd (true, warning) end @@ -1751,7 +1751,7 @@ function _detalhes:CheckSwitchOnLogon (warning) end function _detalhes:CheckSegmentForSwitchOnCombatStart() - + end function _detalhes:CheckSwitchOnCombatStart (check_segment) @@ -1759,34 +1759,34 @@ function _detalhes:CheckSwitchOnCombatStart (check_segment) self:SwitchBack() local all_roles = self.switch_all_roles_in_combat - + local role = _UnitGroupRolesAssigned ("player") local got_switch = false - + if (role == "DAMAGER" and self.switch_damager_in_combat) then self:SwitchTo (self.switch_damager_in_combat) got_switch = true - + elseif (role == "HEALER" and self.switch_healer_in_combat) then self:SwitchTo (self.switch_healer_in_combat) got_switch = true - + elseif (role == "TANK" and self.switch_tank_in_combat) then self:SwitchTo (self.switch_tank_in_combat) got_switch = true - + elseif (self.switch_all_roles_in_combat) then self:SwitchTo (self.switch_all_roles_in_combat) got_switch = true - + end - + if (check_segment and got_switch) then if (self:GetSegment() ~= 0) then self:TrocaTabela (0) end end - + end local createStatusbarOptions = function(optionsTable) @@ -1873,7 +1873,7 @@ function _detalhes:ApplySavedSkin (style) if (not style.version or _detalhes.preset_version > style.version) then return _detalhes:Msg (Loc ["STRING_OPTIONS_PRESETTOOLD"]) end - + --> set skin preset local skin = style.skin self.skin = "" @@ -1889,11 +1889,11 @@ function _detalhes:ApplySavedSkin (style) end end end - + --> check for new keys inside tables - for key, value in pairs (_detalhes.instance_defaults) do + for key, value in pairs (_detalhes.instance_defaults) do if (type (value) == "table") then - for key2, value2 in pairs (value) do + for key2, value2 in pairs (value) do if (self [key] [key2] == nil) then if (type (value2) == "table") then self [key] [key2] = Details.CopyTable (_detalhes.instance_defaults [key] [key2]) @@ -1903,15 +1903,15 @@ function _detalhes:ApplySavedSkin (style) end end end - end - + end + self.StatusBarSaved = style.StatusBarSaved and Details.CopyTable (style.StatusBarSaved) or {options = {}} self.StatusBar.options = self.StatusBarSaved.options _detalhes.StatusBar:UpdateChilds (self) - + --> apply all changed attributes self:ChangeSkin() - + --export size and positioning if (_detalhes.profile_save_pos) then self.posicao = style.posicao @@ -1919,7 +1919,7 @@ function _detalhes:ApplySavedSkin (style) else self.posicao = Details.CopyTable (self.posicao) end - + end ------------------------------------------------------------------------------------------------------------------------ @@ -1966,7 +1966,7 @@ function _detalhes:SetBackgroundAlpha (alpha) if (not alpha) then alpha = self.bg_alpha end - + self.bgdisplay:SetBackdropColor (self.bg_r, self.bg_g, self.bg_b, alpha) self.baseframe:SetBackdropColor (self.bg_r, self.bg_g, self.bg_b, alpha) self.bg_alpha = alpha @@ -1985,7 +1985,7 @@ function _detalhes:GetPositionOnScreen() if (not xOfs) then return end - -- credits to ckknight (http://www.curseforge.com/profiles/ckknight/) + -- credits to ckknight (http://www.curseforge.com/profiles/ckknight/) local _scale = self.baseframe:GetEffectiveScale() local _UIscale = UIParent:GetScale() xOfs = xOfs*_scale - GetScreenWidth()*_UIscale/2 @@ -2002,13 +2002,13 @@ function _detalhes:Resize (w, h) if (w) then self.baseframe:SetWidth (w) end - + if (h) then self.baseframe:SetHeight (h) end - + self:SaveMainWindowPosition() - + return true end @@ -2022,7 +2022,7 @@ function _detalhes:ToggleMaxSize() self.original_width, self.original_height = original_width, original_height self.is_in_max_size = true self:SetSize (original_width, 450) - + end end @@ -2084,15 +2084,15 @@ function Details:Freeze (instancia) instancia:ResetaGump() Details.FadeHandler.Fader (instancia, "in", nil, "barras") end - + instancia:InstanceMsg (Loc ["STRING_FREEZE"], [[Interface\CHARACTERFRAME\Disconnect-Icon]], "silver") - + --instancia.freeze_icon:Show() --instancia.freeze_texto:Show() - + local width = instancia:GetSize() instancia.freeze_texto:SetWidth (width-64) - + instancia.freezed = true end @@ -2103,11 +2103,11 @@ function _detalhes:UnFreeze (instancia) end self:InstanceMsg (false) - + --instancia.freeze_icon:Hide() --instancia.freeze_texto:Hide() instancia.freezed = false - + if (not _detalhes.initializing) then --instancia:RestoreMainWindowPosition() instancia:ReajustaGump() @@ -2149,11 +2149,11 @@ function _detalhes:AtualizaSegmentos_AfterCombat (instancia, historico) instancia:ResetaGump() instancia:RefreshMainWindow (true) _detalhes:AtualizarJanela (instancia) - + elseif (segmento < _detalhes.segments_amount and segmento > 0) then instancia.showing = historico.tabelas [segmento] --print ("==> Changing the Segment now! - classe_instancia.lua 1952") - + Details.FadeHandler.Fader (instancia, _fadeType, _fadeSpeed, "barras") --"in", nil instancia.showing[instancia.atributo].need_refresh = true instancia.v_barras = true @@ -2161,7 +2161,7 @@ function _detalhes:AtualizaSegmentos_AfterCombat (instancia, historico) instancia:RefreshMainWindow (true) _detalhes:AtualizarJanela (instancia) end - + end local function ValidateAttribute (atributo, sub_atributo) @@ -2187,7 +2187,7 @@ local function ValidateAttribute (atributo, sub_atributo) else return false end - + return true end @@ -2262,23 +2262,23 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini local current_segmento = instancia.segmento local current_atributo = instancia.atributo local current_sub_atributo = instancia.sub_atributo - + local atributo_changed = false - + --> verifica se os valores passados s�o v�lidos - + if (not segmento) then segmento = instancia.segmento elseif (_type (segmento) ~= "number") then segmento = instancia.segmento end - + if (not atributo) then atributo = instancia.atributo elseif (_type (atributo) ~= "number") then atributo = instancia.atributo end - + if (not sub_atributo) then if (atributo == current_atributo) then sub_atributo = instancia.sub_atributo @@ -2288,7 +2288,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini elseif (_type (sub_atributo) ~= "number") then sub_atributo = instancia.sub_atributo end - + --> j� esta mostrando isso que esta pedindo if (not iniciando_instancia and segmento == current_segmento and atributo == current_atributo and sub_atributo == current_sub_atributo and not _detalhes.initializing) then return @@ -2299,7 +2299,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini atributo = 1 _detalhes:Msg ("invalid attribute, switching to damage done.") end - + --> Muda o segmento caso necess�rio if (segmento ~= current_segmento or _detalhes.initializing or iniciando_instancia) then @@ -2311,9 +2311,9 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini instancia.freezed = false end end - + instancia.segmento = segmento - + if (segmento == -1) then --> overall instancia.showing = _detalhes.tabela_overall elseif (segmento == 0) then --> combate atual @@ -2322,17 +2322,17 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini else --> alguma tabela do hist�rico instancia.showing = _detalhes.tabela_historico.tabelas [segmento] end - + if (update_coolTip) then _detalhes.popup:Select (1, segmento+2) end - + if (instancia.showing and instancia.showing.contra) then --print ("DEBUG: contra", instancia.showing.contra) end _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGESEGMENT", nil, instancia, segmento) - + if (_detalhes.instances_segments_locked and not iniciando_instancia) then for _, instance in ipairs (_detalhes.tabela_instancias) do if (instance.meu_id ~= instancia.meu_id and instance.ativa and not instance._postponing_switch and not instance._postponing_current) then @@ -2346,9 +2346,9 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini instance.freezed = false end end - + instance.segmento = segmento - + if (segmento == -1) then --> overall instance.showing = _detalhes.tabela_overall elseif (segmento == 0) then --> combate atual @@ -2356,41 +2356,41 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini else --> alguma tabela do hist�rico instance.showing = _detalhes.tabela_historico.tabelas [segmento] end - + if (not instance.showing) then if (not iniciando_instancia) then instance:Freeze() end return end - + instance.v_barras = true instance.showing [atributo].need_refresh = true - + if (not _detalhes.initializing and not iniciando_instancia) then instance:ResetaGump() instance:RefreshMainWindow (true) end - + _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGESEGMENT", nil, instance, segmento) end end end end end - + end --> Muda o atributo caso necess�rio if (atributo == 5) then - if (#_detalhes.custom < 1) then + if (#_detalhes.custom < 1) then atributo = 1 sub_atributo = 1 end end - + if (atributo ~= current_atributo or _detalhes.initializing or iniciando_instancia or (instancia.modo == modo_alone or instancia.modo == modo_raid)) then - + if (instancia.modo == modo_alone and not (_detalhes.initializing or iniciando_instancia)) then if (_detalhes.SoloTables.Mode == #_detalhes.SoloTables.Plugins) then _detalhes.popup:Select (1, 1) @@ -2400,32 +2400,32 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini end end return _detalhes.SoloTables.switch (nil, nil, -1) - + elseif ( (instancia.modo == modo_raid) and not (_detalhes.initializing or iniciando_instancia) ) then --> raid return --nao faz nada quando clicar no bot�o end - + atributo_changed = true instancia.atributo = atributo instancia.sub_atributo = instancia.sub_atributo_last [atributo] --> troca icone instancia:ChangeIcon() - + if (update_coolTip) then _detalhes.popup:Select (1, atributo) _detalhes.popup:Select (2, instancia.sub_atributo, atributo) end - + if (_detalhes.cloud_process) then - + if (_detalhes.debug) then _detalhes:Msg ("(debug) instancia #"..instancia.meu_id.." found cloud process.") end - + local atributo = instancia.atributo local time_left = (_detalhes.last_data_requested+7) - _detalhes._tempo - + if (atributo == 1 and _detalhes.in_combat and not _detalhes:CaptureGet ("damage") and _detalhes.host_by) then if (_detalhes.debug) then _detalhes:Msg ("(debug) instancia need damage cloud.") @@ -2445,7 +2445,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini else time_left = nil end - + if (time_left) then if (_detalhes.debug) then _detalhes:Msg ("(debug) showing instance alert.") @@ -2453,10 +2453,10 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini instancia:InstanceAlert (Loc ["STRING_PLEASE_WAIT"], {[[Interface\COMMON\StreamCircle]], 22, 22, true}, time_left) end end - + _detalhes:InstanceCall (_detalhes.CheckPsUpdate) _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEATTRIBUTE", nil, instancia, atributo, sub_atributo) - + end if (sub_atributo ~= current_sub_atributo or _detalhes.initializing or iniciando_instancia or atributo_changed) then @@ -2513,13 +2513,13 @@ function _detalhes:GetRaidPluginName() end function _detalhes:GetInstanceAttributeText() - + if (self.modo == modo_grupo or self.modo == modo_all) then local attribute = self.atributo local sub_attribute = self.sub_atributo local name = _detalhes:GetSubAttributeName (attribute, sub_attribute) return name or "Unknown" - + elseif (self.modo == modo_raid) then local plugin_name = self.current_raid_plugin or self.last_raid_plugin if (plugin_name) then @@ -2532,7 +2532,7 @@ function _detalhes:GetInstanceAttributeText() else return "Unknown Plugin" end - + elseif (self.modo == modo_alone) then local atributo = _detalhes.SoloTables.Mode or 1 local SoloInfo = _detalhes.SoloTables.Menu [atributo] @@ -2542,7 +2542,7 @@ function _detalhes:GetInstanceAttributeText() return "Unknown Plugin" end end - + end function _detalhes:MontaRaidOption (instancia) @@ -2552,7 +2552,7 @@ function _detalhes:MontaRaidOption (instancia) if (#available_plugins == 0) then return false end - + local amount = 0 for index, ptable in _ipairs (available_plugins) do if (ptable [3].__enabled) then @@ -2564,26 +2564,26 @@ function _detalhes:MontaRaidOption (instancia) if (amount == 0) then return false end - + GameCooltip:SetOption ("NoLastSelectedBar", true) - + GameCooltip:SetWallpaper (1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) return true end function _detalhes:MontaSoloOption (instancia) - for index, ptable in _ipairs (_detalhes.SoloTables.Menu) do + for index, ptable in _ipairs (_detalhes.SoloTables.Menu) do if (ptable [3].__enabled) then GameCooltip:AddMenu (1, _detalhes.SoloTables.switch, index, nil, nil, ptable [1], ptable [2], true) end end - + if (_detalhes.SoloTables.Mode) then GameCooltip:SetLastSelected (1, _detalhes.SoloTables.Mode) end - + GameCooltip:SetWallpaper (1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) - + return true end @@ -2596,18 +2596,18 @@ local menu_icones = { "Interface\\AddOns\\Details\\images\\atributos_icones_energyze", "Interface\\AddOns\\Details\\images\\atributos_icones_misc" } - + function _detalhes:MontaAtributosOption (instancia, func) func = func or instancia.TrocaTabela local checked1 = instancia.atributo local atributo_ativo = instancia.atributo --> pega o numero - + local options if (atributo_ativo == 5) then --> custom options = {Loc ["STRING_CUSTOM_NEW"]} - for index, custom in _ipairs (_detalhes.custom) do + for index, custom in _ipairs (_detalhes.custom) do options [#options+1] = custom.name end else @@ -2616,13 +2616,13 @@ function _detalhes:MontaAtributosOption (instancia, func) local CoolTip = _G.GameCooltip local p = 0.125 --> 32/256 - + local gindex = 1 for i = 1, atributos[0] do --> [0] armazena quantos atributos existem - + CoolTip:AddMenu (1, func, nil, i, nil, atributos.lista[i], nil, true) CoolTip:AddIcon ("Interface\\AddOns\\Details\\images\\atributos_icones", 1, 1, 20, 20, p*(i-1), p*(i), 0, 1) - + if (_detalhes.tooltip.submenu_wallpaper) then if (i == 1) then CoolTip:SetWallpaper (2, [[Interface\TALENTFRAME\WarlockDestruction-TopLeft]], {1, 0.22, 0, 0.55}, wallpaper_bg_color) @@ -2637,7 +2637,7 @@ function _detalhes:MontaAtributosOption (instancia, func) --> wallpaper = main window --CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end - + local options = sub_atributos [i].lista if (not instancia.sub_atributo_last) then @@ -2656,34 +2656,34 @@ function _detalhes:MontaAtributosOption (instancia, func) gindex = gindex + 1 end - + CoolTip:SetLastSelected (2, i, instancia.sub_atributo_last [i]) end - + --> custom - + --GameCooltip:AddLine ("$div") CoolTip:AddLine ("$div", nil, 1, -3, 1) - + CoolTip:AddMenu (1, func, nil, 5, nil, atributos.lista[5], nil, true) CoolTip:AddIcon ("Interface\\AddOns\\Details\\images\\atributos_icones", 1, 1, 20, 20, p*(5-1), p*(5), 0, 1) - + CoolTip:AddMenu (2, _detalhes.OpenCustomDisplayWindow, nil, nil, nil, Loc ["STRING_CUSTOM_NEW"], nil, true) CoolTip:AddIcon ([[Interface\CHATFRAME\UI-ChatIcon-Maximize-Up]], 2, 1, 20, 20, 3/32, 29/32, 3/32, 29/32) - + CoolTip:AddLine ("$div", nil, 2, nil, -8, -13) - - for index, custom in _ipairs (_detalhes.custom) do + + for index, custom in _ipairs (_detalhes.custom) do if (custom.temp) then CoolTip:AddLine (custom.name .. Loc ["STRING_CUSTOM_TEMPORARILY"], nil, 2) else CoolTip:AddLine (custom.name, nil, 2) end - + CoolTip:AddMenu (2, func, true, 5, index) CoolTip:AddIcon (custom.icon, 2, 1, 20, 20) end - + --> set the wallpaper on custom if (_detalhes.tooltip.submenu_wallpaper) then CoolTip:SetWallpaper (2, [[Interface\TALENTFRAME\WarriorArm-TopLeft]], menu_wallpaper_custom_color, wallpaper_bg_color) @@ -2704,26 +2704,26 @@ function _detalhes:MontaAtributosOption (instancia, func) CoolTip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar4_vidro]]) CoolTip:SetOption ("ButtonsYMod", -7) CoolTip:SetOption ("HeighMod", 7) - + CoolTip:SetOption ("ButtonsYModSub", -7) CoolTip:SetOption ("HeighModSub", 7) - + CoolTip:SetOption ("SelectedTopAnchorMod", -2) CoolTip:SetOption ("SelectedBottomAnchorMod", 2) - + CoolTip:SetOption ("TextFont", _detalhes.font_faces.menus) - + _detalhes:SetTooltipMinWidth() - + local last_selected = atributo_ativo if (atributo_ativo == 5) then last_selected = 6 end CoolTip:SetLastSelected (1, last_selected) - + --removed the menu backdrop --CoolTip:SetWallpaper (1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) - + return menu_principal, sub_menus end @@ -2776,12 +2776,12 @@ function _detalhes:ChangeIcon(icon) local icon = _detalhes.custom [self.sub_atributo].icon self.baseframe.cabecalho.atributo_icon:SetTexture (icon) self.baseframe.cabecalho.atributo_icon:SetTexCoord (5/64, 60/64, 3/64, 62/64) - + local icon_size = skin.icon_plugins_size self.baseframe.cabecalho.atributo_icon:SetWidth (icon_size[1]) self.baseframe.cabecalho.atributo_icon:SetHeight (icon_size[2]) local icon_anchor = skin.icon_anchor_plugins - + self.baseframe.cabecalho.atributo_icon:ClearAllPoints() self.baseframe.cabecalho.atributo_icon:SetPoint ("TOPRIGHT", self.baseframe.cabecalho.ball_point, "TOPRIGHT", icon_anchor[1], icon_anchor[2]) end @@ -2798,18 +2798,18 @@ function _detalhes:ChangeIcon(icon) local p = 0.125 --> 32/256 self.baseframe.cabecalho.atributo_icon:SetTexCoord (p * (self.sub_atributo-1), p * (self.sub_atributo), 0, 1) self.baseframe.cabecalho.atributo_icon:SetSize (16, 16) - + self.baseframe.cabecalho.atributo_icon:ClearAllPoints() if (self.menu_attribute_string) then local yOffset = getFineTunedIconCoords(self.atributo, self.sub_atributo) self.baseframe.cabecalho.atributo_icon:SetPoint ("right", self.menu_attribute_string.widget, "left", -4, 1 + yOffset) end - + if (skin.attribute_icon_anchor) then self.baseframe.cabecalho.atributo_icon:ClearAllPoints() self.baseframe.cabecalho.atributo_icon:SetPoint ("topleft", self.baseframe.cabecalho.ball_point, "topleft", skin.attribute_icon_anchor[1], skin.attribute_icon_anchor[2]) end - + if (skin.attribute_icon_size) then self.baseframe.cabecalho.atributo_icon:SetSize (unpack (skin.attribute_icon_size)) end @@ -2831,12 +2831,12 @@ function _detalhes:AlteraModo (instancia, qual, from_mode_menu) qual = instancia instancia = self end - + local update_coolTip = false - + if (qual == -2) then --clicou para mudar local update_coolTip = true - + if (instancia.modo == 1) then qual = 2 elseif (instancia.modo == 2) then @@ -2861,26 +2861,26 @@ function _detalhes:AlteraModo (instancia, qual, from_mode_menu) end if (qual == modo_alone) then - + instancia.LastModo = instancia.modo - + if (instancia:IsRaidMode()) then _detalhes.RaidTables:DisableRaidMode (instancia) end --> verifica se ja tem alguma instancia desativada em solo e remove o solo dela _detalhes:InstanciaCallFunctionOffline (_detalhes.InstanciaCheckForDisabledSolo) - + instancia.modo = modo_alone instancia:ChangeIcon() - + instancia:SoloMode (true) _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEMODE", nil, instancia, modo_alone) - + elseif (qual == modo_raid) then - + instancia.LastModo = instancia.modo - + if (instancia:IsSoloMode()) then instancia:SoloMode (false) end @@ -2889,37 +2889,37 @@ function _detalhes:AlteraModo (instancia, qual, from_mode_menu) instancia.modo = modo_raid instancia:ChangeIcon() - + _detalhes.RaidTables:EnableRaidMode (instancia) - + _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEMODE", nil, instancia, modo_raid) - + elseif (qual == modo_grupo) then - + instancia.LastModo = instancia.modo - + if (instancia:IsSoloMode()) then --instancia.modo = modo_grupo instancia:SoloMode (false) elseif (instancia:IsRaidMode()) then _detalhes.RaidTables:DisableRaidMode (instancia) end - + _detalhes:ResetaGump (instancia) --Details.FadeHandler.Fader (instancia, 1, nil, "barras") - + instancia.modo = modo_grupo instancia:ChangeIcon() - + instancia:RefreshMainWindow (true) instancia.last_modo = modo_grupo _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEMODE", nil, instancia, modo_grupo) _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEATTRIBUTE", nil, instancia, instancia.atributo, instancia.sub_atributo) elseif (qual == modo_all) then - + instancia.LastModo = instancia.modo - + if (instancia:IsSoloMode()) then instancia.modo = modo_all instancia:SoloMode (false) @@ -2927,10 +2927,10 @@ function _detalhes:AlteraModo (instancia, qual, from_mode_menu) elseif (instancia:IsRaidMode()) then _detalhes.RaidTables:DisableRaidMode (instancia) end - + instancia.modo = modo_all instancia:ChangeIcon() - + instancia:RefreshMainWindow (true) instancia.last_modo = modo_all _detalhes:SendEvent ("DETAILS_INSTANCE_CHANGEMODE", nil, instancia, modo_all) @@ -2946,21 +2946,21 @@ function _detalhes:AlteraModo (instancia, qual, from_mode_menu) checked = 2 elseif (instancia.modo == 4) then checked = 3 - end + end _detalhes.popup:Select (1, checked) - + if (from_mode_menu) then instancia.baseframe.cabecalho.modo_selecao:GetScript ("OnEnter")(instancia.baseframe.cabecalho.modo_selecao, _, true) - + --> running OnEnter does also trigger an instance enter event, so we need to manually leave the instance: _detalhes.OnLeaveMainWindow (instancia, instancia.baseframe.cabecalho.modo_selecao) - + if (instancia.desaturated_menu) then instancia.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated (true) end end - + end local function GetDpsHps (_thisActor, key) @@ -2971,7 +2971,7 @@ local function GetDpsHps (_thisActor, key) elseif (key == "hps") then keyname = "last_hps" end - + if (_thisActor [keyname]) then return _thisActor [keyname] else @@ -3001,18 +3001,18 @@ end -- report_table = a table header: {"report results for:"} -- data = table with {{value1 (string), value2 ( the value)} , {value1 (string), value2 ( the value)}} -local default_format_value1 = function (v) return v end -local default_format_value2 = function (v) return v end -local default_format_value3 = function (i, v1, v2) +local default_format_value1 = function(v) return v end +local default_format_value2 = function(v) return v end +local default_format_value3 = function(i, v1, v2) return "" .. i .. ". " .. v1 .. " " .. v2 end function _detalhes:FormatReportLines (report_table, data, f1, f2, f3) - + f1 = f1 or default_format_value1 f2 = f2 or default_format_value2 f3 = f3 or default_format_value3 - + if (not _detalhes.fontstring_len) then _detalhes.fontstring_len = _detalhes.listener:CreateFontString (nil, "background", "GameFontNormal") end @@ -3023,8 +3023,8 @@ function _detalhes:FormatReportLines (report_table, data, f1, f2, f3) local fonte, _, flags = _detalhes.fontstring_len:GetFont() _detalhes.fontstring_len:SetFont (fonte, fontSize, flags) _detalhes.fontstring_len:SetText ("DEFAULT NAME") - local biggest_len = _detalhes.fontstring_len:GetStringWidth() - + local biggest_len = _detalhes.fontstring_len:GetStringWidth() + for index, t in ipairs (data) do local v1 = f1 (t[1]) _detalhes.fontstring_len:SetText (v1) @@ -3033,33 +3033,33 @@ function _detalhes:FormatReportLines (report_table, data, f1, f2, f3) biggest_len = len end end - + if (biggest_len > 130) then biggest_len = 130 end - + for index, t in ipairs (data) do local v1, v2 = f1 (t[1]), f2 (t[2]) if (v1 and v2 and type (v1) == "string" and type (v2) == "string") then v1 = v1 .. " " _detalhes.fontstring_len:SetText (v1) local len = _detalhes.fontstring_len:GetStringWidth() - - while (len < biggest_len) do + + while (len < biggest_len) do v1 = v1 .. "." _detalhes.fontstring_len:SetText (v1) len = _detalhes.fontstring_len:GetStringWidth() - end - + end + report_table [#report_table+1] = f3 (index, v1, v2) end end - + end -local report_name_function = function (name) +local report_name_function = function(name) local name, index = unpack (name) - + if (_detalhes.remove_realm_from_name and name:find ("-")) then return index .. ". " .. name:gsub (("%-.*"), "") else @@ -3067,9 +3067,9 @@ local report_name_function = function (name) end end -local report_amount_function = function (t) +local report_amount_function = function(t) local amount, dps, percent, is_string, index = unpack (t) - + if (not is_string) then if (dps) then if (_detalhes.report_schema == 1) then @@ -3091,20 +3091,20 @@ local report_amount_function = function (t) end end -local report_build_line = function (i, v1, v2) +local report_build_line = function(i, v1, v2) return v1 .. " " .. v2 end --> Reportar o que esta na janela da inst�ncia function _detalhes:monta_relatorio (este_relatorio, custom) - + if (custom) then --> shrink local report_lines = {} for i = 1, _detalhes.report_lines+1, 1 do --#este_relatorio -- o +1 � pq ele conta o cabe�alho como uma linha report_lines [#report_lines+1] = este_relatorio[i] end - + return self:envia_relatorio (report_lines, true) end @@ -3126,7 +3126,7 @@ function _detalhes:monta_relatorio (este_relatorio, custom) report_lines [#report_lines+1] = "Details!: " .. _detalhes.sub_atributos [self.atributo].lista [self.sub_atributo] end end - + if (self.meu_id and self.atributo and self.sub_atributo and _detalhes.report_where ~= "WHISPER" and _detalhes.report_where ~= "WHISPER2") then local already_exists for index, reported in ipairs (_detalhes.latest_report_table) do @@ -3135,7 +3135,7 @@ function _detalhes:monta_relatorio (este_relatorio, custom) break end end - + if (already_exists) then --push it to front local t = tremove (_detalhes.latest_report_table, already_exists) @@ -3149,53 +3149,53 @@ function _detalhes:monta_relatorio (este_relatorio, custom) tinsert (_detalhes.latest_report_table, 1, {self.meu_id, self.atributo, self.sub_atributo, amt, _detalhes.report_where}) end end - + tremove (_detalhes.latest_report_table, 11) end - + local barras = self.barras local esta_barra local is_current = _G ["Details_Report_CB_1"]:GetChecked() local is_reverse = _G ["Details_Report_CB_2"]:GetChecked() local name_member = "nome" - + if (not is_current) then - + local total, keyName, keyNameSec, first local container_amount = 0 local atributo = self.atributo local container = self.showing [atributo]._ActorTable - + if (atributo == 1) then --> damage if (self.sub_atributo == 5) then --> frags local frags = self.showing.frags local reportarFrags = {} - for name, amount in pairs (frags) do + for name, amount in pairs (frags) do --> string para imprimir direto sem calculos - reportarFrags [#reportarFrags+1] = {frag = tostring (amount), nome = name} + reportarFrags [#reportarFrags+1] = {frag = tostring (amount), nome = name} end container = reportarFrags container_amount = #reportarFrags keyName = "frag" - + elseif (self.sub_atributo == 7) then --> auras e voidzones - + total, keyName, first, container_amount, container, name_member = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true) - + elseif (self.sub_atributo == 8) then --> damage taken by spell - + total, keyName, first, container_amount, container = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true) - + for _, t in ipairs (container) do - t.nome = _detalhes:GetSpellLink (t.spellid) + t.nome = _detalhes:GetSpellLink(t.spellid) end - + else total, keyName, first, container_amount = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true) if (self.sub_atributo == 1) then keyNameSec = "dps" elseif (self.sub_atributo == 2) then - + end end elseif (atributo == 2) then --> heal @@ -3211,7 +3211,7 @@ function _detalhes:monta_relatorio (este_relatorio, custom) local mortes = self.showing.last_events_tables local reportarMortes = {} - for index, morte in ipairs (mortes) do + for index, morte in ipairs (mortes) do reportarMortes [#reportarMortes+1] = {dead = morte [6], nome = morte [3]:gsub (("%-.*"), "")} end container = reportarMortes @@ -3235,15 +3235,15 @@ function _detalhes:monta_relatorio (este_relatorio, custom) container = self.showing [atributo]._ActorTable end end - + amt = math.min (amt, container_amount or 0) local raw_data_to_report = {} - for i = 1, container_amount do + for i = 1, container_amount do local actor = container [i] - - if (actor) then - + + if (actor) then + -- get the total local amount, is_string if (type (actor [keyName]) == "number") then @@ -3252,10 +3252,10 @@ function _detalhes:monta_relatorio (este_relatorio, custom) amount = actor [keyName] is_string = true end - + -- get the name local name = actor [name_member] or "" - + if (not is_string) then -- get the percent local percent @@ -3264,18 +3264,18 @@ function _detalhes:monta_relatorio (este_relatorio, custom) elseif (not is_string) then percent = _cstr ("%.1f", amount / max(total, 0.00001) * 100) end - + -- get the dps local dps = false if (keyNameSec) then dps = GetDpsHps (actor, keyNameSec) end - + raw_data_to_report [#raw_data_to_report+1] = {{name, i}, {amount, dps, percent, false}} else raw_data_to_report [#raw_data_to_report+1] = {{name, i}, {amount, false, false, true}} end - + else break end @@ -3298,9 +3298,9 @@ function _detalhes:monta_relatorio (este_relatorio, custom) end else - + local raw_data_to_report = {} - + for i = 1, amt do local window_bar = self.barras [i] if (window_bar) then @@ -3313,13 +3313,13 @@ function _detalhes:monta_relatorio (este_relatorio, custom) break end end - + _detalhes:FormatReportLines (report_lines, raw_data_to_report, nil, nil, report_build_line) - + end return self:envia_relatorio (report_lines) - + end function _detalhes:envia_relatorio (linhas, custom) @@ -3327,9 +3327,9 @@ function _detalhes:envia_relatorio (linhas, custom) local segmento = self.segmento local luta = nil local combatObject - + if (not custom) then - + if (not linhas[1]) then return _detalhes:Msg (Loc ["STRING_ACTORFRAME_NOTHING"]) end @@ -3338,28 +3338,28 @@ function _detalhes:envia_relatorio (linhas, custom) --luta = Loc ["STRING_REPORT_LAST"] .. " " .. #_detalhes.tabela_historico.tabelas .. " " .. Loc ["STRING_REPORT_FIGHTS"] luta = _detalhes.tabela_overall.overall_enemy_name combatObject = _detalhes.tabela_overall - + elseif (segmento == 0) then --current - + if (_detalhes.tabela_vigente.is_boss) then local encounterName = _detalhes.tabela_vigente.is_boss.name if (encounterName) then luta = encounterName end - + elseif (_detalhes.tabela_vigente.is_pvp) then local battleground_name = _detalhes.tabela_vigente.is_pvp.name if (battleground_name) then luta = battleground_name end end - + local isMythicDungeon = _detalhes.tabela_vigente:IsMythicDungeon() if (isMythicDungeon) then local mythicDungeonInfo = _detalhes.tabela_vigente:GetMythicDungeonInfo() if (mythicDungeonInfo) then local isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = _detalhes:UnpackMythicDungeonInfo (mythicDungeonInfo) - + if (isMythicOverallSegment) then luta = zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")" else @@ -3373,42 +3373,42 @@ function _detalhes:envia_relatorio (linhas, custom) luta = Loc ["STRING_SEGMENTS_LIST_TRASH"] end end - + if (not luta) then if (_detalhes.tabela_vigente.enemy) then luta = _detalhes.tabela_vigente.enemy end end - + if (not luta) then luta = _detalhes.segmentos.current end - + combatObject = _detalhes.tabela_vigente - + else if (segmento == 1) then - + if (_detalhes.tabela_historico.tabelas[1].is_boss) then local encounterName = _detalhes.tabela_historico.tabelas[1].is_boss.name if (encounterName) then luta = encounterName .. " (" .. Loc ["STRING_REPORT_LASTFIGHT"] .. ")" end - + elseif (_detalhes.tabela_historico.tabelas[1].is_pvp) then local battleground_name = _detalhes.tabela_historico.tabelas[1].is_pvp.name if (battleground_name) then luta = battleground_name .. " (" .. Loc ["STRING_REPORT_LASTFIGHT"] .. ")" end end - + local thisSegment = _detalhes.tabela_historico.tabelas[1] local isMythicDungeon = thisSegment:IsMythicDungeon() if (isMythicDungeon) then local mythicDungeonInfo = thisSegment:GetMythicDungeonInfo() if (mythicDungeonInfo) then local isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = _detalhes:UnpackMythicDungeonInfo (mythicDungeonInfo) - + if (isMythicOverallSegment) then luta = zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")" else @@ -3422,41 +3422,41 @@ function _detalhes:envia_relatorio (linhas, custom) luta = Loc ["STRING_SEGMENTS_LIST_TRASH"] end end - + if (not luta) then if (_detalhes.tabela_historico.tabelas[1].enemy) then luta = _detalhes.tabela_historico.tabelas[1].enemy .. " (" .. Loc ["STRING_REPORT_LASTFIGHT"] .. ")" end end - + if (not luta) then luta = Loc ["STRING_REPORT_LASTFIGHT"] end - + combatObject = _detalhes.tabela_historico.tabelas[1] - + else - + if (_detalhes.tabela_historico.tabelas[segmento].is_boss) then local encounterName = _detalhes.tabela_historico.tabelas[segmento].is_boss.name if (encounterName) then luta = encounterName .. " (" .. segmento .. " " .. Loc ["STRING_REPORT_PREVIOUSFIGHTS"] .. ")" end - + elseif (_detalhes.tabela_historico.tabelas[segmento].is_pvp) then local battleground_name = _detalhes.tabela_historico.tabelas[segmento].is_pvp.name if (battleground_name) then luta = battleground_name .. " (" .. Loc ["STRING_REPORT_LASTFIGHT"] .. ")" end end - + local thisSegment = _detalhes.tabela_historico.tabelas [segmento] local isMythicDungeon = thisSegment:IsMythicDungeon() if (isMythicDungeon) then local mythicDungeonInfo = thisSegment:GetMythicDungeonInfo() if (mythicDungeonInfo) then local isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = _detalhes:UnpackMythicDungeonInfo (mythicDungeonInfo) - + if (isMythicOverallSegment) then luta = zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")" else @@ -3470,40 +3470,40 @@ function _detalhes:envia_relatorio (linhas, custom) luta = Loc ["STRING_SEGMENTS_LIST_TRASH"] end end - + if (not luta) then if (_detalhes.tabela_historico.tabelas[segmento].enemy) then luta = _detalhes.tabela_historico.tabelas[segmento].enemy .. " (" .. segmento .. " " .. Loc ["STRING_REPORT_PREVIOUSFIGHTS"] .. ")" end end - + if (not luta) then luta = " (" .. segmento .. " " .. Loc ["STRING_REPORT_PREVIOUSFIGHTS"] .. ")" end - + combatObject = _detalhes.tabela_historico.tabelas[segmento] end end - + linhas[1] = linhas[1] .. " " .. Loc ["STRING_REPORT"] .. " " .. luta end - + --adicionar o tempo de luta local segmentTime = "" if (combatObject) then local time = combatObject:GetCombatTime() segmentTime = _detalhes.gump:IntegerToTimer (time or 0) end - + --effective ou active time if (_detalhes.time_type == 2) then linhas[1] = linhas[1] .. " [" .. segmentTime .. " EF]" else linhas[1] = linhas[1] .. " [" .. segmentTime .. " AC]" end - - + + local editbox = _detalhes.janela_report.editbox if (editbox.focus) then --> n�o precionou enter antes de clicar no okey local texto = _detalhes:trim (editbox:GetText()) @@ -3514,42 +3514,42 @@ function _detalhes:envia_relatorio (linhas, custom) else _detalhes.report_to_who = "" editbox:SetText ("") - end + end editbox.perdeu_foco = true --> isso aqui pra quando estiver editando e clicar em outra caixa editbox:ClearFocus() end _detalhes:DelayUpdateReportWindowRecentlyReported() - + if (_detalhes.report_where == "COPY") then _detalhes:SendReportTextWindow (linhas) return end - + local to_who = _detalhes.report_where - + local channel = to_who:find ("CHANNEL") local is_btag = to_who:find ("REALID") - - local send_report_channel = function (timerObject) + + local send_report_channel = function(timerObject) _SendChatMessage (timerObject.Arg1, timerObject.Arg2, timerObject.Arg3, timerObject.Arg4) end - - local sendReportBnet = function (timerObject) + + local sendReportBnet = function(timerObject) BNSendWhisper(timerObject.Arg1, timerObject.Arg2) end - + local delay = 200 - + if (channel) then - + channel = to_who:gsub ((".*|"), "") - for i = 1, #linhas do + for i = 1, #linhas do if (channel == "Trade") then channel = "Trade - City" end - + local channelName = GetChannelName (channel) local timer = C_Timer.NewTimer (i * delay / 1000, send_report_channel) timer.Arg1 = linhas[i] @@ -3557,31 +3557,31 @@ function _detalhes:envia_relatorio (linhas, custom) timer.Arg3 = nil timer.Arg4 = channelName end - + return - + elseif (is_btag) then local bnetAccountID = to_who:gsub ((".*|"), "") bnetAccountID = tonumber(bnetAccountID) - + for i = 1, #linhas do local timer = C_Timer.NewTimer (i * delay / 1000, sendReportBnet) timer.Arg1 = bnetAccountID timer.Arg2 = linhas[i] end - + return elseif (to_who == "WHISPER") then --> whisper - + local alvo = _detalhes.report_to_who - + if (not alvo or alvo == "") then _detalhes:Msg (Loc ["STRING_REPORT_INVALIDTARGET"]) return end - - for i = 1, #linhas do + + for i = 1, #linhas do local timer = C_Timer.NewTimer (i * delay / 1000, send_report_channel) timer.Arg1 = linhas[i] timer.Arg2 = to_who @@ -3589,10 +3589,10 @@ function _detalhes:envia_relatorio (linhas, custom) timer.Arg4 = alvo end return - + elseif (to_who == "WHISPER2") then --> whisper target to_who = "WHISPER" - + local alvo if (_UnitExists ("target")) then if (_UnitIsPlayer ("target")) then @@ -3609,8 +3609,8 @@ function _detalhes:envia_relatorio (linhas, custom) _detalhes:Msg (Loc ["STRING_REPORT_INVALIDTARGET"]) return end - - for i = 1, #linhas do + + for i = 1, #linhas do local timer = C_Timer.NewTimer (i * delay / 1000, send_report_channel) timer.Arg1 = linhas[i] timer.Arg2 = to_who @@ -3620,22 +3620,22 @@ function _detalhes:envia_relatorio (linhas, custom) return end - + if (to_who == "RAID" or to_who == "PARTY") then if (GetNumGroupMembers (LE_PARTY_CATEGORY_INSTANCE) > 0) then to_who = "INSTANCE_CHAT" end end - - for i = 1, #linhas do + + for i = 1, #linhas do local timer = C_Timer.NewTimer (i * delay / 1000, send_report_channel) timer.Arg1 = linhas[i] timer.Arg2 = to_who timer.Arg3 = nil timer.Arg4 = nil - + end - + end -- enda elsef diff --git a/classes/class_resources.lua b/classes/class_resources.lua index 803e4977..76d250b0 100644 --- a/classes/class_resources.lua +++ b/classes/class_resources.lua @@ -66,7 +66,7 @@ function atributo_energy:NovaTabela (serial, nome, link) --> constructor - local alphabetical = _detalhes:GetOrderNumber (nome) + local alphabetical = _detalhes:GetOrderNumber(nome) local _new_energyActor = { @@ -137,7 +137,7 @@ end local power_table = {0, 1, 3, 6} local power_type -local sort_energy = function (t1, t2) +local sort_energy = function(t1, t2) if (t1.powertype == power_type and t2.powertype == power_type) then return t1.received > t2.received elseif (t1.powertype == power_type) then @@ -149,11 +149,11 @@ local sort_energy = function (t1, t2) end end -local sort_energyalternate = function (t1, t2) +local sort_energyalternate = function(t1, t2) return t1.alternatepower > t2.alternatepower end -local sort_energy_group = function (t1, t2) +local sort_energy_group = function(t1, t2) if (t1.grupo and t2.grupo) then if (t1.powertype == power_type and t2.powertype == power_type) then return t1.received > t2.received @@ -175,7 +175,7 @@ local sort_energy_group = function (t1, t2) end end -local sort_alternateenergy_group = function (t1, t2) +local sort_alternateenergy_group = function(t1, t2) if (t1.grupo and t2.grupo) then return t1.alternatepower > t2.alternatepower else @@ -924,7 +924,7 @@ function atributo_energy:ToolTipRegenRecebido (instancia, numero, barra, keydown break end - local nome_magia, _, icone_magia = _GetSpellInfo (spell [1]) + local nome_magia, _, icone_magia = _GetSpellInfo(spell [1]) GameCooltip:AddLine (nome_magia, FormatTooltipNumber (_, spell [2]).." (".._cstr("%.1f", (spell [2]/total_regenerado) * 100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar (false, spell [2] / energy_tooltips_table [1][2] * 100) @@ -1013,7 +1013,7 @@ function atributo_energy:ToolTipRegenRecebido (instancia, numero, barra, keydown for i = 1, #allGeneratorSpells do local thisGenerator = allGeneratorSpells [i] - local spellName, _, spellIcon = GetSpellInfo (thisGenerator[1].id) + local spellName, _, spellIcon = GetSpellInfo(thisGenerator[1].id) GameCooltip:AddLine (spellName, FormatTooltipNumber (_, thisGenerator[2]) .. " (|cFFFF5555overflow: " .. FormatTooltipNumber (_, thisGenerator[3]) .. "|r | " .. _cstr ("%.1f", (thisGenerator[2] / allGenerated) * 100).."%)") GameCooltip:AddIcon (spellIcon, nil, nil, icon_size.W, icon_size.H, .1, .9, .1, .9) _detalhes:AddTooltipBackgroundStatusbar() @@ -1122,7 +1122,7 @@ function atributo_energy:MontaInfoRegenRecebido() self:FocusLock (barra, tabela[1]) - local spellname, _, spellicon = _GetSpellInfo (tabela [1]) + local spellname, _, spellicon = _GetSpellInfo(tabela [1]) local percent = tabela [2] / total_regenerado * 100 self:UpdadeInfoBar (barra, index, tabela[1], spellname, tabela[2], _detalhes:comma_value (tabela[2]), max_, percent, spellicon, true) @@ -1343,7 +1343,7 @@ function atributo_energy:MontaTooltipAlvos (esta_barra, index) break end - local spellname, _, spellicon = _GetSpellInfo (spell [1]) + local spellname, _, spellicon = _GetSpellInfo(spell [1]) GameTooltip:AddDoubleLine(spellname .. ": ", _detalhes:comma_value (spell [2]) .. " (" .. _cstr ("%.1f", (spell [2] / total_regenerado) * 100).."%)", 1, 1, 1, 1, 1, 1) GameTooltip:AddTexture(spellicon) end @@ -1542,7 +1542,7 @@ function _detalhes.clear:c_atributo_energy (este_jogador) _detalhes.clear:c_container_habilidades (este_jogador.spells) end -atributo_energy.__add = function (tabela1, tabela2) +atributo_energy.__add = function(tabela1, tabela2) if (not tabela1.powertype) then tabela1.powertype = tabela2.powertype @@ -1580,7 +1580,7 @@ atributo_energy.__add = function (tabela1, tabela2) return tabela1 end -atributo_energy.__sub = function (tabela1, tabela2) +atributo_energy.__sub = function(tabela1, tabela2) if (not tabela1.powertype) then tabela1.powertype = tabela2.powertype diff --git a/classes/class_spellutility.lua b/classes/class_spellutility.lua index 8f85065a..840f0a26 100644 --- a/classes/class_spellutility.lua +++ b/classes/class_spellutility.lua @@ -52,7 +52,7 @@ function habilidade_misc:Add (serial, nome, flag, who_nome, token, spellID, spellName) - --print (self.id, GetSpellInfo (self.id)) + --print (self.id, GetSpellInfo(self.id)) if (spellID == "BUFF_OR_DEBUFF") then diff --git a/classes/class_utility.lua b/classes/class_utility.lua index a4e60ff1..748bae7c 100644 --- a/classes/class_utility.lua +++ b/classes/class_utility.lua @@ -159,9 +159,9 @@ end --try to find a spell with the same name and get the amount of casts of that spell object if (not spell_cast and misc_actor.spell_cast) then - local spellname = GetSpellInfo (spellId) + local spellname = GetSpellInfo(spellId) for casted_spellid, amount in pairs (misc_actor.spell_cast) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then return amount, true end @@ -379,7 +379,7 @@ end --[1] true damage/ false heal [2] spellid [3] amount [4] time [5] current health [6] source local report_table = {} -local ReportSingleDeathFunc = function (IsCurrent, IsReverse, AmtLines) +local ReportSingleDeathFunc = function(IsCurrent, IsReverse, AmtLines) AmtLines = AmtLines + 1 @@ -426,13 +426,13 @@ function atributo_misc:ReportSingleDeadLine (morte, instancia) if (evento [1] and type (evento [1]) == "boolean") then --> damage if (evento [3]) then local elapsed = _cstr ("%.1f", evento [4] - time_of_death) .."s" - local spellname, _, spellicon = _GetSpellInfo (evento [2]) + local spellname, _, spellicon = _GetSpellInfo(evento [2]) local spelllink if (evento [2] == 1) then - spelllink = GetSpellLink (6603) + spelllink = GetSpellLink(6603) elseif (evento [2] > 10) then - spelllink = GetSpellLink (evento [2]) + spelllink = GetSpellLink(evento [2]) else spelllink = spellname end @@ -453,9 +453,9 @@ function atributo_misc:ReportSingleDeadLine (morte, instancia) if (amount > _detalhes.deathlog_healingdone_min) then local elapsed = _cstr ("%.1f", evento [4] - time_of_death) .."s" - local spelllink = GetSpellLink (evento [2]) + local spelllink = GetSpellLink(evento [2]) local source = _detalhes:GetOnlyName (evento [6]) - local spellname, _, spellicon = _GetSpellInfo (evento [2]) + local spellname, _, spellicon = _GetSpellInfo(evento [2]) local hp = _math_floor (evento [5] / max_health * 100) if (hp > 100) then @@ -472,9 +472,9 @@ function atributo_misc:ReportSingleDeadLine (morte, instancia) elseif (type (evento [1]) == "number" and evento [1] == 4) then --> debuff local elapsed = _cstr ("%.1f", evento [4] - time_of_death) .."s" - local spelllink = GetSpellLink (evento [2]) + local spelllink = GetSpellLink(evento [2]) local source = _detalhes:GetOnlyName (evento [6]) - local spellname, _, spellicon = _GetSpellInfo (evento [2]) + local spellname, _, spellicon = _GetSpellInfo(evento [2]) local stacks = evento [3] local hp = _math_floor (evento [5] / max_health * 100) if (hp > 100) then @@ -509,7 +509,7 @@ function atributo_misc:ReportSingleCooldownLine (misc_actor, instancia) for i, spell in ipairs (cooldowns_used) do - local spelllink = GetSpellLink (spell [1]) + local spelllink = GetSpellLink(spell [1]) reportar [#reportar+1] = spelllink .. ": " .. spell [2] for target_name, amount in pairs (spell[3].targets) do @@ -523,18 +523,18 @@ function atributo_misc:ReportSingleCooldownLine (misc_actor, instancia) return _detalhes:Reportar (reportar, {_no_current = true, _no_inverse = true, _custom = true}) end -local buff_format_name = function (spellid) +local buff_format_name = function(spellid) if (_type (spellid) == "string") then return spellid end - return _detalhes:GetSpellLink (spellid) + return _detalhes:GetSpellLink(spellid) end -local buff_format_amount = function (t) +local buff_format_amount = function(t) local total, percent = unpack (t) local m, s = _math_floor (total / 60), _math_floor (total % 60) return _cstr ("%.1f", percent) .. "% (" .. m .. "m " .. s .. "s)" end -local sort_buff_report = function (t1, t2) +local sort_buff_report = function(t1, t2) return t1[2][1] > t2[2][1] end @@ -1096,7 +1096,7 @@ function atributo_misc:ToolTipCC (instancia, numero, barra) for _spellid, _tabela in pairs (habilidades) do --> quantidade - local nome_magia, _, icone_magia = _GetSpellInfo (_spellid) + local nome_magia, _, icone_magia = _GetSpellInfo(_spellid) GameCooltip:AddLine (nome_magia, _tabela.cc_break .. " (" .. _cstr ("%.1f", _tabela.cc_break / meu_total * 100) .. "%)") GameCooltip:AddIcon (icone_magia, nil, nil, lineHeight, lineHeight, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipHeaderStatusbar (r, g, b, barAlha) @@ -1104,7 +1104,7 @@ function atributo_misc:ToolTipCC (instancia, numero, barra) --> o que quebrou local quebrou_oque = _tabela.cc_break_oque for spellid_quebrada, amt_quebrada in pairs (_tabela.cc_break_oque) do - local nome_magia, _, icone_magia = _GetSpellInfo (spellid_quebrada) + local nome_magia, _, icone_magia = _GetSpellInfo(spellid_quebrada) GameCooltip:AddLine (nome_magia, amt_quebrada .. " ") GameCooltip:AddIcon ([[Interface\Buttons\UI-GroupLoot-Pass-Down]], nil, 1, 14, 14) GameCooltip:AddIcon (icone_magia, nil, 2, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) @@ -1163,7 +1163,7 @@ function atributo_misc:ToolTipDispell (instancia, numero, barra) if (#meus_dispells > 0) then for i = 1, min (25, #meus_dispells) do local esta_habilidade = meus_dispells[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -1185,7 +1185,7 @@ function atributo_misc:ToolTipDispell (instancia, numero, barra) if (#buffs_dispelados > 0) then for i = 1, min (25, #buffs_dispelados) do local esta_habilidade = buffs_dispelados[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -1482,7 +1482,7 @@ function _detalhes:CatchRaidBuffUptime (in_or_out) local string_output = "pre-potion: " --> localize-me for playername, potspellid in pairs (pot_usage) do - local name, _, icon = _GetSpellInfo (potspellid) + local name, _, icon = _GetSpellInfo(potspellid) local _, class = UnitClass (playername) local class_color = "" if (class and RAID_CLASS_COLORS [class]) then @@ -1554,7 +1554,7 @@ function _detalhes:CatchRaidBuffUptime (in_or_out) local string_output = "pre-potion: " for playername, potspellid in pairs (pot_usage) do - local name, _, icon = _GetSpellInfo (potspellid) + local name, _, icon = _GetSpellInfo(potspellid) local _, class = UnitClass (playername) local class_color = "" if (class and RAID_CLASS_COLORS [class]) then @@ -1595,7 +1595,7 @@ function _detalhes:CatchRaidBuffUptime (in_or_out) if (in_or_out == "BUFF_UPTIME_IN") then local string_output = "pre-potion: " for playername, potspellid in pairs (pot_usage) do - local name, _, icon = _GetSpellInfo (potspellid) + local name, _, icon = _GetSpellInfo(potspellid) local _, class = UnitClass (playername) local class_color = "" if (class and RAID_CLASS_COLORS [class]) then @@ -1614,7 +1614,7 @@ function _detalhes:CatchRaidBuffUptime (in_or_out) end end -local Sort2Reverse = function (a, b) +local Sort2Reverse = function(a, b) return a[2] < b[2] end @@ -1651,7 +1651,7 @@ function atributo_misc:ToolTipDebuffUptime (instancia, numero, barra) local esta_habilidade = debuffs_usados[i] if (esta_habilidade[2] > 0) then - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) local minutos, segundos = _math_floor (esta_habilidade[2]/60), _math_floor (esta_habilidade[2]%60) if (esta_habilidade[2] >= _combat_time) then @@ -1762,7 +1762,7 @@ function atributo_misc:ToolTipDefensiveCooldowns (instancia, numero, barra) if (#cooldowns_usados > 0) then for i = 1, min (25, #cooldowns_usados) do local esta_habilidade = cooldowns_usados[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -1844,7 +1844,7 @@ function atributo_misc:ToolTipRess (instancia, numero, barra) if (#meus_ress > 0) then for i = 1, min (3, #meus_ress) do local esta_habilidade = meus_ress[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2] .. " (" .. _cstr ("%.1f", floor (esta_habilidade[2]) / floor (meu_total) * 100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, lineHeight, lineHeight, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -1926,7 +1926,7 @@ function atributo_misc:ToolTipInterrupt (instancia, numero, barra) if (#meus_interrupts > 0) then for i = 1, min (25, #meus_interrupts) do local esta_habilidade = meus_interrupts[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2].." (".._cstr("%.1f", floor (esta_habilidade[2])/floor (meu_total)*100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -1949,7 +1949,7 @@ function atributo_misc:ToolTipInterrupt (instancia, numero, barra) if (#habilidades_interrompidas > 0) then for i = 1, min (25, #habilidades_interrompidas) do local esta_habilidade = habilidades_interrompidas[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) GameCooltip:AddLine (nome_magia, esta_habilidade[2].." (".._cstr("%.1f", floor (esta_habilidade[2])/floor (meu_total)*100).."%)") GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B) _detalhes:AddTooltipBackgroundStatusbar() @@ -2047,7 +2047,7 @@ function atributo_misc:MontaInfoInterrupt() --player for _spellid, _tabela in pairs (minha_tabela) do --> da foreach em cada spellid do container - local nome, _, icone = _GetSpellInfo (_spellid) + local nome, _, icone = _GetSpellInfo(_spellid) _table_insert (meus_interrupts, {_spellid, _tabela.counter, _tabela.counter/meu_total*100, nome, icone}) end --pet @@ -2058,7 +2058,7 @@ function atributo_misc:MontaInfoInterrupt() if (PetActor and PetActor.interrupt and PetActor.interrupt > 0) then local PetSkillsContainer = PetActor.interrupt_spells._ActorTable for _spellid, _skill in pairs (PetSkillsContainer) do --> da foreach em cada spellid do container - local nome, _, icone = _GetSpellInfo (_spellid) + local nome, _, icone = _GetSpellInfo(_spellid) _table_insert (meus_interrupts, {_spellid, _skill.counter, _skill.counter/meu_total*100, nome .. " (|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r)", icone, PetActor}) end end @@ -2190,7 +2190,7 @@ function atributo_misc:MontaDetalhesInterrupt (spellid, barra) end --> icone direito superior - local nome, _, icone = _GetSpellInfo (spellid) + local nome, _, icone = _GetSpellInfo(spellid) local infospell = {nome, nil, icone} _detalhes.playerDetailWindow.spell_icone:SetTexture (infospell[3]) @@ -2227,7 +2227,7 @@ function atributo_misc:MontaDetalhesInterrupt (spellid, barra) barra.textura:SetValue (tabela[2]/max_*100) --> muito mais rapido... end - local nome, _, icone = _GetSpellInfo (tabela[1]) + local nome, _, icone = _GetSpellInfo(tabela[1]) barra.lineText1:SetText (index..instancia.divisores.colocacao..nome) --seta o texto da esqueda barra.lineText4:SetText (tabela[2] .." ".. instancia.divisores.abre .._cstr("%.1f", tabela[2]/total*100) .."%".. instancia.divisores.fecha) --seta o texto da direita @@ -2274,7 +2274,7 @@ function atributo_misc:MontaTooltipAlvos (esta_barra, index) GameTooltip:AddLine (" ") for index, tabela in ipairs (habilidades) do - local nome, rank, icone = _GetSpellInfo (tabela[1]) + local nome, rank, icone = _GetSpellInfo(tabela[1]) if (index < 8) then GameTooltip:AddDoubleLine (index..". |T"..icone..":0|t "..nome, tabela[2].." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1) else @@ -2327,12 +2327,12 @@ end end end -local refresh_alvos = function (container1, container2) +local refresh_alvos = function(container1, container2) for target_name, amount in pairs (container2) do container1 [target_name] = container1 [target_name] or 0 end end -local refresh_habilidades = function (container1, container2) +local refresh_habilidades = function(container1, container2) for spellid, habilidade in pairs (container2._ActorTable) do local habilidade_shadow = container1:PegaHabilidade (spellid, true, nil, true) refresh_alvos (habilidade_shadow.targets , habilidade.targets) @@ -2443,7 +2443,7 @@ function atributo_misc:r_onlyrefresh_shadow (actor) end -local somar_keys = function (habilidade, habilidade_tabela1) +local somar_keys = function(habilidade, habilidade_tabela1) for key, value in pairs (habilidade) do if (_type (value) == "number") then if (key ~= "id" and key ~= "spellschool") then @@ -2452,12 +2452,12 @@ local somar_keys = function (habilidade, habilidade_tabela1) end end end -local somar_alvos = function (container1, container2) +local somar_alvos = function(container1, container2) for target_name, amount in pairs (container2) do container1 [target_name] = (container1 [target_name] or 0) + amount end end -local somar_habilidades = function (container1, container2) +local somar_habilidades = function(container1, container2) for spellid, habilidade in pairs (container2._ActorTable) do local habilidade_tabela1 = container1:PegaHabilidade (spellid, true, nil, false) somar_alvos (habilidade_tabela1.targets, habilidade.targets) @@ -2526,7 +2526,7 @@ function atributo_misc:r_connect_shadow (actor, no_refresh, combat_object) if (actor.cooldowns_defensive) then if (not shadow.cooldowns_defensive_targets) then - shadow.cooldowns_defensive = _detalhes:GetOrderNumber (actor.nome) + shadow.cooldowns_defensive = _detalhes:GetOrderNumber(actor.nome) shadow.cooldowns_defensive_targets = {} shadow.cooldowns_defensive_spells = container_habilidades:NovoContainer (_detalhes.container_type.CONTAINER_MISC_CLASS) end @@ -2854,7 +2854,7 @@ function _detalhes.clear:c_atributo_misc (este_jogador) end -atributo_misc.__add = function (tabela1, tabela2) +atributo_misc.__add = function(tabela1, tabela2) if (tabela2.spell_cast) then for spellid, amount in pairs (tabela2.spell_cast) do @@ -3110,7 +3110,7 @@ atributo_misc.__add = function (tabela1, tabela2) return tabela1 end -local subtrair_keys = function (habilidade, habilidade_tabela1) +local subtrair_keys = function(habilidade, habilidade_tabela1) for key, value in pairs (habilidade) do if (_type (value) == "number") then if (key ~= "id" and key ~= "spellschool") then @@ -3120,7 +3120,7 @@ local subtrair_keys = function (habilidade, habilidade_tabela1) end end -atributo_misc.__sub = function (tabela1, tabela2) +atributo_misc.__sub = function(tabela1, tabela2) if (tabela2.spell_cast) then for spellid, amount in pairs (tabela2.spell_cast) do diff --git a/classes/container_actors.lua b/classes/container_actors.lua index aef04199..5cda0e6d 100644 --- a/classes/container_actors.lua +++ b/classes/container_actors.lua @@ -436,7 +436,7 @@ local pet_text_object = _G ["DetailsPetOwnerFinderTextLeft2"] --not in use local follower_text_object = _G ["DetailsPetOwnerFinderTextLeft3"] --not in use - local find_pet_found_owner = function (ownerName, serial, nome, flag, self) + local find_pet_found_owner = function(ownerName, serial, nome, flag, self) local ownerGuid = _UnitGUID (ownerName) if (ownerGuid) then _detalhes.tabela_pets:Adicionar (serial, nome, flag, ownerGuid, ownerName, 0x00000417) @@ -453,7 +453,7 @@ end --> check pet owner name with correct declension for ruRU locale (from user 'denis-kam' on github) - local find_name_declension = function (petTooltip, playerName) + local find_name_declension = function(petTooltip, playerName) --> 2 - male, 3 - female for gender = 3, 2, -1 do for declensionSet = 1, GetNumDeclensionSets(playerName, gender) do @@ -469,7 +469,7 @@ return false end - local find_pet_owner = function (serial, nome, flag, self) + local find_pet_owner = function(serial, nome, flag, self) if (not _detalhes.tabela_vigente) then return end @@ -851,7 +851,7 @@ end local bykey - local sort = function (t1, t2) + local sort = function(t1, t2) return (t1 [bykey] or 0) > (t2 [bykey] or 0) end diff --git a/classes/custom_damagedone.lua b/classes/custom_damagedone.lua index 6f72f78c..4d419738 100644 --- a/classes/custom_damagedone.lua +++ b/classes/custom_damagedone.lua @@ -57,7 +57,7 @@ end local temp_table = {} -local target_func = function (main_table) +local target_func = function(main_table) local i = 1 for name, amount in _pairs (main_table) do local t = temp_table [i] @@ -73,7 +73,7 @@ local target_func = function (main_table) end end -local spells_used_func = function (main_table, target) +local spells_used_func = function(main_table, target) local i = 1 for spellid, spell_table in _pairs (main_table) do local target_amount = spell_table.targets [target] @@ -134,7 +134,7 @@ function atributo_custom:damagedoneTooltip (actor, target, spellid, combat, inst return else - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) GameCooltip:AddLine (name) GameCooltip:AddIcon (icon, 1, 1, 14, 14) @@ -193,7 +193,7 @@ function atributo_custom:damagedoneTooltip (actor, target, spellid, combat, inst break end - local name, _, icon = _GetSpellInfo (t[1]) + local name, _, icon = _GetSpellInfo(t[1]) GameCooltip:AddLine (name, FormatTooltipNumber (_, t[2])) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon (icon, 1, 1, 14, 14) diff --git a/classes/custom_healingdone.lua b/classes/custom_healingdone.lua index d6010d67..94b0bba0 100644 --- a/classes/custom_healingdone.lua +++ b/classes/custom_healingdone.lua @@ -50,7 +50,7 @@ local temp_table = {} - local target_func = function (main_table) + local target_func = function(main_table) local i = 1 for name, amount in _pairs (main_table) do local t = temp_table [i] @@ -66,7 +66,7 @@ end end - local spells_used_func = function (main_table, target) + local spells_used_func = function(main_table, target) local i = 1 for spellid, spell_table in _pairs (main_table) do local target_amount = spell_table.targets [target] @@ -127,7 +127,7 @@ return else - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) GameCooltip:AddLine (name) GameCooltip:AddIcon (icon, 1, 1, 14, 14) @@ -186,7 +186,7 @@ break end - local name, _, icon = _GetSpellInfo (t[1]) + local name, _, icon = _GetSpellInfo(t[1]) GameCooltip:AddLine (name, FormatTooltipNumber (_, t[2])) GameCooltip:AddIcon (icon, 1, 1, 14, 14) end diff --git a/core/control.lua b/core/control.lua index 1051b031..7966711b 100644 --- a/core/control.lua +++ b/core/control.lua @@ -94,7 +94,7 @@ -- try get the current encounter name during the encounter - local boss_found_not_registered = function (t, ZoneName, ZoneMapID, DifficultyID) + local boss_found_not_registered = function(t, ZoneName, ZoneMapID, DifficultyID) local boss_table = { index = 0, @@ -112,7 +112,7 @@ Details.tabela_vigente.is_boss = boss_table end - local boss_found = function (index, name, zone, mapid, diff, encounterid) + local boss_found = function(index, name, zone, mapid, diff, encounterid) local mapID = C_Map.GetBestMapForUnit ("player") local ejid @@ -1408,7 +1408,7 @@ end end - local fight_component = function (energy_container, misc_container, name) + local fight_component = function(energy_container, misc_container, name) local on_energy = energy_container._ActorTable [energy_container._NameIndexTable [name]] if (on_energy) then on_energy.fight_component = true @@ -1876,7 +1876,7 @@ DetailsFramework:ApplyStandardBackdrop(panel) - panel:SetScript("OnMouseDown", function (self, button) + panel:SetScript("OnMouseDown", function(self, button) if (button == "RightButton") then panel:Hide() end diff --git a/core/gears.lua b/core/gears.lua index ede5d2a6..36fd77ac 100644 --- a/core/gears.lua +++ b/core/gears.lua @@ -32,7 +32,7 @@ end _detalhes.chat_embed = _detalhes:CreateEventListener() _detalhes.chat_embed.startup = true - _detalhes.chat_embed.hook_settabname = function (frame, name, doNotSave) + _detalhes.chat_embed.hook_settabname = function(frame, name, doNotSave) if (not doNotSave) then if (_detalhes.chat_tab_embed.enabled and _detalhes.chat_tab_embed.tab_name ~= "") then if (_detalhes.chat_tab_embed_onframe == frame) then @@ -42,7 +42,7 @@ end end end end - _detalhes.chat_embed.hook_closetab = function (frame, fallback) + _detalhes.chat_embed.hook_closetab = function(frame, fallback) if (_detalhes.chat_tab_embed.enabled and _detalhes.chat_tab_embed.tab_name ~= "") then if (_detalhes.chat_tab_embed_onframe == frame) then _detalhes.chat_tab_embed.enabled = false @@ -967,7 +967,7 @@ function _detalhes.storage:DBGuildSync() end local OnlyFromCurrentRaidTier = true -local encounter_is_current_tier = function (encounterID) +local encounter_is_current_tier = function(encounterID) if (OnlyFromCurrentRaidTier) then local mapID = _detalhes:GetInstanceIdFromEncounterId (encounterID) if (mapID) then @@ -982,7 +982,7 @@ local encounter_is_current_tier = function (encounterID) return true end -local have_encounter = function (db, ID) +local have_encounter = function(db, ID) local minTime = ID - 120 local maxTime = ID + 120 @@ -1006,7 +1006,7 @@ local have_encounter = function (db, ID) return false end -local have_recent_requested_encounter = function (ID) +local have_recent_requested_encounter = function(ID) local minTime = ID - 120 local maxTime = ID + 120 @@ -1992,7 +1992,7 @@ function ilvl_core:CalcItemLevel (unitid, guid, shout) end _detalhes.ilevel.CalcItemLevel = ilvl_core.CalcItemLevel -inspect_frame:SetScript ("OnEvent", function (self, event, ...) +inspect_frame:SetScript ("OnEvent", function(self, event, ...) local guid = select (1, ...) if (inspecting [guid]) then @@ -2068,7 +2068,7 @@ function ilvl_core:GetItemLevel (unitid, guid, is_forced, try_number) --NotifyInspect (unitid) end -local NotifyInspectHook = function (unitid) +local NotifyInspectHook = function(unitid) local unit = unitid:gsub ("%d+", "") if ((IsInRaid() or IsInGroup()) and (_detalhes:GetZoneType() == "raid" or _detalhes:GetZoneType() == "party")) then @@ -2441,7 +2441,7 @@ if (DetailsFramework.IsWotLKWow()) then local MIN_SPECS = 4 --put the spec with more talent point to the top - table.sort (pointsPerSpec, function (t1, t2) return t1[2] > t2[2] end) + table.sort (pointsPerSpec, function(t1, t2) return t1[2] > t2[2] end) --get the spec with more points spent local spec = pointsPerSpec[1] diff --git a/core/parser.lua b/core/parser.lua index bdd7412d..d28461bc 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -567,7 +567,7 @@ -- /run local f=CreateFrame("frame");f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");f:SetScript("OnEvent",function(self, ...) local a = select(6, ...);if (a=="")then print (...) end end) -- /run local f=CreateFrame("frame");f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");f:SetScript("OnEvent",function(self, ...) local a = select(3, ...);print (a);if (a=="SPELL_CAST_SUCCESS")then print (...) end end) - local who_aggro = function (self) + local who_aggro = function(self) if ((_detalhes.LastPullMsg or 0) + 30 > time()) then _detalhes.WhoAggroTimer = nil return @@ -594,7 +594,7 @@ local lastRecordFound = {id = 0, diff = 0, combatTime = 0} - _detalhes.PrintEncounterRecord = function (self) + _detalhes.PrintEncounterRecord = function(self) --> this block won't execute if the storage isn't loaded --> self is a timer reference from C_Timer @@ -1005,7 +1005,7 @@ else if (who_name:find ("%[")) then damage_cache [who_name] = este_jogador - local _, _, icon = _GetSpellInfo (spellid or 1) + local _, _, icon = _GetSpellInfo(spellid or 1) este_jogador.spellicon = icon else --_detalhes:Msg ("Unknown actor with unknown serial ", spellname, who_name) @@ -1434,7 +1434,7 @@ else if (who_name:find ("%[")) then damage_cache [who_name] = este_jogador - local _, _, icon = _GetSpellInfo (spellid or 1) + local _, _, icon = _GetSpellInfo(spellid or 1) este_jogador.spellicon = icon end end @@ -1639,7 +1639,7 @@ else if (who_name:find ("%[")) then damage_cache [who_name] = este_jogador - local _, _, icon = _GetSpellInfo (spellid or 1) + local _, _, icon = _GetSpellInfo(spellid or 1) este_jogador.spellicon = icon else --_detalhes:Msg ("Unknown actor with unknown serial ", spellname, who_name) @@ -3501,7 +3501,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 --AlternatePowerEnableFrame:RegisterEvent ("PLAYER_REGEN_ENABLED") AlternatePowerEnableFrame.IsRunning = false - AlternatePowerEnableFrame:SetScript ("OnEvent", function (self, event) + AlternatePowerEnableFrame:SetScript ("OnEvent", function(self, event) if (event == "UNIT_POWER_BAR_SHOW") then AlternatePowerMonitorFrame:RegisterEvent ("UNIT_POWER_UPDATE") --> 8.0 AlternatePowerEnableFrame.IsRunning = true @@ -3511,7 +3511,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 end end) - AlternatePowerMonitorFrame:SetScript ("OnEvent", function (self, event, unitID, powerType) + AlternatePowerMonitorFrame:SetScript ("OnEvent", function(self, event, unitID, powerType) if (powerType == "ALTERNATE") then local actorName = _detalhes:GetCLName (unitID) if (actorName) then @@ -3706,7 +3706,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 ------------------------------------------------------------------------------------------------ --> build containers on the fly if (not este_jogador.cooldowns_defensive) then - este_jogador.cooldowns_defensive = _detalhes:GetOrderNumber (who_name) + este_jogador.cooldowns_defensive = _detalhes:GetOrderNumber(who_name) este_jogador.cooldowns_defensive_targets = {} este_jogador.cooldowns_defensive_spells = container_habilidades:NovoContainer (container_misc) --> cria o container das habilidades end @@ -3825,7 +3825,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 --> build containers on the fly if (not este_jogador.interrupt) then - este_jogador.interrupt = _detalhes:GetOrderNumber (who_name) + este_jogador.interrupt = _detalhes:GetOrderNumber(who_name) este_jogador.interrupt_targets = {} este_jogador.interrupt_spells = container_habilidades:NovoContainer (container_misc) este_jogador.interrompeu_oque = {} @@ -3864,7 +3864,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 if (meu_dono) then if (not meu_dono.interrupt) then - meu_dono.interrupt = _detalhes:GetOrderNumber (who_name) + meu_dono.interrupt = _detalhes:GetOrderNumber(who_name) meu_dono.interrupt_targets = {} meu_dono.interrupt_spells = container_habilidades:NovoContainer (container_misc) meu_dono.interrompeu_oque = {} @@ -4033,7 +4033,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 if (not este_jogador.dispell) then --> constr�i aqui a tabela dele - este_jogador.dispell = _detalhes:GetOrderNumber (who_name) + este_jogador.dispell = _detalhes:GetOrderNumber(who_name) este_jogador.dispell_targets = {} este_jogador.dispell_spells = container_habilidades:NovoContainer (container_misc) este_jogador.dispell_oque = {} @@ -4089,7 +4089,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 --> verifica se tem dono e adiciona o interrupt para o dono if (meu_dono) then if (not meu_dono.dispell) then - meu_dono.dispell = _detalhes:GetOrderNumber (who_name) + meu_dono.dispell = _detalhes:GetOrderNumber(who_name) meu_dono.dispell_targets = {} meu_dono.dispell_spells = container_habilidades:NovoContainer (container_misc) meu_dono.dispell_oque = {} @@ -4140,7 +4140,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 --> build containers on the fly if (not este_jogador.ress) then - este_jogador.ress = _detalhes:GetOrderNumber (who_name) + este_jogador.ress = _detalhes:GetOrderNumber(who_name) este_jogador.ress_targets = {} este_jogador.ress_spells = container_habilidades:NovoContainer (container_misc) --> cria o container das habilidades usadas para interromper end @@ -4255,7 +4255,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 if (not este_jogador.cc_break) then --> constr�i aqui a tabela dele - este_jogador.cc_break = _detalhes:GetOrderNumber (who_name) + este_jogador.cc_break = _detalhes:GetOrderNumber(who_name) este_jogador.cc_break_targets = {} este_jogador.cc_break_spells = container_habilidades:NovoContainer (container_misc) este_jogador.cc_break_oque = {} @@ -5831,7 +5831,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 local saver = CreateFrame ("frame", nil, UIParent) saver:RegisterEvent ("PLAYER_LOGOUT") - saver:SetScript ("OnEvent", function (...) + saver:SetScript ("OnEvent", function(...) --save the time played on this class, run protected pcall(function() local className = select(2, UnitClass("player")) @@ -6348,7 +6348,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> battleground parser - _detalhes.pvp_parser_frame:SetScript ("OnEvent", function (self, event) + _detalhes.pvp_parser_frame:SetScript ("OnEvent", function(self, event) self:ReadPvPData() end) diff --git a/core/plugins.lua b/core/plugins.lua index 9ffdd7a3..ba36b273 100644 --- a/core/plugins.lua +++ b/core/plugins.lua @@ -237,7 +237,7 @@ ["STATUSBAR"] = 0 } - local OnEnableFunction = function (self) + local OnEnableFunction = function(self) self.__parent.Enabled = true --self = frame __parent = plugin object local instance = _detalhes:GetInstance (self.__parent.instance_id) @@ -247,14 +247,14 @@ _detalhes:SendEvent ("SHOW", self.__parent) end - local OnDisableFunction = function (self) + local OnDisableFunction = function(self) _detalhes:SendEvent ("HIDE", self.__parent) if (bit.band (self.__parent.__options, DETAILSPLUGIN_ALWAYSENABLED) == 0) then self.__parent.Enabled = false end end - local BuildDefaultStatusBarMembers = function (self) + local BuildDefaultStatusBarMembers = function(self) self.childs = {} self.__index = self function self:Setup() @@ -272,10 +272,10 @@ print ("Thank You Sir!===================") end - local register_event_func = function (self, event) + local register_event_func = function(self, event) self.Frame:RegisterEvent (event) end - local unregister_event_func = function (self, event) + local unregister_event_func = function(self, event) self.Frame:UnregisterEvent (event) end @@ -544,7 +544,7 @@ end) - f:SetScript ("OnMouseDown", function (self, button) + f:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then f.ClosePlugin() end @@ -588,7 +588,7 @@ --> re set the point of the frame within the main plugin window f.RefreshFrame (pluginObject.__var_Frame) - C_Timer.After (0.016, function () + C_Timer.After (0.016, function() f.RefreshFrame (pluginObject.__var_Frame) end) @@ -637,7 +637,7 @@ return newButton end - local on_hide = function (self) + local on_hide = function(self) DetailsPluginContainerWindow.ClosePlugin() end diff --git a/core/plugins_raid.lua b/core/plugins_raid.lua index ba4ce154..bdd04fb4 100644 --- a/core/plugins_raid.lua +++ b/core/plugins_raid.lua @@ -300,9 +300,9 @@ local spellname if (spellid > 10) then - spellname = GetSpellLink (extraSpellID) + spellname = GetSpellLink(extraSpellID) else - spellname = _GetSpellInfo (extraSpellID) + spellname = _GetSpellInfo(extraSpellID) end if (channel == "RAID") then @@ -342,9 +342,9 @@ local spellname if (spellid > 10) then - spellname = GetSpellLink (extraSpellID) + spellname = GetSpellLink(extraSpellID) else - spellname = _GetSpellInfo (extraSpellID) + spellname = _GetSpellInfo(extraSpellID) end if (custom ~= "") then @@ -416,9 +416,9 @@ local spellname if (spellid > 10) then - spellname = GetSpellLink (spellid) + spellname = GetSpellLink(spellid) else - spellname = _GetSpellInfo (spellid) + spellname = _GetSpellInfo(spellid) end local custom = _detalhes.announce_cooldowns.custom @@ -478,9 +478,9 @@ local spellname if (spellid > 10) then - spellname = GetSpellLink (spellid) + spellname = GetSpellLink(spellid) else - spellname = _GetSpellInfo (spellid) + spellname = _GetSpellInfo(spellid) end if (second < 10) then @@ -578,9 +578,9 @@ if (type (this_death[1]) == "boolean" and this_death[1] and this_death[4]+5 > time) then local spelllink if (this_death [2] > 10) then - spelllink = GetSpellLink (this_death [2]) + spelllink = GetSpellLink(this_death [2]) else - spelllink = "[" .. _GetSpellInfo (this_death [2]) .. "]" + spelllink = "[" .. _GetSpellInfo(this_death [2]) .. "]" end spells = spelllink .. ": " .. _detalhes:ToK2 (_math_floor (this_death [3])) .. " " .. spells last = o-1 diff --git a/core/plugins_statusbar.lua b/core/plugins_statusbar.lua index 327ee45f..92a38d40 100644 --- a/core/plugins_statusbar.lua +++ b/core/plugins_statusbar.lua @@ -204,7 +204,7 @@ --> select a new plugin in for an instance anchor - local ChoosePlugin = function (_, _, index, current_child, anchor) + local ChoosePlugin = function(_, _, index, current_child, anchor) GameCooltip:Close() @@ -294,7 +294,7 @@ local on_enter_backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16} - local OnEnter = function (frame) + local OnEnter = function(frame) --|TTexturePath: size X: size Y: point offset Y X : texture size : coordx1 L : coordx2 R : coordy1 T : coordy2 B |t -- left click: 0.0019531:0.1484375:0.4257813:0.6210938 right click: 0.0019531:0.1484375:0.6269531:0.8222656 @@ -322,7 +322,7 @@ end --> on leave - local OnLeave = function (frame) + local OnLeave = function(frame) frame:SetBackdrop (nil) @@ -333,7 +333,7 @@ return true end - local OnMouseUp = function (frame, mouse) + local OnMouseUp = function(frame, mouse) if (mouse == "LeftButton") then if (not frame.child.Setup) then @@ -814,7 +814,7 @@ do _detalhes.gump:NewLabel (window, nil, "$parentSegmentOptionLabel", "segmentOptionLabel", Loc ["STRING_PLUGIN_SEGMENTTYPE"]) window.segmentOptionLabel:SetPoint (10, -15) - local onSelectSegmentType = function (_, child, thistype) + local onSelectSegmentType = function(_, child, thistype) child.options.segmentType = thistype PSegment:Change() end @@ -1003,7 +1003,7 @@ do _detalhes.gump:NewLabel (window, nil, "$parentClockTypeLabel", "ClockTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) window.ClockTypeLabel:SetPoint (10, -15) - local onSelectClockType = function (_, child, thistype) + local onSelectClockType = function(_, child, thistype) child.options.timeType = thistype _detalhes:ClockPluginTick() end @@ -1358,7 +1358,7 @@ do myframe.widget:RegisterEvent ("PLAYER_MONEY") myframe.widget:RegisterEvent ("PLAYER_ENTERING_WORLD") - myframe.widget:SetScript ("OnEvent", function (event) + myframe.widget:SetScript ("OnEvent", function(event) if (event == "PLAYER_ENTERING_WORLD") then return PGold:ScheduleTimer ("GoldPluginTick", 10) end @@ -1417,7 +1417,7 @@ do _detalhes.gump:NewLabel (window, _, "$parentTimeTypeLabel", "TimeTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) window.TimeTypeLabel:SetPoint (10, -15) - local onSelectClockType = function (_, child, thistype) + local onSelectClockType = function(_, child, thistype) child.options.timeType = thistype child:UpdateClock() end @@ -1492,7 +1492,7 @@ end) _detalhes.gump:NewLabel (window, _, "$parentTextStyleLabel", "textstyle", Loc ["STRING_PLUGINOPTIONS_TEXTSTYLE"]) window.textstyle:SetPoint (10, -15) - local onSelectTextStyle = function (_, child, style) + local onSelectTextStyle = function(_, child, style) window.instance.StatusBar.left.options.textStyle = style window.instance.StatusBar.center.options.textStyle = style @@ -1564,7 +1564,7 @@ end) window.fonsizeSlider:SetPoint ("left", window.fonsizeLabel, "right", 2) window.fonsizeSlider:SetThumbSize (50) --window.fonsizeSlider.useDecimals = true - window.fonsizeSlider:SetHook ("OnValueChange", function (self, child, amount) + window.fonsizeSlider:SetHook ("OnValueChange", function(self, child, amount) --_detalhes.StatusBar:ApplyOptions (child, "textsize", amount) _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textsize", amount) _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.center, "textsize", amount) @@ -1572,7 +1572,7 @@ end) end) --> text font - local onSelectFont = function (_, child, fontName) + local onSelectFont = function(_, child, fontName) --_detalhes.StatusBar:ApplyOptions (child, "textface", fontName) _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textface", fontName) @@ -1605,7 +1605,7 @@ end) _detalhes.gump:NewSlider (window, _, "$parentSliderAlignX", "alignXSlider", 160, 20, -20, 20, 1, 0) window.alignXSlider:SetPoint ("left", window.alignXLabel, "right", 2) window.alignXSlider:SetThumbSize (40) - window.alignXSlider:SetHook ("OnValueChange", function (self, child, amount) + window.alignXSlider:SetHook ("OnValueChange", function(self, child, amount) _detalhes.StatusBar:ApplyOptions (child, "textxmod", amount) end) @@ -1616,7 +1616,7 @@ end) _detalhes.gump:NewSlider (window, _, "$parentSliderAlignY", "alignYSlider", 160, 20, -10, 10, 1, 0) window.alignYSlider:SetPoint ("left", window.alignYLabel, "right", 2) window.alignYSlider:SetThumbSize (40) - window.alignYSlider:SetHook ("OnValueChange", function (self, child, amount) + window.alignYSlider:SetHook ("OnValueChange", function(self, child, amount) _detalhes.StatusBar:ApplyOptions (child, "textymod", amount) end) diff --git a/core/plugins_toolbar.lua b/core/plugins_toolbar.lua index b0a18b86..2fef2465 100644 --- a/core/plugins_toolbar.lua +++ b/core/plugins_toolbar.lua @@ -171,7 +171,7 @@ end local next_check = 0.8 --check if the mouse is still interacting with the menu or with the button - button:SetScript ("OnUpdate", function (self, elapsed) + button:SetScript ("OnUpdate", function(self, elapsed) next_check = next_check - elapsed if (next_check < 0) then diff --git a/core/timemachine.lua b/core/timemachine.lua index 32d0a0ad..4c82e548 100644 --- a/core/timemachine.lua +++ b/core/timemachine.lua @@ -26,7 +26,7 @@ timeMachine.ligada = false - local calc_for_pvp = function (self) + local calc_for_pvp = function(self) for tipo, tabela in _pairs (self.tabelas) do for nome, jogador in _ipairs (tabela) do if (jogador) then @@ -45,7 +45,7 @@ end end - local calc_for_pve = function (self) + local calc_for_pve = function(self) for tipo, tabela in _pairs (self.tabelas) do for nome, jogador in _ipairs (tabela) do if (jogador) then diff --git a/core/util.lua b/core/util.lua index b6d8e4e7..7c4c6ad7 100644 --- a/core/util.lua +++ b/core/util.lua @@ -336,7 +336,7 @@ end --> get the fractional number representing the alphabetical letter - function _detalhes:GetOrderNumber (who_name) + function _detalhes:GetOrderNumber(who_name) --local name = upper (who_name .. "zz") --local byte1 = _math_abs (_string_byte (name, 2)-91)/1000000 --return byte1 + _math_abs (_string_byte (name, 1)-91)/10000 @@ -727,10 +727,10 @@ local arguments_cache = {} local parameters_cache = {} - local replace_arg = function (i) + local replace_arg = function(i) return arguments_cache [tonumber(i)] end - local run_function = function (str) + local run_function = function(str) --> cache functions local func, errortext = function_cache [str] if (not func) then @@ -1330,7 +1330,7 @@ end end --> work around to solve the UI Frame Flashes - local onFinish = function (self) + local onFinish = function(self) if (self.showWhenDone) then self.frame:SetAlpha (1) else @@ -1343,12 +1343,12 @@ end end end - local stop = function (self) + local stop = function(self) local FlashAnimation = self.FlashAnimation FlashAnimation:Stop() end - local flash = function (self, fadeInTime, fadeOutTime, flashDuration, showWhenDone, flashInHoldTime, flashOutHoldTime, loopType) + local flash = function(self, fadeInTime, fadeOutTime, flashDuration, showWhenDone, flashInHoldTime, flashOutHoldTime, loopType) local FlashAnimation = self.FlashAnimation @@ -1407,7 +1407,7 @@ end - local fade_OUT_finished_func = function (frame) + local fade_OUT_finished_func = function(frame) if (frame:IsShown() and frame.fading_out) then frame.hidden = false frame.faded = false @@ -1417,17 +1417,17 @@ end end end - local just_fade_func = function (frame) + local just_fade_func = function(frame) frame.hidden = false frame.faded = true frame.fading_in = false end - local anim_OUT_alpha_func = function (frame) + local anim_OUT_alpha_func = function(frame) frame.fading_out = false end - local anim_IN_alpha_func = function (frame) + local anim_IN_alpha_func = function(frame) frame.fading_in = false end diff --git a/core/windows.lua b/core/windows.lua index 36207ba8..e273e5b4 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -153,7 +153,7 @@ end --> simple left and right animations by delta time - local animation_left_simple = function (self, deltaTime) + local animation_left_simple = function(self, deltaTime) self.inicio = self.inicio - (animation_speed * deltaTime) self:SetValue (self.inicio) if (self.inicio-1 <= self.fim) then @@ -162,7 +162,7 @@ end end - local animation_right_simple = function (self, deltaTime) + local animation_right_simple = function(self, deltaTime) self.inicio = self.inicio + (animation_speed * deltaTime) self:SetValue (self.inicio) if (self.inicio+0.1 >= self.fim) then @@ -172,7 +172,7 @@ end --> animation with acceleration - local animation_left_with_accel = function (self, deltaTime) + local animation_left_with_accel = function(self, deltaTime) local distance = self.inicio - self.fim -- DefaultSpeed * max of ( min of (Distance / TriggerSpeed , MaxSpeed) , LowSpeed ) @@ -186,7 +186,7 @@ end end - local animation_right_with_accel = function (self, deltaTime) + local animation_right_with_accel = function(self, deltaTime) local distance = self.fim - self.inicio local calcAnimationSpeed = animation_speed * _math_max (_math_min (distance/animation_speed_hightravel_trigger, animation_speed_hightravel_maxspeed), animation_speed_lowtravel_minspeed) @@ -1165,14 +1165,14 @@ mmoc_title:SetPoint ("topleft", mmoc, "topright", 5, 0) mmoc_desc:SetPoint ("topleft", mmoc_title, "bottomleft", 0, -1) - local on_enter = function (self, capsule) + local on_enter = function(self, capsule) capsule.image:SetDesaturated (false) end - local on_leave = function (self, capsule) + local on_leave = function(self, capsule) capsule.image:SetDesaturated (true) end - local on_click = function (_, _, website) + local on_click = function(_, _, website) if (website == 1) then _detalhes:CopyPaste ([[http://www.wowinterface.com/downloads/addcomment.php?action=addcomment&fileid=23056]]) @@ -1229,7 +1229,7 @@ f.options_button:SetPoint ("topleft", f, "topleft", 10, -100) f.options_button:SetHeight (170) f.options_button:SetWidth (170) - f.options_button:SetScript ("OnClick", function (self) + f.options_button:SetScript ("OnClick", function(self) local lower_instance = _detalhes:GetLowerInstanceNumber() if (not lower_instance) then --> no window opened? @@ -1253,7 +1253,7 @@ f.new_window_button:SetText (Loc ["STRING_MINIMAPMENU_NEWWINDOW"]) f.new_window_button:SetPoint ("topleft", f, "topleft", 10, -125) f.new_window_button:SetWidth (170) - f.new_window_button:SetScript ("OnClick", function (self) + f.new_window_button:SetScript ("OnClick", function(self) _detalhes:CriarInstancia (_, true) end) @@ -1304,7 +1304,7 @@ updatewindow_frame.close:SetPoint ("bottomleft", updatewindow_frame, "bottomleft", 8, 4) updatewindow_frame.close:SetText ("Close") - updatewindow_frame.close:SetScript ("OnClick", function (self) + updatewindow_frame.close:SetScript ("OnClick", function(self) DetailsUpdateDialog:Hide() editbox:ClearFocus() end) @@ -1339,7 +1339,7 @@ HotCornerIgnore = true, - OnClick = function (self, button) + OnClick = function(self, button) if (button == "LeftButton") then if (IsControlKeyDown()) then @@ -1452,7 +1452,7 @@ end end, - OnTooltipShow = function (tooltip) + OnTooltipShow = function(tooltip) tooltip:AddLine ("Details!", 1, 1, 1) if (_detalhes.minimap.onclick_what_todo == 1) then tooltip:AddLine (Loc ["STRING_MINIMAP_TOOLTIP1"]) @@ -1477,7 +1477,7 @@ function _detalhes:DoRegisterHotCorner() --register lib-hotcorners - local on_click_on_hotcorner_button = function (frame, button) + local on_click_on_hotcorner_button = function(frame, button) if (_detalhes.hotcorner_topleft.onclick_what_todo == 1) then local lower_instance = _detalhes:GetLowerInstanceNumber() if (not lower_instance) then @@ -1493,11 +1493,11 @@ end end - local quickclick_func1 = function (frame, button) + local quickclick_func1 = function(frame, button) _detalhes.tabela_historico:resetar() end - local quickclick_func2 = function (frame, button) + local quickclick_func2 = function(frame, button) local lower_instance = _detalhes:GetLowerInstanceNumber() if (not lower_instance) then local instance = _detalhes:GetInstance (1) diff --git a/frames/fw_mods.lua b/frames/fw_mods.lua index f2a64979..680fbf54 100644 --- a/frames/fw_mods.lua +++ b/frames/fw_mods.lua @@ -140,7 +140,7 @@ function gump:NewDetailsButton (parent, container, instancia, func, param1, para end end) - new_button:SetScript ("OnMouseUp", function (self, button) + new_button:SetScript ("OnMouseUp", function(self, button) if (not self:IsEnabled()) then return end @@ -324,7 +324,7 @@ function gump:NewTextBox (parent, container, member, func, param1, param2, w, h, end end - local EnterPress = function (byScript) + local EnterPress = function(byScript) if (editbox.EnterHook) then editbox.EnterHook() @@ -444,13 +444,13 @@ function gump:NewTextBox (parent, container, member, func, param1, param2, w, h, end end) - editbox:SetScript ("OnChar", function (self, text) + editbox:SetScript ("OnChar", function(self, text) if (editbox.InputHook) then editbox:InputHook (text) end end) - editbox:SetScript ("OnTextChanged", function (self, userChanged) + editbox:SetScript ("OnTextChanged", function(self, userChanged) if (editbox.TextChangeedHook and userChanged) then editbox:TextChangeedHook (userChanged) end @@ -463,13 +463,13 @@ function gump:NewTextBox (parent, container, member, func, param1, param2, w, h, end end) - editbox.SetNext = function (_, NextBox) + editbox.SetNext = function(_, NextBox) if (NextBox) then editbox.next = NextBox end end - editbox.SetLabel = function (_, Label) + editbox.SetLabel = function(_, Label) if (Label) then editbox.label = Label editbox.label:SetTextColor (.8, .8, .8, 1) @@ -608,14 +608,14 @@ function gump:NewScrollBar2 (master, slave, x, y) self:SetScript ("OnUpdate", nil) end) --> isso aqui pra quando o slider ativar, o scroll fica na posi��o zero - botao_cima:SetScript ("OnEnable", function (self) + botao_cima:SetScript ("OnEnable", function(self) local current = slider_gump:GetValue() if (current == 0) then botao_cima:Disable() end end) - slider_gump:SetScript ("OnValueChanged", function (self) + slider_gump:SetScript ("OnValueChanged", function(self) local current = self:GetValue() master:SetVerticalScroll (current) @@ -635,22 +635,22 @@ function gump:NewScrollBar2 (master, slave, x, y) end) - slider_gump:SetScript ("OnShow", function (self) + slider_gump:SetScript ("OnShow", function(self) botao_cima:Show() botao_baixo:Show() end) - slider_gump:SetScript ("OnDisable", function (self) + slider_gump:SetScript ("OnDisable", function(self) botao_cima:Disable() botao_baixo:Disable() end) - slider_gump:SetScript ("OnEnable", function (self) + slider_gump:SetScript ("OnEnable", function(self) botao_cima:Enable() botao_baixo:Enable() end) - master:SetScript ("OnMouseWheel", function (self, delta) + master:SetScript ("OnMouseWheel", function(self, delta) if (not slider_gump:IsEnabled()) then return end diff --git a/frames/window_api.lua b/frames/window_api.lua index e9f4147c..e9a766bf 100644 --- a/frames/window_api.lua +++ b/frames/window_api.lua @@ -40,7 +40,7 @@ function Details:CreateAPI2Frame() local api = Details.API_Description.namespaces[1].api --on select api on the menu - local onSelectAPI = function (self) + local onSelectAPI = function(self) local apiName = apiFunctionNames [self.index] if (not apiName) then Details:Msg ("API name not found:", apiName) @@ -124,7 +124,7 @@ function Details:CreateAPI2Frame() end --menu scroll - local apiMenuScrollRefresh = function (self, data, offset, total_lines) + local apiMenuScrollRefresh = function(self, data, offset, total_lines) for i = 1, total_lines do local index = i + offset local apiName = data [index] @@ -147,11 +147,11 @@ function Details:CreateAPI2Frame() end local api2ScrollMenu = DetailsFramework:CreateScrollBox (Api2Frame, "$parentApi2MenuScroll", apiMenuScrollRefresh, apiFunctionNames, scrollWidth, scrollHeight, lineAmount, lineHeight) - DetailsFramework:ReskinSlider (api2ScrollMenu) + DetailsFramework:ReskinSlider(api2ScrollMenu) api2ScrollMenu:SetPoint ("topleft", Api2Frame, "topleft", 10, yStart) Api2Frame.scrollMenu = api2ScrollMenu - local lineOnEnter = function (self) + local lineOnEnter = function(self) self:SetBackdropColor (unpack (backdropColorOnEnter)) local apiName = apiFunctionNames [self.index] @@ -171,7 +171,7 @@ function Details:CreateAPI2Frame() GameCooltip2:ShowCooltip() end - local lineOnLeave = function (self) + local lineOnLeave = function(self) if (currentSelected == self.index) then self:SetBackdropColor (unpack (backdropColorSelected)) else @@ -183,7 +183,7 @@ function Details:CreateAPI2Frame() --create lines for i = 1, lineAmount do - api2ScrollMenu:CreateLine (function (self, index) + api2ScrollMenu:CreateLine (function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 1, -((index-1)*(lineHeight+1)) - 1) line:SetSize (scrollWidth - 2, lineHeight) @@ -245,7 +245,7 @@ function Details:CreateAPI2Frame() parametersHeader.required:SetPoint ("left", parametersHeader, "left", space2, 0) parametersHeader.default:SetPoint ("left", parametersHeader, "left", space3, 0) - local parameterOnEnter = function (self) + local parameterOnEnter = function(self) GameCooltip2:Preset(2) GameCooltip2:SetOwner (self) @@ -259,7 +259,7 @@ function Details:CreateAPI2Frame() self:SetBackdropColor (unpack (backdropColorOnEnter)) end - local parameterOnLeave = function (self) + local parameterOnLeave = function(self) GameCooltip2:Hide() self:SetBackdropColor (unpack (backdropColor)) end @@ -307,10 +307,10 @@ function Details:CreateAPI2Frame() returnHeader.name:SetPoint ("left", returnHeader, "left", 2, 0) returnHeader.typeData:SetPoint ("left", returnHeader, "left", space1, 0) - local returnOnEnter = function (self) + local returnOnEnter = function(self) self:SetBackdropColor (unpack (backdropColorOnEnter)) end - local returnOnLeave = function (self) + local returnOnLeave = function(self) self:SetBackdropColor (unpack (backdropColor)) end diff --git a/frames/window_benchmark.lua b/frames/window_benchmark.lua index f381f889..13dc23b5 100644 --- a/frames/window_benchmark.lua +++ b/frames/window_benchmark.lua @@ -96,7 +96,7 @@ local libwindow = LibStub("LibWindow-1.1") f:RegisterEvent ("PLAYER_REGEN_DISABLED") f:RegisterEvent ("PLAYER_REGEN_ENABLED") - f:SetScript ("OnEvent", function (self, event, ...) + f:SetScript ("OnEvent", function(self, event, ...) if (event == "PLAYER_REGEN_DISABLED") then f.StartNewBenchmark() diff --git a/frames/window_bookmark.lua b/frames/window_bookmark.lua index 25173318..f083a8c3 100644 --- a/frames/window_bookmark.lua +++ b/frames/window_bookmark.lua @@ -14,7 +14,7 @@ function Details:OpenBookmarkConfig() panel:SetBackdropColor(.1, .1, .1, .9) panel.blocks = {} - local clear_func = function (self, button, id) + local clear_func = function(self, button, id) if (Details.switch.table [id]) then Details.switch.table [id].atributo = nil Details.switch.table [id].sub_atributo = nil @@ -23,7 +23,7 @@ function Details:OpenBookmarkConfig() end end - local select_attribute = function (_, _, _, attribute, sub_atribute) + local select_attribute = function(_, _, _, attribute, sub_atribute) if (not sub_atribute) then return end @@ -34,7 +34,7 @@ function Details:OpenBookmarkConfig() end local cooltip_color = {.1, .1, .1, .3} - local set_att = function (self, button, id) + local set_att = function(self, button, id) panel.selecting_slot = id GameCooltip:Reset() GameCooltip:SetType (3) @@ -52,11 +52,11 @@ function Details:OpenBookmarkConfig() local button_backdrop = {bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 64, insets = {left=0, right=0, top=0, bottom=0}} - local set_onenter = function (self, capsule) + local set_onenter = function(self, capsule) self:SetBackdropColor (1, 1, 1, 0.9) capsule.icon:SetBlendMode ("ADD") end - local set_onleave = function (self, capsule) + local set_onleave = function(self, capsule) self:SetBackdropColor (0, 0, 0, 0.5) capsule.icon:SetBlendMode ("BLEND") end diff --git a/frames/window_brokertexteditor.lua b/frames/window_brokertexteditor.lua index 5b896bf5..fae48876 100644 --- a/frames/window_brokertexteditor.lua +++ b/frames/window_brokertexteditor.lua @@ -34,7 +34,7 @@ function Details:OpenBrokerTextEditor() end) local option_selected = 1 - local onclick= function (_, _, value) + local onclick= function(_, _, value) option_selected = value end local AddOptions = { @@ -172,7 +172,7 @@ function Details:OpenBrokerTextEditor() self:HighlightText( Start, #ColorCode + ( #Replacement - #Selection ) + #COLOR_END + End ); end - local color_func = function (_, r, g, b, a) + local color_func = function(_, r, g, b, a) local hex = Details:hex (a*255)..Details:hex (r*255)..Details:hex (g*255)..Details:hex (b*255) ColorSelection ( textentry.editbox, "|c" .. hex) end diff --git a/frames/window_cdtracker.lua b/frames/window_cdtracker.lua index be62e0ab..63e00477 100644 --- a/frames/window_cdtracker.lua +++ b/frames/window_cdtracker.lua @@ -379,7 +379,7 @@ end {--enable ocd type = "toggle", get = function() return Details.ocd_tracker.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then Details.CooldownTracking.EnableTracker() else @@ -393,7 +393,7 @@ end {--show only in group type = "toggle", get = function() return Details.ocd_tracker.show_conditions.only_in_group end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.show_conditions.only_in_group = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -404,7 +404,7 @@ end {--show only inside instances type = "toggle", get = function() return Details.ocd_tracker.show_conditions.only_inside_instance end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.show_conditions.only_inside_instance = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -414,7 +414,7 @@ end {--lock frame type = "toggle", get = function() return Details.ocd_tracker.framme_locked end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.framme_locked = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -427,7 +427,7 @@ end {--filter: show raid wide defensive cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["defensive-raid"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["defensive-raid"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -438,7 +438,7 @@ end {--filter: show target defensive cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["defensive-target"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["defensive-target"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -449,7 +449,7 @@ end {--filter: show personal defensive cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["defensive-personal"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["defensive-personal"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -460,7 +460,7 @@ end {--filter: show ofensive cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["ofensive"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["ofensive"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -471,7 +471,7 @@ end {--filter: show utility cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["utility"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["utility"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -482,7 +482,7 @@ end {--filter: show interrupt cooldowns type = "toggle", get = function() return Details.ocd_tracker.filters["interrupt"] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.filters["interrupt"] = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -495,7 +495,7 @@ end {--bar width type = "range", get = function() return Details.ocd_tracker.width end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.width = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -509,7 +509,7 @@ end {--bar height type = "range", get = function() return Details.ocd_tracker.height end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.height = value Details.CooldownTracking.RefreshCooldownFrames() end, @@ -523,7 +523,7 @@ end {--bar height type = "range", get = function() return Details.ocd_tracker.lines_per_column end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.ocd_tracker.lines_per_column = floor(value) Details.CooldownTracking.RefreshCooldownFrames() end, diff --git a/frames/window_classcolor.lua b/frames/window_classcolor.lua index 3d98f3a8..c2263544 100644 --- a/frames/window_classcolor.lua +++ b/frames/window_classcolor.lua @@ -19,7 +19,7 @@ function Details:OpenClassColorsConfig() local y = -50 - local callback = function (button, r, g, b, a, self) + local callback = function(button, r, g, b, a, self) self.MyObject.my_texture:SetVertexColor (r, g, b) Details.class_colors [self.MyObject.my_class][1] = r Details.class_colors [self.MyObject.my_class][2] = g @@ -27,13 +27,13 @@ function Details:OpenClassColorsConfig() Details:RefreshMainWindow (-1, true) end - local set_color = function (self, button, class, index) + local set_color = function(self, button, class, index) local current_class_color = Details.class_colors [class] local r, g, b = unpack (current_class_color) DF:ColorPick (self, r, g, b, 1, callback) end - local reset_color = function (self, button, class, index) + local reset_color = function(self, button, class, index) local color_table = RAID_CLASS_COLORS [class] local r, g, b = color_table.r, color_table.g, color_table.b self.MyObject.my_texture:SetVertexColor (r, g, b) @@ -43,12 +43,12 @@ function Details:OpenClassColorsConfig() Details:RefreshMainWindow (-1, true) end - local on_enter = function (self, capsule) + local on_enter = function(self, capsule) --Details:CooltipPreset (1) --GameCooltip:AddLine ("right click to reset") --GameCooltip:Show (self) end - local on_leave = function (self, capsule) + local on_leave = function(self, capsule) --GameCooltip:Hide() end diff --git a/frames/window_currentdps.lua b/frames/window_currentdps.lua index ca93cffc..2eacc8d9 100644 --- a/frames/window_currentdps.lua +++ b/frames/window_currentdps.lua @@ -52,7 +52,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) local testUsing = "arena" --mythicdungeon --> frame strata options - local set_frame_strata = function (_, _, strata) + local set_frame_strata = function(_, _, strata) Details.realtime_dps_meter.frame_settings.strata = strata Details:UpdateTheRealCurrentDPSFrame(testUsing) end @@ -64,7 +64,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) strataTable [5] = {value = "DIALOG", label = "DIALOG", onclick = set_frame_strata} --> font options - local set_font_shadow= function (_, _, shadow) + local set_font_shadow= function(_, _, shadow) Details.realtime_dps_meter.font_shadow = shadow Details:UpdateTheRealCurrentDPSFrame(testUsing) end @@ -73,7 +73,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) fontShadowTable [2] = {value = "OUTLINE", label = "Outline", onclick = set_font_shadow} fontShadowTable [3] = {value = "THICKOUTLINE", label = "Thick Outline", onclick = set_font_shadow} - local on_select_text_font = function (self, fixed_value, value) + local on_select_text_font = function(self, fixed_value, value) Details.realtime_dps_meter.font_face = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end @@ -99,7 +99,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "toggle", get = function() return Details.realtime_dps_meter.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.enabled = not Details.realtime_dps_meter.enabled Details:LoadFramesForBroadcastTools() end, @@ -111,7 +111,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "toggle", get = function() return Details.realtime_dps_meter.frame_settings.locked end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.frame_settings.locked = not Details.realtime_dps_meter.frame_settings.locked Details:UpdateTheRealCurrentDPSFrame(testUsing) lockCallback() @@ -124,7 +124,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "toggle", get = function() return Details.realtime_dps_meter.frame_settings.show_title end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.frame_settings.show_title = not Details.realtime_dps_meter.frame_settings.show_title Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -138,7 +138,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) get = function() return {Details.realtime_dps_meter.frame_settings.backdrop_color[1], Details.realtime_dps_meter.frame_settings.backdrop_color[2], Details.realtime_dps_meter.frame_settings.backdrop_color[3], Details.realtime_dps_meter.frame_settings.backdrop_color[4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.realtime_dps_meter.frame_settings.backdrop_color color[1], color[2], color[3], color[4] = r, g, b, a Details:UpdateTheRealCurrentDPSFrame(testUsing) @@ -158,7 +158,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "range", get = function() return Details.realtime_dps_meter.sample_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.sample_size = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -173,7 +173,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "range", get = function() return Details.realtime_dps_meter.frame_settings.width end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.frame_settings.width = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -187,7 +187,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "range", get = function() return Details.realtime_dps_meter.frame_settings.height end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.frame_settings.height = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -205,7 +205,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "toggle", get = function() return Details.realtime_dps_meter.arena_enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.arena_enabled = not Details.realtime_dps_meter.arena_enabled Details:LoadFramesForBroadcastTools() end, @@ -216,7 +216,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "toggle", get = function() return Details.realtime_dps_meter.mythic_dungeon_enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.mythic_dungeon_enabled = not Details.realtime_dps_meter.mythic_dungeon_enabled Details:LoadFramesForBroadcastTools() end, @@ -231,7 +231,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "range", get = function() return Details.realtime_dps_meter.font_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.realtime_dps_meter.font_size = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -247,7 +247,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) get = function() return {Details.realtime_dps_meter.font_color[1], Details.realtime_dps_meter.font_color[2], Details.realtime_dps_meter.font_color[3], Details.realtime_dps_meter.font_color[4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.realtime_dps_meter.font_color color[1], color[2], color[3], color[4] = r, g, b, a Details:UpdateTheRealCurrentDPSFrame(testUsing) @@ -275,7 +275,7 @@ function Details:OpenCurrentRealDPSOptions(from_options_panel) { type = "range", get = function() return _detalhes.realtime_dps_meter.text_offset end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.realtime_dps_meter.text_offset = value Details:UpdateTheRealCurrentDPSFrame(testUsing) end, @@ -673,7 +673,7 @@ function Details:CreateCurrentDpsFrame(parent, name) _detalhes:UpdateTheRealCurrentDPSFrame() - local on_tick = function (self, deltaTime) + local on_tick = function(self, deltaTime) self.NextUpdate = self.NextUpdate - deltaTime if (self.NextUpdate <= 0) then diff --git a/frames/window_custom.lua b/frames/window_custom.lua index 0cf41d11..ec55bdd4 100644 --- a/frames/window_custom.lua +++ b/frames/window_custom.lua @@ -171,7 +171,7 @@ custom_window:SetSize (850, 500) custom_window:EnableMouse (true) custom_window:SetMovable (true) - custom_window:SetScript ("OnMouseDown", function (self, button) + custom_window:SetScript ("OnMouseDown", function(self, button) if (button == "LeftButton") then if (not self.moving) then self.moving = true @@ -183,7 +183,7 @@ end end end) - custom_window:SetScript ("OnMouseUp", function (self) + custom_window:SetScript ("OnMouseUp", function(self) if (self.moving) then self.moving = false self:StopMovingOrSizing() @@ -742,10 +742,10 @@ local menu_up_frame = _CreateFrame ("frame", nil, custom_window) menu_up_frame:SetFrameLevel (custom_window:GetFrameLevel()+2) - local onenter = function (self) + local onenter = function(self) --self.icontexture:SetVertexColor (1, 1, 1, 1) end - local onleave = function (self) + local onleave = function(self) --self.icontexture:SetVertexColor (.9, .9, .9, 1) end @@ -768,7 +768,7 @@ custom_window.menu [index] = {circle = circle, icon = texture, button = button} end - local build_menu = function (self, button, func, param2) + local build_menu = function(self, button, func, param2) GameCooltip:Reset() for index, custom_object in _ipairs (_detalhes.custom) do @@ -792,21 +792,21 @@ end --> edit button - local start_edit = function (_, _, custom_object, index) + local start_edit = function(_, _, custom_object, index) GameCooltip:Hide() DetailsCustomPanel:StartEdit (custom_object) end custom_window:CreateMenuButton (Loc ["STRING_CUSTOM_EDIT"], "Interface\\ICONS\\INV_Inscription_RunescrollOfFortitude_Red", build_menu, start_edit, nil, nil, "Edit", {0.07, 0.93, 0.07, 0.93}) --> remove button - local remove_display = function (_, _, custom_object, index) + local remove_display = function(_, _, custom_object, index) GameCooltip:Hide() DetailsCustomPanel:RemoveDisplay (custom_object, index) end custom_window:CreateMenuButton (Loc ["STRING_CUSTOM_REMOVE"], "Interface\\ICONS\\Spell_BrokenHeart", build_menu, remove_display, nil, nil, "Remove", {1, 0, 0, 1}) --> export button - local export_display = function (_, _, custom_object, index) + local export_display = function(_, _, custom_object, index) GameCooltip:Hide() local export_object = {} @@ -863,7 +863,7 @@ custom_window:CreateMenuButton (Loc ["STRING_CUSTOM_EXPORT"], "Interface\\ICONS\\INV_Misc_Gift_01", build_menu, export_display, nil, nil, "Export", {0.00, 0.9, 0.07, 0.93}) --> localize --> import buttonRaceChange - local import_display = function (_, _, custom_object, index) + local import_display = function(_, _, custom_object, index) GameCooltip:Hide() if (not custom_window.ImportBox) then @@ -951,11 +951,11 @@ attribute_box:SetSize (180, 260) attribute_box:Hide() - local button_onenter = function (self) + local button_onenter = function(self) self:SetBackdropColor (.3, .3, .3, .3) self.icon:SetBlendMode ("ADD") end - local button_onleave = function (self) + local button_onleave = function(self) self:SetBackdropColor (0, 0, 0, .2) self.icon:SetBlendMode ("BLEND") end @@ -1064,7 +1064,7 @@ local icon_label = gump:NewLabel (box0, box0, "$parenIconLabel", "icon", Loc ["STRING_CUSTOM_ICON"], "GameFontHighlightLeft") --> localize-me icon_label:SetPoint ("topleft", desc_label, "bottomleft", 0, -12) - local pickicon_callback = function (texture) + local pickicon_callback = function(texture) box0.icontexture:SetTexture (texture) end @@ -1166,7 +1166,7 @@ modelFrameBackground:Hide() modelFrameBackgroundIcon:Hide() - local selectedEncounterActor = function (actorName, model) + local selectedEncounterActor = function(actorName, model) source_field:SetText (actorName) source_dropdown:Select (4, true) box1.sourceentry:Enable() @@ -1176,7 +1176,7 @@ local actorsFrameButtons = {} - local buttonMouseOver = function (button) + local buttonMouseOver = function(button) button.MyObject.image:SetBlendMode ("ADD") button.MyObject.line:SetBlendMode ("ADD") button.MyObject.label:SetTextColor (1, 1, 1, 1) @@ -1192,7 +1192,7 @@ modelFrame:SetDisplayInfo (button.MyObject.model) end - local buttonMouseOut = function (button) + local buttonMouseOut = function(button) button.MyObject.image:SetBlendMode ("BLEND") button.MyObject.line:SetBlendMode ("BLEND") button.MyObject.label:SetTextColor (.8, .8, .8, .8) @@ -1200,7 +1200,7 @@ modelFrame:Hide() end - local EncounterSelect = function (_, _, instanceId, bossIndex, ej_id) + local EncounterSelect = function(_, _, instanceId, bossIndex, ej_id) DetailsCustomSpellsFrame:Hide() DetailsCustomActorsFrame:Hide() @@ -1374,7 +1374,7 @@ local modelFrameTexture = modelFrame:CreateTexture (nil, "background") modelFrameTexture:SetAllPoints() - local selectedEncounterActor = function (actorName) + local selectedEncounterActor = function(actorName) target_field:SetText (actorName) target_dropdown:Select (4, true) box1.targetentry:Enable() @@ -1384,7 +1384,7 @@ local actorsFrameButtons = {} - local buttonMouseOver = function (button) + local buttonMouseOver = function(button) button.MyObject.image:SetBlendMode ("ADD") button.MyObject.line:SetBlendMode ("ADD") button.MyObject.label:SetTextColor (1, 1, 1, 1) @@ -1400,7 +1400,7 @@ modelFrame:SetDisplayInfo (button.MyObject.model) end - local buttonMouseOut = function (button) + local buttonMouseOut = function(button) button.MyObject.image:SetBlendMode ("BLEND") button.MyObject.line:SetBlendMode ("BLEND") button.MyObject.label:SetTextColor (.8, .8, .8, .8) @@ -1409,7 +1409,7 @@ modelFrame:Hide() end - local EncounterSelect = function (_, _, instanceId, bossIndex, ej_id) + local EncounterSelect = function(_, _, instanceId, bossIndex, ej_id) DetailsCustomSpellsFrame:Hide() DetailsCustomActorsFrame:Show() @@ -1549,8 +1549,8 @@ spellsFrame:SetPoint ("topleft", custom_window, "topright", 5, 0) spellsFrame:Hide() - local selectedEncounterSpell = function (spellId) - local _, _, icon = _GetSpellInfo (spellId) + local selectedEncounterSpell = function(spellId) + local _, _, icon = _GetSpellInfo(spellId) spellid_entry:SetText (spellId) box0.icontexture:SetTexture (icon) spellsFrame:Hide() @@ -1559,7 +1559,7 @@ local spellsFrameButtons = {} - local buttonMouseOver = function (button) + local buttonMouseOver = function(button) button.MyObject.image:SetBlendMode ("ADD") button.MyObject.line:SetBlendMode ("ADD") button.MyObject.label:SetTextColor (1, 1, 1, 1) @@ -1568,14 +1568,14 @@ _detalhes:GameTooltipSetSpellByID (button.MyObject.spellid) GameTooltip:Show() end - local buttonMouseOut = function (button) + local buttonMouseOut = function(button) button.MyObject.image:SetBlendMode ("BLEND") button.MyObject.line:SetBlendMode ("BLEND") button.MyObject.label:SetTextColor (.8, .8, .8, .8) GameTooltip:Hide() end - local EncounterSelect = function (_, _, instanceId, bossIndex) + local EncounterSelect = function(_, _, instanceId, bossIndex) DetailsCustomSpellsFrame:Show() DetailsCustomActorsFrame:Hide() @@ -1626,7 +1626,7 @@ x = x + 100 end - local nome_magia, _, icone_magia = _GetSpellInfo (spell) + local nome_magia, _, icone_magia = _GetSpellInfo(spell) thisButton.image:SetTexture (icone_magia) thisButton.label:SetText (nome_magia) thisButton:SetClickFunction (selectedEncounterSpell, spell) @@ -1774,7 +1774,7 @@ end end - local font_change = function (_, _, increase) + local font_change = function(_, _, increase) if (increase) then local file, size, flags = code_editor.editbox:GetFont() code_editor.font_size = code_editor.font_size + 1 diff --git a/frames/window_dump.lua b/frames/window_dump.lua index c00b2f7a..c1e54743 100644 --- a/frames/window_dump.lua +++ b/frames/window_dump.lua @@ -30,7 +30,7 @@ function Details:Dump (...) text_editor.editbox:SetBackdrop (nil) text_editor:SetBackdrop (nil) - DetailsFramework:ReskinSlider (text_editor.scroll) + DetailsFramework:ReskinSlider(text_editor.scroll) if (not text_editor.__background) then text_editor.__background = text_editor:CreateTexture (nil, "background") @@ -95,7 +95,7 @@ function _detalhes:ShowImportWindow (defaultText, confirmFunc, titleText) importTextEditor.editbox:SetBackdrop (nil) importTextEditor:SetBackdrop (nil) - DetailsFramework:ReskinSlider (importTextEditor.scroll) + DetailsFramework:ReskinSlider(importTextEditor.scroll) if (not importTextEditor.__background) then importTextEditor.__background = importTextEditor:CreateTexture (nil, "background") diff --git a/frames/window_eventtracker.lua b/frames/window_eventtracker.lua index fb413252..97f23341 100644 --- a/frames/window_eventtracker.lua +++ b/frames/window_eventtracker.lua @@ -26,7 +26,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) local options_button_template = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE") --> frame strata options - local set_frame_strata = function (_, _, strata) + local set_frame_strata = function(_, _, strata) Details.event_tracker.frame.strata = strata Details:UpdateEventTrackerFrame() end @@ -38,7 +38,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) strataTable [5] = {value = "DIALOG", label = "DIALOG", onclick = set_frame_strata} --> font options - local set_font_shadow= function (_, _, shadow) + local set_font_shadow= function(_, _, shadow) Details.event_tracker.font_shadow = shadow Details:UpdateEventTrackerFrame() end @@ -47,13 +47,13 @@ function Details:OpenEventTrackerOptions (from_options_panel) fontShadowTable [2] = {value = "OUTLINE", label = "Outline", onclick = set_font_shadow} fontShadowTable [3] = {value = "THICKOUTLINE", label = "Thick Outline", onclick = set_font_shadow} - local on_select_text_font = function (self, fixed_value, value) + local on_select_text_font = function(self, fixed_value, value) Details.event_tracker.font_face = value Details:UpdateEventTrackerFrame() end --> texture options - local set_bar_texture = function (_, _, value) + local set_bar_texture = function(_, _, value) Details.event_tracker.line_texture = value Details:UpdateEventTrackerFrame() end @@ -64,7 +64,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) for name, texturePath in pairs (textures) do texTable [#texTable + 1] = {value = name, label = name, statusbar = texturePath, onclick = set_bar_texture} end - table.sort (texTable, function (t1, t2) return t1.label < t2.label end) + table.sort (texTable, function(t1, t2) return t1.label < t2.label end) --> options table local options = { @@ -74,7 +74,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) { type = "toggle", get = function() return Details.event_tracker.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.event_tracker.enabled = not Details.event_tracker.enabled Details:LoadFramesForBroadcastTools() end, @@ -86,7 +86,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) { type = "toggle", get = function() return Details.event_tracker.frame.locked end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.event_tracker.frame.locked = not Details.event_tracker.frame.locked Details:UpdateEventTrackerFrame() end, @@ -98,7 +98,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) { type = "toggle", get = function() return Details.event_tracker.frame.show_title end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.event_tracker.frame.show_title = not Details.event_tracker.frame.show_title Details:UpdateEventTrackerFrame() end, @@ -112,7 +112,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) get = function() return {Details.event_tracker.frame.backdrop_color[1], Details.event_tracker.frame.backdrop_color[2], Details.event_tracker.frame.backdrop_color[3], Details.event_tracker.frame.backdrop_color[4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.event_tracker.frame.backdrop_color color[1], color[2], color[3], color[4] = r, g, b, a Details:UpdateEventTrackerFrame() @@ -134,7 +134,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) { type = "range", get = function() return Details.event_tracker.line_height end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.event_tracker.line_height = value Details:UpdateEventTrackerFrame() end, @@ -157,7 +157,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) get = function() return {Details.event_tracker.line_color[1], Details.event_tracker.line_color[2], Details.event_tracker.line_color[3], Details.event_tracker.line_color[4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.event_tracker.line_color color[1], color[2], color[3], color[4] = r, g, b, a Details:UpdateEventTrackerFrame() @@ -170,7 +170,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) { type = "range", get = function() return Details.event_tracker.font_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.event_tracker.font_size = value Details:UpdateEventTrackerFrame() end, @@ -186,7 +186,7 @@ function Details:OpenEventTrackerOptions (from_options_panel) get = function() return {Details.event_tracker.font_color[1], Details.event_tracker.font_color[2], Details.event_tracker.font_color[3], Details.event_tracker.font_color[4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.event_tracker.font_color color[1], color[2], color[3], color[4] = r, g, b, a Details:UpdateEventTrackerFrame() @@ -264,13 +264,13 @@ function Details:CreateEventTrackerFrame(parent, name) local left_resize, right_resize = DF:CreateResizeGrips (f) - left_resize:SetScript ("OnMouseDown", function (self) + left_resize:SetScript ("OnMouseDown", function(self) if (not f.resizing and not _detalhes.event_tracker.frame.locked) then f.resizing = true f:StartSizing ("bottomleft") end end) - left_resize:SetScript ("OnMouseUp", function (self) + left_resize:SetScript ("OnMouseUp", function(self) if (f.resizing) then f.resizing = false f:StopMovingOrSizing() @@ -278,13 +278,13 @@ function Details:CreateEventTrackerFrame(parent, name) _detalhes.event_tracker.frame.height = f:GetHeight() end end) - right_resize:SetScript ("OnMouseDown", function (self) + right_resize:SetScript ("OnMouseDown", function(self) if (not f.resizing and not _detalhes.event_tracker.frame.locked) then f.resizing = true f:StartSizing ("bottomright") end end) - right_resize:SetScript ("OnMouseUp", function (self) + right_resize:SetScript ("OnMouseUp", function(self) if (f.resizing) then f.resizing = false f:StopMovingOrSizing() @@ -293,7 +293,7 @@ function Details:CreateEventTrackerFrame(parent, name) end end) - f:SetScript ("OnSizeChanged", function (self) + f:SetScript ("OnSizeChanged", function(self) end) @@ -306,7 +306,7 @@ function Details:CreateEventTrackerFrame(parent, name) local header_size = 20 --> on tick script - local lineOnTick = function (self, deltaTime) + local lineOnTick = function(self, deltaTime) --> when this event occured on combat log local gameTime = self.GameTime @@ -331,7 +331,7 @@ function Details:CreateEventTrackerFrame(parent, name) end --> create a line on the scroll frame - local scroll_createline = function (self, index) + local scroll_createline = function(self, index) local line = CreateFrame ("frame", "$parentLine" .. index, self,"BackdropTemplate") line:EnableMouse (false) @@ -412,7 +412,7 @@ function Details:CreateEventTrackerFrame(parent, name) local ABILITYTABLE_ISENEMY = 9 local ABILITYTABLE_TARGETSERIAL = 10 - local get_spec_or_class = function (serial, name) + local get_spec_or_class = function(serial, name) local class local spec = _detalhes.cached_specs [serial] if (not spec) then @@ -430,7 +430,7 @@ function Details:CreateEventTrackerFrame(parent, name) return spec, class end - local get_player_icon = function (spec, class) + local get_player_icon = function(spec, class) if (spec) then return [[Interface\AddOns\Details\images\spec_icons_normal]], unpack (_detalhes.class_specs_coords [spec]) elseif (class) then @@ -440,7 +440,7 @@ function Details:CreateEventTrackerFrame(parent, name) end end - local add_role_and_class_color = function (player_name, player_serial) + local add_role_and_class_color = function(player_name, player_serial) --> get the actor object local actor = _detalhes.tabela_vigente[1]:GetActor (player_name) @@ -492,7 +492,7 @@ function Details:CreateEventTrackerFrame(parent, name) return availableSpace end - local shrink_string = function (fontstring, size) + local shrink_string = function(fontstring, size) local text = fontstring:GetText() local loops = 20 while (fontstring:GetStringWidth() > size and loops > 0) do @@ -505,7 +505,7 @@ function Details:CreateEventTrackerFrame(parent, name) end --refresh the scroll frame - local scroll_refresh = function (self, data, offset, total_lines) + local scroll_refresh = function(self, data, offset, total_lines) local textSize = get_text_size() @@ -529,7 +529,7 @@ function Details:CreateEventTrackerFrame(parent, name) end if (ability [ABILITYTABLE_SPELLTYPE] == SPELLTYPE_COOLDOWN) then - local spellName, _, spellIcon = GetSpellInfo (ability [ABILITYTABLE_SPELLID]) + local spellName, _, spellIcon = GetSpellInfo(ability [ABILITYTABLE_SPELLID]) line.RightIcon:SetTexture (spellIcon) line.RightIcon:SetTexCoord (.06, .94, .06, .94) @@ -545,7 +545,7 @@ function Details:CreateEventTrackerFrame(parent, name) line.ActionIcon:SetTexCoord (0, 0.125, 0, 1) elseif (ability [ABILITYTABLE_SPELLTYPE] == SPELLTYPE_OFFENSIVE) then - local spellName, _, spellIcon = GetSpellInfo (ability [ABILITYTABLE_SPELLID]) + local spellName, _, spellIcon = GetSpellInfo(ability [ABILITYTABLE_SPELLID]) line.RightIcon:SetTexture (spellIcon) line.RightIcon:SetTexCoord (.06, .94, .06, .94) line.RightText:SetText (spellName) @@ -554,7 +554,7 @@ function Details:CreateEventTrackerFrame(parent, name) line.ActionIcon:SetTexCoord (0.127, 0.25, 0, 1) elseif (ability [ABILITYTABLE_SPELLTYPE] == SPELLTYPE_INTERRUPT) then - local spellNameInterrupted, _, spellIconInterrupted = GetSpellInfo (ability [ABILITYTABLE_EXTRASPELLID]) + local spellNameInterrupted, _, spellIconInterrupted = GetSpellInfo(ability [ABILITYTABLE_EXTRASPELLID]) line.RightIcon:SetTexture (spellIconInterrupted) line.RightIcon:SetTexCoord (.06, .94, .06, .94) line.RightText:SetText (spellNameInterrupted) @@ -563,7 +563,7 @@ function Details:CreateEventTrackerFrame(parent, name) line.ActionIcon:SetTexCoord (0.251, 0.375, 0, 1) elseif (ability [ABILITYTABLE_SPELLTYPE] == SPELLTYPE_CROWDCONTROL) then - local spellName, _, spellIcon = GetSpellInfo (ability [ABILITYTABLE_SPELLID]) + local spellName, _, spellIcon = GetSpellInfo(ability [ABILITYTABLE_SPELLID]) line.RightIcon:SetTexture (spellIcon) line.RightIcon:SetTexCoord (.06, .94, .06, .94) @@ -612,7 +612,7 @@ function Details:CreateEventTrackerFrame(parent, name) scrollframe:SetPoint ("bottomright", f, "bottomright", 0, 0) --> update line - used by 'UpdateWorldTrackerLines' function - local update_line = function (line) + local update_line = function(line) --> get the line index local index = line.Index @@ -730,20 +730,20 @@ function Details:CreateEventTrackerFrame(parent, name) local OBJECT_TYPE_ENEMY = 0x00000040 --> combat parser - local is_player = function (flag) + local is_player = function(flag) if (not flag) then return false end return bit.band (flag, OBJECT_TYPE_PLAYER) ~= 0 end - local is_enemy = function (flag) + local is_enemy = function(flag) if (not flag) then return false end return bit.band (flag, OBJECT_TYPE_ENEMY) ~= 0 end - combatLog:SetScript ("OnEvent", function (self, event) + combatLog:SetScript ("OnEvent", function(self, event) local time, token, hidding, caster_serial, caster_name, caster_flags, caster_flags2, target_serial, target_name, target_flags, target_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool = CombatLogGetCurrentEventInfo() local added = false diff --git a/frames/window_forge.lua b/frames/window_forge.lua index 3b9d5c19..649c3061 100644 --- a/frames/window_forge.lua +++ b/frames/window_forge.lua @@ -200,8 +200,8 @@ function Details:OpenForge() {name = L["STRING_FORGE_HEADER_FLAG"], width = 100, type = "entry", func = no_func}, }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then return { @@ -283,8 +283,8 @@ function Details:OpenForge() {name = L["STRING_FORGE_HEADER_FLAG"], width = 100, type = "entry", func = no_func}, }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then return { @@ -351,8 +351,8 @@ function Details:OpenForge() {name = L["STRING_FORGE_HEADER_FLAG"], width = 100, type = "entry", func = no_func}, }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then return { @@ -382,21 +382,21 @@ function Details:OpenForge() end end - local spell_open_aura_creator = function (row) + local spell_open_aura_creator = function(row) local data = all_modules [1].data [row] local spellid = data[1] - local spellname, _, spellicon = GetSpellInfo (spellid) + local spellname, _, spellicon = GetSpellInfo(spellid) Details:OpenAuraPanel (spellid, spellname, spellicon, data[3]) end - local spell_encounter_open_aura_creator = function (row) + local spell_encounter_open_aura_creator = function(row) local data = all_modules [2].data [row] local spellID = data[1] local encounterID = data [2] local enemyName = data [3] local encounterName = data [4] - local spellname, _, spellicon = GetSpellInfo (spellID) + local spellname, _, spellicon = GetSpellInfo(spellID) Details:OpenAuraPanel (spellID, spellname, spellicon, encounterID) end @@ -464,7 +464,7 @@ function Details:OpenForge() if (can_add ) then if (filter_name ~= "") then - local spellName = GetSpellInfo (spellID) + local spellName = GetSpellInfo(spellID) if (spellName) then spellName = lower (spellName) if (not spellName:find (lower_FilterSpellName)) then @@ -497,8 +497,8 @@ function Details:OpenForge() ----{name = L["STRING_FORGE_HEADER_CREATEAURA"], width = 86, type = "button", func = spell_open_aura_creator, icon = [[Interface\AddOns\WeakAuras\Media\Textures\icon]], notext = true, iconalign = "center"}, }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then local events = "" @@ -509,7 +509,7 @@ function Details:OpenForge() end events = events:sub (1, #events - 3) end - local spellName, _, spellIcon = GetSpellInfo (data[1]) + local spellName, _, spellIcon = GetSpellInfo(data[1]) local classColor = RAID_CLASS_COLORS [data[2]] and RAID_CLASS_COLORS [data[2]].colorStr or "FFFFFFFF" return { index, @@ -599,7 +599,7 @@ function Details:OpenForge() if (can_add ) then if (filter_name ~= "") then - local spellName = GetSpellInfo (spellID) + local spellName = GetSpellInfo(spellID) if (spellName) then spellName = lower (spellName) if (not spellName:find (lower_FilterSpellName)) then @@ -643,8 +643,8 @@ function Details:OpenForge() }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then @@ -745,8 +745,8 @@ function Details:OpenForge() }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data[index] if (data) then local npcId = data[1] @@ -768,12 +768,12 @@ function Details:OpenForge() ----------------------------------------------- - local dbm_open_aura_creator = function (row) + local dbm_open_aura_creator = function(row) local data = all_modules [4].data [row] local spellname, spellicon, _ if (type (data [7]) == "number") then - spellname, _, spellicon = GetSpellInfo (data [7]) + spellname, _, spellicon = GetSpellInfo(data [7]) else if (data [7]) then local spellid = data[7]:gsub ("ej", "") @@ -862,8 +862,8 @@ function Details:OpenForge() }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then local encounter_id = data.id @@ -874,7 +874,7 @@ function Details:OpenForge() local spellName, _, spellIcon if (abilityID) then if (abilityID > 0) then - spellName, _, spellIcon = GetSpellInfo (abilityID) + spellName, _, spellIcon = GetSpellInfo(abilityID) end end @@ -897,7 +897,7 @@ function Details:OpenForge() ----------------------------------------------- - local bw_open_aura_creator = function (row) + local bw_open_aura_creator = function(row) local data = all_modules [5].data [row] @@ -909,7 +909,7 @@ function Details:OpenForge() local title, description, depth, abilityIcon, displayInfo, siblingID, nextSectionID, filteredByDifficulty, link, startsOpen, flag1, flag2, flag3, flag4 = DetailsFramework.EncounterJournal.EJ_GetSectionInfo (abs (spellid)) spellname, spellicon = title, abilityIcon else - spellname, _, spellicon = GetSpellInfo (spellid) + spellname, _, spellicon = GetSpellInfo(spellid) end Details:OpenAuraPanel (data [2], spellname, spellicon, data.id, DETAILS_WA_TRIGGER_BW_TIMER, DETAILS_WA_AURATYPE_TEXT, {bw_timer_id = data [2], text = "Next " .. spellname .. " In", text_size = 72, icon = spellicon}) @@ -993,8 +993,8 @@ function Details:OpenForge() --{name = L["STRING_FORGE_HEADER_CREATEAURA"], width = 120, type = "button", func = bw_open_aura_creator, icon = [[Interface\AddOns\WeakAuras\Media\Textures\icon]], notext = true, iconalign = "center"}, }, fill_panel = false, - fill_gettotal = function (self) return #self.module.data end, - fill_fillrows = function (index, self) + fill_gettotal = function(self) return #self.module.data end, + fill_fillrows = function(index, self) local data = self.module.data [index] if (data) then local encounter_id = data.id @@ -1005,7 +1005,7 @@ function Details:OpenForge() local spellName, _, spellIcon if (abilityID) then if (abilityID > 0) then - spellName, _, spellIcon = GetSpellInfo (abilityID) + spellName, _, spellIcon = GetSpellInfo(abilityID) end end @@ -1029,7 +1029,7 @@ function Details:OpenForge() - local select_module = function (a, b, module_number) + local select_module = function(a, b, module_number) if (current_module ~= module_number) then local module = all_modules [current_module] diff --git a/frames/window_macros.lua b/frames/window_macros.lua index e8bf1a87..e91f1346 100644 --- a/frames/window_macros.lua +++ b/frames/window_macros.lua @@ -49,29 +49,29 @@ function Details.OpenMacrosWindow() local macrosAvailable = Details.MacroList - local OnEnterMacroButton = function (self) + local OnEnterMacroButton = function(self) self:SetBackdropColor (unpack (scrollbox_line_backdrop_color_onenter)) end - local onLeaveMacroButton = function (self) + local onLeaveMacroButton = function(self) self:SetBackdropColor (unpack (scrollbox_line_backdrop_color)) end - local updateMacroLine = function (self, index, title, desc, macroText) + local updateMacroLine = function(self, index, title, desc, macroText) self.Title:SetText (title) self.Desc:SetText (desc) self.MacroTextEntry:SetText (macroText) end - local textEntryOnFocusGained = function (self) + local textEntryOnFocusGained = function(self) self:HighlightText() end - local textEntryOnFocusLost = function (self) + local textEntryOnFocusLost = function(self) self:HighlightText (0, 0) end - local refreshMacroScrollbox = function (self, data, offset, totalLines) + local refreshMacroScrollbox = function(self, data, offset, totalLines) for i = 1, totalLines do local index = i + offset local macro = macrosAvailable [index] @@ -82,7 +82,7 @@ function Details.OpenMacrosWindow() end end - local macroListCreateLine = function (self, index) + local macroListCreateLine = function(self, index) --create a new line local line = CreateFrame ("button", "$parentLine" .. index, self,"BackdropTemplate") @@ -132,7 +132,7 @@ function Details.OpenMacrosWindow() macroScrollbox:SetBackdropColor (0, 0, 0, 0) macroScrollbox:SetBackdropBorderColor (0, 0, 0, 1) f.MacroScrollbox = macroScrollbox - DF:ReskinSlider (macroScrollbox) + DF:ReskinSlider(macroScrollbox) macroScrollbox.__background:Hide() diff --git a/frames/window_main.lua b/frames/window_main.lua index 1c811ef5..172c72a1 100644 --- a/frames/window_main.lua +++ b/frames/window_main.lua @@ -163,10 +163,10 @@ local function move_barras (self, elapsed) self._move_func.instancia.bgdisplay_loc = self._move_func.instancia.bgdisplay_loc + self._move_func.inc --> inc � -1 ou 1 e ir� crescer ou diminuir a janela for index = 1, self._move_func.instancia.rows_fit_in_window do - self._move_func.instancia.barras [index]:SetWidth (self:GetWidth()+self._move_func.instancia.bgdisplay_loc-3) + self._move_func.instancia.barras [index]:SetWidth(self:GetWidth()+self._move_func.instancia.bgdisplay_loc-3) end - self._move_func.instancia.bgdisplay:SetPoint ("bottomright", self, "bottomright", self._move_func.instancia.bgdisplay_loc, 0) + self._move_func.instancia.bgdisplay:SetPoint("bottomright", self, "bottomright", self._move_func.instancia.bgdisplay_loc, 0) self._move_func.instancia.bar_mod = self._move_func.instancia.bgdisplay_loc+(-3) --> verifica o tamanho do text @@ -220,10 +220,10 @@ function Details:MostrarScrollBar (sem_animacao) else --> set size of rows for index = 1, self.rows_fit_in_window do - self.barras[index]:SetWidth (self.baseframe:GetWidth()+mover_para -3) --> -3 distance between row end and scroll start + self.barras[index]:SetWidth(self.baseframe:GetWidth()+mover_para -3) --> -3 distance between row end and scroll start end --> move the semi-background to the left (which moves the scroll) - self.bgdisplay:SetPoint ("bottomright", self.baseframe, "bottomright", mover_para, 0) + self.bgdisplay:SetPoint("bottomright", self.baseframe, "bottomright", mover_para, 0) self.bar_mod = mover_para + (-3) self.bgdisplay_loc = mover_para @@ -245,10 +245,10 @@ function Details:MostrarScrollBar (sem_animacao) self.scroll:SetValue (0) --> set value pode chamar o atualizador self.baseframe.button_down:Enable() - main.resize_direita:SetPoint ("bottomright", main, "bottomright", self.largura_scroll*-1, 0) + main.resize_direita:SetPoint("bottomright", main, "bottomright", self.largura_scroll*-1, 0) if (main.isLocked) then - main.lock_button:SetPoint ("bottomright", main, "bottomright", self.largura_scroll*-1, 0) + main.lock_button:SetPoint("bottomright", main, "bottomright", self.largura_scroll*-1, 0) end end @@ -273,9 +273,9 @@ function Details:EsconderScrollBar (sem_animacao, force) self:MoveBarrasTo (self.row_info.space.right + 3) --> else for index = 1, self.rows_fit_in_window do - self.barras [index]:SetWidth (self.baseframe:GetWidth() - 5) --> -5 space between row end and window right border + self.barras [index]:SetWidth(self.baseframe:GetWidth() - 5) --> -5 space between row end and window right border end - self.bgdisplay:SetPoint ("bottomright", self.baseframe, "bottomright", 0, 0) -- voltar o background na poci��o inicial + self.bgdisplay:SetPoint("bottomright", self.baseframe, "bottomright", 0, 0) -- voltar o background na poci��o inicial self.bar_mod = 0 -- zera o bar mod, uma vez que as barras v�o estar na pocis�o inicial self.bgdisplay_loc = -2 if (self.baseframe:GetScript ("OnUpdate") and self.baseframe:GetScript ("OnUpdate") == move_barras) then @@ -287,9 +287,9 @@ function Details:EsconderScrollBar (sem_animacao, force) self.scroll:Disable() main:EnableMouseWheel (false) - main.resize_direita:SetPoint ("bottomright", main, "bottomright", 0, 0) + main.resize_direita:SetPoint("bottomright", main, "bottomright", 0, 0) if (main.isLocked) then - main.lock_button:SetPoint ("bottomright", main, "bottomright", 0, 0) + main.lock_button:SetPoint("bottomright", main, "bottomright", 0, 0) end end @@ -304,10 +304,10 @@ local function OnLeaveMainWindow (instancia, self) --> resizes, lock and ungroup buttons if (not Details.disable_lock_ungroup_buttons) then - instancia.baseframe.resize_direita:SetAlpha (0) - instancia.baseframe.resize_esquerda:SetAlpha (0) - instancia.baseframe.lock_button:SetAlpha (0) - instancia.break_snap_button:SetAlpha (0) + instancia.baseframe.resize_direita:SetAlpha(0) + instancia.baseframe.resize_esquerda:SetAlpha(0) + instancia.baseframe.lock_button:SetAlpha(0) + instancia.break_snap_button:SetAlpha(0) end --> stretch button @@ -317,8 +317,8 @@ local function OnLeaveMainWindow (instancia, self) --> resizes, lock and ungroup buttons if (not Details.disable_lock_ungroup_buttons) then - instancia.baseframe.lock_button:SetAlpha (0) - instancia.break_snap_button:SetAlpha (0) + instancia.baseframe.lock_button:SetAlpha(0) + instancia.break_snap_button:SetAlpha(0) end Details.FadeHandler.Fader (instancia.baseframe.button_stretch, "ALPHA", 0) @@ -345,14 +345,14 @@ local function OnEnterMainWindow(instancia, self) --> resize, lock and ungroup buttons if (not Details.disable_lock_ungroup_buttons) then - instancia.baseframe.resize_direita:SetAlpha (1) - instancia.baseframe.resize_esquerda:SetAlpha (1) - instancia.baseframe.lock_button:SetAlpha (1) + instancia.baseframe.resize_direita:SetAlpha(1) + instancia.baseframe.resize_esquerda:SetAlpha(1) + instancia.baseframe.lock_button:SetAlpha(1) --> ungroup for _, instancia_id in pairs (instancia.snap) do if (instancia_id) then - instancia.break_snap_button:SetAlpha (1) + instancia.break_snap_button:SetAlpha(1) break end end @@ -366,13 +366,13 @@ local function OnEnterMainWindow(instancia, self) elseif (instancia.modo ~= Details._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then if (not Details.disable_lock_ungroup_buttons) then - instancia.baseframe.lock_button:SetAlpha (1) + instancia.baseframe.lock_button:SetAlpha(1) --> ungroup for _, instancia_id in pairs (instancia.snap) do if (instancia_id) then instancia.break_snap_button:Show() - instancia.break_snap_button:SetAlpha (1) + instancia.break_snap_button:SetAlpha(1) break end end @@ -448,8 +448,8 @@ local show_instance_ids = function() --instancia. instance.baseframe.id_texture1 = instance.floatingframe:CreateTexture (nil, "overlay") instance.baseframe.id_texture2 = instance.floatingframe:CreateTexture (nil, "overlay") - instance.baseframe.id_texture1:SetTexture ([[Interface\Timer\BigTimerNumbers]]) - instance.baseframe.id_texture2:SetTexture ([[Interface\Timer\BigTimerNumbers]]) + instance.baseframe.id_texture1:SetTexture([[Interface\Timer\BigTimerNumbers]]) + instance.baseframe.id_texture2:SetTexture([[Interface\Timer\BigTimerNumbers]]) end local h = instance.baseframe:GetHeight() * 0.80 @@ -461,31 +461,31 @@ local show_instance_ids = function() local first, second = floor(id/10), floor(id%10) if (id >= 10) then - instance.baseframe.id_texture1:SetPoint ("center", instance.baseframe, "center", -h/2/2, 0) - instance.baseframe.id_texture2:SetPoint ("left", instance.baseframe.id_texture1, "right", -h/2, 0) + instance.baseframe.id_texture1:SetPoint("center", instance.baseframe, "center", -h/2/2, 0) + instance.baseframe.id_texture2:SetPoint("left", instance.baseframe.id_texture1, "right", -h/2, 0) first = first + 1 local line = ceil(first / 4) local x = ( first - ( (line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line - instance.baseframe.id_texture1:SetTexCoord (l, r, t, b) + instance.baseframe.id_texture1:SetTexCoord(l, r, t, b) second = second + 1 local line = ceil(second / 4) local x = ( second - ( (line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line - instance.baseframe.id_texture2:SetTexCoord (l, r, t, b) + instance.baseframe.id_texture2:SetTexCoord(l, r, t, b) instance.baseframe.id_texture1:Show() instance.baseframe.id_texture2:Show() else - instance.baseframe.id_texture1:SetPoint ("center", instance.baseframe, "center") + instance.baseframe.id_texture1:SetPoint("center", instance.baseframe, "center") second = second + 1 local line = ceil(second / 4) local x = ( second - ( (line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line - instance.baseframe.id_texture1:SetTexCoord (l, r, t, b) + instance.baseframe.id_texture1:SetTexCoord(l, r, t, b) instance.baseframe.id_texture1:Show() instance.baseframe.id_texture2:Hide() @@ -494,7 +494,7 @@ local show_instance_ids = function() end end -local update_line = function (self, target_frame) +local update_line = function(self, target_frame) local target_instance_PosX, target_instance_PosY = target_frame.instance:GetPositionOnScreen() local moving_instance_PosX, moving_instance_PosY = self.instance:GetPositionOnScreen() @@ -536,24 +536,24 @@ local update_line = function (self, target_frame) local ball = guide_balls [i] if (not ball) then ball = Details.overlay_frame:CreateTexture (nil, "Overlay") - ball:SetTexture ([[Interface\AddOns\Details\images\icons]]) + ball:SetTexture([[Interface\AddOns\Details\images\icons]]) ball:SetSize (16, 16) - ball:SetAlpha (0.3) - ball:SetTexCoord (410/512, 426/512, 2/512, 18/512) + ball:SetAlpha(0.3) + ball:SetTexCoord(410/512, 426/512, 2/512, 18/512) tinsert (guide_balls, ball) end ball:ClearAllPoints() ball:SetPoint("CENTER", self, "CENTER", x, y) --baseframse center ball:Show() - ball:SetVertexColor (unpack(color)) + ball:SetVertexColor(unpack(color)) end end local tempo_movendo, precisa_ativar, instancia_alvo, tempo_fades, nao_anexados, flash_bounce, start_draw_lines, instance_ids_shown, need_show_group_guide -local movement_onupdate = function (self, elapsed) +local movement_onupdate = function(self, elapsed) if (start_draw_lines and start_draw_lines > 0.95) then update_line (self, instancia_alvo.baseframe) @@ -567,8 +567,8 @@ local movement_onupdate = function (self, elapsed) if (need_show_group_guide and not DetailsFramework.IsTimewalkWoW()) then Details.MicroButtonAlert.Text:SetText (Loc["STRING_WINDOW1ATACH_DESC"]) - Details.MicroButtonAlert:SetPoint ("bottom", need_show_group_guide.baseframe, "top", 0, 30) - Details.MicroButtonAlert:SetHeight (320) + Details.MicroButtonAlert:SetPoint("bottom", need_show_group_guide.baseframe, "top", 0, 30) + Details.MicroButtonAlert:SetHeight(320) Details.MicroButtonAlert:Show() need_show_group_guide = nil @@ -604,19 +604,19 @@ local movement_onupdate = function (self, elapsed) if (instancia_alvo.toolbar_side == 1) then if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 20) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -14) + texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 20) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -14) else - texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 20) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, 0) + texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 20) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, 0) end else if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 0) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -34) + texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 0) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -34) else - texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 0) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -20) + texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 0) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -20) end end @@ -631,19 +631,19 @@ local movement_onupdate = function (self, elapsed) if (instancia_alvo.toolbar_side == 1) then if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -14) - texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -14) + texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -14) + texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -14) else - texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, 0) - texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, 0) + texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, 0) + texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, 0) end else if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -34) - texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -34) + texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -34) + texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -34) else - texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -20) - texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -20) + texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -20) + texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -20) end end @@ -657,19 +657,19 @@ local movement_onupdate = function (self, elapsed) if (instancia_alvo.toolbar_side == 1) then if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 20) - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -14) + texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 20) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -14) else - texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 20) - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, 0) + texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 20) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, 0) end else if (instancia_alvo.show_statusbar) then - texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 0) - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -34) + texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 0) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -34) else - texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 0) - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -20) + texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 0) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -20) end end @@ -682,11 +682,11 @@ local movement_onupdate = function (self, elapsed) texture:ClearAllPoints() if (instancia_alvo.toolbar_side == 1) then - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "topleft", 0, 20) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "topright", 0, 20) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "topleft", 0, 20) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "topright", 0, 20) else - texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "topleft", 0, 0) - texture:SetPoint ("bottomright", instancia_alvo.baseframe, "topright", 0, 0) + texture:SetPoint("bottomleft", instancia_alvo.baseframe, "topleft", 0, 0) + texture:SetPoint("bottomright", instancia_alvo.baseframe, "topright", 0, 0) end instancia_alvo.h_cima:Flash (1, 1, 2.0, false, 0, 0) @@ -703,8 +703,8 @@ local movement_onupdate = function (self, elapsed) if (not DetailsFramework.IsTimewalkWoW()) then Details.MicroButtonAlert.Text:SetText (string.format (Loc["STRING_ATACH_DESC"], self.instance.meu_id, instancia_alvo.meu_id)) - Details.MicroButtonAlert:SetPoint ("bottom", instancia_alvo.baseframe.cabecalho.modo_selecao.widget, "top", 0, 18) - Details.MicroButtonAlert:SetHeight (200) + Details.MicroButtonAlert:SetPoint("bottom", instancia_alvo.baseframe.cabecalho.modo_selecao.widget, "top", 0, 18) + Details.MicroButtonAlert:SetHeight(200) Details.MicroButtonAlert:Show() end end @@ -926,7 +926,7 @@ local function move_janela (baseframe, iniciando, instancia, just_updating) group_tutorial.ArrowUP:Show() group_tutorial.ArrowGlowUP:Show() group_tutorial.Text:SetText (Loc["STRING_MINITUTORIAL_WINDOWS1"]) - group_tutorial:SetPoint ("bottom", instancia_alvo.break_snap_button, "top", 0, 24) + group_tutorial:SetPoint("bottom", instancia_alvo.break_snap_button, "top", 0, 24) group_tutorial:Show() Details.OnEnterMainWindow (instancia_alvo) @@ -988,15 +988,15 @@ local function move_janela (baseframe, iniciando, instancia, just_updating) end Details.move_janela_func = move_janela -local BGFrame_scripts_onenter = function (self) +local BGFrame_scripts_onenter = function(self) OnEnterMainWindow (self._instance, self) end -local BGFrame_scripts_onleave = function (self) +local BGFrame_scripts_onleave = function(self) OnLeaveMainWindow (self._instance, self) end -local BGFrame_scripts_onmousedown = function (self, button) +local BGFrame_scripts_onmousedown = function(self, button) -- /run Details.disable_stretch_from_toolbar = true if (self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton" and not Details.disable_stretch_from_toolbar) then @@ -1013,7 +1013,7 @@ local BGFrame_scripts_onmousedown = function (self, button) move_janela (self._instance.baseframe, true, self._instance) if (self.is_toolbar) then if (self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then - self._instance.menu_attribute_string:SetPoint ("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1]+1, self._instance.attribute_text.anchor [2]-1) + self._instance.menu_attribute_string:SetPoint("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1]+1, self._instance.attribute_text.anchor [2]-1) end end elseif (button == "RightButton") then @@ -1029,7 +1029,7 @@ local BGFrame_scripts_onmousedown = function (self, button) end end -local BGFrame_scripts_onmouseup = function (self, button) +local BGFrame_scripts_onmouseup = function(self, button) if (self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton") then if (DetailsWindowLockPopUp1 and DetailsWindowLockPopUp1:IsShown()) then @@ -1043,7 +1043,7 @@ local BGFrame_scripts_onmouseup = function (self, button) self._instance:SaveMainWindowPosition() if (self.is_toolbar) then if (self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then - self._instance.menu_attribute_string:SetPoint ("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1], self._instance.attribute_text.anchor [2]) + self._instance.menu_attribute_string:SetPoint("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1], self._instance.attribute_text.anchor [2]) end end end @@ -1059,13 +1059,13 @@ end function gump:RegisterForDetailsMove (frame, instancia) - frame:SetScript ("OnMouseDown", function (frame, button) + frame:SetScript ("OnMouseDown", function(frame, button) if (not instancia.baseframe.isLocked and button == "LeftButton") then move_janela (instancia.baseframe, true, instancia) --> novo movedor da janela end end) - frame:SetScript ("OnMouseUp", function (frame) + frame:SetScript ("OnMouseUp", function(frame) if (instancia.baseframe.isMoving) then move_janela (instancia.baseframe, false, instancia) --> novo movedor da janela instancia:SaveMainWindowPosition() @@ -1074,7 +1074,7 @@ function gump:RegisterForDetailsMove (frame, instancia) end --> scripts do base frame -local BFrame_scripts_onsizechange = function (self) +local BFrame_scripts_onsizechange = function(self) self._instance:SaveMainWindowSize() self._instance:ReajustaGump() self._instance.oldwith = self:GetWidth() @@ -1082,21 +1082,21 @@ local BFrame_scripts_onsizechange = function (self) self._instance:RefreshAttributeTextSize() end -local BFrame_scripts_onenter = function (self) +local BFrame_scripts_onenter = function(self) OnEnterMainWindow (self._instance, self) end -local BFrame_scripts_onleave = function (self) +local BFrame_scripts_onleave = function(self) OnLeaveMainWindow (self._instance, self) end -local BFrame_scripts_onmousedown = function (self, button) +local BFrame_scripts_onmousedown = function(self, button) if (not self.isLocked and button == "LeftButton") then move_janela (self, true, self._instance) end end -local BFrame_scripts_onmouseup = function (self, button) +local BFrame_scripts_onmouseup = function(self, button) if (self.isMoving) then move_janela (self, false, self._instance) --> novo movedor da janela self._instance:SaveMainWindowPosition() @@ -1113,11 +1113,11 @@ local function BFrame_scripts (baseframe, instancia) end local function backgrounddisplay_scripts (backgrounddisplay, baseframe, instancia) - backgrounddisplay:SetScript ("OnEnter", function (self) + backgrounddisplay:SetScript ("OnEnter", function(self) OnEnterMainWindow (instancia, self) end) - backgrounddisplay:SetScript ("OnLeave", function (self) + backgrounddisplay:SetScript ("OnLeave", function(self) OnLeaveMainWindow (instancia, self) end) end @@ -1127,7 +1127,7 @@ local function instancias_horizontais (instancia, largura, esquerda, direita) for lado, esta_instancia in pairs (instancia.snap) do if (lado == 1) then --> movendo para esquerda local instancia = Details.tabela_instancias [esta_instancia] - instancia.baseframe:SetWidth (largura) + instancia.baseframe:SetWidth(largura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false @@ -1141,7 +1141,7 @@ local function instancias_horizontais (instancia, largura, esquerda, direita) for lado, esta_instancia in pairs (instancia.snap) do if (lado == 3) then --> movendo para esquerda local instancia = Details.tabela_instancias [esta_instancia] - instancia.baseframe:SetWidth (largura) + instancia.baseframe:SetWidth(largura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false @@ -1158,7 +1158,7 @@ local function instancias_verticais (instancia, altura, esquerda, direita) if (lado == 1) then --> movendo para esquerda local instancia = Details.tabela_instancias [esta_instancia] if (instancia:IsEnabled()) then - instancia.baseframe:SetHeight (altura) + instancia.baseframe:SetHeight(altura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false @@ -1174,7 +1174,7 @@ local function instancias_verticais (instancia, altura, esquerda, direita) if (lado == 3) then --> movendo para esquerda local instancia = Details.tabela_instancias [esta_instancia] if (instancia:IsEnabled()) then - instancia.baseframe:SetHeight (altura) + instancia.baseframe:SetHeight(altura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false @@ -1186,7 +1186,7 @@ local function instancias_verticais (instancia, altura, esquerda, direita) end end -local check_snap_side = function (instanceid, snap, id, container) +local check_snap_side = function(instanceid, snap, id, container) local instance = Details:GetInstance (instanceid) if (instance and instance.snap [snap] and instance.snap [snap] == id) then tinsert (container, instance) @@ -1395,7 +1395,7 @@ local resizeTooltip = { --> search key: ~resizescript -local resize_scripts_onmousedown = function (self, button) +local resize_scripts_onmousedown = function(self, button) _G.GameCooltip:ShowMe (false) --> Hide Cooltip if (Details.disable_lock_ungroup_buttons) then @@ -1440,7 +1440,7 @@ local resize_scripts_onmousedown = function (self, button) self._instance.baseframe:StartSizing("bottomleft") end - self:SetPoint ("bottomleft", self._instance.baseframe, "bottomleft", -1, -1) + self:SetPoint("bottomleft", self._instance.baseframe, "bottomleft", -1, -1) self.afundado = true elseif (self._myside == ">") then @@ -1458,9 +1458,9 @@ local resize_scripts_onmousedown = function (self, button) end if (self._instance.rolagem and Details.use_scroll) then - self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", (self._instance.largura_scroll*-1) + 1, -1) + self:SetPoint("bottomright", self._instance.baseframe, "bottomright", (self._instance.largura_scroll*-1) + 1, -1) else - self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", 1, -1) + self:SetPoint("bottomright", self._instance.baseframe, "bottomright", 1, -1) end self.afundado = true end @@ -1475,7 +1475,7 @@ local resize_scripts_onmousedown = function (self, button) end end -local resize_scripts_onmouseup = function (self, button) +local resize_scripts_onmouseup = function(self, button) if (Details.disable_lock_ungroup_buttons) then return @@ -1485,12 +1485,12 @@ local resize_scripts_onmouseup = function (self, button) self.afundado = false if (self._myside == ">") then if (self._instance.rolagem and Details.use_scroll) then - self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", self._instance.largura_scroll*-1, 0) + self:SetPoint("bottomright", self._instance.baseframe, "bottomright", self._instance.largura_scroll*-1, 0) else - self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", 0, 0) + self:SetPoint("bottomright", self._instance.baseframe, "bottomright", 0, 0) end else - self:SetPoint ("bottomleft", self._instance.baseframe, "bottomleft", 0, 0) + self:SetPoint("bottomleft", self._instance.baseframe, "bottomleft", 0, 0) end end @@ -1541,8 +1541,8 @@ local resize_scripts_onmouseup = function (self, button) for _, esta_instancia in ipairs (Details.tabela_instancias) do if (esta_instancia:IsAtiva() and esta_instancia ~= self._instance and esta_instancia.modo ~= Details._detalhes_props["MODO_ALONE"]) then - esta_instancia.baseframe:SetWidth (largura) - esta_instancia.baseframe:SetHeight (altura) + esta_instancia.baseframe:SetWidth(largura) + esta_instancia.baseframe:SetHeight(altura) esta_instancia.auto_resize = true esta_instancia:RefreshBars() esta_instancia:InstanceReset() @@ -1572,14 +1572,14 @@ local resize_scripts_onmouseup = function (self, button) end end -local resize_scripts_onhide = function (self) +local resize_scripts_onhide = function(self) if (self.going_hide) then _G.GameCooltip:ShowMe (false) self.going_hide = nil end end -local resize_scripts_onenter = function (self) +local resize_scripts_onenter = function(self) if (Details.disable_lock_ungroup_buttons) then return @@ -1600,7 +1600,7 @@ local resize_scripts_onenter = function (self) end end -local resize_scripts_onleave = function (self) +local resize_scripts_onleave = function(self) if (self.mostrando) then self.going_hide = true if (not self.movendo) then @@ -1630,7 +1630,7 @@ local lockButtonTooltip = { {icon = [[Interface\PetBattles\PetBattle-LockIcon]], width = 14, height = 14, l = 0.0703125, r = 0.9453125, t = 0.0546875, b = 0.9453125, color = "orange"}, } -local lockFunctionOnEnter = function (self) +local lockFunctionOnEnter = function(self) if (Details.disable_lock_ungroup_buttons) then return @@ -1641,7 +1641,7 @@ local lockFunctionOnEnter = function (self) self.mostrando = true - self.label:SetTextColor (1, 1, 1, .6) + self.label:SetTextColor(1, 1, 1, .6) Details:CooltipPreset (2.1) GameCooltip:SetOption("FixedWidth", 180) @@ -1652,17 +1652,17 @@ local lockFunctionOnEnter = function (self) end end -local lockFunctionOnLeave = function (self) +local lockFunctionOnLeave = function(self) if (self.mostrando) then self.going_hide = true OnLeaveMainWindow (self.instancia, self) - self.label:SetTextColor (.6, .6, .6, .7) + self.label:SetTextColor(.6, .6, .6, .7) self.mostrando = false GameCooltip:ShowMe (false) end end -local lockFunctionOnHide = function (self) +local lockFunctionOnHide = function(self) if (self.going_hide) then GameCooltip:ShowMe (false) self.going_hide = nil @@ -1684,17 +1684,17 @@ function Details:RefreshLockedState() end if (self.baseframe.isLocked) then - self.baseframe.resize_direita:EnableMouse (false) - self.baseframe.resize_esquerda:EnableMouse (false) + self.baseframe.resize_direita:EnableMouse(false) + self.baseframe.resize_esquerda:EnableMouse(false) else - self.baseframe.resize_direita:EnableMouse (true) - self.baseframe.resize_esquerda:EnableMouse (true) + self.baseframe.resize_direita:EnableMouse(true) + self.baseframe.resize_esquerda:EnableMouse(true) end return true end -local lockFunctionOnClick = function (button, button_type, button2, isFromOptionsButton) +local lockFunctionOnClick = function(button, button_type, button2, isFromOptionsButton) --isFromOptionsButton is true when the call if from the button in the display section of the options panel if (Details.disable_lock_ungroup_buttons and isFromOptionsButton ~= true) then @@ -1710,15 +1710,15 @@ local lockFunctionOnClick = function (button, button_type, button2, isFromOption baseframe.isLocked = false baseframe.instance.isLocked = false button.label:SetText (Loc["STRING_LOCK_WINDOW"]) - button:SetWidth (button.label:GetStringWidth()+2) + button:SetWidth(button.label:GetStringWidth()+2) if (not Details.disable_lock_ungroup_buttons) then - baseframe.resize_direita:SetAlpha (1) - baseframe.resize_esquerda:SetAlpha (1) + baseframe.resize_direita:SetAlpha(1) + baseframe.resize_esquerda:SetAlpha(1) end button:ClearAllPoints() - button:SetPoint ("right", baseframe.resize_direita, "left", -1, 1.5) + button:SetPoint("right", baseframe.resize_direita, "left", -1, 1.5) else --> tutorial if (not Details:GetTutorialCVar ("WINDOW_LOCK_UNLOCK1") and not Details.initializing) then @@ -1728,7 +1728,7 @@ local lockFunctionOnClick = function (button, button_type, button2, isFromOption lock_tutorial.ArrowUP:Show() lock_tutorial.ArrowGlowUP:Show() lock_tutorial.Text:SetText (Loc["STRING_MINITUTORIAL_WINDOWS2"]) - lock_tutorial:SetPoint ("bottom", baseframe.UPFrame, "top", 0, 20) + lock_tutorial:SetPoint("bottom", baseframe.UPFrame, "top", 0, 20) lock_tutorial:Show() end @@ -1736,11 +1736,11 @@ local lockFunctionOnClick = function (button, button_type, button2, isFromOption baseframe.isLocked = true baseframe.instance.isLocked = true button.label:SetText (Loc["STRING_UNLOCK_WINDOW"]) - button:SetWidth (button.label:GetStringWidth()+2) + button:SetWidth(button.label:GetStringWidth()+2) button:ClearAllPoints() - button:SetPoint ("bottomright", baseframe, "bottomright", -3, 0) - baseframe.resize_direita:SetAlpha (0) - baseframe.resize_esquerda:SetAlpha (0) + button:SetPoint("bottomright", baseframe, "bottomright", -3, 0) + baseframe.resize_direita:SetAlpha(0) + baseframe.resize_esquerda:SetAlpha(0) end baseframe.instance:RefreshLockedState() @@ -1755,7 +1755,7 @@ local unSnapButtonTooltip = { {icon = [[Interface\AddOns\Details\images\icons]], width = 14, height = 14, l = 160/512, r = 179/512, t = 142/512, b = 162/512}, } -local unSnapButtonOnEnter = function (self) +local unSnapButtonOnEnter = function(self) if (Details.disable_lock_ungroup_buttons) then return @@ -1786,7 +1786,7 @@ local unSnapButtonOnEnter = function (self) end -local unSnapButtonOnLeave = function (self) +local unSnapButtonOnLeave = function(self) if (self.mostrando) then OnLeaveMainWindow (self.instancia, self) self.mostrando = false @@ -1795,7 +1795,7 @@ local unSnapButtonOnLeave = function (self) end --> this should run only when the mouse is over a instance bar -local shift_monitor = function (self) +local shift_monitor = function(self) if (not self:IsMouseOver()) then self:SetScript ("OnUpdate", shift_monitor) @@ -1858,10 +1858,10 @@ local barra_backdrop_onleave = { Details.left_anti_truncate:SetBackdrop (defaultBackdropSt) Details.left_anti_truncate:SetBackdropColor (0, 0, 0, 0.8) Details.left_anti_truncate:SetFrameStrata ("FULLSCREEN") - Details.left_anti_truncate.text = Details.left_anti_truncate:CreateFontString (nil, "overlay", "GameFontNormal") - Details.left_anti_truncate.text:SetPoint ("left", Details.left_anti_truncate, "left", 3, 0) + Details.left_anti_truncate.text = Details.left_anti_truncate:CreateFontString(nil, "overlay", "GameFontNormal") + Details.left_anti_truncate.text:SetPoint("left", Details.left_anti_truncate, "left", 3, 0) -local barra_scripts_onenter = function (self) +local lineScript_Onenter = function(self) self.mouse_over = true OnEnterMainWindow (self._instance, self) @@ -1886,11 +1886,11 @@ local barra_scripts_onenter = function (self) end - Details:SetFontSize (Details.left_anti_truncate.text, self._instance.row_info.font_size) - Details:SetFontFace (Details.left_anti_truncate.text, self._instance.row_info.font_face_file) + Details:SetFontSize(Details.left_anti_truncate.text, self._instance.row_info.font_size) + Details:SetFontFace(Details.left_anti_truncate.text, self._instance.row_info.font_face_file) Details:SetFontColor (Details.left_anti_truncate.text, lefttext:GetTextColor()) - Details.left_anti_truncate:SetPoint ("left", lefttext, "left", -3, 0) + Details.left_anti_truncate:SetPoint("left", lefttext, "left", -3, 0) Details.left_anti_truncate.text:SetText (lefttext:GetText()) Details.left_anti_truncate:SetSize (Details.left_anti_truncate.text:GetStringWidth() + 3, self._instance.row_info.height) @@ -1901,7 +1901,7 @@ local barra_scripts_onenter = function (self) self:SetScript ("OnUpdate", shift_monitor) end -local barra_scripts_onleave = function (self) +local lineScript_Onleave = function(self) self.mouse_over = false OnLeaveMainWindow (self._instance, self) @@ -1929,7 +1929,7 @@ local barra_scripts_onleave = function (self) end end -local barra_scripts_onmousedown = function (self, button) +local lineScript_Onmousedown = function(self, button) if (self.fading_in) then return end @@ -1963,7 +1963,7 @@ local barra_scripts_onmousedown = function (self, button) end end -local barra_scripts_onmouseup = function (self, button) +local lineScript_Onmouseup = function(self, button) local is_shift_down = _IsShiftKeyDown() local is_control_down = _IsControlKeyDown() @@ -2017,19 +2017,19 @@ local barra_scripts_onmouseup = function (self, button) end end -local barra_scripts_onclick = function (self, button) +local lineScript_Onclick = function(self, button) end -local barra_scripts_onshow = function (self) +local lineScript_Onshow = function(self) -- search key: ~model if (self.using_upper_3dmodels) then - self.modelbox_high:SetModel (self._instance.row_info.models.upper_model) - self.modelbox_high:SetAlpha (self._instance.row_info.models.upper_alpha) + self.modelbox_high:SetModel(self._instance.row_info.models.upper_model) + self.modelbox_high:SetAlpha(self._instance.row_info.models.upper_alpha) end if (self.using_lower_3dmodels) then - self.modelbox_low:SetModel (self._instance.row_info.models.lower_model) - self.modelbox_low:SetAlpha (self._instance.row_info.models.lower_alpha) + self.modelbox_low:SetModel(self._instance.row_info.models.lower_model) + self.modelbox_low:SetAlpha(self._instance.row_info.models.lower_alpha) end end @@ -2286,7 +2286,7 @@ local iconFrame_OnEnter = function(self) end end -local icon_frame_on_leave = function (self) +local icon_frame_on_leave = function(self) GameCooltip:Hide() if (GameTooltip and GameTooltip:IsShown()) then @@ -2377,24 +2377,24 @@ local icon_frame_create_animation = function() f.anim:SetLooping ("repeat") local t = f:CreateTexture (nil, "overlay") - t:SetTexture ([[Interface\COMMON\StreamCircle]]) - t:SetAlpha (0.7) + t:SetTexture([[Interface\COMMON\StreamCircle]]) + t:SetAlpha(0.7) t:SetAllPoints() tinsert (Details.icon_animations.load.available, f) end -local icon_frame_on_click_down = function (self) +local icon_frame_on_click_down = function(self) local instanceID = self.instance_id local instanceObject = Details:GetInstance (instanceID) - self:GetParent():GetParent().icone_classe:SetPoint ("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1] + 1, instanceObject.row_info.icon_offset[2] + -1) + self:GetParent():GetParent().icone_classe:SetPoint("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1] + 1, instanceObject.row_info.icon_offset[2] + -1) end -local icon_frame_on_click_up = function (self, button) +local icon_frame_on_click_up = function(self, button) local instanceID = self.instance_id local instanceObject = Details:GetInstance (instanceID) - self:GetParent():GetParent().icone_classe:SetPoint ("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1], instanceObject.row_info.icon_offset[2]) + self:GetParent():GetParent().icone_classe:SetPoint("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1], instanceObject.row_info.icon_offset[2]) if (button == "LeftButton") then --> open the rank panel @@ -2437,12 +2437,12 @@ local icon_frame_on_click_up = function (self, button) local f = anim if (not f.question_icon) then f.question_icon = self:GetParent():GetParent().border:CreateTexture (nil, "overlay") - f.question_icon:SetTexture ([[Interface\GossipFrame\ActiveLegendaryQuestIcon]]) + f.question_icon:SetTexture([[Interface\GossipFrame\ActiveLegendaryQuestIcon]]) f.question_icon:SetSize (16, 16) end f.question_icon:ClearAllPoints() - f.question_icon:SetPoint ("center", self, "center") + f.question_icon:SetPoint("center", self, "center") f.question_icon:Show() if (not Details.HideBarQuestionIcon) then @@ -2480,7 +2480,7 @@ local icon_frame_on_click_up = function (self, button) anim:SetParent (self) anim:ClearAllPoints() anim:SetFrameStrata ("TOOLTIP") - anim:SetPoint ("center", self, "center") + anim:SetPoint("center", self, "center") anim:SetSize (self:GetWidth()*1.7, self:GetHeight()*1.7) anim.anim:Play() @@ -2503,27 +2503,26 @@ local icon_frame_on_click_up = function (self, button) end end -local set_frame_icon_scripts = function (row) - row.icon_frame:SetScript ("OnEnter", iconFrame_OnEnter) - row.icon_frame:SetScript ("OnLeave", icon_frame_on_leave) - row.icon_frame:SetScript ("OnMouseDown", icon_frame_on_click_down) - row.icon_frame:SetScript ("OnMouseUp", icon_frame_on_click_up) +local setFrameIconScripts = function(row) + row.icon_frame:SetScript("OnEnter", iconFrame_OnEnter) + row.icon_frame:SetScript("OnLeave", icon_frame_on_leave) + row.icon_frame:SetScript("OnMouseDown", icon_frame_on_click_down) + row.icon_frame:SetScript("OnMouseUp", icon_frame_on_click_up) end -local function barra_scripts (esta_barra, instancia, i) - esta_barra._instance = instancia +local setLineScripts = function(line, instance, index) + line._instance = instance - esta_barra:SetScript ("OnEnter", barra_scripts_onenter) - esta_barra:SetScript ("OnLeave", barra_scripts_onleave) - esta_barra:SetScript ("OnMouseDown", barra_scripts_onmousedown) - esta_barra:SetScript ("OnMouseUp", barra_scripts_onmouseup) - esta_barra:SetScript ("OnClick", barra_scripts_onclick) - - esta_barra:SetScript ("OnShow", barra_scripts_onshow) - - set_frame_icon_scripts (esta_barra) - - esta_barra.SetValue = setBarValue + line:SetScript("OnEnter", lineScript_Onenter) + line:SetScript("OnLeave", lineScript_Onleave) + line:SetScript("OnMouseDown", lineScript_Onmousedown) + line:SetScript("OnMouseUp", lineScript_Onmouseup) + line:SetScript("OnClick", lineScript_Onclick) + line:SetScript("OnShow", lineScript_Onshow) + + setFrameIconScripts(line) + + line.SetValue = setBarValue end function Details:ReportSingleLine (instancia, barra) @@ -2568,13 +2567,13 @@ end local function button_stretch_scripts (baseframe, backgrounddisplay, instancia) local button = baseframe.button_stretch - button:SetScript ("OnEnter", function (self) + button:SetScript ("OnEnter", function(self) self.mouse_over = true if (not Details.disable_stretch_button) then Details.FadeHandler.Fader (self, "ALPHA", 1) end end) - button:SetScript ("OnLeave", function (self) + button:SetScript ("OnLeave", function(self) self.mouse_over = false Details.FadeHandler.Fader (self, "ALPHA", 0) end) @@ -2670,7 +2669,7 @@ local function button_stretch_scripts (baseframe, backgrounddisplay, instancia) end) - button:SetScript ("OnMouseUp", function (self, button) + button:SetScript ("OnMouseUp", function(self, button) if (button ~= "LeftButton") then return @@ -2781,7 +2780,7 @@ local function button_down_scripts (main_frame, backgrounddisplay, instancia, sc end) end) - main_frame.button_down:SetScript ("OnMouseUp", function (self) + main_frame.button_down:SetScript ("OnMouseUp", function(self) self.precionado = false self:SetScript ("OnUpdate", nil) end) @@ -2802,7 +2801,7 @@ local function button_up_scripts (main_frame, backgrounddisplay, instancia, scro self.precionado = true self.last_up = -0.3 - self:SetScript ("OnUpdate", function (self, elapsed) + self:SetScript ("OnUpdate", function(self, elapsed) self.last_up = self.last_up + elapsed if (self.last_up > 0.03) then self.last_up = 0 @@ -2816,12 +2815,12 @@ local function button_up_scripts (main_frame, backgrounddisplay, instancia, scro end) end) - main_frame.button_up:SetScript ("OnMouseUp", function (self) + main_frame.button_up:SetScript ("OnMouseUp", function(self) self.precionado = false self:SetScript ("OnUpdate", nil) end) - main_frame.button_up:SetScript ("OnEnable", function (self) + main_frame.button_up:SetScript ("OnEnable", function(self) local current = scrollbar:GetValue() if (current == 0) then main_frame.button_up:Disable() @@ -2887,7 +2886,7 @@ end local function iterate_scroll_scripts (backgrounddisplay, backgroundframe, baseframe, scrollbar, instancia) baseframe:SetScript ("OnMouseWheel", - function (self, delta) + function(self, delta) if (delta > 0) then --> rolou pra cima local A = instancia.barraS[1] if (A) then @@ -2915,7 +2914,7 @@ local function iterate_scroll_scripts (backgrounddisplay, backgroundframe, basef end) - scrollbar:SetScript ("OnValueChanged", function (self) + scrollbar:SetScript ("OnValueChanged", function(self) local ultimo = self.ultimo local meu_valor = self:GetValue() if (ultimo == meu_valor) then --> n�o mudou @@ -3044,27 +3043,27 @@ function Details:InstanceAlert (msg, icon, time, clickfunc, doflash, forceAlert) if (type (icon) == "table") then local texture, w, h, animate, left, right, top, bottom, r, g, b, a = unpack(icon) - self.alert.icon:SetTexture (texture) - self.alert.icon:SetWidth (w or 14) - self.alert.icon:SetHeight (h or 14) + self.alert.icon:SetTexture(texture) + self.alert.icon:SetWidth(w or 14) + self.alert.icon:SetHeight(h or 14) if (left and right and top and bottom) then - self.alert.icon:SetTexCoord (left, right, top, bottom) + self.alert.icon:SetTexCoord(left, right, top, bottom) end if (animate) then self.alert.rotate:Play() end if (r and g and b) then - self.alert.icon:SetVertexColor (r, g, b, a or 1) + self.alert.icon:SetVertexColor(r, g, b, a or 1) end else - self.alert.icon:SetWidth (14) - self.alert.icon:SetHeight (14) - self.alert.icon:SetTexture (icon) - self.alert.icon:SetVertexColor (1, 1, 1, 1) - self.alert.icon:SetTexCoord (0, 1, 0, 1) + self.alert.icon:SetWidth(14) + self.alert.icon:SetHeight(14) + self.alert.icon:SetTexture(icon) + self.alert.icon:SetVertexColor(1, 1, 1, 1) + self.alert.icon:SetTexCoord(0, 1, 0, 1) end else - self.alert.icon:SetTexture ("") + self.alert.icon:SetTexture("") end self.alert.button.func = nil @@ -3079,9 +3078,9 @@ function Details:InstanceAlert (msg, icon, time, clickfunc, doflash, forceAlert) self.alert_time = time Details:ScheduleTimer ("InstanceAlertTime", time, self) - self.alert:SetPoint ("bottom", self.baseframe, "bottom", 0, -12) - self.alert:SetPoint ("left", self.baseframe, "left", 3, 0) - self.alert:SetPoint ("right", self.baseframe, "right", -3, 0) + self.alert:SetPoint("bottom", self.baseframe, "bottom", 0, -12) + self.alert:SetPoint("left", self.baseframe, "left", 3, 0) + self.alert:SetPoint("right", self.baseframe, "right", -3, 0) self.alert:SetFrameStrata ("TOOLTIP") self.alert.button:SetFrameStrata ("TOOLTIP") @@ -3096,7 +3095,7 @@ function Details:InstanceAlert (msg, icon, time, clickfunc, doflash, forceAlert) end -local alert_on_click = function (self, button) +local alert_on_click = function(self, button) if (self.func) then local okey, errortext = pcall (self.func, unpack(self.func_param)) if (not okey) then @@ -3109,54 +3108,54 @@ end local function CreateAlertFrame (baseframe, instancia) local frame_upper = CreateFrame ("scrollframe", "DetailsAlertFrameScroll" .. instancia.meu_id, baseframe) - frame_upper:SetPoint ("bottom", baseframe, "bottom") - frame_upper:SetPoint ("left", baseframe, "left", 3, 0) - frame_upper:SetPoint ("right", baseframe, "right", -3, 0) - frame_upper:SetHeight (13) + frame_upper:SetPoint("bottom", baseframe, "bottom") + frame_upper:SetPoint("left", baseframe, "left", 3, 0) + frame_upper:SetPoint("right", baseframe, "right", -3, 0) + frame_upper:SetHeight(13) frame_upper:SetFrameStrata ("TOOLTIP") local frame_lower = CreateFrame ("frame", "DetailsAlertFrameScrollChild" .. instancia.meu_id, frame_upper) - frame_lower:SetHeight (25) - frame_lower:SetPoint ("left", frame_upper, "left") - frame_lower:SetPoint ("right", frame_upper, "right") + frame_lower:SetHeight(25) + frame_lower:SetPoint("left", frame_upper, "left") + frame_lower:SetPoint("right", frame_upper, "right") frame_upper:SetScrollChild (frame_lower) local alert_bg = CreateFrame ("frame", "DetailsAlertFrame" .. instancia.meu_id, frame_lower,"BackdropTemplate") - alert_bg:SetPoint ("bottom", baseframe, "bottom") - alert_bg:SetPoint ("left", baseframe, "left", 3, 0) - alert_bg:SetPoint ("right", baseframe, "right", -3, 0) - alert_bg:SetHeight (12) + alert_bg:SetPoint("bottom", baseframe, "bottom") + alert_bg:SetPoint("left", baseframe, "left", 3, 0) + alert_bg:SetPoint("right", baseframe, "right", -3, 0) + alert_bg:SetHeight(12) 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 ("FULLSCREEN") - alert_bg:SetFrameLevel (baseframe:GetFrameLevel() + 6) + alert_bg:SetFrameLevel(baseframe:GetFrameLevel() + 6) alert_bg:Hide() local toptexture = alert_bg:CreateTexture (nil, "background") - toptexture:SetTexture ([[Interface\Challenges\challenges-main]]) - --toptexture:SetTexCoord (0.1921484375, 0.523671875, 0.234375, 0.160859375) - toptexture:SetTexCoord (0.231171875, 0.4846484375, 0.0703125, 0.072265625) - toptexture:SetPoint ("left", alert_bg, "left") - toptexture:SetPoint ("right", alert_bg, "right") - toptexture:SetPoint ("bottom", alert_bg, "top", 0, 0) - toptexture:SetHeight (1) + toptexture:SetTexture([[Interface\Challenges\challenges-main]]) + --toptexture:SetTexCoord(0.1921484375, 0.523671875, 0.234375, 0.160859375) + toptexture:SetTexCoord(0.231171875, 0.4846484375, 0.0703125, 0.072265625) + toptexture:SetPoint("left", alert_bg, "left") + toptexture:SetPoint("right", alert_bg, "right") + toptexture:SetPoint("bottom", alert_bg, "top", 0, 0) + toptexture:SetHeight(1) - local text = alert_bg:CreateFontString (nil, "overlay", "GameFontNormal") - text:SetPoint ("right", alert_bg, "right", -14, 0) - Details:SetFontSize (text, 10) - text:SetTextColor (1, 1, 1, 0.8) + local text = alert_bg:CreateFontString(nil, "overlay", "GameFontNormal") + text:SetPoint("right", alert_bg, "right", -14, 0) + Details:SetFontSize(text, 10) + text:SetTextColor(1, 1, 1, 0.8) local rotate_frame = CreateFrame ("frame", "DetailsAlertFrameRotate" .. instancia.meu_id, alert_bg) - rotate_frame:SetWidth (12) - rotate_frame:SetPoint ("right", alert_bg, "right", -2, 0) - rotate_frame:SetHeight (alert_bg:GetWidth()) + 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") - icon:SetWidth (14) - icon:SetHeight (14) + icon:SetPoint("center", rotate_frame, "center") + icon:SetWidth(14) + icon:SetHeight(14) local button = CreateFrame ("button", "DetailsInstance"..instancia.meu_id.."AlertButton", alert_bg) button:SetAllPoints() @@ -3179,17 +3178,17 @@ local function CreateAlertFrame (baseframe, instancia) anime.group:SetOffset (0, 10) anime:SetScript ("OnFinished", function(self) alert_bg:Show() - alert_bg:SetPoint ("bottom", baseframe, "bottom", 0, 0) - alert_bg:SetPoint ("left", baseframe, "left", 3, 0) - alert_bg:SetPoint ("right", baseframe, "right", -3, 0) + alert_bg:SetPoint("bottom", baseframe, "bottom", 0, 0) + alert_bg:SetPoint("left", baseframe, "left", 3, 0) + alert_bg:SetPoint("right", baseframe, "right", -3, 0) end) - local on_enter_alert = function (self) - text:SetTextColor (1, 0.8, 0.3, 1) + local on_enter_alert = function(self) + text:SetTextColor(1, 0.8, 0.3, 1) icon:SetBlendMode ("ADD") end - local on_leave_alert = function (self) - text:SetTextColor (1, 1, 1, 0.8) + local on_leave_alert = function(self) + text:SetTextColor(1, 1, 1, 0.8) icon:SetBlendMode ("BLEND") end @@ -3201,8 +3200,8 @@ local function CreateAlertFrame (baseframe, instancia) end local flash_texture = button:CreateTexture (nil, "overlay") - flash_texture:SetTexCoord (53/512, 347/512, 58/256, 120/256) - flash_texture:SetTexture ([[Interface\AchievementFrame\UI-Achievement-Alert-Glow]]) + flash_texture:SetTexCoord(53/512, 347/512, 58/256, 120/256) + flash_texture:SetTexture([[Interface\AchievementFrame\UI-Achievement-Alert-Glow]]) flash_texture:SetAllPoints() flash_texture:SetBlendMode ("ADD") local animation = flash_texture:CreateAnimationGroup() @@ -3220,7 +3219,7 @@ local function CreateAlertFrame (baseframe, instancia) anim1:SetToAlpha (0) anim2:SetDuration (0.2) - animation:SetScript ("OnFinished", function (self) + animation:SetScript ("OnFinished", function(self) flash_texture:Hide() end) flash_texture:Hide() @@ -3251,29 +3250,29 @@ function Details:InstanceMsg (text, icon, textcolor, iconcoords, iconcolor) end self.freeze_texto:SetText (text) - self.freeze_icon:SetTexture (icon or [[Interface\CHARACTERFRAME\Disconnect-Icon]]) + self.freeze_icon:SetTexture(icon or [[Interface\CHARACTERFRAME\Disconnect-Icon]]) self.freeze_icon:Show() self.freeze_texto:Show() if (textcolor) then local r, g, b, a = gump:ParseColors (textcolor) - self.freeze_texto:SetTextColor (r, g, b, a) + self.freeze_texto:SetTextColor(r, g, b, a) else - self.freeze_texto:SetTextColor (1, 1, 1, 1) + self.freeze_texto:SetTextColor(1, 1, 1, 1) end if (iconcoords and type (iconcoords) == "table") then - self.freeze_icon:SetTexCoord (unpack(iconcoords)) + self.freeze_icon:SetTexCoord(unpack(iconcoords)) else - self.freeze_icon:SetTexCoord (0, 1, 0, 1) + self.freeze_icon:SetTexCoord(0, 1, 0, 1) end if (iconcolor) then local r, g, b, a = gump:ParseColors (iconcolor) - self.freeze_icon:SetVertexColor (r, g, b, a) + self.freeze_icon:SetVertexColor(r, g, b, a) else - self.freeze_icon:SetVertexColor (1, 1, 1, 1) + self.freeze_icon:SetVertexColor(1, 1, 1, 1) end end @@ -3301,9 +3300,9 @@ local function show_anti_overlap (instance, host, side) anti_menu_overlap:ClearAllPoints() if (side == "top") then - anti_menu_overlap:SetPoint ("bottom", host, "top") + anti_menu_overlap:SetPoint("bottom", host, "top") elseif (side == "bottom") then - anti_menu_overlap:SetPoint ("top", host, "bottom") + anti_menu_overlap:SetPoint("top", host, "bottom") end anti_menu_overlap:Show() end @@ -3314,8 +3313,8 @@ Details.snap_alert:SetFrameStrata ("FULLSCREEN") function Details:SnapAlert() Details.snap_alert:ClearAllPoints() - Details.snap_alert:SetPoint ("topleft", self.baseframe.cabecalho.modo_selecao.widget, "topleft", -8, 6) - Details.snap_alert:SetPoint ("bottomright", self.baseframe.cabecalho.modo_selecao.widget, "bottomright", 8, -6) + Details.snap_alert:SetPoint("topleft", self.baseframe.cabecalho.modo_selecao.widget, "topleft", -8, 6) + Details.snap_alert:SetPoint("bottomright", self.baseframe.cabecalho.modo_selecao.widget, "bottomright", 8, -6) Details.snap_alert.animOut:Stop() Details.snap_alert.animIn:Play() end @@ -3325,14 +3324,14 @@ do --search key: ~tooltip local tooltip_anchor = CreateFrame ("frame", "DetailsTooltipAnchor", UIParent,"BackdropTemplate") tooltip_anchor:SetSize (140, 20) - tooltip_anchor:SetAlpha (0) + tooltip_anchor:SetAlpha(0) tooltip_anchor:SetMovable (false) tooltip_anchor:SetClampedToScreen (true) tooltip_anchor.locked = true tooltip_anchor:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]], edgeSize = 10, insets = {left = 1, right = 1, top = 2, bottom = 1}}) tooltip_anchor:SetBackdropColor (0, 0, 0, 1) - tooltip_anchor:SetScript ("OnEnter", function (self) + tooltip_anchor:SetScript ("OnEnter", function(self) tooltip_anchor.alert.animIn:Stop() tooltip_anchor.alert.animOut:Play() GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") @@ -3341,18 +3340,18 @@ do GameTooltip:Show() end) - tooltip_anchor:SetScript ("OnLeave", function (self) + tooltip_anchor:SetScript ("OnLeave", function(self) GameTooltip:Hide() end) - tooltip_anchor:SetScript ("OnMouseDown", function (self, button) + tooltip_anchor:SetScript ("OnMouseDown", function(self, button) if (not self.moving and button == "LeftButton") then self:StartMoving() self.moving = true end end) - tooltip_anchor:SetScript ("OnMouseUp", function (self, button) + tooltip_anchor:SetScript ("OnMouseUp", function(self, button) if (self.moving) then self:StopMovingOrSizing() self.moving = false @@ -3371,16 +3370,16 @@ do function tooltip_anchor:MoveAnchor() if (self.locked) then - self:SetAlpha (1) - self:EnableMouse (true) + self:SetAlpha(1) + self:EnableMouse(true) self:SetMovable (true) self:SetFrameStrata ("FULLSCREEN") self.locked = false tooltip_anchor.alert.animOut:Stop() tooltip_anchor.alert.animIn:Play() else - self:SetAlpha (0) - self:EnableMouse (false) + self:SetAlpha(0) + self:EnableMouse(false) self:SetFrameStrata ("MEDIUM") self:SetMovable (false) self.locked = true @@ -3397,25 +3396,25 @@ do y = y * UIscale / scale self:ClearAllPoints() self:SetParent (UIParent) - self:SetPoint ("center", UIParent, "center", x, y) + self:SetPoint("center", UIParent, "center", x, y) end tooltip_anchor.alert = CreateFrame ("frame", "DetailsTooltipAnchorAlert", UIParent, "ActionBarButtonSpellActivationAlert") tooltip_anchor.alert:SetFrameStrata ("FULLSCREEN") tooltip_anchor.alert:Hide() - tooltip_anchor.alert:SetPoint ("topleft", tooltip_anchor, "topleft", -60, 6) - tooltip_anchor.alert:SetPoint ("bottomright", tooltip_anchor, "bottomright", 40, -6) + tooltip_anchor.alert:SetPoint("topleft", tooltip_anchor, "topleft", -60, 6) + tooltip_anchor.alert:SetPoint("bottomright", tooltip_anchor, "bottomright", 40, -6) local icon = tooltip_anchor:CreateTexture (nil, "overlay") - icon:SetTexture ([[Interface\AddOns\Details\images\minimap]]) - icon:SetPoint ("left", tooltip_anchor, "left", 4, 0) + icon:SetTexture([[Interface\AddOns\Details\images\minimap]]) + icon:SetPoint("left", tooltip_anchor, "left", 4, 0) icon:SetSize (18, 18) - local text = tooltip_anchor:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - text:SetPoint ("left", icon, "right", 6, 0) + local text = tooltip_anchor:CreateFontString(nil, "overlay", "GameFontHighlightSmall") + text:SetPoint("left", icon, "right", 6, 0) text:SetText (Loc["STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT"]) - tooltip_anchor:EnableMouse (false) + tooltip_anchor:EnableMouse(false) end @@ -3472,17 +3471,17 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) --backgrounddisplay is a scrollschild of backgroundframe, hence its children won't show outside its canvas local backgroundframe = CreateFrame ("scrollframe", "Details_WindowFrame"..ID, baseframe) --window frame local backgrounddisplay = CreateFrame ("frame", "Details_GumpFrame"..ID, backgroundframe,"BackdropTemplate") --gump frame - backgroundframe:SetFrameLevel (3) - backgrounddisplay:SetFrameLevel (3) + backgroundframe:SetFrameLevel(3) + backgrounddisplay:SetFrameLevel(3) backgroundframe.instance = instancia backgrounddisplay.instance = instancia instancia.windowBackgroundDisplay = backgrounddisplay --> row frame is the parent of rows, it have setallpoints on baseframe local rowframe = CreateFrame ("frame", "DetailsRowFrame"..ID, _UIParent) --row frame - rowframe:SetAllPoints (baseframe) + rowframe:SetAllPoints(baseframe) rowframe:SetFrameStrata (baseframe_strata) - rowframe:SetFrameLevel (3) + rowframe:SetFrameLevel(3) rowframe:EnableMouse(false) instancia.rowframe = rowframe @@ -3493,23 +3492,23 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) --> right click bookmark local switchbutton = CreateFrame("button", "Details_SwitchButtonFrame" .. ID, UIParent) - switchbutton:SetAllPoints (baseframe) + switchbutton:SetAllPoints(baseframe) switchbutton:SetFrameStrata (baseframe_strata) - switchbutton:SetFrameLevel (4) + switchbutton:SetFrameLevel(4) instancia.windowSwitchButton = switchbutton --> avoid mouse hover over a high window when the menu is open for a lower instance. local anti_menu_overlap = CreateFrame ("frame", "Details_WindowFrameAntiMenuOverlap" .. ID, UIParent) anti_menu_overlap:SetSize (100, 13) anti_menu_overlap:SetFrameStrata ("DIALOG") - anti_menu_overlap:EnableMouse (true) + anti_menu_overlap:EnableMouse(true) anti_menu_overlap:Hide() --anti_menu_overlap:SetBackdrop (gump_fundo_backdrop) --debug baseframe.anti_menu_overlap = anti_menu_overlap --> floating frame is an anchor for widgets which should be overlaying the window local floatingframe = CreateFrame ("frame", "DetailsInstance"..ID.."BorderHolder", baseframe) - floatingframe:SetFrameLevel (baseframe:GetFrameLevel()+7) + floatingframe:SetFrameLevel(baseframe:GetFrameLevel()+7) instancia.floatingframe = floatingframe -- scroll bar ----------------------------------------------------------------------------------------------------------------------------------------------- @@ -3519,53 +3518,53 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) --> scroll image-node up baseframe.scroll_up = backgrounddisplay:CreateTexture (nil, "background") - baseframe.scroll_up:SetPoint ("topleft", backgrounddisplay, "topright", 0, 0) - baseframe.scroll_up:SetTexture (DEFAULT_SKIN) - baseframe.scroll_up:SetTexCoord (unpack(COORDS_SLIDER_TOP)) - baseframe.scroll_up:SetWidth (32) - baseframe.scroll_up:SetHeight (32) + baseframe.scroll_up:SetPoint("topleft", backgrounddisplay, "topright", 0, 0) + baseframe.scroll_up:SetTexture(DEFAULT_SKIN) + baseframe.scroll_up:SetTexCoord(unpack(COORDS_SLIDER_TOP)) + baseframe.scroll_up:SetWidth(32) + baseframe.scroll_up:SetHeight(32) --> scroll image-node down baseframe.scroll_down = backgrounddisplay:CreateTexture (nil, "background") - baseframe.scroll_down:SetPoint ("bottomleft", backgrounddisplay, "bottomright", 0, 0) - baseframe.scroll_down:SetTexture (DEFAULT_SKIN) - baseframe.scroll_down:SetTexCoord (unpack(COORDS_SLIDER_DOWN)) - baseframe.scroll_down:SetWidth (32) - baseframe.scroll_down:SetHeight (32) + baseframe.scroll_down:SetPoint("bottomleft", backgrounddisplay, "bottomright", 0, 0) + baseframe.scroll_down:SetTexture(DEFAULT_SKIN) + baseframe.scroll_down:SetTexCoord(unpack(COORDS_SLIDER_DOWN)) + baseframe.scroll_down:SetWidth(32) + baseframe.scroll_down:SetHeight(32) --> scroll image-node middle baseframe.scroll_middle = backgrounddisplay:CreateTexture (nil, "background") - baseframe.scroll_middle:SetPoint ("top", baseframe.scroll_up, "bottom", 0, 8) - baseframe.scroll_middle:SetPoint ("bottom", baseframe.scroll_down, "top", 0, -11) - baseframe.scroll_middle:SetTexture (DEFAULT_SKIN) - baseframe.scroll_middle:SetTexCoord (unpack(COORDS_SLIDER_MIDDLE)) - baseframe.scroll_middle:SetWidth (32) - baseframe.scroll_middle:SetHeight (64) + baseframe.scroll_middle:SetPoint("top", baseframe.scroll_up, "bottom", 0, 8) + baseframe.scroll_middle:SetPoint("bottom", baseframe.scroll_down, "top", 0, -11) + baseframe.scroll_middle:SetTexture(DEFAULT_SKIN) + baseframe.scroll_middle:SetTexCoord(unpack(COORDS_SLIDER_MIDDLE)) + baseframe.scroll_middle:SetWidth(32) + baseframe.scroll_middle:SetHeight(64) --> scroll widgets baseframe.button_up = CreateFrame ("button", "DetailsScrollUp" .. instancia.meu_id, backgrounddisplay) baseframe.button_down = CreateFrame ("button", "DetailsScrollDown" .. instancia.meu_id, backgrounddisplay) - baseframe.button_up:SetWidth (29) - baseframe.button_up:SetHeight (32) + baseframe.button_up:SetWidth(29) + baseframe.button_up:SetHeight(32) baseframe.button_up:SetNormalTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Up]]) baseframe.button_up:SetPushedTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Down]]) baseframe.button_up:SetDisabledTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Disabled]]) baseframe.button_up:Disable() - baseframe.button_down:SetWidth (29) - baseframe.button_down:SetHeight (32) + baseframe.button_down:SetWidth(29) + baseframe.button_down:SetHeight(32) baseframe.button_down:SetNormalTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Up]]) baseframe.button_down:SetPushedTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Down]]) baseframe.button_down:SetDisabledTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Disabled]]) baseframe.button_down:Disable() - baseframe.button_up:SetPoint ("topright", baseframe.scroll_up, "topright", -4, 3) - baseframe.button_down:SetPoint ("bottomright", baseframe.scroll_down, "bottomright", -4, -6) + baseframe.button_up:SetPoint("topright", baseframe.scroll_up, "topright", -4, 3) + baseframe.button_down:SetPoint("bottomright", baseframe.scroll_down, "bottomright", -4, -6) - scrollbar:SetPoint ("top", baseframe.button_up, "bottom", 0, 12) - scrollbar:SetPoint ("bottom", baseframe.button_down, "top", 0, -12) - scrollbar:SetPoint ("left", backgrounddisplay, "right", 3, 0) + scrollbar:SetPoint("top", baseframe.button_up, "bottom", 0, 12) + scrollbar:SetPoint("bottom", baseframe.button_down, "top", 0, -12) + scrollbar:SetPoint("left", backgrounddisplay, "right", 3, 0) scrollbar:Show() --> config set @@ -3577,7 +3576,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) --> thumb scrollbar.thumb = scrollbar:CreateTexture (nil, "overlay") - scrollbar.thumb:SetTexture ([[Interface\Buttons\UI-ScrollBar-Knob]]) + scrollbar.thumb:SetTexture([[Interface\Buttons\UI-ScrollBar-Knob]]) scrollbar.thumb:SetSize (29, 30) scrollbar:SetThumbTexture (scrollbar.thumb) @@ -3588,20 +3587,20 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) -- stretch button ----------------------------------------------------------------------------------------------------------------------------------------------- baseframe.button_stretch = CreateFrame ("button", "DetailsButtonStretch" .. instancia.meu_id, baseframe) - baseframe.button_stretch:SetPoint ("bottom", baseframe, "top", 0, 20) - baseframe.button_stretch:SetPoint ("right", baseframe, "right", -27, 0) - baseframe.button_stretch:SetFrameLevel (1) + baseframe.button_stretch:SetPoint("bottom", baseframe, "top", 0, 20) + baseframe.button_stretch:SetPoint("right", baseframe, "right", -27, 0) + baseframe.button_stretch:SetFrameLevel(1) local stretch_texture = baseframe.button_stretch:CreateTexture (nil, "overlay") - stretch_texture:SetTexture (DEFAULT_SKIN) - stretch_texture:SetTexCoord (unpack(COORDS_STRETCH)) - stretch_texture:SetWidth (32) - stretch_texture:SetHeight (16) - stretch_texture:SetAllPoints (baseframe.button_stretch) + stretch_texture:SetTexture(DEFAULT_SKIN) + stretch_texture:SetTexCoord(unpack(COORDS_STRETCH)) + stretch_texture:SetWidth(32) + stretch_texture:SetHeight(16) + stretch_texture:SetAllPoints(baseframe.button_stretch) baseframe.button_stretch.texture = stretch_texture - baseframe.button_stretch:SetWidth (32) - baseframe.button_stretch:SetHeight (16) + baseframe.button_stretch:SetWidth(32) + baseframe.button_stretch:SetHeight(16) baseframe.button_stretch:Show() Details.FadeHandler.Fader (baseframe.button_stretch, "ALPHA", 0) @@ -3613,9 +3612,9 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe:SetClampedToScreen (true) baseframe:SetSize (Details.new_window_size.width, Details.new_window_size.height) - baseframe:SetPoint ("center", _UIParent) + baseframe:SetPoint("center", _UIParent) baseframe:EnableMouseWheel (false) - baseframe:EnableMouse (true) + baseframe:EnableMouse(true) if (not DetailsFramework.IsDragonflight()) then baseframe:SetMinResize (150, 7) @@ -3629,43 +3628,43 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) -- background window config ------------------------------------------------------------------------------------------------------------------------------------------------- - backgroundframe:SetAllPoints (baseframe) + backgroundframe:SetAllPoints(baseframe) backgroundframe:SetScrollChild (backgrounddisplay) backgrounddisplay:SetResizable (true) - backgrounddisplay:SetPoint ("topleft", baseframe, "topleft") - backgrounddisplay:SetPoint ("bottomright", baseframe, "bottomright") + backgrounddisplay:SetPoint("topleft", baseframe, "topleft") + backgrounddisplay:SetPoint("bottomright", baseframe, "bottomright") backgrounddisplay:SetBackdrop (defaultBackdropSt) backgrounddisplay:SetBackdropColor (instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha) -- instance mini widgets ------------------------------------------------------------------------------------------------------------------------------------------------- --> overall data warning - instancia.overall_data_warning = backgrounddisplay:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - instancia.overall_data_warning:SetHeight (64) - instancia.overall_data_warning:SetPoint ("center", backgrounddisplay, "center") - instancia.overall_data_warning:SetTextColor (.8, .8, .8, .5) + instancia.overall_data_warning = backgrounddisplay:CreateFontString(nil, "overlay", "GameFontHighlightSmall") + instancia.overall_data_warning:SetHeight(64) + instancia.overall_data_warning:SetPoint("center", backgrounddisplay, "center") + instancia.overall_data_warning:SetTextColor(.8, .8, .8, .5) instancia.overall_data_warning:Hide() instancia.overall_data_warning:SetText (Loc["STRING_TUTORIAL_OVERALL1"]) --> freeze icon instancia.freeze_icon = backgrounddisplay:CreateTexture (nil, "overlay") - instancia.freeze_icon:SetWidth (64) - instancia.freeze_icon:SetHeight (64) - instancia.freeze_icon:SetPoint ("center", backgrounddisplay, "center") - instancia.freeze_icon:SetPoint ("left", backgrounddisplay, "left") + instancia.freeze_icon:SetWidth(64) + instancia.freeze_icon:SetHeight(64) + instancia.freeze_icon:SetPoint("center", backgrounddisplay, "center") + instancia.freeze_icon:SetPoint("left", backgrounddisplay, "left") instancia.freeze_icon:Hide() - instancia.freeze_texto = backgrounddisplay:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - instancia.freeze_texto:SetHeight (64) - instancia.freeze_texto:SetPoint ("left", instancia.freeze_icon, "right", -18, 0) - instancia.freeze_texto:SetTextColor (1, 1, 1) + instancia.freeze_texto = backgrounddisplay:CreateFontString(nil, "overlay", "GameFontHighlightSmall") + instancia.freeze_texto:SetHeight(64) + instancia.freeze_texto:SetPoint("left", instancia.freeze_icon, "right", -18, 0) + instancia.freeze_texto:SetTextColor(1, 1, 1) instancia.freeze_texto:Hide() --> details version - instancia._version = baseframe:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - --instancia._version:SetPoint ("left", backgrounddisplay, "left", 20, 0) - instancia._version:SetTextColor (1, 1, 1) + instancia._version = baseframe:CreateFontString(nil, "overlay", "GameFontHighlightSmall") + --instancia._version:SetPoint("left", backgrounddisplay, "left", 20, 0) + instancia._version:SetTextColor(1, 1, 1) instancia._version:SetText ("this is a alpha version of Details\nyou can help us sending bug reports\nuse the blue button.") if (not Details.initializing) then @@ -3686,61 +3685,61 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.resize_direita = CreateFrame ("button", "Details_Resize_Direita"..ID, baseframe) local resize_direita_texture = baseframe.resize_direita:CreateTexture (nil, "overlay") - resize_direita_texture:SetWidth (16) - resize_direita_texture:SetHeight (16) - resize_direita_texture:SetTexture (DEFAULT_SKIN) - resize_direita_texture:SetTexCoord (unpack(COORDS_RESIZE_RIGHT)) - resize_direita_texture:SetAllPoints (baseframe.resize_direita) + resize_direita_texture:SetWidth(16) + resize_direita_texture:SetHeight(16) + resize_direita_texture:SetTexture(DEFAULT_SKIN) + resize_direita_texture:SetTexCoord(unpack(COORDS_RESIZE_RIGHT)) + resize_direita_texture:SetAllPoints(baseframe.resize_direita) baseframe.resize_direita.texture = resize_direita_texture - baseframe.resize_direita:SetWidth (16) - baseframe.resize_direita:SetHeight (16) - baseframe.resize_direita:SetPoint ("bottomright", baseframe, "bottomright", 0, 0) - baseframe.resize_direita:EnableMouse (true) + baseframe.resize_direita:SetWidth(16) + baseframe.resize_direita:SetHeight(16) + baseframe.resize_direita:SetPoint("bottomright", baseframe, "bottomright", 0, 0) + baseframe.resize_direita:EnableMouse(true) baseframe.resize_direita:SetFrameStrata ("HIGH") - baseframe.resize_direita:SetFrameLevel (baseframe:GetFrameLevel() + 6) + baseframe.resize_direita:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.resize_direita.side = 2 --> lock window button baseframe.lock_button = CreateFrame ("button", "Details_Lock_Button"..ID, baseframe) - baseframe.lock_button:SetPoint ("right", baseframe.resize_direita, "left", -1, 1.5) - baseframe.lock_button:SetFrameLevel (baseframe:GetFrameLevel() + 6) - baseframe.lock_button:SetWidth (40) - baseframe.lock_button:SetHeight (16) - baseframe.lock_button.label = baseframe.lock_button:CreateFontString (nil, "overlay", "GameFontNormal") - baseframe.lock_button.label:SetPoint ("right", baseframe.lock_button, "right") - baseframe.lock_button.label:SetTextColor (.6, .6, .6, .7) + baseframe.lock_button:SetPoint("right", baseframe.resize_direita, "left", -1, 1.5) + baseframe.lock_button:SetFrameLevel(baseframe:GetFrameLevel() + 6) + baseframe.lock_button:SetWidth(40) + baseframe.lock_button:SetHeight(16) + baseframe.lock_button.label = baseframe.lock_button:CreateFontString(nil, "overlay", "GameFontNormal") + baseframe.lock_button.label:SetPoint("right", baseframe.lock_button, "right") + baseframe.lock_button.label:SetTextColor(.6, .6, .6, .7) baseframe.lock_button.label:SetJustifyH ("right") baseframe.lock_button.label:SetText (Loc["STRING_LOCK_WINDOW"]) - baseframe.lock_button:SetWidth (baseframe.lock_button.label:GetStringWidth()+2) + baseframe.lock_button:SetWidth(baseframe.lock_button.label:GetStringWidth()+2) baseframe.lock_button:SetScript ("OnClick", lockFunctionOnClick) baseframe.lock_button:SetScript ("OnEnter", lockFunctionOnEnter) baseframe.lock_button:SetScript ("OnLeave", lockFunctionOnLeave) baseframe.lock_button:SetScript ("OnHide", lockFunctionOnHide) baseframe.lock_button:SetFrameStrata ("HIGH") - baseframe.lock_button:SetFrameLevel (baseframe:GetFrameLevel() + 6) + baseframe.lock_button:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.lock_button.instancia = instancia --> left resizer baseframe.resize_esquerda = CreateFrame ("button", "Details_Resize_Esquerda"..ID, baseframe) local resize_esquerda_texture = baseframe.resize_esquerda:CreateTexture (nil, "overlay") - resize_esquerda_texture:SetWidth (16) - resize_esquerda_texture:SetHeight (16) - resize_esquerda_texture:SetTexture (DEFAULT_SKIN) - resize_esquerda_texture:SetTexCoord (unpack(COORDS_RESIZE_LEFT)) - resize_esquerda_texture:SetAllPoints (baseframe.resize_esquerda) + resize_esquerda_texture:SetWidth(16) + resize_esquerda_texture:SetHeight(16) + resize_esquerda_texture:SetTexture(DEFAULT_SKIN) + resize_esquerda_texture:SetTexCoord(unpack(COORDS_RESIZE_LEFT)) + resize_esquerda_texture:SetAllPoints(baseframe.resize_esquerda) baseframe.resize_esquerda.texture = resize_esquerda_texture - baseframe.resize_esquerda:SetWidth (16) - baseframe.resize_esquerda:SetHeight (16) - baseframe.resize_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", 0, 0) - baseframe.resize_esquerda:EnableMouse (true) + baseframe.resize_esquerda:SetWidth(16) + baseframe.resize_esquerda:SetHeight(16) + baseframe.resize_esquerda:SetPoint("bottomleft", baseframe, "bottomleft", 0, 0) + baseframe.resize_esquerda:EnableMouse(true) baseframe.resize_esquerda:SetFrameStrata ("HIGH") - baseframe.resize_esquerda:SetFrameLevel (baseframe:GetFrameLevel() + 6) + baseframe.resize_esquerda:SetFrameLevel(baseframe:GetFrameLevel() + 6) - baseframe.resize_esquerda:SetAlpha (0) - baseframe.resize_direita:SetAlpha (0) + baseframe.resize_esquerda:SetAlpha(0) + baseframe.resize_direita:SetAlpha(0) if (instancia.isLocked) then instancia.isLocked = not instancia.isLocked @@ -3771,36 +3770,36 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) --> left baseframe.barra_esquerda = floatingframe:CreateTexture (nil, "artwork") - baseframe.barra_esquerda:SetTexture (DEFAULT_SKIN) - baseframe.barra_esquerda:SetTexCoord (unpack(COORDS_LEFT_SIDE_BAR)) - baseframe.barra_esquerda:SetWidth (64) + baseframe.barra_esquerda:SetTexture(DEFAULT_SKIN) + baseframe.barra_esquerda:SetTexCoord(unpack(COORDS_LEFT_SIDE_BAR)) + baseframe.barra_esquerda:SetWidth(64) baseframe.barra_esquerda:SetHeight (512) - baseframe.barra_esquerda:SetPoint ("topleft", baseframe, "topleft", -56, 0) - baseframe.barra_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", -56, -14) + baseframe.barra_esquerda:SetPoint("topleft", baseframe, "topleft", -56, 0) + baseframe.barra_esquerda:SetPoint("bottomleft", baseframe, "bottomleft", -56, -14) --> right baseframe.barra_direita = floatingframe:CreateTexture (nil, "artwork") - baseframe.barra_direita:SetTexture (DEFAULT_SKIN) - baseframe.barra_direita:SetTexCoord (unpack(COORDS_RIGHT_SIDE_BAR)) - baseframe.barra_direita:SetWidth (64) - baseframe.barra_direita:SetHeight (512) - baseframe.barra_direita:SetPoint ("topright", baseframe, "topright", 56, 0) - baseframe.barra_direita:SetPoint ("bottomright", baseframe, "bottomright", 56, -14) + baseframe.barra_direita:SetTexture(DEFAULT_SKIN) + baseframe.barra_direita:SetTexCoord(unpack(COORDS_RIGHT_SIDE_BAR)) + baseframe.barra_direita:SetWidth(64) + baseframe.barra_direita:SetHeight(512) + baseframe.barra_direita:SetPoint("topright", baseframe, "topright", 56, 0) + baseframe.barra_direita:SetPoint("bottomright", baseframe, "bottomright", 56, -14) --> bottom baseframe.barra_fundo = floatingframe:CreateTexture (nil, "artwork") - baseframe.barra_fundo:SetTexture (DEFAULT_SKIN) - baseframe.barra_fundo:SetTexCoord (unpack(COORDS_BOTTOM_SIDE_BAR)) - baseframe.barra_fundo:SetWidth (512) - baseframe.barra_fundo:SetHeight (64) - baseframe.barra_fundo:SetPoint ("bottomleft", baseframe, "bottomleft", 0, -56) - baseframe.barra_fundo:SetPoint ("bottomright", baseframe, "bottomright", 0, -56) + baseframe.barra_fundo:SetTexture(DEFAULT_SKIN) + baseframe.barra_fundo:SetTexCoord(unpack(COORDS_BOTTOM_SIDE_BAR)) + baseframe.barra_fundo:SetWidth(512) + baseframe.barra_fundo:SetHeight(64) + baseframe.barra_fundo:SetPoint("bottomleft", baseframe, "bottomleft", 0, -56) + baseframe.barra_fundo:SetPoint("bottomright", baseframe, "bottomright", 0, -56) -- break snap button ---------------------------------------------------------------------------------------------------------------------------------------------------------- instancia.break_snap_button = CreateFrame ("button", "DetailsBreakSnapButton" .. ID, floatingframe) - instancia.break_snap_button:SetPoint ("bottom", baseframe.resize_direita, "top", -1, 0) - instancia.break_snap_button:SetFrameLevel (baseframe:GetFrameLevel() + 5) + instancia.break_snap_button:SetPoint("bottom", baseframe.resize_direita, "top", -1, 0) + instancia.break_snap_button:SetFrameLevel(baseframe:GetFrameLevel() + 5) instancia.break_snap_button:SetSize (13, 13) - instancia.break_snap_button:SetAlpha (0) + instancia.break_snap_button:SetAlpha(0) instancia.break_snap_button.instancia = instancia @@ -3823,10 +3822,10 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) instancia.break_snap_button:SetHighlightTexture (DEFAULT_SKIN, "ADD") instancia.break_snap_button:SetPushedTexture (DEFAULT_SKIN) - instancia.break_snap_button:GetNormalTexture():SetTexCoord (unpack(COORDS_UNLOCK_BUTTON)) - instancia.break_snap_button:GetDisabledTexture():SetTexCoord (unpack(COORDS_UNLOCK_BUTTON)) - instancia.break_snap_button:GetHighlightTexture():SetTexCoord (unpack(COORDS_UNLOCK_BUTTON)) - instancia.break_snap_button:GetPushedTexture():SetTexCoord (unpack(COORDS_UNLOCK_BUTTON)) + instancia.break_snap_button:GetNormalTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) + instancia.break_snap_button:GetDisabledTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) + instancia.break_snap_button:GetHighlightTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) + instancia.break_snap_button:GetPushedTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) -- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -3841,11 +3840,11 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) fcima:Hide() instancia.h_cima = fcima:CreateTexture (nil, "overlay") - instancia.h_cima:SetTexture ([[Interface\AddOns\Details\images\highlight_updown]]) - instancia.h_cima:SetTexCoord (0, 1, 0.5, 1) - instancia.h_cima:SetPoint ("topleft", baseframe.cabecalho.top_bg, "bottomleft", -10, 37) - instancia.h_cima:SetPoint ("topright", baseframe.cabecalho.ball_r, "bottomright", -97, 37) - instancia.h_cima:SetDesaturated (true) + instancia.h_cima:SetTexture([[Interface\AddOns\Details\images\highlight_updown]]) + instancia.h_cima:SetTexCoord(0, 1, 0.5, 1) + instancia.h_cima:SetPoint("topleft", baseframe.cabecalho.top_bg, "bottomleft", -10, 37) + instancia.h_cima:SetPoint("topright", baseframe.cabecalho.ball_r, "bottomright", -97, 37) + instancia.h_cima:SetDesaturated(true) fcima.texture = instancia.h_cima instancia.h_cima = fcima @@ -3855,11 +3854,11 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) fbaixo:Hide() instancia.h_baixo = fbaixo:CreateTexture (nil, "overlay") - instancia.h_baixo:SetTexture ([[Interface\AddOns\Details\images\highlight_updown]]) - instancia.h_baixo:SetTexCoord (0, 1, 0, 0.5) - instancia.h_baixo:SetPoint ("topleft", baseframe.rodape.esquerdo, "bottomleft", 16, 17) - instancia.h_baixo:SetPoint ("topright", baseframe.rodape.direita, "bottomright", -16, 17) - instancia.h_baixo:SetDesaturated (true) + instancia.h_baixo:SetTexture([[Interface\AddOns\Details\images\highlight_updown]]) + instancia.h_baixo:SetTexCoord(0, 1, 0, 0.5) + instancia.h_baixo:SetPoint("topleft", baseframe.rodape.esquerdo, "bottomleft", 16, 17) + instancia.h_baixo:SetPoint("topright", baseframe.rodape.direita, "bottomright", -16, 17) + instancia.h_baixo:SetDesaturated(true) fbaixo.texture = instancia.h_baixo instancia.h_baixo = fbaixo @@ -3869,11 +3868,11 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) fesquerda:Hide() instancia.h_esquerda = fesquerda:CreateTexture (nil, "overlay") - instancia.h_esquerda:SetTexture ([[Interface\AddOns\Details\images\highlight_leftright]]) - instancia.h_esquerda:SetTexCoord (0.5, 1, 0, 1) - instancia.h_esquerda:SetPoint ("topleft", baseframe.barra_esquerda, "topleft", 40, 0) - instancia.h_esquerda:SetPoint ("bottomleft", baseframe.barra_esquerda, "bottomleft", 40, 0) - instancia.h_esquerda:SetDesaturated (true) + instancia.h_esquerda:SetTexture([[Interface\AddOns\Details\images\highlight_leftright]]) + instancia.h_esquerda:SetTexCoord(0.5, 1, 0, 1) + instancia.h_esquerda:SetPoint("topleft", baseframe.barra_esquerda, "topleft", 40, 0) + instancia.h_esquerda:SetPoint("bottomleft", baseframe.barra_esquerda, "bottomleft", 40, 0) + instancia.h_esquerda:SetDesaturated(true) fesquerda.texture = instancia.h_esquerda instancia.h_esquerda = fesquerda @@ -3883,11 +3882,11 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) fdireita:Hide() instancia.h_direita = fdireita:CreateTexture (nil, "overlay") - instancia.h_direita:SetTexture ([[Interface\AddOns\Details\images\highlight_leftright]]) - instancia.h_direita:SetTexCoord (0, 0.5, 1, 0) - instancia.h_direita:SetPoint ("topleft", baseframe.barra_direita, "topleft", 8, 18) - instancia.h_direita:SetPoint ("bottomleft", baseframe.barra_direita, "bottomleft", 8, 0) - instancia.h_direita:SetDesaturated (true) + instancia.h_direita:SetTexture([[Interface\AddOns\Details\images\highlight_leftright]]) + instancia.h_direita:SetTexCoord(0, 0.5, 1, 0) + instancia.h_direita:SetPoint("topleft", baseframe.barra_direita, "topleft", 8, 18) + instancia.h_direita:SetPoint("bottomleft", baseframe.barra_direita, "bottomleft", 8, 0) + instancia.h_direita:SetDesaturated(true) fdireita.texture = instancia.h_direita instancia.h_direita = fdireita @@ -3918,7 +3917,7 @@ end function Details:ShowOverallDataWarning (state) if (state) then self.overall_data_warning:Show() - self.overall_data_warning:SetWidth (self:GetSize() - 20) + self.overall_data_warning:SetWidth(self:GetSize() - 20) else self.overall_data_warning:Hide() end @@ -3971,10 +3970,10 @@ function Details:SetBarGrowDirection (direction) if (self.toolbar_side == 1) then --> if titlebar is attached to the top side, don't add any midifiers - row:SetPoint ("topleft", baseframe, "topleft", x, y) + row:SetPoint("topleft", baseframe, "topleft", x, y) else --> if the titlebar is on the bottom side, remove the gap between the baseframe and the titlebar - row:SetPoint ("topleft", baseframe, "topleft", x, y - 1) + row:SetPoint("topleft", baseframe, "topleft", x, y - 1) end end @@ -3984,10 +3983,10 @@ function Details:SetBarGrowDirection (direction) row:ClearAllPoints() if (self.toolbar_side == 1) then --> if the titlebar is attached to the top side, we want to align bars a little above - row:SetPoint ("bottomleft", baseframe, "bottomleft", x, y + 2) + row:SetPoint("bottomleft", baseframe, "bottomleft", x, y + 2) else --> the titlebar is on the bottom side, align bars on the bottom - row:SetPoint ("bottomleft", baseframe, "bottomleft", x, y + 0) + row:SetPoint("bottomleft", baseframe, "bottomleft", x, y + 0) end end end @@ -3995,11 +3994,11 @@ function Details:SetBarGrowDirection (direction) --> update all row width if (self.bar_mod and self.bar_mod ~= 0) then for index = 1, #bars do - bars [index]:SetWidth (baseframe:GetWidth() + self.bar_mod) + bars [index]:SetWidth(baseframe:GetWidth() + self.bar_mod) end else for index = 1, #bars do - bars [index]:SetWidth (baseframe:GetWidth() + self.row_info.space.right) + bars [index]:SetWidth(baseframe:GetWidth() + self.row_info.space.right) end end end @@ -4022,7 +4021,7 @@ function gump:CreateNewLine(instance, index) local rowframe = instance.rowframe --create the bar with rowframe as parent - local newLine = CreateFrame("button", "DetailsBarra_"..instance.meu_id.."_"..index, rowframe, "BackdropTemplate") + local newLine = CreateFrame("button", "DetailsBarra_"..instance.meu_id .. "_" .. index, rowframe, "BackdropTemplate") newLine.row_id = index newLine.instance_id = instance.meu_id @@ -4032,27 +4031,36 @@ function gump:CreateNewLine(instance, index) newLine.GetActor = getActor --set point, almost irrelevant here, it recalc this on SetBarGrowDirection() - local y = instance.row_height * (index-1) + local yOffset = instance.row_height * (index-1) if (instance.bars_grow_direction == 1) then - y = y * -1 - newLine:SetPoint("topleft", baseframe, "topleft", instance.row_info.space.left, y) + yOffset = yOffset * -1 + newLine:SetPoint("topleft", baseframe, "topleft", instance.row_info.space.left, yOffset) elseif (instance.bars_grow_direction == 2) then - newLine:SetPoint("bottomleft", baseframe, "bottomleft", instance.row_info.space.left, y + 2) + newLine:SetPoint("bottomleft", baseframe, "bottomleft", instance.row_info.space.left, yOffset + 2) end --row height - newLine:SetHeight (instance.row_info.height) - newLine:SetWidth (baseframe:GetWidth()+instance.row_info.space.right) - newLine:SetFrameLevel (baseframe:GetFrameLevel() + 4) + newLine:SetHeight(instance.row_info.height) + newLine:SetWidth(baseframe:GetWidth()+instance.row_info.space.right) + newLine:SetFrameLevel(baseframe:GetFrameLevel() + 4) newLine.last_value = 0 newLine.w_mod = 0 - newLine:EnableMouse (true) - newLine:RegisterForClicks ("LeftButtonDown", "RightButtonDown") - + newLine:EnableMouse(true) + newLine:RegisterForClicks("LeftButtonDown", "RightButtonDown") + --statusbar - newLine.statusbar = CreateFrame("StatusBar", "DetailsBarra_Statusbar_"..instance.meu_id.."_"..index, newLine) + newLine.statusbar = CreateFrame("StatusBar", "DetailsBarra_Statusbar_" .. instance.meu_id .. "_" .. index, newLine) newLine.statusbar.value = 0 + newLine.statusbar:SetStatusBarColor(0, 0, 0, 0) + newLine.statusbar:SetMinMaxValues(0, 100) + newLine.statusbar:SetValue(0) + + --create textures and icons + newLine.textura = newLine.statusbar:CreateTexture(nil, "artwork") + newLine.textura:SetHorizTile(false) + newLine.textura:SetVertTile(false) + newLine.statusbar:SetStatusBarTexture(newLine.textura) --frame for hold the backdrop border newLine.border = CreateFrame("Frame", "DetailsBarra_Border_" .. instance.meu_id .. "_" .. index, newLine.statusbar, "BackdropTemplate") @@ -4064,78 +4072,69 @@ function gump:CreateNewLine(instance, index) --low 3d bar --search key: ~model newLine.modelbox_low = CreateFrame("playermodel", "DetailsBarra_ModelBarLow_" .. instance.meu_id .. "_" .. index, newLine) - newLine.modelbox_low:SetFrameLevel (newLine.statusbar:GetFrameLevel()-1) + newLine.modelbox_low:SetFrameLevel(newLine.statusbar:GetFrameLevel()-1) newLine.modelbox_low:SetPoint("topleft", newLine, "topleft") newLine.modelbox_low:SetPoint("bottomright", newLine, "bottomright") --high 3d bar newLine.modelbox_high = CreateFrame("playermodel", "DetailsBarra_ModelBarHigh_" .. instance.meu_id .. "_" .. index, newLine) - newLine.modelbox_high:SetFrameLevel (newLine.statusbar:GetFrameLevel()+1) + newLine.modelbox_high:SetFrameLevel(newLine.statusbar:GetFrameLevel()+1) newLine.modelbox_high:SetPoint("topleft", newLine, "topleft") newLine.modelbox_high:SetPoint("bottomright", newLine, "bottomright") - --create textures and icons - newLine.textura = newLine.statusbar:CreateTexture(nil, "artwork") - newLine.textura:SetHorizTile(false) - newLine.textura:SetVertTile(false) - --row background texture newLine.background = newLine:CreateTexture(nil, "background") newLine.background:SetTexture("") - newLine.background:SetAllPoints (newLine) - - newLine.statusbar:SetStatusBarColor(0, 0, 0, 0) - newLine.statusbar:SetStatusBarTexture(newLine.textura) - newLine.statusbar:SetMinMaxValues(0, 100) - newLine.statusbar:SetValue(0) + newLine.background:SetAllPoints(newLine) + --overlay texture newLine.overlayTexture = newLine.statusbar:CreateTexture(nil, "overlay") newLine.overlayTexture:SetAllPoints() --class icon - local icone_classe = newLine.border:CreateTexture(nil, "overlay") - icone_classe:SetHeight (instance.row_info.height) - icone_classe:SetWidth (instance.row_info.height) - icone_classe:SetTexture (instance.row_info.icon_file) - icone_classe:SetTexCoord (.75, 1, .75, 1) - newLine.icone_classe = icone_classe + local classIcon = newLine.border:CreateTexture(nil, "overlay") + classIcon:SetHeight(instance.row_info.height) + classIcon:SetWidth(instance.row_info.height) + classIcon:SetTexture(instance.row_info.icon_file) + classIcon:SetTexCoord(.75, 1, .75, 1) + newLine.icone_classe = classIcon local iconFrame = CreateFrame("frame", "DetailsBarra_IconFrame_" .. instance.meu_id .. "_" .. index, newLine.statusbar) - iconFrame:SetPoint("topleft", icone_classe, "topleft") - iconFrame:SetPoint("bottomright", icone_classe, "bottomright") - iconFrame:SetFrameLevel (newLine.statusbar:GetFrameLevel()+1) + iconFrame:SetPoint("topleft", classIcon, "topleft") + iconFrame:SetPoint("bottomright", classIcon, "bottomright") + iconFrame:SetFrameLevel(newLine.statusbar:GetFrameLevel()+1) iconFrame.instance_id = instance.meu_id iconFrame.row = newLine newLine.icon_frame = iconFrame - icone_classe:SetPoint("left", newLine, "left") - newLine.statusbar:SetPoint("topleft", icone_classe, "topright") + classIcon:SetPoint("left", newLine, "left") + newLine.statusbar:SetPoint("topleft", classIcon, "topright") newLine.statusbar:SetPoint("bottomright", newLine, "bottomright") - --> left text 1 - newLine.lineText1 = newLine.border:CreateFontString (nil, "overlay", "GameFontHighlight") + --left text 1 + newLine.lineText1 = newLine.border:CreateFontString(nil, "overlay", "GameFontHighlight") newLine.lineText1:SetPoint("left", newLine.icone_classe, "right", 3, 0) newLine.lineText1:SetJustifyH ("left") newLine.lineText1:SetNonSpaceWrap (true) --create text columns for i = 2, 4 do - newLine ["lineText" .. i] = newLine.border:CreateFontString (nil, "overlay", "GameFontHighlight") + newLine["lineText" .. i] = newLine.border:CreateFontString(nil, "overlay", "GameFontHighlight") end - --> set the onclick, on enter scripts - barra_scripts (newLine, instance, index) + --set the onclick, on enter scripts + setLineScripts (newLine, instance, index) - --> hide + --hide Details.FadeHandler.Fader (newLine, 1) - --> adds the window container + --adds the window container instance.barras [index] = newLine - --> set the left text + --set the left text newLine.lineText1:SetText (Loc["STRING_NEWROW"]) - --> refresh rows + --refresh rows instance:InstanceRefreshRows() Details:SendEvent ("DETAILS_INSTANCE_NEWROW", nil, instance, newLine) @@ -4153,7 +4152,7 @@ function Details:SetBarTextSettings (size, font, fixedcolor, leftcolorbyclass, r --> font if (font) then self.row_info.font_face = font - self.row_info.font_face_file = SharedMedia:Fetch ("font", font) + self.row_info.font_face_file = SharedMedia:Fetch("font", font) end --> fixed color @@ -4454,7 +4453,7 @@ function Details:SetBarSettings (height, texture, colorclass, fixedcolor, backgr --> texture if (texture) then self.row_info.texture = texture - self.row_info.texture_file = SharedMedia:Fetch ("statusbar", texture) + self.row_info.texture_file = SharedMedia:Fetch("statusbar", texture) end if (texture_custom) then @@ -4477,7 +4476,7 @@ function Details:SetBarSettings (height, texture, colorclass, fixedcolor, backgr --> background texture if (backgroundtexture) then self.row_info.texture_background = backgroundtexture - self.row_info.texture_background_file = SharedMedia:Fetch ("statusbar", backgroundtexture) + self.row_info.texture_background_file = SharedMedia:Fetch("statusbar", backgroundtexture) end --> background color by class @@ -4556,7 +4555,7 @@ end --/script _detalhes:InstanceRefreshRows (_detalhes.tabela_instancias[1]) --onupdate function for 'Fast Updates' feature -local fast_ps_func = function (self) +local fast_ps_func = function(self) local instance = self.instance if (not instance.showing) then @@ -4676,117 +4675,105 @@ function Details:AdjustInLineTextPadding() end -- search key: ~row ~bar ~updatebar -function Details:InstanceRefreshRows (instancia) - - if (instancia) then - self = instancia +function Details:InstanceRefreshRows(instance) + if (instance) then + self = instance end if (not self.barras or not self.barras[1]) then return end - --> mirror - local is_mirror = self.bars_inverted + --mirror + local isInvertedBars = self.bars_inverted - --> texture - local texture_file = SharedMedia:Fetch ("statusbar", self.row_info.texture) - local texture_file2 = SharedMedia:Fetch ("statusbar", self.row_info.texture_background) - --> update texture files - self.row_info.texture_file = texture_file - self.row_info.texture_background_file = texture_file2 - - if (type (self.row_info.texture_custom) == "string" and self.row_info.texture_custom ~= "") then - texture_file = [[Interface\]] .. self.row_info.texture_custom - --update texture file - self.row_info.texture_custom_file = texture_file - end - - --> outline values - local left_text_outline = self.row_info.textL_outline - local right_text_outline = self.row_info.textR_outline - local textL_outline_small = self.row_info.textL_outline_small - local textL_outline_small_color = self.row_info.textL_outline_small_color - local textR_outline_small = self.row_info.textR_outline_small - local textR_outline_small_color = self.row_info.textR_outline_small_color - - --> texture color values - local texture_class_color = self.row_info.texture_class_colors - local texture_r, texture_g, texture_b - if (not texture_class_color) then - texture_r, texture_g, texture_b = unpack(self.row_info.fixed_texture_color) - end + --texture + local textureFile = SharedMedia:Fetch("statusbar", self.row_info.texture) + local textureFile2 = SharedMedia:Fetch("statusbar", self.row_info.texture_background) + + --update texture files + self.row_info.texture_file = textureFile + self.row_info.texture_background_file = textureFile2 + if (type(self.row_info.texture_custom) == "string" and self.row_info.texture_custom ~= "") then + textureFile = [[Interface\]] .. self.row_info.texture_custom + --update texture file + self.row_info.texture_custom_file = textureFile + end + + --outline values + local left_text_outline = self.row_info.textL_outline + local right_text_outline = self.row_info.textR_outline + local textL_outline_small = self.row_info.textL_outline_small + local textL_outline_small_color = self.row_info.textL_outline_small_color + local textR_outline_small = self.row_info.textR_outline_small + local textR_outline_small_color = self.row_info.textR_outline_small_color + + --texture color values + local texture_class_color = self.row_info.texture_class_colors + local texture_r, texture_g, texture_b + if (not texture_class_color) then + texture_r, texture_g, texture_b = unpack(self.row_info.fixed_texture_color) + end + --text color - local left_text_class_color = self.row_info.textL_class_colors - local right_text_class_color = self.row_info.textR_class_colors - local text_r, text_g, text_b - if (not left_text_class_color or not right_text_class_color) then - text_r, text_g, text_b = unpack(self.row_info.fixed_text_color) - end - - local height = self.row_info.height - + local left_text_class_color = self.row_info.textL_class_colors + local right_text_class_color = self.row_info.textR_class_colors + local text_r, text_g, text_b + if (not left_text_class_color or not right_text_class_color) then + text_r, text_g, text_b = unpack(self.row_info.fixed_text_color) + end + + local height = self.row_info.height + --alpha - local alpha = self.row_info.alpha - + local alpha = self.row_info.alpha + --icons - local no_icon = self.row_info.no_icon - local start_after_icon = self.row_info.start_after_icon - - --if (self.row_info.use_spec_icons) then - --local icon_texture = self.row_info.spec_file --isn't in use - --end - - local icon_force_grayscale = self.row_info.icon_grayscale - local icon_offset_x, icon_offset_y = unpack(self.row_info.icon_offset) + local no_icon = self.row_info.no_icon + local start_after_icon = self.row_info.start_after_icon + local icon_force_grayscale = self.row_info.icon_grayscale + local icon_offset_x, icon_offset_y = unpack(self.row_info.icon_offset) --line border - local lineBorderEnabled = self.row_info.backdrop.enabled - local lineBorderColor = self.row_info.backdrop.color - local lineBorderSize = self.row_info.backdrop.size - + local lineBorderEnabled = self.row_info.backdrop.enabled + local lineBorderColor = self.row_info.backdrop.color + local lineBorderSize = self.row_info.backdrop.size + --font face - self.row_info.font_face_file = SharedMedia:Fetch ("font", self.row_info.font_face) - + self.row_info.font_face_file = SharedMedia:Fetch("font", self.row_info.font_face) + --models - local upper_model_enabled = self.row_info.models.upper_enabled - local lower_model_enabled = self.row_info.models.lower_enabled - - local upper_model = self.row_info.models.upper_model - local lower_model = self.row_info.models.lower_model - - local upper_model_alpha = self.row_info.models.upper_alpha - local lower_model_alpha = self.row_info.models.lower_alpha + local upper_model_enabled = self.row_info.models.upper_enabled + local lower_model_enabled = self.row_info.models.lower_enabled + local upper_model = self.row_info.models.upper_model + local lower_model = self.row_info.models.lower_model + local upper_model_alpha = self.row_info.models.upper_alpha + local lower_model_alpha = self.row_info.models.lower_alpha - local overlayTexture = SharedMedia:Fetch("statusbar", self.row_info.overlay_texture) - local overlayColor = self.row_info.overlay_color - ---using_upper_3dmodels using_lower_3dmodels - - -- do it + local overlayTexture = SharedMedia:Fetch("statusbar", self.row_info.overlay_texture) + local overlayColor = self.row_info.overlay_color - for _, row in ipairs (self.barras) do + for _, row in ipairs(self.barras) do + --positioning and size + row:SetHeight(height) + row.icone_classe:SetHeight(height) + row.icone_classe:SetWidth(height) - --> positioning and size - row:SetHeight (height) - row.icone_classe:SetHeight (height) - row.icone_classe:SetWidth (height) - if (icon_force_grayscale) then - row.icone_classe:SetDesaturated (true) + row.icone_classe:SetDesaturated(true) else - row.icone_classe:SetDesaturated (false) + row.icone_classe:SetDesaturated(false) end - - --> icon and texture anchors - if (not is_mirror) then + + --icon and texture anchors + if (not isInvertedBars) then row.lineText1:ClearAllPoints() - + row.lineText2:ClearAllPoints() row.lineText3:ClearAllPoints() row.lineText4:ClearAllPoints() - + row.lineText1:SetJustifyH("left") row.lineText2:SetJustifyH("right") row.lineText3:SetJustifyH("right") @@ -4796,31 +4783,31 @@ function Details:InstanceRefreshRows (instancia) row.lineText2:SetText("") row.lineText3:SetText("") end - + row.lineText4:SetText("") - - row.lineText2:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text2_anchor, 0) - row.lineText3:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text3_anchor, 0) - row.lineText4:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text4_anchor, 0) + + row.lineText2:SetPoint("right", row.statusbar, "right", -self.fontstrings_text2_anchor, 0) + row.lineText3:SetPoint("right", row.statusbar, "right", -self.fontstrings_text3_anchor, 0) + row.lineText4:SetPoint("right", row.statusbar, "right", -self.fontstrings_text4_anchor, 0) if (no_icon) then - row.statusbar:SetPoint ("topleft", row, "topleft") - row.statusbar:SetPoint ("bottomright", row, "bottomright") - row.lineText1:SetPoint ("left", row.statusbar, "left", 2, 0) + row.statusbar:SetPoint("topleft", row, "topleft") + row.statusbar:SetPoint("bottomright", row, "bottomright") + row.lineText1:SetPoint("left", row.statusbar, "left", 2, 0) row.icone_classe:Hide() else row.icone_classe:ClearAllPoints() - row.icone_classe:SetPoint ("left", row, "left", icon_offset_x, icon_offset_y) + row.icone_classe:SetPoint("left", row, "left", icon_offset_x, icon_offset_y) row.icone_classe:Show() if (start_after_icon) then - row.statusbar:SetPoint ("topleft", row.icone_classe, "topright") + row.statusbar:SetPoint("topleft", row.icone_classe, "topright") else - row.statusbar:SetPoint ("topleft", row, "topleft") + row.statusbar:SetPoint("topleft", row, "topleft") end - row.statusbar:SetPoint ("bottomright", row, "bottomright") - row.lineText1:SetPoint ("left", row.icone_classe, "right", 3, 0) + row.statusbar:SetPoint("bottomright", row, "bottomright") + row.lineText1:SetPoint("left", row.icone_classe, "right", 3, 0) end else row.lineText1:ClearAllPoints() @@ -4833,91 +4820,91 @@ function Details:InstanceRefreshRows (instancia) row.lineText2:SetJustifyH("left") row.lineText1:SetJustifyH("right") - row.lineText4:SetPoint ("left", row.statusbar, "left", self.fontstrings_text4_anchor + 1, 0) - row.lineText3:SetPoint ("left", row.statusbar, "left", self.fontstrings_text3_anchor + 1, 0) - row.lineText2:SetPoint ("left", row.statusbar, "left", self.fontstrings_text2_anchor + 1, 0) + row.lineText4:SetPoint("left", row.statusbar, "left", self.fontstrings_text4_anchor + 1, 0) + row.lineText3:SetPoint("left", row.statusbar, "left", self.fontstrings_text3_anchor + 1, 0) + row.lineText2:SetPoint("left", row.statusbar, "left", self.fontstrings_text2_anchor + 1, 0) if (no_icon) then - row.statusbar:SetPoint ("topleft", row, "topleft") - row.statusbar:SetPoint ("bottomright", row, "bottomright") - row.lineText1:SetPoint ("right", row.statusbar, "right", -2, 0) + row.statusbar:SetPoint("topleft", row, "topleft") + row.statusbar:SetPoint("bottomright", row, "bottomright") + row.lineText1:SetPoint("right", row.statusbar, "right", -2, 0) row.icone_classe:Hide() --[[ Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis - row.right_to_left_texture:SetPoint ("topright", row.statusbar, "topright") - row.right_to_left_texture:SetPoint ("bottomright", row.statusbar, "bottomright")]] + row.right_to_left_texture:SetPoint("topright", row.statusbar, "topright") + row.right_to_left_texture:SetPoint("bottomright", row.statusbar, "bottomright")]] + else - row.icone_classe:ClearAllPoints() - row.icone_classe:SetPoint ("right", row, "right", icon_offset_x, icon_offset_y) + row.icone_classe:SetPoint("right", row, "right", icon_offset_x, icon_offset_y) row.icone_classe:Show() if (start_after_icon) then - row.statusbar:SetPoint ("bottomright", row.icone_classe, "bottomleft") + row.statusbar:SetPoint("bottomright", row.icone_classe, "bottomleft") else - row.statusbar:SetPoint ("bottomright", row, "bottomright") + row.statusbar:SetPoint("bottomright", row, "bottomright") end - row.statusbar:SetPoint ("topleft", row, "topleft") + row.statusbar:SetPoint("topleft", row, "topleft") - row.lineText1:SetPoint ("right", row.icone_classe, "left", -2, 0) + row.lineText1:SetPoint("right", row.icone_classe, "left", -2, 0) end end - + if (not self.row_info.texture_background_class_color) then local c = self.row_info.fixed_texture_background_color - row.background:SetVertexColor (c[1], c[2], c[3], c[4]) + row.background:SetVertexColor(c[1], c[2], c[3], c[4]) else local c = self.row_info.fixed_texture_background_color local r, g, b = row.background:GetVertexColor() - row.background:SetVertexColor (r, g, b, c[4]) + row.background:SetVertexColor(r, g, b, c[4]) end - - --> outline + + --outline if (left_text_outline) then Details:SetFontOutline(row.lineText1, left_text_outline) else Details:SetFontOutline(row.lineText1, nil) end - + if (right_text_outline) then - self:SetFontOutline (row.lineText2, right_text_outline) - self:SetFontOutline (row.lineText3, right_text_outline) - self:SetFontOutline (row.lineText4, right_text_outline) + self:SetFontOutline(row.lineText2, right_text_outline) + self:SetFontOutline(row.lineText3, right_text_outline) + self:SetFontOutline(row.lineText4, right_text_outline) else - self:SetFontOutline (row.lineText2, nil) - self:SetFontOutline (row.lineText3, nil) - self:SetFontOutline (row.lineText4, nil) + self:SetFontOutline(row.lineText2, nil) + self:SetFontOutline(row.lineText3, nil) + self:SetFontOutline(row.lineText4, nil) end - - --> small outline + + --small outline if (textL_outline_small) then - local c = textL_outline_small_color - row.lineText1:SetShadowColor (c[1], c[2], c[3], c[4]) + local color = textL_outline_small_color + row.lineText1:SetShadowColor(color[1], color[2], color[3], color[4]) else - row.lineText1:SetShadowColor (0, 0, 0, 0) + row.lineText1:SetShadowColor(0, 0, 0, 0) end if (textR_outline_small) then - local c = textR_outline_small_color - row.lineText4:SetShadowColor (c[1], c[2], c[3], c[4]) - row.lineText3:SetShadowColor (c[1], c[2], c[3], c[4]) - row.lineText2:SetShadowColor (c[1], c[2], c[3], c[4]) + local color = textR_outline_small_color + row.lineText4:SetShadowColor(color[1], color[2], color[3], color[4]) + row.lineText3:SetShadowColor(color[1], color[2], color[3], color[4]) + row.lineText2:SetShadowColor(color[1], color[2], color[3], color[4]) else - row.lineText4:SetShadowColor (0, 0, 0, 0) - row.lineText3:SetShadowColor (0, 0, 0, 0) - row.lineText2:SetShadowColor (0, 0, 0, 0) + row.lineText4:SetShadowColor(0, 0, 0, 0) + row.lineText3:SetShadowColor(0, 0, 0, 0) + row.lineText2:SetShadowColor(0, 0, 0, 0) end - - --> texture: - row.textura:SetTexture (texture_file) + + --texture: + row.textura:SetTexture(textureFile) --Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis - --row.right_to_left_texture:SetTexture (texture_file) + --row.right_to_left_texture:SetTexture(texture_file) - row.background:SetTexture (texture_file2) + row.background:SetTexture(textureFile2) row.overlayTexture:SetTexture(overlayTexture) row.overlayTexture:SetVertexColor(unpack(overlayColor)) - if (is_mirror) then + if (isInvertedBars) then --Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis --row.right_to_left_texture:Show() row.statusbar:SetReverseFill(true) @@ -4926,39 +4913,39 @@ function Details:InstanceRefreshRows (instancia) --row.right_to_left_texture:Hide() end - --> texture class color: if true color changes on the fly through class refresh + --texture class color: if true color changes on the fly through class refresh if (not texture_class_color) then - row.textura:SetVertexColor (texture_r, texture_g, texture_b, alpha) + row.textura:SetVertexColor(texture_r, texture_g, texture_b, alpha) --Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis - --row.right_to_left_texture:SetVertexColor (texture_r, texture_g, texture_b, alpha) + --row.right_to_left_texture:SetVertexColor(texture_r, texture_g, texture_b, alpha) else --automatically color the bar by the actor class --forcing alpha 1 instead of use the alpha from the fixed color local r, g, b = row.textura:GetVertexColor() - row.textura:SetVertexColor (r, g, b, 1) --alpha + row.textura:SetVertexColor(r, g, b, 1) --alpha end - --> text class color: if true color changes on the fly through class refresh + --text class color: if true color changes on the fly through class refresh if (not left_text_class_color) then - row.lineText1:SetTextColor (text_r, text_g, text_b) + row.lineText1:SetTextColor(text_r, text_g, text_b) end if (not right_text_class_color) then - row.lineText4:SetTextColor (text_r, text_g, text_b) - row.lineText3:SetTextColor (text_r, text_g, text_b) - row.lineText2:SetTextColor (text_r, text_g, text_b) + row.lineText4:SetTextColor(text_r, text_g, text_b) + row.lineText3:SetTextColor(text_r, text_g, text_b) + row.lineText2:SetTextColor(text_r, text_g, text_b) end - --> text size - Details:SetFontSize (row.lineText1, self.row_info.font_size or height * 0.75) - Details:SetFontSize (row.lineText2, self.row_info.font_size or height * 0.75) - Details:SetFontSize (row.lineText3, self.row_info.font_size or height * 0.75) - Details:SetFontSize (row.lineText4, self.row_info.font_size or height * 0.75) + --text size + Details:SetFontSize(row.lineText1, self.row_info.font_size or height * 0.75) + Details:SetFontSize(row.lineText2, self.row_info.font_size or height * 0.75) + Details:SetFontSize(row.lineText3, self.row_info.font_size or height * 0.75) + Details:SetFontSize(row.lineText4, self.row_info.font_size or height * 0.75) - --> text font - Details:SetFontFace (row.lineText1, self.row_info.font_face_file or "GameFontHighlight") - Details:SetFontFace (row.lineText2, self.row_info.font_face_file or "GameFontHighlight") - Details:SetFontFace (row.lineText3, self.row_info.font_face_file or "GameFontHighlight") - Details:SetFontFace (row.lineText4, self.row_info.font_face_file or "GameFontHighlight") + --text font + Details:SetFontFace(row.lineText1, self.row_info.font_face_file or "GameFontHighlight") + Details:SetFontFace(row.lineText2, self.row_info.font_face_file or "GameFontHighlight") + Details:SetFontFace(row.lineText3, self.row_info.font_face_file or "GameFontHighlight") + Details:SetFontFace(row.lineText4, self.row_info.font_face_file or "GameFontHighlight") --backdrop if (lineBorderEnabled) then @@ -4970,12 +4957,12 @@ function Details:InstanceRefreshRows (instancia) row.lineBorder:Hide() end - --> models + --models if (upper_model_enabled) then row.using_upper_3dmodels = true row.modelbox_high:Show() - row.modelbox_high:SetModel (upper_model) - row.modelbox_high:SetAlpha (upper_model_alpha) + row.modelbox_high:SetModel(upper_model) + row.modelbox_high:SetAlpha(upper_model_alpha) else row.using_upper_3dmodels = false row.modelbox_high:Hide() @@ -4984,8 +4971,8 @@ function Details:InstanceRefreshRows (instancia) if (lower_model_enabled) then row.using_lower_3dmodels = true row.modelbox_low:Show() - row.modelbox_low:SetModel (lower_model) - row.modelbox_low:SetAlpha (lower_model_alpha) + row.modelbox_low:SetModel(lower_model) + row.modelbox_low:SetAlpha(lower_model_alpha) else row.using_lower_3dmodels = false row.modelbox_low:Hide() @@ -4994,10 +4981,7 @@ function Details:InstanceRefreshRows (instancia) end self:SetBarGrowDirection() - self:UpdateClickThrough() - - end function Details:SetBarOverlaySettings(overlayTexture, overlayColor) @@ -5108,30 +5092,30 @@ function Details:InstanceWallpaper (texture, anchor, alpha, texcoord, width, hei t:ClearAllPoints() if (anchor == "all") then - t:SetPoint ("topleft", self.baseframe, "topleft") - t:SetPoint ("bottomright", self.baseframe, "bottomright") + t:SetPoint("topleft", self.baseframe, "topleft") + t:SetPoint("bottomright", self.baseframe, "bottomright") elseif (anchor == "titlebar") then - t:SetPoint ("topleft", self.baseframe.titleBar, "topleft", 0, 0) - t:SetPoint ("bottomright", self.baseframe, "bottomright", 1, -1) + t:SetPoint("topleft", self.baseframe.titleBar, "topleft", 0, 0) + t:SetPoint("bottomright", self.baseframe, "bottomright", 1, -1) elseif (anchor == "center") then - t:SetPoint ("center", self.baseframe, "center", 0, 4) + t:SetPoint("center", self.baseframe, "center", 0, 4) elseif (anchor == "stretchLR") then - t:SetPoint ("center", self.baseframe, "center") - t:SetPoint ("left", self.baseframe, "left") - t:SetPoint ("right", self.baseframe, "right") + t:SetPoint("center", self.baseframe, "center") + t:SetPoint("left", self.baseframe, "left") + t:SetPoint("right", self.baseframe, "right") elseif (anchor == "stretchTB") then - t:SetPoint ("center", self.baseframe, "center") - t:SetPoint ("top", self.baseframe, "top") - t:SetPoint ("bottom", self.baseframe, "bottom") + t:SetPoint("center", self.baseframe, "center") + t:SetPoint("top", self.baseframe, "top") + t:SetPoint("bottom", self.baseframe, "bottom") else - t:SetPoint (anchor, self.baseframe, anchor) + t:SetPoint(anchor, self.baseframe, anchor) end - t:SetTexture (texture) - t:SetTexCoord (unpack(texcoord)) - t:SetWidth (width) - t:SetHeight (height) - t:SetVertexColor (unpack(overlay)) + t:SetTexture(texture) + t:SetTexCoord(unpack(texcoord)) + t:SetWidth(width) + t:SetHeight(height) + t:SetVertexColor(unpack(overlay)) wallpaper.enabled = true wallpaper.texture = texture @@ -5143,7 +5127,7 @@ function Details:InstanceWallpaper (texture, anchor, alpha, texcoord, width, hei wallpaper.overlay = overlay t:Show() - --t:SetAlpha (alpha) + --t:SetAlpha(alpha) Details.FadeHandler.Fader (t, "ALPHAANIM", alpha) end @@ -5303,12 +5287,12 @@ function Details:InstanceButtonsColors (red, green, blue, alpha, no_save, only_l local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar} for _, button in ipairs (icons) do - button:SetAlpha (alpha) + button:SetAlpha(alpha) end if (self:IsLowerInstance()) then for _, ThisButton in ipairs (Details.ToolBar.Shown) do - ThisButton:SetAlpha (alpha) + ThisButton:SetAlpha(alpha) end end @@ -5317,12 +5301,12 @@ function Details:InstanceButtonsColors (red, green, blue, alpha, no_save, only_l local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar} for _, button in ipairs (icons) do - button:SetAlpha (alpha) + button:SetAlpha(alpha) end if (self:IsLowerInstance()) then for _, ThisButton in ipairs (Details.ToolBar.Shown) do - ThisButton:SetAlpha (alpha) + ThisButton:SetAlpha(alpha) end end @@ -5330,20 +5314,20 @@ function Details:InstanceButtonsColors (red, green, blue, alpha, no_save, only_l end function Details:InstanceAlpha (alpha) - self.baseframe.cabecalho.ball_r:SetAlpha (alpha) - self.baseframe.cabecalho.ball:SetAlpha (alpha) + self.baseframe.cabecalho.ball_r:SetAlpha(alpha) + self.baseframe.cabecalho.ball:SetAlpha(alpha) local skin = Details.skins [self.skin] if (not skin.icon_ignore_alpha) then - self.baseframe.cabecalho.atributo_icon:SetAlpha (alpha) + self.baseframe.cabecalho.atributo_icon:SetAlpha(alpha) end - self.baseframe.cabecalho.emenda:SetAlpha (alpha) - self.baseframe.cabecalho.top_bg:SetAlpha (alpha) - self.baseframe.barra_esquerda:SetAlpha (alpha) - self.baseframe.barra_direita:SetAlpha (alpha) - self.baseframe.barra_fundo:SetAlpha (alpha) - self.baseframe.UPFrame:SetAlpha (alpha) + self.baseframe.cabecalho.emenda:SetAlpha(alpha) + self.baseframe.cabecalho.top_bg:SetAlpha(alpha) + self.baseframe.barra_esquerda:SetAlpha(alpha) + self.baseframe.barra_direita:SetAlpha(alpha) + self.baseframe.barra_fundo:SetAlpha(alpha) + self.baseframe.UPFrame:SetAlpha(alpha) end function Details:InstanceColor(red, green, blue, alpha, noSave, changeStatusbar) @@ -5413,22 +5397,22 @@ function Details:StatusBarAlert (text, icon, color, time) if (text) then if (type (text) == "table") then if (text.color) then - statusbar.text:SetTextColor (gump:ParseColors (text.color)) + statusbar.text:SetTextColor(gump:ParseColors (text.color)) else - statusbar.text:SetTextColor (1, 1, 1, 1) + statusbar.text:SetTextColor(1, 1, 1, 1) end statusbar.text:SetText (text.text or "") if (text.size) then - Details:SetFontSize (statusbar.text, text.size) + Details:SetFontSize(statusbar.text, text.size) else - Details:SetFontSize (statusbar.text, 9) + Details:SetFontSize(statusbar.text, 9) end else statusbar.text:SetText (text) - statusbar.text:SetTextColor (1, 1, 1, 1) - Details:SetFontSize (statusbar.text, 9) + statusbar.text:SetTextColor(1, 1, 1, 1) + Details:SetFontSize(statusbar.text, 9) end else statusbar.text:SetText ("") @@ -5437,20 +5421,20 @@ function Details:StatusBarAlert (text, icon, color, time) if (icon) then if (type (icon) == "table") then local texture, w, h, l, r, t, b = unpack(icon) - statusbar.icon:SetTexture (texture) - statusbar.icon:SetWidth (w or 14) - statusbar.icon:SetHeight (h or 14) + statusbar.icon:SetTexture(texture) + statusbar.icon:SetWidth(w or 14) + statusbar.icon:SetHeight(h or 14) if (l and r and t and b) then - statusbar.icon:SetTexCoord (l, r, t, b) + statusbar.icon:SetTexCoord(l, r, t, b) end else - statusbar.icon:SetTexture (icon) - statusbar.icon:SetWidth (14) - statusbar.icon:SetHeight (14) - statusbar.icon:SetTexCoord (0, 1, 0, 1) + statusbar.icon:SetTexture(icon) + statusbar.icon:SetWidth(14) + statusbar.icon:SetHeight(14) + statusbar.icon:SetTexCoord(0, 1, 0, 1) end else - statusbar.icon:SetTexture ("") + statusbar.icon:SetTexture("") end if (color) then @@ -5476,71 +5460,71 @@ function gump:CriaRodape (baseframe, instancia) --> esquerdo com statusbar baseframe.rodape.esquerdo = instancia.floatingframe:CreateTexture (nil, "overlay") - baseframe.rodape.esquerdo:SetPoint ("topright", baseframe, "bottomleft", 16, 0) - baseframe.rodape.esquerdo:SetTexture (DEFAULT_SKIN) - baseframe.rodape.esquerdo:SetTexCoord (unpack(COORDS_PIN_LEFT)) - baseframe.rodape.esquerdo:SetWidth (32) - baseframe.rodape.esquerdo:SetHeight (32) + baseframe.rodape.esquerdo:SetPoint("topright", baseframe, "bottomleft", 16, 0) + baseframe.rodape.esquerdo:SetTexture(DEFAULT_SKIN) + baseframe.rodape.esquerdo:SetTexCoord(unpack(COORDS_PIN_LEFT)) + baseframe.rodape.esquerdo:SetWidth(32) + baseframe.rodape.esquerdo:SetHeight(32) --> esquerdo sem statusbar baseframe.rodape.esquerdo_nostatusbar = instancia.floatingframe:CreateTexture (nil, "overlay") - baseframe.rodape.esquerdo_nostatusbar:SetPoint ("topright", baseframe, "bottomleft", 16, 14) - baseframe.rodape.esquerdo_nostatusbar:SetTexture (DEFAULT_SKIN) - baseframe.rodape.esquerdo_nostatusbar:SetTexCoord (unpack(COORDS_PIN_LEFT)) - baseframe.rodape.esquerdo_nostatusbar:SetWidth (32) - baseframe.rodape.esquerdo_nostatusbar:SetHeight (32) + baseframe.rodape.esquerdo_nostatusbar:SetPoint("topright", baseframe, "bottomleft", 16, 14) + baseframe.rodape.esquerdo_nostatusbar:SetTexture(DEFAULT_SKIN) + baseframe.rodape.esquerdo_nostatusbar:SetTexCoord(unpack(COORDS_PIN_LEFT)) + baseframe.rodape.esquerdo_nostatusbar:SetWidth(32) + baseframe.rodape.esquerdo_nostatusbar:SetHeight(32) --> direito com statusbar baseframe.rodape.direita = instancia.floatingframe:CreateTexture (nil, "overlay") - baseframe.rodape.direita:SetPoint ("topleft", baseframe, "bottomright", -16, 0) - baseframe.rodape.direita:SetTexture (DEFAULT_SKIN) - baseframe.rodape.direita:SetTexCoord (unpack(COORDS_PIN_RIGHT)) - baseframe.rodape.direita:SetWidth (32) - baseframe.rodape.direita:SetHeight (32) + baseframe.rodape.direita:SetPoint("topleft", baseframe, "bottomright", -16, 0) + baseframe.rodape.direita:SetTexture(DEFAULT_SKIN) + baseframe.rodape.direita:SetTexCoord(unpack(COORDS_PIN_RIGHT)) + baseframe.rodape.direita:SetWidth(32) + baseframe.rodape.direita:SetHeight(32) --> direito sem statusbar baseframe.rodape.direita_nostatusbar = instancia.floatingframe:CreateTexture (nil, "overlay") - baseframe.rodape.direita_nostatusbar:SetPoint ("topleft", baseframe, "bottomright", -16, 14) - baseframe.rodape.direita_nostatusbar:SetTexture (DEFAULT_SKIN) - baseframe.rodape.direita_nostatusbar:SetTexCoord (unpack(COORDS_PIN_RIGHT)) - baseframe.rodape.direita_nostatusbar:SetWidth (32) - baseframe.rodape.direita_nostatusbar:SetHeight (32) + baseframe.rodape.direita_nostatusbar:SetPoint("topleft", baseframe, "bottomright", -16, 14) + baseframe.rodape.direita_nostatusbar:SetTexture(DEFAULT_SKIN) + baseframe.rodape.direita_nostatusbar:SetTexCoord(unpack(COORDS_PIN_RIGHT)) + baseframe.rodape.direita_nostatusbar:SetWidth(32) + baseframe.rodape.direita_nostatusbar:SetHeight(32) --> barra centro baseframe.rodape.top_bg = baseframe:CreateTexture (nil, "background") - baseframe.rodape.top_bg:SetTexture (DEFAULT_SKIN) - baseframe.rodape.top_bg:SetTexCoord (unpack(COORDS_BOTTOM_BACKGROUND)) - baseframe.rodape.top_bg:SetWidth (512) - baseframe.rodape.top_bg:SetHeight (128) - baseframe.rodape.top_bg:SetPoint ("left", baseframe.rodape.esquerdo, "right", -16, -48) - baseframe.rodape.top_bg:SetPoint ("right", baseframe.rodape.direita, "left", 16, -48) + baseframe.rodape.top_bg:SetTexture(DEFAULT_SKIN) + baseframe.rodape.top_bg:SetTexCoord(unpack(COORDS_BOTTOM_BACKGROUND)) + baseframe.rodape.top_bg:SetWidth(512) + baseframe.rodape.top_bg:SetHeight(128) + baseframe.rodape.top_bg:SetPoint("left", baseframe.rodape.esquerdo, "right", -16, -48) + baseframe.rodape.top_bg:SetPoint("right", baseframe.rodape.direita, "left", 16, -48) local StatusBarLeftAnchor = CreateFrame ("frame", "DetailsStatusBarAnchorLeft" .. instancia.meu_id, baseframe) - StatusBarLeftAnchor:SetPoint ("left", baseframe.rodape.top_bg, "left", 5, 57) - StatusBarLeftAnchor:SetWidth (1) - StatusBarLeftAnchor:SetHeight (1) + StatusBarLeftAnchor:SetPoint("left", baseframe.rodape.top_bg, "left", 5, 57) + StatusBarLeftAnchor:SetWidth(1) + StatusBarLeftAnchor:SetHeight(1) baseframe.rodape.StatusBarLeftAnchor = StatusBarLeftAnchor local StatusBarCenterAnchor = CreateFrame ("frame", "DetailsStatusBarAnchorCenter" .. instancia.meu_id, baseframe) - StatusBarCenterAnchor:SetPoint ("center", baseframe.rodape.top_bg, "center", 0, 57) - StatusBarCenterAnchor:SetWidth (1) - StatusBarCenterAnchor:SetHeight (1) + StatusBarCenterAnchor:SetPoint("center", baseframe.rodape.top_bg, "center", 0, 57) + StatusBarCenterAnchor:SetWidth(1) + StatusBarCenterAnchor:SetHeight(1) baseframe.rodape.StatusBarCenterAnchor = StatusBarCenterAnchor --> display frame baseframe.statusbar = CreateFrame ("frame", "DetailsStatusBar" .. instancia.meu_id, instancia.floatingframe,"BackdropTemplate") - baseframe.statusbar:SetFrameLevel (instancia.floatingframe:GetFrameLevel()+2) - baseframe.statusbar:SetPoint ("left", baseframe.rodape.esquerdo, "right", -13, 10) - baseframe.statusbar:SetPoint ("right", baseframe.rodape.direita, "left", 13, 10) - baseframe.statusbar:SetHeight (14) + baseframe.statusbar:SetFrameLevel(instancia.floatingframe:GetFrameLevel()+2) + baseframe.statusbar:SetPoint("left", baseframe.rodape.esquerdo, "right", -13, 10) + baseframe.statusbar:SetPoint("right", baseframe.rodape.direita, "left", 13, 10) + baseframe.statusbar:SetHeight(14) local statusbar_icon = baseframe.statusbar:CreateTexture (nil, "overlay") - statusbar_icon:SetWidth (14) - statusbar_icon:SetHeight (14) - statusbar_icon:SetPoint ("left", baseframe.statusbar, "left") + statusbar_icon:SetWidth(14) + statusbar_icon:SetHeight(14) + statusbar_icon:SetPoint("left", baseframe.statusbar, "left") - local statusbar_text = baseframe.statusbar:CreateFontString (nil, "overlay", "GameFontNormal") - statusbar_text:SetPoint ("left", statusbar_icon, "right", 2, 0) + local statusbar_text = baseframe.statusbar:CreateFontString(nil, "overlay", "GameFontNormal") + statusbar_text:SetPoint("left", statusbar_icon, "right", 2, 0) baseframe.statusbar:SetBackdrop ({ bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, @@ -5555,12 +5539,12 @@ function gump:CriaRodape (baseframe, instancia) --> frame invis�vel baseframe.DOWNFrame = CreateFrame ("frame", "DetailsDownFrame" .. instancia.meu_id, baseframe) - baseframe.DOWNFrame:SetPoint ("left", baseframe.rodape.esquerdo, "right", 0, 10) - baseframe.DOWNFrame:SetPoint ("right", baseframe.rodape.direita, "left", 0, 10) - baseframe.DOWNFrame:SetHeight (14) + baseframe.DOWNFrame:SetPoint("left", baseframe.rodape.esquerdo, "right", 0, 10) + baseframe.DOWNFrame:SetPoint("right", baseframe.rodape.direita, "left", 0, 10) + baseframe.DOWNFrame:SetHeight(14) baseframe.DOWNFrame:Show() - baseframe.DOWNFrame:EnableMouse (true) + baseframe.DOWNFrame:EnableMouse(true) baseframe.DOWNFrame:SetMovable (true) baseframe.DOWNFrame:SetResizable (true) @@ -5736,15 +5720,15 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (self.menu_icons [index]) then button:ClearAllPoints() if (got_anchor) then - button:SetPoint ("left", self.lastIcon.widget or self.lastIcon, "right", space, 0) + button:SetPoint("left", self.lastIcon.widget or self.lastIcon, "right", space, 0) else - button:SetPoint (point1, anchor_frame, point2) + button:SetPoint(point1, anchor_frame, point2) got_anchor = button self.firstIcon = button end self.lastIcon = button button:SetParent (self.baseframe) - button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1) + button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize (16*size, 16*size) @@ -5766,15 +5750,15 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (self.menu_icons [index]) then button:ClearAllPoints() if (got_anchor) then - button:SetPoint ("right", self.lastIcon.widget or self.lastIcon, "left", -space, 0) + button:SetPoint("right", self.lastIcon.widget or self.lastIcon, "left", -space, 0) else - button:SetPoint (point1, anchor_frame, point2) + button:SetPoint(point1, anchor_frame, point2) got_anchor = button self.firstIcon = button end self.lastIcon = button button:SetParent (self.baseframe) - button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1) + button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize (16*size, 16*size) @@ -5795,11 +5779,11 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ local pluginFirstIcon = true if (not self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator = self.baseframe:CreateTexture (nil, "overlay") - self.baseframe.cabecalho.PluginIconsSeparator:SetTexture ([[Interface\FriendsFrame\StatusIcon-Offline]]) + self.baseframe.cabecalho.PluginIconsSeparator:SetTexture([[Interface\FriendsFrame\StatusIcon-Offline]]) local color = 0 - self.baseframe.cabecalho.PluginIconsSeparator:SetVertexColor (color, color, color) - self.baseframe.cabecalho.PluginIconsSeparator:SetAlpha (0.2) + self.baseframe.cabecalho.PluginIconsSeparator:SetVertexColor(color, color, color) + self.baseframe.cabecalho.PluginIconsSeparator:SetAlpha(0.2) local scale = 0.4 self.baseframe.cabecalho.PluginIconsSeparator:SetSize (16 * scale, 16 * scale) @@ -5833,11 +5817,11 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (pluginFirstIcon) then temp_space = temp_space / 3 - self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("left", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) + self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("left", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end - button:SetPoint ("left", self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) + button:SetPoint("left", self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) elseif (self.menu_anchor.side == 2) then --right @@ -5845,11 +5829,11 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (pluginFirstIcon) then temp_space = temp_space / 3 - self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("left", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "right", temp_space, 0) + self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("left", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "right", temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end - button:SetPoint ("left", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "right", temp_space, 0) + button:SetPoint("left", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "right", temp_space, 0) end @@ -5860,11 +5844,11 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (pluginFirstIcon) then temp_space = temp_space / 3 - self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("right", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "left", -temp_space, 0) + self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("right", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "left", -temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end - button:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) + button:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) elseif (self.menu_anchor.side == 2) then --right @@ -5872,18 +5856,18 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ if (pluginFirstIcon) then temp_space = temp_space / 3 - self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "left", -temp_space, 0) + self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "left", -temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end - button:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) + button:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) end end pluginFirstIcon = false else - button:SetPoint (point1, anchor_frame, point2) + button:SetPoint(point1, anchor_frame, point2) self.firstIcon = button got_anchor = button end @@ -5892,7 +5876,7 @@ function Details:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _ last_plugin_icon = button button:SetParent (self.baseframe) - button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1) + button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize (16*size, 16*size) @@ -5932,7 +5916,7 @@ end local parameters_table = {} -local on_leave_menu = function (self, elapsed) +local on_leave_menu = function(self, elapsed) parameters_table[2] = parameters_table[2] + elapsed if (parameters_table[2] > 0.3) then if (not _G.GameCooltip.mouseOver and not _G.GameCooltip.buttonOver and (not _G.GameCooltip:GetOwner() or _G.GameCooltip:GetOwner() == self)) then @@ -5942,7 +5926,7 @@ local on_leave_menu = function (self, elapsed) end end -local OnClickNovoMenu = function (_, _, id, instance) +local OnClickNovoMenu = function(_, _, id, instance) local is_new if (not Details.tabela_instancias [id]) then @@ -7103,30 +7087,30 @@ function Details:ChangeSkin(skin_name) skin_file = "Interface\\" .. self.skin_custom end - self.baseframe.cabecalho.ball:SetTexture (skin_file) --> bola esquerda - self.baseframe.cabecalho.emenda:SetTexture (skin_file) --> emenda que liga a bola a textura do centro + self.baseframe.cabecalho.ball:SetTexture(skin_file) --> bola esquerda + self.baseframe.cabecalho.emenda:SetTexture(skin_file) --> emenda que liga a bola a textura do centro - self.baseframe.cabecalho.ball_r:SetTexture (skin_file) --> bola direita onde fica o bot�o de fechar - self.baseframe.cabecalho.top_bg:SetTexture (skin_file) --> top background + self.baseframe.cabecalho.ball_r:SetTexture(skin_file) --> bola direita onde fica o bot�o de fechar + self.baseframe.cabecalho.top_bg:SetTexture(skin_file) --> top background - self.baseframe.barra_esquerda:SetTexture (skin_file) --> barra lateral - self.baseframe.barra_direita:SetTexture (skin_file) --> barra lateral - self.baseframe.barra_fundo:SetTexture (skin_file) --> barra inferior + self.baseframe.barra_esquerda:SetTexture(skin_file) --> barra lateral + self.baseframe.barra_direita:SetTexture(skin_file) --> barra lateral + self.baseframe.barra_fundo:SetTexture(skin_file) --> barra inferior - self.baseframe.scroll_up:SetTexture (skin_file) --> scrollbar parte de cima - self.baseframe.scroll_down:SetTexture (skin_file) --> scrollbar parte de baixo - self.baseframe.scroll_middle:SetTexture (skin_file) --> scrollbar parte do meio + self.baseframe.scroll_up:SetTexture(skin_file) --> scrollbar parte de cima + self.baseframe.scroll_down:SetTexture(skin_file) --> scrollbar parte de baixo + self.baseframe.scroll_middle:SetTexture(skin_file) --> scrollbar parte do meio - self.baseframe.rodape.top_bg:SetTexture (skin_file) --> rodape top background - self.baseframe.rodape.esquerdo:SetTexture (skin_file) --> rodape esquerdo - self.baseframe.rodape.direita:SetTexture (skin_file) --> rodape direito - self.baseframe.rodape.esquerdo_nostatusbar:SetTexture (skin_file) --> rodape direito - self.baseframe.rodape.direita_nostatusbar:SetTexture (skin_file) --> rodape direito + self.baseframe.rodape.top_bg:SetTexture(skin_file) --> rodape top background + self.baseframe.rodape.esquerdo:SetTexture(skin_file) --> rodape esquerdo + self.baseframe.rodape.direita:SetTexture(skin_file) --> rodape direito + self.baseframe.rodape.esquerdo_nostatusbar:SetTexture(skin_file) --> rodape direito + self.baseframe.rodape.direita_nostatusbar:SetTexture(skin_file) --> rodape direito - self.baseframe.button_stretch.texture:SetTexture (skin_file) --> bot�o de esticar a janela + self.baseframe.button_stretch.texture:SetTexture(skin_file) --> bot�o de esticar a janela - self.baseframe.resize_direita.texture:SetTexture (skin_file) --> bot�o de redimencionar da direita - self.baseframe.resize_esquerda.texture:SetTexture (skin_file) --> bot�o de redimencionar da esquerda + self.baseframe.resize_direita.texture:SetTexture(skin_file) --> bot�o de redimencionar da direita + self.baseframe.resize_esquerda.texture:SetTexture(skin_file) --> bot�o de redimencionar da esquerda self.break_snap_button:SetNormalTexture (skin_file) --> cadeado self.break_snap_button:SetDisabledTexture (skin_file) @@ -7161,7 +7145,7 @@ function Details:ChangeSkin(skin_name) if (self.modo == 1 or self.modo == 4 or self.atributo == 5) then -- alone e raid local icon_anchor = this_skin.icon_anchor_plugins - self.baseframe.cabecalho.atributo_icon:SetPoint ("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) + self.baseframe.cabecalho.atributo_icon:SetPoint("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) if (self.modo == 1) then if (Details.SoloTables.Plugins [1] and Details.SoloTables.Mode) then local plugin_index = Details.SoloTables.Mode @@ -7180,7 +7164,7 @@ function Details:ChangeSkin(skin_name) end else local icon_anchor = this_skin.icon_anchor_main --> ancora do icone do canto direito superior - self.baseframe.cabecalho.atributo_icon:SetPoint ("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) + self.baseframe.cabecalho.atributo_icon:SetPoint("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) self:ChangeIcon() end @@ -7334,7 +7318,7 @@ end --update the window click through state local updateClickThroughListener = Details:CreateEventListener() function updateClickThroughListener:EnterCombat() - Details:InstanceCall (function (instance) + Details:InstanceCall (function(instance) C_Timer.After (1.5, function() instance:UpdateClickThrough() end) @@ -7342,7 +7326,7 @@ function updateClickThroughListener:EnterCombat() end function updateClickThroughListener:LeaveCombat() - Details:InstanceCall (function (instance) + Details:InstanceCall (function(instance) C_Timer.After (1.5, function() instance:UpdateClickThrough() end) @@ -7806,8 +7790,8 @@ function Details:RefreshAttributeTextSize() local window_width = self:GetSize() if (self.auto_hide_menu.left and not self.is_interacting) then - self.menu_attribute_string:SetWidth (window_width) - self.menu_attribute_string:SetHeight (self.attribute_text.text_size + 2) + self.menu_attribute_string:SetWidth(window_width) + self.menu_attribute_string:SetHeight(self.attribute_text.text_size + 2) return end @@ -7817,8 +7801,8 @@ function Details:RefreshAttributeTextSize() local width_by_buttons = (buttons_shown * buttons_width) + (buttons_spacement * (buttons_shown - 1)) local text_size = window_width - width_by_buttons - 6 - self.menu_attribute_string:SetWidth (text_size) - self.menu_attribute_string:SetHeight (self.attribute_text.text_size + 2) + self.menu_attribute_string:SetWidth(text_size) + self.menu_attribute_string:SetHeight(self.attribute_text.text_size + 2) end end @@ -7860,7 +7844,7 @@ function Details:CheckForTextTimeCounter(combatStart) --called from combat start end end -local formatTime = function (t) +local formatTime = function(t) local m, s = floor(t/60), floor(t%60) if (m < 1) then m = "00" @@ -8084,31 +8068,31 @@ function Details:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, if (side == 1) then --> a string esta no lado de cima if (self.toolbar_side == 1) then -- a toolbar esta em cima self.menu_attribute_string:ClearAllPoints() - self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", self.attribute_text.anchor [1], self.attribute_text.anchor [2]) + self.menu_attribute_string:SetPoint("bottomleft", self.baseframe.cabecalho.ball, "bottomright", self.attribute_text.anchor [1], self.attribute_text.anchor [2]) elseif (self.toolbar_side == 2) then --a toolbar esta em baixo self.menu_attribute_string:ClearAllPoints() - self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe, "topleft", self.attribute_text.anchor [1] + 21, self.attribute_text.anchor [2]) + self.menu_attribute_string:SetPoint("bottomleft", self.baseframe, "topleft", self.attribute_text.anchor [1] + 21, self.attribute_text.anchor [2]) end elseif (side == 2) then --> a string esta no lado de baixo if (self.toolbar_side == 1) then --toolbar esta em cima self.menu_attribute_string:ClearAllPoints() - self.menu_attribute_string:SetPoint ("left", self.baseframe.rodape.StatusBarLeftAnchor, "left", self.attribute_text.anchor [1] + 16, self.attribute_text.anchor [2] - 6) + self.menu_attribute_string:SetPoint("left", self.baseframe.rodape.StatusBarLeftAnchor, "left", self.attribute_text.anchor [1] + 16, self.attribute_text.anchor [2] - 6) elseif (self.toolbar_side == 2) then --toolbar esta em baixo - self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "topright", self.attribute_text.anchor [1], self.attribute_text.anchor [2] - 19) + self.menu_attribute_string:SetPoint("bottomleft", self.baseframe.cabecalho.ball, "topright", self.attribute_text.anchor [1], self.attribute_text.anchor [2] - 19) end end --font face - local fontPath = SharedMedia:Fetch ("font", font) - Details:SetFontFace (self.menu_attribute_string, fontPath) + local fontPath = SharedMedia:Fetch("font", font) + Details:SetFontFace(self.menu_attribute_string, fontPath) --font size - Details:SetFontSize (self.menu_attribute_string, size) + Details:SetFontSize(self.menu_attribute_string, size) --color Details:SetFontColor (self.menu_attribute_string, color) @@ -8117,7 +8101,7 @@ function Details:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, end) --shadow - Details:SetFontOutline (self.menu_attribute_string, shadow) + Details:SetFontOutline(self.menu_attribute_string, shadow) --refresh size self:RefreshAttributeTextSize() @@ -8132,7 +8116,7 @@ function Details:SetBackdropTexture (texturename) self.backdrop_texture = texturename - local texture_path = SharedMedia:Fetch ("background", texturename) + local texture_path = SharedMedia:Fetch("background", texturename) self.baseframe:SetBackdrop ({ bgFile = texture_path, tile = true, tileSize = 128, @@ -8250,7 +8234,7 @@ function Details:SetMenuAlpha (enabled, onenter, onleave, ignorebars, interactin self.menu_alpha.ignorebars = ignorebars if (not enabled) then - self.baseframe:SetAlpha (1) + self.baseframe:SetAlpha(1) self.rowframe:SetFrameAlpha(1) self:InstanceAlpha (self.color[4]) self:SetIconAlpha (1, nil, true) @@ -8438,44 +8422,44 @@ function Details:ToolbarSide (side, only_update_anchors) local x, y = unpack(skin.icon_point_anchor) x = x + (anchor_mod) - self.baseframe.cabecalho.ball_point:SetPoint ("bottomleft", self.baseframe, "topleft", x, y) + self.baseframe.cabecalho.ball_point:SetPoint("bottomleft", self.baseframe, "topleft", x, y) --> ball if (self.hide_icon) then - self.baseframe.cabecalho.ball:SetTexCoord (unpack(COORDS_LEFT_BALL_NO_ICON)) - self.baseframe.cabecalho.emenda:SetTexCoord (unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) + self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL_NO_ICON)) + self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) else - self.baseframe.cabecalho.ball:SetTexCoord (unpack(COORDS_LEFT_BALL)) - self.baseframe.cabecalho.emenda:SetTexCoord (unpack(COORDS_LEFT_CONNECTOR)) + self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) + self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) end self.baseframe.cabecalho.ball:ClearAllPoints() local x, y = unpack(skin.left_corner_anchor) x = x + (anchor_mod) - self.baseframe.cabecalho.ball:SetPoint ("bottomleft", self.baseframe, "topleft", x, y) + self.baseframe.cabecalho.ball:SetPoint("bottomleft", self.baseframe, "topleft", x, y) --> ball r - self.baseframe.cabecalho.ball_r:SetTexCoord (unpack(COORDS_RIGHT_BALL)) + self.baseframe.cabecalho.ball_r:SetTexCoord(unpack(COORDS_RIGHT_BALL)) self.baseframe.cabecalho.ball_r:ClearAllPoints() local x, y = unpack(skin.right_corner_anchor) x = x + ((anchor_mod) * -1) - self.baseframe.cabecalho.ball_r:SetPoint ("bottomright", self.baseframe, "topright", x, y) + self.baseframe.cabecalho.ball_r:SetPoint("bottomright", self.baseframe, "topright", x, y) --> tex coords - self.baseframe.cabecalho.top_bg:SetTexCoord (unpack(COORDS_TOP_BACKGROUND)) + self.baseframe.cabecalho.top_bg:SetTexCoord(unpack(COORDS_TOP_BACKGROUND)) --> up frames - self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, -53) - self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, -53) + self.baseframe.UPFrame:SetPoint("left", self.baseframe.cabecalho.ball, "right", 0, -53) + self.baseframe.UPFrame:SetPoint("right", self.baseframe.cabecalho.ball_r, "left", 0, -53) self.baseframe.UPFrameConnect:ClearAllPoints() - self.baseframe.UPFrameConnect:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -1) - self.baseframe.UPFrameConnect:SetPoint ("bottomright", self.baseframe, "topright", 0, -1) + self.baseframe.UPFrameConnect:SetPoint("bottomleft", self.baseframe, "topleft", 0, -1) + self.baseframe.UPFrameConnect:SetPoint("bottomright", self.baseframe, "topright", 0, -1) self.baseframe.UPFrameLeftPart:ClearAllPoints() - self.baseframe.UPFrameLeftPart:SetPoint ("bottomleft", self.baseframe, "topleft", 0, 0) + self.baseframe.UPFrameLeftPart:SetPoint("bottomleft", self.baseframe, "topleft", 0, 0) else --> bottom @@ -8492,42 +8476,42 @@ function Details:ToolbarSide (side, only_update_anchors) local _x, _y = unpack(skin.icon_point_anchor_bottom) _x = _x + (anchor_mod) - self.baseframe.cabecalho.ball_point:SetPoint ("topleft", self.baseframe, "bottomleft", _x, _y + y) + self.baseframe.cabecalho.ball_point:SetPoint("topleft", self.baseframe, "bottomleft", _x, _y + y) --> ball self.baseframe.cabecalho.ball:ClearAllPoints() local _x, _y = unpack(skin.left_corner_anchor_bottom) _x = _x + (anchor_mod) - self.baseframe.cabecalho.ball:SetPoint ("topleft", self.baseframe, "bottomleft", _x, _y + y) + self.baseframe.cabecalho.ball:SetPoint("topleft", self.baseframe, "bottomleft", _x, _y + y) local l, r, t, b = unpack(COORDS_LEFT_BALL) - self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) --> ball r self.baseframe.cabecalho.ball_r:ClearAllPoints() local _x, _y = unpack(skin.right_corner_anchor_bottom) _x = _x + ((anchor_mod) * -1) - self.baseframe.cabecalho.ball_r:SetPoint ("topright", self.baseframe, "bottomright", _x, _y + y) + self.baseframe.cabecalho.ball_r:SetPoint("topright", self.baseframe, "bottomright", _x, _y + y) local l, r, t, b = unpack(COORDS_RIGHT_BALL) - self.baseframe.cabecalho.ball_r:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.ball_r:SetTexCoord(l, r, b, t) --> tex coords local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR) - self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_TOP_BACKGROUND) - self.baseframe.cabecalho.top_bg:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.top_bg:SetTexCoord(l, r, b, t) --> up frames - self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, 53) - self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, 53) + self.baseframe.UPFrame:SetPoint("left", self.baseframe.cabecalho.ball, "right", 0, 53) + self.baseframe.UPFrame:SetPoint("right", self.baseframe.cabecalho.ball_r, "left", 0, 53) self.baseframe.UPFrameConnect:ClearAllPoints() - self.baseframe.UPFrameConnect:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 1) - self.baseframe.UPFrameConnect:SetPoint ("topright", self.baseframe, "bottomright", 0, 1) + self.baseframe.UPFrameConnect:SetPoint("topleft", self.baseframe, "bottomleft", 0, 1) + self.baseframe.UPFrameConnect:SetPoint("topright", self.baseframe, "bottomright", 0, 1) self.baseframe.UPFrameLeftPart:ClearAllPoints() - self.baseframe.UPFrameLeftPart:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 0) + self.baseframe.UPFrameLeftPart:SetPoint("topleft", self.baseframe, "bottomleft", 0, 0) end @@ -8584,9 +8568,9 @@ function Details:StretchButtonAnchor (side) y = -20 end - self.baseframe.button_stretch:SetPoint ("bottom", self.baseframe, "top", 0, 20 + y) - self.baseframe.button_stretch:SetPoint ("right", self.baseframe, "right", -27, 0) - self.baseframe.button_stretch.texture:SetTexCoord (unpack(COORDS_STRETCH)) + self.baseframe.button_stretch:SetPoint("bottom", self.baseframe, "top", 0, 20 + y) + self.baseframe.button_stretch:SetPoint("right", self.baseframe, "right", -27, 0) + self.baseframe.button_stretch.texture:SetTexCoord(unpack(COORDS_STRETCH)) self.stretch_button_side = 1 elseif (side == 2 or string.lower (side) == "bottom") then @@ -8601,11 +8585,11 @@ function Details:StretchButtonAnchor (side) y = y -14 end - self.baseframe.button_stretch:SetPoint ("center", self.baseframe, "center") - self.baseframe.button_stretch:SetPoint ("top", self.baseframe, "bottom", 0, y) + self.baseframe.button_stretch:SetPoint("center", self.baseframe, "center") + self.baseframe.button_stretch:SetPoint("top", self.baseframe, "bottom", 0, y) local l, r, t, b = unpack(COORDS_STRETCH) - self.baseframe.button_stretch.texture:SetTexCoord (r, l, b, t) + self.baseframe.button_stretch.texture:SetTexCoord(r, l, b, t) self.stretch_button_side = 2 @@ -8642,10 +8626,10 @@ function Details:MenuAnchor (x, y) menu_points [1]:ClearAllPoints() if (self.toolbar_side == 1) then --> top - menu_points [1]:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) -- y+2 + menu_points [1]:SetPoint("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) -- y+2 else --> bottom - menu_points [1]:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, (y*-1) - 4) + menu_points [1]:SetPoint("topleft", self.baseframe.cabecalho.ball, "topright", x, (y*-1) - 4) end @@ -8654,10 +8638,10 @@ function Details:MenuAnchor (x, y) menu_points [2]:ClearAllPoints() if (self.toolbar_side == 1) then --> top - menu_points [2]:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "bottomleft", x, y+16) + menu_points [2]:SetPoint("topleft", self.baseframe.cabecalho.ball_r, "bottomleft", x, y+16) else --> bottom - menu_points [2]:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "topleft", x, (y*-1) - 4) + menu_points [2]:SetPoint("topleft", self.baseframe.cabecalho.ball_r, "topleft", x, (y*-1) - 4) end end @@ -8677,14 +8661,14 @@ function Details:HideMainIcon (value) Details.FadeHandler.Fader (self.baseframe.cabecalho.atributo_icon, 1) if (self.toolbar_side == 1) then - self.baseframe.cabecalho.ball:SetTexCoord (unpack(COORDS_LEFT_BALL_NO_ICON)) - self.baseframe.cabecalho.emenda:SetTexCoord (unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) + self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL_NO_ICON)) + self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) elseif (self.toolbar_side == 2) then local l, r, t, b = unpack(COORDS_LEFT_BALL_NO_ICON) - self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR_NO_ICON) - self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) end local skin = Details.skins [self.skin] @@ -8701,15 +8685,15 @@ function Details:HideMainIcon (value) if (self.toolbar_side == 1) then - self.baseframe.cabecalho.ball:SetTexCoord (unpack(COORDS_LEFT_BALL)) - self.baseframe.cabecalho.emenda:SetTexCoord (unpack(COORDS_LEFT_CONNECTOR)) + self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) + self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) elseif (self.toolbar_side == 2) then local l, r, t, b = unpack(COORDS_LEFT_BALL) - self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR) - self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t) + self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) end end end @@ -8724,32 +8708,32 @@ function Details:DesaturateMenu (value) if (value) then self.desaturated_menu = true - self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated (true) - self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated (true) - self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated (true) - self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated (true) - self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated (true) - self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated (true) + self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated(true) + self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated(true) + self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated(true) + self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated(true) + self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated(true) + self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated(true) if (self.meu_id == Details:GetLowerInstanceNumber()) then for _, button in ipairs (Details.ToolBar.AllButtons) do - button:GetNormalTexture():SetDesaturated (true) + button:GetNormalTexture():SetDesaturated(true) end end else self.desaturated_menu = false - self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated (false) - self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated (false) - self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated (false) - self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated (false) - self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated (false) - self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated (false) + self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated(false) + self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated(false) + self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated(false) + self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated(false) + self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated(false) + self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated(false) if (self.meu_id == Details:GetLowerInstanceNumber()) then for _, button in ipairs (Details.ToolBar.AllButtons) do - button:GetNormalTexture():SetDesaturated (false) + button:GetNormalTexture():SetDesaturated(false) end end @@ -8777,36 +8761,36 @@ function Details:ShowSideBars (instancia) end if (self.show_statusbar) then - self.baseframe.barra_esquerda:SetPoint ("bottomleft", self.baseframe, "bottomleft", -56, -14) - self.baseframe.barra_direita:SetPoint ("bottomright", self.baseframe, "bottomright", 56, -14) + self.baseframe.barra_esquerda:SetPoint("bottomleft", self.baseframe, "bottomleft", -56, -14) + self.baseframe.barra_direita:SetPoint("bottomright", self.baseframe, "bottomright", 56, -14) if (self.toolbar_side == 2) then self.baseframe.barra_fundo:Show() local l, r, t, b = unpack(COORDS_BOTTOM_SIDE_BAR) - self.baseframe.barra_fundo:SetTexCoord (l, r, b, t) + self.baseframe.barra_fundo:SetTexCoord(l, r, b, t) self.baseframe.barra_fundo:ClearAllPoints() - self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -6) - self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "topright", -1, -6) + self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "topleft", 0, -6) + self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "topright", -1, -6) else self.baseframe.barra_fundo:Hide() end else - self.baseframe.barra_esquerda:SetPoint ("bottomleft", self.baseframe, "bottomleft", -56, 0) - self.baseframe.barra_direita:SetPoint ("bottomright", self.baseframe, "bottomright", 56, 0) + self.baseframe.barra_esquerda:SetPoint("bottomleft", self.baseframe, "bottomleft", -56, 0) + self.baseframe.barra_direita:SetPoint("bottomright", self.baseframe, "bottomright", 56, 0) self.baseframe.barra_fundo:Show() if (self.toolbar_side == 2) then --tooltbar on bottom local l, r, t, b = unpack(COORDS_BOTTOM_SIDE_BAR) - self.baseframe.barra_fundo:SetTexCoord (l, r, b, t) + self.baseframe.barra_fundo:SetTexCoord(l, r, b, t) self.baseframe.barra_fundo:ClearAllPoints() - self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -6) - self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "topright", -1, -6) + self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "topleft", 0, -6) + self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "topright", -1, -6) else --tooltbar on top - self.baseframe.barra_fundo:SetTexCoord (unpack(COORDS_BOTTOM_SIDE_BAR)) + self.baseframe.barra_fundo:SetTexCoord(unpack(COORDS_BOTTOM_SIDE_BAR)) self.baseframe.barra_fundo:ClearAllPoints() - self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "bottomleft", 0, -56) - self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "bottomright", -1, -56) + self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "bottomleft", 0, -56) + self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "bottomright", -1, -56) end end @@ -8899,16 +8883,16 @@ function Details:StatusBarColor (r, g, b, a, no_save) self.statusbar_info.alpha = a end - self.baseframe.rodape.esquerdo:SetVertexColor (r, g, b) - self.baseframe.rodape.esquerdo:SetAlpha (a) - self.baseframe.rodape.direita:SetVertexColor (r, g, b) - self.baseframe.rodape.direita:SetAlpha (a) - self.baseframe.rodape.direita_nostatusbar:SetVertexColor (r, g, b) - self.baseframe.rodape.esquerdo_nostatusbar:SetVertexColor (r, g, b) - self.baseframe.rodape.direita_nostatusbar:SetAlpha (a) - self.baseframe.rodape.esquerdo_nostatusbar:SetAlpha (a) - self.baseframe.rodape.top_bg:SetVertexColor (r, g, b) - self.baseframe.rodape.top_bg:SetAlpha (a) + self.baseframe.rodape.esquerdo:SetVertexColor(r, g, b) + self.baseframe.rodape.esquerdo:SetAlpha(a) + self.baseframe.rodape.direita:SetVertexColor(r, g, b) + self.baseframe.rodape.direita:SetAlpha(a) + self.baseframe.rodape.direita_nostatusbar:SetVertexColor(r, g, b) + self.baseframe.rodape.esquerdo_nostatusbar:SetVertexColor(r, g, b) + self.baseframe.rodape.direita_nostatusbar:SetAlpha(a) + self.baseframe.rodape.esquerdo_nostatusbar:SetAlpha(a) + self.baseframe.rodape.top_bg:SetVertexColor(r, g, b) + self.baseframe.rodape.top_bg:SetAlpha(a) end @@ -8959,13 +8943,13 @@ function Details:SetTooltipBackdrop (border_texture, border_size, border_color) c[1], c[2], c[3], c[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1 cc[1], cc[2], cc[3], cc[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1 - Details.tooltip_backdrop.edgeFile = SharedMedia:Fetch ("border", border_texture) + Details.tooltip_backdrop.edgeFile = SharedMedia:Fetch("border", border_texture) Details.tooltip_backdrop.edgeSize = border_size end --> reset button functions - local reset_button_onenter = function (self, _, forced, from_click) + local reset_button_onenter = function(self, _, forced, from_click) if (Details.instances_menu_click_to_open and not forced) then return @@ -8981,7 +8965,7 @@ end self.instance.baseframe.cabecalho.button_mouse_over = true if (self.instance.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (false) + self:GetNormalTexture():SetDesaturated(false) end gameCooltip:Reset() @@ -9011,11 +8995,11 @@ end gameCooltip:ShowCooltip() end - local reset_button_onleave = function (self) + local reset_button_onleave = function(self) OnLeaveMainWindow (self.instance, self) if (self.instance.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (true) + self:GetNormalTexture():SetDesaturated(true) end hide_anti_overlap (self.instance.baseframe.anti_menu_overlap) @@ -9034,7 +9018,7 @@ end --> close button functions - local close_button_onclick = function (self, button_type, button) + local close_button_onclick = function(self, button_type, button) if (self and not self.instancia and button and button.instancia) then self = button @@ -9058,10 +9042,10 @@ end local panel = gump:Create1PxPanel (UIParent, 600, 100, "|cFFFFFFFFDetails!, the window hit the ground, bang bang...|r", nil, nil, nil, nil) panel:SetBackdropColor (0, 0, 0, 0.9) - panel:SetPoint ("center", UIParent, "center") + panel:SetPoint("center", UIParent, "center") - local s = panel:CreateFontString (nil, "overlay", "GameFontNormal") - s:SetPoint ("center", panel, "center") + local s = panel:CreateFontString(nil, "overlay", "GameFontNormal") + s:SetPoint("center", panel, "center") s:SetText (Loc["STRING_TUTORIAL_FULLY_DELETE_WINDOW"]) panel:Show() @@ -9071,11 +9055,11 @@ end end Details.close_instancia_func = close_button_onclick - local close_button_onenter = function (self) + local close_button_onenter = function(self) OnEnterMainWindow (self.instance, self, 3) if (self.instance.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (false) + self:GetNormalTexture():SetDesaturated(false) end local GameCooltip = GameCooltip @@ -9099,7 +9083,7 @@ end GameCooltip:SetOption("HeighMod", 9) - local font = SharedMedia:Fetch ("font", "Friz Quadrata TT") + local font = SharedMedia:Fetch("font", "Friz Quadrata TT") GameCooltip:AddLine(Loc["STRING_MENU_CLOSE_INSTANCE"], nil, 1, "white", nil, Details.font_sizes.menus, Details.font_faces.menus) GameCooltip:AddIcon([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 1, 1, 14, 14, 0.2, 0.8, 0.2, 0.8) GameCooltip:AddMenu(1, close_button_onclick, self) @@ -9121,11 +9105,11 @@ end GameCooltip:ShowCooltip() end - local close_button_onleave = function (self) + local close_button_onleave = function(self) OnLeaveMainWindow (self.instance, self, 3) if (self.instance.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (true) + self:GetNormalTexture():SetDesaturated(true) end hide_anti_overlap (self.instance.baseframe.anti_menu_overlap) @@ -9155,7 +9139,7 @@ local menu_can_open = function() end end -local report_on_enter = function (self, motion, forced, from_click) +local report_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened if (Details.instances_menu_click_to_open and not forced) then @@ -9167,7 +9151,7 @@ local report_on_enter = function (self, motion, forced, from_click) OnEnterMainWindow (instancia, self, 3) if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (false) + self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true @@ -9219,7 +9203,7 @@ local report_on_enter = function (self, motion, forced, from_click) GameCooltip:ShowCooltip() end -local report_on_leave = function (self, motion, forced, from_click) +local report_on_leave = function(self, motion, forced, from_click) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe @@ -9232,7 +9216,7 @@ local report_on_leave = function (self, motion, forced, from_click) baseframe.cabecalho.button_mouse_over = false if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (true) + self:GetNormalTexture():SetDesaturated(true) end if (GameCooltip.active) then @@ -9243,7 +9227,7 @@ local report_on_leave = function (self, motion, forced, from_click) end end -local atributo_on_enter = function (self, motion, forced, from_click) +local atributo_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened if (Details.instances_menu_click_to_open and not forced) then @@ -9256,7 +9240,7 @@ local atributo_on_enter = function (self, motion, forced, from_click) OnEnterMainWindow (instancia, self, 3) if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (false) + self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true @@ -9280,7 +9264,7 @@ local atributo_on_enter = function (self, motion, forced, from_click) GameCooltip:SetOption("TextHeightMod", 0) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) - GameCooltip:AddLine("All raid plugins already\nin use or disabled.", nil, 1, "white", nil, 10, SharedMedia:Fetch ("font", "Friz Quadrata TT")) + GameCooltip:AddLine("All raid plugins already\nin use or disabled.", nil, 1, "white", nil, 10, SharedMedia:Fetch("font", "Friz Quadrata TT")) GameCooltip:AddIcon([[Interface\GROUPFRAME\UI-GROUP-ASSISTANTICON]], 1, 1) GameCooltip:SetWallpaper (1, Details.tooltip.menus_bg_texture, Details.tooltip.menus_bg_coords, Details.tooltip.menus_bg_color, true) @@ -9300,7 +9284,7 @@ local atributo_on_enter = function (self, motion, forced, from_click) GameCooltip:ShowCooltip () end -local atributo_on_leave = function (self, motion, forced, from_click) +local atributo_on_leave = function(self, motion, forced, from_click) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe @@ -9309,7 +9293,7 @@ local atributo_on_leave = function (self, motion, forced, from_click) hide_anti_overlap (instancia.baseframe.anti_menu_overlap) if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (true) + self:GetNormalTexture():SetDesaturated(true) end GameCooltip.buttonOver = false @@ -9372,7 +9356,7 @@ local segmentButton_OnLeave = function(self, motion, forced, fromClick) end end -local modo_selecao_on_enter = function (self, motion, forced, from_click) +local modo_selecao_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- not is_cooltip_opened if (Details.instances_menu_click_to_open and not forced) then @@ -9385,7 +9369,7 @@ local modo_selecao_on_enter = function (self, motion, forced, from_click) OnEnterMainWindow (instancia, self, 3) if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (false) + self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true @@ -9414,7 +9398,7 @@ local modo_selecao_on_enter = function (self, motion, forced, from_click) self:SetScript ("OnUpdate", build_mode_list) end -local modo_selecao_on_leave = function (self) +local modo_selecao_on_leave = function(self) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe @@ -9424,7 +9408,7 @@ local modo_selecao_on_leave = function (self) hide_anti_overlap (instancia.baseframe.anti_menu_overlap) if (instancia.desaturated_menu) then - self:GetNormalTexture():SetDesaturated (true) + self:GetNormalTexture():SetDesaturated(true) end GameCooltip.buttonOver = false @@ -9466,26 +9450,26 @@ function Details:CreateFakeWindow() t:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 }) t:SetBackdropColor (0.0941, 0.0941, 0.0941, 0.3) local tb = CreateFrame ("frame", nil, t) - tb:SetPoint ("bottomleft", t, "topleft", 0, 0) - tb:SetPoint ("bottomright", t, "topright", 0, 0) - tb:SetHeight (16) + tb:SetPoint("bottomleft", t, "topleft", 0, 0) + tb:SetPoint("bottomright", t, "topright", 0, 0) + tb:SetHeight(16) tb:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 }) tb:SetBackdropColor (0.7, 0.7, 0.7, 0.4) - local tt = tb:CreateFontString (nil, "overlay", "GameFontNormal") + local tt = tb:CreateFontString(nil, "overlay", "GameFontNormal") Details:SetFontColor (tt, "white") - Details:SetFontSize (tt, 10) - Details:SetFontFace (tt, LibStub:GetLibrary("LibSharedMedia-3.0"):Fetch ("font", "Accidental Presidency")) - tt:SetPoint ("bottomleft", tb, 3, 4) + Details:SetFontSize(tt, 10) + Details:SetFontFace(tt, LibStub:GetLibrary("LibSharedMedia-3.0"):Fetch("font", "Accidental Presidency")) + tt:SetPoint("bottomleft", tb, 3, 4) tt:SetText ("Damage Done") t.TitleIcons = {} for i = 1, 5 do local b = tb:CreateTexture (nil, "overlay") b:SetSize (12, 12) - b:SetPoint ("bottomright", tb, "bottomright", -((abs(i-6)-1)*11) - 1, 2) + b:SetPoint("bottomright", tb, "bottomright", -((abs(i-6)-1)*11) - 1, 2) local button_texture_texcoord = Details:GetTitleBarIconsTexture (i) - b:SetTexture (button_texture_texcoord.texture) - b:SetTexCoord (unpack(button_texture_texcoord.texcoord)) + b:SetTexture(button_texture_texcoord.texture) + b:SetTexCoord(unpack(button_texture_texcoord.texcoord)) tinsert (t.TitleIcons, b) end @@ -9553,17 +9537,17 @@ function gump:CriaCabecalho (baseframe, instancia) --> FECHAR INSTANCIA ---------------------------------------------------------------------------------------------------------------------------------------------------- baseframe.cabecalho.fechar = CreateFrame ("button", "DetailsCloseInstanceButton" .. instancia.meu_id, baseframe) --, "UIPanelCloseButton" - baseframe.cabecalho.fechar:SetWidth (18) - baseframe.cabecalho.fechar:SetHeight (18) - baseframe.cabecalho.fechar:SetFrameLevel (5) --> altura mais alta que os demais frames - baseframe.cabecalho.fechar:SetPoint ("bottomright", baseframe, "topright", 5, -6) --> seta o ponto dele fixando no base frame + baseframe.cabecalho.fechar:SetWidth(18) + baseframe.cabecalho.fechar:SetHeight(18) + baseframe.cabecalho.fechar:SetFrameLevel(5) --> altura mais alta que os demais frames + baseframe.cabecalho.fechar:SetPoint("bottomright", baseframe, "topright", 5, -6) --> seta o ponto dele fixando no base frame baseframe.cabecalho.fechar:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - baseframe.cabecalho.fechar:GetNormalTexture():SetTexCoord (160/256, 192/256, 0, 1) + baseframe.cabecalho.fechar:GetNormalTexture():SetTexCoord(160/256, 192/256, 0, 1) baseframe.cabecalho.fechar:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - baseframe.cabecalho.fechar:GetHighlightTexture():SetTexCoord (160/256, 192/256, 0, 1) + baseframe.cabecalho.fechar:GetHighlightTexture():SetTexCoord(160/256, 192/256, 0, 1) baseframe.cabecalho.fechar:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - baseframe.cabecalho.fechar:GetPushedTexture():SetTexCoord (160/256, 192/256, 0, 1) + baseframe.cabecalho.fechar:GetPushedTexture():SetTexCoord(160/256, 192/256, 0, 1) --baseframe.cabecalho.fechar:SetNormalTexture ([[Interface\Buttons\UI-Panel-MinimizeButton-Up]]) --baseframe.cabecalho.fechar:SetHighlightTexture ([[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]]) @@ -9579,66 +9563,66 @@ function gump:CriaCabecalho (baseframe, instancia) --> bola do canto esquedo superior --> primeiro criar a arma��o para apoiar as texturas baseframe.cabecalho.ball_point = instancia.floatingframe:CreateTexture (nil, "overlay") - baseframe.cabecalho.ball_point:SetPoint ("bottomleft", baseframe, "topleft", -37, 0) - baseframe.cabecalho.ball_point:SetWidth (64) - baseframe.cabecalho.ball_point:SetHeight (32) + baseframe.cabecalho.ball_point:SetPoint("bottomleft", baseframe, "topleft", -37, 0) + baseframe.cabecalho.ball_point:SetWidth(64) + baseframe.cabecalho.ball_point:SetHeight(32) --> icone do atributo --baseframe.cabecalho.atributo_icon = _detalhes.listener:CreateTexture (nil, "artwork") baseframe.cabecalho.atributo_icon = baseframe:CreateTexture ("DetailsAttributeIcon" .. instancia.meu_id, "background") local icon_anchor = Details.skins ["WoW Interface"].icon_anchor_main - baseframe.cabecalho.atributo_icon:SetPoint ("topright", baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) - baseframe.cabecalho.atributo_icon:SetTexture (DEFAULT_SKIN) - baseframe.cabecalho.atributo_icon:SetWidth (32) - baseframe.cabecalho.atributo_icon:SetHeight (32) + baseframe.cabecalho.atributo_icon:SetPoint("topright", baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) + baseframe.cabecalho.atributo_icon:SetTexture(DEFAULT_SKIN) + baseframe.cabecalho.atributo_icon:SetWidth(32) + baseframe.cabecalho.atributo_icon:SetHeight(32) --> bola overlay --baseframe.cabecalho.ball = _detalhes.listener:CreateTexture (nil, "overlay") baseframe.cabecalho.ball = baseframe:CreateTexture (nil, "overlay") - baseframe.cabecalho.ball:SetPoint ("bottomleft", baseframe, "topleft", -107, 0) - baseframe.cabecalho.ball:SetWidth (128) - baseframe.cabecalho.ball:SetHeight (128) + baseframe.cabecalho.ball:SetPoint("bottomleft", baseframe, "topleft", -107, 0) + baseframe.cabecalho.ball:SetWidth(128) + baseframe.cabecalho.ball:SetHeight(128) - baseframe.cabecalho.ball:SetTexture (DEFAULT_SKIN) - baseframe.cabecalho.ball:SetTexCoord (unpack(COORDS_LEFT_BALL)) + baseframe.cabecalho.ball:SetTexture(DEFAULT_SKIN) + baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) --> emenda baseframe.cabecalho.emenda = baseframe:CreateTexture (nil, "background") - baseframe.cabecalho.emenda:SetPoint ("bottomleft", baseframe.cabecalho.ball, "bottomright") - baseframe.cabecalho.emenda:SetWidth (8) - baseframe.cabecalho.emenda:SetHeight (128) - baseframe.cabecalho.emenda:SetTexture (DEFAULT_SKIN) - baseframe.cabecalho.emenda:SetTexCoord (unpack(COORDS_LEFT_CONNECTOR)) + baseframe.cabecalho.emenda:SetPoint("bottomleft", baseframe.cabecalho.ball, "bottomright") + baseframe.cabecalho.emenda:SetWidth(8) + baseframe.cabecalho.emenda:SetHeight(128) + baseframe.cabecalho.emenda:SetTexture(DEFAULT_SKIN) + baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) baseframe.cabecalho.atributo_icon:Hide() baseframe.cabecalho.ball:Hide() --> bola do canto direito superior baseframe.cabecalho.ball_r = baseframe:CreateTexture (nil, "background") - baseframe.cabecalho.ball_r:SetPoint ("bottomright", baseframe, "topright", 96, 0) - baseframe.cabecalho.ball_r:SetWidth (128) - baseframe.cabecalho.ball_r:SetHeight (128) - baseframe.cabecalho.ball_r:SetTexture (DEFAULT_SKIN) - baseframe.cabecalho.ball_r:SetTexCoord (unpack(COORDS_RIGHT_BALL)) + baseframe.cabecalho.ball_r:SetPoint("bottomright", baseframe, "topright", 96, 0) + baseframe.cabecalho.ball_r:SetWidth(128) + baseframe.cabecalho.ball_r:SetHeight(128) + baseframe.cabecalho.ball_r:SetTexture(DEFAULT_SKIN) + baseframe.cabecalho.ball_r:SetTexCoord(unpack(COORDS_RIGHT_BALL)) --> barra centro baseframe.cabecalho.top_bg = baseframe:CreateTexture (nil, "background") - baseframe.cabecalho.top_bg:SetPoint ("left", baseframe.cabecalho.emenda, "right", 0, 0) - baseframe.cabecalho.top_bg:SetPoint ("right", baseframe.cabecalho.ball_r, "left") - baseframe.cabecalho.top_bg:SetTexture (DEFAULT_SKIN) - baseframe.cabecalho.top_bg:SetTexCoord (unpack(COORDS_TOP_BACKGROUND)) - baseframe.cabecalho.top_bg:SetWidth (512) - baseframe.cabecalho.top_bg:SetHeight (128) + baseframe.cabecalho.top_bg:SetPoint("left", baseframe.cabecalho.emenda, "right", 0, 0) + baseframe.cabecalho.top_bg:SetPoint("right", baseframe.cabecalho.ball_r, "left") + baseframe.cabecalho.top_bg:SetTexture(DEFAULT_SKIN) + baseframe.cabecalho.top_bg:SetTexCoord(unpack(COORDS_TOP_BACKGROUND)) + baseframe.cabecalho.top_bg:SetWidth(512) + baseframe.cabecalho.top_bg:SetHeight(128) --> frame invis�vel baseframe.UPFrame = CreateFrame ("frame", "DetailsUpFrameInstance"..instancia.meu_id, baseframe) - baseframe.UPFrame:SetPoint ("left", baseframe.cabecalho.ball, "right", 0, -53) - baseframe.UPFrame:SetPoint ("right", baseframe.cabecalho.ball_r, "left", 0, -53) - baseframe.UPFrame:SetHeight (20) + baseframe.UPFrame:SetPoint("left", baseframe.cabecalho.ball, "right", 0, -53) + baseframe.UPFrame:SetPoint("right", baseframe.cabecalho.ball_r, "left", 0, -53) + baseframe.UPFrame:SetHeight(20) baseframe.UPFrame.is_toolbar = true baseframe.UPFrame:Show() - baseframe.UPFrame:EnableMouse (true) + baseframe.UPFrame:EnableMouse(true) baseframe.UPFrame:SetMovable (true) baseframe.UPFrame:SetResizable (true) @@ -9646,10 +9630,10 @@ function gump:CriaCabecalho (baseframe, instancia) --> corrige o v�o entre o baseframe e o upframe baseframe.UPFrameConnect = CreateFrame ("frame", "DetailsAntiGap"..instancia.meu_id, baseframe) - baseframe.UPFrameConnect:SetPoint ("bottomleft", baseframe, "topleft", 0, -1) - baseframe.UPFrameConnect:SetPoint ("bottomright", baseframe, "topright", 0, -1) - baseframe.UPFrameConnect:SetHeight (2) - baseframe.UPFrameConnect:EnableMouse (true) + baseframe.UPFrameConnect:SetPoint("bottomleft", baseframe, "topleft", 0, -1) + baseframe.UPFrameConnect:SetPoint("bottomright", baseframe, "topright", 0, -1) + baseframe.UPFrameConnect:SetHeight(2) + baseframe.UPFrameConnect:EnableMouse(true) baseframe.UPFrameConnect:SetMovable (true) baseframe.UPFrameConnect:SetResizable (true) baseframe.UPFrameConnect.is_toolbar = true @@ -9657,9 +9641,9 @@ function gump:CriaCabecalho (baseframe, instancia) BGFrame_scripts (baseframe.UPFrameConnect, baseframe, instancia) baseframe.UPFrameLeftPart = CreateFrame ("frame", "DetailsUpFrameLeftPart"..instancia.meu_id, baseframe) - baseframe.UPFrameLeftPart:SetPoint ("bottomleft", baseframe, "topleft", 0, 0) + baseframe.UPFrameLeftPart:SetPoint("bottomleft", baseframe, "topleft", 0, 0) baseframe.UPFrameLeftPart:SetSize (22, 20) - baseframe.UPFrameLeftPart:EnableMouse (true) + baseframe.UPFrameLeftPart:EnableMouse(true) baseframe.UPFrameLeftPart:SetMovable (true) baseframe.UPFrameLeftPart:SetResizable (true) baseframe.UPFrameLeftPart.is_toolbar = true @@ -9668,22 +9652,22 @@ function gump:CriaCabecalho (baseframe, instancia) --> anchors para os micro displays no lado de cima da janela local StatusBarLeftAnchor = CreateFrame ("frame", "DetailsStatusBarLeftAnchor" .. instancia.meu_id, baseframe) - StatusBarLeftAnchor:SetPoint ("bottomleft", baseframe, "topleft", 0, 9) - StatusBarLeftAnchor:SetWidth (1) - StatusBarLeftAnchor:SetHeight (1) + StatusBarLeftAnchor:SetPoint("bottomleft", baseframe, "topleft", 0, 9) + StatusBarLeftAnchor:SetWidth(1) + StatusBarLeftAnchor:SetHeight(1) baseframe.cabecalho.StatusBarLeftAnchor = StatusBarLeftAnchor local StatusBarCenterAnchor = CreateFrame ("frame", "DetailsStatusBarCenterAnchor" .. instancia.meu_id, baseframe) - StatusBarCenterAnchor:SetPoint ("center", baseframe, "center") - StatusBarCenterAnchor:SetPoint ("bottom", baseframe, "top", 0, 9) - StatusBarCenterAnchor:SetWidth (1) - StatusBarCenterAnchor:SetHeight (1) + StatusBarCenterAnchor:SetPoint("center", baseframe, "center") + StatusBarCenterAnchor:SetPoint("bottom", baseframe, "top", 0, 9) + StatusBarCenterAnchor:SetWidth(1) + StatusBarCenterAnchor:SetHeight(1) baseframe.cabecalho.StatusBarCenterAnchor = StatusBarCenterAnchor local StatusBarRightAnchor = CreateFrame ("frame", "DetailsStatusBarRightAnchor" .. instancia.meu_id, baseframe) - StatusBarRightAnchor:SetPoint ("bottomright", baseframe, "topright", 0, 9) - StatusBarRightAnchor:SetWidth (1) - StatusBarRightAnchor:SetHeight (1) + StatusBarRightAnchor:SetPoint("bottomright", baseframe, "topright", 0, 9) + StatusBarRightAnchor:SetWidth(1) + StatusBarRightAnchor:SetHeight(1) baseframe.cabecalho.StatusBarRightAnchor = StatusBarRightAnchor local MenuAnchorLeft = CreateFrame ("frame", "DetailsMenuAnchorLeft"..instancia.meu_id, baseframe) @@ -9719,8 +9703,8 @@ function gump:CriaCabecalho (baseframe, instancia) end baseframe.cabecalho.modo_selecao = gump:NewButton (baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, modo_selecao_button_click, nil, nil, [[Interface\AddOns\Details\images\modo_icone]]) - baseframe.cabecalho.modo_selecao:SetPoint ("bottomleft", baseframe.cabecalho.ball, "bottomright", instancia.menu_anchor [1], instancia.menu_anchor [2]) - baseframe.cabecalho.modo_selecao:SetFrameLevel (baseframe:GetFrameLevel()+5) + baseframe.cabecalho.modo_selecao:SetPoint("bottomleft", baseframe.cabecalho.ball, "bottomright", instancia.menu_anchor [1], instancia.menu_anchor [2]) + baseframe.cabecalho.modo_selecao:SetFrameLevel(baseframe:GetFrameLevel()+5) baseframe.cabecalho.modo_selecao.widget._instance = instancia baseframe.cabecalho.modo_selecao:SetScript ("OnEnter", modo_selecao_on_enter) @@ -9728,15 +9712,15 @@ function gump:CriaCabecalho (baseframe, instancia) local b = baseframe.cabecalho.modo_selecao.widget b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetNormalTexture():SetTexCoord (0/256, 32/256, 0, 1) + b:GetNormalTexture():SetTexCoord(0/256, 32/256, 0, 1) b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetHighlightTexture():SetTexCoord (0/256, 32/256, 0, 1) + b:GetHighlightTexture():SetTexCoord(0/256, 32/256, 0, 1) b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetPushedTexture():SetTexCoord (0/256, 32/256, 0, 1) + b:GetPushedTexture():SetTexCoord(0/256, 32/256, 0, 1) --> SELECIONAR O SEGMENTO ---------------------------------------------------------------------------------------------------------------------------------------------------- - local segmento_button_click = function (self, button, param1) + local segmento_button_click = function(self, button, param1) if (Details.instances_menu_click_to_open) then if (instancia.LastMenuOpened == "segments" and GameCooltipFrame1:IsShown()) then GameCooltip:ShowMe (false) @@ -9751,9 +9735,9 @@ function gump:CriaCabecalho (baseframe, instancia) end baseframe.cabecalho.segmento = gump:NewButton (baseframe, nil, "DetailsSegmentButton"..instancia.meu_id, nil, 16, 16, segmento_button_click, nil, nil, [[Interface\AddOns\Details\images\segmentos_icone]]) - baseframe.cabecalho.segmento:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1) + baseframe.cabecalho.segmento:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.segmento.widget._instance = instancia - baseframe.cabecalho.segmento:SetPoint ("left", baseframe.cabecalho.modo_selecao, "right", 0, 0) + baseframe.cabecalho.segmento:SetPoint("left", baseframe.cabecalho.modo_selecao, "right", 0, 0) --> ativa bot�o do meio e direito baseframe.cabecalho.segmento:SetClickFunction (segmento_button_click, nil, nil, "rightclick") @@ -9763,11 +9747,11 @@ function gump:CriaCabecalho (baseframe, instancia) local b = baseframe.cabecalho.segmento.widget b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetNormalTexture():SetTexCoord (32/256, 64/256, 0, 1) + b:GetNormalTexture():SetTexCoord(32/256, 64/256, 0, 1) b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetHighlightTexture():SetTexCoord (32/256, 64/256, 0, 1) + b:GetHighlightTexture():SetTexCoord(32/256, 64/256, 0, 1) b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetPushedTexture():SetTexCoord (32/256, 64/256, 0, 1) + b:GetPushedTexture():SetTexCoord(32/256, 64/256, 0, 1) --> SELECIONAR O ATRIBUTO ---------------------------------------------------------------------------------------------------------------------------------------------------- local atributo_button_click = function() @@ -9783,20 +9767,20 @@ function gump:CriaCabecalho (baseframe, instancia) end baseframe.cabecalho.atributo = gump:NewButton (baseframe, nil, "DetailsAttributeButton"..instancia.meu_id, nil, 16, 16, atributo_button_click) - baseframe.cabecalho.atributo:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1) + baseframe.cabecalho.atributo:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.atributo.widget._instance = instancia - baseframe.cabecalho.atributo:SetPoint ("left", baseframe.cabecalho.segmento.widget, "right", 0, 0) + baseframe.cabecalho.atributo:SetPoint("left", baseframe.cabecalho.segmento.widget, "right", 0, 0) baseframe.cabecalho.atributo:SetScript ("OnEnter", atributo_on_enter) baseframe.cabecalho.atributo:SetScript ("OnLeave", atributo_on_leave) local b = baseframe.cabecalho.atributo.widget b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetNormalTexture():SetTexCoord (66/256, 93/256, 0, 1) + b:GetNormalTexture():SetTexCoord(66/256, 93/256, 0, 1) b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetHighlightTexture():SetTexCoord (68/256, 93/256, 0, 1) + b:GetHighlightTexture():SetTexCoord(68/256, 93/256, 0, 1) b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetPushedTexture():SetTexCoord (68/256, 93/256, 0, 1) + b:GetPushedTexture():SetTexCoord(68/256, 93/256, 0, 1) --> REPORTAR ~report ---------------------------------------------------------------------------------------------------------------------------------------------------- local report_func = function() @@ -9804,20 +9788,20 @@ function gump:CriaCabecalho (baseframe, instancia) GameCooltip2:Hide() end baseframe.cabecalho.report = gump:NewButton (baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, report_func) - baseframe.cabecalho.report:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1) + baseframe.cabecalho.report:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.report.widget._instance = instancia - baseframe.cabecalho.report:SetPoint ("left", baseframe.cabecalho.atributo, "right", -6, 0) + baseframe.cabecalho.report:SetPoint("left", baseframe.cabecalho.atributo, "right", -6, 0) baseframe.cabecalho.report:SetScript ("OnEnter", report_on_enter) baseframe.cabecalho.report:SetScript ("OnLeave", report_on_leave) local b = baseframe.cabecalho.report.widget b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetNormalTexture():SetTexCoord (96/256, 128/256, 0, 1) + b:GetNormalTexture():SetTexCoord(96/256, 128/256, 0, 1) b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetHighlightTexture():SetTexCoord (96/256, 128/256, 0, 1) + b:GetHighlightTexture():SetTexCoord(96/256, 128/256, 0, 1) b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetPushedTexture():SetTexCoord (96/256, 128/256, 0, 1) + b:GetPushedTexture():SetTexCoord(96/256, 128/256, 0, 1) @@ -9843,9 +9827,9 @@ function gump:CriaCabecalho (baseframe, instancia) end baseframe.cabecalho.reset = CreateFrame ("button", "DetailsClearSegmentsButton" .. instancia.meu_id, baseframe) - baseframe.cabecalho.reset:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1) + baseframe.cabecalho.reset:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.reset:SetSize (10, 16) - baseframe.cabecalho.reset:SetPoint ("right", baseframe.cabecalho.novo, "left") + baseframe.cabecalho.reset:SetPoint("right", baseframe.cabecalho.novo, "left") baseframe.cabecalho.reset.instance = instancia baseframe.cabecalho.reset._instance = instancia @@ -9855,10 +9839,10 @@ function gump:CriaCabecalho (baseframe, instancia) local b = baseframe.cabecalho.reset b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetNormalTexture():SetTexCoord (128/256, 160/256, 0, 1) + b:GetNormalTexture():SetTexCoord(128/256, 160/256, 0, 1) b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetHighlightTexture():SetTexCoord (128/256, 160/256, 0, 1) + b:GetHighlightTexture():SetTexCoord(128/256, 160/256, 0, 1) b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]]) - b:GetPushedTexture():SetTexCoord (128/256, 160/256, 0, 1) + b:GetPushedTexture():SetTexCoord(128/256, 160/256, 0, 1) end diff --git a/frames/window_news.lua b/frames/window_news.lua index 841942b5..bd5519aa 100644 --- a/frames/window_news.lua +++ b/frames/window_news.lua @@ -1,11 +1,10 @@ -local Details = _G.Details -local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) -local g = Details.gump +local Details = _G.Details +local Loc = LibStub("AceLocale-3.0"):GetLocale( "Details" ) +local gump = Details.gump local _ function Details:OpenNewsWindow(textToShow, dumpValues, keeptext) - Details.latest_news_saw = Details.userversion local newsFrame = Details:CreateOrOpenNewsWindow() @@ -15,30 +14,30 @@ function Details:OpenNewsWindow(textToShow, dumpValues, keeptext) newsFrame:Show() return end - + if (textToShow and type (textToShow) == "table") then - DetailsNewsWindowLower:SetSize (450, 5000) - DetailsNewsWindowSlider:SetMinMaxValues (0, 5000) - DetailsNewsWindowText:SetHeight (5000) - - local s = "" - for _, text in ipairs (textToShow) do - if (type (text) == "string" or type (text) == "number") then - s = s .. text .. "\n" + DetailsNewsWindowLower:SetSize(450, 5000) + DetailsNewsWindowSlider:SetMinMaxValues(0, 5000) + DetailsNewsWindowText:SetHeight(5000) + + local returnString = "" + for _, text in ipairs(textToShow) do + if (type(text) == "string" or type(text) == "number") then + returnString = returnString .. text .. "\n" end end - + if (dumpValues) then - s = Details.table.dump (textToShow) + returnString = Details.table.dump(textToShow) end - + if (keeptext) then - newsFrame:Text ((DetailsNewsWindowText:GetText() or "") .. "\n\n" .. s) + newsFrame:Text((DetailsNewsWindowText:GetText() or "") .. "\n\n" .. returnString) else if (dumpValues) then - newsFrame.DumpTableFrame:SetText (s) + newsFrame.DumpTableFrame:SetText (returnString) else - newsFrame:Text (s) + newsFrame:Text (returnString) end end else @@ -62,10 +61,8 @@ end function Details:CreateOrOpenNewsWindow() local frame = _G.DetailsNewsWindow - - if (not frame) then - --build news frame + if (not frame) then frame = DetailsFramework:CreateSimplePanel(UIParent, 480, 560, "Details! Damage Meter " .. Details.version, "DetailsNewsWindow", panel_options, db) tinsert(UISpecialFrames, "DetailsNewsWindow") frame:SetPoint("left", UIParent, "left", 10, 0) @@ -83,30 +80,30 @@ function Details:CreateOrOpenNewsWindow() frame.imageFrame.texture = frame.imageFrame:CreateTexture(nil, "overlay") frame.imageFrame.texture:SetPoint("topleft", frame.imageFrame, "topleft") - local dumpFrame = g:CreateTextEntry(frame, function()end, 500, 612, "DumpTable", "$parentDumpTable") - dumpFrame.editbox:SetMultiLine (true) - + local dumpFrame = gump:CreateTextEntry(frame, function()end, 500, 612, "DumpTable", "$parentDumpTable") + dumpFrame.editbox:SetMultiLine(true) + dumpFrame:SetPoint("topleft", frame, "topleft", 8, -68) dumpFrame:SetBackdrop(nil) dumpFrame.editbox:SetBackdrop(nil) dumpFrame.editbox:SetJustifyH("left") dumpFrame.editbox:SetJustifyV("top") - - frame.DumpTableFrame = dumpFrame - - local frame_upper = CreateFrame("scrollframe", nil, frame, "BackdropTemplate") - local frame_lower = CreateFrame("frame", "DetailsNewsWindowLower", frame_upper, "BackdropTemplate") - frame_lower:SetSize (450, 2000) - frame_upper:SetPoint ("topleft", frame, "topleft", 10, -30) - frame_upper:SetWidth(445) - frame_upper:SetHeight(500) - frame_upper:SetBackdrop({ + frame.DumpTableFrame = dumpFrame + + local frameUpper = CreateFrame("scrollframe", nil, frame, "BackdropTemplate") + local frameLower = CreateFrame("frame", "DetailsNewsWindowLower", frameUpper, "BackdropTemplate") + + frameLower:SetSize (450, 2000) + frameUpper:SetPoint ("topleft", frame, "topleft", 10, -30) + frameUpper:SetWidth(445) + frameUpper:SetHeight(500) + frameUpper:SetBackdrop({ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1},}) - frame_upper:SetBackdropColor (.1, .1, .1, .3) - frame_upper:SetScrollChild (frame_lower) + frameUpper:SetBackdropColor (.1, .1, .1, .3) + frameUpper:SetScrollChild (frameLower) local slider = CreateFrame ("slider", "DetailsNewsWindowSlider", frame, "BackdropTemplate") slider.bg = slider:CreateTexture (nil, "background") @@ -120,15 +117,15 @@ function Details:CreateOrOpenNewsWindow() slider:SetThumbTexture (slider.thumb) slider:SetOrientation ("vertical"); slider:SetSize (16, 499) - slider:SetPoint ("topleft", frame_upper, "topright") + slider:SetPoint ("topleft", frameUpper, "topright") slider:SetMinMaxValues (0, 2000) slider:SetValue(0) - slider:SetScript("OnValueChanged", function (self) - frame_upper:SetVerticalScroll (self:GetValue()) + slider:SetScript("OnValueChanged", function(self) + frameUpper:SetVerticalScroll (self:GetValue()) end) - frame_upper:EnableMouseWheel (true) - frame_upper:SetScript("OnMouseWheel", function (self, delta) + frameUpper:EnableMouseWheel (true) + frameUpper:SetScript("OnMouseWheel", function(self, delta) local current = slider:GetValue() if (IsShiftKeyDown() and (delta > 0)) then slider:SetValue(0) @@ -142,8 +139,8 @@ function Details:CreateOrOpenNewsWindow() end) --> text box - local texto = frame_lower:CreateFontString("DetailsNewsWindowText", "overlay", "GameFontNormal") - texto:SetPoint("topleft", frame_lower, "topleft") + local texto = frameLower:CreateFontString("DetailsNewsWindowText", "overlay", "GameFontNormal") + texto:SetPoint("topleft", frameLower, "topleft") texto:SetJustifyH("left") texto:SetJustifyV("top") texto:SetTextColor(1, 1, 1) diff --git a/frames/window_options2_sections.lua b/frames/window_options2_sections.lua index 05086e4d..95315fc3 100644 --- a/frames/window_options2_sections.lua +++ b/frames/window_options2_sections.lua @@ -151,7 +151,7 @@ do local iconcolor = {1, 1, 1, .5} local iconsize = {14, 14} - local onSelectTimeAbbreviation = function (_, _, abbreviationtype) + local onSelectTimeAbbreviation = function(_, _, abbreviationtype) _detalhes.ps_abbreviation = abbreviationtype _detalhes:UpdateToKFunctions() afterUpdate() @@ -172,7 +172,7 @@ do end --> number system - local onSelectNumeralSystem = function (_, _, systemNumber) + local onSelectNumeralSystem = function(_, _, systemNumber) _detalhes:SelectNumericalSystem(systemNumber) end @@ -195,7 +195,7 @@ do end --> time measure type - local onSelectTimeType = function (_, _, timetype) + local onSelectTimeType = function(_, _, timetype) _detalhes.time_type = timetype _detalhes.time_type_original = timetype _detalhes:RefreshMainWindow(-1, true) @@ -211,7 +211,7 @@ do end --> auto erase | erase data - local onSelectEraseData = function (_, _, eraseType) + local onSelectEraseData = function(_, _, eraseType) _detalhes.segments_auto_erase = eraseType afterUpdate() end @@ -243,7 +243,7 @@ do {--segments locked type = "toggle", get = function() return Details.instances_segments_locked end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.instances_segments_locked = value end, name = Loc ["STRING_OPTIONS_LOCKSEGMENTS"], @@ -253,7 +253,7 @@ do {--animate bars type = "toggle", get = function() return _detalhes.use_row_animations end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetUseAnimations(value) afterUpdate() end, @@ -264,7 +264,7 @@ do {--scroll speed type = "range", get = function() return _detalhes.scroll_speed end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.scroll_speed = value end, min = 1, @@ -276,7 +276,7 @@ do {--instances amount type = "range", get = function() return _detalhes.instances_amount end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.instances_amount = value end, min = 1, @@ -306,7 +306,7 @@ do {--update speed type = "range", get = function() return _detalhes.update_speed end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetWindowUpdateSpeed(value) afterUpdate() end, @@ -342,7 +342,7 @@ do {--auto erase trash segments type = "toggle", get = function() return _detalhes.trash_auto_remove end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.trash_auto_remove = value afterUpdate() end, @@ -353,7 +353,7 @@ do {--auto erase world segments type = "toggle", get = function() return _detalhes.world_combat_is_trash end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.world_combat_is_trash = value afterUpdate() end, @@ -364,7 +364,7 @@ do {--erase chart data type = "toggle", get = function() return _detalhes.clear_graphic end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.clear_graphic = value afterUpdate() end, @@ -376,7 +376,7 @@ do {--battleground remote parser type = "toggle", get = function() return _detalhes.use_battleground_server_parser end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.use_battleground_server_parser = value end, name = Loc ["STRING_OPTIONS_BG_UNIQUE_SEGMENT"], @@ -386,7 +386,7 @@ do {--battleground show enemies type = "toggle", get = function() return _detalhes.pvp_as_group end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.pvp_as_group = value end, name = Loc ["STRING_OPTIONS_BG_ALL_ALLY"], @@ -397,7 +397,7 @@ do {--max segments type = "range", get = function() return _detalhes.segments_amount end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.segments_amount = value afterUpdate() end, @@ -411,7 +411,7 @@ do {--max segments saved type = "range", get = function() return _detalhes.segments_amount_to_save end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.segments_amount_to_save = value afterUpdate() end, @@ -427,7 +427,7 @@ do {--pvp frags type = "toggle", get = function() return _detalhes.only_pvp_frags end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.only_pvp_frags = value afterUpdate() end, @@ -439,7 +439,7 @@ do {--damage taken everything type = "toggle", get = function() return _detalhes.damage_taken_everything end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.damage_taken_everything = value afterUpdate() end, @@ -460,7 +460,7 @@ do {--death log min healing type = "range", get = function() return _detalhes.deathlog_healingdone_min end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.deathlog_healingdone_min = value afterUpdate() end, @@ -477,7 +477,7 @@ do {--erase overall data on new boss type = "toggle", get = function() return _detalhes.overall_clear_newboss end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetOverallResetOptions(value) afterUpdate() end, @@ -488,7 +488,7 @@ do {--erase overall data on mythic plus type = "toggle", get = function() return _detalhes.overall_clear_newchallenge end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetOverallResetOptions(nil, value) afterUpdate() end, @@ -499,7 +499,7 @@ do {--erase overall data on logout type = "toggle", get = function() return _detalhes.overall_clear_pvp end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetOverallResetOptions(nil, nil, nil, value) afterUpdate() end, @@ -510,7 +510,7 @@ do {--erase overall data on logout type = "toggle", get = function() return _detalhes.overall_clear_logout end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetOverallResetOptions(nil, nil, value) afterUpdate() end, @@ -589,7 +589,7 @@ do {--click through type = "toggle", get = function() return currentInstance.clickthrough_window end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details:InstanceGroupCall(currentInstance, "UpdateClickThroughSettings", nil, value, value, value) afterUpdate() end, @@ -600,7 +600,7 @@ do {--click only in combat type = "toggle", get = function() return currentInstance.clickthrough_incombatonly end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details:InstanceGroupCall(currentInstance, "UpdateClickThroughSettings", value) afterUpdate() end, @@ -615,7 +615,7 @@ do {--show pets when solo type = "toggle", get = function() return Details.immersion_pets_on_solo_play end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.immersion_pets_on_solo_play = value afterUpdate() end, @@ -627,7 +627,7 @@ do {--always show players even on stardard mode type = "toggle", get = function() return _detalhes.all_players_are_group end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.all_players_are_group = value afterUpdate() end, @@ -667,7 +667,7 @@ do {--ignore nicknames type = "toggle", get = function() return _detalhes.ignore_nicktag end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.ignore_nicktag = value afterUpdate() end, @@ -679,7 +679,7 @@ do {--remove realm name type = "toggle", get = function() return _detalhes.remove_realm_from_name end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.remove_realm_from_name = value afterUpdate() end, @@ -694,7 +694,7 @@ do {--player bar color toggle type = "toggle", get = function() return Details.use_self_color end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.use_self_color = value afterUpdate() end, @@ -709,7 +709,7 @@ do local r, g, b = unpack(Details.class_colors.SELF) return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) Details.class_colors.SELF[1] = r Details.class_colors.SELF[2] = g Details.class_colors.SELF[3] = b @@ -743,7 +743,7 @@ do end --> skin selection - local onSelectSkin = function (_, _, skinName) + local onSelectSkin = function(_, _, skinName) if (isGroupEditing()) then Details:InstanceGroupCall(currentInstance, "OptionPanelOnChangeSkin", skinName) else @@ -826,7 +826,7 @@ do --> import skin string local importSaved = function() --when clicking in the okay button in the import window, it send the text in the first argument - _detalhes:ShowImportWindow("", function (skinString) + _detalhes:ShowImportWindow("", function(skinString) if (type (skinString) ~= "string" or string.len(skinString) < 2) then return end @@ -1011,7 +1011,7 @@ do {--chat tab embed enabled type = "toggle", get = function() return _detalhes.chat_tab_embed.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.chat_embed:SetTabSettings(nil, value) Details.options.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() @@ -1033,7 +1033,7 @@ do {--single window type = "toggle", get = function() return _detalhes.chat_tab_embed.single_window end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.chat_embed:SetTabSettings (nil, nil, value) Details.options.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() @@ -1045,7 +1045,7 @@ do {--chat tab width offset type = "range", get = function() return tonumber (_detalhes.chat_tab_embed.x_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.chat_tab_embed.x_offset = value if (_detalhes.chat_embed.enabled) then _detalhes.chat_embed:DoEmbed() @@ -1062,7 +1062,7 @@ do {--chat tab height offset type = "range", get = function() return tonumber (_detalhes.chat_tab_embed.y_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.chat_tab_embed.y_offset = value if (_detalhes.chat_embed.enabled) then _detalhes.chat_embed:DoEmbed() @@ -1089,7 +1089,7 @@ end do --bar grow direction - local set_bar_grow_direction = function (_, instance, value) + local set_bar_grow_direction = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarGrowDirection", value) afterUpdate() end @@ -1106,7 +1106,7 @@ do end --bar orientation - local set_bar_orientation = function (_, instance, value) + local set_bar_orientation = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarOrientationDirection", value) afterUpdate() end @@ -1140,7 +1140,7 @@ do local texture_icon_size = {14, 14} local texture_texcoord = {469/512, 505/512, 249/512, 284/512} - local onSelectTexture = function (_, instance, textureName) + local onSelectTexture = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetBarSettings", nil, textureName) afterUpdate() end @@ -1151,12 +1151,12 @@ do for name, texturePath in pairs (textures) do texTable[#texTable+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectTexture, icon = texture_icon, texcoord = texture_texcoord} end - table.sort (texTable, function (t1, t2) return t1.label < t2.label end) + table.sort (texTable, function(t1, t2) return t1.label < t2.label end) return texTable end --select background texture - local onSelectTextureBackground = function (_, instance, textureName) + local onSelectTextureBackground = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, textureName) afterUpdate() end @@ -1167,17 +1167,17 @@ do for name, texturePath in pairs (textures2) do texTable2[#texTable2+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectTextureBackground, icon = texture_icon, texcoord = texture_texcoord} end - table.sort (texTable2, function (t1, t2) return t1.label < t2.label end) + table.sort (texTable2, function(t1, t2) return t1.label < t2.label end) return texTable2 end --select icon file from dropdown - local OnSelectIconFileSpec = function (_, _, iconpath) + local OnSelectIconFileSpec = function(_, _, iconpath) editInstanceSetting(currentInstance, "SetBarSpecIconSettings", true, iconpath, true) afterUpdate() end - local OnSelectIconFile = function (_, _, iconpath) + local OnSelectIconFile = function(_, _, iconpath) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, iconpath) if (currentInstance.row_info.use_spec_icons) then editInstanceSetting(currentInstance, "SetBarSpecIconSettings", false) @@ -1195,7 +1195,7 @@ do for name, texturePath in pairs (textures2) do texTable2[#texTable2+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectBarTextureOverlay, icon = texture_icon, texcoord = texture_texcoord} end - table.sort(texTable2, function (t1, t2) return t1.label < t2.label end) + table.sort(texTable2, function(t1, t2) return t1.label < t2.label end) return texTable2 end @@ -1221,7 +1221,7 @@ do {--line height type = "range", get = function() return tonumber (currentInstance.row_info.height) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", value) afterUpdate() end, @@ -1235,7 +1235,7 @@ do {--padding type = "range", get = function() return tonumber (currentInstance.row_info.space.between) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1249,7 +1249,7 @@ do {--disable highlight type = "toggle", get = function() return _detalhes.instances_disable_bar_highlight end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.instances_disable_bar_highlight = value afterUpdate() end, @@ -1260,7 +1260,7 @@ do {--fast dps updates type = "toggle", get = function() return currentInstance.row_info.fast_ps_update end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "row_info", "fast_ps_update", value) afterUpdate() end, @@ -1271,7 +1271,7 @@ do {--always show me type = "toggle", get = function() return currentInstance.following.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "following", "enabled", value) afterUpdate() end, @@ -1352,7 +1352,7 @@ do local alpha = currentInstance.row_info.alpha return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, {r, g, b}) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, a) afterUpdate() @@ -1364,7 +1364,7 @@ do {--color by player class type = "toggle", get = function() return currentInstance.row_info.texture_class_colors end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, value) afterUpdate() end, @@ -1390,7 +1390,7 @@ do local r, g, b, a = unpack(currentInstance.row_info.overlay_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarOverlaySettings", nil, {r, g, b, a}) afterUpdate() end, @@ -1418,7 +1418,7 @@ do local alpha = currentInstance.row_info.alpha return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, @@ -1429,7 +1429,7 @@ do {--background uses class colors type = "toggle", get = function() return currentInstance.row_info.texture_background_class_color end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1489,7 +1489,7 @@ do {--bar start after icon type = "toggle", get = function() return currentInstance.row_info.start_after_icon end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1500,7 +1500,7 @@ do {--icon size offset type = "range", get = function() return tonumber (currentInstance.row_info.icon_size_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1518,7 +1518,7 @@ do {--show faction icon type = "toggle", get = function() return currentInstance.row_info.show_faction_icon end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarFactionIconSettings", value) afterUpdate() end, @@ -1529,7 +1529,7 @@ do {--faction icon size offset type = "range", get = function() return tonumber (currentInstance.row_info.faction_icon_size_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarFactionIconSettings", nil, value) afterUpdate() end, @@ -1547,7 +1547,7 @@ do {--show role icon type = "toggle", get = function() return currentInstance.row_info.show_arena_role_icon end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarArenaRoleIconSettings", value) afterUpdate() end, @@ -1558,7 +1558,7 @@ do {--role icon size offset type = "range", get = function() return tonumber (currentInstance.row_info.arena_role_icon_size_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarArenaRoleIconSettings", nil, value) afterUpdate() end, @@ -1579,7 +1579,7 @@ do {--inline text enabled type = "toggle", get = function() return currentInstance.use_multi_fontstrings end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "use_multi_fontstrings", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") _detalhes:RefreshMainWindow(-1, true) @@ -1592,7 +1592,7 @@ do {--inline auto align enabled type = "toggle", get = function() return currentInstance.use_auto_align_multi_fontstrings end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "use_auto_align_multi_fontstrings", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") _detalhes:RefreshMainWindow(-1, true) @@ -1606,7 +1606,7 @@ do {--name size offset type = "range", get = function() return tonumber(currentInstance.fontstrings_text_limit_offset) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text_limit_offset", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") Details.options.RefreshInstances(currentInstance) @@ -1622,7 +1622,7 @@ do {--lineText2 (left, usuali is the 'done' amount) type = "range", get = function() return tonumber (currentInstance.fontstrings_text2_anchor) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text2_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() @@ -1637,7 +1637,7 @@ do {--lineText3 (in the middle) type = "range", get = function() return tonumber (currentInstance.fontstrings_text3_anchor) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text3_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() @@ -1652,7 +1652,7 @@ do {--lineText4 (closest to the right) type = "range", get = function() return tonumber (currentInstance.fontstrings_text4_anchor) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text4_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() @@ -1671,7 +1671,7 @@ do {--total bar enabled type = "toggle", get = function() return currentInstance.total_bar.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "total_bar", "enabled", value) afterUpdate() Details.options.RefreshInstances(currentInstance) @@ -1682,7 +1682,7 @@ do {--only in group type = "toggle", get = function() return currentInstance.total_bar.only_in_group end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "total_bar", "only_in_group", value) afterUpdate() end, @@ -1695,7 +1695,7 @@ do local r, g, b = unpack(currentInstance.total_bar.color) return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "total_bar", "color", {r, g, b, 1}) afterUpdate() end, @@ -1711,7 +1711,7 @@ do local r, g, b = unpack(Details.class_colors.ARENA_GREEN) return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) Details.class_colors.ARENA_GREEN[1] = r Details.class_colors.ARENA_GREEN[2] = g Details.class_colors.ARENA_GREEN[3] = b @@ -1726,7 +1726,7 @@ do local r, g, b = unpack(Details.class_colors.ARENA_YELLOW) return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) Details.class_colors.ARENA_YELLOW[1] = r Details.class_colors.ARENA_YELLOW[2] = g Details.class_colors.ARENA_YELLOW[3] = b @@ -1742,7 +1742,7 @@ do {--border enabled type = "toggle", get = function() return currentInstance.row_info.backdrop.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", value) afterUpdate() end, @@ -1756,7 +1756,7 @@ do local r, g, b, a = unpack(currentInstance.row_info.backdrop.color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, nil, {r, g, b, a}) afterUpdate() end, @@ -1767,7 +1767,7 @@ do {--border size type = "range", get = function() return tonumber (currentInstance.row_info.backdrop.size) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, value) afterUpdate() end, @@ -1783,7 +1783,7 @@ do {--border uses class colors type = "toggle", get = function() return currentInstance.row_info.backdrop.use_class_colors end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, nil, nil, value) afterUpdate() end, @@ -1804,7 +1804,7 @@ end do --> text font selection - local onSelectFont = function (_, instance, fontName) + local onSelectFont = function(_, instance, fontName) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, fontName) afterUpdate() end @@ -1815,12 +1815,12 @@ do for name, fontPath in pairs (fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = onSelectFont, font = fontPath, descfont = name, desc = Loc ["STRING_MUSIC_DETAILS_ROBERTOCARLOS"]} end - table.sort (fontTable, function (t1, t2) return t1.label < t2.label end) + table.sort (fontTable, function(t1, t2) return t1.label < t2.label end) return fontTable end --> percent type - local onSelectPercent = function (_, instance, percentType) + local onSelectPercent = function(_, instance, percentType) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, percentType) afterUpdate() end @@ -1834,7 +1834,7 @@ do end --> brackets - local onSelectBracket = function (_, instance, value) + local onSelectBracket = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, nil, value) afterUpdate() end @@ -1851,7 +1851,7 @@ do end --> separators - local onSelectSeparator = function (_, instance, value) + local onSelectSeparator = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, nil, nil, value) afterUpdate() end @@ -1882,7 +1882,7 @@ do local r, g, b = unpack(currentInstance.row_info.fixed_text_color) return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, {r, g, b, 1}) afterUpdate() end, @@ -1892,7 +1892,7 @@ do {--text size 2 type = "range", get = function() return currentInstance.row_info.font_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", value) afterUpdate() end, @@ -1929,7 +1929,7 @@ do {--use class colors 7 type = "toggle", get = function() return currentInstance.row_info.textL_class_colors end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, value) afterUpdate() end, @@ -1939,7 +1939,7 @@ do {--outline 8 type = "toggle", get = function() return currentInstance.row_info.textL_outline end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1949,7 +1949,7 @@ do {--outline small 9 type = "toggle", get = function() return currentInstance.row_info.textL_outline_small end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1962,7 +1962,7 @@ do local r, g, b = unpack(currentInstance.row_info.textL_outline_small_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, @@ -1972,7 +1972,7 @@ do {--position number 11 type = "toggle", get = function() return currentInstance.row_info.textL_show_number end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1982,7 +1982,7 @@ do {--translit text 12 type = "toggle", get = function() return currentInstance.row_info.textL_translit_text end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -1995,7 +1995,7 @@ do {--custom left text 14 type = "toggle", get = function() return currentInstance.row_info.textL_enable_custom_text end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2026,7 +2026,7 @@ do {--use class colors 18 type = "toggle", get = function() return currentInstance.row_info.textR_class_colors end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, value) afterUpdate() end, @@ -2036,7 +2036,7 @@ do {--outline 19 type = "toggle", get = function() return currentInstance.row_info.textR_outline end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2046,7 +2046,7 @@ do {--outline small 20 type = "toggle", get = function() return currentInstance.row_info.textR_outline_small end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2059,7 +2059,7 @@ do local r, g, b = unpack(currentInstance.row_info.textR_outline_small_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, @@ -2072,7 +2072,7 @@ do {--show total --23 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[1] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", value) afterUpdate() end, @@ -2082,7 +2082,7 @@ do {--show per second 24 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[2] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, value) afterUpdate() end, @@ -2092,7 +2092,7 @@ do {--show percent 25 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[3] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, value) afterUpdate() end, @@ -2128,7 +2128,7 @@ do {--custom right text 31 type = "toggle", get = function() return currentInstance.row_info.textR_enable_custom_text end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2182,14 +2182,14 @@ end -- ~05 - title bar do - local func = function (menu_button) + local func = function(menu_button) editInstanceSetting(currentInstance, "menu_icons", menu_button, not currentInstance.menu_icons[menu_button]) editInstanceSetting(currentInstance, "ToolbarMenuSetButtons") afterUpdate() end --> menu text face - local onSelectFont = function (_, _, fontName) + local onSelectFont = function(_, _, fontName) _detalhes.font_faces.menus = fontName end @@ -2199,12 +2199,12 @@ do for name, fontPath in pairs (fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = onSelectFont, font = fontPath, descfont = name, desc = Loc ["STRING_MUSIC_DETAILS_ROBERTOCARLOS"]} end - table.sort (fontTable, function (t1, t2) return t1.label < t2.label end) + table.sort (fontTable, function(t1, t2) return t1.label < t2.label end) return fontTable end --> attribute text font - local on_select_attribute_font = function (self, instance, fontName) + local on_select_attribute_font = function(self, instance, fontName) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, fontName) afterUpdate() end @@ -2214,7 +2214,7 @@ do for name, fontPath in pairs (SharedMedia:HashTable ("font")) do fonts [#fonts+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = on_select_attribute_font, font = fontPath, descfont = name, desc = "Our thoughts strayed constantly\nAnd without boundary\nThe ringing of the division bell had began."} end - table.sort (fonts, function (t1, t2) return t1.label < t2.label end) + table.sort (fonts, function(t1, t2) return t1.label < t2.label end) return fonts end @@ -2237,7 +2237,7 @@ do for name, texturePath in pairs (textures) do texTable[#texTable+1] = {value = name, label = name, statusbar = texturePath, onclick = onSelectCustomTitleBarTexture} end - table.sort(texTable, function (t1, t2) return t1.label < t2.label end) + table.sort(texTable, function(t1, t2) return t1.label < t2.label end) return texTable end @@ -2261,7 +2261,7 @@ do {--use custom titlebar type = "toggle", get = function() return currentInstance.titlebar_shown end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetTitleBarSettings", value) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() @@ -2273,7 +2273,7 @@ do {--custom title bar height type = "range", get = function() return currentInstance.titlebar_height end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetTitleBarSettings", nil, value) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() @@ -2301,7 +2301,7 @@ do local r, g, b, a = unpack(currentInstance.titlebar_texture_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetTitleBarSettings", nil, nil, nil, {r, g, b, a}) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() @@ -2316,7 +2316,7 @@ do {--disable all displays type = "toggle", get = function() return currentInstance.disable_alldisplays_window end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.disable_alldisplays_window = value afterUpdate() end, @@ -2434,7 +2434,7 @@ do {--title bar icons size type = "range", get = function() return currentInstance.menu_icons_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarMenuButtonsSize", value) afterUpdate() end, @@ -2449,7 +2449,7 @@ do {--title bar icons spacing type = "range", get = function() return currentInstance.menu_icons.space end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarMenuSetButtonsOptions", value) afterUpdate() end, @@ -2463,7 +2463,7 @@ do {--title bar icons position X type = "range", get = function() return currentInstance.menu_anchor[1] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MenuAnchor", value) afterUpdate() end, @@ -2477,7 +2477,7 @@ do {--title bar icons position Y type = "range", get = function() return currentInstance.menu_anchor[2] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MenuAnchor", nil, value) afterUpdate() end, @@ -2491,7 +2491,7 @@ do {--icons desaturated type = "toggle", get = function() return currentInstance.desaturated_menu end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "DesaturateMenu", value) afterUpdate() end, @@ -2502,7 +2502,7 @@ do {--hide icon main icon type = "toggle", get = function() return currentInstance.hide_icon end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "HideMainIcon", value) afterUpdate() end, @@ -2513,7 +2513,7 @@ do {--button attach to right type = "toggle", get = function() return currentInstance.menu_anchor.side == 2 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "LeftMenuAnchorSide", value and 2 or 1) afterUpdate() end, @@ -2524,7 +2524,7 @@ do {--plugins button attach to right type = "toggle", get = function() return currentInstance.plugins_grow_direction == 2 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "plugins_grow_direction", value and 2 or 1) editInstanceSetting(currentInstance, "ToolbarMenuSetButtons") afterUpdate() @@ -2536,7 +2536,7 @@ do {--disable reset button type = "toggle", get = function() return _detalhes.disable_reset_button end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.disable_reset_button = value afterUpdate() end, @@ -2547,7 +2547,7 @@ do {--click to open menus type = "toggle", get = function() return _detalhes.instances_menu_click_to_open end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.instances_menu_click_to_open = value afterUpdate() end, @@ -2558,7 +2558,7 @@ do {--auto hide buttons type = "toggle", get = function() return currentInstance.auto_hide_menu.left end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetAutoHideMenu", value) afterUpdate() end, @@ -2572,7 +2572,7 @@ do {--enable text type = "toggle", get = function() return currentInstance.attribute_text.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", value) afterUpdate() end, @@ -2583,7 +2583,7 @@ do {--encounter time type = "toggle", get = function() return currentInstance.attribute_text.show_timer and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2594,7 +2594,7 @@ do {--text size type = "range", get = function() return tonumber(currentInstance.attribute_text.text_size) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, value) afterUpdate() end, @@ -2621,7 +2621,7 @@ do local r, g, b = unpack (currentInstance.attribute_text.text_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, @@ -2632,7 +2632,7 @@ do {--text shadow type = "toggle", get = function() return currentInstance.attribute_text.shadow end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, @@ -2643,7 +2643,7 @@ do {--text X type = "range", get = function() return tonumber(currentInstance.attribute_text.anchor[1]) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, value) afterUpdate() end, @@ -2657,7 +2657,7 @@ do {--text Y type = "range", get = function() return tonumber(currentInstance.attribute_text.anchor[2]) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, value) afterUpdate() end, @@ -2671,7 +2671,7 @@ do {--anchor to top type = "toggle", get = function() return currentInstance.attribute_text.side == 1 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, value and 1 or 2) afterUpdate() end, @@ -2693,7 +2693,7 @@ do {--menu text size type = "range", get = function() return Details.font_sizes.menus end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.font_sizes.menus = value afterUpdate() end, @@ -2726,7 +2726,7 @@ do ["DIALOG"] = "Dialog" } - local onStrataSelect = function (_, instance, strataName) + local onStrataSelect = function(_, instance, strataName) editInstanceSetting(currentInstance, "SetFrameStrata", strataName) afterUpdate() end @@ -2741,7 +2741,7 @@ do local buildStrataMenu = function() return strataTable end --> backdrop texture - local onBackdropSelect = function (_, instance, backdropName) + local onBackdropSelect = function(_, instance, backdropName) editInstanceSetting(currentInstance, "SetBackdropTexture", backdropName) afterUpdate() end @@ -2823,7 +2823,7 @@ do return {r, g, b, 1} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "InstanceColor", r, g, b, a, nil, true) afterUpdate() end, @@ -2834,7 +2834,7 @@ do {--show borders type = "toggle", get = function() return currentInstance.show_sidebars end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then editInstanceSetting(currentInstance, "ShowSideBars") else @@ -2852,7 +2852,7 @@ do get = function() return {currentInstance.bg_r, currentInstance.bg_g, currentInstance.bg_b, currentInstance.bg_alpha} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBackgroundColor", r, g, b) editInstanceSetting(currentInstance, "SetBackgroundAlpha", a) afterUpdate() @@ -2864,7 +2864,7 @@ do {--window scale type = "range", get = function() return tonumber(currentInstance.window_scale) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetWindowScale", value, true) afterUpdate() end, @@ -2879,7 +2879,7 @@ do {--ignore on mass hide type = "toggle", get = function() return currentInstance.ignore_mass_showhide end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ignore_mass_showhide", value) afterUpdate() end, @@ -2912,7 +2912,7 @@ do {--disable grouping type = "toggle", get = function() return _detalhes.disable_window_groups end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.disable_window_groups = value afterUpdate() end, @@ -2923,7 +2923,7 @@ do {--disable resize buttons type = "toggle", get = function() return _detalhes.disable_lock_ungroup_buttons end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.disable_lock_ungroup_buttons = value afterUpdate() end, @@ -2934,7 +2934,7 @@ do {--disable stretch button type = "toggle", get = function() return _detalhes.disable_stretch_button end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.disable_stretch_button = value afterUpdate() end, @@ -2947,7 +2947,7 @@ do {--title bar on top side type = "toggle", get = function() return currentInstance.toolbar_side == 1 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarSide", value and 1 or 2) afterUpdate() end, @@ -2958,7 +2958,7 @@ do {--stretch button always on top type = "toggle", get = function() return currentInstance.grab_on_top end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "grab_on_top", value) afterUpdate() end, @@ -2969,7 +2969,7 @@ do {--stretch button on top side type = "toggle", get = function() return currentInstance.stretch_button_side == 1 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "StretchButtonAnchor", value and 1 or 2) afterUpdate() end, @@ -3011,7 +3011,7 @@ do {--show full border ~border type = "toggle", get = function() return currentInstance.fullborder_shown end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateFullBorder", value) afterUpdate() end, @@ -3024,7 +3024,7 @@ do get = function() return {unpack(currentInstance.fullborder_color)} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "UpdateFullBorder", nil, {r, g, b, a}) afterUpdate() end, @@ -3035,7 +3035,7 @@ do {--border size type = "range", get = function() return tonumber(currentInstance.fullborder_size) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateFullBorder", nil, nil, value) afterUpdate() end, @@ -3053,7 +3053,7 @@ do {--show full border ~border type = "toggle", get = function() return currentInstance.rowareaborder_shown end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", value) afterUpdate() end, @@ -3066,7 +3066,7 @@ do get = function() return {unpack(currentInstance.rowareaborder_color)} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", nil, {r, g, b, a}) afterUpdate() end, @@ -3077,7 +3077,7 @@ do {--border size type = "range", get = function() return tonumber(currentInstance.rowareaborder_size) end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", nil, nil, value) afterUpdate() end, @@ -3151,7 +3151,7 @@ do {--show statusbar type = "toggle", get = function() return currentInstance.show_statusbar end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then editInstanceSetting(currentInstance, "ShowStatusBar") else @@ -3173,7 +3173,7 @@ do local alpha = currentInstance.statusbar_info.alpha return {r, g, b, alpha} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "StatusBarColor", r, g, b, a) afterUpdate() end, @@ -3184,7 +3184,7 @@ do {--lock micro displays type = "toggle", get = function() return currentInstance.micro_displays_locked end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MicroDisplaysLock", value) afterUpdate() end, @@ -3195,7 +3195,7 @@ do {--anchor on top side type = "toggle", get = function() return currentInstance.micro_displays_side == 1 and true or false end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MicroDisplaysSide", value and 1 or 2, true) afterUpdate() end, @@ -3219,7 +3219,7 @@ do DF:NewLabel (sectionFrame, _, "$parentMicroDisplayWarningLabel", "MicroDisplayWarningLabel", Loc ["STRING_OPTIONS_MICRODISPLAYS_WARNING"], "GameFontHighlightSmall", 10, "orange") --dropdown on select option - local onMicroDisplaySelect = function (_, _, micro_display) + local onMicroDisplaySelect = function(_, _, micro_display) local anchor, index = unpack (micro_display) if (index == -1) then @@ -3273,7 +3273,7 @@ do sectionFrame.MicroDisplayRightDropdown.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_DROPDOWN_TOOLTIP"] - local hideLeftMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayLeftDropdown, _, "$parenthideLeftMicroFrameButton", "hideLeftMicroFrameButton", 22, 22, function (self, button) + local hideLeftMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayLeftDropdown, _, "$parenthideLeftMicroFrameButton", "hideLeftMicroFrameButton", 22, 22, function(self, button) if (currentInstance.StatusBar ["left"].options.isHidden) then _detalhes.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["left"].real_name, "left") else @@ -3291,14 +3291,14 @@ do hideLeftMicroFrameButton:SetPushedTexture ([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) hideLeftMicroFrameButton:GetNormalTexture():SetDesaturated (true) hideLeftMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] - hideLeftMicroFrameButton:SetHook ("OnEnter", function (self, capsule) + hideLeftMicroFrameButton:SetHook ("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) - hideLeftMicroFrameButton:SetHook ("OnLeave", function (self, capsule) + hideLeftMicroFrameButton:SetHook ("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) - local HideCenterMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayCenterDropdown, _, "$parentHideCenterMicroFrameButton", "HideCenterMicroFrameButton", 22, 22, function (self) + local HideCenterMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayCenterDropdown, _, "$parentHideCenterMicroFrameButton", "HideCenterMicroFrameButton", 22, 22, function(self) if (currentInstance.StatusBar ["center"].options.isHidden) then _detalhes.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["center"].real_name, "center") else @@ -3316,14 +3316,14 @@ do HideCenterMicroFrameButton:SetPushedTexture ([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) HideCenterMicroFrameButton:GetNormalTexture():SetDesaturated (true) HideCenterMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] - HideCenterMicroFrameButton:SetHook ("OnEnter", function (self, capsule) + HideCenterMicroFrameButton:SetHook ("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) - HideCenterMicroFrameButton:SetHook ("OnLeave", function (self, capsule) + HideCenterMicroFrameButton:SetHook ("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) - local HideRightMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayRightDropdown, _, "$parentHideRightMicroFrameButton", "HideRightMicroFrameButton", 20, 20, function (self) + local HideRightMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayRightDropdown, _, "$parentHideRightMicroFrameButton", "HideRightMicroFrameButton", 20, 20, function(self) if (currentInstance.StatusBar ["right"].options.isHidden) then _detalhes.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["right"].real_name, "right") else @@ -3340,14 +3340,14 @@ do HideRightMicroFrameButton:SetPushedTexture ([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) HideRightMicroFrameButton:GetNormalTexture():SetDesaturated (true) HideRightMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] - HideRightMicroFrameButton:SetHook ("OnEnter", function (self, capsule) + HideRightMicroFrameButton:SetHook ("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) - HideRightMicroFrameButton:SetHook ("OnLeave", function (self, capsule) + HideRightMicroFrameButton:SetHook ("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) - local configRightMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayRightDropdown, _, "$parentconfigRightMicroFrameButton", "configRightMicroFrameButton", 18, 18, function (self) + local configRightMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayRightDropdown, _, "$parentconfigRightMicroFrameButton", "configRightMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["right"]:Setup() currentInstance.StatusBar ["right"]:Setup() end) @@ -3356,7 +3356,7 @@ do configRightMicroFrameButton:SetHighlightTexture ([[Interface\Buttons\UI-OptionsButton]]) configRightMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_OPTION_TOOLTIP"] - local configCenterMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayCenterDropdown, _, "$parentconfigCenterMicroFrameButton", "configCenterMicroFrameButton", 18, 18, function (self) + local configCenterMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayCenterDropdown, _, "$parentconfigCenterMicroFrameButton", "configCenterMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["center"]:Setup() currentInstance.StatusBar ["center"]:Setup() end) @@ -3365,7 +3365,7 @@ do configCenterMicroFrameButton:SetHighlightTexture ([[Interface\Buttons\UI-OptionsButton]]) configCenterMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_OPTION_TOOLTIP"] - local configLeftMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayLeftDropdown, _, "$parentconfigLeftMicroFrameButton", "configLeftMicroFrameButton", 18, 18, function (self) + local configLeftMicroFrameButton = DF:NewButton (sectionFrame.MicroDisplayLeftDropdown, _, "$parentconfigLeftMicroFrameButton", "configLeftMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["left"]:Setup() currentInstance.StatusBar ["left"]:Setup() end) @@ -3409,7 +3409,7 @@ do anchorFrame.plugin_widgets = {} anchorFrame:SetSize(1, 1) - local on_enter = function (self) + local on_enter = function(self) self:SetBackdropColor (.5, .5, .5, .8) @@ -3441,7 +3441,7 @@ do end end - local on_leave = function (self) + local on_leave = function(self) self:SetBackdropColor (.3, .3, .3, .3) if (self ["toolbarPluginsIcon" .. self.id]) then @@ -3539,7 +3539,7 @@ do tinsert (anchorFrame.plugin_widgets, bframe ["toolbarPluginsSlider"..i]) bframe ["toolbarPluginsSlider"..i]:SetPoint ("topleft", anchorFrame, "topleft", 415, y) bframe ["toolbarPluginsSlider"..i]:SetAsCheckBox() - bframe ["toolbarPluginsSlider"..i].OnSwitch = function (self, _, value) + bframe ["toolbarPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (value) then @@ -3674,7 +3674,7 @@ do bframe ["raidPluginsSlider"..i].PluginName = absName bframe ["raidPluginsSlider"..i]:SetPoint ("topleft", anchorFrame, "topleft", 415, y+1) bframe ["raidPluginsSlider"..i]:SetAsCheckBox() - bframe ["raidPluginsSlider"..i].OnSwitch = function (self, _, value) + bframe ["raidPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (not value) then @@ -3812,7 +3812,7 @@ do bframe ["soloPluginsSlider"..i].PluginName = absName bframe ["soloPluginsSlider"..i]:SetPoint ("topleft", anchorFrame, "topleft", 415, y+1) bframe ["soloPluginsSlider"..i]:SetAsCheckBox() - bframe ["soloPluginsSlider"..i].OnSwitch = function (self, _, value) + bframe ["soloPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (not value) then @@ -3854,7 +3854,7 @@ do local buildSection = function(sectionFrame) --build profile menu for "always use this profile" feature - local profile_selected_alwaysuse = function (_, instance, profile_name) + local profile_selected_alwaysuse = function(_, instance, profile_name) _detalhes.always_use_profile_name = profile_name local unitname = UnitName ("player") _detalhes.always_use_profile_exception [unitname] = nil @@ -3872,7 +3872,7 @@ do return menu end - local selectProfile = function (_, _, profileName) + local selectProfile = function(_, _, profileName) _detalhes:ApplyProfile(profileName) _detalhes:Msg (Loc ["STRING_OPTIONS_PROFILE_LOADED"], profileName) --Details.options.SetCurrentInstanceAndRefresh(currentInstance) @@ -3915,7 +3915,7 @@ do {--save size and positioning type = "toggle", get = function() return _detalhes.profile_save_pos end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.profile_save_pos = value _detalhes:SetProfileCProp (nil, "profile_save_pos", value) afterUpdate() @@ -4016,13 +4016,13 @@ do {--import profile type = "execute", func = function(self) - _detalhes:ShowImportWindow("", function (profileString) + _detalhes:ShowImportWindow("", function(profileString) if (type (profileString) ~= "string" or string.len (profileString) < 2) then return end --prompt text panel returns what the user inserted in the text field in the first argument - DF:ShowTextPromptPanel(Loc["STRING_OPTIONS_IMPORT_PROFILE_NAME"] .. ":", function (newProfileName) + DF:ShowTextPromptPanel(Loc["STRING_OPTIONS_IMPORT_PROFILE_NAME"] .. ":", function(newProfileName) Details:ImportProfile (profileString, newProfileName) end) end, Loc["STRING_OPTIONS_IMPORT_PROFILE_PASTE"]) @@ -4037,7 +4037,7 @@ do {--use on all characters type = "toggle", get = function() return _detalhes.always_use_profile end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.always_use_profile = value if (value) then @@ -4104,7 +4104,7 @@ do end --text face - local on_select_tooltip_font = function (self, _, fontName) + local on_select_tooltip_font = function(self, _, fontName) _detalhes.tooltip.fontface = fontName _detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance) end @@ -4115,7 +4115,7 @@ do fonts [#fonts+1] = {value = name, icon = font_select_icon, texcoord = font_select_texcoord, label = name, onclick = on_select_tooltip_font, font = fontPath, descfont = name, desc = "Our thoughts strayed constantly\nAnd without boundary\nThe ringing of the division bell had began."} end - table.sort (fonts, function (t1, t2) return t1.label < t2.label end) + table.sort (fonts, function(t1, t2) return t1.label < t2.label end) return fonts end @@ -4124,7 +4124,7 @@ do local iconcolor = {1, 1, 1, .5} local iconsize = {14, 14} - local onSelectTimeAbbreviation = function (_, _, abbreviationtype) + local onSelectTimeAbbreviation = function(_, _, abbreviationtype) _detalhes.tooltip.abbreviation = abbreviationtype _detalhes.atributo_damage:UpdateSelectedToKFunction() @@ -4151,7 +4151,7 @@ do end --maximize method - local onSelectMaximize = function (_, _, maximizeType) + local onSelectMaximize = function(_, _, maximizeType) _detalhes.tooltip.maximize_method = maximizeType _detalhes.atributo_damage:UpdateSelectedToKFunction() _detalhes.atributo_heal:UpdateSelectedToKFunction() @@ -4178,7 +4178,7 @@ do end --tooltip side - local onSelectAnchorPoint = function (_, _, selected_anchor) + local onSelectAnchorPoint = function(_, _, selected_anchor) _detalhes.tooltip.anchor_point = selected_anchor afterUpdate() end @@ -4199,7 +4199,7 @@ do end --tooltip relative side - local onSelectAnchorRelative = function (_, _, selected_anchor) + local onSelectAnchorRelative = function(_, _, selected_anchor) _detalhes.tooltip.anchor_relative = selected_anchor afterUpdate() end @@ -4220,7 +4220,7 @@ do end --anchor - local onSelectAnchor = function (_, _, selected_anchor) + local onSelectAnchor = function(_, _, selected_anchor) _detalhes.tooltip.anchored_to = selected_anchor refreshToggleAnchor() afterUpdate() @@ -4240,7 +4240,7 @@ do {--text shadow type = "toggle", get = function() return _detalhes.tooltip.fontshadow end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.tooltip.fontshadow = value afterUpdate() end, @@ -4256,7 +4256,7 @@ do local r, g, b, a = unpack(_detalhes.tooltip.fontcolor) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = _detalhes.tooltip.fontcolor color[1] = r color[2] = g @@ -4274,7 +4274,7 @@ do local r, g, b, a = unpack(_detalhes.tooltip.fontcolor_right) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = _detalhes.tooltip.fontcolor_right color[1] = r color[2] = g @@ -4292,7 +4292,7 @@ do local r, g, b, a = unpack(_detalhes.tooltip.header_text_color) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = _detalhes.tooltip.header_text_color color[1] = r color[2] = g @@ -4307,7 +4307,7 @@ do {--text size type = "range", get = function() return _detalhes.tooltip.fontsize end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.tooltip.fontsize = value afterUpdate() end, @@ -4337,7 +4337,7 @@ do local r, g, b, a = unpack(_detalhes.tooltip.background) return {r, g, b, a} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = _detalhes.tooltip.background color[1] = r color[2] = g @@ -4352,7 +4352,7 @@ do {--show amount type = "toggle", get = function() return _detalhes.tooltip.show_amount end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.tooltip.show_amount = value afterUpdate() end, @@ -4429,7 +4429,7 @@ do {--anchor offset x type = "range", get = function() return _detalhes.tooltip.anchor_offset[1] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.tooltip.anchor_offset[1] = value afterUpdate() end, @@ -4443,7 +4443,7 @@ do {--anchor offset y type = "range", get = function() return _detalhes.tooltip.anchor_offset[2] end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.tooltip.anchor_offset[2] = value afterUpdate() end, @@ -4471,7 +4471,7 @@ end do local buildSection = function(sectionFrame) - local onSelectMinimapAction = function (_, _, option) + local onSelectMinimapAction = function(_, _, option) _detalhes.minimap.onclick_what_todo = option afterUpdate() end @@ -4484,7 +4484,7 @@ do return menu end - local onSelectTimeAbbreviation = function (_, _, abbreviationtype) + local onSelectTimeAbbreviation = function(_, _, abbreviationtype) _detalhes.tooltip.abbreviation = abbreviationtype _detalhes:BrokerTick() afterUpdate() @@ -4513,7 +4513,7 @@ do {--minimap icon enabled type = "toggle", get = function() return not _detalhes.minimap.hide end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.minimap.hide = not value local LDBIcon = LDB and LibStub("LibDBIcon-1.0", true) @@ -4583,7 +4583,7 @@ do {--item level tracker enabled type = "toggle", get = function() return _detalhes.ilevel:IsTrackerEnabled() end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.ilevel:TrackItemLevel(value) afterUpdate() end, @@ -4597,7 +4597,7 @@ do {--enabled heal spell links type = "toggle", get = function() return _detalhes.report_heal_links end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.report_heal_links = value afterUpdate() end, @@ -4620,14 +4620,14 @@ do local buildSection = function(sectionFrame) --> callback from the image editor - local callmeback = function (width, height, overlayColor, alpha, texCoords) + local callmeback = function(width, height, overlayColor, alpha, texCoords) editInstanceSetting(currentInstance, "InstanceWallpaper", nil, nil, alpha, texCoords, width, height, overlayColor) sectionFrame:UpdateWallpaperInfo() afterUpdate() end --> select wallpaper - local onSelectSecTexture = function (self, instance, texturePath) + local onSelectSecTexture = function(self, instance, texturePath) local textureOptions = sectionFrame.wallpaperOptions local selectedTextureOption = texturePath @@ -4811,7 +4811,7 @@ do end --> wallpaper alignment - local onSelectAnchor = function (_, instance, anchor) + local onSelectAnchor = function(_, instance, anchor) editInstanceSetting(currentInstance, "InstanceWallpaper", nil, anchor) afterUpdate() sectionFrame:UpdateWallpaperInfo() @@ -4941,7 +4941,7 @@ do {--enable wallpaper type = "toggle", get = function() return currentInstance.wallpaper.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) currentInstance.wallpaper.enabled = value @@ -4988,7 +4988,7 @@ do {--wallpaper level type = "range", get = function() return currentInstance.wallpaper.level end, --default 2 - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetInstanceWallpaperLevel", value) afterUpdate() end, @@ -5079,7 +5079,7 @@ do autoSwitchFrame:SetPoint("topleft", 0, 0) --damager not in combat - local onSelectAutoSwitchDamagerNoCombat = function (_, _, switchTo) + local onSelectAutoSwitchDamagerNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_damager = false afterUpdate() @@ -5091,7 +5091,7 @@ do end --damager in combat - local onSelectAutoSwitchDamagerInCombat = function (_, _, switchTo) + local onSelectAutoSwitchDamagerInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_damager_in_combat = false afterUpdate() @@ -5103,7 +5103,7 @@ do end --healer not in combat - local onSelectAutoSwitchHealerNoCombat = function (_, _, switchTo) + local onSelectAutoSwitchHealerNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_healer = false afterUpdate() @@ -5115,7 +5115,7 @@ do end --healer in combat - local onSelectAutoSwitchHealerInCombat = function (_, _, switchTo) + local onSelectAutoSwitchHealerInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_healer_in_combat = false afterUpdate() @@ -5127,7 +5127,7 @@ do end --tank not in combat - local onSelectAutoSwitchTankNoCombat = function (_, _, switchTo) + local onSelectAutoSwitchTankNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_tank = false afterUpdate() @@ -5139,7 +5139,7 @@ do end --tank in combat - local onSelectAutoSwitchTankInCombat = function (_, _, switchTo) + local onSelectAutoSwitchTankInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_tank_in_combat = false afterUpdate() @@ -5151,7 +5151,7 @@ do end --after wipe - local onSelectAutoSwitchAfterWipe = function (_, _, switchTo) + local onSelectAutoSwitchAfterWipe = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_all_roles_after_wipe = false afterUpdate() @@ -5279,7 +5279,7 @@ do {--auto current segment type = "toggle", get = function() return currentInstance.auto_current end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) currentInstance.auto_current = value afterUpdate() end, @@ -5290,7 +5290,7 @@ do {--trash suppression type = "range", get = function() return _detalhes.instances_suppress_trash end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes:SetTrashSuppression(value) afterUpdate() end, @@ -5307,7 +5307,7 @@ do {--enabled type = "toggle", get = function() return currentInstance.menu_alpha.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", value) afterUpdate() end, @@ -5318,7 +5318,7 @@ do {--ignore bars type = "toggle", get = function() return currentInstance.menu_alpha.ignorebars end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, nil, nil, value) afterUpdate() end, @@ -5329,7 +5329,7 @@ do {--on hover over alpha type = "range", get = function() return currentInstance.menu_alpha.onenter end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, value) afterUpdate() end, @@ -5344,7 +5344,7 @@ do {--no interaction type = "range", get = function() return currentInstance.menu_alpha.onleave end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, nil, value) afterUpdate() end, @@ -5498,7 +5498,7 @@ do --raid tools local buildSection = function(sectionFrame) --on select channel for interrip announcer - local on_select_channel = function (self, _, channel) + local on_select_channel = function(self, _, channel) _detalhes.announce_interrupts.channel = channel C_Timer.After(0, function() if (channel == "WHISPER") then @@ -5521,7 +5521,7 @@ do --raid tools end --on select channel for cooldown announcer - local on_select_channel = function (self, _, channel) + local on_select_channel = function(self, _, channel) _detalhes.announce_cooldowns.channel = channel afterUpdate() end @@ -5538,7 +5538,7 @@ do --raid tools end --on select channel for report deaths - local on_select_channel = function (self, _, channel) + local on_select_channel = function(self, _, channel) _detalhes.announce_deaths.where = channel afterUpdate() end @@ -5569,7 +5569,7 @@ do --raid tools f:SetFrameStrata ("FULLSCREEN") f:EnableMouse() f:SetMovable (true) - f:SetScript ("OnMouseDown", function (self, button) + f:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then if (f.IsMoving) then f.IsMoving = false @@ -5583,7 +5583,7 @@ do --raid tools f:StartMoving() end) - f:SetScript ("OnMouseUp", function (self, button) + f:SetScript ("OnMouseUp", function(self, button) if (f.IsMoving) then f.IsMoving = false f:StopMovingOrSizing() @@ -5591,7 +5591,7 @@ do --raid tools end) f.labels = {} - local on_switch_func = function (self, spellid, value) + local on_switch_func = function(self, spellid, value) if (spellid) then if (not value) then _detalhes.announce_cooldowns.ignored_cooldowns [spellid] = nil @@ -5601,7 +5601,7 @@ do --raid tools end end - f:SetScript ("OnHide", function (self) + f:SetScript ("OnHide", function(self) self:Clear() end) @@ -5638,7 +5638,7 @@ do --raid tools local _GetSpellInfo = _detalhes.getspellinfo --details api for index, spellid in ipairs (_detalhes:GetCooldownList()) do - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) if (name) then local label = f.labels [index] or f:CreateLabel() label.icon.texture = icon @@ -5664,7 +5664,7 @@ do --raid tools {--auto current segment type = "toggle", get = function() return Details.announce_interrupts.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then _detalhes:EnableInterruptAnnouncer() else @@ -5749,7 +5749,7 @@ do --raid tools {--enable cooldown announcer type = "toggle", get = function() return _detalhes.announce_cooldowns.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then _detalhes:EnableCooldownAnnouncer() else @@ -5815,7 +5815,7 @@ do --raid tools {--enable death announcer type = "toggle", get = function() return _detalhes.announce_deaths.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) if (value) then _detalhes:EnableDeathAnnouncer() else @@ -5830,7 +5830,7 @@ do --raid tools {--max hits to show type = "range", get = function() return _detalhes.announce_deaths.last_hits end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.announce_deaths.last_hits = value afterUpdate() end, @@ -5844,7 +5844,7 @@ do --raid tools {--max hits to show type = "range", get = function() return _detalhes.announce_deaths.only_first end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.announce_deaths.only_first = value afterUpdate() end, @@ -5871,7 +5871,7 @@ do --raid tools {--enable death recap type = "toggle", get = function() return _detalhes.death_recap.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.death_recap.enabled = value afterUpdate() end, @@ -5882,7 +5882,7 @@ do --raid tools {--relevance time type = "range", get = function() return _detalhes.death_recap.relevance_time end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.death_recap.relevance_time = value afterUpdate() end, @@ -5896,7 +5896,7 @@ do --raid tools {--show life percent type = "toggle", get = function() return _detalhes.death_recap.show_life_percent end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.death_recap.show_life_percent = value afterUpdate() end, @@ -5907,7 +5907,7 @@ do --raid tools {--show segment list type = "toggle", get = function() return _detalhes.death_recap.show_segments end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.death_recap.show_segments = value afterUpdate() end, @@ -5921,7 +5921,7 @@ do --raid tools {--show first hit type = "toggle", get = function() return _detalhes.announce_firsthit.enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.announce_firsthit.enabled = value afterUpdate() end, @@ -5932,7 +5932,7 @@ do --raid tools {--show death menu type = "toggle", get = function() return _detalhes.on_death_menu end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.on_death_menu = value afterUpdate() end, @@ -6155,7 +6155,7 @@ do {--no window alerts type = "toggle", get = function() return _detalhes.streamer_config.no_alerts end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.streamer_config.no_alerts = value afterUpdate() end, @@ -6166,7 +6166,7 @@ do {--60hz updates type = "toggle", get = function() return _detalhes.streamer_config.faster_updates end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.streamer_config.faster_updates = value _detalhes:RefreshUpdater() afterUpdate() @@ -6178,7 +6178,7 @@ do {--quick player info type = "toggle", get = function() return _detalhes.streamer_config.quick_detection end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.streamer_config.quick_detection = value afterUpdate() end, @@ -6189,7 +6189,7 @@ do {--disable M+ shenanigans type = "toggle", get = function() return _detalhes.streamer_config.disable_mythic_dungeon end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.streamer_config.disable_mythic_dungeon = value afterUpdate() end, @@ -6200,7 +6200,7 @@ do {--disable M+ charts type = "toggle", get = function() return _detalhes.mythic_plus.show_damage_graphic end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.mythic_plus.show_damage_graphic = value afterUpdate() end, @@ -6211,7 +6211,7 @@ do {--clear cache regurlary type = "toggle", get = function() return _detalhes.mythic_plus.show_damage_graphic end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) _detalhes.mythic_plus.show_damage_graphic = value afterUpdate() end, @@ -6234,16 +6234,16 @@ end do local buildSection = function(sectionFrame) - local name_entry_func = function (index, text) + local name_entry_func = function(index, text) _detalhes:UserCustomSpellUpdate (index, text) end - local icon_func = function (index, icon) + local icon_func = function(index, icon) _detalhes:UserCustomSpellUpdate (index, nil, icon) end - local remove_func = function (index) + local remove_func = function(index) _detalhes:UserCustomSpellRemove (index) end - local reset_func = function (index) + local reset_func = function(index) _detalhes:UserCustomSpellReset (index) end @@ -6260,7 +6260,7 @@ do local total_lines = function() return #_detalhes.savedCustomSpells end - local fill_row = function (index) + local fill_row = function(index) local data = _detalhes.savedCustomSpells [index] if (data) then return {index, data [2], data [3], data [1], ""} @@ -6288,8 +6288,8 @@ do local spellname_entry = DF:NewTextEntry (addframe, nil, "$parentSpellnameEntry", "spellnameEntry", 160, 20, spellname_entry_func, nil, nil, nil, nil, options_dropdown_template) spellname_entry:SetPoint ("left", spellname, "right", 2, 0) - local spellid_entry_func = function (arg1, arg2, spellid) - local spellname, _, icon = GetSpellInfo (spellid) + local spellid_entry_func = function(arg1, arg2, spellid) + local spellname, _, icon = GetSpellInfo(spellid) if (spellname) then spellname_entry:SetText (spellname) addframe.spellIconButton.icon.texture = icon @@ -6301,7 +6301,7 @@ do spellid_entry:SetTemplate (options_dropdown_template) spellid_entry:SetPoint ("left", spellid, "right", 2, 0) - local icon_button_func = function (texture) + local icon_button_func = function(texture) addframe.spellIconButton.icon.texture = texture end local icon_button = DF:NewButton (addframe, nil, "$parentSpellIconButton", "spellIconButton", 20, 20, function() DF:IconPick (icon_button_func, true) end) @@ -6371,7 +6371,7 @@ do DF:NewSwitch (sectionFrame, _, "$parentConsolidadeSpellsSwitch", "ConsolidadeSpellsSwitch", 60, 20, nil, nil, _detalhes.override_spellids, nil, nil, nil, nil, options_switch_template) sectionFrame.ConsolidadeSpellsLabel:SetPoint ("left", sectionFrame.ConsolidadeSpellsSwitch, "right", 3) sectionFrame.ConsolidadeSpellsSwitch:SetAsCheckBox() - sectionFrame.ConsolidadeSpellsSwitch.OnSwitch = function (self, instance, value) + sectionFrame.ConsolidadeSpellsSwitch.OnSwitch = function(self, instance, value) _detalhes.override_spellids = value _detalhes:UpdateParserGears() end @@ -6413,7 +6413,7 @@ do end --> panel - local edit_name = function (index, name) + local edit_name = function(index, name) _detalhes:TimeDataUpdate (index, name) sectionFrame.userTimeCaptureFillPanel:Refresh() end @@ -6422,7 +6422,7 @@ do big_code_editor:SetPoint ("topleft", sectionFrame, "topleft", startX, startY - 70) big_code_editor:SetFrameLevel (sectionFrame:GetFrameLevel()+6) big_code_editor:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) - DF:ReskinSlider (big_code_editor.scroll) + DF:ReskinSlider(big_code_editor.scroll) big_code_editor:SetBackdropColor (0.5, 0.5, 0.5, 0.95) big_code_editor:SetBackdropBorderColor (0, 0, 0, 1) big_code_editor:Hide() @@ -6451,7 +6451,7 @@ do cancel_changes:SetTemplate(options_button_template) cancel_changes:SetText(Loc ["STRING_OPTIONS_CHART_CANCEL"]) - local edit_code = function (index) + local edit_code = function(index) local data = _detalhes.savedTimeCaptures [index] if (data) then local func = data [2] @@ -6475,15 +6475,15 @@ do end end - local edit_icon = function (index, icon) + local edit_icon = function(index, icon) _detalhes:TimeDataUpdate (index, nil, nil, nil, nil, nil, icon) sectionFrame.userTimeCaptureFillPanel:Refresh() end - local edit_author = function (index, author) + local edit_author = function(index, author) _detalhes:TimeDataUpdate (index, nil, nil, nil, author) sectionFrame.userTimeCaptureFillPanel:Refresh() end - local edit_version = function (index, version) + local edit_version = function(index, version) _detalhes:TimeDataUpdate (index, nil, nil, nil, nil, version) sectionFrame.userTimeCaptureFillPanel:Refresh() end @@ -6492,7 +6492,7 @@ do big_code_editor2:SetPoint ("topleft", sectionFrame, "topleft", 7, -70) big_code_editor2:SetFrameLevel (sectionFrame:GetFrameLevel()+6) big_code_editor2:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) - DF:ReskinSlider (big_code_editor2.scroll) + DF:ReskinSlider(big_code_editor2.scroll) big_code_editor2:SetBackdropColor (0.5, 0.5, 0.5, 0.95) big_code_editor2:SetBackdropBorderColor (0, 0, 0, 1) big_code_editor2:Hide() @@ -6508,7 +6508,7 @@ do close_export:SetText (Loc ["STRING_OPTIONS_CHART_CLOSE"]) close_export:SetTemplate (options_button_template) - local export_function = function (index) + local export_function = function(index) local data = _detalhes.savedTimeCaptures [index] if (data) then local encoded = Details:CompressData (data, "print") @@ -6524,12 +6524,12 @@ do end end - local remove_capture = function (index) + local remove_capture = function(index) _detalhes:TimeDataUnregister (index) sectionFrame.userTimeCaptureFillPanel:Refresh() end - local edit_enabled = function (index, enabled, a, b) + local edit_enabled = function(index, enabled, a, b) if (enabled) then _detalhes:TimeDataUpdate (index, nil, nil, nil, nil, nil, nil, false) else @@ -6553,7 +6553,7 @@ do local total_lines = function() return #_detalhes.savedTimeCaptures end - local fill_row = function (index) + local fill_row = function(index) local data = _detalhes.savedTimeCaptures [index] if (data) then @@ -6612,11 +6612,11 @@ do capture_func_entry:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) capture_func_entry:SetBackdropBorderColor (0, 0, 0, 1) capture_func_entry:SetBackdropColor (0, 0, 0, .5) - DF:ReskinSlider (capture_func_entry.scroll) + DF:ReskinSlider(capture_func_entry.scroll) --> icon local capture_icon = DF:NewLabel (addframe, nil, "$parentIconLabel", "iconLabel", Loc ["STRING_OPTIONS_CHART_ADDICON"]) - local icon_button_func = function (texture) + local icon_button_func = function(texture) addframe.iconButton.iconTexture = texture addframe.iconButton:SetIcon(texture) end @@ -6821,7 +6821,7 @@ do {--always in combat type = "toggle", get = function() return Details.mythic_plus.always_in_combat end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.always_in_combat = value end, name = "Always in Combat", @@ -6831,7 +6831,7 @@ do {--dedicated segment for bosses type = "toggle", get = function() return Details.mythic_plus.boss_dedicated_segment end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.boss_dedicated_segment = value end, name = "Boss Dedicated Segment", @@ -6841,7 +6841,7 @@ do {--make overall when done type = "toggle", get = function() return Details.mythic_plus.make_overall_when_done end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.make_overall_when_done = value end, name = "Make Overall Segment", @@ -6851,7 +6851,7 @@ do {--overall only with bosses type = "toggle", get = function() return Details.mythic_plus.make_overall_boss_only end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.make_overall_boss_only = value end, name = "Overall Segment Boss Only", @@ -6861,7 +6861,7 @@ do {--merge trash type = "toggle", get = function() return Details.mythic_plus.merge_boss_trash end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.merge_boss_trash = value end, name = "Merge Trash", @@ -6871,7 +6871,7 @@ do {--delete merged trash type = "toggle", get = function() return Details.mythic_plus.delete_trash_after_merge end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.delete_trash_after_merge = value end, name = "Delete Merged Trash Segments", @@ -6881,7 +6881,7 @@ do {--show chart popup type = "toggle", get = function() return Details.mythic_plus.show_damage_graphic end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.mythic_plus.show_damage_graphic = value end, name = "Show Damage Charts", diff --git a/frames/window_plater.lua b/frames/window_plater.lua index 4870bdb4..39e22355 100644 --- a/frames/window_plater.lua +++ b/frames/window_plater.lua @@ -42,13 +42,13 @@ function Details.OpenPlaterIntegrationWindow() --> anchor text function local anchor_names = {"Top Left", "Left", "Bottom Left", "Bottom", "Bottom Right", "Right", "Top Right", "Top", "Center", "Inner Left", "Inner Right", "Inner Top", "Inner Bottom"} - local build_anchor_side_table = function (member) + local build_anchor_side_table = function(member) local t = {} for i = 1, 13 do tinsert (t, { label = anchor_names[i], value = i, - onclick = function (_, _, value) + onclick = function(_, _, value) Details.plater [member].side = value if (Plater) then Plater.UpdateAllPlates() @@ -67,7 +67,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.realtime_dps_enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_enabled = value Details:RefreshPlaterIntegration() @@ -87,7 +87,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_size = value if (Plater) then Plater.UpdateAllPlates() @@ -106,7 +106,7 @@ function Details.OpenPlaterIntegrationWindow() local color = Details.plater.realtime_dps_color return {color [1], color [2], color [3], color [4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.plater.realtime_dps_color color[1], color[2], color[3], color[4] = r, g, b, a if (Plater) then @@ -121,7 +121,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.realtime_dps_shadow end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_shadow = value if (Plater) then Plater.UpdateAllPlates() @@ -143,7 +143,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_anchor.x end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_anchor.x = value if (Plater) then Plater.UpdateAllPlates() @@ -159,7 +159,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_anchor.y end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_anchor.y = value if (Plater) then Plater.UpdateAllPlates() @@ -179,7 +179,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.realtime_dps_player_enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_player_enabled = value Details:RefreshPlaterIntegration() @@ -199,7 +199,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_player_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_player_size = value if (Plater) then Plater.UpdateAllPlates() @@ -218,7 +218,7 @@ function Details.OpenPlaterIntegrationWindow() local color = Details.plater.realtime_dps_player_color return {color [1], color [2], color [3], color [4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.plater.realtime_dps_player_color color[1], color[2], color[3], color[4] = r, g, b, a if (Plater) then @@ -233,7 +233,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.realtime_dps_player_shadow end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_player_shadow = value if (Plater) then Plater.UpdateAllPlates() @@ -255,7 +255,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_player_anchor.x end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_player_anchor.x = value if (Plater) then Plater.UpdateAllPlates() @@ -271,7 +271,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.realtime_dps_player_anchor.y end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.realtime_dps_player_anchor.y = value if (Plater) then Plater.UpdateAllPlates() @@ -291,7 +291,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.damage_taken_enabled end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.damage_taken_enabled = value Details:RefreshPlaterIntegration() @@ -311,7 +311,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.damage_taken_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.damage_taken_size = value if (Plater) then Plater.UpdateAllPlates() @@ -330,7 +330,7 @@ function Details.OpenPlaterIntegrationWindow() local color = Details.plater.damage_taken_color return {color [1], color [2], color [3], color [4]} end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local color = Details.plater.damage_taken_color color[1], color[2], color[3], color[4] = r, g, b, a if (Plater) then @@ -345,7 +345,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "toggle", get = function() return Details.plater.damage_taken_shadow end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.damage_taken_shadow = value if (Plater) then Plater.UpdateAllPlates() @@ -367,7 +367,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.damage_taken_anchor.x end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.damage_taken_anchor.x = value if (Plater) then Plater.UpdateAllPlates() @@ -383,7 +383,7 @@ function Details.OpenPlaterIntegrationWindow() { type = "range", get = function() return Details.plater.damage_taken_anchor.y end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Details.plater.damage_taken_anchor.y = value if (Plater) then Plater.UpdateAllPlates() diff --git a/frames/window_playerbreakdown.lua b/frames/window_playerbreakdown.lua index b1364f0e..6712c563 100644 --- a/frames/window_playerbreakdown.lua +++ b/frames/window_playerbreakdown.lua @@ -110,12 +110,13 @@ function Details:OpenPlayerBreakdown (windowObject, playerObject) end function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDown, ControlKeyDown) - - --print (debugstack()) + --create the player list frame in the left side of the window + Details.PlayerBreakdown.CreatePlayerListFrame() if (not _detalhes.row_singleclick_overwrite [self.atributo] or not _detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo]) then _detalhes:FechaJanelaInfo() return + elseif (_type (_detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo]) == "function") then if (from_att_change) then _detalhes:FechaJanelaInfo() @@ -123,7 +124,7 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo end return _detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo] (_, jogador, self, ShiftKeyDown, ControlKeyDown) end - + if (self.modo == _detalhes._detalhes_props["MODO_RAID"]) then _detalhes:FechaJanelaInfo() return @@ -139,18 +140,18 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo end if (info.barras1) then - for index, barra in ipairs (info.barras1) do + for index, barra in ipairs (info.barras1) do barra.other_actor = nil end end - + if (info.barras2) then - for index, barra in ipairs (info.barras2) do + for index, barra in ipairs (info.barras2) do barra.icone:SetTexture ("") barra.icone:SetTexCoord (0, 1, 0, 1) end end - + --> passar os par�metros para dentro da tabela da janela. info.ativo = true --> sinaliza o addon que a janela esta aberta @@ -158,16 +159,16 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo info.sub_atributo = self.sub_atributo --> instancia.sub_atributo -> grava o sub atributo (damage done, dps, damage taken, etc) info.jogador = jogador --> de qual jogador (objeto classe_damage) info.instancia = self --> salva a refer�ncia da inst�ncia que pediu o info - + info.target_text = Loc ["STRING_TARGETS"] .. ":" info.target_member = "total" info.target_persecond = false - + info.mostrando = nil - + local nome = info.jogador.nome --> nome do jogador local atributo_nome = sub_atributos[info.atributo].lista [info.sub_atributo] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] --> // nome do atributo // precisa ser o sub atributo correto??? - + --> removendo o nome da realm do jogador if (nome:find ("-")) then nome = nome:gsub (("-.*"), "") @@ -185,11 +186,11 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo if (serial ~= "") then avatar = NickTag:GetNicknameTable (serial) end - + if (avatar and avatar [1]) then info.nome:SetText ((not _detalhes.ignore_nicktag and avatar [1]) or nome) end - + if (avatar and avatar [2]) then info.avatar:SetTexture (avatar [2]) @@ -200,10 +201,10 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo if (avatar [6]) then info.avatar_bg:SetVertexColor (unpack (avatar [6])) end - + info.avatar_nick:SetText (avatar [1] or nome) info.avatar_attribute:SetText (atributo_nome) - + info.avatar_attribute:SetPoint ("CENTER", info.avatar_nick, "CENTER", 0, 14) info.avatar:Show() info.avatar_bg:Show() @@ -212,28 +213,28 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo info.avatar_attribute:Show() info.nome:Hide() info.atributo_nome:Hide() - + else - + info.avatar:Hide() info.avatar_bg:Hide() info.avatar_nick:Hide() info.avatar_attribute:Hide() - + info.nome:Show() info.atributo_nome:Show() end - + info.atributo_nome:SetPoint ("CENTER", info.nome, "CENTER", 0, 14) - + info.no_targets:Hide() info.no_targets.text:Hide() gump:TrocaBackgroundInfo (info) - + gump:HidaAllBarrasInfo() gump:HidaAllBarrasAlvo() gump:HidaAllDetalheInfo() - + gump:JI_AtualizaContainerBarras (-1) local classe = jogador.classe @@ -355,26 +356,26 @@ function gump:TrocaBackgroundInfo() info.apoio_icone_esquerdo:Show() info.apoio_icone_direito:Show() - + info.report_direita:Hide() - + for i = 1, spellInfoSettings.amount do info ["right_background" .. i]:Show() end - + if (info.atributo == 1) then --> DANO - + if (info.sub_atributo == 1 or info.sub_atributo == 2) then --> damage done / dps info.bg1_sec_texture:SetTexture ("") info.tipo = 1 - + if (info.sub_atributo == 2) then info.targets:SetText (Loc ["STRING_TARGETS"] .. " " .. Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"] .. ":") info.target_persecond = true else info.targets:SetText (Loc ["STRING_TARGETS"] .. ":") end - + elseif (info.sub_atributo == 3) then --> damage taken --info.bg1_sec_texture:SetTexture ([[Interface\AddOns\Details\images\info_window_damagetaken]]) @@ -386,51 +387,51 @@ function gump:TrocaBackgroundInfo() for i = 1, spellInfoSettings.amount do info ["right_background" .. i]:Hide() end - + info.targets:SetText (Loc ["STRING_TARGETS"] .. ":") info.no_targets:Show() info.no_targets.text:Show() - + info.apoio_icone_esquerdo:Hide() info.apoio_icone_direito:Hide() info.report_direita:Show() - + elseif (info.sub_atributo == 4) then --> friendly fire --info.bg1_sec_texture:SetTexture ([[Interface\AddOns\Details\images\info_window_damagetaken]]) info.bg1_sec_texture:SetColorTexture (.05, .05, .05, .4) info.bg3_sec_texture:Show() info.bg2_sec_texture:Show() info.tipo = 3 - + for i = 1, spellInfoSettings.amount do info ["right_background" .. i]:Hide() end - + info.targets:SetText (Loc ["STRING_SPELLS"] .. ":") - + info.apoio_icone_esquerdo:Hide() info.apoio_icone_direito:Hide() info.report_direita:Show() - + elseif (info.sub_atributo == 6) then --> enemies --info.bg1_sec_texture:SetTexture ([[Interface\AddOns\Details\images\info_window_damagetaken]]) info.bg1_sec_texture:SetColorTexture (.05, .05, .05, .4) info.bg3_sec_texture:Show() info.bg2_sec_texture:Show() info.tipo = 3 - + for i = 1, spellInfoSettings.amount do info ["right_background" .. i]:Hide() end - + info.targets:SetText (Loc ["STRING_DAMAGE_TAKEN_FROM"]) end - + elseif (info.atributo == 2) then --> HEALING if (info.sub_atributo == 1 or info.sub_atributo == 2 or info.sub_atributo == 3) then --> damage done / dps info.bg1_sec_texture:SetTexture ("") info.tipo = 1 - + if (info.sub_atributo == 3) then info.targets:SetText (Loc ["STRING_OVERHEALED"] .. ":") info.target_member = "overheal" @@ -441,7 +442,7 @@ function gump:TrocaBackgroundInfo() else info.targets:SetText (Loc ["STRING_TARGETS"] .. ":") end - + elseif (info.sub_atributo == 4) then --> Healing taken info.bg1_sec_texture:SetColorTexture (.05, .05, .05, .4) info.bg3_sec_texture:Show() @@ -451,21 +452,21 @@ function gump:TrocaBackgroundInfo() for i = 1, spellInfoSettings.amount do info ["right_background" .. i]:Hide() end - + info.targets:SetText (Loc ["STRING_TARGETS"] .. ":") info.no_targets:Show() info.no_targets.text:Show() - + info.apoio_icone_esquerdo:Hide() info.apoio_icone_direito:Hide() info.report_direita:Show() end - + elseif (info.atributo == 3) then --> REGEN info.bg1_sec_texture:SetTexture ("") info.tipo = 2 info.targets:SetText ("Vindo de:") - + elseif (info.atributo == 4) then --> MISC info.bg1_sec_texture:SetTexture ("") info.tipo = 2 @@ -486,17 +487,17 @@ function _detalhes:FechaJanelaInfo (fromEscape) Details.FadeHandler.Fader (info, 1) end info.ativo = false --> sinaliza o addon que a janela esta agora fechada - + --_detalhes.info_jogador.detalhes = nil info.jogador = nil info.atributo = nil info.sub_atributo = nil info.instancia = nil - + info.nome:SetText ("") info.atributo_nome:SetText ("") - - gump:JI_AtualizaContainerBarras (-1) --> reseta o frame das barras + + gump:JI_AtualizaContainerBarras (-1) --> reseta o frame das barras end end @@ -526,7 +527,7 @@ function gump:HidaAllDetalheInfo() for i = 1, spellInfoSettings.amount do gump:HidaDetalheInfo (i) end - for _, barra in _ipairs (info.barras3) do + for _, barra in _ipairs (info.barras3) do barra:Hide() end _detalhes.playerDetailWindow.spell_icone:SetTexture ("") @@ -534,7 +535,7 @@ end --> seta os scripts da janela de informa��es -local mouse_down_func = function (self, button) +local mouse_down_func = function(self, button) if (button == "LeftButton") then info:StartMoving() info.isMoving = true @@ -543,7 +544,7 @@ local mouse_down_func = function (self, button) end end -local mouse_up_func = function (self, button) +local mouse_up_func = function(self, button) if (info.isMoving) then info:StopMovingOrSizing() info.isMoving = false @@ -559,7 +560,7 @@ local function seta_scripts (este_gump) este_gump.container_barras.gump:SetScript ("OnMouseDown", mouse_down_func) este_gump.container_barras.gump:SetScript ("OnMouseUp", mouse_up_func) - + este_gump.container_detalhes:SetScript ("OnMouseDown", mouse_down_func) este_gump.container_detalhes:SetScript ("OnMouseUp", mouse_up_func) @@ -567,7 +568,7 @@ local function seta_scripts (este_gump) este_gump.container_alvos.gump:SetScript ("OnMouseUp", mouse_up_func) --> bot�o fechar - este_gump.close_button:SetScript ("OnClick", function (self) + este_gump.close_button:SetScript ("OnClick", function(self) _detalhes:FechaJanelaInfo() end) end @@ -589,54 +590,54 @@ end --> cria a barra de detalhes a direita da janela de informa��es ------------------------------------------------------------------------------------------------------------------------------ -local detalhe_infobg_onenter = function (self) - Details.FadeHandler.Fader (self.overlay, "OUT") +local detalhe_infobg_onenter = function(self) + Details.FadeHandler.Fader (self.overlay, "OUT") Details.FadeHandler.Fader (self.reportar, "OUT") end -local detalhe_infobg_onleave = function (self) +local detalhe_infobg_onleave = function(self) Details.FadeHandler.Fader (self.overlay, "IN") Details.FadeHandler.Fader (self.reportar, "IN") end -local detalhes_inforeport_onenter = function (self) +local detalhes_inforeport_onenter = function(self) Details.FadeHandler.Fader (self:GetParent().overlay, "OUT") Details.FadeHandler.Fader (self, "OUT") end -local detalhes_inforeport_onleave = function (self) +local detalhes_inforeport_onleave = function(self) Details.FadeHandler.Fader (self:GetParent().overlay, "IN") Details.FadeHandler.Fader (self, "IN") end function gump:CriaDetalheInfo (index) local info = {} - + info.bg = _CreateFrame ("StatusBar", "DetailsPlayerDetailsWindow_DetalheInfoBG" .. index, _detalhes.playerDetailWindow.container_detalhes, "BackdropTemplate") info.bg:SetStatusBarTexture ("Interface\\AddOns\\Details\\images\\bar_detalhes2") info.bg:SetStatusBarColor (1, 1, 1, .84) info.bg:SetMinMaxValues (0, 100) info.bg:SetValue (100) info.bg:SetSize (320, 47) - + info.nome = info.bg:CreateFontString (nil, "OVERLAY", "GameFontNormal") info.nome2 = info.bg:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") info.dano = info.bg:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") info.dano_porcento = info.bg:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") info.dano_media = info.bg:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") info.dano_dps = info.bg:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") - + info.bg.overlay = info.bg:CreateTexture ("DetailsPlayerDetailsWindow_DetalheInfoBG_Overlay" .. index, "ARTWORK") info.bg.overlay:SetTexture ("Interface\\AddOns\\Details\\images\\overlay_detalhes") info.bg.overlay:SetWidth (341) info.bg.overlay:SetHeight (61) info.bg.overlay:SetPoint ("TOPLEFT", info.bg, "TOPLEFT", -7, 6) Details.FadeHandler.Fader (info.bg.overlay, 1) - + info.bg.reportar = gump:NewDetailsButton (info.bg, nil, nil, _detalhes.Reportar, _detalhes.playerDetailWindow, 10+index, 16, 16, "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", nil, "DetailsJanelaInfoReport1") info.bg.reportar:SetPoint ("BOTTOMLEFT", info.bg.overlay, "BOTTOMRIGHT", -33, 10) Details.FadeHandler.Fader (info.bg.reportar, 1) - + info.bg:SetScript ("OnEnter", detalhe_infobg_onenter) info.bg:SetScript ("OnLeave", detalhe_infobg_onleave) @@ -655,12 +656,12 @@ function info:SetDetailInfoConfigs (texture, color, x, y) if (texture) then info.grupos_detalhes [i].bg:SetStatusBarTexture (texture) end - + if (color) then local texture = info.grupos_detalhes [i].bg:GetStatusBarTexture() texture:SetVertexColor (unpack (color)) end - + if (x or y) then gump:SetaDetalheInfoAltura (i, x, y) end @@ -672,71 +673,71 @@ end function gump:SetaDetalheInfoAltura (index, xmod, ymod) local info = _detalhes.playerDetailWindow.grupos_detalhes [index] local janela = _detalhes.playerDetailWindow.container_detalhes - + local altura = {-10, -63, -118, -173, -228, -279} - + local x1 = 64 + (xmod or 0) local x2 = 00 + (ymod or 0) - + altura = altura [index] - + local background - + local y = -74 - ((index-1) * 79.5) - + if (index == 1) then _detalhes.playerDetailWindow.right_background1:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background1 - + elseif (index == 2) then _detalhes.playerDetailWindow.right_background2:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background2 - + elseif (index == 3) then _detalhes.playerDetailWindow.right_background3:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background3 - + elseif (index == 4) then _detalhes.playerDetailWindow.right_background4:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background4 - + elseif (index == 5) then _detalhes.playerDetailWindow.right_background5:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background5 - + elseif (index == 6) then _detalhes.playerDetailWindow.right_background6:SetPoint ("topleft", _detalhes.playerDetailWindow, "topleft", 357 + (xmod or 0), y) background = _detalhes.playerDetailWindow.right_background6 - + end - + background:SetHeight (75) - + --3 textos da esquerda e direita local y = -3 local x = 3 local right = -1 - + info.nome:SetPoint ("TOPLEFT", background, "TOPLEFT", x, y + (-2)) info.dano:SetPoint ("TOPLEFT", background, "TOPLEFT", x, y + (-24)) info.dano_media:SetPoint ("TOPLEFT", background, "TOPLEFT", x, y + (-44)) - + info.nome2:SetPoint ("TOPRIGHT", background, "TOPRIGHT", -x + right, y + (-2)) info.dano_porcento:SetPoint ("TOPRIGHT", background, "TOPRIGHT", -x + right, y + (-24)) info.dano_dps:SetPoint ("TOPRIGHT", background, "TOPRIGHT", -x + right, y + (-44)) - + info.bg:SetPoint ("TOPLEFT", background, "TOPLEFT", 1, -1) info.bg:SetHeight (background:GetHeight() - 2) info.bg:SetWidth (background:GetWidth()) - + info.bg_end:SetPoint ("LEFT", info.bg, "LEFT", info.bg:GetValue()*2.19, 0) info.bg_end:SetHeight (background:GetHeight()+2) info.bg_end:SetWidth (6) info.bg_end:SetAlpha (.75) - + info.bg.overlay:SetWidth (background:GetWidth() + 24) info.bg.overlay:SetHeight (background:GetHeight() + 16) - + info.bg:Hide() end @@ -744,7 +745,7 @@ end ------------------------------------------------------------------------------------------------------------------------------ function gump:SetaDetalheInfoTexto (index, p, arg1, arg2, arg3, arg4, arg5, arg6) local info = _detalhes.playerDetailWindow.grupos_detalhes [index] - + if (p) then if (_type (p) == "table") then info.bg:SetValue (p.p) @@ -758,46 +759,46 @@ function gump:SetaDetalheInfoTexto (index, p, arg1, arg2, arg3, arg4, arg5, arg6 info.bg_end:SetPoint ("LEFT", info.bg, "LEFT", (info.bg:GetValue() * (info.bg:GetWidth( ) / 100)) - 3, 0) -- 2.19 info.bg:Show() end - - if (info.IsPet) then + + if (info.IsPet) then info.bg.PetIcon:Hide() info.bg.PetText:Hide() info.bg.PetDps:Hide() Details.FadeHandler.Fader (info.bg.overlay, "IN") info.IsPet = false end - + if (arg1) then info.nome:SetText (arg1) end - + if (arg2) then info.dano:SetText (arg2) end - + if (arg3) then info.dano_porcento:SetText (arg3) end - + if (arg4) then info.dano_media:SetText (arg4) end - + if (arg5) then info.dano_dps:SetText (arg5) end - + if (arg6) then info.nome2:SetText (arg6) end - + info.nome:Show() info.dano:Show() info.dano_porcento:Show() info.dano_media:Show() info.dano_dps:Show() info.nome2:Show() - + end --> cria as 5 caixas de detalhes infos que ser�o usados @@ -816,9 +817,9 @@ end local function cria_textos (este_gump, SWW) este_gump.nome = este_gump:CreateFontString (nil, "OVERLAY", "QuestFont_Large") este_gump.nome:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 105, -54) - + este_gump.atributo_nome = este_gump:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") - + este_gump.targets = SWW:CreateFontString (nil, "OVERLAY", "QuestFont_Large") este_gump.targets:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 24, -273) este_gump.targets:SetText (Loc ["STRING_TARGETS"] .. ":") @@ -830,17 +831,17 @@ local function cria_textos (este_gump, SWW) este_gump.avatar:SetDrawLayer ("overlay", 3) este_gump.avatar_bg:SetDrawLayer ("overlay", 2) este_gump.avatar_nick:SetDrawLayer ("overlay", 4) - + este_gump.avatar:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 60, -10) este_gump.avatar_bg:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 60, -12) este_gump.avatar_bg:SetSize (275, 60) - + este_gump.avatar_nick:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 195, -54) - + este_gump.avatar:Hide() este_gump.avatar_bg:Hide() este_gump.avatar_nick:Hide() - + end @@ -855,39 +856,39 @@ local function cria_container_barras (este_gump, SWW) container_barras:SetHeight (150) container_barras:EnableMouse (true) container_barras:SetMovable (true) - + container_barras_window:SetWidth (300) container_barras_window:SetHeight (145) container_barras_window:SetScrollChild (container_barras) container_barras_window:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 21, -76) - container_barras_window:SetScript ("OnSizeChanged", function (self) + container_barras_window:SetScript ("OnSizeChanged", function(self) container_barras:SetSize (self:GetSize()) end) - + gump:NewScrollBar (container_barras_window, container_barras, 6, -17) container_barras_window.slider:Altura (117) container_barras_window.slider:cimaPoint (0, 1) container_barras_window.slider:baixoPoint (0, -3) container_barras_window.ultimo = 0 - + container_barras_window.gump = container_barras --container_barras_window.slider = slider_gump este_gump.container_barras = container_barras_window - + end function gump:JI_AtualizaContainerBarras (amt) local container = _detalhes.playerDetailWindow.container_barras - + if (amt >= 9 and container.ultimo ~= amt) then local tamanho = (CONST_BAR_HEIGHT + 1) * amt container.gump:SetHeight (tamanho) container.slider:Update() container.ultimo = amt - + elseif (amt < 8 and container.slider.ativo) then container.slider:Update (true) container.gump:SetHeight (140) @@ -899,13 +900,13 @@ end function gump:JI_AtualizaContainerAlvos (amt) local container = _detalhes.playerDetailWindow.container_alvos - + if (amt >= 6 and container.ultimo ~= amt) then local tamanho = (CONST_TARGET_HEIGHT + 1) * amt container.gump:SetHeight (tamanho) container.slider:Update() container.ultimo = amt - + elseif (amt <= 5 and container.slider.ativo) then container.slider:Update (true) container.gump:SetHeight (100) @@ -917,14 +918,14 @@ end --> container direita local function cria_container_detalhes (este_gump, SWW) local container_detalhes = _CreateFrame ("Frame", "Details_Info_ContainerDetalhes", SWW, "BackdropTemplate") - + container_detalhes:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -74, -76) container_detalhes:SetWidth (220) container_detalhes:SetHeight (270) container_detalhes:EnableMouse (true) container_detalhes:SetResizable (false) container_detalhes:SetMovable (true) - + este_gump.container_detalhes = container_detalhes end @@ -938,30 +939,30 @@ local function cria_container_alvos (este_gump, SWW) container_alvos:SetHeight (100) container_alvos:EnableMouse (true) container_alvos:SetMovable (true) - + container_alvos_window:SetWidth (300) container_alvos_window:SetHeight (100) container_alvos_window:SetScrollChild (container_alvos) container_alvos_window:SetPoint ("BOTTOMLEFT", este_gump, "BOTTOMLEFT", 20, 6) --56 default - container_alvos_window:SetScript ("OnSizeChanged", function (self) + container_alvos_window:SetScript ("OnSizeChanged", function(self) container_alvos:SetSize (self:GetSize()) end) - + gump:NewScrollBar (container_alvos_window, container_alvos, 7, 4) container_alvos_window.slider:Altura (88) container_alvos_window.slider:cimaPoint (0, 1) container_alvos_window.slider:baixoPoint (0, -3) - + container_alvos_window.gump = container_alvos este_gump.container_alvos = container_alvos_window end -local default_icon_change = function (jogador, classe) +local default_icon_change = function(jogador, classe) if (classe ~= "UNKNOW" and classe ~= "UNGROUPPLAYER") then info.classe_icone:SetTexCoord (_detalhes.class_coords [classe][1], _detalhes.class_coords [classe][2], _detalhes.class_coords [classe][3], _detalhes.class_coords [classe][4]) - if (jogador.enemy) then + if (jogador.enemy) then if (_detalhes.faction_against == "Horde") then info.nome:SetTextColor (1, 91/255, 91/255, 1) else @@ -972,7 +973,7 @@ local default_icon_change = function (jogador, classe) info.nome:SetTextColor (1, 1, 1, 1) end else - if (jogador.enemy) then + if (jogador.enemy) then if (_detalhes.class_coords [_detalhes.faction_against]) then info.classe_icone:SetTexCoord (_unpack (_detalhes.class_coords [_detalhes.faction_against])) if (_detalhes.faction_against == "Horde") then @@ -996,7 +997,7 @@ function _detalhes:InstallPDWSkin (skin_name, func) elseif (_detalhes.playerdetailwindow_skins [skin_name]) then return false -- ja existe end - + _detalhes.playerdetailwindow_skins [skin_name] = func return true end @@ -1022,12 +1023,12 @@ function _detalhes:ApplyPDWSkin (skin_name) --apply default first local default_skin = _detalhes.playerdetailwindow_skins ["WoWClassic"] pcall (default_skin.func) - + --than do the change if (not skin_name) then skin_name = _detalhes.player_details_window.skin end - + local skin = _detalhes.playerdetailwindow_skins [skin_name] if (skin) then local successful, errortext = pcall (skin.func) @@ -1041,11 +1042,11 @@ function _detalhes:ApplyPDWSkin (skin_name) else _detalhes:Msg ("skin not found.") end - + if (info and info:IsShown() and info.jogador and info.jogador.classe) then info.SetClassIcon (info.jogador, info.jogador.classe) end - + _detalhes:ApplyRPSkin (skin_name) end @@ -1059,7 +1060,7 @@ function _detalhes:SetPDWBarConfig (texture) if (texture) then _detalhes.player_details_window.bar_texture = texture local texture = SharedMedia:Fetch ("statusbar", texture) - + for _, bar in ipairs (window.barras1) do bar.textura:SetStatusBarTexture (texture) end @@ -1083,7 +1084,7 @@ local default_skin = function() window:SetBackdropBorderColor (1, 1, 1, 1) window.bg_icone_bg:Show() window.bg_icone:Show() - + window.leftbars1_backgound:SetPoint ("topleft", window.container_barras, "topleft", -3, 3) window.leftbars1_backgound:SetPoint ("bottomright", window.container_barras, "bottomright", 3, -3) window.leftbars2_backgound:SetPoint ("topleft", window.container_alvos, "topleft", -3, 23) @@ -1095,50 +1096,50 @@ local default_skin = function() window.right_background3:SetAlpha (1) window.right_background4:SetAlpha (1) window.right_background5:SetAlpha (1) - + window.close_button:GetNormalTexture():SetDesaturated (false) - + window.title_string:ClearAllPoints() window.title_string:SetPoint ("center", window, "center") window.title_string:SetPoint ("top", window, "top", 0, -18) window.title_string:SetParent (window) window.title_string:SetTextColor (.890, .729, .015, 1) - + window.classe_icone:SetParent (window) window.classe_icone:SetPoint ("TOPLEFT", window, "TOPLEFT", 4, 0) window.classe_icone:SetWidth (64) window.classe_icone:SetHeight (64) window.classe_icone:SetDrawLayer ("BACKGROUND", 1) window.classe_icone:SetAlpha (1) - + window.close_button:SetWidth (32) window.close_button:SetHeight (32) window.close_button:SetPoint ("TOPRIGHT", window, "TOPRIGHT", 5, -8) - + window.options_button:SetPoint ("topright", window, "topright", -26, -16) window.options_button:SetSize (16, 16) - + window.avatar:SetParent (window) - + _detalhes:SetPDWBarConfig ("Skyline") - + --bar container window.container_barras:SetSize (300, 145) window.container_barras:SetPoint ("TOPLEFT", window, "TOPLEFT", 20, -76) - + --target container window.container_alvos:SetPoint ("BOTTOMLEFT", window, "BOTTOMLEFT", 20, 6) window.container_alvos:SetSize (300, 100) - + --icons window.SetClassIcon = default_icon_change window.apoio_icone_direito:SetBlendMode ("BLEND") window.apoio_icone_esquerdo:SetBlendMode ("BLEND") - + --texts window.targets:SetPoint ("TOPLEFT", window, "TOPLEFT", 24, -273) window.nome:SetPoint ("TOPLEFT", window, "TOPLEFT", 105, -54) - + --report button window.topleft_report:SetPoint ("BOTTOMLEFT", window.container_barras, "TOPLEFT", 33, 3) @@ -1146,7 +1147,7 @@ local default_skin = function() window.no_targets:SetPoint ("BOTTOMLEFT", window, "BOTTOMLEFT", 20, 6) window.no_targets:SetSize (301, 100) window.no_targets:SetAlpha (1) - + --right panel textures window.bg2_sec_texture:SetPoint ("topleft", window.bg1_sec_texture, "topleft", 8, 0) window.bg2_sec_texture:SetPoint ("bottomright", window.bg1_sec_texture, "bottomright", -30, 0) @@ -1157,39 +1158,39 @@ local default_skin = function() window.bg3_sec_texture:SetPoint ("topleft", window.bg2_sec_texture, "topleft", 0, 0) window.bg3_sec_texture:SetPoint ("bottomright", window.bg2_sec_texture, "bottomright", 0, 0) window.bg3_sec_texture:SetTexture (0, 0, 0, 1) - + --the 5 spell details blocks for i, infoblock in ipairs (_detalhes.playerDetailWindow.grupos_detalhes) do infoblock.bg:SetSize (219, 47) --219 original end local xLocation = {-85, -136, -191, -246, -301, -356} local heightTable = {43, 48, 48, 48, 48, 48} - + for i = 1, spellInfoSettings.amount do window ["right_background" .. i]:SetPoint ("topleft", window, "topleft", 357, xLocation [i]) --357 original window ["right_background" .. i]:SetSize (220, heightTable [i]) --220 end - + --info container info:SetDetailInfoConfigs ("Interface\\AddOns\\Details\\images\\bar_detalhes2", {1, 1, 1, 0.5}, 0, 0) window.bg1_sec_texture:SetPoint ("topleft", window.bg1, "topleft", 348, -86) window.bg1_sec_texture:SetHeight (262) window.bg1_sec_texture:SetWidth (264) - + --container bars 3 local x_start = 61 local y_start = -10 local janela = window.container_detalhes - - container3_bars_pointFunc = function (barra, index) + + container3_bars_pointFunc = function(barra, index) local y = (index-1) * 17 y = y*-1 barra:SetPoint ("LEFT", janela, "LEFT", x_start, 0) barra:SetPoint ("RIGHT", janela, "RIGHT", 65, 0) barra:SetPoint ("TOP", janela, "TOP", 0, y+y_start) end - + for index, barra in ipairs (window.barras3) do local y = (index-1) * 17 y = y*-1 @@ -1210,7 +1211,7 @@ local default_skin = function() window.container_barras.cima:GetDisabledTexture():SetPoint ("center", window.container_barras.cima, "center", 0, 0) window.container_barras.cima:SetSize (29, 32) window.container_barras.cima:SetBackdrop (nil) - + window.container_barras.baixo:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up") window.container_barras.baixo:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down") window.container_barras.baixo:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Disabled") @@ -1222,9 +1223,9 @@ local default_skin = function() window.container_barras.baixo:GetDisabledTexture():SetPoint ("center", window.container_barras.baixo, "center", 0, 0) window.container_barras.baixo:SetSize (29, 32) window.container_barras.baixo:SetBackdrop (nil) - + window.container_barras.slider:SetBackdrop (nil) - + window.container_barras.slider:Altura (117) window.container_barras.slider:cimaPoint (0, 1) window.container_barras.slider:baixoPoint (0, -3) @@ -1232,7 +1233,7 @@ local default_skin = function() window.container_barras.slider.thumb:SetTexCoord (0, 1, 0, 1) window.container_barras.slider.thumb:SetSize (29, 30) window.container_barras.slider.thumb:SetVertexColor (1, 1, 1, 1) - + -- window.container_alvos.cima:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up") window.container_alvos.cima:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down") @@ -1245,7 +1246,7 @@ local default_skin = function() window.container_alvos.cima:GetDisabledTexture():SetPoint ("center", window.container_alvos.cima, "center", 0, 0) window.container_alvos.cima:SetSize (29, 32) window.container_alvos.cima:SetBackdrop (nil) - + window.container_alvos.baixo:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up") window.container_alvos.baixo:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down") window.container_alvos.baixo:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Disabled") @@ -1280,30 +1281,30 @@ local elvui_skin = function() window.bg1:SetVertTile (true) window.bg1:SetHorizTile (true) window.bg1:SetSize (PLAYER_DETAILS_WINDOW_WIDTH, PLAYER_DETAILS_WINDOW_HEIGHT) - + window:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window:SetBackdropColor (1, 1, 1, 0.3) window:SetBackdropBorderColor (0, 0, 0, 1) window.bg_icone_bg:Hide() window.bg_icone:Hide() local bgs_alpha = 0.6 - + window.leftbars1_backgound:SetPoint ("topleft", window.container_barras, "topleft", -2, 3) window.leftbars1_backgound:SetPoint ("bottomright", window.container_barras, "bottomright", 3, -3) window.leftbars2_backgound:SetPoint ("topleft", window.container_alvos, "topleft", -2, 23) window.leftbars2_backgound:SetPoint ("bottomright", window.container_alvos, "bottomright", 4, 0) - + window.leftbars1_backgound:SetAlpha (bgs_alpha) window.leftbars2_backgound:SetAlpha (bgs_alpha) - + window.right_background1:SetAlpha (bgs_alpha) window.right_background2:SetAlpha (bgs_alpha) window.right_background3:SetAlpha (bgs_alpha) window.right_background4:SetAlpha (bgs_alpha) window.right_background5:SetAlpha (bgs_alpha) - + window.close_button:GetNormalTexture():SetDesaturated (true) - + local titlebar = window.extra_frames ["ElvUITitleBar"] if (not titlebar) then titlebar = CreateFrame ("frame", nil, window, "BackdropTemplate") @@ -1314,7 +1315,7 @@ local elvui_skin = function() titlebar:SetBackdropColor (.5, .5, .5, 1) titlebar:SetBackdropBorderColor (0, 0, 0, 1) window.extra_frames ["ElvUITitleBar"] = titlebar - + local name_bg_texture = window:CreateTexture (nil, "background") name_bg_texture:SetTexture ([[Interface\PetBattles\_PetBattleHorizTile]], true) name_bg_texture:SetHorizTile (true) @@ -1329,78 +1330,78 @@ local elvui_skin = function() titlebar:Show() window.extra_frames ["ElvUINameTexture"]:Show() end - + window.title_string:ClearAllPoints() window.title_string:SetPoint ("center", window, "center") window.title_string:SetPoint ("top", window, "top", 0, -7) window.title_string:SetParent (titlebar) window.title_string:SetTextColor (.8, .8, .8, 1) - + window.classe_icone:SetParent (titlebar) window.classe_icone:SetDrawLayer ("overlay") window.classe_icone:SetPoint ("TOPLEFT", window, "TOPLEFT", 2, -25) window.classe_icone:SetWidth (49) window.classe_icone:SetHeight (49) window.classe_icone:SetAlpha (1) - + window.close_button:SetWidth (20) window.close_button:SetHeight (20) window.close_button:SetPoint ("TOPRIGHT", window, "TOPRIGHT", 0, -3) - + window.options_button:SetPoint ("topright", window, "topright", -17, -7) window.options_button:SetSize (12, 12) - + window.avatar:SetParent (titlebar) - + --bar container window.container_barras:SetPoint (unpack (containerSettings.spells.point)) window.container_barras:SetSize (containerSettings.spells.width, containerSettings.spells.height) - + --target container window.container_alvos:SetPoint (unpack (containerSettings.targets.point)) window.container_alvos:SetSize (containerSettings.targets.width, containerSettings.targets.height) - + --texts window.targets:SetPoint ("topleft", window.container_alvos, "topleft", 3, 18) window.nome:SetPoint ("TOPLEFT", window, "TOPLEFT", 105, -48) - + --report button window.topleft_report:SetPoint ("BOTTOMLEFT", window.container_barras, "TOPLEFT", 43, 2) - + --icons window.apoio_icone_direito:SetBlendMode ("ADD") window.apoio_icone_esquerdo:SetBlendMode ("ADD") - + --no targets texture window.no_targets:SetPoint ("BOTTOMLEFT", window, "BOTTOMLEFT", 3, 6) window.no_targets:SetSize (418, 150) window.no_targets:SetAlpha (0.4) - + --right panel textures window.bg2_sec_texture:SetPoint ("topleft", window.bg1_sec_texture, "topleft", 7, 0) window.bg2_sec_texture:SetPoint ("bottomright", window.bg1_sec_texture, "bottomright", -30, 0) window.bg2_sec_texture:SetTexture ([[Interface\Glues\CREDITS\Warlords\Shadowmoon_Color_jlo3]]) window.bg2_sec_texture:SetDesaturated (true) window.bg2_sec_texture:SetAlpha (0) - + window.bg3_sec_texture:SetPoint ("topleft", window.bg2_sec_texture, "topleft", 0, 0) window.bg3_sec_texture:SetPoint ("bottomright", window.bg2_sec_texture, "bottomright", 0, 0) - window.bg3_sec_texture:SetTexture (0, 0, 0, 0.3) - + window.bg3_sec_texture:SetTexture (0, 0, 0, 0.3) + --the 5 spell details blocks - not working for i, infoblock in ipairs (_detalhes.playerDetailWindow.grupos_detalhes) do infoblock.bg:SetSize (330, 47) end local xLocation = {-85, -136, -191, -246, -301} local heightTable = {50, 50, 50, 50, 50, 48} - + for i = 1, spellInfoSettings.amount do window ["right_background" .. i]:SetPoint ("topleft", window, "topleft", 351, xLocation [i]) window ["right_background" .. i]:SetSize (spellInfoSettings.width, heightTable [i]) - + end - - --seta configs dos 5 blocos da direita + + --seta configs dos 5 blocos da direita info:SetDetailInfoConfigs ("Interface\\AddOns\\Details\\images\\bar_serenity", {1, 1, 1, 0.35}, -6 + 100, 0) window.bg1_sec_texture:SetPoint ("topleft", window.bg1, "topleft", 446, -86) @@ -1412,19 +1413,19 @@ local elvui_skin = function() local y_start = -10 local janela = window.container_detalhes - - container3_bars_pointFunc = function (barra, index) + + container3_bars_pointFunc = function(barra, index) local y = (index-1) * 17 y = y*-1 - + barra:SetPoint ("LEFT", info.bg1_sec_texture, "LEFT", 0, 0) barra:SetPoint ("RIGHT", info.bg1_sec_texture, "RIGHT", 0, 0) - + --barra:SetPoint ("LEFT", janela, "LEFT", x_start, 0) --barra:SetPoint ("RIGHT", janela, "RIGHT", 62, 0) barra:SetPoint ("TOP", janela, "TOP", 0, y+y_start) end - + for index, barra in ipairs (window.barras3) do local y = (index-1) * 17 y = y*-1 @@ -1432,26 +1433,26 @@ local elvui_skin = function() barra:SetPoint ("RIGHT", janela, "RIGHT", 62, 0) barra:SetPoint ("TOP", janela, "TOP", 0, y+y_start) end - + --scrollbar do --get textures local normalTexture = window.container_barras.cima:GetNormalTexture() local pushedTexture = window.container_barras.cima:GetPushedTexture() local disabledTexture = window.container_barras.cima:GetDisabledTexture() - + --set the new textures normalTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Up]]) pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Down]]) disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Disabled]]) - + normalTexture:SetPoint ("topleft", window.container_barras.cima, "topleft", 1, 0) normalTexture:SetPoint ("bottomright", window.container_barras.cima, "bottomright", 1, 0) pushedTexture:SetPoint ("topleft", window.container_barras.cima, "topleft", 1, 0) pushedTexture:SetPoint ("bottomright", window.container_barras.cima, "bottomright", 1, 0) disabledTexture:SetPoint ("topleft", window.container_barras.cima, "topleft", 1, 0) disabledTexture:SetPoint ("bottomright", window.container_barras.cima, "bottomright", 1, 0) - + disabledTexture:SetAlpha (0.5) window.container_barras.cima:SetSize (16, 16) @@ -1459,29 +1460,29 @@ local elvui_skin = function() window.container_barras.cima:SetBackdropColor (0, 0, 0, 0.3) window.container_barras.cima:SetBackdropBorderColor (0, 0, 0, 1) end - + do --get textures local normalTexture = window.container_barras.baixo:GetNormalTexture() local pushedTexture = window.container_barras.baixo:GetPushedTexture() local disabledTexture = window.container_barras.baixo:GetDisabledTexture() - + --set the new textures normalTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Up]]) pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Down]]) disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Disabled]]) - + normalTexture:SetPoint ("topleft", window.container_barras.baixo, "topleft", 1, -4) normalTexture:SetPoint ("bottomright", window.container_barras.baixo, "bottomright", 1, -4) - + pushedTexture:SetPoint ("topleft", window.container_barras.baixo, "topleft", 1, -4) pushedTexture:SetPoint ("bottomright", window.container_barras.baixo, "bottomright", 1, -4) disabledTexture:SetPoint ("topleft", window.container_barras.baixo, "topleft", 1, -4) disabledTexture:SetPoint ("bottomright", window.container_barras.baixo, "bottomright", 1, -4) - + disabledTexture:SetAlpha (0.5) - + window.container_barras.baixo:SetSize (16, 16) window.container_barras.baixo:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_barras.baixo:SetBackdropColor (0, 0, 0, 0.3) @@ -1491,39 +1492,39 @@ local elvui_skin = function() window.container_barras.slider:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_barras.slider:SetBackdropColor (0, 0, 0, 0.35) window.container_barras.slider:SetBackdropBorderColor (0, 0, 0, 1) - + window.container_barras.slider:Altura (containerSettings.spells.scrollHeight) window.container_barras.slider:cimaPoint (0, 13) window.container_barras.slider:baixoPoint (0, -13) - + window.container_barras.slider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]]) window.container_barras.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512) window.container_barras.slider.thumb:SetSize (12, 12) window.container_barras.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95) - + -- - - + + do local f = window.container_alvos - + --get textures local normalTexture = f.cima:GetNormalTexture() local pushedTexture = f.cima:GetPushedTexture() local disabledTexture = f.cima:GetDisabledTexture() - + --set the new textures normalTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Up]]) pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Down]]) disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Disabled]]) - + normalTexture:SetPoint ("topleft", f.cima, "topleft", 1, 0) normalTexture:SetPoint ("bottomright", f.cima, "bottomright", 1, 0) pushedTexture:SetPoint ("topleft", f.cima, "topleft", 1, 0) pushedTexture:SetPoint ("bottomright", f.cima, "bottomright", 1, 0) disabledTexture:SetPoint ("topleft", f.cima, "topleft", 1, 0) disabledTexture:SetPoint ("bottomright", f.cima, "bottomright", 1, 0) - + disabledTexture:SetAlpha (0.5) f.cima:SetSize (16, 16) @@ -1531,31 +1532,31 @@ local elvui_skin = function() f.cima:SetBackdropColor (0, 0, 0, 0.3) f.cima:SetBackdropBorderColor (0, 0, 0, 1) end - + do local f = window.container_alvos - + --get textures local normalTexture = f.baixo:GetNormalTexture() local pushedTexture = f.baixo:GetPushedTexture() local disabledTexture = f.baixo:GetDisabledTexture() - + --set the new textures normalTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Up]]) pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Down]]) disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Disabled]]) - + normalTexture:SetPoint ("topleft", f.baixo, "topleft", 1, -4) normalTexture:SetPoint ("bottomright", f.baixo, "bottomright", 1, -4) - + pushedTexture:SetPoint ("topleft", f.baixo, "topleft", 1, -4) pushedTexture:SetPoint ("bottomright", f.baixo, "bottomright", 1, -4) disabledTexture:SetPoint ("topleft", f.baixo, "topleft", 1, -4) disabledTexture:SetPoint ("bottomright", f.baixo, "bottomright", 1, -4) - + disabledTexture:SetAlpha (0.5) - + f.baixo:SetSize (16, 16) f.baixo:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) f.baixo:SetBackdropColor (0, 0, 0, 0.3) @@ -1565,22 +1566,22 @@ local elvui_skin = function() window.container_alvos.slider:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_alvos.slider:SetBackdropColor (0, 0, 0, 0.35) window.container_alvos.slider:SetBackdropBorderColor (0, 0, 0, 1) - + window.container_alvos.slider:Altura (137) window.container_alvos.slider:cimaPoint (0, 13) window.container_alvos.slider:baixoPoint (0, -13) - + window.container_alvos.slider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]]) window.container_alvos.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512) window.container_alvos.slider.thumb:SetSize (12, 12) window.container_alvos.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95) - + --class icon - window.SetClassIcon = function (player, class) + window.SetClassIcon = function(player, class) if (player.spellicon) then window.classe_icone:SetTexture(player.spellicon) window.classe_icone:SetTexCoord(.1, .9, .1, .9) - + elseif (player.spec) then window.classe_icone:SetTexture ([[Interface\AddOns\Details\images\spec_icons_normal_alpha]]) window.classe_icone:SetTexCoord (_unpack (_detalhes.class_specs_coords [player.spec])) @@ -1592,7 +1593,7 @@ local elvui_skin = function() local l, r, t, b = unpack (coords) info.classe_icone:SetTexCoord (l+0.01953125, r-0.01953125, t+0.01953125, b-0.01953125) else - + local c = _detalhes.class_coords ["MONSTER"] info.classe_icone:SetTexture ("Interface\\AddOns\\Details\\images\\classes") info.classe_icone:SetTexCoord (c[1], c[2], c[3], c[4]) @@ -1608,12 +1609,12 @@ function gump:CriaJanelaInfo() --> cria a janela em si local este_gump = info este_gump.Loaded = true - + este_gump:SetFrameStrata ("HIGH") este_gump:SetToplevel (true) - + este_gump.extra_frames = {} - + --> fehcar com o esc tinsert (UISpecialFrames, este_gump:GetName()) @@ -1622,7 +1623,7 @@ function gump:CriaJanelaInfo() este_gump:SetWidth (PLAYER_DETAILS_WINDOW_WIDTH) este_gump:SetHeight (PLAYER_DETAILS_WINDOW_HEIGHT) - + este_gump:EnableMouse (true) este_gump:SetResizable (false) este_gump:SetMovable (true) @@ -1631,14 +1632,14 @@ function gump:CriaJanelaInfo() local SWW = este_gump.SummaryWindowWidgets SWW:SetAllPoints() tinsert (SummaryWidgets, SWW) - + local scaleBar = Details.gump:CreateScaleBar (este_gump, Details.player_details_window) este_gump:SetScale (Details.player_details_window.scale) - + --classic: --este_gump:SetWidth (590) --este_gump:SetHeight (354) - + --> joga a janela para a global _detalhes.playerDetailWindow = este_gump @@ -1654,7 +1655,7 @@ function gump:CriaJanelaInfo() este_gump.classe_iconePlus:SetWidth (64) este_gump.classe_iconePlus:SetHeight (64) este_gump.classe_iconePlus:SetDrawLayer ("BACKGROUND", 2) - + --> top left este_gump.bg1 = este_gump:CreateTexture ("DetailsPSWBackground", "BORDER") este_gump.bg1:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 0, 0) @@ -1666,21 +1667,21 @@ function gump:CriaJanelaInfo() este_gump.close_button:SetHeight (32) este_gump.close_button:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", 5, -8) este_gump.close_button:SetText ("X") - este_gump.close_button:SetFrameLevel (este_gump:GetFrameLevel()+5) - - + este_gump.close_button:SetFrameLevel (este_gump:GetFrameLevel()+5) + + --> �cone da magia selecionada para mais detalhes este_gump.bg_icone_bg = este_gump:CreateTexture (nil, "ARTWORK") este_gump.bg_icone_bg:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -15, -12) este_gump.bg_icone_bg:SetTexture ("Interface\\AddOns\\Details\\images\\icone_bg_fundo") este_gump.bg_icone_bg:SetDrawLayer ("ARTWORK", -1) este_gump.bg_icone_bg:Show() - + este_gump.bg_icone = este_gump:CreateTexture (nil, "OVERLAY") este_gump.bg_icone:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -15, -12) este_gump.bg_icone:SetTexture ("Interface\\AddOns\\Details\\images\\icone_bg") este_gump.bg_icone:Show() - + --> bot�o de op��es local open_options = function() _detalhes:OpenOptionsWindow (info.instancia, false, 6) @@ -1691,15 +1692,15 @@ function gump:CriaJanelaInfo() este_gump.options_button:SetAlpha (0.5) este_gump.options_button.button:GetNormalTexture():SetDesaturated (true) este_gump.options_button.tooltip = "Select Skin" - + --> desativando o bot�o de config este_gump.options_button:Hide() - + --> titulo gump:NewLabel (este_gump, este_gump, nil, "title_string", Loc ["STRING_PLAYER_DETAILS"], "GameFontHighlightLeft", 12, {227/255, 186/255, 4/255}) este_gump.title_string:SetPoint ("center", este_gump, "center") este_gump.title_string:SetPoint ("top", este_gump, "top", 0, -18) - + este_gump.spell_icone = este_gump:CreateTexture (nil, "ARTWORK") este_gump.spell_icone:SetPoint ("BOTTOMRIGHT", este_gump.bg_icone, "BOTTOMRIGHT", -19, 2) este_gump.spell_icone:SetWidth (35) @@ -1707,26 +1708,26 @@ function gump:CriaJanelaInfo() este_gump.spell_icone:SetDrawLayer ("ARTWORK", 0) este_gump.spell_icone:Show() este_gump.spell_icone:SetTexCoord (4/64, 60/64, 4/64, 60/64) - + --> coisinhas do lado do icone este_gump.apoio_icone_esquerdo = este_gump:CreateTexture (nil, "ARTWORK") este_gump.apoio_icone_direito = este_gump:CreateTexture (nil, "ARTWORK") este_gump.apoio_icone_esquerdo:SetTexture ("Interface\\PaperDollInfoFrame\\PaperDollSidebarTabs") este_gump.apoio_icone_direito:SetTexture ("Interface\\PaperDollInfoFrame\\PaperDollSidebarTabs") - + local apoio_altura = 13/256 este_gump.apoio_icone_esquerdo:SetTexCoord (0, 1, 0, apoio_altura) este_gump.apoio_icone_direito:SetTexCoord (0, 1, apoio_altura+(1/256), apoio_altura+apoio_altura) - + este_gump.apoio_icone_esquerdo:SetPoint ("bottomright", este_gump.bg_icone, "bottomleft", 42, 0) este_gump.apoio_icone_direito:SetPoint ("bottomleft", este_gump.bg_icone, "bottomright", -17, 0) - + este_gump.apoio_icone_esquerdo:SetWidth (64) este_gump.apoio_icone_esquerdo:SetHeight (13) este_gump.apoio_icone_direito:SetWidth (64) este_gump.apoio_icone_direito:SetHeight (13) - - + + este_gump.topright_text1 = este_gump:CreateFontString (nil, "overlay", "GameFontNormal") este_gump.topright_text1:SetPoint ("bottomright", este_gump, "topright", -18 - (94 * (1-1)), -36) este_gump.topright_text1:SetJustifyH ("right") @@ -1734,9 +1735,9 @@ function gump:CriaJanelaInfo() este_gump.topright_text2 = este_gump:CreateFontString (nil, "overlay", "GameFontNormal") este_gump.topright_text2:SetPoint ("bottomright", este_gump, "topright", -18 - (94 * (1-1)), -48) - este_gump.topright_text2:SetJustifyH ("right") + este_gump.topright_text2:SetJustifyH ("right") _detalhes.gump:SetFontSize (este_gump.topright_text2, 10) - + function este_gump:SetTopRightTexts (text1, text2, size, color, font) if (text1) then este_gump.topright_text1:SetText (text1) @@ -1748,7 +1749,7 @@ function gump:CriaJanelaInfo() else este_gump.topright_text2:SetText ("") end - + if (size and type (size) == "number") then _detalhes.gump:SetFontSize (este_gump.topright_text1, size) _detalhes.gump:SetFontSize (este_gump.topright_text2, size) @@ -1762,7 +1763,7 @@ function gump:CriaJanelaInfo() _detalhes.gump:SetFontFace (este_gump.topright_text2, font) end end - + ------------------------------------------------- local alpha_bgs = 1 @@ -1770,7 +1771,7 @@ function gump:CriaJanelaInfo() -- backgrounds das 5 boxes do lado direito local right_background_X = 457 local right_background_Y = {-85, -136, -191, -246, -301} - + for i = 1, spellInfoSettings.amount do local right_background1 = CreateFrame ("frame", "DetailsPlayerDetailsWindow_right_background" .. i, SWW, "BackdropTemplate") right_background1:EnableMouse (false) @@ -1786,7 +1787,7 @@ function gump:CriaJanelaInfo() este_gump.bg1_sec_texture:SetPoint ("topleft", este_gump.bg1, "topleft", 450, -86) este_gump.bg1_sec_texture:SetHeight (462) este_gump.bg1_sec_texture:SetWidth (264) - + este_gump.bg2_sec_texture = SWW:CreateTexture ("DetailsPlayerDetailsWindow_BG2_SEC_Texture", "BORDER") este_gump.bg2_sec_texture:SetDrawLayer ("BORDER", 3) este_gump.bg2_sec_texture:SetPoint ("topleft", este_gump.bg1_sec_texture, "topleft", 8, 0) @@ -1802,7 +1803,7 @@ function gump:CriaJanelaInfo() este_gump.bg3_sec_texture:SetPoint ("bottomright", este_gump.bg2_sec_texture, "bottomright", 0, 0) --este_gump.bg3_sec_texture:SetColorTexture (0, 0, 0, 1) este_gump.bg3_sec_texture:Hide() - + este_gump.no_targets = SWW:CreateTexture ("DetailsPlayerDetailsWindow_no_targets", "overlay") este_gump.no_targets:SetPoint ("BOTTOMLEFT", este_gump, "BOTTOMLEFT", 20, 6) este_gump.no_targets:SetSize (301, 100) @@ -1817,14 +1818,14 @@ function gump:CriaJanelaInfo() este_gump.no_targets:Hide() --> cria os textos da janela - cria_textos (este_gump, SWW) - + cria_textos (este_gump, SWW) + --> cria o frama que vai abrigar as barras das habilidades cria_container_barras (este_gump, SWW) - + --> cria o container que vai abrirgar as 5 barras de detalhes cria_container_detalhes (este_gump, SWW) - + --> cria o container onde vai abrigar os alvos do jogador cria_container_alvos (este_gump, SWW) @@ -1833,7 +1834,7 @@ function gump:CriaJanelaInfo() -- leftbars1_backgound:SetSize (303, 149) -- leftbars1_backgound:SetAlpha (alpha_bgs) -- este_gump.leftbars1_backgound = leftbars1_backgound - + local leftbars1_backgound = CreateFrame ("frame", "DetailsPlayerDetailsWindow_Left_SpellsBackground", SWW, "BackdropTemplate") leftbars1_backgound:EnableMouse (false) leftbars1_backgound:SetSize (303, 149) @@ -1841,7 +1842,7 @@ function gump:CriaJanelaInfo() leftbars1_backgound:SetFrameLevel (SWW:GetFrameLevel()) Details.gump:ApplyStandardBackdrop (leftbars1_backgound) este_gump.leftbars1_backgound = leftbars1_backgound - + local leftbars2_backgound = CreateFrame ("frame", "DetailsPlayerDetailsWindow_Left_TargetBackground", SWW, "BackdropTemplate") leftbars2_backgound:EnableMouse (false) leftbars2_backgound:SetSize (303, 122) @@ -1849,7 +1850,7 @@ function gump:CriaJanelaInfo() leftbars2_backgound:SetFrameLevel (SWW:GetFrameLevel()) Details.gump:ApplyStandardBackdrop (leftbars2_backgound) este_gump.leftbars2_backgound = leftbars2_backgound - + leftbars1_backgound:SetPoint ("topleft", este_gump.container_barras, "topleft", -3, 3) leftbars1_backgound:SetPoint ("bottomright", este_gump.container_barras, "bottomright", 3, -3) leftbars2_backgound:SetPoint ("topleft", este_gump.container_alvos, "topleft", -3, 23) @@ -1857,18 +1858,18 @@ function gump:CriaJanelaInfo() --> cria as 5 barras de detalhes a direita da janela cria_barras_detalhes() - + --> seta os scripts dos frames da janela seta_scripts (este_gump) --> vai armazenar os objetos das barras de habilidade - este_gump.barras1 = {} - + este_gump.barras1 = {} + --> vai armazenar os objetos das barras de alvos - este_gump.barras2 = {} - + este_gump.barras2 = {} + --> vai armazenar os objetos das barras da caixa especial da direita - este_gump.barras3 = {} + este_gump.barras3 = {} este_gump.SetClassIcon = default_icon_change @@ -1879,7 +1880,7 @@ function gump:CriaJanelaInfo() este_gump.report_esquerda:SetPoint ("BOTTOMLEFT", este_gump.container_barras, "TOPLEFT", 33, 3) este_gump.report_esquerda:SetFrameLevel (este_gump:GetFrameLevel()+2) este_gump.topleft_report = este_gump.report_esquerda - + --> bot�o de reportar da caixa dos alvos este_gump.report_alvos = gump:NewDetailsButton (SWW, este_gump, nil, _detalhes.Reportar, este_gump, 3, 16, 16, "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", nil, "DetailsJanelaInfoReport3") @@ -1889,9 +1890,9 @@ function gump:CriaJanelaInfo() --> bot�o de reportar da caixa da direita, onde est�o os 5 quadrados este_gump.report_direita = gump:NewDetailsButton (SWW, este_gump, nil, _detalhes.Reportar, este_gump, 2, 16, 16, "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", nil, "DetailsJanelaInfoReport4") - este_gump.report_direita:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -10, -70) + este_gump.report_direita:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -10, -70) este_gump.report_direita:Show() - + --> statusbar local statusBar = CreateFrame ("frame", nil, este_gump, "BackdropTemplate") statusBar:SetPoint ("bottomleft", este_gump, "bottomleft") @@ -1899,10 +1900,10 @@ function gump:CriaJanelaInfo() statusBar:SetHeight (PLAYER_DETAILS_STATUSBAR_HEIGHT) DetailsFramework:ApplyStandardBackdrop (statusBar) statusBar:SetAlpha (PLAYER_DETAILS_STATUSBAR_ALPHA) - + statusBar.Text = DetailsFramework:CreateLabel (statusBar) statusBar.Text:SetPoint ("left", 2, 0) - + function este_gump:SetStatusbarText (text, fontSize, fontColor) if (not text) then este_gump:SetStatusbarText ("Details! Damage Meter | Use '/details stats' for statistics", 10, "gray") @@ -1912,37 +1913,37 @@ function gump:CriaJanelaInfo() statusBar.Text.fontsize = fontSize statusBar.Text.fontcolor = fontColor end - + --set default text este_gump:SetStatusbarText() --> apply default skin _detalhes:ApplyPDWSkin() - + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> tabs local red = "FFFFAAAA" local green = "FFAAFFAA" - + --> tabs: --> tab default - + local iconTableSummary = { texture = [[Interface\AddOns\Details\images\icons]], coords = {238/512, 255/512, 0, 18/512}, width = 16, height = 16, } - + _detalhes:CreatePlayerDetailsTab ("Summary", Loc ["STRING_SPELLS"], --[1] tab name [2] localized name - function (tabOBject, playerObject) --[3] condition - if (playerObject) then - return true - else - return false + function(tabOBject, playerObject) --[3] condition + if (playerObject) then + return true + else + return false end - end, + end, nil, --[4] fill function function() --[5] onclick for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do @@ -1952,33 +1953,33 @@ function gump:CriaJanelaInfo() nil, --[6] oncreate iconTableSummary --[7] icon table ) - + --> search key: ~avoidance --> begining of avoidance tab - - local avoidance_create = function (tab, frame) - + + local avoidance_create = function(tab, frame) + --> Percent Desc local percent_desc = frame:CreateFontString (nil, "artwork", "GameFontNormal") percent_desc:SetText ("Percent values are comparisons with the previous try.") percent_desc:SetPoint ("bottomleft", frame, "bottomleft", 13, 13 + PLAYER_DETAILS_STATUSBAR_HEIGHT) percent_desc:SetTextColor (.5, .5, .5, 1) - + --> SUMMARY - + local summaryBox = CreateFrame ("frame", nil, frame, "BackdropTemplate") _detalhes.gump:ApplyStandardBackdrop (summaryBox) summaryBox:SetPoint ("topleft", frame, "topleft", 10, -15) summaryBox:SetSize (200, 160) - + local y = -5 local padding = 16 local summary_text = summaryBox:CreateFontString (nil, "artwork", "GameFontNormal") summary_text:SetText ("Summary") summary_text :SetPoint ("topleft", summaryBox, "topleft", 5, y) - + y = y - padding - + --total damage received local damagereceived = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") damagereceived:SetPoint ("topleft", summaryBox, "topleft", 15, y) @@ -1989,49 +1990,49 @@ function gump:CriaJanelaInfo() damagereceived_amt:SetPoint ("left", damagereceived, "right", 2, 0) damagereceived_amt:SetText ("0") tab.damagereceived = damagereceived_amt - + y = y - padding - + --per second local damagepersecond = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") damagepersecond:SetPoint ("topleft", summaryBox, "topleft", 20, y) damagepersecond:SetText ("Per Second:") --> localize-me - + local damagepersecond_amt = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") damagepersecond_amt:SetPoint ("left", damagepersecond, "right", 2, 0) damagepersecond_amt:SetText ("0") tab.damagepersecond = damagepersecond_amt - - y = y - padding - + + y = y - padding + --total absorbs local absorbstotal = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") absorbstotal:SetPoint ("topleft", summaryBox, "topleft", 15, y) absorbstotal:SetText ("Total Absorbs:") --> localize-me absorbstotal:SetTextColor (.8, .8, .8, 1) - + local absorbstotal_amt = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") absorbstotal_amt:SetPoint ("left", absorbstotal, "right", 2, 0) absorbstotal_amt:SetText ("0") tab.absorbstotal = absorbstotal_amt - + y = y - padding - + --per second local absorbstotalpersecond = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") absorbstotalpersecond:SetPoint ("topleft", summaryBox, "topleft", 20, y) absorbstotalpersecond:SetText ("Per Second:") --> localize-me - + local absorbstotalpersecond_amt = summaryBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") absorbstotalpersecond_amt:SetPoint ("left", absorbstotalpersecond, "right", 2, 0) absorbstotalpersecond_amt:SetText ("0") tab.absorbstotalpersecond = absorbstotalpersecond_amt - + --> MELEE - + y = -5 - + local meleeBox = CreateFrame ("frame", nil, frame, "BackdropTemplate") _detalhes.gump:ApplyStandardBackdrop (meleeBox) meleeBox:SetPoint ("topleft", summaryBox, "bottomleft", 0, -5) @@ -2040,9 +2041,9 @@ function gump:CriaJanelaInfo() local melee_text = meleeBox:CreateFontString (nil, "artwork", "GameFontNormal") melee_text:SetText ("Melee") melee_text :SetPoint ("topleft", meleeBox, "topleft", 5, y) - + y = y - padding - + --dodge local dodge = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") dodge:SetPoint ("topleft", meleeBox, "topleft", 15, y) @@ -2052,20 +2053,20 @@ function gump:CriaJanelaInfo() dodge_amt:SetPoint ("left", dodge, "right", 2, 0) dodge_amt:SetText ("0") tab.dodge = dodge_amt - + y = y - padding - + local dodgepersecond = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") dodgepersecond:SetPoint ("topleft", meleeBox, "topleft", 20, y) dodgepersecond:SetText ("Per Second:") --> localize-me - + local dodgepersecond_amt = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") dodgepersecond_amt:SetPoint ("left", dodgepersecond, "right", 2, 0) dodgepersecond_amt:SetText ("0") tab.dodgepersecond = dodgepersecond_amt - + y = y - padding - + -- parry local parry = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") parry:SetPoint ("topleft", meleeBox, "topleft", 15, y) @@ -2075,9 +2076,9 @@ function gump:CriaJanelaInfo() parry_amt:SetPoint ("left", parry, "right", 2, 0) parry_amt:SetText ("0") tab.parry = parry_amt - + y = y - padding - + local parrypersecond = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") parrypersecond:SetPoint ("topleft", meleeBox, "topleft", 20, y) parrypersecond:SetText ("Per Second:") --> localize-me @@ -2087,7 +2088,7 @@ function gump:CriaJanelaInfo() tab.parrypersecond = parrypersecond_amt y = y - padding - + -- block local block = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") block:SetPoint ("topleft", meleeBox, "topleft", 15, y) @@ -2097,9 +2098,9 @@ function gump:CriaJanelaInfo() block_amt:SetPoint ("left", block, "right", 2, 0) block_amt:SetText ("0") tab.block = block_amt - + y = y - padding - + local blockpersecond = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") blockpersecond:SetPoint ("topleft", meleeBox, "topleft", 20, y) blockpersecond:SetText ("Per Second:") --> localize-me @@ -2107,9 +2108,9 @@ function gump:CriaJanelaInfo() blockpersecond_amt:SetPoint ("left", blockpersecond, "right", 2, 0) blockpersecond_amt:SetText ("0") tab.blockpersecond = blockpersecond_amt - + y = y - padding - + local blockeddamage = meleeBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") blockeddamage:SetPoint ("topleft", meleeBox, "topleft", 20, y) blockeddamage:SetText ("Damage Blocked:") --> localize-me @@ -2117,23 +2118,23 @@ function gump:CriaJanelaInfo() blockeddamage_amt:SetPoint ("left", blockeddamage, "right", 2, 0) blockeddamage_amt:SetText ("0") tab.blockeddamage_amt = blockeddamage_amt - - + + --> ABSORBS - + y = -5 - + local absorbsBox = CreateFrame ("frame", nil, frame, "BackdropTemplate") _detalhes.gump:ApplyStandardBackdrop (absorbsBox) absorbsBox:SetPoint ("topleft", summaryBox, "topright", 10, 0) absorbsBox:SetSize (200, 160) - + local absorb_text = absorbsBox:CreateFontString (nil, "artwork", "GameFontNormal") absorb_text:SetText ("Absorb") absorb_text :SetPoint ("topleft", absorbsBox, "topleft", 5, y) - + y = y - padding - + --full absorbs local fullsbsorbed = absorbsBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") fullsbsorbed:SetPoint ("topleft", absorbsBox, "topleft", 20, y) @@ -2143,9 +2144,9 @@ function gump:CriaJanelaInfo() fullsbsorbed_amt:SetPoint ("left", fullsbsorbed, "right", 2, 0) fullsbsorbed_amt:SetText ("0") tab.fullsbsorbed = fullsbsorbed_amt - + y = y - padding - + --partially absorbs local partiallyabsorbed = absorbsBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") partiallyabsorbed:SetPoint ("topleft", absorbsBox, "topleft", 20, y) @@ -2155,9 +2156,9 @@ function gump:CriaJanelaInfo() partiallyabsorbed_amt:SetPoint ("left", partiallyabsorbed, "right", 2, 0) partiallyabsorbed_amt:SetText ("0") tab.partiallyabsorbed = partiallyabsorbed_amt - + y = y - padding - + --partially absorbs per second local partiallyabsorbedpersecond = absorbsBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") partiallyabsorbedpersecond:SetPoint ("topleft", absorbsBox, "topleft", 25, y) @@ -2166,9 +2167,9 @@ function gump:CriaJanelaInfo() partiallyabsorbedpersecond_amt:SetPoint ("left", partiallyabsorbedpersecond, "right", 2, 0) partiallyabsorbedpersecond_amt:SetText ("0") tab.partiallyabsorbedpersecond = partiallyabsorbedpersecond_amt - + y = y - padding - + --no absorbs local noabsorbs = absorbsBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") noabsorbs:SetPoint ("topleft", absorbsBox, "topleft", 20, y) @@ -2178,12 +2179,12 @@ function gump:CriaJanelaInfo() noabsorbs_amt:SetPoint ("left", noabsorbs, "right", 2, 0) noabsorbs_amt:SetText ("0") tab.noabsorbs = noabsorbs_amt - - + + --> HEALING - + y = -5 - + local healingBox = CreateFrame ("frame", nil, frame,"BackdropTemplate") _detalhes.gump:ApplyStandardBackdrop (healingBox) healingBox:SetPoint ("topleft", absorbsBox, "bottomleft", 0, -5) @@ -2192,9 +2193,9 @@ function gump:CriaJanelaInfo() local healing_text = healingBox:CreateFontString (nil, "artwork", "GameFontNormal") healing_text:SetText ("Healing") healing_text :SetPoint ("topleft", healingBox, "topleft", 5, y) - + y = y - padding - + --self healing local selfhealing = healingBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") selfhealing:SetPoint ("topleft", healingBox, "topleft", 20, y) @@ -2206,7 +2207,7 @@ function gump:CriaJanelaInfo() tab.selfhealing = selfhealing_amt y = y - padding - + --self healing per second local selfhealingpersecond = healingBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") selfhealingpersecond:SetPoint ("topleft", healingBox, "topleft", 25, y) @@ -2215,10 +2216,10 @@ function gump:CriaJanelaInfo() selfhealingpersecond_amt:SetPoint ("left", selfhealingpersecond, "right", 2, 0) selfhealingpersecond_amt:SetText ("0") tab.selfhealingpersecond = selfhealingpersecond_amt - + y = y - padding - - for i = 1, 5 do + + for i = 1, 5 do local healer = healingBox:CreateFontString (nil, "artwork", "GameFontHighlightSmall") healer:SetPoint ("topleft", healingBox, "topleft", 20, y + ((i-1)*15)*-1) healer:SetText ("healer name:") --> localize-me @@ -2228,24 +2229,24 @@ function gump:CriaJanelaInfo() healer_amt:SetText ("0") tab ["healer" .. i] = {healer, healer_amt} end - - - - + + + + --SPELLS - + y = -5 - + local spellsBox = CreateFrame ("frame", nil, frame,"BackdropTemplate") _detalhes.gump:ApplyStandardBackdrop (spellsBox) spellsBox:SetPoint ("topleft", absorbsBox, "topright", 10, 0) spellsBox:SetSize (346, 160 * 2 + 5) - + local spells_text = spellsBox:CreateFontString (nil, "artwork", "GameFontNormal") spells_text:SetText ("Spells") spells_text :SetPoint ("topleft", spellsBox, "topleft", 5, y) - - local frame_tooltip_onenter = function (self) + + local frame_tooltip_onenter = function(self) if (self.spellid) then --self:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 512, edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", edgeSize = 8}) self:SetBackdropColor (.5, .5, .5, .5) @@ -2254,48 +2255,48 @@ function gump:CriaJanelaInfo() GameTooltip:Show() end end - local frame_tooltip_onleave = function (self) + local frame_tooltip_onleave = function(self) if (self.spellid) then self:SetBackdropColor (.5, .5, .5, .1) GameTooltip:Hide() end end - + y = y - padding - - for i = 1, 40 do + + for i = 1, 40 do local frame_tooltip = CreateFrame ("frame", nil, spellsBox,"BackdropTemplate") frame_tooltip:SetPoint ("topleft", spellsBox, "topleft", 5, y + ((i-1)*17)*-1) frame_tooltip:SetSize (spellsBox:GetWidth()-10, 16) frame_tooltip:SetScript ("OnEnter", frame_tooltip_onenter) frame_tooltip:SetScript ("OnLeave", frame_tooltip_onleave) frame_tooltip:Hide() - + frame_tooltip:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 512}) frame_tooltip:SetBackdropColor (.5, .5, .5, .1) - + local icon = frame_tooltip:CreateTexture (nil, "artwork") icon:SetSize (14, 14) icon:SetPoint ("left", frame_tooltip, "left") - + local spell = frame_tooltip:CreateFontString (nil, "artwork", "GameFontHighlightSmall") spell:SetPoint ("left", icon, "right", 2, 0) spell:SetText ("spell name:") --> localize-me spell:SetTextColor (.8, .8, .8, 1) - + local spell_amt = frame_tooltip:CreateFontString (nil, "artwork", "GameFontHighlightSmall") spell_amt:SetPoint ("left", spell, "right", 2, 0) spell_amt:SetText ("0") - + tab ["spell" .. i] = {spell, spell_amt, icon, frame_tooltip} end - + end - - local getpercent = function (value, lastvalue, elapsed_time, inverse) + + local getpercent = function(value, lastvalue, elapsed_time, inverse) local ps = value / elapsed_time local diff - + if (lastvalue == 0) then diff = "+0%" else @@ -2307,7 +2308,7 @@ function gump:CriaJanelaInfo() if (d > 999) then d = "> 999" end - + if (inverse) then diff = "|c" .. green .. "+" .. d .. "%|r" else @@ -2317,11 +2318,11 @@ function gump:CriaJanelaInfo() local d = lastvalue - ps d = d / max(ps, 0.001) * 100 d = _math_floor (math.abs (d)) - + if (d > 999) then d = "> 999" end - + if (inverse) then diff = "|c" .. red .. "-" .. d .. "%|r" else @@ -2329,14 +2330,14 @@ function gump:CriaJanelaInfo() end end end - + return ps, diff end - - local avoidance_fill = function (tab, player, combat) + + local avoidance_fill = function(tab, player, combat) local elapsed_time = combat:GetCombatTime() - + local last_combat = combat.previous_combat if (not last_combat or not last_combat [1]) then last_combat = combat @@ -2349,98 +2350,98 @@ function gump:CriaJanelaInfo() --> damage taken local playerdamage = combat (1, player.nome) - + if (not playerdamage.avoidance) then playerdamage.avoidance = _detalhes:CreateActorAvoidanceTable() end - + local damagetaken = playerdamage.damage_taken local last_damage_received = 0 if (last_actor) then last_damage_received = last_actor.damage_taken / last_combat:GetCombatTime() end - + tab.damagereceived:SetText (_detalhes:ToK2 (damagetaken)) - + local ps, diff = getpercent (damagetaken, last_damage_received, elapsed_time) tab.damagepersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") --> absorbs local totalabsorbs = playerdamage.avoidance.overall.ABSORB_AMT local incomingtotal = damagetaken + totalabsorbs - + local last_total_absorbs = 0 if (last_actor and last_actor.avoidance) then last_total_absorbs = last_actor.avoidance.overall.ABSORB_AMT / last_combat:GetCombatTime() end - + tab.absorbstotal:SetText (_detalhes:ToK2 (totalabsorbs) .. " (" .. _math_floor (totalabsorbs / incomingtotal * 100) .. "%)") - + local ps, diff = getpercent (totalabsorbs, last_total_absorbs, elapsed_time, true) tab.absorbstotalpersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") - + --> dodge local totaldodge = playerdamage.avoidance.overall.DODGE tab.dodge:SetText (totaldodge) - + local last_total_dodge = 0 if (last_actor and last_actor.avoidance) then last_total_dodge = last_actor.avoidance.overall.DODGE / last_combat:GetCombatTime() end local ps, diff = getpercent (totaldodge, last_total_dodge, elapsed_time, true) tab.dodgepersecond:SetText ( string.format ("%.2f", ps) .. " (" .. diff .. ")") - + --> parry local totalparry = playerdamage.avoidance.overall.PARRY tab.parry:SetText (totalparry) - + local last_total_parry = 0 if (last_actor and last_actor.avoidance) then last_total_parry = last_actor.avoidance.overall.PARRY / last_combat:GetCombatTime() end local ps, diff = getpercent (totalparry, last_total_parry, elapsed_time, true) tab.parrypersecond:SetText (string.format ("%.2f", ps) .. " (" .. diff .. ")") - + --> block local totalblock = playerdamage.avoidance.overall.BLOCKED_HITS tab.block:SetText (totalblock) - + local last_total_block = 0 if (last_actor and last_actor.avoidance) then last_total_block = last_actor.avoidance.overall.BLOCKED_HITS / last_combat:GetCombatTime() end local ps, diff = getpercent (totalblock, last_total_block, elapsed_time, true) tab.blockpersecond:SetText (string.format ("%.2f", ps) .. " (" .. diff .. ")") - + tab.blockeddamage_amt:SetText (_detalhes:ToK2 (playerdamage.avoidance.overall.BLOCKED_AMT)) - + --> absorb local fullabsorb = playerdamage.avoidance.overall.FULL_ABSORBED local halfabsorb = playerdamage.avoidance.overall.PARTIAL_ABSORBED local halfabsorb_amt = playerdamage.avoidance.overall.PARTIAL_ABSORB_AMT local noabsorb = playerdamage.avoidance.overall.FULL_HIT - + tab.fullsbsorbed:SetText (fullabsorb) tab.partiallyabsorbed:SetText (halfabsorb) tab.noabsorbs:SetText (noabsorb) - + if (halfabsorb_amt > 0) then local average = halfabsorb_amt / halfabsorb --tenho o average local last_average = 0 if (last_actor and last_actor.avoidance and last_actor.avoidance.overall.PARTIAL_ABSORBED > 0) then last_average = last_actor.avoidance.overall.PARTIAL_ABSORB_AMT / last_actor.avoidance.overall.PARTIAL_ABSORBED end - + local ps, diff = getpercent (halfabsorb_amt, last_average, halfabsorb, true) tab.partiallyabsorbedpersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") else tab.partiallyabsorbedpersecond:SetText ("0.00 (0%)") end - - + + --> healing - + local actor_heal = combat (2, player.nome) if (not actor_heal) then tab.selfhealing:SetText ("0") @@ -2451,51 +2452,51 @@ function gump:CriaJanelaInfo() if (este_alvo) then local heal_total = este_alvo tab.selfhealing:SetText (_detalhes:ToK2 (heal_total)) - + if (last_actor_heal) then local este_alvo = last_actor_heal.targets [player.nome] if (este_alvo) then local heal = este_alvo - + local last_heal = heal / last_combat:GetCombatTime() - + local ps, diff = getpercent (heal_total, last_heal, elapsed_time, true) tab.selfhealingpersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") - + else tab.selfhealingpersecond:SetText ("0 (0%)") end else tab.selfhealingpersecond:SetText ("0 (0%)") end - + else tab.selfhealing:SetText ("0") tab.selfhealingpersecond:SetText ("0 (0%)") end - - + + -- taken from healer local heal_from = actor_heal.healing_from local myReceivedHeal = {} - - for actorName, _ in pairs (heal_from) do + + for actorName, _ in pairs (heal_from) do local thisActor = combat (2, actorName) local targets = thisActor.targets --> targets is a container with target classes local amount = targets [player.nome] or 0 myReceivedHeal [#myReceivedHeal+1] = {actorName, amount, thisActor.classe} end - + table.sort (myReceivedHeal, _detalhes.Sort2) --> Sort2 sort by second index - - for i = 1, 5 do + + for i = 1, 5 do local label1, label2 = unpack (tab ["healer" .. i]) if (myReceivedHeal [i]) then local name = myReceivedHeal [i][1] - + name = _detalhes:GetOnlyName (name) --name = _detalhes:RemoveOwnerName (name) - + label1:SetText (name .. ":") local class = myReceivedHeal [i][3] if (class) then @@ -2506,26 +2507,26 @@ function gump:CriaJanelaInfo() else label1:SetTextColor (.8, .8, .8, 1) end - + local last_actor = last_combat (2, myReceivedHeal [i][1]) if (last_actor) then local targets = last_actor.targets local amount = targets [player.nome] or 0 if (amount) then - + local last_heal = amount - + local ps, diff = getpercent (myReceivedHeal[i][2], last_heal, 1, true) label2:SetText ( _detalhes:ToK2 (myReceivedHeal[i][2] or 0) .. " (" .. diff .. ")") - + else label2:SetText ( _detalhes:ToK2 (myReceivedHeal[i][2] or 0)) end else label2:SetText ( _detalhes:ToK2 (myReceivedHeal[i][2] or 0)) end - - + + else label1:SetText ("-- -- -- --") label1:SetTextColor (.8, .8, .8, 1) @@ -2533,20 +2534,20 @@ function gump:CriaJanelaInfo() end end end - + --> Spells --> cooldowns local index_used = 1 local misc_player = combat (4, player.nome) local encounter_time = combat:GetCombatTime() - + if (misc_player) then if (misc_player.cooldowns_defensive_spells) then local minha_tabela = misc_player.cooldowns_defensive_spells._ActorTable local buffUpdateSpells = misc_player.buff_uptime_spells -- ._ActorTable local cooldowns_usados = {} - + for _spellid, _tabela in pairs (minha_tabela) do cooldowns_usados [#cooldowns_usados+1] = {_spellid, _tabela.counter} end @@ -2554,15 +2555,15 @@ function gump:CriaJanelaInfo() if (#cooldowns_usados > 0) then table.sort (cooldowns_usados, _detalhes.Sort2) - + for i = 1, #cooldowns_usados do local esta_habilidade = cooldowns_usados[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) - + local nome_magia, _, icone_magia = _GetSpellInfo(esta_habilidade[1]) + local label1, label2, icon1, framebg = unpack (tab ["spell" .. index_used]) framebg.spellid = esta_habilidade[1] framebg:Show() - + --> attempt to get the buff update local spellInfo = buffUpdateSpells:GetSpell (framebg.spellid) if (spellInfo) then @@ -2573,18 +2574,18 @@ function gump:CriaJanelaInfo() --> update the line label1:SetText (nome_magia .. ":") - + icon1:SetTexture (icone_magia) icon1:SetTexCoord (0.0625, 0.953125, 0.0625, 0.953125) - + index_used = index_used + 1 end end end end - + local cooldownInfo = DetailsFramework.CooldownsInfo - + --> see cooldowns that other players used in this actor for playerName, _ in pairs (combat.raid_roster) do if (playerName ~= player.nome) then @@ -2597,27 +2598,27 @@ function gump:CriaJanelaInfo() if (targets) then for targetName, amountCasted in pairs (targets) do if (targetName == player.nome) then - local spellName, _, spellIcon = _GetSpellInfo (spellID) + local spellName, _, spellIcon = _GetSpellInfo(spellID) local label1, label2, icon1, framebg = unpack (tab ["spell" .. index_used]) framebg.spellid = spellID framebg:Show() - + --> attempt to get the buff update local info = cooldownInfo [spellID] local cooldownDuration = info and info.duration or 0 - + if (cooldownDuration > 0) then label2:SetText (amountCasted .. " (" .. "|cFFFFFF00" .. miscPlayer.nome .. "|r " .. floor (cooldownDuration / encounter_time * 100) .. "% uptime)") else label2:SetText (amountCasted) end - + --> update the line label1:SetText (spellName .. ":") - + icon1:SetTexture (spellIcon) icon1:SetTexCoord (0.0625, 0.953125, 0.0625, 0.953125) - + index_used = index_used + 1 end end @@ -2627,58 +2628,58 @@ function gump:CriaJanelaInfo() end end end - - + + for i = index_used, 40 do local label1, label2, icon1, framebg = unpack (tab ["spell" .. i]) - + framebg.spellid = nil framebg:Hide() label1:SetText ("") label2:SetText ("") icon1:SetTexture ("") end - + --> habilidade usada para interromper - - - + + + --[[ - + --]] end - + local iconTableAvoidance = { texture = [[Interface\AddOns\Details\images\icons]], --coords = {363/512, 381/512, 0/512, 17/512}, coords = {384/512, 402/512, 19/512, 38/512}, width = 16, height = 16, - } - + } + _detalhes:CreatePlayerDetailsTab ("Avoidance", --[1] tab name Loc ["STRING_INFO_TAB_AVOIDANCE"], --[2] localized name - function (tabOBject, playerObject) --[3] condition - if (playerObject.isTank) then - return true - else - return false + function(tabOBject, playerObject) --[3] condition + if (playerObject.isTank) then + return true + else + return false end - end, - + end, + avoidance_fill, --[4] fill function - + nil, --[5] onclick - + avoidance_create, --[6] oncreate iconTableAvoidance --[7] icon ) - + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> ~auras - local auras_tab_create = function (tab, frame) + local auras_tab_create = function(tab, frame) local DF = _detalhes.gump local scroll_line_amount = 22 local scroll_line_height = 19 @@ -2686,77 +2687,77 @@ function gump:CriaJanelaInfo() local scrollHeight = 445 local scroll_line_height = 19 local text_size = 10 - + local debuffScrollStartX = 445 - + local headerOffsetsBuffs = { --buff label, uptime, applications, refreshes, wa 6, 190, 290, 336, 380 } - + local headerOffsetsDebuffs = { --debuff label, uptime, applications, refreshes, wa 426, 630, 729, 775, 820 - } - - local line_onenter = function (self) + } + + local line_onenter = function(self) GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") _detalhes:GameTooltipSetSpellByID (self.spellID) GameTooltip:Show() self:SetBackdropColor (1, 1, 1, .2) end - - local line_onleave = function (self) + + local line_onleave = function(self) GameTooltip:Hide() self:SetBackdropColor (unpack (self.BackgroundColor)) end - - local line_onclick = function (self) - + + local line_onclick = function(self) + end - + --buff scroll --icon - name - applications - refreshes - uptime -- - - --local wa_button = function (self, mouseButton, spellID, auraType) - -- local spellName, _, spellIcon = GetSpellInfo (spellID) + + --local wa_button = function(self, mouseButton, spellID, auraType) + -- local spellName, _, spellIcon = GetSpellInfo(spellID) -- _detalhes:OpenAuraPanel (spellID, spellName, spellIcon, nil, auraType == "BUFF" and 4 or 2, 1) --end - - local scroll_createline = function (self, index) + + local scroll_createline = function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self,"BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 1, -((index-1)*(scroll_line_height+1))) line:SetSize (scroll_width -2, scroll_line_height) line:SetScript ("OnEnter", line_onenter) line:SetScript ("OnLeave", line_onleave) line:SetScript ("OnClick", line_onclick) - + line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) line:SetBackdropColor (0, 0, 0, 0.2) - + local icon = line:CreateTexture ("$parentIcon", "overlay") icon:SetSize (scroll_line_height -2 , scroll_line_height - 2) local name = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") local uptime = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") local apply = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") local refresh = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") - + --local waButton = DF:CreateButton (line, wa_button, 18, 18) --waButton:SetIcon ([[Interface\AddOns\WeakAuras\Media\Textures\icon]]) - + DF:SetFontSize (name, text_size) DF:SetFontSize (uptime, text_size) DF:SetFontSize (apply, text_size) DF:SetFontSize (refresh, text_size) - + icon:SetPoint ("left", line, "left", 2, 0) name:SetPoint ("left", icon, "right", 2, 0) uptime:SetPoint ("left", line, "left", 186, 0) apply:SetPoint ("left", line, "left", 276, 0) refresh:SetPoint ("left", line, "left", 322, 0) --waButton:SetPoint ("left", line, "left", 372, 0) - + line.Icon = icon line.Name = name line.Uptime = uptime @@ -2766,43 +2767,43 @@ function gump:CriaJanelaInfo() name:SetJustifyH ("left") uptime:SetJustifyH ("left") - + apply:SetJustifyH ("center") refresh:SetJustifyH ("center") apply:SetWidth (26) refresh:SetWidth (26) - + return line end - + local line_bg_color = {{1, 1, 1, .1}, {1, 1, 1, 0}} - - local scroll_buff_refresh = function (self, data, offset, total_lines) - + + local scroll_buff_refresh = function(self, data, offset, total_lines) + local haveWA = false --_G.WeakAuras - + for i = 1, total_lines do local index = i + offset local aura = data [index] - + if (aura) then local line = self:GetLine (i) line.spellID = aura.spellID line.Icon:SetTexture (aura [1]) - + line.Icon:SetTexCoord (.1, .9, .1, .9) line.Name:SetText (aura [2]) line.Uptime:SetText (DF:IntegerToTimer (aura [3]) .. " (|cFFBBAAAA" .. floor (aura [6]) .. "%|r)") line.Apply:SetText (aura [4]) line.Refresh:SetText (aura [5]) - + --if (haveWA) then -- line.WaButton:SetClickFunction (wa_button, aura.spellID, line.AuraType) --else -- line.WaButton:Disable() --end - + if (i%2 == 0) then line:SetBackdropColor (unpack (line_bg_color [1])) line.BackgroundColor = line_bg_color [1] @@ -2813,8 +2814,8 @@ function gump:CriaJanelaInfo() end end end - - local create_titledesc_frame = function (anchorWidget, desc) + + local create_titledesc_frame = function(anchorWidget, desc) local f = CreateFrame ("frame", nil, frame) f:SetSize (40, 20) f:SetPoint ("center", anchorWidget, "center") @@ -2828,76 +2829,76 @@ function gump:CriaJanelaInfo() end) return f end - - + + local buffLabel = DF:CreateLabel (frame, "Buff Name") buffLabel:SetPoint (headerOffsetsBuffs[1], -10) local uptimeLabel = DF:CreateLabel (frame, "Uptime") uptimeLabel:SetPoint (headerOffsetsBuffs[2], -10) - + local appliedLabel = DF:CreateLabel (frame, "A") appliedLabel:SetPoint (headerOffsetsBuffs[3], -10) create_titledesc_frame (appliedLabel.widget, "applications") - + local refreshedLabel = DF:CreateLabel (frame, "R") refreshedLabel:SetPoint (headerOffsetsBuffs[4], -10) create_titledesc_frame (refreshedLabel.widget, "refreshes") - + --local waLabel = DF:CreateLabel (frame, "WA") --waLabel:SetPoint (headerOffsetsBuffs[5], -10) --create_titledesc_frame (waLabel.widget, "create weak aura") - + local buffScroll = DF:CreateScrollBox (frame, "$parentBuffUptimeScroll", scroll_buff_refresh, {}, scroll_width, scrollHeight, scroll_line_amount, scroll_line_height) buffScroll:SetPoint ("topleft", frame, "topleft", 5, -30) - for i = 1, scroll_line_amount do + for i = 1, scroll_line_amount do local line = buffScroll:CreateLine (scroll_createline) line.AuraType = "BUFF" end - DF:ReskinSlider (buffScroll) + DF:ReskinSlider(buffScroll) tab.BuffScroll = buffScroll - + --debuff scroll --icon - name - applications - refreshes - uptime -- - + local debuffLabel = DF:CreateLabel (frame, "Debuff Name") debuffLabel:SetPoint (headerOffsetsDebuffs[1], -10) local uptimeLabel2 = DF:CreateLabel (frame, "Uptime") uptimeLabel2:SetPoint (headerOffsetsDebuffs[2], -10) - + local appliedLabel2 = DF:CreateLabel (frame, "A") appliedLabel2:SetPoint (headerOffsetsDebuffs[3], -10) create_titledesc_frame (appliedLabel2.widget, "applications") - + local refreshedLabel2 = DF:CreateLabel (frame, "R") refreshedLabel2:SetPoint (headerOffsetsDebuffs[4], -10) create_titledesc_frame (refreshedLabel2.widget, "refreshes") - + --local waLabel2 = DF:CreateLabel (frame, "WA") --waLabel2:SetPoint (headerOffsetsDebuffs[5], -10) --create_titledesc_frame (waLabel2.widget, "create weak aura") local debuffScroll = DF:CreateScrollBox (frame, "$parentDebuffUptimeScroll", scroll_buff_refresh, {}, scroll_width, scrollHeight, scroll_line_amount, scroll_line_height) debuffScroll:SetPoint ("topleft", frame, "topleft", debuffScrollStartX, -30) - for i = 1, scroll_line_amount do + for i = 1, scroll_line_amount do local line = debuffScroll:CreateLine (scroll_createline) line.AuraType = "DEBUFF" end - DF:ReskinSlider (debuffScroll) + DF:ReskinSlider(debuffScroll) tab.DebuffScroll = debuffScroll end - - local auras_tab_fill = function (tab, player, combat) + + local auras_tab_fill = function(tab, player, combat) local miscActor = combat:GetActor (4, player:name()) local combatTime = combat:GetCombatTime() - + do --buffs local newAuraTable = {} if (miscActor and miscActor.buff_uptime_spells) then for spellID, spellObject in pairs (miscActor.buff_uptime_spells._ActorTable) do - local spellName, _, spellIcon = GetSpellInfo (spellID) + local spellName, _, spellIcon = GetSpellInfo(spellID) tinsert (newAuraTable, {spellIcon, spellName, spellObject.uptime, spellObject.appliedamt, spellObject.refreshamt, spellObject.uptime/combatTime*100, spellID = spellID}) end end @@ -2905,19 +2906,19 @@ function gump:CriaJanelaInfo() tab.BuffScroll:SetData (newAuraTable) tab.BuffScroll:Refresh() end - + do --debuffs local newAuraTable = {} if (miscActor and miscActor.debuff_uptime_spells) then for spellID, spellObject in pairs (miscActor.debuff_uptime_spells._ActorTable) do - local spellName, _, spellIcon = GetSpellInfo (spellID) + local spellName, _, spellIcon = GetSpellInfo(spellID) tinsert (newAuraTable, {spellIcon, spellName, spellObject.uptime, spellObject.appliedamt, spellObject.refreshamt, spellObject.uptime/combatTime*100, spellID = spellID}) end end table.sort (newAuraTable, _detalhes.Sort3) tab.DebuffScroll:SetData (newAuraTable) tab.DebuffScroll:Refresh() - end + end end local iconTableAuras = { @@ -2925,62 +2926,62 @@ function gump:CriaJanelaInfo() coords = {257/512, 278/512, 0/512, 19/512}, width = 16, height = 16, - } - + } + _detalhes:CreatePlayerDetailsTab ("Auras", --[1] tab name "Auras", --[2] localized name - function (tabOBject, playerObject) --[3] condition + function(tabOBject, playerObject) --[3] condition return true - end, - + end, + auras_tab_fill, --[4] fill function - + nil, --[5] onclick - + auras_tab_create, --[6] oncreate iconTableAuras --icon table ) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> ~compare +--> ~compare local target_texture = [[Interface\MINIMAP\TRACKING\Target]] local empty_text = "" - - local plus = red .. "-" + + local plus = red .. "-" local minor = green .. "+" - + local bar_color = {.5, .5, .5, .4} -- bar of the second and 3rd player local bar_color_on_enter = {.9, .9, .9, .9} - + local frame_backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true} local frame_backdrop_color = {0, 0, 0, 0.35} local frame_backdrop_border_color = {0, 0, 0, 0} - + local spell_compare_frame_width = {298, 225, 226} local spell_compare_frame_height = 200 local target_compare_frame_height = 142 - + local xLocation = 2 local yLocation = -20 local targetBars = 9 - - local fill_compare_targets = function (self, player, other_players, target_pool) - + + local fill_compare_targets = function(self, player, other_players, target_pool) + local offset = FauxScrollFrame_GetOffset (self) - + local frame2 = DetailsPlayerComparisonTarget2 local frame3 = DetailsPlayerComparisonTarget3 - + local total = player.total_without_pet - + if (not target_pool [1]) then - for i = 1, targetBars do + for i = 1, targetBars do local bar = self.bars [i] local bar_2 = frame2.bars [i] local bar_3 = frame3.bars [i] - + bar [1]:SetTexture ("") bar [2].lefttext:SetText (empty_text) bar [2].lefttext:SetTextColor (.5, .5, .5, 1) @@ -3006,12 +3007,12 @@ function gump:CriaJanelaInfo() bar_3 [2]:SetBackdropColor (1, 1, 1, 0) bar_3 [3][4] = nil end - + return end - + local top = target_pool [1] [2] - + --player 2 local player_2 = other_players [1] local player_2_target_pool @@ -3028,7 +3029,7 @@ function gump:CriaJanelaInfo() else player_2_top = 0 end - --1 skill, + --1 skill, end --player 3 @@ -3038,7 +3039,7 @@ function gump:CriaJanelaInfo() if (player_3) then local player_3_target = player_3.targets player_3_target_pool = {} - for target_name, amount in _pairs (player_3_target) do + for target_name, amount in _pairs (player_3_target) do player_3_target_pool [#player_3_target_pool+1] = {target_name, amount} end table.sort (player_3_target_pool, _detalhes.Sort2) @@ -3049,22 +3050,22 @@ function gump:CriaJanelaInfo() end end - for i = 1, targetBars do + for i = 1, targetBars do local bar = self.bars [i] local bar_2 = frame2.bars [i] local bar_3 = frame3.bars [i] - + local index = i + offset local data = target_pool [index] - + if (data) then --[name] [total] - + local target_name = data [1] - + bar [1]:SetTexture (target_texture) bar [1]:SetDesaturated (true) bar [1]:SetAlpha (.7) - + bar [2].lefttext:SetText (index .. ". " .. target_name) bar [2].lefttext:SetTextColor (1, 1, 1, 1) bar [2].righttext:SetText (_detalhes:ToK2Min (data [2])) -- .. " (" .. _math_floor (data [2] / total * 100) .. "%)" @@ -3074,13 +3075,13 @@ function gump:CriaJanelaInfo() bar [3][2] = target_name bar [3][3] = data [2] --total bar [3][4] = player - + -- 2 if (player_2) then local player_2_target_total local player_2_target_index - + for index, t in _ipairs (player_2_target_pool) do if (t[1] == target_name) then player_2_target_total = t[2] @@ -3088,15 +3089,15 @@ function gump:CriaJanelaInfo() break end end - + if (player_2_target_total) then bar_2 [1]:SetTexture (target_texture) bar_2 [1]:SetDesaturated (true) bar_2 [1]:SetAlpha (.7) - + bar_2 [2].lefttext:SetText (player_2_target_index .. ". " .. target_name) bar_2 [2].lefttext:SetTextColor (1, 1, 1, 1) - + if (data [2] > player_2_target_total) then local diff = data [2] - player_2_target_total local up = diff / player_2_target_total * 100 @@ -3104,7 +3105,7 @@ function gump:CriaJanelaInfo() if (up > 999) then up = "" .. 999 end - + bar_2 [2].righttext2:SetText (_detalhes:ToK2Min (player_2_target_total)) bar_2 [2].righttext:SetText (" |c" .. minor .. up .. "%|r") else @@ -3117,15 +3118,15 @@ function gump:CriaJanelaInfo() bar_2 [2].righttext2:SetText (_detalhes:ToK2Min (player_2_target_total)) bar_2 [2].righttext:SetText (" |c" .. plus .. down .. "%|r") end - + --bar_2 [2]:SetValue (player_2_target_total / player_2_top * 100) bar_2 [2]:SetValue (100) - + bar_2 [3][1] = player_2.nome bar_2 [3][2] = target_name bar_2 [3][3] = player_2_target_total bar_2 [3][4] = player_2 - + else bar_2 [1]:SetTexture ("") bar_2 [2].lefttext:SetText (empty_text) @@ -3146,13 +3147,13 @@ function gump:CriaJanelaInfo() bar_2 [2]:SetBackdropColor (1, 1, 1, 0) bar_2 [3][4] = nil end - + -- 3 if (player_3) then local player_3_target_total local player_3_target_index - + for index, t in _ipairs (player_3_target_pool) do if (t[1] == target_name) then player_3_target_total = t[2] @@ -3160,15 +3161,15 @@ function gump:CriaJanelaInfo() break end end - + if (player_3_target_total) then bar_3 [1]:SetTexture (target_texture) bar_3 [1]:SetDesaturated (true) bar_3 [1]:SetAlpha (.7) - + bar_3 [2].lefttext:SetText (player_3_target_index .. ". " .. target_name) bar_3 [2].lefttext:SetTextColor (1, 1, 1, 1) - + if (data [2] > player_3_target_total) then local diff = data [2] - player_3_target_total local up = diff / player_3_target_total * 100 @@ -3188,15 +3189,15 @@ function gump:CriaJanelaInfo() bar_3 [2].righttext:SetText (_detalhes:ToK2Min (player_3_target_total)) bar_3 [2].righttext:SetText (" |c" .. plus .. down .. "%|r") end - + --bar_3 [2]:SetValue (player_3_target_total / player_3_top * 100) bar_3 [2]:SetValue (100) - + bar_3 [3][1] = player_3.nome bar_3 [3][2] = target_name bar_3 [3][3] = player_3_target_total bar_3 [3][4] = player_3 - + else bar_3 [1]:SetTexture ("") bar_3 [2].lefttext:SetText (empty_text) @@ -3217,7 +3218,7 @@ function gump:CriaJanelaInfo() bar_3 [2]:SetBackdropColor (1, 1, 1, 0) bar_3 [3][4] = nil end - + else bar [1]:SetTexture ("") bar [2].lefttext:SetText (empty_text) @@ -3245,17 +3246,17 @@ function gump:CriaJanelaInfo() bar_3 [3][4] = nil end end - + end - local fill_compare_actors = function (self, player, other_players) - + local fill_compare_actors = function(self, player, other_players) + --main player skills local spells_sorted = {} for spellid, spelltable in _pairs (player.spells._ActorTable) do spells_sorted [#spells_sorted+1] = {spelltable, spelltable.total} end - + --main player pets for petIndex, petName in _ipairs (player:Pets()) do local petActor = info.instancia.showing [player.tipo]:PegarCombatente (nil, petName) @@ -3266,14 +3267,14 @@ function gump:CriaJanelaInfo() end end table.sort (spells_sorted, _detalhes.Sort2) - + self.player = player:Name() - + local offset = FauxScrollFrame_GetOffset (self) - + local total = player.total_without_pet local top = spells_sorted [1] and spells_sorted [1] [2] or 0 - + local frame2 = DetailsPlayerComparisonBox2 local frame3 = DetailsPlayerComparisonBox3 @@ -3281,12 +3282,12 @@ function gump:CriaJanelaInfo() local player_2_spells_sorted local player_2_top local player_2_spell_info - + if (other_players [1]) then frame2.player = other_players [1]:Name() player_2_total = other_players [1].total_without_pet player_2_spells_sorted = {} - + --player 2 spells for spellid, spelltable in _pairs (other_players [1].spells._ActorTable) do player_2_spells_sorted [#player_2_spells_sorted+1] = {spelltable, spelltable.total} @@ -3300,34 +3301,34 @@ function gump:CriaJanelaInfo() end end end - + table.sort (player_2_spells_sorted, _detalhes.Sort2) player_2_top = (player_2_spells_sorted [1] and player_2_spells_sorted [1] [2]) or 0 --se n�o existir uma magia no jogador e o jogador tiver um pet, ele n�o vai encontrar um valor em [1] e dar -- ~pet player_2_spell_info = {} - for index, spelltable in _ipairs (player_2_spells_sorted) do + for index, spelltable in _ipairs (player_2_spells_sorted) do player_2_spell_info [spelltable[1].id] = index end - + frame2.NoPLayersToShow:Hide() frame3.NoPLayersToShow:Hide() else frame2.NoPLayersToShow:Show() frame3.NoPLayersToShow:Show() end - + local player_3_total local player_3_spells_sorted local player_3_spell_info local player_3_top - + if (other_players [2]) then frame3.player = other_players [2] and other_players [2]:Name() player_3_total = other_players [2] and other_players [2].total_without_pet player_3_spells_sorted = {} player_3_spell_info = {} - + if (other_players [2]) then --player 3 spells for spellid, spelltable in _pairs (other_players [2].spells._ActorTable) do @@ -3342,27 +3343,27 @@ function gump:CriaJanelaInfo() end end end - + table.sort (player_3_spells_sorted, _detalhes.Sort2) player_3_top = player_3_spells_sorted [1] [2] - for index, spelltable in _ipairs (player_3_spells_sorted) do + for index, spelltable in _ipairs (player_3_spells_sorted) do player_3_spell_info [spelltable[1].id] = index end end end - for i = 1, 12 do + for i = 1, 12 do local bar = self.bars [i] local index = i + offset - + --main player spells local data = spells_sorted [index] - + if (data) then --if exists - + --main player - seta no primeiro box local spellid = data [1].id - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) if (not name) then --no spell found? - tbc problem @@ -3374,7 +3375,7 @@ function gump:CriaJanelaInfo() bar [1]:SetTexCoord (unpack (IconTexCoord)) --bar[1] = spellicon bar[2] = statusbar bar [2]:SetBackdropColor (1, 1, 1, 0.1) - + if (petName) then bar [2].lefttext:SetText (index .. ". " .. name .. " (|cFFCCBBBB" .. petName:gsub (" <.*", "") .. "|r)") else @@ -3392,7 +3393,7 @@ function gump:CriaJanelaInfo() --player 2 local player_2 = other_players [1] local spell = player_2 and player_2.spells._ActorTable [spellid] - + if (not spell and petName and player_2) then for _petIndex, _petName in _ipairs (player_2:Pets()) do if (_petName:gsub (" <.*", "") == petName:gsub (" <.*", "")) then @@ -3402,9 +3403,9 @@ function gump:CriaJanelaInfo() end end end - + local bar_2 = frame2 and frame2.bars [i] - + -- ~compare if (spell) then bar_2 [1]:SetTexture (icon) @@ -3413,11 +3414,11 @@ function gump:CriaJanelaInfo() bar_2 [2].lefttext:SetTextColor (1, 1, 1, 1) bar_2 [2]:SetStatusBarColor (unpack (bar_color)) bar_2 [2]:SetBackdropColor (1, 1, 1, 0.1) - + if (spell.total == 0 and data [2] == 0) then bar_2 [2].righttext2:SetText ("0") bar_2 [2].righttext:SetText ("+0%") - + elseif (data [2] > spell.total) then if (spell.total > 0) then local diff = data [2] - spell.total @@ -3432,7 +3433,7 @@ function gump:CriaJanelaInfo() bar_2 [2].righttext2:SetText ("0") bar_2 [2].righttext:SetText ("+0%") end - + else if (data [2] > 0) then local diff = spell.total - data [2] @@ -3448,7 +3449,7 @@ function gump:CriaJanelaInfo() bar_2 [2].righttext:SetText ("+0%") end end - + bar_2 [2]:SetValue (spell.total / player_2_top * 100) bar_2 [2]:SetValue (100) bar_2 [3][1] = spell.counter --tooltip hits @@ -3464,25 +3465,25 @@ function gump:CriaJanelaInfo() bar_2 [2]:SetValue (0) bar_2 [2]:SetBackdropColor (1, 1, 1, 0) end - + --player 3 local bar_3 = frame3 and frame3.bars [i] - + if (player_3_total) then local player_3 = other_players [2] local spell = player_3 and player_3.spells._ActorTable [spellid] - + if (not spell and petName and player_3) then for _petIndex, _petName in _ipairs (player_3:Pets()) do if (_petName:gsub (" <.*", "") == petName:gsub (" <.*", "")) then local petActor = info.instancia.showing [player.tipo]:PegarCombatente (nil, _petName) spell = petActor and petActor.spells._ActorTable [spellid] - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) name = name .. " (|cFFCCBBBB" .. _petName:gsub (" <.*", "") .. "|r)" end end end - + if (spell) then bar_3 [1]:SetTexture (icon) bar_3 [1]:SetTexCoord (unpack (IconTexCoord)) --bar[1] = spellicon bar[2] = statusbar @@ -3490,11 +3491,11 @@ function gump:CriaJanelaInfo() bar_3 [2].lefttext:SetTextColor (1, 1, 1, 1) bar_3 [2]:SetStatusBarColor (unpack (bar_color)) bar_3 [2]:SetBackdropColor (1, 1, 1, 0.1) - + if (spell.total == 0 and data [2] == 0) then bar_3 [2].righttext2:SetText ("0") bar_3 [2].righttext:SetText ("+0%") - + elseif (data [2] > spell.total) then if (spell.total > 0) then local diff = data [2] - spell.total @@ -3524,7 +3525,7 @@ function gump:CriaJanelaInfo() bar_3 [2].righttext:SetText ("+0%") end end - + bar_3 [2]:SetValue (spell.total / player_3_top * 100) bar_3 [2]:SetValue (100) bar_3 [3][1] = spell.counter --tooltip hits @@ -3572,50 +3573,50 @@ function gump:CriaJanelaInfo() bar_3 [2]:SetValue (0) bar_3 [2]:SetBackdropColor (1, 1, 1, 0) end - + end - + for index, spelltable in _ipairs (spells_sorted) do - + end - + end - - local refresh_comparison_box = function (self) + + local refresh_comparison_box = function(self) --atualiza a scroll fill_compare_actors (self, self.tab.player, self.tab.players) FauxScrollFrame_Update (self, self.tab.spells_amt, 12, 15) self:Show() end - - local refresh_target_box = function (self) - + + local refresh_target_box = function(self) + --player 1 targets local my_targets = self.tab.player.targets local target_pool = {} - for target_name, amount in _pairs (my_targets) do + for target_name, amount in _pairs (my_targets) do target_pool [#target_pool+1] = {target_name, amount} end table.sort (target_pool, _detalhes.Sort2) - + FauxScrollFrame_Update (self, #target_pool, targetBars, 14) self:Show() fill_compare_targets (self, self.tab.player, self.tab.players, target_pool) end - - local compare_fill = function (tab, player, combat) + + local compare_fill = function(tab, player, combat) local players_to_compare = tab.players - + local defaultPlayerName = _detalhes:GetOnlyName (player:Name()) DetailsPlayerComparisonBox1.name_label:SetText (defaultPlayerName) - + local label2 = _G ["DetailsPlayerComparisonBox2"].name_label local label3 = _G ["DetailsPlayerComparisonBox3"].name_label - + local label2_percent = _G ["DetailsPlayerComparisonBox2"].name_label_percent local label3_percent = _G ["DetailsPlayerComparisonBox3"].name_label_percent - + if (players_to_compare [1]) then local playerName = _detalhes:GetOnlyName (players_to_compare [1]:Name()) label2:SetText (playerName) @@ -3632,18 +3633,18 @@ function gump:CriaJanelaInfo() label3:SetText ("") label3_percent:SetText ("") end - + refresh_comparison_box (DetailsPlayerComparisonBox1) refresh_target_box (DetailsPlayerComparisonTarget1) - + end - - local on_enter_target = function (self) - + + local on_enter_target = function(self) + local frame1 = DetailsPlayerComparisonTarget1 local frame2 = DetailsPlayerComparisonTarget2 local frame3 = DetailsPlayerComparisonTarget3 - + local bar1 = frame1.bars [self.index] local bar2 = frame2.bars [self.index] local bar3 = frame3.bars [self.index] @@ -3654,9 +3655,9 @@ function gump:CriaJanelaInfo() end local player_2 = bar2 [3] [4] local player_3 = bar3 [3] [4] - + local target_name = bar1 [3] [2] - + frame1.tooltip:SetPoint ("bottomleft", bar1[2], "topleft", -18, 5) frame2.tooltip:SetPoint ("bottomleft", bar2[2], "topleft", -18, 5) frame3.tooltip:SetPoint ("bottomleft", bar3[2], "topleft", -18, 5) @@ -3664,7 +3665,7 @@ function gump:CriaJanelaInfo() local actor1_total = bar1 [3] [3] local actor2_total = bar1 [3] [3] local actor3_total = bar1 [3] [3] - + -- player 1 local player_1_skills = {} for spellid, spell in _pairs (player_1.spells._ActorTable) do @@ -3678,7 +3679,7 @@ function gump:CriaJanelaInfo() -- ~pet local player_1_top = player_1_skills [1] and player_1_skills [1][2] or 0 bar1 [2]:SetStatusBarColor (1, 1, 1, 1) - + -- player 2 local player_2_skills = {} local player_2_top @@ -3694,7 +3695,7 @@ function gump:CriaJanelaInfo() player_2_top = player_2_skills [1] and player_2_skills [1][2] or 0 bar2 [2]:SetStatusBarColor (unpack (bar_color_on_enter)) end - + -- player 3 local player_3_skills = {} local player_3_top @@ -3710,26 +3711,26 @@ function gump:CriaJanelaInfo() player_3_top = player_3_skills [1] and player_3_skills [1][2] or 0 bar3 [2]:SetStatusBarColor (unpack (bar_color_on_enter)) end - + -- build tooltip frame1.tooltip:Reset() frame2.tooltip:Reset() frame3.tooltip:Reset() - + frame1.tooltip:Show() frame2.tooltip:Show() frame3.tooltip:Show() - + local frame2_gotresults = false local frame3_gotresults = false - + for index, spell in _ipairs (player_1_skills) do local bar = frame1.tooltip.bars [index] if (not bar) then bar = frame1.tooltip:CreateBar() end - - local name, _, icon = _GetSpellInfo (spell[1]) + + local name, _, icon = _GetSpellInfo(spell[1]) bar [1]:SetTexture (icon) bar [1]:SetTexCoord (unpack (IconTexCoord)) --bar[1] = spellicon bar[2] = statusbar bar [2].lefttext:SetText (index .. ". " .. name) @@ -3737,9 +3738,9 @@ function gump:CriaJanelaInfo() bar [2]:SetValue (spell [2]/player_1_top*100) --bar [2]:SetValue (100) bar [2].bg:Show() - + if (player_2) then - + local player_2_skill local found_skill = false for this_index, this_spell in _ipairs (player_2_skills) do @@ -3748,12 +3749,12 @@ function gump:CriaJanelaInfo() if (not bar) then bar = frame2.tooltip:CreateBar (index) end - + bar [1]:SetTexture (icon) bar [1]:SetTexCoord (unpack (IconTexCoord)) --bar[1] = spellicon bar[2] = statusbar bar [2].lefttext:SetText (this_index .. ". " .. name) bar [2].bg:Show() - + if (spell [2] > this_spell [2]) then local diff = spell [2] - this_spell [2] local up = diff / this_spell [2] * 100 @@ -3793,7 +3794,7 @@ function gump:CriaJanelaInfo() bar [2].bg:Hide() end end - + if (player_3) then local player_3_skill local found_skill = false @@ -3803,12 +3804,12 @@ function gump:CriaJanelaInfo() if (not bar) then bar = frame3.tooltip:CreateBar (index) end - + bar [1]:SetTexture (icon) bar [1]:SetTexCoord (unpack (IconTexCoord)) --bar[1] = spellicon bar[2] = statusbar bar [2].lefttext:SetText (this_index .. ". " .. name) bar [2].bg:Show() - + if (spell [2] > this_spell [2]) then local diff = spell [2] - this_spell [2] local up = diff / this_spell [2] * 100 @@ -3847,13 +3848,13 @@ function gump:CriaJanelaInfo() bar [2].bg:Hide() end end - + end - + frame1.tooltip:SetHeight ( (#player_1_skills*15) + 2) frame2.tooltip:SetHeight ( (#player_1_skills*15) + 2) frame3.tooltip:SetHeight ( (#player_1_skills*15) + 2) - + if (not frame2_gotresults) then frame2.tooltip:Hide() end @@ -3862,34 +3863,34 @@ function gump:CriaJanelaInfo() end end - - local on_leave_target = function (self) + + local on_leave_target = function(self) local frame1 = DetailsPlayerComparisonTarget1 local frame2 = DetailsPlayerComparisonTarget2 local frame3 = DetailsPlayerComparisonTarget3 - + local bar1 = frame1.bars [self.index] local bar2 = frame2.bars [self.index] local bar3 = frame3.bars [self.index] - + bar1[2]:SetStatusBarColor (.5, .5, .5, 1) bar1[2].icon:SetTexCoord (0, 1, 0, 1) bar2[2]:SetStatusBarColor (unpack (bar_color)) bar2[2].icon:SetTexCoord (0, 1, 0, 1) bar3[2]:SetStatusBarColor (unpack (bar_color)) bar3[2].icon:SetTexCoord (0, 1, 0, 1) - + frame1.tooltip:Hide() frame2.tooltip:Hide() frame3.tooltip:Hide() end - - local on_enter = function (self) - + + local on_enter = function(self) + local frame1 = DetailsPlayerComparisonBox1 local frame2 = DetailsPlayerComparisonBox2 local frame3 = DetailsPlayerComparisonBox3 - + local bar1 = frame1.bars [self.index] local bar2 = frame2.bars [self.index] local bar3 = frame3.bars [self.index] @@ -3902,44 +3903,44 @@ function gump:CriaJanelaInfo() local player1 = frame1.player local player2 = frame2.player local player3 = frame3.player - + local hits = bar1[3][1] local average = bar1[3][2] local critical = bar1[3][3] - + local player1_misc = info.instancia.showing (4, player1) local player2_misc = info.instancia.showing (4, player2) local player3_misc = info.instancia.showing (4, player3) - + local player1_uptime local player1_casts - + local COMPARE_FIRSTPLAYER_PERCENT = "100%" local COMPARE_UNKNOWNDATA = "-" - + if (bar1[2].righttext:GetText()) then bar1[2]:SetStatusBarColor (1, 1, 1, 1) bar1[2].icon:SetTexCoord (.1, .9, .1, .9) - + frame1.tooltip.hits_label3:SetText (hits) frame1.tooltip.average_label3:SetText (_detalhes:ToK2Min (average)) frame1.tooltip.crit_label3:SetText (critical .. "%") - + --2 = far left text (percent comparison) --3 = total in numbers - + _detalhes.gump:SetFontColor (frame1.tooltip.hits_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.average_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.crit_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.casts_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.uptime_label2, "gray") - + frame1.tooltip.hits_label2:SetText (COMPARE_FIRSTPLAYER_PERCENT) frame1.tooltip.average_label2:SetText (COMPARE_FIRSTPLAYER_PERCENT) frame1.tooltip.crit_label2:SetText (COMPARE_FIRSTPLAYER_PERCENT) - + if (player1_misc) then - + --uptime local spell = player1_misc.debuff_uptime_spells and player1_misc.debuff_uptime_spells._ActorTable and player1_misc.debuff_uptime_spells._ActorTable [spellid] if (spell) then @@ -3955,37 +3956,37 @@ function gump:CriaJanelaInfo() _detalhes.gump:SetFontColor (frame1.tooltip.uptime_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.uptime_label3, "gray") end - + --total casts local amt_casts = player1_misc.spell_cast and player1_misc.spell_cast [spellid] if (amt_casts) then frame1.tooltip.casts_label3:SetText (amt_casts) frame1.tooltip.casts_label2:SetText (COMPARE_FIRSTPLAYER_PERCENT) - + _detalhes.gump:SetFontColor (frame1.tooltip.casts_label3, "white") - + player1_casts = amt_casts else - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) local extra_search_found for casted_spellid, amount in _pairs (player1_misc.spell_cast or {}) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then frame1.tooltip.casts_label3:SetText (amount) frame1.tooltip.casts_label2:SetText (COMPARE_FIRSTPLAYER_PERCENT) - + _detalhes.gump:SetFontColor (frame1.tooltip.casts_label3, "white") - + player1_casts = amount extra_search_found = true break end end - + if (not extra_search_found) then frame1.tooltip.casts_label3:SetText ("?") frame1.tooltip.casts_label2:SetText ("?") - + _detalhes.gump:SetFontColor (frame1.tooltip.casts_label3, "silver") _detalhes.gump:SetFontColor (frame1.tooltip.casts_label2, "silver") end @@ -3995,21 +3996,21 @@ function gump:CriaJanelaInfo() frame1.tooltip.uptime_label2:SetText (COMPARE_UNKNOWNDATA) _detalhes.gump:SetFontColor (frame1.tooltip.uptime_label2, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.uptime_label3, "gray") - + frame1.tooltip.casts_label3:SetText ("?") frame1.tooltip.casts_label2:SetText ("?") _detalhes.gump:SetFontColor (frame1.tooltip.casts_label3, "gray") _detalhes.gump:SetFontColor (frame1.tooltip.casts_label2, "gray") end - + frame1.tooltip:Show() end - + if (bar2[2].righttext:GetText()) then - + bar2 [2]:SetStatusBarColor (unpack (bar_color_on_enter)) bar2[2].icon:SetTexCoord (.1, .9, .1, .9) - + -- hits if (hits > bar2[3][1]) then local diff = hits - bar2[3][1] @@ -4030,7 +4031,7 @@ function gump:CriaJanelaInfo() frame2.tooltip.hits_label3:SetText (bar2[3][1]) frame2.tooltip.hits_label2:SetText (" |c" .. plus .. down .. "%|r") end - + --average if (average > bar2[3][2]) then local diff = average - bar2[3][2] @@ -4051,7 +4052,7 @@ function gump:CriaJanelaInfo() frame2.tooltip.average_label3:SetText (_detalhes:ToK2Min (bar2[3][2])) frame2.tooltip.average_label2:SetText (" |c" .. plus .. down .. "%|r") end - + --criticals if (critical > bar2[3][3]) then --[[ @@ -4077,7 +4078,7 @@ function gump:CriaJanelaInfo() --bar2[3][3] = 62 critical = 53 diff = 9 --print (diff, bar2[3][3], critical) --print (math.max (critical * 100, 0.1)) - + down = _math_floor (down) if (down > 999) then down = "" .. 999 @@ -4085,19 +4086,19 @@ function gump:CriaJanelaInfo() frame2.tooltip.crit_label3:SetText (bar2[3][3] .. "%") frame2.tooltip.crit_label2:SetText (" |c" .. plus .. down .. "%|r") end - + --update and total casts if (player2_misc) then - + --uptime local spell = player2_misc.debuff_uptime_spells and player2_misc.debuff_uptime_spells._ActorTable and player2_misc.debuff_uptime_spells._ActorTable [spellid] if (spell and spell.uptime) then local minutos, segundos = _math_floor (spell.uptime/60), _math_floor (spell.uptime%60) - + if (not player1_uptime) then frame2.tooltip.uptime_label3:SetText (minutos .. "m" .. segundos .. "s") frame2.tooltip.uptime_label2:SetText ("0%|r") - + elseif (player1_uptime > spell.uptime) then local diff = player1_uptime - spell.uptime local up = diff / spell.uptime * 100 @@ -4117,23 +4118,23 @@ function gump:CriaJanelaInfo() frame2.tooltip.uptime_label3:SetText (minutos .. "m" .. segundos .. "s") frame2.tooltip.uptime_label2:SetText ("|c" .. plus .. down .. "%|r") end - + _detalhes.gump:SetFontColor (frame2.tooltip.uptime_label3, "white") _detalhes.gump:SetFontColor (frame2.tooltip.uptime_label2, "white") - + else frame2.tooltip.uptime_label3:SetText (COMPARE_UNKNOWNDATA) frame2.tooltip.uptime_label2:SetText (COMPARE_UNKNOWNDATA) _detalhes.gump:SetFontColor (frame2.tooltip.uptime_label3, "gray") _detalhes.gump:SetFontColor (frame2.tooltip.uptime_label2, "gray") end - + --total casts local amt_casts = player2_misc.spell_cast and player2_misc.spell_cast [spellid] if (not amt_casts) then - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) for casted_spellid, amount in _pairs (player2_misc.spell_cast or {}) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then amt_casts = amount break @@ -4141,11 +4142,11 @@ function gump:CriaJanelaInfo() end end if (amt_casts) then - + if (not player1_casts) then frame2.tooltip.casts_label3:SetText (amt_casts) frame2.tooltip.casts_label2:SetText (COMPARE_UNKNOWNDATA) - + elseif (player1_casts > amt_casts) then local diff = player1_casts - amt_casts local up = diff / amt_casts * 100 @@ -4165,7 +4166,7 @@ function gump:CriaJanelaInfo() frame2.tooltip.casts_label3:SetText (amt_casts) frame2.tooltip.casts_label2:SetText ("|c" .. plus .. down .. "%|r") end - + _detalhes.gump:SetFontColor (frame2.tooltip.casts_label3, "white") _detalhes.gump:SetFontColor (frame2.tooltip.casts_label2, "white") else @@ -4183,13 +4184,13 @@ function gump:CriaJanelaInfo() frame2.tooltip:Show() end - + --------------------------------------------------- - + if (bar3[2].righttext:GetText()) then bar3 [2]:SetStatusBarColor (unpack (bar_color_on_enter)) bar3[2].icon:SetTexCoord (.1, .9, .1, .9) - + --hits if (hits > bar3[3][1]) then local diff = hits - bar3[3][1] @@ -4231,7 +4232,7 @@ function gump:CriaJanelaInfo() frame3.tooltip.average_label3:SetText (_detalhes:ToK2Min (bar3[3][2])) frame3.tooltip.average_label2:SetText (" |c" .. plus .. down .. "%|r") end - + --critical if (critical > bar3[3][3]) then --[[ @@ -4266,16 +4267,16 @@ function gump:CriaJanelaInfo() --uptime and casts if (player3_misc) then - + --uptime local spell = player3_misc.debuff_uptime_spells and player3_misc.debuff_uptime_spells._ActorTable and player3_misc.debuff_uptime_spells._ActorTable [spellid] if (spell and spell.uptime) then local minutos, segundos = _math_floor (spell.uptime/60), _math_floor (spell.uptime%60) - + if (not player1_uptime) then frame3.tooltip.uptime_label3:SetText (minutos .. "m" .. segundos .. "s") frame3.tooltip.uptime_label2:SetText ("0%|r") - + elseif (player1_uptime > spell.uptime) then local diff = player1_uptime - spell.uptime local up = diff / spell.uptime * 100 @@ -4295,7 +4296,7 @@ function gump:CriaJanelaInfo() frame3.tooltip.uptime_label3:SetText (minutos .. "m" .. segundos .. "s") frame3.tooltip.uptime_label2:SetText ("|c" .. plus .. down .. "%|r") end - + _detalhes.gump:SetFontColor (frame3.tooltip.uptime_label3, "white") _detalhes.gump:SetFontColor (frame3.tooltip.uptime_label2, "white") else @@ -4304,22 +4305,22 @@ function gump:CriaJanelaInfo() _detalhes.gump:SetFontColor (frame3.tooltip.uptime_label3, "gray") _detalhes.gump:SetFontColor (frame3.tooltip.uptime_label2, "gray") end - + --total casts local amt_casts = player3_misc.spell_cast and player3_misc.spell_cast [spellid] if (not amt_casts) then - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) for casted_spellid, amount in _pairs (player3_misc.spell_cast or {}) do - local casted_spellname = GetSpellInfo (casted_spellid) + local casted_spellname = GetSpellInfo(casted_spellid) if (casted_spellname == spellname) then amt_casts = amount break end end end - + if (amt_casts) then - + if (not player1_casts) then frame3.tooltip.casts_label2:SetText (amt_casts) elseif (player1_casts > amt_casts) then @@ -4341,7 +4342,7 @@ function gump:CriaJanelaInfo() frame3.tooltip.casts_label3:SetText (amt_casts) frame3.tooltip.casts_label2:SetText (" |c" .. plus .. down .. "%|r") end - + _detalhes.gump:SetFontColor (frame3.tooltip.casts_label3, "white") _detalhes.gump:SetFontColor (frame3.tooltip.casts_label2, "white") else @@ -4349,50 +4350,50 @@ function gump:CriaJanelaInfo() frame3.tooltip.casts_label3:SetText ("?") _detalhes.gump:SetFontColor (frame3.tooltip.casts_label3, "gray") _detalhes.gump:SetFontColor (frame3.tooltip.casts_label2, "gray") - end - + end + else frame3.tooltip.casts_label3:SetText (COMPARE_UNKNOWNDATA) frame3.tooltip.casts_label2:SetText (COMPARE_UNKNOWNDATA) frame3.tooltip.uptime_label3:SetText (COMPARE_UNKNOWNDATA) frame3.tooltip.uptime_label2:SetText (COMPARE_UNKNOWNDATA) end - + frame3.tooltip:Show() end end - - local on_leave = function (self) + + local on_leave = function(self) local frame1 = DetailsPlayerComparisonBox1 local frame2 = DetailsPlayerComparisonBox2 local frame3 = DetailsPlayerComparisonBox3 - + local bar1 = frame1.bars [self.index] local bar2 = frame2.bars [self.index] local bar3 = frame3.bars [self.index] - + bar1[2]:SetStatusBarColor (.5, .5, .5, 1) bar1[2].icon:SetTexCoord (0, 1, 0, 1) bar2[2]:SetStatusBarColor (unpack (bar_color)) bar2[2].icon:SetTexCoord (0, 1, 0, 1) bar3[2]:SetStatusBarColor (unpack (bar_color)) bar3[2].icon:SetTexCoord (0, 1, 0, 1) - + frame1.tooltip:Hide() frame2.tooltip:Hide() frame3.tooltip:Hide() end - - local compare_create = function (tab, frame) - - local create_bar = function (name, parent, index, main, is_target) + + local compare_create = function(tab, frame) + + local create_bar = function(name, parent, index, main, is_target) local y = ((index-1) * -15) - 7 - + local spellicon = parent:CreateTexture (nil, "overlay") spellicon:SetSize (14, 14) spellicon:SetPoint ("topleft", parent, "topleft", 4, y) spellicon:SetTexture ([[Interface\InventoryItems\WoWUnknownItem01]]) - + local bar = CreateFrame ("StatusBar", name, parent,"BackdropTemplate") bar.index = index bar:SetPoint ("topleft", spellicon, "topright", 0, 0) @@ -4400,15 +4401,15 @@ function gump:CriaJanelaInfo() bar:SetStatusBarTexture ([[Interface\AddOns\Details\images\bar_serenity]]) bar:SetStatusBarColor (.5, .5, .5, 1) bar:SetAlpha (ALPHA_BLEND_AMOUNT) - + bar:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) bar:SetBackdropColor (1, 1, 1, 0.1) - + bar:SetMinMaxValues (0, 100) bar:SetValue (100) bar:SetHeight (14) bar.icon = spellicon - + if (is_target) then bar:SetScript ("OnEnter", on_enter_target) bar:SetScript ("OnLeave", on_leave_target) @@ -4416,13 +4417,13 @@ function gump:CriaJanelaInfo() bar:SetScript ("OnEnter", on_enter) bar:SetScript ("OnLeave", on_leave) end - + bar.lefttext = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") - + local _, size, flags = bar.lefttext:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") bar.lefttext:SetFont (font, 11) - + bar.lefttext:SetPoint ("left", bar, "left", 4, 0) bar.lefttext:SetJustifyH ("left") bar.lefttext:SetTextColor (1, 1, 1, 1) @@ -4433,51 +4434,51 @@ function gump:CriaJanelaInfo() else bar.lefttext:SetWidth (110) end - + bar.righttext = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") - + local _, size, flags = bar.righttext:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") bar.righttext:SetFont (font, 11) - + bar.righttext:SetPoint ("right", bar, "right", -2, 0) bar.righttext:SetJustifyH ("right") bar.righttext:SetTextColor (1, 1, 1, 1) - + bar.righttext2 = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") - + local _, size, flags = bar.righttext2:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") bar.righttext2:SetFont (font, 11) - + bar.righttext2:SetPoint ("right", bar, "right", -42, 0) bar.righttext2:SetJustifyH ("right") bar.righttext2:SetTextColor (1, 1, 1, 1) - + tinsert (parent.bars, {spellicon, bar, {0, 0, 0}}) end - - local create_tooltip = function (name) + + local create_tooltip = function(name) local tooltip = CreateFrame ("frame", name, UIParent,"BackdropTemplate") - + _detalhes.gump:CreateBorder (tooltip) - + tooltip:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true}) tooltip:SetBackdropColor (0, 0, 0, 1) tooltip:SetBackdropBorderColor (0, 0, 0, 1) tooltip:SetSize (275, 77) tooltip:SetFrameStrata ("tooltip") - + local y = -3 local x_start = 2 - + local background = tooltip:CreateTexture (nil, "border") background:SetTexture ([[Interface\SPELLBOOK\Spellbook-Page-1]]) background:SetTexCoord (.6, 0.1, 0, 0.64453125) background:SetVertexColor (0, 0, 0, 0.2) background:SetPoint ("topleft", tooltip, "topleft", 0, 0) background:SetPoint ("bottomright", tooltip, "bottomright", 0, 0) - + tooltip.casts_label = tooltip:CreateFontString (nil, "overlay", "GameFontHighlightSmall") tooltip.casts_label:SetPoint ("topleft", tooltip, "topleft", x_start, -2 + (y*0)) tooltip.casts_label:SetText ("Total Casts:") @@ -4490,7 +4491,7 @@ function gump:CriaJanelaInfo() tooltip.casts_label3:SetPoint ("topright", tooltip, "topright", -x_start - 46, -2 + (y*0)) tooltip.casts_label3:SetText ("0") tooltip.casts_label3:SetJustifyH ("right") - + tooltip.hits_label = tooltip:CreateFontString (nil, "overlay", "GameFontHighlightSmall") tooltip.hits_label:SetPoint ("topleft", tooltip, "topleft", x_start, -14 + (y*1)) tooltip.hits_label:SetText ("Total Hits:") @@ -4503,7 +4504,7 @@ function gump:CriaJanelaInfo() tooltip.hits_label3:SetPoint ("topright", tooltip, "topright", -x_start - 46, -14 + (y*1)) tooltip.hits_label3:SetText ("0") tooltip.hits_label3:SetJustifyH ("right") - + tooltip.average_label = tooltip:CreateFontString (nil, "overlay", "GameFontHighlightSmall") tooltip.average_label:SetPoint ("topleft", tooltip, "topleft", x_start, -26 + (y*2)) tooltip.average_label:SetText ("Average:") @@ -4516,7 +4517,7 @@ function gump:CriaJanelaInfo() tooltip.average_label3:SetPoint ("topright", tooltip, "topright", -x_start - 46, -26 + (y*2)) tooltip.average_label3:SetText ("0") tooltip.average_label3:SetJustifyH ("right") - + tooltip.crit_label = tooltip:CreateFontString (nil, "overlay", "GameFontHighlightSmall") tooltip.crit_label:SetPoint ("topleft", tooltip, "topleft", x_start, -38 + (y*3)) tooltip.crit_label:SetText ("Critical:") @@ -4529,7 +4530,7 @@ function gump:CriaJanelaInfo() tooltip.crit_label3:SetPoint ("topright", tooltip, "topright", -x_start - 46, -38 + (y*3)) tooltip.crit_label3:SetText ("0") tooltip.crit_label3:SetJustifyH ("right") - + tooltip.uptime_label = tooltip:CreateFontString (nil, "overlay", "GameFontHighlightSmall") tooltip.uptime_label:SetPoint ("topleft", tooltip, "topleft", x_start, -50 + (y*4)) tooltip.uptime_label:SetText ("Uptime:") @@ -4542,13 +4543,13 @@ function gump:CriaJanelaInfo() tooltip.uptime_label3:SetPoint ("topright", tooltip, "topright", -x_start - 46, -50 + (y*4)) tooltip.uptime_label3:SetText ("0") tooltip.uptime_label3:SetJustifyH ("right") - + local bg_color = {0.5, 0.5, 0.5} local bg_texture = [[Interface\AddOns\Details\images\bar_background]] local bg_alpha = 1 local bg_height = 12 local colors = {{26/255, 26/255, 26/255}, {19/255, 19/255, 19/255}, {26/255, 26/255, 26/255}, {34/255, 39/255, 42/255}, {42/255, 51/255, 60/255}} - + for i = 1, 5 do local bg_line1 = tooltip:CreateTexture (nil, "artwork") bg_line1:SetTexture (bg_texture) @@ -4558,11 +4559,11 @@ function gump:CriaJanelaInfo() bg_line1:SetAlpha (bg_alpha) bg_line1:SetVertexColor (unpack (colors[i])) end - + return tooltip end - local create_tooltip_target = function (name) + local create_tooltip_target = function(name) local tooltip = CreateFrame ("frame", name, UIParent,"BackdropTemplate") tooltip:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true}) tooltip:SetBackdropColor (0, 0, 0, 1) @@ -4570,11 +4571,11 @@ function gump:CriaJanelaInfo() tooltip:SetSize (175, 67) tooltip:SetFrameStrata ("tooltip") tooltip.bars = {} - + _detalhes.gump:CreateBorder (tooltip) - + function tooltip:Reset() - for index, bar in _ipairs (tooltip.bars) do + for index, bar in _ipairs (tooltip.bars) do bar [1]:SetTexture ("") bar [2].lefttext:SetText ("") bar [2].righttext:SetText ("") @@ -4583,11 +4584,11 @@ function gump:CriaJanelaInfo() bar [2].bg:Hide() end end - + local bars_colors = {{19/255, 19/255, 19/255}, {26/255, 26/255, 26/255}} - + function tooltip:CreateBar (index) - + if (index) then if (index > #tooltip.bars+1) then for i = #tooltip.bars+1, index-1 do @@ -4595,16 +4596,16 @@ function gump:CriaJanelaInfo() end end end - + local index = #tooltip.bars + 1 local y = ((index-1) * -15) - 2 local parent = tooltip - + local spellicon = parent:CreateTexture (nil, "overlay") spellicon:SetSize (14, 14) spellicon:SetPoint ("topleft", parent, "topleft", 1, y) spellicon:SetTexture ([[Interface\InventoryItems\WoWUnknownItem01]]) - + local bar = CreateFrame ("StatusBar", name .. "Bar" .. index, parent, "BackdropTemplate") bar.index = index bar:SetPoint ("topleft", spellicon, "topright", 0, 0) @@ -4615,39 +4616,39 @@ function gump:CriaJanelaInfo() bar:SetValue (0) bar:SetHeight (14) bar.icon = spellicon - + bar.lefttext = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") local _, size, flags = bar.lefttext:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") - bar.lefttext:SetFont (font, 11) + bar.lefttext:SetFont (font, 11) bar.lefttext:SetPoint ("left", bar, "left", 2, 0) bar.lefttext:SetJustifyH ("left") bar.lefttext:SetTextColor (1, 1, 1, 1) bar.lefttext:SetNonSpaceWrap (true) bar.lefttext:SetWordWrap (false) - + if (name:find ("1")) then bar.lefttext:SetWidth (110) else bar.lefttext:SetWidth (80) end - - bar.righttext = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") + + bar.righttext = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") local _, size, flags = bar.righttext:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") - bar.righttext:SetFont (font, 11) + bar.righttext:SetFont (font, 11) bar.righttext:SetPoint ("right", bar, "right", -2, 0) bar.righttext:SetJustifyH ("right") bar.righttext:SetTextColor (1, 1, 1, 1) - - bar.righttext2 = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") + + bar.righttext2 = bar:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") local _, size, flags = bar.righttext2:GetFont() local font = SharedMedia:Fetch ("font", "Arial Narrow") - bar.righttext2:SetFont (font, 11) + bar.righttext2:SetFont (font, 11) bar.righttext2:SetPoint ("right", bar, "right", -46, 0) bar.righttext2:SetJustifyH ("right") bar.righttext2:SetTextColor (1, 1, 1, 1) - + local bg_line1 = bar:CreateTexture (nil, "artwork") bg_line1:SetTexture ([[Interface\AddOns\Details\images\bar_background]]) bg_line1:SetAllPoints() @@ -4658,57 +4659,57 @@ function gump:CriaJanelaInfo() bg_line1:SetVertexColor (_unpack (bars_colors [2])) end bar.bg = bg_line1 - + local object = {spellicon, bar} tinsert (tooltip.bars, object) return object end - + local background = tooltip:CreateTexture (nil, "artwork") background:SetTexture ([[Interface\SPELLBOOK\Spellbook-Page-1]]) background:SetTexCoord (.6, 0.1, 0, 0.64453125) background:SetVertexColor (0, 0, 0, 0.6) background:SetPoint ("topleft", tooltip, "topleft", 2, -4) background:SetPoint ("bottomright", tooltip, "bottomright", -4, 2) - + return tooltip end - + local frame1 = CreateFrame ("scrollframe", "DetailsPlayerComparisonBox1", frame, "FauxScrollFrameTemplate,BackdropTemplate") - frame1:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_comparison_box) end) + frame1:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_comparison_box) end) frame1:SetSize (spell_compare_frame_width[1], spell_compare_frame_height) frame1:SetPoint ("topleft", frame, "topleft", xLocation, yLocation) - _detalhes.gump:ReskinSlider (frame1) - + _detalhes.gump:ReskinSlider(frame1) + frame1:SetBackdrop (frame_backdrop) frame1:SetBackdropColor (unpack (frame_backdrop_color)) frame1:SetBackdropBorderColor (unpack (frame_backdrop_border_color)) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (frame1) - + frame1.bars = {} frame1.tab = tab frame1.tooltip = create_tooltip ("DetailsPlayerComparisonBox1Tooltip") frame1.tooltip:SetWidth (spell_compare_frame_width[1]) - + local playername1 = frame1:CreateFontString (nil, "overlay", "GameFontNormal") playername1:SetPoint ("bottomleft", frame1, "topleft", 2, 0) playername1:SetText ("Player 1") frame1.name_label = playername1 - + --criar as barras do frame1 for i = 1, 12 do create_bar ("DetailsPlayerComparisonBox1Bar"..i, frame1, i, true) end - + --cria o box dos targets local target1 = CreateFrame ("scrollframe", "DetailsPlayerComparisonTarget1", frame, "FauxScrollFrameTemplate,BackdropTemplate") - target1:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_target_box) end) + target1:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_target_box) end) target1:SetSize (spell_compare_frame_width[1], target_compare_frame_height) target1:SetPoint ("topleft", frame1, "bottomleft", 0, -10) - _detalhes.gump:ReskinSlider (target1) - + _detalhes.gump:ReskinSlider(target1) + target1:SetBackdrop (frame_backdrop) target1:SetBackdropColor (unpack (frame_backdrop_color)) target1:SetBackdropBorderColor (unpack (frame_backdrop_border_color)) @@ -4716,44 +4717,44 @@ function gump:CriaJanelaInfo() target1.tab = tab target1.tooltip = create_tooltip_target ("DetailsPlayerComparisonTarget1Tooltip") target1.tooltip:SetWidth (spell_compare_frame_width[1]) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (target1) - + --criar as barras do target1 for i = 1, targetBars do create_bar ("DetailsPlayerComparisonTarget1Bar"..i, target1, i, true, true) end - + -------------------------------------------- local frame2 = CreateFrame ("frame", "DetailsPlayerComparisonBox2", frame,"BackdropTemplate") local frame3 = CreateFrame ("frame", "DetailsPlayerComparisonBox3", frame,"BackdropTemplate") - + frame2:SetPoint ("topleft", frame1, "topright", 27, 0) frame2:SetSize (spell_compare_frame_width[2], spell_compare_frame_height) - + frame2:SetBackdrop (frame_backdrop) frame2:SetBackdropColor (unpack (frame_backdrop_color)) frame2:SetBackdropBorderColor (unpack (frame_backdrop_border_color)) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (frame2) - + frame2.bars = {} frame2.tooltip = create_tooltip ("DetailsPlayerComparisonBox2Tooltip") frame2.tooltip:SetWidth (spell_compare_frame_width[2]) - + local playername2 = frame2:CreateFontString (nil, "overlay", "GameFontNormal") playername2:SetPoint ("bottomleft", frame2, "topleft", 2, 0) playername2:SetText ("Player 2") frame2.name_label = playername2 - + local playername2_percent = frame2:CreateFontString (nil, "overlay", "GameFontHighlightSmall") playername2_percent:SetPoint ("bottomright", frame2, "topright", -2, 0) playername2_percent:SetText ("Player 1 %") playername2_percent:SetTextColor (.6, .6, .6) - + local noPLayersToShow = frame2:CreateFontString (nil, "overlay", "GameFontHighlightSmall") noPLayersToShow:SetPoint ("center") noPLayersToShow:SetText ("There's no more players to compare (with the same class/spec)") @@ -4763,15 +4764,15 @@ function gump:CriaJanelaInfo() _detalhes.gump:SetFontSize (noPLayersToShow, 14) _detalhes.gump:SetFontColor (noPLayersToShow, "gray") frame2.NoPLayersToShow = noPLayersToShow - - + + frame2.name_label_percent = playername2_percent - + --criar as barras do frame2 for i = 1, 12 do create_bar ("DetailsPlayerComparisonBox2Bar"..i, frame2, i) end - + --cria o box dos targets local target2 = CreateFrame ("frame", "DetailsPlayerComparisonTarget2", frame,"BackdropTemplate") target2:SetSize (spell_compare_frame_width[2], target_compare_frame_height) @@ -4782,41 +4783,41 @@ function gump:CriaJanelaInfo() target2.bars = {} target2.tooltip = create_tooltip_target ("DetailsPlayerComparisonTarget2Tooltip") target2.tooltip:SetWidth (spell_compare_frame_width[2]) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (target2) - + --criar as barras do target2 for i = 1, targetBars do create_bar ("DetailsPlayerComparisonTarget2Bar"..i, target2, i, nil, true) end - + ----------------------------------------------------------------------- - + frame3:SetPoint ("topleft", frame2, "topright", 5, 0) frame3:SetSize (spell_compare_frame_width[3], spell_compare_frame_height) frame3:SetBackdrop (frame_backdrop) frame3:SetBackdropColor (unpack (frame_backdrop_color)) frame3:SetBackdropBorderColor (unpack (frame_backdrop_border_color)) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (frame3) - + frame3.bars = {} frame3.tooltip = create_tooltip ("DetailsPlayerComparisonBox3Tooltip") frame3.tooltip:SetWidth (spell_compare_frame_width[3]) - + local playername3 = frame3:CreateFontString (nil, "overlay", "GameFontNormal") playername3:SetPoint ("bottomleft", frame3, "topleft", 2, 0) playername3:SetText ("Player 3") frame3.name_label = playername3 - + local playername3_percent = frame3:CreateFontString (nil, "overlay", "GameFontHighlightSmall") playername3_percent:SetPoint ("bottomright", frame3, "topright", -2, 0) playername3_percent:SetText ("Player 1 %") playername3_percent:SetTextColor (.6, .6, .6) frame3.name_label_percent = playername3_percent - + local noPLayersToShow = frame3:CreateFontString (nil, "overlay", "GameFontHighlightSmall") noPLayersToShow:SetPoint ("center") @@ -4827,12 +4828,12 @@ function gump:CriaJanelaInfo() _detalhes.gump:SetFontSize (noPLayersToShow, 14) _detalhes.gump:SetFontColor (noPLayersToShow, "gray") frame3.NoPLayersToShow = noPLayersToShow - + --criar as barras do frame3 for i = 1, 12 do create_bar ("DetailsPlayerComparisonBox3Bar"..i, frame3, i) end - + --cria o box dos targets local target3 = CreateFrame ("frame", "DetailsPlayerComparisonTarget3", frame,"BackdropTemplate") target3:SetSize (spell_compare_frame_width[3], target_compare_frame_height) @@ -4843,17 +4844,17 @@ function gump:CriaJanelaInfo() target3.bars = {} target3.tooltip = create_tooltip_target ("DetailsPlayerComparisonTarget3Tooltip") target3.tooltip:SetWidth (spell_compare_frame_width[3]) - + --override backdrop settings and use the framework defaults Details.gump:ApplyStandardBackdrop (target3) - + --criar as barras do target1 for i = 1, targetBars do create_bar ("DetailsPlayerComparisonTarget3Bar"..i, target3, i, nil, true) end end - - + + -- ~compare local iconTableCompare = { texture = [[Interface\AddOns\Details\images\icons]], @@ -4862,15 +4863,15 @@ function gump:CriaJanelaInfo() width = 16, height = 14, } - + _detalhes:CreatePlayerDetailsTab ("Compare", --[1] tab name Loc ["STRING_INFO_TAB_COMPARISON"], --[2] localized name - function (tabOBject, playerObject) --[3] condition - + function(tabOBject, playerObject) --[3] condition + if (info.atributo > 2) then return false end - + local same_class = {} local class = playerObject.classe local my_spells = {} @@ -4880,16 +4881,16 @@ function gump:CriaJanelaInfo() my_spells [spellid] = true my_spells_total = my_spells_total + 1 end - + tabOBject.players = {} tabOBject.player = playerObject tabOBject.spells_amt = my_spells_total - + if (not info.instancia.showing) then return false end - for index, actor in _ipairs (info.instancia.showing [info.atributo]._ActorTable) do + for index, actor in _ipairs (info.instancia.showing [info.atributo]._ActorTable) do if (actor.classe == class and actor ~= playerObject) then local same_spells = 0 @@ -4898,7 +4899,7 @@ function gump:CriaJanelaInfo() same_spells = same_spells + 1 end end - + local match_percentage = same_spells / max (my_spells_total, 0.000001) * 100 if (match_percentage > 30) then @@ -4906,12 +4907,12 @@ function gump:CriaJanelaInfo() end end end - + if (#tabOBject.players > 0) then --tutorial flash local blink = _detalhes:GetTutorialCVar ("DETAILS_INFO_TUTORIAL2") or 0 if (type (blink) == "number" and blink < 10) then - + if (not tabOBject.FlashAnimation) then local flashAnimation = tabOBject:CreateTexture (nil, "overlay") flashAnimation:SetPoint ("topleft", tabOBject.widget, "topleft", 1, -1) @@ -4922,34 +4923,34 @@ function gump:CriaJanelaInfo() DetailsFramework:CreateAnimation (flashHub, "alpha", 1, 1, 0, 0.3) DetailsFramework:CreateAnimation (flashHub, "alpha", 2, 1, 0.45, 0) flashHub:SetLooping ("REPEAT") - + tabOBject.FlashAnimation = flashHub end - + _detalhes:SetTutorialCVar ("DETAILS_INFO_TUTORIAL2", blink+1) tabOBject.FlashAnimation:Play() end - + return true end - + --return false return true --debug? - end, - + end, + compare_fill, --[4] fill function - + nil, --[5] onclick - + compare_create, --[6] oncreate iconTableCompare --icon table ) - + -- ~compare ~newcompare -- ~compare - + -- ~tab ~tabs function este_gump:ShowTabs() local tabsShown = 0 @@ -4960,14 +4961,14 @@ function gump:CriaJanelaInfo() for index = 1, #tablePool do local tab = tablePool[index] - + if (tab:condition(info.jogador, info.atributo, info.sub_atributo) and not tab.replaced) then --test if can show the tutorial for the comparison tab if (tab.tabname == "Compare") then --_detalhes:SetTutorialCVar ("DETAILS_INFO_TUTORIAL1", false) if (not _detalhes:GetTutorialCVar ("DETAILS_INFO_TUTORIAL1")) then _detalhes:SetTutorialCVar ("DETAILS_INFO_TUTORIAL1", true) - + local alert = CreateFrame ("frame", "DetailsInfoPopUp1", info, "DetailsHelpBoxTemplate") alert.ArrowUP:Show() alert.ArrowGlowUP:Show() @@ -4976,16 +4977,16 @@ function gump:CriaJanelaInfo() alert:Show() end end - + tab:Show() tabsShown = tabsShown + 1 - + tab:ClearAllPoints() - + --get the button width local buttonTemplate = gump:GetTemplate ("button", "DETAILS_TAB_BUTTON_TEMPLATE") local buttonWidth = buttonTemplate.width + 1 - + --pixelutil might not be compatible with classic wow if (PixelUtil) then PixelUtil.SetSize (tab, buttonTemplate.width, buttonTemplate.height) @@ -5004,18 +5005,18 @@ function gump:CriaJanelaInfo() tab:SetPoint ("bottomright", info, "topright", -514 + (buttonWidth * tabsShown), -72) end end - + tab:SetAlpha (0.8) else tab.frame:Hide() tab:Hide() end end - + if (tabsShown < 2) then tablePool[1]:SetPoint ("BOTTOMLEFT", info.container_barras, "TOPLEFT", 490 - (94 * (1-0)), 1) end - + --selected by default tablePool[1]:Click() end @@ -5027,12 +5028,12 @@ function gump:CriaJanelaInfo() tab.frame:Hide() end end) - + --DetailsInfoWindowTab1Text:SetText ("Avoidance") este_gump.tipo = 1 --> tipo da janela // 1 = janela normal - + return este_gump - + end info.selectedTab = "Summary" @@ -5041,7 +5042,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f if (not tabname) then tabname = "unnamed" end - + --create a button for the tab local newTabButton = gump:CreateButton (info, onclick, 20, 20, nil, nil, nil, nil, nil, "DetailsPlayerBreakdownWindowTab" .. tabname) newTabButton:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE") @@ -5052,14 +5053,14 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f newTabButton:SetFrameStrata ("HIGH") newTabButton:SetFrameLevel (info:GetFrameLevel()+1) newTabButton:Hide() - + newTabButton.condition = condition newTabButton.tabname = tabname newTabButton.localized_name = localized_name newTabButton.onclick = onclick newTabButton.fillfunction = fillfunction newTabButton.last_actor = {} - + newTabButton.frame = CreateFrame ("frame", "DetailsPDWTabFrame" .. tabname, UIParent,"BackdropTemplate") newTabButton.frame:SetParent (info) newTabButton.frame:SetFrameStrata ("HIGH") @@ -5071,15 +5072,15 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f local coords = iconSettings.coords local width = iconSettings.width local height = iconSettings.height - + local overlay, textdistance, leftpadding, textheight, short_method --nil - + newTabButton:SetIcon (texture, width, height, "overlay", coords, overlay, textdistance, leftpadding, textheight, short_method) if (iconSettings.desaturated) then newTabButton.icon:SetDesaturated (true) end end - + if (newTabButton.fillfunction) then newTabButton.frame:SetScript ("OnShow", function() if (newTabButton.last_actor == info.jogador) then @@ -5089,73 +5090,73 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f newTabButton:fillfunction (info.jogador, info.instancia.showing) end) end - + if (oncreate) then oncreate (newTabButton, newTabButton.frame) end - + newTabButton.frame:SetBackdrop({ - edgeFile = [[Interface\Buttons\WHITE8X8]], - edgeSize = 1, + edgeFile = [[Interface\Buttons\WHITE8X8]], + edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], - tileSize = 64, + tileSize = 64, tile = true, insets = {left = 0, right = 0, top = 0, bottom = 0}} ) - + newTabButton.frame:SetBackdropColor (0, 0, 0, 0.3) newTabButton.frame:SetBackdropBorderColor (.3, .3, .3, 0) - + newTabButton.frame:SetPoint ("TOPLEFT", info.container_barras, "TOPLEFT", 0, 2) newTabButton.frame:SetPoint ("bottomright", info, "bottomright", -3, 3) newTabButton.frame:SetSize (569, 274) - + newTabButton.frame:Hide() - + newTabButton.replaces = replace _detalhes.player_details_tabs [#_detalhes.player_details_tabs+1] = newTabButton - + if (not onclick) then --> hide all tabs - newTabButton.OnShowFunc = function (self) + newTabButton.OnShowFunc = function(self) self = self.MyObject or self - + for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do tab.frame:Hide() tab:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE") end - + self:SetTemplate ("DETAILS_TAB_BUTTONSELECTED_TEMPLATE") self.frame:Show() info.selectedTab = self.tabname end - + newTabButton:SetScript ("OnClick", newTabButton.OnShowFunc) else --> custom - newTabButton.OnShowFunc = function (self) + newTabButton.OnShowFunc = function(self) self = self.MyObject or self - + for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do tab.frame:Hide() tab:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE") end - + self:SetTemplate ("DETAILS_TAB_BUTTONSELECTED_TEMPLATE") - + info.selectedTab = self.tabname - + --run onclick func local result, errorText = pcall (self.onclick) if (not result) then print (errorText) end end - + newTabButton:SetScript ("OnClick", newTabButton.OnShowFunc) end - - newTabButton:SetScript ("PostClick", function (self) + + newTabButton:SetScript ("PostClick", function(self) CurrentTab = self.tabname or self.MyObject.tabname if (CurrentTab ~= "Summary") then @@ -5168,49 +5169,49 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f end end end) - + return newTabButton, newTabButton.frame end function _detalhes.playerDetailWindow:monta_relatorio (botao) - + local atributo = info.atributo local sub_atributo = info.sub_atributo local player = info.jogador local instancia = info.instancia local amt = _detalhes.report_lines - + if (not player) then _detalhes:Msg ("Player not found.") return end - + local report_lines - + if (botao == 1) then --> bot�o da esquerda - + if (atributo == 1 and sub_atributo == 4) then --> friendly fire report_lines = {"Details!: " .. player.nome .. " " .. Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"] .. ":"} - + elseif (atributo == 1 and sub_atributo == 3) then --> damage taken report_lines = {"Details!: " .. player.nome .. " " .. Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"] .. ":"} - + else -- report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_SPELLSOF"] .. " " .. player.nome .. " (" .. _detalhes.sub_atributos [atributo].lista [sub_atributo] .. ")"} report_lines = {"Details!: " .. player.nome .. " - " .. _detalhes.sub_atributos [atributo].lista [sub_atributo] .. ""} - + end - - for index, barra in _ipairs (info.barras1) do + + for index, barra in _ipairs (info.barras1) do if (barra:IsShown()) then local spellid = barra.show if (atributo == 1 and sub_atributo == 4) then --> friendly fire report_lines [#report_lines+1] = barra.lineText1:GetText() .. ": " .. barra.lineText4:GetText() - + elseif (type (spellid) == "number" and spellid > 10) then - local link = GetSpellLink (spellid) + local link = GetSpellLink(spellid) report_lines [#report_lines+1] = index .. ". " .. link .. ": " .. barra.lineText4:GetText() else local spellname = barra.lineText1:GetText():gsub ((".*%."), "") @@ -5223,14 +5224,14 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) break end end - + elseif (botao == 3) then --> bot�o dos alvos - + if (atributo == 1 and sub_atributo == 3) then print (Loc ["STRING_ACTORFRAME_NOTHING"]) return end - + report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTARGETS"] .. " " .. _detalhes.sub_atributos [1].lista [1] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.nome} for index, barra in _ipairs (info.barras2) do @@ -5241,9 +5242,9 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) break end end - + elseif (botao == 2) then --> bot�o da direita - + --> diferentes tipos de amostragem na caixa da direita --dano --damage done --dps --heal if ((atributo == 1 and (sub_atributo == 1 or sub_atributo == 2)) or (atributo == 2)) then @@ -5251,16 +5252,16 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) print (Loc ["STRING_ACTORFRAME_NOTHING"]) return end - local nome = _GetSpellInfo (player.detalhes) - report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTO"] .. " " .. _detalhes.sub_atributos [atributo].lista [sub_atributo] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.nome, + local nome = _GetSpellInfo(player.detalhes) + report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTO"] .. " " .. _detalhes.sub_atributos [atributo].lista [sub_atributo] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.nome, Loc ["STRING_ACTORFRAME_SPELLDETAILS"] .. ": " .. nome} - + for i = 1, 5 do - + --> pega os dados dos quadrados --> Aqui mostra o resumo de todos os quadrados... local caixa = info.grupos_detalhes [i] if (caixa.bg:IsShown()) then - + local linha = "" local nome2 = caixa.nome2:GetText() --> golpes @@ -5270,43 +5271,43 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) else linha = linha..caixa.nome:GetText().." "..nome2.." / " end - end - + end + local dano = caixa.dano:GetText() --> dano if (dano and dano ~= "") then linha = linha..dano.." / " end - + local media = caixa.dano_media:GetText() --> media if (media and media ~= "") then linha = linha..media.." / " - end - + end + local dano_dps = caixa.dano_dps:GetText() if (dano_dps and dano_dps ~= "") then linha = linha..dano_dps.." / " end - + local dano_porcento = caixa.dano_porcento:GetText() if (dano_porcento and dano_porcento ~= "") then linha = linha..dano_porcento.." " end - + report_lines [#report_lines+1] = linha - + end - + if (i == amt) then break end - + end - + --dano --damage tanken (mostra as magias que o alvo usou) elseif ( (atributo == 1 and sub_atributo == 3) or atributo == 3) then if (player.detalhes) then report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTO"] .. " " .. _detalhes.sub_atributos [1].lista [1] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.detalhes.. " " .. Loc ["STRING_ACTORFRAME_REPORTAT"] .. " " .. player.nome} - for index, barra in _ipairs (info.barras3) do + for index, barra in _ipairs (info.barras3) do if (barra:IsShown()) then report_lines [#report_lines+1] = barra.lineText1:GetText().." ....... ".. barra.lineText4:GetText() end @@ -5318,30 +5319,30 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) report_lines = {} end end - + elseif (botao >= 11) then --> primeira caixa dos detalhes - + botao = botao - 10 - + local nome if (_type (spellid) == "string") then --> is a pet else - nome = _GetSpellInfo (player.detalhes) - local spelllink = GetSpellLink (player.detalhes) + nome = _GetSpellInfo(player.detalhes) + local spelllink = GetSpellLink(player.detalhes) if (spelllink) then nome = spelllink end end - + if (not nome) then nome = "" end - report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTO"] .. " " .. _detalhes.sub_atributos [atributo].lista [sub_atributo].. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.nome, - Loc ["STRING_ACTORFRAME_SPELLDETAILS"] .. ": " .. nome} - + report_lines = {"Details! " .. Loc ["STRING_ACTORFRAME_REPORTTO"] .. " " .. _detalhes.sub_atributos [atributo].lista [sub_atributo].. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] .. " " .. player.nome, + Loc ["STRING_ACTORFRAME_SPELLDETAILS"] .. ": " .. nome} + local caixa = info.grupos_detalhes [botao] - + local linha = "" local nome2 = caixa.nome2:GetText() --> golpes if (nome2 and nome2 ~= "") then @@ -5375,48 +5376,48 @@ function _detalhes.playerDetailWindow:monta_relatorio (botao) --> remove a cor da school linha = linha:gsub ("|c%x?%x?%x?%x?%x?%x?%x?%x?", "") linha = linha:gsub ("|r", "") - + report_lines [#report_lines+1] = linha - + end - + --local report_lines = {"Details! Relatorio para ".._detalhes.sub_atributos [self.atributo].lista [self.sub_atributo]} - + --> pega o conte�do da janela da direita - + return instancia:envia_relatorio (report_lines) end -local row_backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", +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) +local row_on_enter = function(self) if (info.fading_in or info.faded) then return end - + self.mouse_over = true for index, block in pairs (_detalhes.playerDetailWindow.grupos_detalhes) do detalhe_infobg_onleave (block.bg) end - + --> aumenta o tamanho da barra self:SetHeight (CONST_BAR_HEIGHT + 1) --> 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 (row_backdrop) + 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") - + 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 @@ -5431,27 +5432,27 @@ local row_on_enter = function (self) end elseif (self.isMain) then - + if (IsShiftKeyDown()) then if (type (self.show) == "number") then GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") GameTooltip:AddLine (Loc ["ABILITY_ID"] .. ": " .. self.show) - GameTooltip:Show() + GameTooltip:Show() end end - + if (self.show == 98021) then GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") GameTooltip:AddLine (Loc ["STRING_SPIRIT_LINK_TOTEM_DESC"]) - GameTooltip:Show() + GameTooltip:Show() end - + --> da zoom no icone self.icone:SetWidth (CONST_BAR_HEIGHT + 2) self.icone:SetHeight (CONST_BAR_HEIGHT + 2) --> poe a alfa do icone em 1.0 self.icone:SetAlpha (1) - + --> mostrar temporariamente o conteudo da barra nas caixas de detalhes if (not info.mostrando) then --> n�o esta mostrando nada na direita info.mostrando = self --> agora o mostrando � igual a esta barra @@ -5464,7 +5465,7 @@ local row_on_enter = function (self) end end -local row_on_leave = function (self) +local row_on_leave = function(self) if (self.fading_in or self.faded or not self:IsShown() or self.hidden) then return end @@ -5475,39 +5476,39 @@ local row_on_leave = function (self) self:SetHeight (CONST_BAR_HEIGHT) --> volta com o alfa antigo da barra que era de 0.9 self:SetAlpha(0.9) - + --> volto o background ao normal - self:SetBackdrop (row_backdrop_onleave) + self:SetBackdrop (row_backdrop_onleave) self:SetBackdropBorderColor (0, 0, 0, 0) self:SetBackdropColor (0, 0, 0, 0) - - GameTooltip:Hide() - + + GameTooltip:Hide() + GameCooltip:Hide() - + if (self.isMain) then --> retira o zoom no icone self.icone:SetWidth (CONST_BAR_HEIGHT) self.icone:SetHeight (CONST_BAR_HEIGHT) --> volta com a alfa antiga da barra self.icone:SetAlpha (1) - + --> remover o conte�do que estava sendo mostrado na direita if (info.mostrando_mouse_over) then info.mostrando = nil info.mostrando_mouse_over = false info.showing = nil - + info.jogador.detalhes = nil gump:HidaAllDetalheInfo() end - + elseif (self.isAlvo) then self:SetHeight (CONST_TARGET_HEIGHT) end end -local row_on_mousedown = function (self, button) +local row_on_mousedown = function(self, button) if (self.fading_in) then return end @@ -5519,14 +5520,14 @@ local row_on_mousedown = function (self, button) if (button == "RightButton" and not info.isMoving) then _detalhes:FechaJanelaInfo() - + elseif (not info.isMoving and button == "LeftButton" and not self.isDetalhe) then info:StartMoving() info.isMoving = true end end -local row_on_mouseup = function (self, button) +local row_on_mouseup = function(self, button) if (self.fading_in) then return end @@ -5541,51 +5542,51 @@ local row_on_mouseup = function (self, button) y = _math_floor (y) if ((self.mouse_down+0.4 > _GetTime() and (x == self.x and y == self.y)) or (x == self.x and y == self.y)) then --> setar os textos - + if (self.isMain) then --> se n�o for uma barra de alvo - - local barra_antiga = info.mostrando + + local barra_antiga = info.mostrando if (barra_antiga and not info.mostrando_mouse_over) then - + barra_antiga.textura:SetStatusBarColor (1, 1, 1, 1) --> volta a textura normal barra_antiga.on_focus = false --> n�o esta mais no foco --> clicou na mesma barra - if (barra_antiga == self) then --> + if (barra_antiga == self) then --> info.mostrando_mouse_over = true return - + --> clicou em outra barra else --> clicou em outra barra e trocou o foco barra_antiga:SetAlpha (.9) --> volta a alfa antiga - + info.mostrando = self info.showing = i - + info.jogador.detalhes = self.show info.jogador:MontaDetalhes (self.show, self) - + self:SetAlpha (1) self.textura:SetStatusBarColor (129/255, 125/255, 69/255, 1) self.on_focus = true return end end - + --> nao tinha barras pressionadas info.mostrando_mouse_over = false self:SetAlpha (1) self.textura:SetStatusBarColor (129/255, 125/255, 69/255, 1) self.on_focus = true end - + end end local function SetBarraScripts (esta_barra, instancia, i) - + esta_barra._index = i - + esta_barra:SetScript ("OnEnter", row_on_enter) esta_barra:SetScript ("OnLeave", row_on_leave) @@ -5600,7 +5601,7 @@ local function CriaTexturaBarra(newLine) newLine.textura:SetAllPoints(newLine) newLine.textura:SetAlpha(0.5) newLine.textura:Show() - + local textureObject = newLine.textura:CreateTexture(nil, "artwork") local texturePath = SharedMedia:Fetch("statusbar", _detalhes.player_details_window.bar_texture) textureObject:SetTexture(texturePath) @@ -5613,12 +5614,12 @@ local function CriaTexturaBarra(newLine) backgroundTexture:SetAllPoints() backgroundTexture:SetColorTexture(.5, .5, .5, 0.18) newLine.textura.bg = backgroundTexture - + if (newLine.targets) then newLine.targets:SetParent(newLine.textura) newLine.targets:SetFrameLevel(newLine.textura:GetFrameLevel()+2) end - + --create the left text newLine.lineText1 = newLine:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") newLine.lineText1:SetPoint("LEFT", newLine.icone, "RIGHT", 2, 0) @@ -5638,10 +5639,10 @@ local function CriaTexturaBarra(newLine) newLine.lineText4:SetTextColor(1,1,1,1) end -local miniframe_func_on_enter = function (self) +local miniframe_func_on_enter = function(self) local barra = self:GetParent() if (barra.show and type (barra.show) == "number") then - local spellname = _GetSpellInfo (barra.show) + local spellname = _GetSpellInfo(barra.show) if (spellname) then GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") _detalhes:GameTooltipSetSpellByID (barra.show) @@ -5651,24 +5652,24 @@ local miniframe_func_on_enter = function (self) barra:GetScript("OnEnter")(barra) end -local miniframe_func_on_leave = function (self) +local miniframe_func_on_leave = function(self) GameTooltip:Hide() self:GetParent():GetScript("OnLeave")(self:GetParent()) end -local target_on_enter = function (self) +local target_on_enter = function(self) local barra = self:GetParent():GetParent() - + if (barra.show and type (barra.show) == "number") then local actor = barra.other_actor or info.jogador local spell = actor.spells and actor.spells:PegaHabilidade (barra.show) if (spell) then - + local ActorTargetsSortTable = {} local ActorTargetsContainer local total = 0 - + if (spell.isReflection) then ActorTargetsContainer = spell.extra else @@ -5685,7 +5686,7 @@ local target_on_enter = function (self) end end end - + --add and sort for target_name, amount in _pairs (ActorTargetsContainer) do --print (target_name, amount) @@ -5693,14 +5694,14 @@ local target_on_enter = function (self) total = total + (amount or 0) end table.sort (ActorTargetsSortTable, _detalhes.Sort2) - - local spellname = _GetSpellInfo (barra.show) - + + local spellname = _GetSpellInfo(barra.show) + GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") GameTooltip:AddLine (barra.index .. ". " .. spellname) GameTooltip:AddLine (info.target_text) GameTooltip:AddLine (" ") - + --get time type local meu_tempo if (_detalhes.time_type == 1 or not actor.grupo) then @@ -5708,9 +5709,9 @@ local target_on_enter = function (self) elseif (_detalhes.time_type == 2) then meu_tempo = info.instancia.showing:GetCombatTime() end - + local SelectedToKFunction = _detalhes.ToKFunctions [_detalhes.ps_abbreviation] - + if (spell.isReflection) then _detalhes:FormatCooltipForSpells() GameCooltip:SetOwner(self, "bottomright", "top", 4, -2) @@ -5723,7 +5724,7 @@ local target_on_enter = function (self) local topDamage = ActorTargetsSortTable[1] and ActorTargetsSortTable[1][2] - for index, target in ipairs (ActorTargetsSortTable) do + for index, target in ipairs (ActorTargetsSortTable) do if (target [2] > 0) then local spellId = target[1] local damageDone = target[2] @@ -5741,7 +5742,7 @@ local target_on_enter = function (self) barra:GetScript("OnEnter")(barra) return else - for index, target in ipairs (ActorTargetsSortTable) do + for index, target in ipairs (ActorTargetsSortTable) do if (target [2] > 0) then local class = _detalhes:GetClass (target [1]) if (class and _detalhes.class_coords [class]) then @@ -5761,7 +5762,7 @@ local target_on_enter = function (self) end end end - + GameTooltip:Show() else GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") @@ -5779,13 +5780,13 @@ local target_on_enter = function (self) GameTooltip:AddLine (Loc ["STRING_MORE_INFO"], 1, 1, 1) GameTooltip:Show() end - + self.texture:SetAlpha (1) self:SetAlpha (1) barra:GetScript("OnEnter")(barra) end -local target_on_leave = function (self) +local target_on_leave = function(self) GameTooltip:Hide() GameCooltip:Hide() self:GetParent():GetParent():GetScript("OnLeave")(self:GetParent():GetParent()) @@ -5808,14 +5809,14 @@ function gump:CriaNovaBarraInfo1 (instancia, index) local y = (index-1) * (CONST_BAR_HEIGHT + 1) y = y * -1 - + newLine:SetPoint("LEFT", parentFrame, "LEFT", CONST_BAR_HEIGHT, 0) newLine:SetPoint("RIGHT", parentFrame, "RIGHT") newLine:SetPoint("TOP", parentFrame, "TOP", 0, y) newLine:SetFrameLevel(parentFrame:GetFrameLevel() + 1) newLine:SetAlpha(1) newLine:EnableMouse(true) - newLine:RegisterForClicks("LeftButtonDown","RightButtonUp") + newLine:RegisterForClicks("LeftButtonDown","RightButtonUp") newLine.isMain = true --create a square frame which is placed at the right side of the line to show which targets for damaged by the spell @@ -5843,14 +5844,14 @@ function gump:CriaNovaBarraInfo1 (instancia, index) newLine.miniframe:SetPoint("right", newLine, "left", CONST_BAR_HEIGHT, 0) newLine.miniframe:SetScript("OnEnter", miniframe_func_on_enter) newLine.miniframe:SetScript("OnLeave", miniframe_func_on_leave) - + CriaTexturaBarra(newLine) SetBarraScripts (newLine, instancia, index) - + info.barras1[index] = newLine newLine.textura:SetStatusBarColor(1, 1, 1, 1) newLine.on_focus = false - + return newLine end @@ -5860,7 +5861,7 @@ function gump:CriaNovaBarraInfo2(instancia, index) print ("erro a barra "..index.." ja existe na janela de detalhes...") return end - + local janela = info.container_alvos.gump local esta_barra = _CreateFrame ("Button", "Details_infobox2_bar_"..index, info.container_alvos.gump, "BackdropTemplate") @@ -5868,14 +5869,14 @@ function gump:CriaNovaBarraInfo2(instancia, index) local y = (index-1) * (CONST_TARGET_HEIGHT + 1) y = y*-1 --> baixo - + esta_barra:SetPoint("LEFT", janela, "LEFT", CONST_TARGET_HEIGHT, 0) esta_barra:SetPoint("RIGHT", janela, "RIGHT", 0, 0) esta_barra:SetPoint("TOP", janela, "TOP", 0, y) esta_barra:SetFrameLevel (janela:GetFrameLevel() + 1) esta_barra:EnableMouse (true) - esta_barra:RegisterForClicks ("LeftButtonDown","RightButtonUp") + esta_barra:RegisterForClicks ("LeftButtonDown","RightButtonUp") --> icone esta_barra.icone = esta_barra:CreateTexture(nil, "OVERLAY") @@ -5884,16 +5885,16 @@ function gump:CriaNovaBarraInfo2(instancia, index) esta_barra.icone:SetPoint("RIGHT", esta_barra, "LEFT", 0, 0) CriaTexturaBarra(esta_barra) - + esta_barra:SetAlpha(ALPHA_BLEND_AMOUNT) esta_barra.icone:SetAlpha(1) - + esta_barra.isAlvo = true - + SetBarraScripts(esta_barra, instancia, index) - + info.barras2 [index] = esta_barra --> barra adicionada - + return esta_barra end @@ -5911,18 +5912,18 @@ function gump:CriaNovaBarraInfo3 (instancia, index) local esta_barra = CreateFrame ("Button", "Details_infobox3_bar_"..index, janela, "BackdropTemplate") esta_barra:SetHeight (16) - + local y = (index-1) * 17 y = y*-1 - + --esta_barra:SetPoint ("LEFT", janela, "LEFT", x_start, 0) --esta_barra:SetPoint ("RIGHT", janela, "RIGHT", 65, 0) --esta_barra:SetPoint ("TOP", janela, "TOP", 0, y+y_start) - + container3_bars_pointFunc (esta_barra, index) - + esta_barra:EnableMouse (true) - + CriaTexturaBarra(esta_barra) --> icone @@ -5930,15 +5931,15 @@ function gump:CriaNovaBarraInfo3 (instancia, index) esta_barra.icone:SetWidth (14) esta_barra.icone:SetHeight (14) esta_barra.icone:SetPoint ("RIGHT", esta_barra.textura, "LEFT", 18, 0) - + esta_barra:SetAlpha (0.9) esta_barra.icone:SetAlpha (1) - + esta_barra.isDetalhe = true - + SetBarraScripts (esta_barra, instancia, index) - + info.barras3 [index] = esta_barra --> barra adicionada - + return esta_barra end diff --git a/frames/window_playerbreakdown_list.lua b/frames/window_playerbreakdown_list.lua index 3c0da458..8a9b4170 100644 --- a/frames/window_playerbreakdown_list.lua +++ b/frames/window_playerbreakdown_list.lua @@ -1,10 +1,10 @@ local Details = _G.Details - local DF = _G.DetailsFramework + local detailsFramework = _G.DetailsFramework local breakdownWindowPlayerList = {} - local unpack = _G.unpack + local unpack = table.unpack or unpack local C_Timer = _G.C_Timer local tinsert = _G.tinsert @@ -15,16 +15,17 @@ local scrollbox_line_backdrop_color_selected = {.6, .6, .1, 0.7} local scrollbox_line_backdrop_color_highlight = {.9, .9, .9, 0.5} local player_scroll_size = {180, 288} - + function breakdownWindowPlayerList.CreatePlayerListFrame() local f = _G.DetailsPlayerDetailsWindow - + local refreshPlayerList = function(self, data, offset, totalLines) --update the scroll local topResult = data[1] if (topResult) then topResult = topResult.total end + for i = 1, totalLines do local index = i + offset local playerObject = data[index] @@ -36,20 +37,20 @@ end end end - + local lineOnClick = function(self) if (self.playerObject ~= Details:GetPlayerObjectFromBreakdownWindow()) then Details:OpenPlayerBreakdown(Details:GetActiveWindowFromBreakdownWindow(), self.playerObject) f.playerScrollBox:Refresh() end end - + local lineOnEnter = function(self) self:SetBackdropColor(unpack(scrollbox_line_backdrop_color_highlight)) self.specIcon:SetBlendMode("ADD") self.roleIcon:SetBlendMode("ADD") end - + local lineOnLeave = function(self) if (self.isSelected) then self:SetBackdropColor(unpack(scrollbox_line_backdrop_color_selected)) @@ -78,7 +79,6 @@ self.specIcon:SetTexCoord(.1, .9, .1, .9) else local specIcon, L, R, T, B = Details:GetSpecIcon(self.playerObject.spec, false) - local specId, specName, specDescription, specIconId, specClass if (specIcon) then self.specIcon:SetTexture(specIcon) @@ -87,7 +87,7 @@ if (DetailsFramework.IsTimewalkWoW()) then specRole = "NONE" else - specId, specName, specDescription, specIconId, specRole, specClass = _G.GetSpecializationInfoByID(self.playerObject.spec) + specRole = select(5, _G.GetSpecializationInfoByID(self.playerObject.spec)) end else self.specIcon:SetTexture("") @@ -106,14 +106,14 @@ else self.roleIcon:SetTexture("") end - + --do not show the role icon self.roleIcon:SetTexture("") - + --set the player name self.playerName:SetText(Details:GetOnlyName(self.playerObject.nome)) self.rankText:SetText(self.index) - + --set the player class name self.className:SetText(string.lower(_G.UnitClass(self.playerObject.nome) or self.playerObject:Class())) @@ -124,6 +124,21 @@ self.totalStatusBar:SetValue(self.playerObject.total) end + --get a Details! window + local lowerInstanceId = Details:GetLowerInstanceNumber() + local fontFile + local fontSize + local fontOutline + + if (lowerInstanceId) then + local instance = Details:GetInstance(lowerInstanceId) + if (instance) then + fontFile = instance.row_info.font_face + fontSize = instance.row_info.font_size + fontOutline = instance.row_info.textL_outline + end + end + local createPlayerLine = function(self, index) --create a new line local line = _G.CreateFrame("button", "$parentLine" .. index, self, "BackdropTemplate") @@ -144,18 +159,29 @@ local specIcon = line:CreateTexture("$parentSpecIcon", "artwork") specIcon:SetSize(player_line_height, player_line_height) specIcon:SetAlpha(0.71) + local roleIcon = line:CreateTexture("$parentRoleIcon", "overlay") roleIcon:SetSize((player_line_height-2) / 2, (player_line_height-2) / 2) roleIcon:SetAlpha(0.71) - local playerName = DF:CreateLabel(line, "", "GameFontNormal") + local playerName = detailsFramework:CreateLabel(line, "", 11, "white", "GameFontNormal") + if (fontFile) then + playerName.fontface = fontFile + end + if (fontSize) then + playerName.fontsize = fontSize + end + if (fontOutline) then + playerName.outline = fontOutline + end + playerName.textcolor = {1, 1, 1, .9} - playerName.textsize = 11 - local className = DF:CreateLabel(line, "", "GameFontNormal") + + local className = detailsFramework:CreateLabel(line, "", "GameFontNormal") className.textcolor = {.95, .8, .2, 0} className.textsize = 9 - local rankText = DF:CreateLabel(line, "", "GameFontNormal") + local rankText = detailsFramework:CreateLabel(line, "", "GameFontNormal") rankText.textcolor = {.3, .3, .3, .7} rankText.textsize = 13 @@ -184,9 +210,9 @@ return line end - - local playerScroll = DF:CreateScrollBox(f, "$parentPlayerScrollBox", refreshPlayerList, {}, player_scroll_size[1] + 22, player_scroll_size[2], scrollbox_lines, player_line_height) - DF:ReskinSlider (playerScroll) + + local playerScroll = detailsFramework:CreateScrollBox(f, "$parentPlayerScrollBox", refreshPlayerList, {}, player_scroll_size[1] + 22, player_scroll_size[2], scrollbox_lines, player_line_height) + detailsFramework:ReskinSlider(playerScroll) playerScroll.ScrollBar:ClearAllPoints() playerScroll.ScrollBar:SetPoint("topright", playerScroll, "topright", -2, -17) playerScroll.ScrollBar:SetPoint("bottomright", playerScroll, "bottomright", -2, 17) @@ -196,12 +222,12 @@ playerScroll:SetBackdropColor(0, 0, 0, 0.2) playerScroll:SetBackdropBorderColor(0, 0, 0, 1) f.playerScrollBox = playerScroll - + --create the scrollbox lines for i = 1, scrollbox_lines do playerScroll:CreateLine(createPlayerLine) end - + local classIds = { WARRIOR = 1, PALADIN = 2, @@ -221,21 +247,23 @@ function breakdownWindowPlayerList.BuildPlayerList() local segment = Details:GetCombatFromBreakdownWindow() local playerTable = {} + if (segment) then local displayType = Details:GetDisplayTypeFromBreakdownWindow() local containerType = displayType == 1 and DETAILS_ATTRIBUTE_DAMAGE or DETAILS_ATTRIBUTE_HEAL local container = segment:GetContainer(containerType) + for index, playerObject in container:ListActors() do if (playerObject:IsPlayer()) then local unitClassID = classIds [playerObject:Class()] or 13 local unitName = playerObject:Name() - local playerPosition = (((unitClassID or 0) + 128) ^ 4) + tonumber (string.byte (unitName, 1) .. "" .. string.byte (unitName, 2)) + local playerPosition = (((unitClassID or 0) + 128) ^ 4) + tonumber (string.byte(unitName, 1) .. "" .. string.byte(unitName, 2)) tinsert(playerTable, {playerObject, playerPosition, playerObject.total}) end end end - table.sort(playerTable, DF.SortOrder3) + table.sort(playerTable, detailsFramework.SortOrder3) local resultTable = {} for i = 1, #playerTable do @@ -263,5 +291,9 @@ end) end - breakdownWindowPlayerList.CreatePlayerListFrame() - + function Details.PlayerBreakdown.CreatePlayerListFrame() + if (not Details.PlayerBreakdown.playerListFrameCreated) then + breakdownWindowPlayerList.CreatePlayerListFrame() + Details.PlayerBreakdown.playerListFrameCreated = true + end + end \ No newline at end of file diff --git a/frames/window_profiler.lua b/frames/window_profiler.lua index 9c311e4b..605c047f 100644 --- a/frames/window_profiler.lua +++ b/frames/window_profiler.lua @@ -48,7 +48,7 @@ function Details:OpenProfiler() --> get the new profile name local current_profile = Details:GetCurrentProfileName() - local on_select_profile = function (_, _, profilename) + local on_select_profile = function(_, _, profilename) if (profilename ~= Details:GetCurrentProfileName()) then Details:ApplyProfile (profilename) if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) then diff --git a/frames/window_rowtexteditor.lua b/frames/window_rowtexteditor.lua index 433be68b..642a4d5a 100644 --- a/frames/window_rowtexteditor.lua +++ b/frames/window_rowtexteditor.lua @@ -37,7 +37,7 @@ local textentry = DF:NewSpecialLuaEditorEntry (panel, scrollWidth, 555, "editbox textentry:SetPoint ("topleft", panel, "topleft", 10, y) DF:ApplyStandardBackdrop (textentry) DF:SetFontSize (textentry.editbox, 14) -DF:ReskinSlider (textentry.scroll) +DF:ReskinSlider(textentry.scroll) local arg1_button = DF:NewButton (panel, nil, "$parentButton1", nil, 80, 20, function() textentry.editbox:Insert ("{data1}") end, nil, nil, nil, string.format (Loc ["STRING_OPTIONS_TEXTEDITOR_DATA"], "1"), 1) local arg2_button = DF:NewButton (panel, nil, "$parentButton2", nil, 80, 20, function() textentry.editbox:Insert ("{data2}") end, nil, nil, nil, string.format (Loc ["STRING_OPTIONS_TEXTEDITOR_DATA"], "2"), 1) @@ -157,7 +157,7 @@ local function ColorSelection ( self, ColorCode ) self:HighlightText( Start, #ColorCode + ( #Replacement - #Selection ) + #COLOR_END + End ); end -local color_func = function (_, r, g, b, a) +local color_func = function(_, r, g, b, a) local hex = Details:hex (a*255)..Details:hex (r*255)..Details:hex (g*255)..Details:hex (b*255) ColorSelection ( textentry.editbox, "|c" .. hex) end diff --git a/frames/window_runcode.lua b/frames/window_runcode.lua index 222441db..9cecfe64 100644 --- a/frames/window_runcode.lua +++ b/frames/window_runcode.lua @@ -42,7 +42,7 @@ function Details.OpenRunCodeWindow() code_editor.editbox:SetBackdrop (nil) code_editor:SetBackdrop (nil) - DF:ReskinSlider (code_editor.scroll) + DF:ReskinSlider(code_editor.scroll) if (not code_editor.__background) then code_editor.__background = code_editor:CreateTexture (nil, "background") @@ -74,7 +74,7 @@ function Details.OpenRunCodeWindow() errortext_label:SetPoint ("left", errortext_frame, "left", 3, 0) code_editor.NextCodeCheck = 0.33 - code_editor:HookScript ("OnUpdate", function (self, deltaTime) + code_editor:HookScript ("OnUpdate", function(self, deltaTime) code_editor.NextCodeCheck = code_editor.NextCodeCheck - deltaTime if (code_editor.NextCodeCheck < 0) then @@ -97,7 +97,7 @@ function Details.OpenRunCodeWindow() end) --> script selector - local on_select_CodeType_option = function (self, fixedParameter, value) + local on_select_CodeType_option = function(self, fixedParameter, value) --> set the current editing code type f.EditingCode = Details.RunCodeTypes [value].Value f.EditingCodeKey = Details.RunCodeTypes [value].ProfileKey diff --git a/frames/window_scrolldamage.lua b/frames/window_scrolldamage.lua index 53a52b35..7e875203 100644 --- a/frames/window_scrolldamage.lua +++ b/frames/window_scrolldamage.lua @@ -103,7 +103,7 @@ function Details:ScrollDamage() end end - local lineOnEnter = function (self) + local lineOnEnter = function(self) if (self.IsCritical) then self:SetBackdropColor(unpack(backdrop_color_is_critical_on_enter)) else @@ -119,7 +119,7 @@ function Details:ScrollDamage() end end - local lineOnLeave = function (self) + local lineOnLeave = function(self) if (self.IsCritical) then self:SetBackdropColor(unpack(backdrop_color_is_critical)) else @@ -207,7 +207,7 @@ function Details:ScrollDamage() local combatLogReader = CreateFrame("frame") local playerSerial = UnitGUID("player") - combatLogReader:SetScript("OnEvent", function (self) + combatLogReader:SetScript("OnEvent", function(self) local timew, token, hidding, sourceSerial, sourceName, sourceFlag, sourceFlag2, targetSerial, targetName, targetFlag, targetFlag2, spellID, spellName, spellType, amount, overKill, school, resisted, blocked, absorbed, isCritical = CombatLogGetCurrentEventInfo() if (sourceSerial == playerSerial) then if (token == "SPELL_DAMAGE" or token == "SPELL_PERIODIC_DAMAGE" or token == "RANGE_DAMAGE" or token == "DAMAGE_SHIELD") then diff --git a/frames/window_statistics.lua b/frames/window_statistics.lua index 3aad43e2..09d0f4d3 100644 --- a/frames/window_statistics.lua +++ b/frames/window_statistics.lua @@ -263,7 +263,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild --> report results function f.BuildReport() if (f.LatestResourceTable) then - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) local bossName = f.select_boss.label:GetText() local bossDiff = f.select_diff.label:GetText() local guildName = f.select_guild.label:GetText() @@ -363,7 +363,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild end --> select raid: - local onRaidSelect = function (_, _, raid) + local onRaidSelect = function(_, _, raid) Details.rank_window.last_raid = raid f:UpdateDropdowns (true) on_select() @@ -376,7 +376,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild raid_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select boss: - local on_boss_select = function (_, _, boss) + local on_boss_select = function(_, _, boss) on_select() end local build_boss_list = function() @@ -387,7 +387,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild boss_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select difficulty: - local on_diff_select = function (_, _, diff) + local on_diff_select = function(_, _, diff) Details.rank_window.last_difficulty = diff on_select() end @@ -400,7 +400,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild diff_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select role: - local on_role_select = function (_, _, role) + local on_role_select = function(_, _, role) on_select() end local build_role_list = function() @@ -414,7 +414,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild role_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select guild: - local on_guild_select = function (_, _, guild) + local on_guild_select = function(_, _, guild) on_select() end local build_guild_list = function() @@ -425,7 +425,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild guild_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select playerbase: - local on_player_select = function (_, _, player) + local on_player_select = function(_, _, player) on_select() end local build_player_list = function() @@ -439,7 +439,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild player_dropdown:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) --> select player: - local onPlayer2Select = function (_, _, player) + local onPlayer2Select = function(_, _, player) f.latest_player_selected = player f:BuildPlayerTable (player) end @@ -551,7 +551,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild end end - table.sort (bossList, function (t1, t2) return t1.label < t2.label end) + table.sort (bossList, function(t1, t2) return t1.label < t2.label end) diff_dropdown:Refresh() @@ -632,7 +632,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild end end - table.sort (bossList, function (t1, t2) return t1.label < t2.label end) + table.sort (bossList, function(t1, t2) return t1.label < t2.label end) boss_dropdown:Refresh() end @@ -690,7 +690,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild --> update graphic if (not f.gframe) then - local onenter = function (self) + local onenter = function(self) GameCooltip:Reset() GameCooltip:SetType ("tooltip") GameCooltip:Preset (2) @@ -703,7 +703,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild GameCooltip:SetOwner (self.ball.tooltip_anchor) GameCooltip:Show() end - local onleave = function (self) + local onleave = function(self) GameCooltip:Hide() end f.gframe = DF:CreateGFrame (f, 650, 400, 35, onenter, onleave, "gframe", "$parentGF") @@ -795,7 +795,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild t [1] = i .. ". " .. t [1] end - fillpanel:SetFillFunction (function (index) return sortTable [index] end) + fillpanel:SetFillFunction (function(index) return sortTable [index] end) fillpanel:SetTotalFunction (function() return #sortTable end) fillpanel:UpdateRows (header) fillpanel:Refresh() @@ -870,7 +870,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild end end - fillpanel:SetFillFunction (function (index) return players [index] end) + fillpanel:SetFillFunction (function(index) return players [index] end) fillpanel:SetTotalFunction (function() return #players end) fillpanel:UpdateRows (header) diff --git a/frames/window_switch.lua b/frames/window_switch.lua index 323e3c12..4c6c48fa 100644 --- a/frames/window_switch.lua +++ b/frames/window_switch.lua @@ -98,7 +98,7 @@ do end end - local on_click_all_switch_button = function (self, button) + local on_click_all_switch_button = function(self, button) if (button == "LeftButton") then local attribute = self.attribute local subAttribute = self.sub_attribute @@ -175,7 +175,7 @@ do end end - local create_all_switch_button = function (attribute, sub_attribute, x, y) + local create_all_switch_button = function(attribute, sub_attribute, x, y) local button = CreateFrame ("button", "DetailsAllAttributesFrame" .. attribute .. sub_attribute, allDisplaysFrame) button:SetSize (130, 16) button.texture = button:CreateTexture (nil, "overlay") @@ -488,7 +488,7 @@ function Details.switch:ShowMe(instancia) elseif (IsShiftKeyDown()) then if (not Details.switch.segments_blocks) then - local segment_switch = function (self, button, segment) + local segment_switch = function(self, button, segment) if (button == "LeftButton") then Details.switch.current_instancia:TrocaTabela (segment) Details.switch.CloseMe() @@ -497,26 +497,26 @@ function Details.switch:ShowMe(instancia) end end - local hide_label = function (self) + local hide_label = function(self) self.texture:Hide() self.button:Hide() self.background:Hide() self:Hide() end - local show_label = function (self) + local show_label = function(self) self.texture:Show() self.button:Show() self.background:Show() self:Show() end - local on_enter = function (self) + local on_enter = function(self) --self.MyObject.this_background:SetBlendMode ("ADD") --self.MyObject.boss_texture:SetBlendMode ("ADD") end - local on_leave = function (self) + local on_leave = function(self) self.MyObject.this_background:SetBlendMode ("BLEND") self.MyObject.boss_texture:SetBlendMode ("BLEND") end @@ -1078,7 +1078,7 @@ end local scroll = CreateFrame ("scrollframe", "DetailsSwitchPanelScroll", DetailsSwitchPanel, "FauxScrollFrameTemplate") scroll:SetAllPoints() -scroll:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, Details.switch.Update) end) --altura +scroll:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, Details.switch.Update) end) --altura scroll.ScrollBar:Hide() scroll.ScrollBar.ScrollUpButton:Hide() scroll.ScrollBar.ScrollDownButton:Hide() diff --git a/frames/window_wa.lua b/frames/window_wa.lua index 8526f1d9..a58a0187 100644 --- a/frames/window_wa.lua +++ b/frames/window_wa.lua @@ -68,7 +68,7 @@ local text_dispell_prototype = { ["events"] = "COMBAT_LOG_EVENT_UNFILTERED, ENCOUNTER_START", ["use_spellName"] = false, ["use_spellId"] = false, - ["custom"] = "function (event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool)\n if (event == \"COMBAT_LOG_EVENT_UNFILTERED\") then\n \n if ((token == \"SPELL_DISPEL\" or token == \"SPELL_STOLEN\") and extraSpellID == 159947) then\n aura_env.dispelled = aura_env.dispelled + 1\n aura_env.dispels_by [who_name] = (aura_env.dispels_by [who_name] or 0) + 1\n \n aura_env.text = aura_env.text .. \"|cffd2e8ff\" .. who_name .. \" (\" .. aura_env.dispels_by [who_name] .. \") \".. \"|r\\n\"\n \n if (select (2, aura_env.text:gsub (\"\\n\", \"\")) == 9) then\n aura_env.text = aura_env.text:gsub (\".-\\n\", \"\", 1)\n end\n return true\n end \n else\n aura_env.text = \"\"\n aura_env.success = 0\n aura_env.dispelled = 0\n wipe (aura_env.dispels_by)\n return true \n end\nend", + ["custom"] = "function(event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool)\n if (event == \"COMBAT_LOG_EVENT_UNFILTERED\") then\n \n if ((token == \"SPELL_DISPEL\" or token == \"SPELL_STOLEN\") and extraSpellID == 159947) then\n aura_env.dispelled = aura_env.dispelled + 1\n aura_env.dispels_by [who_name] = (aura_env.dispels_by [who_name] or 0) + 1\n \n aura_env.text = aura_env.text .. \"|cffd2e8ff\" .. who_name .. \" (\" .. aura_env.dispels_by [who_name] .. \") \".. \"|r\\n\"\n \n if (select (2, aura_env.text:gsub (\"\\n\", \"\")) == 9) then\n aura_env.text = aura_env.text:gsub (\".-\\n\", \"\", 1)\n end\n return true\n end \n else\n aura_env.text = \"\"\n aura_env.success = 0\n aura_env.dispelled = 0\n wipe (aura_env.dispels_by)\n return true \n end\nend", ["spellIds"] = { }, ["use_message"] = true, @@ -176,7 +176,7 @@ local text_interrupt_prototype = { }, ["use_spellName"] = false, ["use_spellId"] = false, - ["custom"] = "function (evento, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool)\n \n if (evento == \"COMBAT_LOG_EVENT_UNFILTERED\") then\n \n if (token == \"SPELL_CAST_SUCCESS\" and spellid == 165416) then\n aura_env.success = aura_env.success + 1\n aura_env.text = aura_env.text .. \"SUCCESS! (\" .. aura_env.success .. \")\\n\"\n \n return true\n \n elseif (token == \"SPELL_INTERRUPT\" and extraSpellID == 165416) then\n aura_env.interrupted = aura_env.interrupted + 1\n aura_env.text = aura_env.text .. who_name .. \" (\" .. aura_env.interrupted .. \") \".. \"\\n\"\n return true\n end\n else\n aura_env.text = \"\"\n aura_env.success = 0\n aura_env.interrupted = 0\n return true \n end\n \nend\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + ["custom"] = "function(evento, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool)\n \n if (evento == \"COMBAT_LOG_EVENT_UNFILTERED\") then\n \n if (token == \"SPELL_CAST_SUCCESS\" and spellid == 165416) then\n aura_env.success = aura_env.success + 1\n aura_env.text = aura_env.text .. \"SUCCESS! (\" .. aura_env.success .. \")\\n\"\n \n return true\n \n elseif (token == \"SPELL_INTERRUPT\" and extraSpellID == 165416) then\n aura_env.interrupted = aura_env.interrupted + 1\n aura_env.text = aura_env.text .. who_name .. \" (\" .. aura_env.interrupted .. \") \".. \"\\n\"\n return true\n end\n else\n aura_env.text = \"\"\n aura_env.success = 0\n aura_env.interrupted = 0\n return true \n end\n \nend\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ["events"] = "COMBAT_LOG_EVENT_UNFILTERED, ENCOUNTER_START", ["use_message"] = true, ["unevent"] = "timed", @@ -1457,7 +1457,7 @@ function _detalhes:CreateWeakAura (aura_type, spellid, use_spellid, spellname, n new_aura = _detalhes.table.copy ({}, text_interrupt_prototype) new_aura.trigger.custom = [[ - function (event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool) + function(event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool) if (event == "COMBAT_LOG_EVENT_UNFILTERED") then if (token == "SPELL_CAST_SUCCESS" and spellid == @spellid) then aura_env.success = aura_env.success + 1 @@ -1502,7 +1502,7 @@ function _detalhes:CreateWeakAura (aura_type, spellid, use_spellid, spellname, n new_aura = _detalhes.table.copy ({}, text_dispell_prototype) new_aura.trigger.custom = [[ - function (event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool) + function(event, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, extraSpellID, extraSpellName, extraSchool) if (event == "COMBAT_LOG_EVENT_UNFILTERED") then if ((token == "SPELL_DISPEL" or token == "SPELL_STOLEN") and extraSpellID == @spellid) then aura_env.dispelled = aura_env.dispelled + 1 @@ -1958,7 +1958,7 @@ local empty_other_values = {} function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, triggertype, auratype, other_values) if (not spellname) then - spellname = select (1, GetSpellInfo (spellid)) + spellname = select (1, GetSpellInfo(spellid)) end wipe (empty_other_values) @@ -2008,7 +2008,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr LibWindow.MakeDraggable (f) LibWindow.SavePosition (f) - f:SetScript ("OnMouseDown", function (self, button) + f:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then f:Hide() end @@ -2059,7 +2059,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr f.name = name_textentry --aura type - local on_select_aura_type = function (_, _, aura_type) + local on_select_aura_type = function(_, _, aura_type) if (f.UpdateLabels) then f:UpdateLabels() end @@ -2090,7 +2090,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr local AuraTypeBorderColor = {.3, .3, .3, 0.5} local AuraTypeBorderSelectedColor = {1, 1, 1, 0.4} - local OnSelectAuraType = function (self, fixedParam, auraType, noUpdate) + local OnSelectAuraType = function(self, fixedParam, auraType, noUpdate) if (type (auraType) == "number") then if (auraType == 1) then @@ -2156,7 +2156,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr --trigger list --target - local on_select_aura_trigger = function (_, _, aura_trigger) + local on_select_aura_trigger = function(_, _, aura_trigger) if (f.UpdateLabels) then f:UpdateLabels() end @@ -2204,7 +2204,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr {name = "Spell Dispell", value = 42}, } - local SetTriggerState = function (triggerID) + local SetTriggerState = function(triggerID) for i = 1, #triggerList do triggerList[i].checkBox:SetValue (false) if (triggerList[i].value == triggerID) then @@ -2216,7 +2216,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr f.SetTriggerState = SetTriggerState f.TriggerList = triggerList - local OnChangeTriggerState = function (self, triggerID, state) + local OnChangeTriggerState = function(self, triggerID, state) SetTriggerState (triggerID) aura_on:SetValue (triggerID) @@ -2276,7 +2276,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr --aura icon local icon_label = fw:CreateLabel (f, "Icon: ", nil, nil, "GameFontNormal") - local icon_button_func = function (texture) + local icon_button_func = function(texture) f.IconButton.icon.texture = texture end local icon_pick_button = fw:NewButton (f, nil, "$parentIconButton", "IconButton", 20, 20, function() fw:IconPick (icon_button_func, true) end) @@ -2305,7 +2305,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr stack_slider.tooltip = "Minimum amount of stacks to trigger the aura." --sound effect - local play_sound = function (self, fixedParam, file) + local play_sound = function(self, fixedParam, file) if (type (file) == "table") then PlaySoundFile (file.sound_path, "Master") else @@ -2313,10 +2313,10 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr end end - local sort = function (t1, t2) + local sort = function(t1, t2) return t1.name < t2.name end - local titlecase = function (first, rest) + local titlecase = function(first, rest) return first:upper()..rest:lower() end local iconsize = {14, 14} @@ -2473,7 +2473,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr local folder_texcoord = {435/512, 469/512, 189/512, 241/512} local folder_iconsize = {14, 14} - local sort_func = function (t1, t2) return t1.label < t2.label end + local sort_func = function(t1, t2) return t1.label < t2.label end local weakauras_folder_options = function() local t = {} diff --git a/frames/window_welcome.lua b/frames/window_welcome.lua index 02224800..e620670d 100644 --- a/frames/window_welcome.lua +++ b/frames/window_welcome.lua @@ -141,7 +141,7 @@ function _detalhes:OpenWelcomeWindow() local f = CreateFrame ("frame") local got = false - f:SetScript ("OnUpdate", function (self, elapsed) + f:SetScript ("OnUpdate", function(self, elapsed) if (not got and not InCombatLockdown()) then local r = math.random for i = 1, 2500000 do @@ -295,7 +295,7 @@ local window_openned_at = time() skins_image:SetTexCoord (0, 0.41796875, 0, 0.259765625) --0, 0, 214 133 --skin - local onSelectSkin = function (_, _, skin_name) + local onSelectSkin = function(_, _, skin_name) local instance1 = _detalhes:GetInstance (1) if (instance1 and instance1:IsEnabled()) then instance1:ChangeSkin (skin_name) @@ -340,7 +340,7 @@ local window_openned_at = time() local allAlphabetCheckBoxes = {} local allAlphabetLabels = {} - local onSelectAlphabet = function (self, fixedParameter, value) + local onSelectAlphabet = function(self, fixedParameter, value) if (not value) then self:SetValue (true) @@ -488,7 +488,7 @@ local window_openned_at = time() local buttonWidth = 160 -- create second window button - local new_window = function (self) + local new_window = function(self) if (#_detalhes.tabela_instancias == 1) then local newwindow = _detalhes:CreateInstance (true) newwindow.baseframe:SetPoint ("topleft", _detalhes.tabela_instancias[1].baseframe, "topright", 50, 0) @@ -510,7 +510,7 @@ local window_openned_at = time() -- window color window.editing_window = nil - local windowcolor_callback = function (button, r, g, b, a) + local windowcolor_callback = function(button, r, g, b, a) local instance = window.editing_window if (instance.menu_alpha.enabled and a ~= instance.color[4]) then @@ -562,7 +562,7 @@ local window_openned_at = time() window.BarHeightSlider:SetPoint ("left", window.BarHeightLabel, "right", 2, 0) window.BarHeightSlider:SetTemplate (g:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")) - window.BarHeightSlider:SetHook ("OnValueChange", function (self, _, amount) + window.BarHeightSlider:SetHook ("OnValueChange", function(self, _, amount) local instance1 = Details:GetInstance (1) local instance2 = Details:GetInstance (2) @@ -582,7 +582,7 @@ local window_openned_at = time() window.TextSizeSlider:SetPoint ("left", window.TextSizeLabel, "right", 2, 0) window.TextSizeSlider:SetTemplate (g:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")) - window.TextSizeSlider:SetHook ("OnValueChange", function (self, _, amount) + window.TextSizeSlider:SetHook ("OnValueChange", function(self, _, amount) local instance1 = Details:GetInstance (1) local instance2 = Details:GetInstance (2) @@ -595,7 +595,7 @@ local window_openned_at = time() end) --font - local onSelectFont = function (_, instance, fontName) + local onSelectFont = function(_, instance, fontName) local instance1 = Details:GetInstance (1) local instance2 = Details:GetInstance (2) @@ -613,7 +613,7 @@ local window_openned_at = time() for name, fontPath in pairs (fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = onSelectFont, font = fontPath, descfont = name, desc = Loc ["STRING_MUSIC_DETAILS_ROBERTOCARLOS"]} end - table.sort (fontTable, function (t1, t2) return t1.label < t2.label end) + table.sort (fontTable, function(t1, t2) return t1.label < t2.label end) return fontTable end @@ -633,7 +633,7 @@ local window_openned_at = time() window.ShowPercentCheckBox:SetFixedParameter (1) window.ShowPercentCheckBox:SetTemplate (g:GetTemplate ("switch", "OPTIONS_CHECKBOX_TEMPLATE")) - window.ShowPercentCheckBox.OnSwitch = function (self, fixedParameter, value) + window.ShowPercentCheckBox.OnSwitch = function(self, fixedParameter, value) local instance1 = Details:GetInstance (1) local instance2 = Details:GetInstance (2) @@ -995,7 +995,7 @@ local window_openned_at = time() window.updatespeedSlider:SetTemplate (g:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")) window.updatespeedSlider:SetThumbSize (50) window.updatespeedSlider.useDecimals = true - local updateColor = function (slider, value) + local updateColor = function(slider, value) if (value < 1) then slider.amt:SetTextColor (1, value, 0) elseif (value > 1) then @@ -1005,7 +1005,7 @@ local window_openned_at = time() end end - window.updatespeedSlider:SetHook("OnValueChange", function (self, _, amount) + window.updatespeedSlider:SetHook("OnValueChange", function(self, _, amount) Details:SetWindowUpdateSpeed(amount) updateColor(self, amount) end) @@ -1023,7 +1023,7 @@ local window_openned_at = time() -- 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) + window.animateSlider.OnSwitch = function(self, _, value) --> slider, fixedValue, sliderValue (false, true) _detalhes:SetUseAnimations (value) end @@ -1038,7 +1038,7 @@ local window_openned_at = time() -- g:NewSwitch (window, _, "$parentDpsHpsSlider", "DpsHpsSlider", 60, 20, _, _, _detalhes:GetInstance(1).row_info.fast_ps_update) -- ltext, rtext, defaultv window.DpsHpsSlider:SetPoint ("left",window.DpsHpsLabel, "right", 2, 0) - window.DpsHpsSlider.OnSwitch = function (self, _, value) --> slider, fixedValue, sliderValue (false, true) + window.DpsHpsSlider.OnSwitch = function(self, _, value) --> slider, fixedValue, sliderValue (false, true) _detalhes:GetInstance(1):FastPSUpdate (value) end @@ -1053,7 +1053,7 @@ local window_openned_at = time() -- -- 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) - -- window.segmentsSlider:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue + -- window.segmentsSlider:SetHook ("OnValueChange", function(self, _, amount) --> slider, fixedValue, sliderValue -- _detalhes.segments_amount = math.floor (amount) -- end) -- window.segmentsSlider.tooltip = Loc ["STRING_WELCOME_22"] @@ -1283,7 +1283,7 @@ local window_openned_at = time() bg_string:SetPoint ("right", bookmark_frame, "right", 0, 0) bg_string:SetPoint ("center", bmf_string, "center", 0, 0) - bookmark_frame:SetScript ("OnMouseDown", function (self, button) + bookmark_frame:SetScript ("OnMouseDown", function(self, button) if (button == "RightButton") then _detalhes.switch:ShowMe (instance1) self:Hide() @@ -1375,7 +1375,7 @@ local window_openned_at = time() micro_image1:SetTexCoord (326/512, 1, 85/512, 185/512) local tooltip_frame = CreateFrame ("frame", nil, window) - tooltip_frame:SetScript ("OnShow", function (self) + tooltip_frame:SetScript ("OnShow", function(self) _detalhes.tabela_historico:resetar() created_test_bars = 0 diff --git a/functions/api2.lua b/functions/api2.lua index 7a157943..e19d64d6 100644 --- a/functions/api2.lua +++ b/functions/api2.lua @@ -8,7 +8,7 @@ This is a high level API for Details! Damage Meter --]=] --local helpers -local getCombatObject = function (segmentNumber) +local getCombatObject = function(segmentNumber) local combatObject --select which segment to use, use low level variables for performance @@ -23,12 +23,12 @@ local getCombatObject = function (segmentNumber) return combatObject end -local getActorObjectFromCombat = function (combatObject, containerID, actorName) +local getActorObjectFromCombat = function(combatObject, containerID, actorName) local index = combatObject [containerID]._NameIndexTable [actorName] return combatObject [containerID]._ActorTable [index] end -local getUnitName = function (unitId) +local getUnitName = function(unitId) local unitName, serverName = UnitName (unitId) if (unitName) then if (serverName and serverName ~= "") then @@ -42,7 +42,7 @@ local getUnitName = function (unitId) end --return the spell object and the spellId -local getSpellObject = function (playerObject, spellId, isLiteral) +local getSpellObject = function(playerObject, spellId, isLiteral) local parameterType = type (spellId) if (parameterType == "number" and isLiteral) then @@ -57,7 +57,7 @@ local getSpellObject = function (playerObject, spellId, isLiteral) elseif (parameterType == "number") then --passed a number but with literal off, transform the spellId into a spell name - local spellName = GetSpellInfo (spellid) + local spellName = GetSpellInfo(spellid) if (spellName) then passedSpellName = spellName:lower() end @@ -65,7 +65,7 @@ local getSpellObject = function (playerObject, spellId, isLiteral) if (passedSpellName) then for thisSpellId, spellObject in pairs (playerObject.spells._ActorTable) do - local spellName = Details.GetSpellInfo (thisSpellId) + local spellName = Details.GetSpellInfo(thisSpellId) if (spellName) then if (spellName:lower() == passedSpellName) then return spellObject, thisSpellId @@ -938,14 +938,14 @@ function Details.UnitDamageSpellInfo (unitId, spellId, isLiteral, segment) local miscPlayerObject = getActorObjectFromCombat (combatObject, 4, unitName) if (miscPlayerObject) then - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) local castedAmount = miscPlayerObject.spell_cast and miscPlayerObject.spell_cast [spellId] if (castedAmount) then spellInfo.casted = castedAmount else for castedSpellId, castedAmount in pairs (miscPlayerObject.spell_cast) do - local castedSpellName = GetSpellInfo (castedSpellId) + local castedSpellName = GetSpellInfo(castedSpellId) if (castedSpellName == spellName) then spellInfo.casted = castedAmount break @@ -1211,10 +1211,10 @@ function Details.UnitDamageTakenFromSpell (unitId, spellId, isLiteral, segment) end end else - local spellName = GetSpellInfo (spellId) or spellId + local spellName = GetSpellInfo(spellId) or spellId for i = 1, #damageContainer._ActorTable do for thisSpellId, spellObject in pairs (damageContainer._ActorTable [i].spells._ActorTable) do - local thisSpellName = GetSpellInfo (thisSpellId) + local thisSpellName = GetSpellInfo(thisSpellId) if (thisSpellName == spellName) then totalDamageTaken = totalDamageTaken + (spellObject.targets [unitName] or 0) end @@ -1669,14 +1669,14 @@ function Details.UnitHealingSpellInfo (unitId, spellId, isLiteral, segment) local miscPlayerObject = getActorObjectFromCombat (combatObject, 4, unitName) if (miscPlayerObject) then - local spellName = GetSpellInfo (spellId) + local spellName = GetSpellInfo(spellId) local castedAmount = miscPlayerObject.spell_cast and miscPlayerObject.spell_cast [spellId] if (castedAmount) then spellInfo.casted = castedAmount else for castedSpellId, castedAmount in pairs (miscPlayerObject.spell_cast) do - local castedSpellName = GetSpellInfo (castedSpellId) + local castedSpellName = GetSpellInfo(castedSpellId) if (castedSpellName == spellName) then spellInfo.casted = castedAmount break @@ -1950,10 +1950,10 @@ function Details.UnitHealingTakenFromSpell (unitId, spellId, isLiteral, segment) end end else - local spellName = GetSpellInfo (spellId) or spellId + local spellName = GetSpellInfo(spellId) or spellId for i = 1, #healingContainer._ActorTable do for thisSpellId, spellObject in pairs (healingContainer._ActorTable [i].spells._ActorTable) do - local thisSpellName = GetSpellInfo (thisSpellId) + local thisSpellName = GetSpellInfo(thisSpellId) if (thisSpellName == spellName) then totalHealingTaken = totalHealingTaken + (spellObject.targets [unitName] or 0) end diff --git a/functions/bossmods.lua b/functions/bossmods.lua index 233f0e99..6710b146 100644 --- a/functions/bossmods.lua +++ b/functions/bossmods.lua @@ -105,7 +105,7 @@ function Details:CreateCallbackListeners() local current_table_bigwigs = {} local event_frame = CreateFrame ("frame", nil, UIParent, "BackdropTemplate") - event_frame:SetScript ("OnEvent", function (self, event, ...) + event_frame:SetScript ("OnEvent", function(self, event, ...) if (event == "ENCOUNTER_START") then local encounterID, encounterName, difficultyID, raidSize = select (1, ...) current_encounter = encounterID @@ -142,7 +142,7 @@ function Details:CreateCallbackListeners() event_frame:RegisterEvent ("PLAYER_REGEN_ENABLED") if (_G.DBM) then - local dbm_timer_callback = function (bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid) + local dbm_timer_callback = function(bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid) local spell = tostring (spellId) if (spell and not current_table_dbm [spell]) then current_table_dbm [spell] = {spell, id, msg, timer, icon, bartype, spellId, colorId, modid} diff --git a/functions/buff.lua b/functions/buff.lua index 0b85062b..35f3f1f7 100644 --- a/functions/buff.lua +++ b/functions/buff.lua @@ -48,7 +48,7 @@ --> register a new buff name function _detalhes.Buffs:NewBuff (BuffName, BuffId) if (not BuffName) then - BuffName = GetSpellInfo (BuffId) + BuffName = GetSpellInfo(BuffId) end if (_detalhes.Buffs.BuffsTable [BuffName]) then return false diff --git a/functions/deathmenu.lua b/functions/deathmenu.lua index 45e2787b..21547eeb 100644 --- a/functions/deathmenu.lua +++ b/functions/deathmenu.lua @@ -23,7 +23,7 @@ detailsOnDeathMenu.warningLabel.textcolor = "red" detailsOnDeathMenu.warningLabel:SetPoint ("bottomleft", detailsOnDeathMenu, "bottomleft", 5, 2) detailsOnDeathMenu.warningLabel:Hide() -detailsOnDeathMenu:SetScript ("OnEvent", function (self, event, ...) +detailsOnDeathMenu:SetScript ("OnEvent", function(self, event, ...) if (event == "ENCOUNTER_END") then C_Timer.After (0.5, detailsOnDeathMenu.ShowPanel) end @@ -130,10 +130,10 @@ detailsOnDeathMenu.breakdownButton.CoolTip = { end end, --> called when user mouse over the frame - OnEnterFunc = function (self) + OnEnterFunc = function(self) detailsOnDeathMenu.button_mouse_over = true end, - OnLeaveFunc = function (self) + OnLeaveFunc = function(self) detailsOnDeathMenu.button_mouse_over = false end, FixedValue = "none", @@ -171,10 +171,10 @@ detailsOnDeathMenu.enduranceButton.CoolTip = { end end, --> called when user mouse over the frame - OnEnterFunc = function (self) + OnEnterFunc = function(self) detailsOnDeathMenu.button_mouse_over = true end, - OnLeaveFunc = function (self) + OnLeaveFunc = function(self) detailsOnDeathMenu.button_mouse_over = false end, FixedValue = "none", @@ -203,10 +203,10 @@ detailsOnDeathMenu.spellsButton.CoolTip = { GameCooltip2:AddLine ("Open your player Details! breakdown.") end, --> called when user mouse over the frame - OnEnterFunc = function (self) + OnEnterFunc = function(self) detailsOnDeathMenu.button_mouse_over = true end, - OnLeaveFunc = function (self) + OnLeaveFunc = function(self) detailsOnDeathMenu.button_mouse_over = false end, FixedValue = "none", @@ -289,7 +289,7 @@ function detailsOnDeathMenu.ShowPanel() end end -hooksecurefunc ("StaticPopup_Show", function (which, text_arg1, text_arg2, data, insertedFrame) +hooksecurefunc ("StaticPopup_Show", function(which, text_arg1, text_arg2, data, insertedFrame) if (which == "DEATH") then if (detailsOnDeathMenu.Debug) then C_Timer.After (0.5, detailsOnDeathMenu.ShowPanel) @@ -297,7 +297,7 @@ hooksecurefunc ("StaticPopup_Show", function (which, text_arg1, text_arg2, data, end end) -hooksecurefunc ("StaticPopup_Hide", function (which, data) +hooksecurefunc ("StaticPopup_Hide", function(which, data) if (which == "DEATH") then detailsOnDeathMenu:Hide() end diff --git a/functions/deathrecap.lua b/functions/deathrecap.lua index 6c49d045..974e2372 100644 --- a/functions/deathrecap.lua +++ b/functions/deathrecap.lua @@ -5,7 +5,7 @@ local textAlpha = 0.9 local AceLocale = LibStub ("AceLocale-3.0") local L = AceLocale:GetLocale ( "Details" ) -local on_deathrecap_line_enter = function (self) +local on_deathrecap_line_enter = function(self) if (self.spellid) then GameTooltip:SetOwner (self, "ANCHOR_RIGHT") Details:GameTooltipSetSpellByID (self.spellid) @@ -19,7 +19,7 @@ local on_deathrecap_line_enter = function (self) end end -local on_deathrecap_line_leave = function (self) +local on_deathrecap_line_leave = function(self) GameTooltip:Hide() self:SetBackdropColor (.3, .3, .3, 0) self.backgroundTextureOverlay:Hide() @@ -29,7 +29,7 @@ local on_deathrecap_line_leave = function (self) self.lifePercent:SetAlpha (textAlpha) end -local create_deathrecap_line = function (parent, n) +local create_deathrecap_line = function(parent, n) local line = CreateFrame ("frame", "DetailsDeathRecapLine" .. n, parent, "BackdropTemplate") line:SetPoint ("topleft", parent, "topleft", 10, (-24 * n) - 17) line:SetPoint ("topright", parent, "topright", -10, (-24 * n) - 17) @@ -155,7 +155,7 @@ local create_deathrecap_line = function (parent, n) return line end -local OpenDetailsDeathRecapAtSegment = function (segment) +local OpenDetailsDeathRecapAtSegment = function(segment) Details.OpenDetailsDeathRecap (segment, RecapID) end @@ -393,7 +393,7 @@ function Details.OpenDetailsDeathRecap (segment, RecapID, fromChat) for i = #events, 1, -1 do tinsert (BiggestDamageHits, events [i]) end - table.sort (BiggestDamageHits, function (t1, t2) + table.sort (BiggestDamageHits, function(t1, t2) return t1[3] > t2[3] end) for i = #BiggestDamageHits, 1, -1 do @@ -460,7 +460,7 @@ function Details.OpenDetailsDeathRecap (segment, RecapID, fromChat) end end - table.sort (BiggestDamageHits, function (t1, t2) + table.sort (BiggestDamageHits, function(t1, t2) return t1[4] > t2[4] end) @@ -475,7 +475,7 @@ function Details.OpenDetailsDeathRecap (segment, RecapID, fromChat) local evType = event [1] local hp = min (floor (event [5] / maxHP * 100), 100) - local spellName, _, spellIcon = Details.GetSpellInfo (event [2]) + local spellName, _, spellIcon = Details.GetSpellInfo(event [2]) local amount = event [3] local eventTime = event [4] local source = event [6] diff --git a/functions/dungeon.lua b/functions/dungeon.lua index 4130050f..b1c65f7d 100644 --- a/functions/dungeon.lua +++ b/functions/dungeon.lua @@ -28,7 +28,7 @@ function mythicDungeonCharts:Debug (...) end end -local addPlayerDamage = function (unitName, unitRealm) +local addPlayerDamage = function(unitName, unitRealm) --get the combatlog name local CLName @@ -134,7 +134,7 @@ local addPlayerDamage = function (unitName, unitRealm) end end -local tickerCallback = function (tickerObject) +local tickerCallback = function(tickerObject) --check if is inside the dungeon local inInstance = IsInInstance(); @@ -319,7 +319,7 @@ function mythicDungeonCharts.ShowReadyPanel() f.DiscartButton:SetPoint ("right", f.ShowButton, "left", -5, 0) --disable feature check box (dont show this again) - local on_switch_enable = function (self, _, value) + local on_switch_enable = function(self, _, value) _detalhes.mythic_plus.show_damage_graphic = not value end local notAgainSwitch, notAgainLabel = DetailsFramework:CreateSwitch (f, on_switch_enable, not _detalhes.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, Loc ["STRING_MINITUTORIAL_BOOKMARK4"], DetailsFramework:GetTemplate ("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft") @@ -502,7 +502,7 @@ function mythicDungeonCharts.ShowChart() end) --> replace the default click function - local minimize_func = function (self) + local minimize_func = function(self) if (f.IsMinimized) then f.IsMinimized = false fMinimized:Hide() @@ -523,7 +523,7 @@ function mythicDungeonCharts.ShowChart() --enabled box -- /run _G.DetailsMythicDungeonChartHandler.ShowChart(); DetailsMythicDungeonChartFrame.ShowChartFrame() - local on_switch_enable = function (_, _, state) + local on_switch_enable = function(_, _, state) _detalhes.mythic_plus.show_damage_graphic = state end local enabledSwitch, enabledLabel = Details.gump:CreateSwitch (f, on_switch_enable, _detalhes.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, "Enabled", Details.gump:GetTemplate ("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft") @@ -698,14 +698,14 @@ function mythicDungeonCharts.ShowChart() end local showID = 0 -local HideTooltip = function (ticker) +local HideTooltip = function(ticker) if (showID == ticker.ShowID) then GameCooltip2:Hide() mythicDungeonCharts.Frame.BossWidgetsFrame.GraphPin:Hide() mythicDungeonCharts.Frame.BossWidgetsFrame.GraphPinGlow:Hide() end end -local PixelFrameOnEnter = function (self) +local PixelFrameOnEnter = function(self) local playerName = self.PlayerName --get the percent from the pixel height relative to the chart window local dps = self.Height / mythicDungeonCharts.Frame.ChartFrame:GetHeight() @@ -731,7 +731,7 @@ local PixelFrameOnEnter = function (self) GameCooltip2:Show() showID = showID + 1 end -local PixelFrameOnLeave = function (self) +local PixelFrameOnLeave = function(self) local timer = C_Timer.NewTimer (1, HideTooltip) timer.ShowID = showID end diff --git a/functions/events.lua b/functions/events.lua index 1adcc2ee..fd58ca9c 100644 --- a/functions/events.lua +++ b/functions/events.lua @@ -238,7 +238,7 @@ local common_events = { ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> internal functions - local dispatch_error = function (name, errortext) + local dispatch_error = function(name, errortext) _detalhes:Msg ((name or ""), " |cFFFF9900error|r: ", errortext) end @@ -323,7 +323,7 @@ local common_events = { end end - --if no function (only registred the event) sent the event to OnDetailsEvent + --if no function(only registred the event) sent the event to OnDetailsEvent else if (PluginObject.Enabled and PluginObject.__enabled) then _detalhes:QuickDispatchEventWithContext (PluginObject, PluginObject.OnDetailsEvent, event, ...) diff --git a/functions/immersion.lua b/functions/immersion.lua index 4b781d8d..3c865a26 100644 --- a/functions/immersion.lua +++ b/functions/immersion.lua @@ -40,7 +40,7 @@ function immersionFrame.CheckIfCanEnableImmersion() end --check events -immersionFrame:SetScript("OnEvent", function (_, event, ...) +immersionFrame:SetScript("OnEvent", function(_, event, ...) if (event == "ZONE_CHANGED_NEW_AREA") then C_Timer.After(3, immersionFrame.CheckIfCanEnableImmersion) end diff --git a/functions/mythicdungeon.lua b/functions/mythicdungeon.lua index a719d8a1..c3031118 100644 --- a/functions/mythicdungeon.lua +++ b/functions/mythicdungeon.lua @@ -814,7 +814,7 @@ function DetailsMythicPlusFrame.EventListener.OnDetailsEvent (contextObject, eve end end -DetailsMythicPlusFrame:SetScript ("OnEvent", function (_, event, ...) +DetailsMythicPlusFrame:SetScript ("OnEvent", function(_, event, ...) if (event == "START_TIMER") then DetailsMythicPlusFrame.LastTimer = GetTime() diff --git a/functions/plater.lua b/functions/plater.lua index bde9fb59..ab02010d 100644 --- a/functions/plater.lua +++ b/functions/plater.lua @@ -18,7 +18,7 @@ PLATER_DPS_SAMPLE_SIZE = CONST_BUFFER_SIZE * CONST_REALTIME_UPDATE_TIME plater_integration_frame.OnTickFrame = CreateFrame ("frame", "DetailsPlaterFrameOnTicker", UIParent, "BackdropTemplate") --> on tick function -plater_integration_frame.OnTickFrameFunc = function (self, deltaTime) +plater_integration_frame.OnTickFrameFunc = function(self, deltaTime) if (self.NextUpdate < 0) then for targetGUID, damageTable in pairs (plater_integration_frame.DamageTaken) do @@ -96,7 +96,7 @@ function plater_integration_frame.AddDamageToGUID (sourceGUID, targetGUID, time, end end -plater_integration_frame:SetScript ("OnEvent", function (self) +plater_integration_frame:SetScript ("OnEvent", function(self) local time, token, hidding, sourceGUID, sourceName, sourceFlag, sourceFlag2, targetGUID, targetName, targetFlag, targetFlag2, spellID, spellName, spellType, amount, overKill, school, resisted, blocked, absorbed, isCritical = CombatLogGetCurrentEventInfo() --> tamage taken by the GUID unit diff --git a/functions/profiles.lua b/functions/profiles.lua index 85d41005..d1b98708 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -203,7 +203,7 @@ function _detalhes:CreatePanicWarning() _detalhes.instance_load_failed:SetPoint ("topright", UIParent, "topright", 0, -250) end -local safe_load = function (func, param1, ...) +local safe_load = function(func, param1, ...) local okey, errortext = pcall (func, param1, ...) if (not okey) then if (not _detalhes.instance_load_failed) then diff --git a/functions/rowanimation.lua b/functions/rowanimation.lua index 3fe01696..3f6785e2 100644 --- a/functions/rowanimation.lua +++ b/functions/rowanimation.lua @@ -56,7 +56,7 @@ --> install default animations do - local fade_func = function (row, state) + local fade_func = function(row, state) if (state) then Details.FadeHandler.Fader (row, "out") else diff --git a/functions/skins.lua b/functions/skins.lua index 3d4323c7..dd38e099 100644 --- a/functions/skins.lua +++ b/functions/skins.lua @@ -525,7 +525,7 @@ local _ }, }, - callback = function (skin, instance, just_updating) + callback = function(skin, instance, just_updating) --none end, @@ -748,7 +748,7 @@ local _ ["bg_b"] = 0.0941, }, - callback = function (skin, instance, just_updating) + callback = function(skin, instance, just_updating) --none end, @@ -1110,7 +1110,7 @@ local _ right_corner_anchor_bottom = {96, 0}, --[[ callback function execute after all changes on the window, first argument is this skin table, second is the instance where the skin was applied --]] - callback = function (self, instance) end, + callback = function(self, instance) end, --[[ control_script is a OnUpdate script, it start right after all changes on the window and also after the callback --]] --[[ control_script_on_start run before the control_script, use it to reset values if needed --]] control_script_on_start = nil, @@ -1372,7 +1372,7 @@ local _ right_corner_anchor_bottom = {96, 0}, --[[ callback function execute after all changes on the window, first argument is this skin table, second is the instance where the skin was applied --]] - callback = function (self, instance) end, + callback = function(self, instance) end, --[[ control_script is a OnUpdate script, it start right after all changes on the window and also after the callback --]] --[[ control_script_on_start run before the control_script, use it to reset values if needed --]] control_script_on_start = nil, @@ -1623,7 +1623,7 @@ local _ right_corner_anchor_bottom = {96, 0}, --[[ callback function execute after all changes on the window, first argument is this skin table, second is the instance where the skin was applied --]] - callback = function (self, instance) end, + callback = function(self, instance) end, --[[ control_script is a OnUpdate script, it start right after all changes on the window and also after the callback --]] --[[ control_script_on_start run before the control_script, use it to reset values if needed --]] control_script_on_start = nil, @@ -1811,7 +1811,7 @@ local _ right_corner_anchor_bottom = {95, 0}, --[[ callback function execute after all changes on the window, first argument is this skin table, second is the instance where the skin was applied --]] - callback = function (self, instance) end, + callback = function(self, instance) end, --[[ control_script is a OnUpdate script, it start right after all changes on the window and also after the callback --]] --[[ control_script_on_start run before the control_script, use it to reset values if needed --]] control_script_on_start = nil, @@ -2509,7 +2509,7 @@ local _ ["bars_inverted"] = false, }, - callback = function (skin, instance, just_updating) + callback = function(skin, instance, just_updating) --none end, @@ -2793,7 +2793,7 @@ local _ ["bars_sort_direction"] = 1, }, - callback = function (skin, instance, just_updating) + callback = function(skin, instance, just_updating) --none end, diff --git a/functions/slash.lua b/functions/slash.lua index c2097086..f8c3d354 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -674,7 +674,7 @@ function SlashCmdList.DETAILS (msg, editbox) if (playerActor and playerActor.buff_uptime_spells and playerActor.buff_uptime_spells._ActorTable) then for spellid, spellTable in pairs (playerActor.buff_uptime_spells._ActorTable) do - local spellname = GetSpellInfo (spellid) + local spellname = GetSpellInfo(spellid) if (spellname) then print (spellid, spellname, spellTable.uptime) end @@ -692,7 +692,7 @@ function SlashCmdList.DETAILS (msg, editbox) elseif (msg == "imageedit") then - local callback = function (width, height, overlayColor, alpha, texCoords) + local callback = function(width, height, overlayColor, alpha, texCoords) print (width, height, alpha) print ("overlay: ", unpack (overlayColor)) print ("crop: ", unpack (texCoords)) @@ -798,7 +798,7 @@ function SlashCmdList.DETAILS (msg, editbox) Details.id_frame.texto:SetText ("") Details.id_frame.texto.perdeu_foco = nil - Details.id_frame.texto:SetScript ("OnEnterPressed", function () + Details.id_frame.texto:SetScript ("OnEnterPressed", function() Details.id_frame.texto:ClearFocus() Details.id_frame:Hide() end) @@ -855,7 +855,7 @@ function SlashCmdList.DETAILS (msg, editbox) _detalhes.id_frame.texto:SetText ("") --localize-me _detalhes.id_frame.texto.perdeu_foco = nil - _detalhes.id_frame.texto:SetScript ("OnEnterPressed", function () + _detalhes.id_frame.texto:SetScript ("OnEnterPressed", function() _detalhes.id_frame.texto:ClearFocus() _detalhes.id_frame:Hide() end) @@ -1300,7 +1300,7 @@ function SlashCmdList.DETAILS (msg, editbox) -- https://www.dropbox.com/s/ulyeqa2z0ummlu7/1024.tga?dl=0 local time = 0 - a:SetScript ("OnUpdate", function (self, deltaTime) + a:SetScript ("OnUpdate", function(self, deltaTime) time = time + deltaTime --texture:SetSize (math.random (50, 300), math.random (50, 300)) @@ -1318,7 +1318,7 @@ function SlashCmdList.DETAILS (msg, editbox) elseif (msg == "alert") then --local instancia = _detalhes.tabela_instancias [1] - local f = function (a, b, c, d, e, f, g) print (a, b, c, d, e, f, g) end + local f = function(a, b, c, d, e, f, g) print (a, b, c, d, e, f, g) end --instancia:InstanceAlert (Loc ["STRING_PLEASE_WAIT"], {[[Interface\COMMON\StreamCircle]], 22, 22, true}, 5, {f, 1, 2, 3, 4, 5}) local lower_instance = _detalhes:GetLowerInstanceNumber() @@ -1796,7 +1796,7 @@ function Details:UpdateUserPanel (usersTable) DetailsUserPanel.Header = DetailsFramework:CreateHeader (DetailsUserPanel, headerTable, headerOptions) DetailsUserPanel.Header:SetPoint ("topleft", DetailsUserPanel, "topleft", 5, headerY) - local scroll_refresh = function (self, data, offset, total_lines) + local scroll_refresh = function(self, data, offset, total_lines) --store user names shown local userShown = {} @@ -1819,7 +1819,7 @@ function Details:UpdateUserPanel (usersTable) end end - local lineOnEnter = function (self) + local lineOnEnter = function(self) if (self.IsCritical) then self:SetBackdropColor (unpack (backdrop_color_is_critical_on_enter)) else @@ -1827,7 +1827,7 @@ function Details:UpdateUserPanel (usersTable) end end - local lineOnLeave = function (self) + local lineOnLeave = function(self) if (self.IsCritical) then self:SetBackdropColor (unpack (backdrop_color_is_critical)) else @@ -1837,7 +1837,7 @@ function Details:UpdateUserPanel (usersTable) GameTooltip:Hide() end - local scroll_createline = function (self, index) + local scroll_createline = function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 3, -((index-1)*(scroll_line_height+1)) - 1) line:SetSize (scroll_width - 2, scroll_line_height) @@ -1873,7 +1873,7 @@ function Details:UpdateUserPanel (usersTable) end local usersScroll = DetailsFramework:CreateScrollBox (DetailsUserPanel, "$parentUsersScroll", scroll_refresh, DetailsUserPanel.Data, scroll_width, scroll_height, scroll_lines, scroll_line_height) - DetailsFramework:ReskinSlider (usersScroll) + DetailsFramework:ReskinSlider(usersScroll) usersScroll:SetPoint ("topleft", DetailsUserPanel, "topleft", 5, scrollY) Details.UserPanel.ScrollBox = usersScroll diff --git a/functions/spellcache.lua b/functions/spellcache.lua index 5af413b5..8783271b 100644 --- a/functions/spellcache.lua +++ b/functions/spellcache.lua @@ -49,7 +49,7 @@ do spellIcon = [[Interface\ICONS\INV_Weapon_Bow_07]] else - spellName, _, spellIcon = GetSpellInfo (spell) + spellName, _, spellIcon = GetSpellInfo(spell) end if (not spellName) then @@ -62,7 +62,7 @@ do --> reset spell cache function _detalhes:ClearSpellCache() _detalhes.spellcache = _setmetatable ({}, - {__index = function (tabela, valor) + {__index = function(tabela, valor) local esta_magia = _rawget (tabela, valor) if (esta_magia) then return esta_magia @@ -74,7 +74,7 @@ do if (is_classic_exp) then cache = {GetSpellInfoClassic(valor)} else - cache = {_GetSpellInfo (valor)} + cache = {_GetSpellInfo(valor)} end tabela [valor] = cache return cache @@ -90,7 +90,7 @@ do --> built-in overwrites for spellId, spellTable in pairs (_detalhes.SpellOverwrite) do - local name, _, icon = _GetSpellInfo (spellId) + local name, _, icon = _GetSpellInfo(spellId) _rawset (_detalhes.spellcache, spellId, {spellTable.name or name, 1, spellTable.icon or icon}) end @@ -101,7 +101,7 @@ do end end - local lightOfTheMartyr_Name, _, lightOfTheMartyr_Icon = _GetSpellInfo (196917) + local lightOfTheMartyr_Name, _, lightOfTheMartyr_Icon = _GetSpellInfo(196917) lightOfTheMartyr_Name = lightOfTheMartyr_Name or "Deprecated Spell - Light of the Martyr" lightOfTheMartyr_Icon = lightOfTheMartyr_Icon or "" @@ -154,30 +154,30 @@ do [7] = {name = Loc ["STRING_ENVIRONMENTAL_LAVA"], icon = [[Interface\ICONS\Ability_Rhyolith_Volcano]]}, [8] = {name = Loc ["STRING_ENVIRONMENTAL_SLIME"], icon = [[Interface\ICONS\Ability_Creature_Poison_02]]}, [98021] = {name = Loc ["STRING_SPIRIT_LINK_TOTEM"]}, - [108271] = {name = GetSpellInfo (108271), icon = "Interface\\Addons\\Details\\images\\icon_astral_shift"}, + [108271] = {name = GetSpellInfo(108271), icon = "Interface\\Addons\\Details\\images\\icon_astral_shift"}, [196917] = {name = lightOfTheMartyr_Name .. " (" .. Loc ["STRING_DAMAGE"] .. ")", icon = lightOfTheMartyr_Icon}, --> bfa trinkets (deprecated) - [278155] = {name = GetSpellInfo (278155) .. " (Trinket)"}, --[Twitching Tentacle of Xalzaix] - [279664] = {name = GetSpellInfo (279664) .. " (Trinket)"}, --[Vanquished Tendril of G'huun] - [278227] = {name = GetSpellInfo (278227) .. " (Trinket)"}, --[T'zane's Barkspines] - [278383] = {name = GetSpellInfo (278383) .. " (Trinket)"}, --[Azurethos' Singed Plumage] - [278862] = {name = GetSpellInfo (278862) .. " (Trinket)"}, --[Drust-Runed Icicle] - [278359] = {name = GetSpellInfo (278359) .. " (Trinket)"}, --[Doom's Hatred] - [278812] = {name = GetSpellInfo (278812) .. " (Trinket)"}, --[Lion's Grace] - [270827] = {name = GetSpellInfo (270827) .. " (Trinket)"}, --[Vessel of Skittering Shadows] - [271071] = {name = GetSpellInfo (271071) .. " (Trinket)"}, --[Conch of Dark Whispers] - [270925] = {name = GetSpellInfo (270925) .. " (Trinket)"}, --[Hadal's Nautilus] - [271115] = {name = GetSpellInfo (271115) .. " (Trinket)"}, --[Ignition Mage's Fuse] - [271462] = {name = GetSpellInfo (271462) .. " (Trinket)"}, --[Rotcrusted Voodoo Doll] - [271465] = {name = GetSpellInfo (271465) .. " (Trinket)"}, --[Rotcrusted Voodoo Doll] - [268998] = {name = GetSpellInfo (268998) .. " (Trinket)"}, --[Balefire Branch] - [271671] = {name = GetSpellInfo (271671) .. " (Trinket)"}, --[Lady Waycrest's Music Box] - [277179] = {name = GetSpellInfo (277179) .. " (Trinket)"}, --[Dread Gladiator's Medallion] - [277187] = {name = GetSpellInfo (277187) .. " (Trinket)"}, --[Dread Gladiator's Emblem] - [277181] = {name = GetSpellInfo (277181) .. " (Trinket)"}, --[Dread Gladiator's Insignia] - [277185] = {name = GetSpellInfo (277185) .. " (Trinket)"}, --[Dread Gladiator's Badge] - [278057] = {name = GetSpellInfo (278057) .. " (Trinket)"}, --[Vigilant's Bloodshaper] + [278155] = {name = GetSpellInfo(278155) .. " (Trinket)"}, --[Twitching Tentacle of Xalzaix] + [279664] = {name = GetSpellInfo(279664) .. " (Trinket)"}, --[Vanquished Tendril of G'huun] + [278227] = {name = GetSpellInfo(278227) .. " (Trinket)"}, --[T'zane's Barkspines] + [278383] = {name = GetSpellInfo(278383) .. " (Trinket)"}, --[Azurethos' Singed Plumage] + [278862] = {name = GetSpellInfo(278862) .. " (Trinket)"}, --[Drust-Runed Icicle] + [278359] = {name = GetSpellInfo(278359) .. " (Trinket)"}, --[Doom's Hatred] + [278812] = {name = GetSpellInfo(278812) .. " (Trinket)"}, --[Lion's Grace] + [270827] = {name = GetSpellInfo(270827) .. " (Trinket)"}, --[Vessel of Skittering Shadows] + [271071] = {name = GetSpellInfo(271071) .. " (Trinket)"}, --[Conch of Dark Whispers] + [270925] = {name = GetSpellInfo(270925) .. " (Trinket)"}, --[Hadal's Nautilus] + [271115] = {name = GetSpellInfo(271115) .. " (Trinket)"}, --[Ignition Mage's Fuse] + [271462] = {name = GetSpellInfo(271462) .. " (Trinket)"}, --[Rotcrusted Voodoo Doll] + [271465] = {name = GetSpellInfo(271465) .. " (Trinket)"}, --[Rotcrusted Voodoo Doll] + [268998] = {name = GetSpellInfo(268998) .. " (Trinket)"}, --[Balefire Branch] + [271671] = {name = GetSpellInfo(271671) .. " (Trinket)"}, --[Lady Waycrest's Music Box] + [277179] = {name = GetSpellInfo(277179) .. " (Trinket)"}, --[Dread Gladiator's Medallion] + [277187] = {name = GetSpellInfo(277187) .. " (Trinket)"}, --[Dread Gladiator's Emblem] + [277181] = {name = GetSpellInfo(277181) .. " (Trinket)"}, --[Dread Gladiator's Insignia] + [277185] = {name = GetSpellInfo(277185) .. " (Trinket)"}, --[Dread Gladiator's Badge] + [278057] = {name = GetSpellInfo(278057) .. " (Trinket)"}, --[Vigilant's Bloodshaper] } end @@ -204,7 +204,7 @@ do local t = _detalhes.savedCustomSpells[index] if (t) then local spellid = t [1] - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) if (defaultSpellCustomization [spellid]) then name = defaultSpellCustomization [spellid].name @@ -236,7 +236,7 @@ do end if (not already_have) then - local name, _, icon = GetSpellInfo (spellid) + local name, _, icon = GetSpellInfo(spellid) _detalhes:UserCustomSpellAdd (spellid, t.name or name or "Unknown", t.icon or icon or [[Interface\InventoryItems\WoWUnknownItem01]]) end @@ -246,7 +246,7 @@ do local spelltable = _detalhes.savedCustomSpells [i] local spellid = spelltable [1] if (spellid > 10) then - local exists = _GetSpellInfo (spellid) + local exists = _GetSpellInfo(spellid) if (not exists) then tremove (_detalhes.savedCustomSpells, i) end @@ -274,7 +274,7 @@ do local t = _detalhes.savedCustomSpells [index] if (t) then local spellid = t [1] - local name, _, icon = _GetSpellInfo (spellid) + local name, _, icon = _GetSpellInfo(spellid) if (name) then _rawset (_detalhes.spellcache, spellid, {name, 1, icon}) end @@ -286,12 +286,12 @@ do --> overwrite for API GetSpellInfo function - _detalhes.getspellinfo = function (spellid) return _unpack (_detalhes.spellcache[spellid]) end + _detalhes.getspellinfo = function(spellid) return _unpack (_detalhes.spellcache[spellid]) end _detalhes.GetSpellInfo = _detalhes.getspellinfo --> overwrite SpellInfo if the spell is a DoT, so Details.GetSpellInfo will return the name modified function _detalhes:SpellIsDot (spellid) - local spellName, rank, spellIcon = _GetSpellInfo (spellid) + local spellName, rank, spellIcon = _GetSpellInfo(spellid) if (spellName) then _rawset (_detalhes.spellcache, spellid, {spellName .. Loc ["STRING_DOT"], rank, spellIcon}) diff --git a/functions/spells.lua b/functions/spells.lua index 055dca59..390f1737 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -3902,7 +3902,7 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) _detalhes.SpellOverwrite = { - --[124464] = {name = GetSpellInfo (124464) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> shadow word: pain mastery proc (priest) + --[124464] = {name = GetSpellInfo(124464) .. " (" .. Loc ["STRING_MASTERY"] .. ")"}, --> shadow word: pain mastery proc (priest) } _detalhes.spells_school = { @@ -3971,7 +3971,7 @@ local MiscContainerNames = { "cc_break_spells", "ress_spells", } -local SplitLoadFunc = function (self, deltaTime) +local SplitLoadFunc = function(self, deltaTime) --which container it will iterate on this tick local container = Details.tabela_vigente and Details.tabela_vigente [SplitLoadFrame.NextActorContainer] and Details.tabela_vigente [SplitLoadFrame.NextActorContainer]._ActorTable diff --git a/functions/testbars.lua b/functions/testbars.lua index 38f743c5..96693401 100644 --- a/functions/testbars.lua +++ b/functions/testbars.lua @@ -32,15 +32,17 @@ end function Details:CreateTestBars (alphabet, isArena) local current_combat = Details:GetCombat ("current") local pclass = select (2, UnitClass ("player")) - + local actors_name = { - {"Spiro", "EVOKER"}, - {"Spiro", "EVOKER"}, - {"Spiro", "EVOKER"}, - {"Spiro", "EVOKER"}, - {"Spiro", "EVOKER"}, - {"Spiro", "EVOKER"}, - {"Drakaris", "EVOKER"}, + {"Spiro", "EVOKER", 1467}, + {"Spiro", "EVOKER", 1467}, + {"Spiro", "EVOKER", 1467}, + {"Spiro", "EVOKER", 1467}, + {"Spiro", "EVOKER", 1468}, + {"Spiro", "EVOKER", 1468}, + {"Spiro", "EVOKER", 1468}, + {"Spiro", "EVOKER", 1468}, + {"Drakaris", "EVOKER", 1468}, {"Ragnaros", "MAGE", 63}, {"The Lich King", "DEATHKNIGHT", }, {"Your Neighbor", "SHAMAN", }, diff --git a/functions/timedata.lua b/functions/timedata.lua index e5ccae2b..6dadf149 100644 --- a/functions/timedata.lua +++ b/functions/timedata.lua @@ -214,7 +214,7 @@ return data_captured end - local exec_user_func = function (func, attributes, data, this_second) + local exec_user_func = function(func, attributes, data, this_second) local okey, result = _pcall (func, attributes) if (not okey) then diff --git a/images/bar_textures/gradient_white_10percent_left.tga b/images/bar_textures/gradient_white_10percent_left.tga new file mode 100644 index 0000000000000000000000000000000000000000..7f9cd4ef0926e84f8fb4c1a2b1a7652eef8da819 GIT binary patch literal 32812 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

KH``>6xKeG_$nB>x9A4is4pV6ps% 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�~`h5YxmfT->tdw?kaH~v%eC;t!mKXszVnW*_A<3Bk+ z?5|Y+_Z~p(hyR`O;HcWME#&d}_z(L-S^jV1?~ME8{s`uWg8g&x9}i&sCnA_1*Z$=J z$ocUAD1BwhWv`bj1^ej(AfkEL&u@9L{I|M)$bYN-`xxZ@cz}@qiPI z;6C}k^#d6D<9-0;{N()zFA%byHryxgN3`KT^?wu0w;BKu=A(@I22r)&zj5DuK*)dE z)c%eAi^>1Z1HfSNe|!LK_zzP{xqrHh{fps09)KD^CI0hw5XV;W_=ENT_Y^OE-c(b9N8#suc}UM|zR&Nnq4 zMSBKBYJR%kp}oI6@3p!Ayv7nTukg6*zc%Gg>T?v8TMS(rD@E(qkK%~f-t%115fPjp zQ-AE0k3V&9{rfF<`qK4yOyKVSe%>GdU;XT_+^!$)@@?P$9~^(p^@Glon$~Y?>bR@j z#oBrrLnAHG{%nY~fPGC$elon~SbebWF|7-H`jGnc2i?jYM|`Bc>2EK26|^T3>b|Zq zWRZ5g`-Ll9o_6iU>#k|9_5(rDx&XOHmDA_6Ht@Da&6m&~fRUOt1`st|*I0uu^nd-L z-!1KHaoLA5J~nC2fGPEb#s}*2&UgIA$}4-t`AJE9EfeGltz2K{VwuF~p+KWQQh$KXThp~CYjjR(V%Xl+u{Lmh&@ipT4uASpJT3`{#tj2>^ksoyT`D(8Pz^*mqW zkNW#Vmio5x=~Sqo9zUe@`5s}6vCh%{kGp;Q;iDRJBt8>+Zk=*{x3qSmls}yJu}9;K z^DkJ2?#8=b@BZsQyTLR1Jko^52k;ql^{V?vGWI`^t#_!}@x%PCpZ3Rs|Dgvk z{#(2>Jmfuq`2hGIdVoy(3D=RN+6&4+Z=21v62E|5xQ1@Bqi@_xrEJf7ovx0Pf=fjQ^j%ecAJ$`03CY&wRKK|9|(l zs&z*EzkTYE_W`&5e4pn(5f1?S%>&Rr(W3Exfd_#78Tzjy#otZ%JuR|5-|>g+XPh1E z?~pfv{X}EGMfl(UT%Q;1oW}B_xF0`7&ZYN>e1P2#|B=n}gZ&}@@c<$J%>&HE|J+WE zBb4C2vETauF+baP(k+Jnp$C|c|J#o#2N(0V_dlZJ)%g|hKYpFgPq=S_{Wky4`+$J` z-UH|yEvq*uH%Lp_gZ17AgzTryn!xDs=d?zk6te%vFK>5EhqE#Ny+5epe~kMUL-xbg z(F<>u$@pI!IO)AW$a32Ddh-Db;Xlu{*M;oI1BC3S4gW*=&lq?Bx0sAoUj9VtF#gZh04nGI%ihrXwTsCAtqw4`OS!f5 zxwwyv|FD0kuEc+z_rv}Q{3rMK_eYO=eup)HAosuaQ$6>KlB^B@|HB#pYXpWK0RD#_ z;L~51Jb?KCWB)bvBhaq)`;YmO)^{54-#oxv{D<+zd01~s-Ut6f4*>te8bGsZ450@| z=KmG>ZyrE30Qg_c1I))i_-`J-@_(xV-~q_}r!}^Q=-bNu;l9b|{Hg)KemsEjpBeyd z<3BY3@_)xA}ZNM!7$a!GFv9%?DWiA4k;y z(m@@-_+PV9*QU+N^&;+Pl>7VqUi=Sh0Ne-r@c;|W|KY!RfZP+>=SGToo`v(8vlmPC z{-_23|H=F9xzqxT`xcG=L}YotMa%y!!hQH}N~zuUT0X7;82>GfeWCSp0>S^X8o^!g z->czPJ5BKdo;Xir5d4OuipX7hd`Q5$` zfPMhl@V{1G-Q;=ky6VJ}^0iX-{UKlXC-=t#gnfhffZSu+|2*^n!_y8AfT#n&{!08O z_ox1E{I@zl$p2Ce;H%~Tglc&q|H<$10I(mGu|ML!)&9x#t|rw#!B%>&>A((N;4eE@Uv-{u4;Po~dzzJ7p(@ZUVZi^~g z;QrK^zB&1Cb^l8I#|uo#BN+Qb{=d7e!_6G*a{C%JkM;k9{GZ&Pz5w`d>?a!k2gCtn zb$^Rt?SC%*n@1p$^Wy=G|K$A0_z$z;e=IQ{?wdT*^&I$*7bs)Dyg*s*ujf_!{Zso# zA^(l%ZJKv%+$Z<9{NMOb9l+}TyoNU1x7xq&3y`0;+CR~_Z_&7K(QOY{tqK94vK?t-}p}*-o~!hD`j z^n|MzMB`;*c9|NC6~*>}7OLt{SX z)Q3N$b$3kT@)_vN`9ZJO<$FS%(wNw5S4Z8X<}#ou9oz1{=e0g=!N*KXx8@UcyZ@KH z_y4W(y7PT^>~1^S0qsDt2?s-phk#3x;zDr~GI2<7?w}B$N`e>~R57Fpa+&6rd!+m0 z=vIj$xkN?1u~gAqlnQAS<)j%CCeULto-u(m%^^c*IYWZmgX)}dlWQUW3+ujLYd`PD zYj3vMc9PERJ>rMAKFizt+uD0S&+Gm9to5vQ@Z@{ptmYEEulf1bdDTOE_8$#0fZdZ6(djf##-+L|wnT2AfO{WM?TQ`L(zwe8U!am%}F zR9vXBLwy!Y9_ZKg{MsMku;!MX*4T2Uu9IT{E#CKPn78ge&9~M0yheImUOUrG8y5wu ztg-&eDXl%Qb+KNf9Bv(4q54-PYQgb`^#0B^*#EP(|Gi@ROUkLw>NrEJsWbjubW)a`f(=?|I{_~B!E%^&Nv&s23> zeQEmr>%7mozvU)*E$va$dfTB~#Z~9Stve>d>Y>Td_Zxj@($W7p6;7*`&)k1x&euo# z1IOR$z5`kh0RQlV{~_k<`$t{6rm*wZx;F5n)(L*Ky4FDJBV(auh30k^ha}}!MeQ%F z>&j4Tn|=!!`>Snv(^kEIjRiz+n)(^FoAv)*<*jI&t~*1oeZ4!J+rBMo>L&wQ`%L-2 z^vBWB@X60LwtwnW_~aMA2;=+vW1P@=A=UUV-VB$YJCJK!dkegG?>$i$wrmNLuMULw z9=J!>jdn&2t?CLp7A?{GkzH{g!Y(l@Rii%5<+f)1uPo8Ho<2`v_j=Y|Ab*?|Ts}TL zq_KbP<)gOuWg+%#VohMJ=cC*lv8GQ+_er&J`(pw5yudnQsqVN}Ylvx{Bcff=TEbo% zD7KURgV{f*=UaM@dYvO$S0=W(<}gvW)~7&TGoV@j=iS#5QkngulY;>*+@;S#$3N5K8tYeoV9e*RTIKxL@lPWICg< z?$=*>wnje|x6#BU)xV`K&9gf*ay-}Mr0M|DHeHW}#&sW|@Q}q4(xKXXA zooY<;{8Byp^q!Dv;&&Ir%UXM=Q_Mij`AgNT|0|D-1cVPD!hdw%{)6EMC*F?iw+A4e zRhK6W7Y0Pr7`REtIBn@{N2&>BjL zQ5pa30aE@yu@?hAnp}3rPqGA)&szNdw>`x=FWfE-+Hs^JZP5uw+HyFfd_#3apWe4w|IL5c zU(f$;<>@u-7u!4jLOHD77ZI7&_5APM*c*<>>kKJ>OvPG)sbGHJfx#%+-C7IG;<@|e zF_x`Z8%5jv_v@zYpSS1b8usG>n)Sbi{pBj>&3<#=5ibD$^ZEFA0UhJ0ODx6hwm)GdpE#>`if7bjz`9MSdNA_#)r<&Zqj{kUo zlIAFr_gk$4_XK1Q0RK}}^d9X2h|c?Af6V{QeMk6j_EQ58|B*caIe(-4zx~3`K6n1l zemk(AI)K?v9RR+IQXc^GQ}){f3}?AN z{I>@n=SQ%AHvDgC(|eR6`@baqS5%iq=0EH=|H{d{bRrgoUZ@u-JYWrfoMJ>SGcTCw&8M~5kFO)_hx?ZKj|Yf8;Gn!kQUhq#{|@ank;-{LJ^;aeWFOGIrYoTD?ARJ>0PsH* z{I~D`fE4|B%jM&i}I-KvL_) z2NcEaH2<$(3%J?wZ}vChKjQ%K-yVQ50Ju;7Z;|s~-luB^6aG{GPxF8CpK$>5-(vu< zKjlB{pZbaBK}oc`RG&cq5&Vx{Amcym#{+m=-jST2y1&N(%wpKjSU_6)r=8aR@c^*D zzWz`C?=b*B9})hO`$z7393bI8_et502Z+DnY)oq|{O20KjswM5^Y1&TYxs2B;{{;9 z6+M8wxaYeW|Fj0MQ#FBFZEMJX*8yDrhySSA z@8A3<_lN&5A29|%g!%BlYq{2AmCSudYX7MRfaR$NAn!-q-}%2EOC2C(KkbzNj02ea zj-AUo0&*Py{->I{qVa}i{NMOM_}+J))Ms;JC_ka~`Vw_KF%WuxdMwwvAHNz>mG%vV zo3{Nh%)fWL@>;QRbzfNY(C%>8UabTC%1}6SN@F33F8=0hczn+@QAgiAs=0ldTaf7Z zY0YVn_B>CWUwZ>BRSjsFj(Mr0V^sP6#afkgTc%q&PlT?usyV%MCReZCAG&Af!6^1W zV6THsn>NM05a{#6N&mZ_*SMcF|KAQOUmlfo&P_GRoK>A?b1{cSYXPrZ8``w*Z&Bwj z)OP1;t?91)4)uO+`nt{!d^U}Qx8L(Z=z3G{St@I8V~sYc-jZsyo-@-;cdXL+NclhN zzBLq=YOPd#*Qng3@ks6cT*=gafpLxM{zup9zt`S5wWBp$`ej>WJbeA&J7Vl|)$qkv z*Vo@yo;{>mpEdcu{&zw5(|G`Wut9Zu%@;&(@6|Pd@(Me3oTu8eq!3d5;fS8&H_F`= z;dt~L-_{xcS9JZqB6A8;eey55|CII$R6MKud%t4G;jNncr&u`n(-F|LJ#tmR}4D9=aS>KKIAaJ3JK*d|cJA#_|#TPjykb{U3B2GWQ)n(rwHc zV85VI-H$f0U;70W->s@`-{sKyjSr#zZ12#Er{y?cwMmqdjYc^fYqe` zuCFiF^K_MT?X~u)w}$WC7A`z@NNX)-aT8o2rNq)PuSnJnjDlX{`9o^cuVDq-9zReqh zRjBB@$>wRaRPK!D#u|15QhAn*u1;pRP?D_JT`M=VxABU*DikS-X z8?I;Mu}S|Qf%P0G(ivS(yyuGc-Ca`*cWSI1`TDw@msO|u(Xz1Y=N&aF-Y=$0x4mA` z*h6<%KXPYOd6&*fQt94e=oz{*YC!7+vA+-bJI_lT_(Y$x&J$?e&y`!A(po3dvL9(K z|giDQ?cEw|K|U+ z2e_L5txsw_pa%TM1GInR?p*i)*x$ZdzrjZA=eCUhy}!}Cf2s3_Z`SHZ+7D5(2Y~rA z@_&;)qlYy|S?vF^_z(MIp08sF{=TO9svGt(Of+|z)bu%`|Sf@ z|7kJa9>C0p`>EDwPbfS9{I{;+|IOQVZOyJ}$p^HQZr51AvSAH`dDj#W%x%eO1pYp$?x$~%5|1@vsV157-)jlN6!860SNBf0}wmc_U5@ib$~6qp9y#X%XvTS zN96qW0Omg)07Vaw@PAS7FRJW!{x2`kt+@&a{u7)1{!{+bF8$jNuFC&g{`tWg{*(8Y zR`mFJ?Bibi9;eQSLm+0K#{9n0$G2=gZzx8?Y zf9L*FX{Y?B2JpUe59j{0U8|rDFsuAu$7W3)318YZuPfufxo;m} z{@Vk<@HGF2|E%|8A3)AOq%Sj+^TyU@*fXik@v%Wga?5A7uRc?UlA`bF*F#32e`cN zshIb}e%Am-y6?U!|2O-IDf`L)|D*Wt`o8mi*pJBlkv)L9?`ZBjlK;1V>&d9{f#GTH z%LBw3fLK4H2N3^Do1d+%0Vw|`?~m*k|7+L}|IK~XExsuK@d9w)>?fN0M0@}_Kiqd6 zz}$!Z)B?!=E%@(xLL9>v|H=8&{GXhk+&|@i>H*AuNAsUpP<{gU?E#3*&i~H+>-i7+ zJ5}$8|8U8+`j}Mqt{-3ZPA3*K@_(x;8j{IgU>^gZmjsd`bbD!G3>;L5aR?2?!9}i%4iG8UD zSo5u4MDD|W+La}m2PF>x`-yqp?{R>H{~dc(FG$$WSU}2u#sHdq|MmRud|ub@$pcsg z)&J3S4WL^4C-;vYAj|)$|08n$n*6_Ojkqs){y-D{Z~L8U0%;8(tNpj%zD(zwg#Y*e z@!#BcoGbs$ero^l-*x|#|K$Cy1Hk;$1Hgae8UQtaj{y)bp3?rj&rb{Hqu-8XtXA#c zxj!C&n!juRDgQ@c`#DLuKitO$)Yt!~-mg9yE<0QNWKKkQ$j+LYN(Y{Y-+{;U^oHOv3%{7*gq&pfK!B&+|^W)5E} zYX8ptiLl>_9zfi;2OygL=Ksa}d#=fU*Zm#gzh&QY&DgB}dcH>W{~G>h?4K+DW6eI# z`&ILfZ5UlutOKb2&lmt6Ao>7uexz$r5&W-=jOEeXC*lM0ydU->xSy(7|LgL9=lw)v z_M6+}{Amp!Wj|g3?z;v+8|IV$JG$;q?vGsecZC1;07Tf2JPttKZ}!Kib4Ka`Qufb< z|7rc-?1%s6J`pcq7Bdcj;J?}L{GYtvbpUezM*M$r`_?!H;Jn`v?x!Arnm@{YfS7Oo z6XAdA0nC5b0IuTSjW>oZfAw(q+h@KPZdBXX)f1PjcrKjymDbPKdS4?SejMAw*}D70 zBmebu=-ag?tnK|_xP8^3sGDxx5s=rrE-us@mkp2SDy`7(c1X;Y>A>> zD)on3Zh0##UHW0@S~VHER!@XQm8#0~RNE@)cb=$F91M$Y+a1<@`*Yp86p4jZB2?|N2?jE$;V= z8NHuQh6NfkK?RNL+@$@++Vvfy;v&7a>Y-M7z4oNm8Xc)Bs$rml*5*RZ`aim@94?;d z)Ni>bYH*2i?nG~Qw*d-87a7hmwf6Jjo72E$^m9(Pvf2lNSi|MY78`#ZYr zN>#KkXr95DWz!lLyUF1%D1S%s?+M+O>BH?h-c=W{@Bj!;5XS`0>AgLy_olf&s9FE( z+2L{YmXg*_WIe!Qe<*!bdsOV#b$U{J|7T(To0FmPf#&T=&uAShG^Fni9T3+M`~QsS z?~(tf%6oI)KH-f1*Dv32Mqc0rJ%0U|a(}HaP&ubP0siqyC~TapYT4Tw@7KP-i1rfA z39!nl9nVv(qU{!qVQ9PrG2}?d-o=)Ko}pH2JE+DSKQ&3^6g&F9D7pQS}QP8Hej zySQArekxthT$EatZH!{Av%+%K8PQUGAB)5%5g#xlm4jQ zm+lNG=e~|@=H~TXs>-)l?k|N6Z)uEPtS9cgr1@AcibiF4hc`d(3YYCjy9IbS{VAcleeQllQ(`rq8skBdw*7_lc zIfc#o-?OY3*VcRa=|=)OtNH&=ZhIuIpF{gaor4i`?uak!-J$h>G|w&5i~UcAPUU4| zzc~|V`}g;(?i=^@n;Z|FI!0dq>445_S_e>kKl0+U@i8&SpBN7>?0-5RXBgCTjO)30 zPTC_!k3>yr4k9w|U(}pJG^%UwO7a9-AMB0ou@6Rr)vNEUS^rc1uj&0kTyqZ((1`#2 zTCWfO!~W?pgY#;i5A$!)yue#`XntpRls$mC?+E+hKI&K{f1B|?vVWHR-}z`)KzIPN zA0Ke=zrGXq4)z|xcz~w;U%eny{%UdV0nC5Ln+_?@&-hP!CjJ-Y6?3h+d)fo!{Fe`4 zUO>YBFUtS+MPEMuKl+!>F!G&p?g7kydjOaZ|Lp_dKkScl2GutIXY>FG`_Jq6OxceY zaQ!}y8TT*9Z?Ha)x$js%9`O60e>wbbZCk3bb$Nh{|9F7P#tUNdMDzgW{{yN4G~$0` zzZh@s+XtBc#36YD_>b!O-~RoK|Mx1c*6YH4^S|^}LPoaEVDlXCeC77Rj z0Q)ubALgfm{meJEa_;{L_>TvG`St+J>0kCE)%oFmre)8mHlgDX(T4kGKVBf^e^JLb z%(w6WFyF!lc-+9Ts;sHF4Pn?PWWu0dgecC=fQsS-|QdL+JA5# z4`3evr|kh~!+hA!@f1CPm=F8$0OmjU!vny7v!6IAFTnp0>?gwiZJT%hYc6KXe|$j9`;!^~xqtgzDPnCD^PYeYpbkLZ@7x~`0RQ87fOs5zfO3D>Z+*PG)&qR_ZO!pJIW2O2xNn*N zk^R&Ql=~y{e)4~qpUT`P^1LzUS54xRY)l}{{l7^5PaOackn$f7VE(%XVE(%f&^KOJ z0}$hPD!)IZ?;0u-JivR8^o3#FKh6KURC7hs9)N2Bs`)>$ zEmP|Z^?;`R=QG1kB>8_m{|h>&A$&k&ewO1?1IYPL?w{uWu%8-$*xxc=b%c!n#bv4& zcx)y{y}oKS@Sj>hQF{s1C}BSyAmx9o1AO!KP)O9W>al=a18CZR9na4HV-)k@zC8fk z#{-!8=DzCy_4$8fJ`9$q0g(HrI(|iYdZGdCx9Tq`)? zKR%#Y|6zW*#%`MX(}w+U-*o`9-w{UF^FQ?fus;>tH~WcHK?->u^ zyx%e9|LafpHSIq+KXrd({*(JN27p}uhyUC59*MR8dj6C9TkwBqWHi^d149AX19a~l z3JCsF3vm9QdjQq{83RE0fVB4CxvV?S`xys75wZum8`5|CRf-)<`l2K<$67{Ko^>2f%%M0OI(o z#hUuR`R_>0-!%a00Mz}{8o((2B9Xc8nDRf41;}rlNu}qn=Racrk^Ojug#FY4T=#cu z`u*3{jLm)6Z~mtqpq~Gos@LNI>;vGx#W(=mx2OR`=EHp}%l{bzzyp~7i~-EZ|8z{* z{3pgX>=&;x&9(pLzGKRM>Hy|{TK|Xtxw70J{v-IGdVulgHJ>06+()hh!2h%cFcbe> z2k>42_<%+ppjrQ^{nzt9t^b?-#5fK>&Y$tW8pU(Q0CHt{e^UR4|0vc1YS_;_jnBt_ z*dO`7S$hPhx?kf%l087P{@1V{FOc!yG39@(1!VPqa(_GkHGhN;KyaTLfaSWsYXGkO z6R88he+wUA{u8^WdO}+Nr%nC88UNE7K(qeW^WV8Y>_=w5YXES+M{{7Tl>K;tSo2p6 zfXFeFvY)o=|Mmg!AMWD;5YJ&z190x|2>YG;;{o8l+0QsYQ~ql_{NaZ;h3_%`uXg7l z&2vn&=7%Rj&%Ps3w72~IXy_k46GeORU2p1o$)Q}OlEz#Tb={dZMx=dq1Hvd?NU_7^09y_i!|>)Q+eL7+B?Jid8eWlEIh2WIQqk@ zZ@(YK>%D#M<0$(UuJ`}m_rDh&-u$rodt>Z#+W(@)GTXntNPA#t-EOq`+A3;(VAR(Z zSJ&cOufOk-A6TLJd5CcUuJf~2kTXdrS`SVm~H9s)b8P)Ytomi}S1bSY}`w}>g9})AjF@(=P&|JeqszZFc5YF9Q)zEF4 zpO~p%eQVZ#bIy@DwS{FvQLP$VkL&A{)`XVw4&_NlLZSO$C_Mg7C>+x9EtOAcueC(I zT6;a!_Dj`ye$4eljQOV;74y+*)p?(hS9nVE0E)+^Rp|YFD17yO<&wv%YN4jA`hKo* zl`Ac9>~?9Tq%~taSJ_TQg_V_Da-SzC2IK$r5`RO{q}t!-N4`i)hq!dV>?MAR=2 zaQN;u;f&T2LhpTNN4Tgx^sI@WX#LVeV|#ao16_BAK0O!e(pomDmTGPSGXFa?N8r}t z{4lTOCS7L*OU1B6&HCS>YyaalfQyvh$F}nIg?HrQ`ieqjgMJS>rlgjo8={J<E>-nn#JX_=lg`;PSf^8EyOo_V^aK9$yQVqc&R9sBd1eo1wHoljC}jI@aULgVMu z0@mnyd8uXNTcPlT*#D^3_}HMiLe{3yP_WiCKmJR9sXSW8zg19OE!7e6nKk!%UJ~=9 zJ73l{Qfsw7fa1N%_MRn^n4&$gsG z!E<+nJ)iE3TK1eiJKaX?`?N1!Gv1D9_h_E>8SVG*!k%x(IQo;mkgB4&m8te@e3gAlT>C&+T@|fkus7+C+Rc9dEB3z=R_+>(qTThP_U=7&J{Qbi``mC;$FAc|`QP{K zk%s&~b7?}iv*zE~$p2DB*T72VKXJwFTWi=4|8KqZ?f|MYKis$MDYJ{ z?Sq)|9}h4S|2tn%Z6)Qu-zy$~xquqKXvBX!0BZLAZ@zJw{rCX*Z{Y(z`_;1C1JJ&t znmpXMV16od-!WxB?UenrQ})v~_wfP9-2ddXy!91o6IK4>1IDxmpt(P)^8cmepIv%jAI%*9OEj|brKsRw}lOXMZ&0TTY> z0czMEeSnw``xE}>?1%qwf3>{6W%g&W+3&x+Uz|)lK+1mF@E^f`d_c~9v7ff@j}JiR zzQ+s9eMht35$=0FKW+0L_9K|jb^gRg{D=K;-~2CT+=u;h<$sszA8$ML_7!A@|pi;za#a@N7i-bKEUiJKDlXK=+bwV z`6o@!#w>|DQRc>tHkfllQ}Y z`+!pEqMl3Z{M`Ie^aAETxj%yYDgVj+(|Uus@7V13-?ofA{%Zbv&z|DKiWr*+=BHA< zCTBk$AZ35XfAapW0~)W9>iG}%(;9&Deq!N(=8as7|2N$d`M*eO0NVpN|DP@YJM?=) z_<(x;;{(X~$^BginAkVXemp?Re%j`~<81hUVb_A(2blZBA+0G0|Et`G{hh(why9KC z5Bu>E#LvtBD)(XkH2>`Z3JZ1aMwt&NZuu~je)5N0W`Dg8D9RT^>H7Ynbo&QYA3)A; z4?ufZwE#T8-M^~V0Al{%emu$l;X0hp^2^Z%IpoByr>)boF#zK@jsJO?$3)B|Mv zC-;Z{<)>e+^8g9|@c?P=Z~i;?#{($mFYKPkYXHs8fAHTPAo_s2~)x&3?uL$o({*zaqU()=Ix;{oQ%|E|p%i_b(IfZ9KGf0Xi{+#kXGRGo+92@=8oRMh+rA0LUi ze7bn{4YORZunwo zjV36$&1jrZp@ zfF%EKSpTQy@7%u;|Ed35=Km)BCNmGvtp70I9w7Pv`RbB{2Z*`7a(>tU@c{52?jzU# z;Xn6<|K@&u{-5$6?&AUYu3Y;kn*FZ*$67#E_qPXt|E~QL$@^XZC&GLS574at=0CBX z|I`7T_rreLqq;7jp8xg$)Bv3S6Y&D%{xjwO)BwzW$29lH2bljvJOKQ+2OygJj_}`O z0K|s<-*|tv{(m8?-#l2Op6!Dn)s|;o4XL^wJrbsIJ{wvqvf~(z^FilZw+S%~O3pQOB}u-M^bZR82s+*1RLRdbhkC zj%!_lR430~2-aKgeo*cIUXA~6O2+?_{Wz7Z9T;2A{%4*bn+=ABH zX;(x=ozJ3}58q@KUYW%zNG!H;~vPiU<@AtmW4e#iFXjJos(1%>R$Nc>(9d+8Kzfqu%RlR<7}p*%Kv-SuV($P z=LP%cr1^iLpzmK=@Sk>9wc==KzvXd_+3NE}w>?+Y*EA>Ke&t=v*H6^;)E`6Xgs$z+ zRFMxzwM4gfzB{eQKh$-BtS2DRUex=sa!8%yt)g<#RLNZb>YV=-`reVom8H4%zy9+e zr$#5Y?Fv(`4uvVr?S1j#Z)*;IIm-J75ZOPVTh|NBZ!JYFYb%HQZeASrE?p5d#C87b zRnJXi{yScLVq36=v{u%uolBznb*(GvnSV=^>;9ex;8_3uoAp0mr!V6$WAVi$TDMMX zm(p(08a%1;y%%m=rfV;kX48A6gzelPk^vpbpTh`2edmR?obIhcqUzcPy$||4TZi zP;p&VuID@Uy|q^BTIjkksjT^Zc!A2{+v40j=I5F7#M=&cgd>{U-!r5=1=gr`pg1~p zJg&>@=VQ;Hjr-Sy;fX>0rmG&qY>)R*y>CeWLvcQTRyR1Wd4FinxcawNzTs7^F(ASJ z&Nn(@q|N`VM~-c1`ul(Jv2|K2d@vB zF6nxGMRZpC0a+F0Yn>I1&q{+&e>>LYnX~u8le(@TyFd3C9y*fCxBEHEsx@0fySw6A zLaYVUAwPh4kHZJ#p)>WZ*0qIud&BvYnq#5Z^!qPw(;gSwau1NQpLW;%{k2N?AANwB z5BIHZ`H57p9}kc#dpDn3xRvQ>u2IvLF>CrYrMY_tTB!EPaG>osm7k4zLwDZhyBmU&wLU7x3;!MA7J*c+;AfF z>YUoK{$efvOF9Rp9^h*qhC-s&bz09~9>7Z3PaFQHTJd(3`}P3qUjHO|fZPY9?5F)7 z#Q(m(xGQ>ql>K-B?;T(tVD>w9h=+Ip`+z-5R)j&Vk3sBHEo=8zwFgl5`n(SCwyt;m zwbm5G1JE}AiSU1CWlbg=lH@Z zlg(?mj|YJL2<9U^0A3(}T*7}m0Q@Jye?J$|>?fN4y+5sv@$>%;KVKKwPi)42yug#^ zG@g`r0JGn*+4nya|6kamwF(;W-+T8t!s{dbTXPQp&-duJYY$-l=P~2HIdAqqwne!< zenJ0-{X8dav%hcclGuj*_56Q!^PM^WVLl#UuKa)D*l0L2uKk6?Q)}p*3*o@gktk{a zc!5e~G<4iCoa>g3gTbN}kg`9vH))PvCTalA|F7czl8#W8de?M^)qnBSv=1nqiE9AI zb%2xnpWOfAB-i^_`R_QY^@_>=?E#v7|Bdp0a(}C$KF@~#04X!yx;l1*-xYvkn(^2J@?hHA0LqB{|))STKR_Zeydsk)7-zF|DPSzn!s7^5Btsk z^BNOC&j0`LPg(A-{Qt9GwTH>E1yK{nl(UQfaNmOepZ$s&!A{*rYs889so?*Goc&e) zlmA=3-k(SvAbo7gf7t&;_)iT04=^kK;{oggI+Tai@gEOhwcj@x=KtVIuFA{G{r0IQ zporjq>H&8CPU{Cq@IQKhuO6<;|JUogwy61#`y+k_Uta$2I)L+jM|0o2O|Nao1Hk{( z1HgRPZ~pgc%pmmu`mHA?S;SJRe zB*uhl^8Xt4&z=7@>=(mRR?~Lg?>a!veUA%V>5X|mKA=Z!n4gM0dHkHT$@_EmXZgSR zPjv1-6aUHiVY~DHH205V0m}K!eqyulKjlAl0O$X(-~1={pSm&;^M7-n_~Xac=A5<% zfc=i2v06 z;XiHH|H=L9`A-eN{HOMh2WZ-V<^Rm1XAGdauC8iw8tY*kAbNnT{%;SE*Z%A3|M0)O zp4xtI!}>q$FK^yc!~fp*t2KYvPwt=cANH4*>%Aqpe^dT<=^T}?f42F*YyT<#$Cdj} zeZ)0@U9kqxi2u|9Qub2=fc+i=zzd}Or=7ANFEI8U`2)!uH~*>qN2xYR-Vgt&1;Bms z|HyvTEc`e}>i^FDKM((5hI9Xv|J47f0W7Gm|C{}eW%)%sfTeva3aKhu*C+7+u-`KO znLmIBpax+6I~Mkf0~@tBkbOXlUN6^HwV5BFbqg~O(CqhL&&&G1&3#96-?9Gwv*AA; zz=Hqw0E_{U`@?;Efb;kE)OY~+pLzi18hjc2rv`u*aP8h6ptweL0BPC>i18l7uZzXy znky#mTPgoN4v_Mnc1`Y|@E`UUw(GZ(ao;h$Hnb-H#|I#4|CZ`iO}~GbpJ?4at^4)S zwkX=>zVrW-|FmH~b^n?8Z}vOF|Gf5J$A88F;6Lm){~tT38kfcZsQuG6_sRVm)&I{- z4b6%F)coN-5idaA@7jMO{=;KCY{br>d&&juG?4tkGS`7>x57xQ|9uEsD{o&TiP_9x**YRcQ z(y_Yj=>s)lAMG8_9nQ7=Z=MTx_547uspAAK+EXj7xn92cRm}<1e!r+J{+EB2Me)D1 zGu-pwYvJtpMAR8wFK>%9Q^IGe;Zb>ULD)4d64$Ms4*1Oy6Tpw zmcAv58gHkr9yR?x?vq{%(E1In9q_HSq3w>9QM8Mz$p5D`?;DQ?bnDgwq2u}Eq3bnW z2au`v!dU3i`$hA%eJ3nF{6;8hjt6T0+L}<(xv_nr#`?<|>(3(d|JpQHf!MC~SlVt` zto1UxV`R^gmKJi>YVJd1zk_S_zemSlzkL2l@_X`hjlZGKPHXJ_it_JC?F;ZuXPDSm zj{4+L<@BoUjcctg+FTESCQn!8>+}Bjj@A))O3$VHS`#N#Cz#Zl0;wi+n>6vXo>Q+s zuDU|1i#j*`@$KpQ!ld>Sy7X5%A1u$5)DK2<%>Zi+9a8Q8arLWPUZ`3B)6dFn^S?R| zK;M6K=W@I_D9K;%%zZL)x$JJF1OpeiOP;=OZNV8dbR%in^vR z*Q07nt=$)+7VNkjtd5~6t;1F;uRGkn{j%mci4V)(*XtjjR*PPZe7`|7-I7 zyU%~B$h^Rca^lW*)i$LS`i=I8*%tHp(2hmR0`mjTZ`9bO^v*ZeMVwi&u8nE9^NqdK()W5{G<}ol-B9{=kbb_{o0#dbBADkT(YHmdOShqa#IiSt?qAklWs71^(`|5qpFAI>)a z{+-AFOzZSt=?{Zb{h{~QYolmyJ-RMx^i!?#aii-NO-<+e8~>pv=Ka0< zHOJ!-$>F?|05mWDUS=lYRNRz<2JyBcT3|^f~LjuF)Dn zsI*;s6#s5#=sl+E0wvEO7@s;H_Pq6&K101nsoD3>nmK2+X4=lR3u7F6MeFKrnjW{` zxxPcZJ`;8HfUbjFUI{O2&-IH3^cz;YPjvz`@kTXr4qmrnQ5e{)wGgC=<_-+*?#;#C zwnGPZ=6l@sZ`S$<(w)l}$+K6-^T%JQ)*kR5yvD^to#Evz9Z~&{ZVc$+`&tV}=Xci? zc+b4|v@i6nS^v%dHGjD$pq|az_a+g{w>p+<&%Z@|(F5QE&@GF$=UTez!F>Nc@52ZG zQ`NAa$Lsn(v}o~YRL*_afAeW^Uu&#H53nuz0Qi6K==)dk|J27C|5xol<^R1}YsmfI zqJ2nc*Yh8yw>+eEUiWF97t($}DgXI@;d$Mjsbz=$FYen1nEj5$B`bC8Ct{s&$v&X+ z@L)&<_bv0ktxt6Xv41B1!~NU`==X*P@P1{*qV_XMJV3MloByuQ!~XGo8heNR8UOJB z7Tkyb(Ff4h{muWB{rU9+8UHVD*Zng7Prg%Cmz?rp`$RD1wDWe=ZQ zzf!u2|9F5GmahuOtt<3Apt5&z3tFT(6Et`{4n$bURQ<^xLa%Rj#Q zhg>=P>-az8?_W&q$=FXc`^yJ3J|UU=j^;lx<-cqG%;C@3uXd~pi2Fyh78x@4J6~QF z+Z$fU#`_iV05&viEeiM6tpSJh5#{-~x{=@#EZMFPQJpk;7`|zK3`d+Wa|C###dH9b9ux8@F z>i{YHX~X~219U987*bu$fAW9V0JhcS{?q`R`#0i$WyzlA=Rb4bQT(R{;QYU3v%EpV z|H3Qs0#fb+DmoWPIsccd1_1xF+hKo=D)RY>3ajLir8NIH`&0gxD$MocIso|s#w--0 z2N3()zbZeV^Hx;GDxbrfo&Vs!bN?8{^E~&j<3BY3=l(H@?e**@=QsO_&i#qe18854 ziA?5yp8MDFpIqPb3NP=}^Qsn5&wsdY_V=qV&ii5i=jA{7zh&+_HsXJ2q1Liqt9@J* z3q^gO$UdN5^~=NqnE$Xp<$sm^RsOfH`XKiJtG+W{;{h7-pEUxDSqj39Bs~#ZP0~}YaE6x95Kis!qKVrOsIzY4EKPTRHzT4?yl;&wp}%*x!)<8;6v8XOahi{dfTTfXIJp0PtUR zfTsNyU&;IJ0m%7X12F%o0o3y!_Sf^jyjorl<|i`u$^D)GQv)#nVZKHFZ~of@zb@!uW*=A&!z-+f8*|C#!q@}Dt)`uhL&eFp-f20;Gr`hTUuygcghwe|mjq2ZeA z@rF)o{i8&KLj!>^0N4Lh_EQ76n*Y@Pt!*{A|F!r}?*C=*zlQzzfQ^`C|K>k+0NDRU`JdMR$^GF!qD}4JV*oKn&+>oxKe4;E z=8qRh*hhu)&H&5hyIx4{jk5ve`)}D0905$b`}50`)ADmUHhm0|7Vu};{(Y3Ej&QV zf7*k~JM$Vq^Z*(E?E&C_>H(*ZkkycZB)W036}I*^du!-cLl% z`(b}Q|EUAO|8xuh?!$kN1HgXQ0N_8|x2OTYd;7Ma|E~SdhX1bn+XJ}% zPps!Z;{fFR@PG1s)qNG={?xd}fU|J`v!6NuULdXgyZ-OjVjRHiZ^nQ6G!y?H-lX;a z_g2UM*?$K;GdL24&z-NCPyhCBHJ+~P>-*(VdmqvG^|Ec@mW7)8uWRzHQb}W5nR*}H zljq~)<)asVU-S3L568mK-g+lIwDp)i3qB8N(fM2pZW#%8tz+KbP_A-$r}$sh1G@I` zt@kfPjjG-s^^smD)5&v}!ja+8sMX)#eGOFSzdWPs{~u1S|4;f~cxpvR)$%th11c`j zxnzUJWDe+iK|{J;7oAjYm#BqWfYiE4H3NOWMds|K(s&@}g!Zp(u4>Iw;ifImsV1OY zL2BFhKq&3kcOcQmH@0a{5*QyjufN%kqr@W%YZ{8#vb` z4z3gPmJ0>&Hm4n|4+)#UsO%PO7|9u zdl2dTvAH;{J!;?AS_n&({}*S`f7eOU2>N-Cn2BD_m#3fI~_-fxGt~qs@9xg zZl2VB@3(8@`xaIAi*4`w6iZ_j^#6+U)ZGi0jVC%P*u zzrQoa4gYOz=%3Qsc8Zms$PZrV%2i^Gf7SG@%5ypwY7RojkxH)fS4IQkdP7vyIm#;U zZGQf%l!^hpynA8P`RBF&i^k2Z*Pl>L;EnFkt2tq`ho7iuu3$Or5nqWt%ceEP``4WN zm!H-(-HK@ZeeI>QLg%?G_NqPg(Q#c{ki}JcjC6iPV;G7&N6(UJtz9}V^siUHwe~gf z$YY&)K8^M3J<<02B=X+f5BICt_dgT=VZZrr4`BY|0W7nh2>)Te<=Q+E_79#o6Zww^ zNclg1{;Sag!2gu}v|&HoM~8>cgtM%dD)!?8>iN%{|0Cl6<4?U6+5e^S-|YVv&8t46 zWBEfJ6V^HXEj8mm9v~{?KJ3Q_r0g%~JB0tNMHCq?AHd)6ANC_|hx^46*8)!Szx5`a z$Ls-g{`0xK+4pbur~JnQps5MXw-@^-R0l};pR@myDyz+YBJ4-_fJXd>{pLS0W&dX* zn&Y4OiE;UWF&+EnzGFTAQ})wN+5hG7U!QGUa}TcSH(>tLhWloJG6dr*6 ze$0P70QyDO>Tv2?TB9ZN0p~aAn!v;ZJlC-}-~sFdmbA6cjsGwoMq3H{;W_M|_r!}i z|BGuhH%-C^lyp6lxlfF3ald`V#;9tJujgh>Kr3N?91mGDJO1Y$AZ0&o@gLya1Jn!_j2PWeBmaR;;C zJ^=oAitn%=!TeP4zxz^m4gVh-l6TJd5A#b8RXqT)+4;|$gqy5OdM*CLT$rEgi}3%K zKYAoGzZw7W02c4zTKuOE^u_&Z*8h6`zj@}j0UZ%*5xKub4WK+vYxhZw_`iDH55lmn zy*Kyq0dRlloe!gEpB+D6Qv-nc@ZYNEzqx;2`zgYIn2!g5|3|bIX`1`9?=bv#?*B#j z?>a!t`OoS11^W@Xf9e4m@W16>I2Tmw0D0c8{Qss6yF+`H|CjgcbCjI-!+!JM`G2eh zzfgLuhF=ei_HH?uEUe3#si=l_KW{1`^|sYPyUb6{C`|? z{LOxH|1n+HJdnKC zZ2hlm)PL*~|J0G(zaoFui2q%sst;(y|NbSl9svH^15g7vu5~x@0QLcM=D)d*52(xk z%VK<*`^OqU9sf(4Ri{Zk!?pMyUrStDsozrO17?%|SF##F^Z?KO>s9%`JwS{J`)9-d zH20?#VD8%oz?B0Dx%==+Kg82v^KpkM`)V7@c@SnUN?jzdH`yI`F$F6rZ zhh84QaW?$_Jo!Jogq=^WomZ1nr}_VE`5$xntPVi#|9bz%SOXwN=Ib`{fAsR+jZO1^ zv!5EkwfN6_rw?X7@$>NCxqq7fQv)#n7pZ37sQ$lr>A`UP^x2sI;{#~JeER{~0WyIKDWPp{Nm+Dw`Qm~;OP zo!1e}hyV5fDf_h+Ho1SA|HJ-*=F6kj@7@)2ez=dyj}F9~-|Qz+^Edlb{!;^pwE)%q zsr{$?C-<-CKR)1#i6`bi?Eeqrzw>{h^M8AQ$oz_!fRy*a@*3$e zEs4_SqV4<6kpGkSr|Q-I0eFDC4p5pao_$KcIq4PearQK=l?{wZ@K<|t^7Y_|6J<-u#&vFKL4lg4|DAU(%gTh z`ak?<3;@CWRPa9){72WS|JU=My1#uuqx%2c_&*S9<$GRa-k$dMxU4z#(y5RC5JrAm zy`FCHAO9)r`SBZ}Z`XkK{g~$VWSVz!v-qy(R79m;ZwZA7d4B84k%O4ds?uEl)vDEJYSo&T?fW zpzEijXtU<8>ijXP4fET|%nwwK`Z?Ds?TT4!G@{#f$`oZp}NY9XLkm6uzmm+Sw^1SKcr!v&OO6_wW0q z(c}Nq`Trtu;VwzPjhxq9=LN4-+s{R9fLa0f7gM5WPpkDST4y3rp=GiDpXr7bYV&xh z?Lp=BM?&!)UHfuMbHOtef1s0f%?%x^OH$R=L zv|VH2EAV(aCW$&$=k@A*AywBB(sLH4Rpi>iR4e*Ir}lbU_}WQ5Ucawv%BHD71LvF;dYmtWDo4O5yEAg%vk zO}I^rMLZ{Q+b6wI8{WH9>-lK@!GUsEa&k$oBf8F@_jFHGX>T!n`{c%O=8E>AluD0k z{jjOC;mH#^=jz;nN)PHapPyE<{x1~wEA#Yw(cXLL_;!sqa9g6O_f=DWLh}P8_TKAL z-i|u8_nOz?Ck}6~gq`177IpEE=1{2p@`GA8Mc4Ep?mxJ3`fu9Y$M>bpbEMD7WBhu& zw%-TuDSeN$dGGEAeWGv8`cI7j84soB2e|(}~itned-B z%(vKMI6c3n{D<+;1Jv_h>zx)6K0wjT#{(e$?dNUQ|CIe7Z55M$svKYJN3?6$FaE=P zv!AxPPdt2!uD=zV;XmxJ=l_)E`N032{c6{+U&k-Z&)Khb%6{|T?0-NE=}P!dz2E(I zY}S9@FO668Ut=?o;qm~H|FAz3V*yw3|90Khi2q^)-YpY8Aip2%kA5QI|BZWEA zPtyd>D)^7W6SXq)|xc!HLdA4cH=K2QJC&*IB$;{o`N;J$?ySbNj_Trhu8oA$KK zRMI)m9snP(wX!(8r1gJt4@Pj~T`jO}~HfpWNOaU{t(K zH9X0hS5^Mw1w@6~%MXHvfsy1ANpKx+MDm z_z(B(0nC0PUZ9@;Df?+R>%aML4^Yok{)V~s05BLPTPdq)o8?60`#CncfBKmE|NC)7 z^WX2K(R+pe^kuI6U-PZkV*XFgpVk1(eSE6SiRAodzxfaQ z559RS`T+CaubFb+ZPx&Zcn9bIDgR-AY2MD5_jfFkSC;0=e|$hQ{&#Lyoh(zV1zg2{ zv42Y59O-}L{HP%IwY2_^-b|e>diT<^c-I=lmY5?D=LTv% zXTtuLR{6Cw_pj$aH30G7q85^y|I`5N0h;zdWq*sl+a&j=o%3JpFCyjth#Ektj{o?8 zjv?jjdG6ns|B?Hu0hs@A-!*{9{U-dcsR8WO+JSZXKin_wuBvJOGyc2250}##0Q^st zb6>|MZSsC(A3*L8_YrNFPu_3AeCPkPVLnRv@BAMh0Qb#*ynyq5`+$1>lmDk`*8i0M zk(){0pYj#vqGtS0^ZD8GKYdIy{`-BT@2#etvHy$k9}nOfKtuk=F@US{e`)~mpBjMc z04e+7zw7?41CaMm=l+a6)b8iQ-*BJ&A35*02O$49`^|s2|9SX7oBZGGcckXu`sO`x z44_)`Pxv2wfa-wao>jV}oI#=n5Ium#D;WdGrMf?Pf6G$k_N$dItd&>L`Vhrf`)4db zKF}Tj);ChR{@+(_4BxxP{4dx4$^EAeNLlW0A3)8Y8UXA^Df{sPupjPQvdcQfd8onF!y8bpXHNg3bCG3&5r;2`}=Qufa&Z1;J=iN z<;Hf*^Qqfg?%?>HszT#|LEjKjQ$d|Idd1_5e-$-+=$l_wfO+pS<64 z{!cXj&3=4i+fsFh9-z>-kU3-@*gHf8_dqQS**cHS2$xD_@KM zFc$Vwi%&g3J+GOnD z|L=ZJ^IqhYvTOIdzW$3ac?FHAes6bse8{;=S`xhmVhj{+|qmu5W10-aL)H zWLn&DDWC;6zo%;ykL!9p%^_7Te&pnER6Wm`v-j4oew*(xctZ2|hfZmHUwM609sfr! zX}mxhKKo%*>PKjIt-h#ps>a}?B}-3-&gGL~!7ZnA(MS49pJ~_kfBxEA!h(AiMO8L- zgryHJjq2L2y1&$`If1Eq_Gdo*56;R>s6%K{^>)Zc=l)FJw8CX zsy@K{fT~)4B_U7lyhWi-K8}J+wN|y}VxOH~=$wJJi~sBO_^pba%IAoq`oDGRf%Y)+`t8d7 z2cteZw^?gn$VW?OwwIzNb*;e%EA@Q;sT#fi@CiNtZav>NJ^#JR5m)K?5##-6fyVq% zQ$986|4ffJ|F4c(8}J7CwM>N;t>@ZuYbMo_W1HLX3ykmRJGNSu=r(ya^2{4Nf8gG# z2fzo!{6D+SptMK)b73?`zIcNo!t1rPgSvD zn)&5;ykG11FKWHsRGp{C1EQ9n>+2f-zgKyGruGLl_wP}y*?}H=QT1_smsaKvJ1$KI zR4nTGGtJw5B-}Rquc1d{`1QK_*^r|-O#!bFEFqaL17LZ_>E}75D1#(!k`N zsG`;Z>Uiz8DB63pzxSQ5cIN72uORt*RIUB@DNbwMYdQ|H{|`=T4}qgPel(_VTyql; z@2#jjrDbzfgX22`@_Y9DM8{_RH~*)jt{)Xs8|lbqjolB6(euRdOso~yQErb+c8p%( zU9A=Tn8rM2crM@0eWr9@Gu_WYjL)6C7O%~F@MDR*Z~t9wYyK;9U^6xAzxhvu|0(-v zoBxhmzk4)iKVG17)#O$D#{=y6{x2f`Pn`X2U|*h?$1BG9`xh?f{D=LG_d_W`q!+s0?cRZ^30+M||d86hN zWGcxEwEk*W)U*%KUSi_Dm9oEOxAqs=$-E2UX+f0q4k#JQ`PUtJHVdV8zJ2c}i!JiMx0dj6;RbtC={9;>YZIRAGI0QRRf0MF0E1K_53&YsrjRn{dfSs zKiFT=Tz_+)Iso}U%qRa}y!fNorjLj|^IJe^|IL2a0dDDCTvG#ByJuxc<=o%-zxi(u zVD>w@HsDy)8cwNN?`(Y_A5as`xNF2_{cps7@_*Prs9Ku2PaM#B+1zgw zQ~s0tpHW>8?pxFXVE&MfOUwLsH1}bDoZF|qng7JOvZ-1B8$I9L`48*sg&&|U0P|B- z^tVL*pVk22f9pf~pZHJS5BryC+-TiUDC|&;AJINfIv&jrK>kozOA-&d3W>%JZbum>>ziFg2VemnqT4q&tXoBy!COV?5^d|Gq< z(%ioR|MT2G%m2;(iuUm)=QsOfTRDF{|EU2K*bh)j`A@r3Yn!Bk`4(P)oSzy15&o0^ zTZR48dB1A_P5Zxmn*V0LBRtLXe&zpo0djuxpSIcW2>ToHpBeyT0?zG;(Fch6=07oI zzxki%{ybjqiQFIlqm=!P_}{Gm_56pgaGyGSBmSrCr(MtO^l#X{cG=Y)!VKqsY3`ps z*6sS&^J5)({~hJD4ltejQv}D0C|6&`&0i{%|ChoqK;kj-*teL|Fq#hitL|d|M38@9}jR9`_2Ds44@|W zuj4;Hz;%E70BZiJ%za04{?r4c?57R;;eJ8m04Ub{Gxo!On4ikrC(icwPyK)E-&b>f za{p92C%1)E=0DN=cMZV#zjJ@`f6oIT;sKod6UqO{`KkZg132%;2OzVb829vPz<)e| zRo46fYqtHb^#IfCpAG+AuQ#vj`ZCj#fZ@7O$jiQIZM_d1!+SgG1tQ@!!Pi=zkTWAsIRSF6;iFa`|ikoVpO-{ zHIzPt8c*+_$HF@NLav`j|hz_Vxa! z<3DrxE}Pxg|Nry*&eLP^`uBhR`=9;|_%}OKOn=KW-KYNc^f7;a?diVrJE(u}^?#@D zzy5zS{hdDM&#(Qb?|=Ha%)S4$?{DspPtSEZ=Sl>ENWkkj)(NKoL&3+@BjMmKm84SxySSDeuLAmng8~$|NdvqzL9?( z3D&RFuF>gVgi>V$-}Ude{_ncyzv}Vz|8Mg6v@h5DKRf@IerDId|Lezp&2OOY_)C8)*N^|}=f63h zubZ5|=lp!v_tFLJ- zq`v<(uaU0frhRz|T2mxdv7-HWr1nR)hnt4p3|*gmqV+o_V_fq4--qs(UefyA>a#?< z^6r`Ni}CSracU}RToD}|(|)c)TF-5_)_6-)`px;UM)&X2a}rBG8Ppy?J^CE9HV{hJ z2BJN~=Q5Z6d#$zAw|9kgrIlK5PwP=;8ZPvQRHKDG0e!e|DEwj7S?zT(8g**x;egI; z)E-^Z==Q3PKKoKY-FiOMRi_^PZS7vRHVprz_8ZG|R%@6{JwFwGzwttNf9Z*ET<>M5 z&{v~wt)pXYyJ@x7)6hN)(wzFQeK$InZ;a|%GaOQtc8!H4hsVR3Q=f&tOH*N|)`_tm z{IBC-=*;D)G411mCiLB=>VIDAs9qS0|KtDLwBCz#QER(Q>Ha(4xEP;<_UP}X!ZSxM zhSfd8QQeQc9|nH;`*8Ntsi=!u6XuWE+szRuzIf8f5ZuxE+ZYDXPy zwOXRTQ)%tSJ&6Xje#^-IdvhKA&N|&+_sP_&^_^1f)a};LliFuud^mmvS0*pV_L*O5 z&)ALKaqUOefa++kRi&*pRN7i{m9;)qS?9B;R@MiqYA*dR6t;!Rfr+TX-~3VMr*W;t z|4AskqBVCmW?GWP%@d*Ueck6DJ`07@y6vnqlIUHnxs1+B`mPGU)Bi3c`dIBxw4M*r z9>axSE22|sqhr!Ddj1W1{Y82oEn4>}RhQQN8`AUswfn#S9OD;)Y|fz zxTLkOY96~*>%nWyA!#oCXWccct-URzYS-SBsft?5GgVvsf1B=O)!x6P=T6nNtQ78A zvo=@P>MpHcH?5UlTNhAAMe7Vpl@;5<<3BnR*8bJcV(izs;(;AU!|h+w_aapm>fE(< zPw3h-6x)@G&VSNO{ZH8k|Ka}Ok<+=hj9d&W4i4v9wD*lLfAzh&2dL)_%rEUfm23XM zXt3J*UI@hpU#d~-w@-vraDU~{xm<g&==r;VZpNMXP`dPPkVs+{@3>>U&j^p z&%l4PzkF#davu+X${$^f%!m5}XU|5Z?8gI`|MmcDj~)%^;D_g;>iJ)mA3%73=mYBc z->UWhtvW9de*;bWpRynR@2WhIdjPyZ%6{5#e`@1I6zyNE+7-EP{txdJzZ1=c|7Q*i z1(ppf4Gm<_G|B| zYw&;ImC>C0_6M;4?Mr_Q2Y-DzMwp)p{=@!4VIb#!>H$*rU;eC?|L^_xe-Gw=mpt}t zzW*BbH{t)zMe+w3``_GoZ}{y$zoGX&UZcq?7sI)KITVE#NZC)@?4O#tsK=q&{!d*w ztNkI*<{sel@*f{CoBqT8`J3L0!UII+!+nGgfcs|ufZA~1g8wP|@dAzbpLziJFV9xP zf3yFj{@0BEFdx|i)UY2PQ00H_0h;{&;r`l(_vZYsbgmCezNYo~*6xgg`xg8^^6o?~ zyg)twkN-w_i#)*0{C`jH5&pyeTK>1St_2`$?3U{J-+%v>aOT*FC~5&| z?r;9%0qg_dzl9H&x_=^!tvr+a0CNB1dcTeMj|XVhe{EIUwi#u%9-}w>s}V z6UwR=-~r5c=l&;7eHiNizTFZ2!+z_-u|L)@5dOpdnfMPc@c^*DKL0;9QqBFz|KUGs z*8e>3uh0J%w}(9_&HZVM|B?Gw#C_C&|9AlF?1}G$m$t0ReE|HQX20$?@j)(X0Or3v zz^wS6)Bv3SJ2vY-{BK`&I9HzglmEv$fS3&T5v+&#sbD_(SUEfz)AvX2PelJyw;?^S`zAhc)bn<%NRwH*ntXDE`BK ze1LQR)Hj&_!zV|>Q%~vjnwj)|XWKP5Iwe)Ed-c{+6vHVa1B=u|1vlUpxPY z{i}Pn&zk>hH$D~c0M7ph#Z?6Ni|w6xB=^tRFE8Ny-?3T$sri%t*Yn>V0RGzpFb-h8 z!2aTX?N^nspLWWA+GX}5&Dc*&bANn**-!k!{9mN8i2HT!Ox5K3cYpGjvVUGF^1t-=Y@a z{D1QP@qo;INAv$;HV$C!6Y&D(KQZQdpQ?6{2_Ino!~S~y_p8=#_B)dQ;{gzD*l+&h z0bKugZ1($y`vcFP$z|^EIX4v$+&B9f3xN5l8u9Idj7k9;5<0xfAj&` zXPf-r^?#V3jsdv-Pwqc(=zOgGe<}QD93bO=%=^Xuf#s!I_RoUQO^EdRF;7~D9E`u~^Bf7k#2=8v`PZ^VC?Pn|y%-1pxa^U3*7JLNyM0R6^tx&H4O z0QG;k|5eo-*6Mx;?%M+pU(szS^8n_5<(T#}kedDehxPkLGu8j$Kl*>Ed;i}kuQUI9 z)_w*@1KtUQarxN5;`I~!@h1r`ZX5`W1I1BM40g4ETv97?Nf+d%>>q&=MRKWvqFAa( zgi=|m5L!|L!R*?^T@yPC$S$yWYl6c=F&ihWh4>fF^M0MVuiIyavB#v@M|ysE>pK2E zx96UDy|3$B=Nzj6gzU!y0M_g-7|H&;ESh0RLhC zcftRV{n^|<>AByd|F`j<+J0^gV6OfTQ}{aEZ`z}C45h|>16~`q9dM|2vugJnHpO!Q zVf{a!|I`31?>7$+*ZpDtBKiNyE8E>K4*bIB!kK+N?%?M)UH|k$FMFRE()?79=B?^3 zOvmC3lBCX~K}+}OyxouG4X)_CszAy2CSB%aHV$HaR&ce`WMmF_&_N?tnR5*u``vwTL*xi@%_9EpEAQ?*1r2c+*MF!f<^Q29f3(jl;+4$9eoOcKzY`E47K0 zZmg`^ebLbG#kgN**WYd(bXWeKJiO6$Xifmt>zs2`rT=}$mTm6hA5MD>zo~hDY5bD` zck55rmCwz_x_9TUyD@&vb#8C>f_Vc?9j;q7%*k^Xy~YppxtSr=e@hy@8WL+AYD;X= z_vx%}0H12l^f9W9qPJ14%KyW%7r@m?^Dh+pnJpaom6G7 zL#;deUC>sJgB+5=02~g73~fcyZ-%^We##uo^bd6GNSLB@|yi- z*zJ3%&QK=$!+y}m;gyZ%Jkvw97^p}BVDlSs9#gyxwNABnr@W6cSm z0eJ!D>yhREj8(5G(Q{C$dJIbIISQ50$2rpTmkCsU_klCTJpeWza6-R-d!8EZy2SUc z>Ah+=Qj6Xn`{txGA4{HXcS+r|rH6)#KL7pdXF&%~k15w|a%tsI^Jz=RNq6APHQ%Fx zPd#zzuIsrn>)Jk09jvm^J@d*tu5tf>Tlv49_2)Md%QH`Vr7LyDn$By>GX0c~jH&N0 zS)w|!^8Kt*{^RV|xW;pVdR%F#xS*dwjFYO@hB|e6z>QwH?)Lxkh-=#3TJ-w!8UN_V zme$kZ;DF}K8olrUa6jaK=EFPA z1pi_GeEi1;By^357Y@yNfE@PgEXauauphzx%tw>o3IEGgZ#VWYefPLaE>lm-BKiOE zA4eT}X5flzyKy^Kr*cD6b)V{Je;n~L4`AH4X#B6~y;JFX`{rE3~ZdNiM z0RPPc-~-@)=mCuL7XNDgCsacV`49Vlek+&%uzy53IJ}>FFy{jpGhZXY{-nH7$bQB- z?C0Zv{eG;U$w+vBvg`W&llq;;f8v0C{|EY<`G7+FFFhni$_Eg|e}o4>#qNLOKXLQk z_Y1PWrg67}{p}~la`=x2_-pwO!{^wK2T1Ah;|n6i{MY*&&&P7uj|V7r z{rUWU^y5eQ5Bu=}{O$bjH}5|*^97XIW8viZ#Pqry{iue!vTk)O||JM)5W9Q}nIsB&%fS%HvzG?lBJoAnH)Ei*` zcfo(Snu+p$JOH`B<^OnqO+yzS$^Sq8w~KCbyXscVLr9F_f9L^Vf79qSFZkcse#k3P zp>wk}KKt2dTsy`C82`!ry~O{p2Eb#?@c`d~|HgiL>&f}82JmoX`VszH-ft21qla3n zfQKCdObNmH2~Nj=KnoI*IeVecGt1zr04(X!K=Owu>W_LeEv`D=s4^7 zPu_1T#QZ}1?;E|VzJt4-`EcKSz_b5+Eyn{CyME)o#rgP8?r;2u`&stuIe&0B61hM8 zx7KARuc>(){#*WU zUO)`A{C^?-rw2!~USI+K;{p8qKks)){=eas zF0Z}68+8cghoT1%?wc0Nf9e31{~Oy&N>1gmUtY|(Z_)EVV*lSTSCGy7%`+JP4nAE_VH4uI$(Oss3N4wR>>Y_;0y?$ba(yp80z_Tta;T zUIF{zfBL5OxK_)p$%>?gv1 zW54mA{NFsll==Y%Dx2dPK(Xf^<{STs#(yGn0mgsWj|VXB6Y&ACAMV>c5IKK)N1tau z9)P?b_EQI74D;JJcRTn`tbeJ`wY@tU^MAg)-#mcj|GN%fb5$GVA64_;r9MUT0FCn0 zc!0&$|Bd?=L;mmn9{qpn`Il~7Jd)+VpU;8&Ciow*-$%G_?8gtx<^Qw)t$x2K@5cjp ziTkjBdO{yZ_5b?BuZ*_n@@&aM~-{<_s ze&S!pe`^15zxS$YOH#;w#_*rIf5?C8{>AG5`TU3d$z*E||FgCIAos@uSpM(XueoFK z-`H>YzpU zpE>{vYyXVN|6#w?0et-*{+kaF|EnSoKrD9uKlR)exBB1-S39J&Y|^IDX?OI`_tg(5 z4RyIFYdwJS5$`7LS5&5$k^&Cff`t-PK(mfRFz=S?lKLC;6 zKbQaOb@kq?EC2O`SE5b73%#U#I@I=F`QSON`lZ%ue|$Yw^$F$wyHB`O?KUs^Uw-w= zU$`ARw)jL2G1|ZEEvMt$Eg=qF&(AnwU!vA^ZD|(cXS5zW<<%sQ zGWO}EnAcNU+YZ+!|1{|sPyL5tpzEKDkC6sWo_DQ!jQg6}-0l}!ycgKNt=*Ym>YctD zdOV$O{KYd~16uzZ>eBls9qMiC@)~VE?uIvXIpXzWqi+2B=iR^x?O711*!5qTR{x25 zv(fGQ58QR#lc)6>KppQ+xW>)>UPs>5+6O(p>v}Dq0p)X7ZmSP+`Zz6rV0C~aBa;pp_bpE8d$w%V z+Go9Y5}&F&=PLGy_a|n(nr`X!B`x2hKCyM0CoOXShrDOp{=Gn2@7J{^;WhEuIbFYa z?rZ+^>1%%e!5!5BG>#b0cy?BdUqIITKlb@Chi2siCP#M1x-#79PJhtkh|{-vbx)np z{nM%YO@9wP&})5JBGxL+{fDa1$DxW{zh5u+w=L?eQ~h!6dDZRIpT0$N00(boCI6ea za5t+zedSVm-a^&uW7C>*su69Sc4aHJ={1NCM~Ohe+}skq&Q}a;F16h&b6y@mO6&Oz zmH1crjzA^ve&tG=)Q7c#_a!~n5^DbP{;_iTU+nt()UR(!D<93QX>=Q3J>qtMc-af) z?^dn4?bwKqO$UeFseixgM(?O@CUpi;h-J?fQ8sXs1KY3TudO}zJg{fZ^0z4+ejngP}g=$h3}7m7LlG0pcMP~ML^_jl*0 z*!5e#e}1&y|0O=}SI?X8^GmtZ6Vx%(2d2*>TW?^oPx<;YFLt=pvTCm#;?uBl3Dbc5 zd8l1IR~&j?Yx=97?{e!K55#)y!;7xEq0=?~^ql^O>cf=QKijN6zoc6u-lMf^*1FZJ zSNq7gdR?`vtXl2GxY+d<;(zD?jQKO7DD zzw%A_)PVo#XZ74i9)Jk@;r^1^7MD^@0`}tp%m>sT>GB?6;6Ih)NqrMHyzl^3Z)+Z3 z-*4cSo9l)=`{6&_4?O^RI{Y_z=EMC+ z*DtHiEsc$6&R;V26OVKp_WURJhyVBhW530Rnh(nH0L^D&{*P-s*(ZJ;IO>H5fcxeF z#(u8#f$Gf-JwUPNAEv{7^8oPQJV5={QP2L%S8jXu^Sz&qPk8p54+z;`y`m|H{dfT5 zKe1k%hySqO1oMagc*A=De1P$v2>(C0Fz#jiKXLA=XFvQ$=~P#a2QdCWefD0~0~ERc z7sLPauQz4cAM-!Ue)ylu{x2S3|KPtIcW77hCgnLv*QEV|@Bpy?{Wlvt_lJMK(V1X> zA^v}LM?HZN|3?S4PebGZLiRHb+0VGx^B=F5hy8ef`S>sPC+=u%o1T|YupjQ1>t4?O zF5|w%kpG3obG*h2Bwx9b%l~V$#rdD(0p@;RVy*h8i#-3veqtg18~4ovJTCuXzwv+R zQ(I#8XV>gy`M(4&Wc7ZZ^Jm%bJ%C>?m}Ngd6SDv5TJlvfy9lYW20m#_jb@qmPe%~3-e)9lCnBOnPBD?_XZ`GVOJ^=pL zi!sK2<3F5-{lHueM-H&SkcmUq_@Bk*u{Vl@$P@{T(L-+tZ z0D1pu`2?#kWPAT|`Hu%MCHquMk?;Ws=6mjIZDB2na(~#*dVx6ahy9Pq|0O^8QOy69 z;xjV#!&;P4EdmcR|2ylo7CXrOjsKwsfcx+7eJdybkJz0~EXddHG+FbgcU$|Ig(=b${bOb$)sQ$opY`F8?nK9P`YF`zH7g_wfKk<36#s zBjdXERC}2RAooWh|EU3(2Y~tE9s#SgKOiz6Q0)3+{#y-z+#hKlMK5yyi2a55KgWH& z-)KLJxxC-_ALRVu>oOX{{G6J7s$Xk*`(qyvuOq|6tfpZq_{{j;@z zIrdX4F#f~--V^i#C?0WANI zV;=v>`O!lBr~Z!zzzbOIA4Z4##|Pj6$ob6!Fb@Ft!x})b_djxf<3G{3Z;{Wzee(f! z|67Fr#(u`eeTyOgM?Sj|^FPf0Lk|G|Ll0niKXm{+0PM#D*gSyo-#h?yf8#%~*!73} zhxhqb)y#{-1y*LuELl&$~6{*2zQjr$hiztsTXKguS^You z01^Mq10>j!P&Fy9i2ry1n*&IcO{y=9{;){Kf7t(C@#i1@Z)`j2JphsVKehiJ)oF?3 z|0eh!*8Uk&{}1{9wANf(?VlL(pE3LobN{&RZ~1?T=5~$${&UxJzTfx{``dPR_%(jU z{xJWa`f}Q#V$VOkk6G?({Bs{?{Q!M`+4_H~O!FE6`}w&r|2O7a#0$WE%l{d}erf=) z-+KYEtSgY^{fUxV&wuj%a1Njl|Ensi{2V~Ye#U9$rwhIRZ`b<&{n_>Zc5jxIFL%qe zN6}L+zu_w09B@^-|54ND(_USyFOtId%4^!s%JxUG*s1&;4eR}TQtwk&b?<(rpX=9L z5gOL`#@E?>ONp2CeFO3ay{ZX#>3e#mZSnxMBbpN%np4AN)ey#Ky`DZh;g-L7!6i1U zKft7Zzr^3D=9l++WBvd3X3hWW^M3w6yna20^!=56e~T+Wc+6E?_{^0bc*`X>Xun;g zeoNERJx5$-kLKz(X?|y&=Ch<^I^)XzSG8OEwCePVN$takQX6)-Ok1~WKG7R%a%Nid zxij(tS6%18d9Tbt{k~m?U9v_$CzWXr-c((qTau~NdPA)v)tp@F2c2H&otiKBsk})_ zpO2Jk(wv$ef94P8T=kt9e+^tqd}e{Jd71$`sx?{d(AD$QU-jG^ z?9qO0vu;v#a0KTk$8UI1@4qI`jV8yh`#7q3a@70F57h70>N+*w-?>%FkInkr4(TO* zPo!Dxh18R*cQ*$|VtxJTxSM>hFV^Xw9&n*1Gs*Z79Jq$eO3thkMdts6L`;M-2 zK=&zP|AMaGOKx;rJ^vbC$0G!4YSNqyUg_MZo7T^)z|b0%zZE8L)`Y{o8{!M!xtIl9zzn{|=C*pnoGs$-K!(~;mUi*u@ zH0pNz(}e35`%$s$->v!nP;Hqd&eWPw{;&P|CN4&E|EmAbss?ZJwSO`HA>99lo)AT? z@4L{~=`!kRLQU&b^AEJOVYOcyJ~Pqj(1q^huH(h>SZ$j!4jtWB?FNq3yPo~kZv3+Y z>IG1bAi6!`W%~~7-?7nE>+hIWmzB6s#jZb*5I<4P9hcanb$;8$+tZqJSAVvbdi}~& z!!6f)9X)#W`k$g~uYJ8De3w#s&1FugH&6UpuiuCCTH^07EPc;v{fz%!jsGw9_0l@| zW#YM4pG!2W4@&nUD!uW*YstTAF5+!H#-sOK;$?9z6X}27c76|G_7F<)7#6<&`>tw# zE9FqA>yt@$;Ov+i(0efvb(|dcYSO$uW2;{ikB{C{uiLDv*`z(`)T>0ytf!|hnE%hz zY5jkle1PV|Gfi$uYLoT{(%iYkn0~&JzxmXQy?shckH_-!{Ye-*r;PfnyWi8k7(eOA zs;$$tN*{c9%E#uN?VkIve`r|$w<6b%pIEwVrSGdJn!m8Pq-=ToImW57TKNIi_gfzV z-XN<1>h|(eq1yYjN9^7{N37C*oG-sQ>^k};U9Hxt^S|5OJ06RE%Vzb^r7D_Shsk;@GI2YC)S5zo&Ui#;(irxRleT(6}J+6Bj=EMG4?Zbmkjops<&lv9G0boBe z_7joupLlorzPo$xzUM#eH~!z%yaR&&yl!AWK7esP|6BH-*FG&>@oOk#|Nj*K&;M+0 z{y)q9N!9%CdKvrSznA#Gduwe${=dI}i!=V8?b+h_KQoev*RV?VI~|L52r@gMH5(|iG1svHCl zfELUD4dOH&pqxIw$S=emK>S}8>GV|0e|!KQ!1Esupq_Itxc{0yCgKH(@DKjO{o1X{ zO%;v(smi8D_wRe_8-j7254^AjYR__1KA1`?RlmA-{fZQJ~#D8NywE*&d zJOFio%*Wb`Ryn`1-;c$A>KL&HDDwIz?}z<(07QS?p_&b`4}kx0-}s-)erf>O+~4>g z=l!t15dV$!`TV!fN4dXw0L$~t1Hk?q4T~F82`!r@c_l{|MmN?#d}}j0m%JB z4`BNj8vm=c=Rn(UwWpIr9RTLTf6M=2_oBQj2vb-PmTmIkj z>kB^rFT{WHe)9lC%l&O1A98>4exLhC{I`Dp6gAE$_lNz|{NuboFaL-A)7pO|%Ot0H6D(>b2ib<-Ga-vs-rLu;2Rtoflvpfc&4FANE@vAmo2a>z2v;VLxIF z_o)HE{(Sy7{;1vO{^bAp{4Y;ax5(aq3-ZtIwOv3DEi)3@P)(ltzs&(q z^EdX-$A9vE_;2<9a1LO;{GS>C`F|p<-%sAJIRM7S{_l$amiyxajQ@B5^8xVR*v}k* z)&1w{I@zlocAmLpSjoX`A`0j2SDWfu%DQp z|HFUSPYocS|Ki^{b@ZUT@UjDyE zeQi;4C zsR1mK|K^#6+{Xfk6wZZ;tz0%zN^AMceylpo;6ty}z(co5^?2*wHy>c}i~Dn5V~jtrukl`aR|-AAgmNGI zUBn^z2dl+0HZO7bKOd+san>b|O}o<9M_tLb4_uXeseOkLaq4fk;Z@5O)YSV9ayUKIgTR@Mu;@8T(G|zzWxZdaLta=}H zUUue%W>=-TYhqe;ZnV7RkXzY#%B8gz466QM#I@?Zq*rT*Ik4D|f ze>|i42Ce;((%;wK&SK-SF4I zwWM@STpQ2tLf1c|8q~z$0XNps>!Y#%&gWMgx^elM@;vQ@v%Sm5o7eRHT61IZ>SyCF zl-2vg*de}~a#(LUztsX1JGSojGLK;M2HZo}u3S|Q;3Y5So*BPiwneoH%`r!+*7fc# zsd1-Ece_dUMK5ywt-9w{H|hUX(&J;V-eW^??WlgwfLGfA?cKCl&u66imwH{-Z!T(G zPH&d^dQN7fd*3|BYDO{A^u1X(t=)}Q7lq^8Y1uBBth?fd;r*QNfMV%Og$)|*;14z**Y`T@oNYZp)JHJshY z=K=kF|9#yN{aAbQ*dBdf-#erJ&>GjIpCOJ7?siAo8{Fj!@^Jb-#@25<@LsJ$!v|CD z$dAfgRa$*~Xj#%#KUL;xS1on*>(Z`iL&ojhy2icp)Ag?J?RwY$;U+is#|}4rv)9Yc z37EXn>$*25-1<~Wj*4A>;)lu+*F|D{P|QRhO6MizI%R*+{J)+Q&Zo zQfv6tf8+ChvEN7WJEea7v~qQ{LOtk9#XHk#t!>+&zhl~{{`SA!=$|JZD`%O6TDJKu zhgPXazgG8VQukJ=_69;F7iZn7R(aFs=aeYX??yGMeQ7OhvFqpK&N`XwjCPO z-gJ#VHXT$AN9rT*^U|I`T62ZE2Bv(UU`x01|0qvSu}8WorE_AQT%-JdeXR5f&1;sa zXRD;o$I?>v^v?=UP+g;*fZ%_C2k3m`aID??_PbEb_aoTv`F}?>fJpS_6}$fQ@+w!k zR=JkG*Hp3YWu1N8<;qvAbrtKjDas2(*SADHfbc)1{eNv7dI#gKMdpC2)^6}>`mwyq zS?%ZcqV{|}FyzHvzc0V8vvQW{T$%58sE6XP*EaS6)^pL&a@?!!$VDIRdDy4*0V(}2 z>G5lQTRlS(bM-O5ab9%I&*6uW+Z&vD;H^4w>?fk^P*JiwA)k30AudH`d481LyG zh5ba{>-ZY)SB&Am2_JA<3OxYKH(iSA3C8}kUXO+NpW^|7Yq4uuh<|VrHq1BS1C0HZntO)-g72-eF zRqXkP|FA!w|Kz6x|M39nOt0H}?pEvpjQ@xJdF&DX;|1V88XmnB^FL-k z9-sjK?d!(=TVLFB#((Mn@SnX>&@)ZFIfDK9{Ko^-{N&2F=6}e18^iu)?K6_kf7p*$ z1DMbMdsD}9*#B^*&vPI4hy34IllJU4{%>2qWI_Ii9>Dl-9sur}2Y~V&N7vewc?;jX0$p6NdnseCy*@)Iy1?*o8|M?#Hj}OS_KOO+t zwGqpnz`xAZ3K%baGFubKem=|HIsRt(5Bu=}upi+AP{{s}|K|M7jN`=tE)yR+O^-6$Oi=9B*;<3IWTQN0e(km~dy`@^yE zAMTsJk`I9YM8uu~p$CBZCiY7u|DTWl)Bs9bPJ6{3;9KzD*dONqRs%5pul;-?TL);! z_PQ40KOVsHe%PPS|HgrvKL5|>ztsTn06F=8z<=0Z-gesO{l*`OL$A@_+b8?hpGB+&5iUzrW@Fu>X?!^h545KB0XMEcYk+9)F@K$o=`8ai7RK zLE}F$>j7q*u^;|Ftel#c|I`4AU4Mhltswt5!T-<$EX4oo%-0+Db+1zMhwa97;v@Wz zY5@Lg(f7iC^8kL0fII+o0QgVtziID4>;dNEztsT9|HB$UvFkV9hY|KK$p3G~Jpa8H z2=f2wi7wB7&wbdR$N$Dk^?mF87Qy}luU7ipe=+-Wt6NSs9Y0AoM-KZ^2y<9|->AM!u01I*=8{O!1}Kg|C<_jzy5zCUNbFZ#Ix{HNCd z4`BI!Qm=dC|FVC2kemNMCjVi6DC54>0m%K|xsc@!xo4RB_o;4OkpHkh;(v;oW%M_w z1CalR{I@;;KOdkvK$!dQ+I2LC{dfV({b4_X`Q-gXEb__WaxTh0*f=eE$17 zKpy*HKIA_yF>L%l+X$Ya|f-rv?D?Ls{Mr`|$ydsx!lX zBKd!q`#&!KGi|C>2kd8Tb${4ji2ps22e_$TzL5PkwmPLnm>-`Xs=9#fD`+0T&PgL$ z{eM3GGY^nFHWLdk;Li%q^8gF^-!S(#{)ck_a6j|_nVmh_|4(cGg8IMZ|3vbB%l+X$ zb$^=!SQP)M`&<1#;(yG3oxdEipRw_u{2y@*kHi14_RrYzej?8y%qRah{*(Vt-JJ4u z0Qe90js3%#i$BpV-YdUvT&MGlkorlG`2e5$8~ceN|AYF!`GAoBjA1{uX!8K@Kdb?S z`Tw`!|At)`9kLogA^zJO0Q|Rkev4M)_Z|S&|JR%cU~FIaK0#k6???Ik#|Pj6;D7Vm zs*5U83kdl?JUZcP|8~X(HGsc{|IMoZ8~f+wzt}&!0ROG-AA5i(_h$|u^#fdA$Ji1aW#R{l@U5BJRj82_UP_l^BNs`l^e{+|6&{=a@uX9la* zP9*2gdH;zxzeIIyJU|Zn^Z2iMfTZ$qRC-KnoACl-zlk{j*pI0Hlm90^e(3N3HV@$I z{-FoZV_E3^&)96ya{sz*U2*+C%>Rx5|2fbKiVG$bOh!jQ_Q&xrXeg=5O4$80PcW_A|Epp9ufM+`lmYpKz~i ze{l8)Oq1$okq2{r*c0~L? zts1};PADai@%pr1r*iWPnpi^s6QQc=cFNym9N7@VU zuzF^8^t+PR^7y}7uNm&4;Pvr??(nMZ8+8>wKk3)~t$Ig$C}?iK;_wBR z-X~ur)vC|FPxJq%>$-Xk&TGA4-PP9LgQ`Tc=ioo>hXn{>uawX0R1Dyqw@bNW&wTQJQ+ED8=D$AQzNN*rN3rXrc8BQ6BaSV7$4z~2SZ4+_c{OVe z7PTbOu3hT@i#`8c>XYwyL+707enMRb$K27=U$}nVe<#Q9xocl=wvFaIKhm71wEy@e zFZSr^9npEc>e;&|u79n4govK+aNiVt&guZH0i01?05QIO`)mI@EL#3g96qc4hqvo| zpkHSrhDJ4ahkVg9mA+zKgF&e=EtJuAAJ1slk@>5+|_^kSpNg|`kNN} zwN_N3{_n>#>hq5@d3nD(@{?8W^1p1<{!Ohu4hP{=X^p>Y$$e^={XeHLhum zn6G&TQ?35~Guo2?ZCqU@51De?{!h7A+Y8HeA5^(_UekUH?>?{pPqUl2d{{lE7u2K5 zT7)V0)+^PnUV8(Zid}zV%V#d}##OEVo671P?fr-PwRUb?xrOe7SQoy^a(=~ey~i-` zFRkcz3Hh$Xr}}=q4ikOjb6@k{1A`(_|6g)g=k#h`5BbmYew9_}$)W7|e|qi`XnfX{ zzIxTGzN>-*T>uX)cg*L6&1TS-s9*p;KkwqwrJs^@{8 zz^aYfH?ZTJ*V?C_ckShu}YJ{t^5~-_;iRZy|g@!2gmL+FVk3l;^(jUyKj= zj|V8ofAavw|0Vi6e+Bj_1GaVHn1;C1pjgKcAPWdhI0>)BueA6peCjW09x#jbJY5z^FM|c6t=i?Z%Ut@CqQ1SOgKA^Ft-t!+1fEQRa|05p|@}I}J5dWzG6uW-o zKOO*)`;+(Q=l}2@!G7aEwE*&ds{w@kkMsY$IzT@EVZQNy@}_#1mG>jqe|h+t=YOB- zUm^c5j@^v;Z@Irk@_rLOpxE_?>~9X(j|V8q{~7iE2l@ZlfaYXXe@D~-r~$x!%l+8{ zIG_LI{qymk+~4wla{tclnK=Kq8o=oJCSL=<1Na)iJ@sQgPX1phep?Ly{_hk!0}l}9 z{>gRf)em!j@_TZBxNn00rWaKwSb8MO{e1q%9w6AfVuj| zuAlUI{=tFYHf2pIK}S&u=Y>> zZ``*C|E&h#BRRive>^}w|E>NH|Ec{KtN+i({|&ubbHiSQ@&Pd4=l!bx`&vL$_b2!N zpW?sO{+SDixv$qlJqq%9KmHc{4?RG)&Rod#0NMJ#ofFV*`9D!I{u7P=)c=O_1%>Hs18bNDazQwxCqPShx{*8{~yrYaP!;R|_ zfA~*CR{yu$-?&dimiNPd#xOs}14Qiait7Jx-xTsct#jAmzvceq|L{Mo{fFFNkpEj> zcE5Q2XSz3X=l|hmTKnlNZ93vr)-mD|`=?ypAEw=b%lG}>{e!Ae_33#xv1Xt3d$2pq z{qx_KU_R^rSqES~fblKKyaQwF{bwH*&I9Pu-$L8|q;)12b*_2;*RJfh+OK23=D4Ji z@3(s;)MMrqu;2Rtoqxbt2ivvhKW8Cu&94O4pBhljUXKlxk4?C=a_aNy1DMf$hbA>X zcHyG->Zo-M|8T%FKlPmM5%pYp{;#ihHAm06`k_f5tKQT;4^qXupLwl1q&0y1G+!Xq zpPh7^b%c7pxbK>kOEwNny1HJ~4i25uzJfijYEQR&`e3hX>eF11BKrx~s_!=4s(mFj zZfxD}_W|m?FrxE>w3mV&qpA1aSFZfx6}SA0+digFD7Ptc{gWT7=P%H`!AlN3RF55M z67NGjyXtAJ%dS<9|8zm+`-58fgPN7Ay{gq0fS#|}=+(8e%k{q5jb&cI_)q;m;y<|xjK4jtIe*Rn-}+L0|2OaXe1CFc+K-8* zi-Y5uXXtW0Hf@!7w7zZJ$>5E+|lESH2hJ$dwzX|duLCB8~s>kacV7IQm@Cdl9E`){{wCHZevYG zo-&y$>IdoxXsXGowN86bOYIw%x~}bMcj5O9UOhTD2=#x|s2Y{_dKf$6X1=6nb<&Oh z@tD>wCcKJWeR-qbXUbudydT`|_|qALD;fuYm4> zSh{cG^Ln;vK0nd!5)FOX$T*?e9s1vT9i!K#T|)OotnlX<@0ro}lhb6Cs_TwDM(L+| z4;<0lzm)u~-Xm%>PU-PzUOiTk*Z+oBk2sXdGiyLGldhCAgiG{(rpcK^d}<5%b$`LNT=0T-{rM@snCH2j|?_)oeddoD1l^p!4)K*QXvi zl&NWVb>H9Rm0DKq<1_W!T$}cC?Kv^*RjoZ{%GEoCpCLBvIpwwbxgD-m=K$8LM-Q!i zPV-!f&HLC#A^Sfd+WCcchHIIDgNUD;6H->h4_yLK&$lHG5%+cjk(40 zANDVX|Lg&X2k`9I|IFA=Z2Urff8xLQGK!1g|2s8X+~7|RdEo<$|FH+qwZFgbKMDGQP_#dmA!~fOmcX{S# zs&xL2*k8S|JLW$=0Hu~`4XYILzo}`j_5k1e2>+|sH^uyi{b={=y|D+t3xxbR>poJ{5KC^`M>4< zbl_{v-1M{x_xV3@G5PxfZY5a{xb(KKmWIAe~;@rFDzs~V`D!xfI|5{Ilr-=80Y=u{sI53 z4p8j=H~zzZWbB9kVg3*MsR0=GEgJiY)BpxlJ0<_$_qxuc5dX>h+4~pv6Jb988+-r? z`Jd*j*uY~{P z{Z>~n{+kB~YyYY94}I+)_M43VaonkTh!p#PBKLn-|6hpzRs--g|DEqVQvbL7-|GL= z0lW&-{|oUytpDfpzw)GfNmT!b|8ef0$Nz-R-2E>2j|VVO`-lB_0LHbtcjx0jwSLR> zVLM~EPqdHcA%Am%;FSznlqi6b*(yc)D-Sr%(&R~ zH)_A#P33b6YySgpr{cPQq5A(~_@CB$7#;xrGY!rLTvG{}Uto3fBK0i~lem{+lB1Q~S@a|F0a-yd$~4@tLS{+kD&4nWS2V1J4F3;&1tPtG3-{)hGdLi{K9hy8c}_>Xe=PyIhDa(-(6@z?eK zb?l?lp8dxEum%v;{`<7P|G>dRuCDIc_Z5*F zrN58T!&lsHooCml_j^;w+C+_NE#g}Frd>KCQ9eUs*8f+&u73Sv1720?3kZ&!GN9m79E0bGnt< z%eQP-d=B7|rX8Aho^=;gd&_8^Z}(PtWyME$E)ReYKq>vcDy;{u`(BNYjQM=^QL2!=0dRtknJ7Vy-)k#e>3CmeK6|2zN|A06|Z$2b7Ma} z>NUEfyXf=Z)G_IHy{^}3r}lW*-|G&azvKFJ&mqPq`zL%4(pA;tQJ3E9Oz9P^Zsg*4 z&K^L1?$2`nfcwV(o0|Wh(wU97ro?`YsR#JJzc1DIFI`vPzo|**TQt8p8ta*s0k>`Y zF?r`%cYZ*%+NAoC_D;F_ah*vYseMFy6+~+J-Bi)*KmHT-6={vXsl6iM(D=oV<$L6P zG|wOE>%W|LXm&>b?^_3y|Mz&^_-vOO`k>bJzx{NqjOwJ;_h&Ja()lVQeBrRG z(tA#W_60OGYu+F268raVOuDYEI@3`)(z4X6|6t0YTVsdZ?7d+(+@~`Hq}zXbOP)aU z|52a9#6_*CUY}k6x6tc9@rIa=&MR+5;$N))&^{aY9(YyjHJ6mnDyt_ahs&mn#(|g< z2xa^CoV}E-@#D$V2bR#@6keG#F7ce|3X#ei^>K+jhDoo_M4)7ce2Ly0QOUUGB?q%A z`MK5#)@od)o&ZzwMA7H}ndUCd`)gh^QeE>~ew{xtt#fdy>XiRWDXljmvKL*|^V-W+ zYS??i_3FMu)#@4d^$F_oY1pqCfPTjM-6`b~!=pD`&+pXd zy>*A{JF9h#5@T}yGWz$qevR3C2=;Gm?RBd(KVQ35XTj-frX^y0DEqv{V%Hz?KdJX= z_#b)z_LVUH6Pxtjg75&wf6nzY4*>s7cmQKPwSQzEhwNv}Spe{#HUGnU?}hz^_+Kjz zP&usqh$OrK{5RnN;6LpDHvGp6EX4oDH?$YDm=F7_2Pbp*ZyumleH>`*ujvEmcZ=bF z=mF;Ae`U{k&;O=>Iuf%V5AgpL|Cv517yYm)?q*oq+#HeO_4)Al91)Ad35VfY=8F?8gUq z<}a52(fZeg{Euo;iMFKVP%4c>vgN=l_NLw;F)4 z-(q?o&jTF1?vm2u@IQ0&w$K0Jf6a$y;@qDaK$!o}$A8QHiN=2-{I}dcwOwZk1^GX@ zzvcfS|H=DJVgA1u{wF%rukxAB1=QmvQVS^d{4X~DH~z!@&;#sxaYs%K0DkZKfzG+s zx<1tUd~>WV>l+@)|H=9B0LK5c{4T$v`MDe?I^F_NRUB5BrV(SO2)9VEzyP&;MgX(fdDwzoYl{V9)SGca(}qJ5dT#JSo2}7QXh=DWW)Qu z2EaJX{lom9-2ajMe-ZrOr?p3@??3dut_b&StzSO>)2p7z$^GZ$f5d#t|H=DJo3xKt zd`1wxhVyXWK5zVwYXI}*{ZTC-WdCCLZ|pbz*KbfAILiN5Rlc8PKJ2Fk5aj>l{+9p4 ze?%=H%>5aMx&Qfp(V8v2C%}Eg*!U0ov-=F^=KtjUg+dKey|9t$n8i4Vi{NHkZB8-RsrhNYMb?W}12cZ5R&H-5dPwwv}{+kEz z^8gY5sRJyw{!iWC>i>!Do%8bF>i^{aVg4WTzvj0W9I_e!{D=Ju@t^v?%>fwuYvmt9 z{xb)_T)=$w|D&p-!GG%h@E`VnTmDn`&#(W7{0}|A*wB~@JwV9*eEw4hu-ZS2r~Yrb zzs&={e-m|p{`dMGssG~vLjF_tpWe~$1^Yt}Q0)Gv{*SEwAM&62zwsXrz!>(MYBfh& zkpEWy*Xx_QzbWKD?DvY+{o5SCLi|rwc0a=Z{QCd@6#x6)YjVB@pt}F`M5E_FwE$}V zmj4_7;lAnNtn$Rb1LX6+yQ4a;{WAw(wSU-OjQ`95Q1>rX|9>q0haN!d>-{`HrnvnQ`?XiTmZ<<9=-1w;1!^JV2QHGp6>B2Z-kYg8YA{=5f?77Amce;XYz)b${4z z{D=F=L{@R_pE-b%ZAJYL+z(~!CsGR_@2BohH2%YVYX1fKZ|o=L)&H}#fZ%-KMe^U+ zpDJT6q(IF-`W&7Z=7%cw`iJ{D67xOx+3tS9 z{J+Mm&s|bc=TiHIy_W4g<5sFCx=QysYF52{WuNYaPqp4s@p<+WfceZX4E`lM=419j*?n!+tNwGH$u4CE z?!`)cJnfdgb;*_OJmr<#(5Y*D!u{fxzi_YYc*T#o=J5K~$~CW8H7%wT*6hYmZm;d+GxS^%m>;b)M@>ovvQ5`C(n_ zzAIYyuf6}h*yBA=t=5&T?&xt(=^TkvTI*YsAJ<;d`Q8%a z99CTqHnz*-XY`t9Kc7&xj}NgrqqDZfeC7-+KJ~;h-xId_$yE-S4=C6ERot6h+9R<4 zNS|xc|CsUKExWwne{)@vo6%l*lfS#-`b*lq+VwN&P{~TyulIvu&wu9!H(dLE?f)OC zTl)d@j83~g-Ot4O?Za;5@@?h5y5BTz(tJE>XxF|c&+EP^sm}KKlk-b={=!}W*|Cp$ zF3jWK(SHAvTJJ}l-^9lzJ~yU&1D*WcMOUkSp>X~`nWomDy(uKWu3UZPHNX7AHL9-+ zJ$wG1YksN6tL>))uH!e?i(dciEd7g9?%woecl+jft)*|){sG!cKho@UzeBxm*K3V^ zx9WK_+84Unef9sG^W)+7lJ4%!BktNzgJV3>v)0|b_;Re#e{0kI(W`YHn%j}8wVwbQ z`SfU3|I*>l0N@+|uXT!2#}Afx9eGuA|B(g`r`_pxMZJi)X~z4+V3|9?^+UcdgwSH)Ys$HdZp zyh*(enMx-39@PiFn00G3H-M5SG%vq?)GLuxA9CNs-1onzzjf?Z_V*H(sXr~LUO}m} zVaP4%zUiv;H@ftCHYN35SbFDy7h}#Nj5VS$=MJrqr$7n42k7;iNNkmK9a6FD@4a&0 z_5Eqq5wl{PRqb}Y59ypU_+O!Q!fEBRwL5xTN8fe#@|y!*{qiJeePfIKhWG^c%eCeo z_CLAW@BL$Q0O^d@%Bu$MwMujCNbjfR>JeUA{#2G*DgBNDDlI*v>(O2fkMN(*4XYnO z>rM1?WlzAu@>s>LzjB@W{3BJb?^ciBA+Jn@&O}(DI=K2cLzOQ*?kX~R?Q1V6)ULc4 zZQ67|*RH)z{=OkcnT$Mv)PHVV{D0`qooBz|>}#0VsC~?g?LJ2Jkg`;{<{Y#)lk%Zl zi3zH~no?!*Q~H^#7~=u5exR&uY0>AO_gKG2#}D-Qc1Wzp?Xx=l`-F?sY2@vuxBTqDBm9T`cmUWB_u)U|V)y@I_2&kk5bEj|a%-KOW$CX}PEJhyBB!sNW*uKOTTF+|TF# z?47Ph_}{hn=^Xw)e0aSe|Bd?=Th#{$|6%`p{D=L8_>UJTcKv=1zAW$nA^-6JpG&GW zdT9*vOTT>J&*tHLo{<0bdM`8n!+vC5fml+6|0(jTi2Y64{|_%v^5?9~1LUy(l>UA} z{^J4uI{xoJJ>j2|0RL-hG#@LO2Y~!0ffd>sB;9UxiPsh*ya4$> z+&5Y75Bm}Me?I@i8UTDZ_WK?`of{l_0ONmH2fzcE4`6N}^Z>2$-=PP9|KC9)O%54}kChnPb;|-fuo2sWs2#S|<>DfJN}%*q^DCcaFGE9RR`q znEm2^$bQTJE%)Csb}c9O|7-Y9?oSPX{C__F4-O7`_J{fZrNNOL4`BS?QrqD3f8#ss zH~!ZuuV7u6@gMfv_rd?r0~r4;&d2}9&Hp|7$$P|na(`s}hx_FJ#Jc7)kL3SnwO51X z{OsLt<1qgx_cy*<4IrQWcmvD-$^AqASJZYnM9#3~rBj~$L~?%1|Be5a`!9z7*{ty56@7m}_^74P<{;`%aH*heU z`-dKY{NHka%m2yy3-O;iK(Y7#9R7#-ztsTX|FKB;05Ko_``lk+%l%54WK~&Z~Qm*dw-$7;s0h-14xkbpNhm8#Rd8Qc=^BO{@FUftb_d~@_x(z z85{e_|5^7pFaMSMQwMn_7I8H60&GVnUAHn}H_hBDqAC?dBbAbm4`Onz)8Z-~U&x9TT{+lfSH~upZQ0)3G_fKkXS!w{r zf13xe`oBeTe>{Ns0P6ms2Qc=>bpY|dI`RO8>i@9c>i>+X{TurkhwNu;b$^R6pWGiA z|C2ki^8nNUid}ziNms%8zwv)s=bVRg0ObA6+f*Y~&X36XE%#?Ub#+p`D?ceJE zL~8z)|KkOy|A+j~VL$T#QT}iIhw;eRZ_&KLeEcW(rxuXUe`7yBpz5WuoZA0l_z&|# zO^hG$`9D4&KmUjSu;2Jk4dCI!v78zJ^?zg@0QMXInFp}izwv)Ya|=iI*2QxG#(yFn z;JRx2IE?F zllxQu|Eu^P)&JqY)c`#E;XiW$QT^Ze&pbfLbHBFV*ZhtBx%q#xO!-otUoieN50KK{ z62+c>m=F6AwE%K{n*%76|HJ>#1BC3y3&4F7{I}enh>ZWXj{$s#`=%WB=kdShX`K=G zWJ@gS0N;xLTVIOy|JR%^YjmaZng;Fpe@GnBK1x#Afh%5#x8*rhN9??;y-zhCZ=APi z{dvT5x5Z}p9NT|v{J-XMd&}|h1BkEj``F*7?=PC;mmfg+{I{RGDv!Xr0QMjl(ceOh z8^^Qi(EKNA)O+~TpG>%l?h7uZ{nPyOul@gD*&fXQ2iITLvdg81h8+>5vUojMOFA^w~ESxH;9hBneN?VFv{o);@$>-9>j-!=2vF|Vp)qpnBqNxQ}D zjlb2NP^vR*R_|e})`Dfk@AbdYxj}Dh{{U&F_QqeP9(emZ#Lh3ZAB}!K)RKLg7tmuR zraqr^WxssOEB(!kkHxNkbnSp^Ow`Bf)LLeArn24L_~Eb{)tV#IjruP4@Ee^2A1Na* zkSft0F?vkImTfI!vG(wm&i(GR*YN{K-HwK>@%sO@;=SemaGtY(YFFvKK=*p(lNq;4 z^MGjelNG*R!1o}&&R&76`44q&^M2K+bsuR@6=aW}cxp*&(dWNiXO0}XIPK0%-1oYq zz8rK_eS7RdW%nQP{MD~q)%q^?yyn(TnM{*w*?Cm!`P7dg<<$P+e<1q(CjR4&yKz-# zgGkxEe(x&Y^=AN#>G>PIGVP8Y`%HOAv)j7;sB8Y&d9P$;mm9n|;X2iimMBq;O4{`P zO;@Y;Z1imB6`f1c?^@f2z1n|!&2?V9TlD&`54E~blULf^-Kl|C%%Phu^!`X^?d{g{ z-RI7~QxlD6+}H91cgC8%2Hvc2*9RLMapuc*H*w{t7raNU>k^8i?&`=PcXI!;s;dmU z-hbTSTGuDN+BdS-f6Be_V#>X>E#-Q4B=!B1Zs>QL{CM)0R zTH=Zx3%aJigLL*<;v)&}?~U||;!Ba%E24~)qV})%DXG}&KkWTGq_zF+=cnDK0|Rbt z<36u7&$T#|(b*%2{cM`vRv(PiJ9^g*>pd7XG;7ZotsPI%(;KK;&H2wMoQqvj_H5DXuX{mfxBuT-$B|JU zCso&|ue0Km9xHPJnnO)%ov*ZXsn*7&I;ECKdcRH8i@%!xMNf3-WA%A2Q@?;$t75Bu zr_R6phdVwFT=-h|s?PHK$$r&9^q%MYBlUi`LTm4&q~`9k{e0x{S=l*0#H4DZ^g=Ev zW1s)*I)Qxt=YL%6`48Ej>JSGb?k_)i+o6#C^YI_AI6W1=_cMojsHaB zf9L_o_d^d5zW?F@&dV#neIg#lk0UqK1 z3VE=AO0h_Z|qMhUtWm+bswIL*MX1I`0qV{m=FJFwQmOs*}o9~%?FHWPv!aej~9Uda6g~_ zRxjXt;J?MXs+vXdANDVX|K>X_hWk(E^PhV$h{r>Qu zX#9u!@E;!#@*kcV|5r7P_%ZCSJ9FE!|F7YH-@9Af-dF29_h)C-mk{{?V?Po8!+rRV z4`2-UIVZ|Ifbky>(6brVXSq-8(#J3#{u2@G&*y*4{+(I=!+tyfUSK}{Ps<130Un$G zuo?E}^B?vb|KUE;UI6j@J3c@jAY?yd&wSh85B}?U^zwaq%*&^;9>B9-<9z<_kQZ5q z|1duk{C`R+iDHc&!?)l+>_;K{@c=O2_)iS^KdjvCarmF_0UqK18uhO&$o_#G_QU#+ z{fv$OrO7w+KZ*K37Vv*C9}m#DQ+x9&hU~`+82`)5wFblUAMWD?P{9AP9s1b#pJjh) znR=qcfAavGcQ^E@=5r(V6X`X`o|U}H^S?|UAf>uSA^v+WAYWi>1c>>(&;PjC`@iM= zu;2J^?6110_nRp1ht>J~ABec$srMk*j}IXChyBL?A?0QW4=^A9o0YdC>HyUCLk|%0 zpD|wxJpgrw&;uC%sR1k||A+ao-)aCpmkvAt{O`PaBlZA~@E`W$0g(6)_f6CQU_Lbf zJOE>If7p+x1(5%T{3qv!`-t(XHsu9Ty&=s14~$<`okr(@M!CP$0m%O?_g^gk-}&1& zVh=#xY=ZyBeT&1NsBWRW-;|&KH@~pWg@XMiYWSA_!*ud__;2-qF#k9H8~gcQ|Ff!> z;Q?Cocc=qc{!a|^f7pL%Df=I&|9gSgzj5Cpd4DMGIr9FFzA1nI8vkKGBKL>?r?ti# z4`BU&L=^IW?27g}6X$bl0NMN>_VYFJf6M&~@t>R@_7m{}3-P~8-niKH!+k^zfC%^D z|JZ=`fz;TzPwZ$~n2%>AhWEQbGK4WNI2vS9vy ze|qTK^PjxmJiumgl>FcL5A(kXMBZ;T0KLz_{PItyy>j>u`%%n&*dOs94-hNL|H=LL ziQVv@yx%;4-rsWae{%nj|Hgj!kD|QaVzKAnxZmERFgzy61B%*%f} z)6duSsqIVD0bqV8>jR(;P|o*R-cJ<&=g<3LKlyj=`o56=_BFU~Dt7%aKNQSI^&7S4 zO~8MAK$ib~iikQu{apTUHGnwx7f+W>jxE^#0Bn_zLserf^icbm_DtNr)LKa%?! z|Gfv$_lF*!5dZN2R{w|nIUXR&{~w3{Rs+BTz*F-8)c@z>|Eji5v03*cd4J#mEcZ7L zV0l0M_j3Ue`|$w?_J{lr*-sq+{+kCV#DBPN?B{WZx&LDMAJzau_CGwRb(vA#PrTEu zwTuD#8B_BoFD2py@@4&d7LDVuoN-wDH~w4gpZ);&AIkOyAmRZE@!xX)=@rH6pH}xL z;sLDoj|Uk3Qv2+R{oI4K9oKz?`L#{Gp8bsBemDmZ@;|>9FrWYUfH3!G9M=Ag|J44e z1Mq)_`^J9bzt#RN|F_!zV)#$aUt6Pdm?XwTt&>;J}oyozz(V#t5h0gAo< z8~2IzZGAES{rbI#|5p32-`NxMpE`i$|A+dtPLA5YWM?D5e(wb|*Kc`05$>A@$l<^8 z;B=LK$2|Femi?L=D8PUFTvBV{jQbXgT|ev(>;L5c$UK1M|8xAe{9o+P;lJ{K<^WXl z&({B^6m$7c9U!0oRxL#1a`jwh)-<_= z_}{W)yY|G-uK!Q07svLTiIseN%5D5)+8rL#`=R)4ytfEzkAI;#jPY!w7T<9#E5ip^aT>T^)cFgJ*$xY4P)9{So{3Hqo1=rzx;YE>^FU;-*-~K3k|4tK+tb&+q0Y9~mdq z53pn6X1vb6{;ItG3$1R=`~6-Soy(JMkO!#Ly(=ZPuMJwdWw%SWsUEbk)jhTExEJH( z)^7KP^1uPTcRbrOpuGXQUHWD93`FbtQ_6?SpKo!?TMoI*e&yP~Iqj8d*ydxC`p{AB z)oVKUP-jK|V^*n+jehLsG7jn-$LBWqdxC3T==w)X)brhO(-Bd7ti z2Om1(u-2QIKd@-?0mFl;b!pFxPCe#B-Gg4eS|8D)Jr8&9>2({Q+vPI6M~K@M>Ir_j zvd%T?j12Yxdg_UCFSuV(F5U-9%L9bU$YX@+(rXYd647v?C)UFqdjBhO{pZ!Q6>99J za$jlWj}vZKXESukPY&IC;NuCc#bO;mW^w^hgOzp5IS&h!Zt zo&|n2n)kQ)f2;qK_nR7;H5XJ?>zdzIeL-sZ*%{qeo$kWL8~!@!$62p^>R;2^S9IX~ zUF{pL`PfK}di}PXnRahnQV*kE55=y(tE0(nd$HEltk%4(-b1!FZElUH>@Y(9~$79-sCN5aaJm9CZWx6JED3H@JIR8-OMU zl5XgoI(PH3&Xanm^UmcZ#x4)K{@-d}`Rz%s*1DAI-BTWG_&u%pkHqub*CGEg^dmPj zp}qv^{+;8RQ`O^~x#Y()U-r5C(-+wt{`@Ca99Iv$_5fUeAsc_Jxqx-b!H>!p zToiZjiLs&d{3k*+kE?b-onIQCQD2{arbRuue@~A_yY7oro*Fgxuiue*N1xZ2`v2eQ z{y~iE^m{a~p6Jr=z-!2pCa%kC4C-g3$ia!6V>vucO zoJWi^HR^{`KQ8iP)gG-sZ_68J+`ivmaZUUC-O-D;eeeJ96`f6DYx)(B_4awC#440f zk6I|s5)Ng5D~`O6KDk5x3;iFwMzywI=kDh9`OSTdC(xYu66+a|7b`iRRYLn;7kT|x zRA=|}eQK57r=|3YX0N9*2efzJu$Zf}!PNiX^6FhbE-!ygjD0Q3e$RjH)1rNeVx@Ej zOQ4mR4p;ZgMfLY(pWpIwu|;BSKeGNoV*4Jwuh*z&RC&9}^7+gv?Qal#-o6g^m+AkE zR#wuZp~qkGjQ0@uh+@|t@_*CEH)8I?{zCi@*^d_p`Hv4c^q;v3`46K*_TvHa`Jd4m z1M>j*fD3pBNdOaBbi980l->o{rLi}&p+2a2f^YK6S05>Q9U-sVrH_G$Q`<>W3 zb~NCfI53Xa#*|qvp7@aB*u{ZR%s1z(Rlu$mB8RM1xnv)Zn`M7Fk92-qohVTxmugW? zkXEE8N@Zz<@)T-9V|NXuk4fB;JmwG@_Be%&*qT!}IacI<;X3cvHTUQCHN)6r(p0Bs z#Sd?Nt{Kma=brn^>;3s$*L_`{{k8u(;ZQOE;eJ9j8smSX*7*xPfbpLQ|6#v*fOY?J zHD*5^!1y1tU-f?2@3{~Ai};TRF#cyo-}U^j{nv~7o)ws2jQ_B*9RKs<{xt8;&Dogy#(&t4 z2Po!0+lWH;)9!mw@VQ|E_s1+{Fe_Xcl^VAQ+xG#Av~S#0KbC|K2>IXfbdN(J`)P;&&$q?@GW~+^04W_Zw8`H;4aXKPtEV@PCp0y{@kQOo8Bk>*F8A%48S^5as>>|5v46&3k}| z{Rh6S{9kR@kG!|jJ~r-KH2$yOp!H0a;D1{8QIz6;&7-<+K+JE{TE!;#5BE*ww%_;< z`vN8Au0pmZpKW)qVxBgOdW{WM&^4R44<^$lr zc>sLCN!1!c4*>JY`|$w?{#)*k2O$5q8bFx;FLnO=F_lpb01rUUk23NBX#MzQFPmr2 z_-{1;I-!+ztx<^CzLpLPNJBmTqvgqTS!Aml$D0OljB1HgS_ zKi;t1{x|+FXl-SDz=-BGK;{ErKEeY~1F*aw_J{n(2Za2G{nP@&+@Jg(?j!R6A^&Mx z?r-;_hPnUcOPZTT`@cY9;`qLo@5%qk{iy|%+y3SFPaVLxPoxe2|HB%9@t+z1S_%KB z-=Fd0|BLhgk$)O5$o=sEWKJ9aVJOKPhi~~0QQwJdT4?Te8{zQI*D{nS=-EaQC z)cNoEj|VUxVEm^JKn=jyAH~X_7I^@2e&at8=9Bj$yug!}lf@XB zn-$$B@X%#FmuLS<_}{2CHmwH0dLEYd``n*efcPH@{-fGQ&Uw{nj9<)t>HuPX?s0OS zdEd6YpM6W4F@dXUR5LD-|KkDDkA!O( zf63!Ns{h0O<@gW#yTtyScpa*7LgNG^Jito%Z|sNv8NC;o2QdCyG%tYgNJ5xGD7r}mErus#6l|Dgwf|K^MTOR=Rf7Spn8TX0Zo4cH6zOMVmKiEI{(@U{n zKcWs`^?%F#SHk~(%^8gcApiFg^Qi$?KY;Nc_TSKJLjF?&F#cN&U_yNcp$DMmZ+!qG zZ%sPbfBl17KGL?lpIDsx8~?5L&u;+#Lk|G+$@__?G#1CWZ?W9VAHxB^w@c{G#Py>Md#(yI9f8#%K{=>|&{HOMh2MGC3?Vmn?xlejE z{-AXIf642gvA>xA_y9bB@n6?-?!Qaw{=0%20Q|Q;0BQjt|7rJ$?Fb)$Ebq5Ez-j%B z+CLG&e(L{7$D6PHN9<=FqGZ7Sd-$)hyK%iC>H{dZ|H=7%-CyiC{=@#P`YA*HQ~MA3 zPySCofbpLg@*nn-|HFT{Kcjnsk=_4J#0Mmj%87%T1GzukC;Ijh{I5*PvsI`TTg?A} z{Rw%2a@!C8!~CE6KOTTOfbR=fg8$|N(&<^TTz$ggIuZ6G>jQxKsJllwt_1&${Y1{1%ym z|K*S8UC-3#Uh7ngGOZc?+@(jA!(U!-+y95=fR`sU{`M%Rr~S5S_{{Y~B=^t#QhC2# z->7^OrO)d#qzqm_%IQ8E)Nti@UK`c_iu!JT;p+!s?f+f%C!EsfBIXf7!#C%>1}AU2 zu4B>t|61$dnP-Cg|AXzf@hX)ZXBwlI`nqycboii4ozwj8A8KCUNSV8Hu1nWoRC}OL zb9tm)=DV8Hgn0lJQ{sQBMYW+oYkRfEx#kR7y{*sD?i!ztl{s+KrNy{4T?bv=w~u>e z4r>jmKneQ4dk(lxaUV76JFJfwOb2 zf5$0z_EoK8JwD@J{lTQyvj?@dr>-TfEt&)SQS~QExee;`4|HktoICjRHkZ-&CEh%L z)y>Ume(Xqhe>|;Pv*xE)L^H2VdR^C8#K~h?OZ(Z2h1#TX;L?o>)up9!+uyr?(!Fu{ zmK$RZVQJ#SSvU1>bFn5g*87^~1Gw|q7v6)|y{Y43ccbPDu{u3*)2=slkFM6k(eZAI z?+etq#hiX4KTwXOK2y`whx%XAmZvm_gzAaUs;|V9+drnUNMf2eV8R3Z4j-&z9r1l` z>idm}LsOq=A1*#O%3|)Nq1yG_w#*m+sF5>jQV>sSYsJ+ zpGI3I8SBPdKmZl`L-VS=Htk9mw5YQJr>J|y4EH&=WnI<9qg}Q zjG?Y)iGP*;K@$5DPw9W7rbrv#bBWpu`V6fj;6*>UB!(q)E|=T>ki8kr@7K^KzUh!4Bu-5BB_PK4_y4|}MFN^)U&sCb$ z^(&OUE{@z25U6^UuE}Zj@kdHlXI(`FV<)1#9}mEI{{rr-4#RT~O_tsMjOuHlY9868 zv2*H!ZR+>2_EF`58O`w;#Z>Bs&eKI@>bPHLQK{6d{ywYM&v<1r`dg&hN6w4S;*9Qt zLbR#jhq8Hrh_K%?UA~-JF70)#&wJTC#p`nFzloF|AHci-%mG~GYX{}_f8X%PlKdaP zJzv27+{9b~`|$y=e<}Xs0Yd&8`%CfPd;r`J`JcR!=f8OXm~S2+X{=@!|{~LdsR|JCCo1^l1cHR{m9Wv#9ACHapJ2>Jife=Ks}>JP?$BK(K>p$CBf zySg+_Z{z`t|KmTq=J}rysV__JGdXO{}Zqu{tt9i$Na|&!2Hky{O&ip5C2Ms7d~L} zmAv3T3fYerfceIMB4hn$ulIT%P|W||-q75H;{VOdTfK_;KX>z(`|zJN4)H7CKOUg+ z8L=MjKdE)WLjL0c#+BC~jWaCfzxrs3`496=-Ulqle{sgM zKjc4s&Eme7+U54YaW~I?t3{3rKEa3B7|e&hcpt^E`7f8W6&&;M5CLxbPb zxX+0F#rz+?_+IQ2?0balrycUYs`@}7`|$u`{5|aFx#;hXV15UE z`jYWK%>8+f`GCwh)kA(LzZ58W=60O>;|1V<=mEN}Yo39?1CaB>{(jXOh<^zG;bm&I z{F&wd;(zjp?(qvefaU*0?*XXc=r}k2*Y48TQ04!||71(2&-={>82@v_@`6$B->7kR z<^hcV)!7dD3$2wGu%G?$b`@N zsR5MYKeYhM|H=K~f0+9h=l}4Zyx($vynu1v;%}b5=#b_AA^R==H}=n+x#50y^kdI| z^8n?x|JccEKL3aPA^+{ZQ)8_~V=a*yK$03sG*+Jo`$G?4{2zG!Y|Q`er!-C~ssUKu zPs9fp|H=K~f5?8?@IUkb;rF3!?8gVJH2;VFmjACM9y#Qrw#!B;Xb+lV5@2c7aG0H1HgP_9)SFR=E`m_<3HTT1C-+bnEDXH z8bG=IALsrh^8e(ExAW}Jh$rR&dgKKHk^AET$o=!{^NH!O|1Eh0<3H@j1HgZBe#`&i z|5KV{J;?uk&aeGQT$2BAA3Y`Q(3nL;9RR_8ao6rIf6M)Se?gG@;{n3lAO45Ae=+|Xn>%Cv?>ltV_YLfR=GlAle>?!}PbNq7TaoLB ziu(GE`Jo?ByWIBo|LuDY#Xca)`>6wXiTNS_*EOB-{3oKu4b0WKnE%85<@j%TyVdzq zx@N z3l9+TpMC(8omf=Jf8)MIY5?$``wdO_0Qis6>dy@MZyo^tFXsWi68;As0REc?2=jmQ z0kFTI2B0zju-{aU|8Tz)|6zZP#@txl-(sBi!~Tf>)c&o%$GC5?-2ONITcq|MdI019 zdruE}{=oy7hdD&BmNUZ{$JUC(joGHs{!BvEboW? zA^&0jZ(o{<*$@9wx$TGfcmVSO{*C{z-_)DY zoPLo9pcY`oko|Z8xF31|<3D`>s1*OL22jj@`U2p8SOX}x{R!hfwg060>!bQV z?DzbK{U$s>z<$~#`49I^i@?6LlOVU{gLq>_EY;u zE8zbk_m}3s)&7Z=_Y>iNnEUrVcRc1f?57S8=Kdl74-UMn{Pte{&)n3tzo`Ci>|c`q zFh8pI$F%@I2T(Ns*E0Q|lgd*|@t-W@F^eE?oysro;) ze`)~m8^&870J(pf=OP*V%?H5$u#Z2^`^A3m0hIs4eN)JPY5?Vq|K3+lX&&dBj($!w z{A=~)zV~UY+_=UxNcBIut4w-cmesUvER7t`>Lx*v>UblRoC?| zyqG)4=4~UM(fos~6LfUymRI&j`TpOEiVD?~7M0Mw0I2F~O&U+v=BmEg=~aD9b$|<_ zu2J4R)LQjzB_GxOmwku5GOXFNM{{R=eY=mzrmS1tvD2+pUw`9^qpn;0*!;tB*YNG5 zF4ZcZr`#W<_Z{)E=5MsVl$6vtPfI=rJn0^$xRzws#)Gx{T9ai ziifl?Ulk9aLt$x#Mu2tiyq=`rSz3%i)xock^aaaF($lZQz%xhTO zyZza`+qvVkJA2^+ui?|WUsl?)`?zb<*qRoNSIyvQr6%2%I;6R55cA6rr`2a^TDW`L zefr!r_u%ypBntwLeuZdR=v~N%5rI{@?y|yF;ucLR|Pl z`}S8_6X1gSDWthOqwd{vI-Yg^2^#8YbO$>#ZdXg%$CtZmU8Cxn#EByrH>>%BLe1aQ zI>CWn?%V9z(n)vq@{rf`g=RN#BI$1ba-X9;t$KiI?$(6H3}%$i@AJC*$$4#K{{F(> z{`!d)f5fY9 zeP7I5#{bpmo`BS9jp>qTr!yKa_?Y?tB4wI%emB0Pe0|i%`VG1dFh%WO{r{PZV!f`{ zfijP^JCpAVSkvs%5_13%(`z*TL83lDY}k09Ks7_<)u2-+X|vAO2_c z*&+LD{^iXA_QU^>{haS1`)QXu{|6IE-P4!!{KpGSsWusU0OLOF5BU%KSHgdoZ~Vs# zl;Zzyv@SX_{=9w6jD9w7I`kY|6$|9x6t1rIk9K8id_4BeI`{Jz>tjuv+T=_r9cQqgxqlEI zAkTcb-yC^>MgD(!?d6#LcmU(Su|MX&*w30j%=h#0&knl5)d?S0%>P%!)kttZW`9aN zF6KYXHw}EW$baSqFb}XpHGQoUmmnJdb$t7_ao;?Ev0rn_dj7+H))_XzePe%0ZTP?Q zdI|o+e&sGjDtG)Bupb{F{x>|Sxyw}7M{wWR&pd$e-~QINt=BW(*k8>5ko`RekGQP* zJ45zUKY;xQzw>GV|IeORT}R$z%6~jSvO#Mx zL^S|nqDS`zh8{qSCigGqztsTXKPt}u$^E^)u{+NF@c_nuqVb=+ANC{5`(b}Vb72;r z?_ZYx<^kY;=m8d9(|UhW$bV`8u;14LO632~f9I^v{mK80{rCXm|3}J`E&qr6mjB-! z{lMq{#{Mw>w;I5m;rATeM|07J{*(73^8n=h zp$BMCP0;dx_z(9HKEU#SxNkE4Z_#V01z6tCXHpA*`^J9w-}Tn4o77wc#(&lnG4}Hw z+6WJDzxhA>hyBKXBK)`9pV(HHuK~b+uZa8R17JTMpsg`y9BC&GW&PoICMjwARF`;Gr_Kky?l`^o){|K$F7 z0RO$j{f9JfKoR%taasOrj85zUs0E1s#&>)`$bR^5f5QhD|KYx8Kb}F{F3$boKEea^ z^c^km03rXW0g(R}^S{so6!G8KAJzNAS^@I{mD_%De`)~c0Yd(-c}(N~#QjXum=|r> zZ~Vst_}o8YzwzH{0ObE&`-ijSekvH1YFPyU}$ zy#S>jSznU>)(=o_`{Do4`AeSt@ZY%abN|!RG4~UP)%S&Zbo@uc2f+UV1^mYYkoUv= zSONR-0LFe|VzcT#yG9B;KtgMthaQ01f9L^h{a^C{e+>SI9svFqcmVO=`T%?#fVrze zMf|4^Aguoz|C1YX8s`;AdB4^E;lHszv0vj1B)A{5|10J{9>DldyxnlsbDtUj9)M`< z_qo6N0jT>I*Z-~dU(Elu=I(;pe{uc49RKkEaGyQ^*zdi7uleWM5C5t8!+le^ShG`3i>&#``hkp0yE$^YTM zc>rGjxjXg!4N&drp*iQ|BSZ@10_lx*%eE{AA82hOM82|AA#(%5-8~>>R z82gFT{b9e!*bo0{TmEnL|B(H(;l8mS{=@zkbx zVEoUCfel~N8Z@fmdx`&e0Qm2(5#qnGKOYzS{w@Ev+`m-*pZK$c+q+Bm|9|K29PQ1| zzwWxvOvP%`I4abn90er@G#_!K%BOYT4-jmTWA5#Wv;tp++@^0S)~0 zeb?T9+;1b>$~LpT#oHhD{g-MdG$smFtXb=lJ33v(ldZ9mAL_m>^<$%i@*OY6;7gU+ z^;$=Gr>oZS%lbkn^@_aYg)x`iC>5&i9MAf$d#x`!l*Ghw80JIW(5(anl-u_EF1Ouithn&wX*;-FkY;-AIVH z(!B1892~gdUOoAqpZAA2IG}p*t|7Pi@ov{B-x}(P$NSu5SC4YKS@k!hy+&0>FwJOu z#H@~`A&pxyP3S)AP_u_L*UPBxBUZfGd_g(?DX;PDfO~1(PS>RzC8uM^RBro+bo`ih z4}akLUr`NA8dje!>eieVp;&LP{=)Cw>LZ#PW{Zx=I-MiZOFzHkro`ZLu<)q4j+5hp+?mWm|KYXtX>`eL~E~|^2+Vfd?L~o zjWhT6xF~v-|>ahCzw@TGfJfhd2i{d`g@sa4zd#z9Ydmm{m{;1B^ z{z&jTlE#n3{R3B2_aD*c82_JB8*S5TniUhe#-ROrjJ_@gX8QD9*Mhu5NT~8V@&o@{Ajs znDlyg{O4}!m(z|os4=_4-#_D~wU!v_?NhC+Z_rJ?KjqG7KC`1QzwXAyC%o)?bZJd= zG3c5ME=DAEpG<+Y{(5pz<@P`0?W_jx>+hPUtnsf7EUHDd{y_DA z^{g{Bwla1>*SSFTUpwL2bp1=~{6(1!dQI+t%RV_Meh<4gjgvNIbv?{JzAsjr)?nD! zKH!xS3y{C}ucl68CG~%#OxP5d0{LSAFR%ZV&5wwnha!u(K)mIFGsB=Z5r|7hHuosY2xF#bm|^Y>jQ?3( zE0KACkpJoCwzB7cF)xcB8~-ha{HI;@bM;jf@gMG|UetUpNX$16Ks5HJhfn0az$?6F z$W`@p7x2Go%&y-n|+>8qN7{{D=L;{BLgB?*0(|-){cU&2O9a%s2KM|Be0K$`_3L#LTL- zWw#&Zqvo~~UR}>zDewSWF8tOZ^8oPQgb!$c_F91lu)4f?faUm)4+z;G@*fYdW&dT* z{qBFg>)Bt-|D#ua=gv=QUX{QDgzTqXZvVr6<{`T{p*bDJ|B(H7foBhBeV7vb#{(ea zzeU*3b|Bgz`#+d`J7&M}fByg0_&v!yz}-*ID%U^jJpd8zFMKxTBVNGx5Bu=|e-!@f zobYS);sZ41^B(@=0pLGs{XEZq^8oN4y{^0;4*>f^{%@8yFd6@i{lCZi^557`g!}0AAD;6X8^0{RU-mwL2=|Ts zMEL*0_fEt<#P~mQcD#W9<^v`)|Je)2CfpNWACG*%BKz?H<&J-tACI}G|NTDrU$_2M zSGVCr%>Vl40bN60^86>_1>nEQ`v5UNr+gQAAHdp6fd?@D*EO{l@PD;D0A3(uKW+GL z9-vBn{>6VUwf)&_*5||I#Hmc9=RY0*)pVaIP|SVRAee*R^B)gjYS|~A2hu$qcmPx7 zH~L+ugvNn;nGYcEM@9UHaoz*$KIxKyQr|u6Ox_3RI+^(=&BGw!1IYVL@Skl&Y%{+F z3b((Q_r;Hm`-@SZL7gJ115`fS=RJVs|FFLl|Es>KJf1p0l=s7bWbB9kz7`PW|FEB0 z0L=H?FY){E8^M3LZz}%&<+eY}{b`f?!+#U}HxEFx+<#WJ=#c-gA6f2SivM_kne&

`49WKpRL^XrxL2eNFo360H(&4NuA%5 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%0DJzn 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 misc --> main combat object local _combat_object -local sort_by_name = function (t1, t2) return t1.nome < t2.nome end +local sort_by_name = function(t1, t2) return t1.nome < t2.nome end local CLASS_ICON_TCOORDS = _G.CLASS_ICON_TCOORDS @@ -132,7 +132,7 @@ local function CreatePluginFrames (data) EncounterDetails:WasEncounter() end - local damage_done_func = function (support_table, time_table, tick_second) + local damage_done_func = function(support_table, time_table, tick_second) local current_total_damage = _detalhes.tabela_vigente.totals_grupo[1] local current_damage = current_total_damage - support_table.last_damage time_table [tick_second] = current_damage @@ -273,7 +273,7 @@ local function CreatePluginFrames (data) local current_table_bigwigs = {} local event_frame = CreateFrame ("frame", nil, UIParent, "BackdropTemplate") - event_frame:SetScript ("OnEvent", function (self, event, ...) + event_frame:SetScript ("OnEvent", function(self, event, ...) if (event == "ENCOUNTER_START") then local encounterID, encounterName, difficultyID, raidSize = select (1, ...) current_encounter = encounterID @@ -316,7 +316,7 @@ local function CreatePluginFrames (data) --EncounterDetails.DBM_timers if (_G.DBM) then - local dbm_timer_callback = function (bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid) + local dbm_timer_callback = function(bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid) --print (bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid) local spell = tostring (spellId) if (spell and not current_table_dbm [spell]) then @@ -591,7 +591,7 @@ local function CreatePluginFrames (data) end -local sort_damage_from = function (a, b) +local sort_damage_from = function(a, b) if (a[3] ~= "PET" and b[3] ~= "PET") then return a[2] > b[2] elseif (a[3] == "PET" and b[3] ~= "PET") then @@ -638,7 +638,7 @@ end end local evtype = event [1] - local spellname, _, spellicon = _GetSpellInfo (event [2]) + local spellname, _, spellicon = _GetSpellInfo(event [2]) local amount = event [3] local time = event [4] local source = event [6] @@ -714,7 +714,7 @@ end GameCooltip:AddStatusBar (0, 1, .5, .5, .5, .5, false, {value = 100, color = {.5, .5, .5, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar4_vidro]]}) if (battleress) then - local nome_magia, _, icone_magia = _GetSpellInfo (battleress [2]) + local nome_magia, _, icone_magia = _GetSpellInfo(battleress [2]) GameCooltip:AddLine ("+" .. _cstr ("%.1f", battleress[4] - hora_da_morte) .. "s " .. nome_magia .. " (" .. battleress[6] .. ")", "", 1, "white") GameCooltip:AddIcon ("Interface\\Glues\\CharacterSelect\\Glues-AddOn-Icons", 1, 1, nil, nil, .75, 1, 0, 1) GameCooltip:AddStatusBar (0, 1, .5, .5, .5, .5, false, {value = 100, color = {.5, .5, .5, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar4_vidro]]}) @@ -722,7 +722,7 @@ end if (lastcooldown) then if (lastcooldown[3] == 1) then - local nome_magia, _, icone_magia = _GetSpellInfo (lastcooldown [2]) + local nome_magia, _, icone_magia = _GetSpellInfo(lastcooldown [2]) GameCooltip:AddLine (_cstr ("%.1f", lastcooldown[4] - hora_da_morte) .. "s " .. nome_magia .. " (" .. Loc ["STRING_LAST_COOLDOWN"] .. ")") GameCooltip:AddIcon (icone_magia) else @@ -776,10 +776,10 @@ local function DispellInfo (dispell, barra) end end - local spellname = GetSpellInfo (barra.spellid) + local spellname = GetSpellInfo(barra.spellid) if (spellname) then GameTooltip:SetOwner (GameCooltipFrame1, "ANCHOR_NONE") - GameTooltip:SetSpellByID (barra.spellid) + GameTooltip:SetSpellByID(barra.spellid) GameTooltip:SetPoint ("topright", GameCooltipFrame1, "topleft", -2, 0) GameTooltip:Show() end @@ -798,7 +798,7 @@ local function KickBy (magia, barra) _table_sort (tabela_jogadores, _detalhes.Sort2) - local spellName, _, spellIcon = GetSpellInfo (barra.lineText1:GetText()) + local spellName, _, spellIcon = GetSpellInfo(barra.lineText1:GetText()) GameCooltip:AddLine (barra.lineText1:GetText()) if (spellIcon) then GameCooltip:AddIcon (spellIcon, nil, 1, EncounterDetails.CooltipLineHeight, EncounterDetails.CooltipLineHeight, 5/64, 59/64, 5/64, 59/64) @@ -819,10 +819,10 @@ local function KickBy (magia, barra) GameCooltip:AddStatusBar (100, 1, .3, .3, .3, .3, false, false, false) end - local spellname = GetSpellInfo (barra.spellid) + local spellname = GetSpellInfo(barra.spellid) if (spellname) then GameTooltip:SetOwner (GameCooltipFrame1, "ANCHOR_NONE") - GameTooltip:SetSpellByID (barra.spellid) + GameTooltip:SetSpellByID(barra.spellid) GameTooltip:SetPoint ("topright", GameCooltipFrame1, "topleft", -2, 0) GameTooltip:Show() end @@ -878,10 +878,10 @@ local function EnemySkills (habilidade, barra) end end - local spellname = GetSpellInfo (barra.spellid) + local spellname = GetSpellInfo(barra.spellid) if (spellname) then GameTooltip:SetOwner (GameCooltipFrame1, "ANCHOR_NONE") - GameTooltip:SetSpellByID (barra.spellid) + GameTooltip:SetSpellByID(barra.spellid) GameTooltip:SetPoint ("right", barra, "left", -2, 0) GameTooltip:Show() end @@ -930,7 +930,7 @@ local function DamageTakenDetails (jogador, barra) local topDamage = meus_agressores[1] and meus_agressores[1][2] for i = 1, max do - local nome_magia, _, icone_magia = _GetSpellInfo (meus_agressores[i][1]) + local nome_magia, _, icone_magia = _GetSpellInfo(meus_agressores[i][1]) if (meus_agressores[i][1] == 1) then nome_magia = "*"..meus_agressores[i][3] @@ -1016,7 +1016,7 @@ local backdrop_bar_onleave = {bgFile = [[Interface\AddOns\Details\images\backgro function EncounterDetails:SetRowScripts (barra, index, container) - barra:SetScript ("OnMouseDown", function (self) + barra:SetScript ("OnMouseDown", function(self) if (self.fading_in) then return end @@ -1031,7 +1031,7 @@ function EncounterDetails:SetRowScripts (barra, index, container) end) - barra:SetScript ("OnMouseUp", function (self) + barra:SetScript ("OnMouseUp", function(self) if (self.fading_in) then return @@ -1053,7 +1053,7 @@ function EncounterDetails:SetRowScripts (barra, index, container) end) barra:SetScript ("OnEnter", --> MOUSE OVER - function (self) + function(self) --> aqui 1 if (container.fading_in or container.faded) then return @@ -1096,7 +1096,7 @@ function EncounterDetails:SetRowScripts (barra, index, container) end) barra:SetScript ("OnLeave", --> MOUSE OUT - function (self) + function(self) self:SetScript ("OnUpdate", nil) @@ -1525,7 +1525,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) barra.t:SetVertexColor (1, .8, .8, .8) end - local nome_magia, _, icone_magia = _GetSpellInfo (habilidade[4]) + local nome_magia, _, icone_magia = _GetSpellInfo(habilidade[4]) barra.lineText1:SetText (nome_magia) -- .. " (|cFFa0a0a0" .. habilidade[4] .. "|r) barra.lineText4:SetText (ToK (_, habilidade[1])) @@ -1905,7 +1905,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) local spellid = tabela [3] - local nome_magia, _, icone_magia = _GetSpellInfo (tabela [3]) + local nome_magia, _, icone_magia = _GetSpellInfo(tabela [3]) local successful = 0 --> pegar quantas vezes a magia passou com sucesso. for _, enemy_actor in _ipairs (DamageContainer._ActorTable) do @@ -2017,7 +2017,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) barra:SetWidth (160) end - local nome_magia, _, icone_magia = _GetSpellInfo (tabela [3]) + local nome_magia, _, icone_magia = _GetSpellInfo(tabela [3]) barra.lineText1:SetText (nome_magia) barra.lineText4:SetText (tabela [2]) @@ -2129,7 +2129,7 @@ local events_to_track = { } local enemy_spell_pool -local CLEvents = function (self, event) +local CLEvents = function(self, event) local time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, school, aura_type = CombatLogGetCurrentEventInfo() diff --git a/plugins/Details_EncounterDetails/frames.lua b/plugins/Details_EncounterDetails/frames.lua index 5777fd45..f6b7a4f8 100644 --- a/plugins/Details_EncounterDetails/frames.lua +++ b/plugins/Details_EncounterDetails/frames.lua @@ -36,7 +36,7 @@ do backdropbordercolor = {.9, .7, 0, 1}, } - local set_backdrop = function (frame) + local set_backdrop = function(frame) frame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tileSize = 64, tile = true}) frame:SetBackdropColor (0, 0, 0, .2) frame:SetBackdropBorderColor (0, 0, 0, 1) @@ -46,14 +46,14 @@ do local BGColorDefault_Hover = {0.5, 0.5, 0.5, 0.7} local BackdropDefault = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true} -_detalhes.EncounterDetailsTempWindow = function (EncounterDetails) +_detalhes.EncounterDetailsTempWindow = function(EncounterDetails) --> options panel - EncounterDetails.SetBarBackdrop_OnEnter = function (self) + EncounterDetails.SetBarBackdrop_OnEnter = function(self) self:SetBackdropColor (unpack (BGColorDefault_Hover)) end - EncounterDetails.SetBarBackdrop_OnLeave = function (self) + EncounterDetails.SetBarBackdrop_OnLeave = function(self) self:SetBackdropColor (unpack (BGColorDefault)) end @@ -84,7 +84,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) -- 4 = always show -- 5 = automatic show when have at least 1 encounter with boss - local set = function (_, _, value) + local set = function(_, _, value) EncounterDetails.db.show_icon = value if (value == 1) then if (EncounterDetails:GetZoneType() == "raid") then @@ -131,14 +131,14 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) { type = "toggle", get = function() return EncounterDetails.db.hide_on_combat end, - set = function (self, fixedparam, value) EncounterDetails.db.hide_on_combat = value end, + set = function(self, fixedparam, value) EncounterDetails.db.hide_on_combat = value end, desc = "Encounter Breakdown window automatically close when you enter in combat.", name = "Hide on Combat" }, { type = "range", get = function() return EncounterDetails.db.max_emote_segments end, - set = function (self, fixedparam, value) EncounterDetails.db.max_emote_segments = value end, + set = function(self, fixedparam, value) EncounterDetails.db.max_emote_segments = value end, min = 1, max = 10, step = 1, @@ -149,7 +149,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) { type = "range", get = function() return EncounterDetails.db.window_scale end, - set = function (self, fixedparam, value) EncounterDetails.db.window_scale = value; EncounterDetails:RefreshScale() end, + set = function(self, fixedparam, value) EncounterDetails.db.window_scale = value; EncounterDetails:RefreshScale() end, min = 0.65, max = 1.50, step = 0.1, @@ -499,7 +499,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) vRowFrame:SetHeight (43) vRowFrame:SetFrameLevel (g:GetFrameLevel()+2) - vRowFrame:SetScript ("OnEnter", function (frame) + vRowFrame:SetScript ("OnEnter", function(frame) if (vRowFrame.dead[1] and vRowFrame.dead[1][3] and vRowFrame.dead[1][3][2]) then @@ -519,7 +519,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) for i = #death[1], 1, -1 do local this_hit = death[1][i] if (type (this_hit[1]) == "boolean" and this_hit[1]) then - local spellname, _, spellicon = _GetSpellInfo (this_hit[2]) + local spellname, _, spellicon = _GetSpellInfo(this_hit[2]) local t = death [2] - this_hit [4] GameCooltip:AddLine ("-" .. _cstr ("%.1f", t) .. " " .. spellname .. " (" .. this_hit[6] .. ")", EncounterDetails:comma_value (this_hit [3])) GameCooltip:AddIcon (spellicon, 1, 1, 12, 12, 0.1, 0.9, 0.1, 0.9) @@ -538,7 +538,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end end) - vRowFrame:SetScript ("OnLeave", function (frame) + vRowFrame:SetScript ("OnLeave", function(frame) _detalhes.popup:ShowMe (false) end) @@ -701,7 +701,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) t:Hide() tinsert (spark_container, t) end - local get_spark = function (index) + local get_spark = function(index) local spark = spark_container [index] if (not spark) then create_spark() @@ -716,7 +716,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end end - local phase_on_enter = function (self) + local phase_on_enter = function(self) local spark1 = get_spark (1) local spark2 = get_spark (2) @@ -830,7 +830,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end end - local phase_on_leave = function (self) + local phase_on_leave = function(self) table.wipe (self.damage_actors) table.wipe (self.heal_actors) @@ -843,11 +843,11 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) phase_panel:Hide() end - local phase_on_click = function (self, button) + local phase_on_click = function(self, button) if (button == "LeftButton") then local result = {} - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) AmtLines = AmtLines + 1 if (#result > AmtLines) then for i = #result, AmtLines+1, -1 do @@ -867,7 +867,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) elseif (button == "RightButton") then local result = {} - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) AmtLines = AmtLines + 1 if (#result > AmtLines) then for i = #result, AmtLines+1, -1 do @@ -1103,7 +1103,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) ---- BossFrame:SetScript ("OnMouseDown", - function (self, botao) + function(self, botao) if (botao == "LeftButton") then self:StartMoving() self.isMoving = true @@ -1113,7 +1113,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end) BossFrame:SetScript ("OnMouseUp", - function (self) + function(self) if (self.isMoving) then self:StopMovingOrSizing() self.isMoving = false @@ -1204,7 +1204,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) BossFrame.buttonSwitchBossEmotes:SetTemplate (DetailsFrameWork:GetTemplate ("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE")) end - BossFrame.switch = function (to, _, to2) + BossFrame.switch = function(to, _, to2) if (type (to) == "string") then to = to elseif (type (to2) == "string") then @@ -1433,7 +1433,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) local CONST_EMOTES_MAX_LINES = 32 - local refresh_emotes = function (self) + local refresh_emotes = function(self) --update emote scroll local offset = FauxScrollFrame_GetOffset (self) @@ -1512,17 +1512,17 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) tinsert (BossFrame.EmoteWidgets, bar_div_emotes) scrollframe = CreateFrame ("ScrollFrame", "EncounterDetails_EmoteScroll", BossFrame, "FauxScrollFrameTemplate, BackdropTemplate") - scrollframe:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_emotes) end) + scrollframe:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_emotes) end) scrollframe:SetPoint ("topleft", BossFrame, "topleft", 249, -75) scrollframe:SetPoint ("bottomright", BossFrame, "bottomright", -33, 42) scrollframe.Update = refresh_emotes scrollframe:Hide() - _detalhes.gump:ReskinSlider (scrollframe, 3) + _detalhes.gump:ReskinSlider(scrollframe, 3) -- tinsert (BossFrame.EmoteWidgets, scrollframe) - local row_on_enter = function (self) + local row_on_enter = function(self) self:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16}) self:SetBackdropColor (1, 1, 1, .6) if (self.righttext:IsTruncated()) then @@ -1532,13 +1532,13 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) GameCooltip:Show() end end - local row_on_leave = function (self) + local row_on_leave = function(self) self:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16}) self:SetBackdropColor (1, 1, 1, .3) GameCooltip:Hide() end - local row_on_mouse_up = function (self) + local row_on_mouse_up = function(self) --report local text = self.righttext:GetText() local time = self.lefttext:GetText() @@ -1552,7 +1552,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) -- replace links for _, spellid in text:gmatch ("(|Hspell:)(.-)(|h)") do local spell = tonumber (spellid) - local link = GetSpellLink (spell) + local link = GetSpellLink(spell) text = text:gsub ("(|Hspell).*(|h)", link) end -- remove unit links @@ -1605,7 +1605,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) local emotes_segment_label = DetailsFrameWork:CreateLabel (BossFrame, "Segment:", 11, nil, "GameFontHighlightSmall") emotes_segment_label:SetPoint ("topleft", BossFrame, "topleft", 10, -85) - local on_emote_Segment_select = function (_, _, segment) + local on_emote_Segment_select = function(_, _, segment) FauxScrollFrame_SetOffset (scrollframe, 0) emote_segment = segment scrollframe:Update() @@ -1679,7 +1679,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) -- report button local report_emote_button = DetailsFrameWork:NewButton (BossFrame, nil, "$parentReportEmoteButton", "ReportEmoteButton", 180, 20, function() - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) local segment = EncounterDetails.charsaved.emotes and EncounterDetails.charsaved.emotes [emote_segment] if (segment) then @@ -1702,7 +1702,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) -- replace links for _, spellid in text:gmatch ("(|Hspell:)(.-)(|h)") do local spell = tonumber (spellid) - local link = GetSpellLink (spell) + local link = GetSpellLink(spell) text = text:gsub ("(|Hspell).*(|h)", link) end -- remove unit links @@ -1761,15 +1761,15 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) local spell_blocks = {} local bossmods_blocks = {} - local on_focus_gain = function (self) + local on_focus_gain = function(self) self:HighlightText() end - local on_focus_lost = function (self) + local on_focus_lost = function(self) self:HighlightText (0, 0) end - local on_enter_spell = function (self) + local on_enter_spell = function(self) if (self.MyObject._spellid) then GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") @@ -1790,17 +1790,17 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end end - local on_leave_spell = function (self, capsule) + local on_leave_spell = function(self, capsule) GameTooltip:Hide() self:SetBackdropColor (.3, .3, .3, .5) end - local create_aura_func = function (self, button, spellid, encounter_id) + local create_aura_func = function(self, button, spellid, encounter_id) local name, _, icon = EncounterDetails.getspellinfo (spellid) EncounterDetails:OpenAuraPanel (spellid, name, self and self.MyObject._icon.texture, encounter_id) end - local info_onenter = function (self) + local info_onenter = function(self) local spellid = self._spellid local info = EncounterDetails.EnemySpellPool [spellid] @@ -1823,7 +1823,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) self:SetBackdropColor (1, 1, 1, .5) end - local info_onleave = function (self) + local info_onleave = function(self) GameCooltip:Hide() self:SetBackdropColor (.3, .3, .3, .5) end @@ -2055,7 +2055,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end end - local refresh_spellauras = function (self) + local refresh_spellauras = function(self) local pool = EncounterDetails_SpellAurasScroll.spell_pool local encounter_id = EncounterDetails_SpellAurasScroll.encounter_id @@ -2098,7 +2098,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) end local spell_scrollframe = CreateFrame ("ScrollFrame", "EncounterDetails_SpellAurasScroll", BossFrame, "FauxScrollFrameTemplate, BackdropTemplate") - spell_scrollframe:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_spellauras) end) + spell_scrollframe:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 14, refresh_spellauras) end) spell_scrollframe:SetPoint ("topleft", BossFrame, "topleft", 200, -75) spell_scrollframe:SetPoint ("bottomright", BossFrame, "bottomright", -33, 42) spell_scrollframe.Update = refresh_spellauras @@ -2111,7 +2111,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) local bossmods_scrollframe = CreateFrame ("ScrollFrame", "EncounterDetails_BossModsScroll", BossFrame, "FauxScrollFrameTemplate, BackdropTemplate") - bossmods_scrollframe:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll(self, offset, 14, refresh_bossmods_timers) end) + bossmods_scrollframe:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll(self, offset, 14, refresh_bossmods_timers) end) bossmods_scrollframe:SetPoint ("topleft", BossFrame, "topleft", 10, -75) bossmods_scrollframe:SetPoint ("bottomleft", BossFrame, "bottomleft", 250, 42) bossmods_scrollframe.Update = refresh_bossmods_timers @@ -2141,7 +2141,7 @@ _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) local title, description, depth, abilityIcon, displayInfo, siblingID, nextSectionID, filteredByDifficulty, link, startsOpen, flag1, flag2, flag3, flag4 = C_EncounterJournal.GetSectionInfo (abs (int_spell)) tinsert (t, {label = title, value = {timer_table [2], title, timer_table [5] or abilityIcon, timer_table.id}, icon = timer_table [5] or abilityIcon, onclick = on_select_bw_bar}) else - local spellname, _, spellicon = _GetSpellInfo (int_spell) + local spellname, _, spellicon = _GetSpellInfo(int_spell) tinsert (t, {label = spellname, value = {timer_table [2], spellname, timer_table [5] or spellicon, timer_table.id}, icon = timer_table [5] or spellicon, onclick = on_select_bw_bar}) end @@ -2193,7 +2193,7 @@ function PhaseFrame:ClearAll() PhaseFrame:ClearPhaseBars() end -local selectSegment = function (_, _, phaseSelected) +local selectSegment = function(_, _, phaseSelected) PhaseFrame ["OnSelectPhase"] (phaseSelected) end @@ -2263,9 +2263,9 @@ local DamageLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Damage Done") local HealLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Healing Done") local PhaseTimersLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Time Spent on Each Phase") -local report_damage = function (IsCurrent, IsReverse, AmtLines) +local report_damage = function(IsCurrent, IsReverse, AmtLines) local result = {} - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) AmtLines = AmtLines + 1 if (#result > AmtLines) then for i = #result, AmtLines+1, -1 do @@ -2290,7 +2290,7 @@ Report_DamageButton.textsize = 9 local report_healing = function() local result = {} - local reportFunc = function (IsCurrent, IsReverse, AmtLines) + local reportFunc = function(IsCurrent, IsReverse, AmtLines) AmtLines = AmtLines + 1 if (#result > AmtLines) then for i = #result, AmtLines+1, -1 do @@ -2325,7 +2325,7 @@ for i = 1, 10 do tinsert (PhaseFrame.PhaseButtons, button) end -local ScrollRefresh = function (self, data, offset, total_lines) +local ScrollRefresh = function(self, data, offset, total_lines) local formatToK = Details:GetCurrentToKFunction() local removeRealm = _detalhes.GetOnlyName @@ -2353,15 +2353,15 @@ local ScrollRefresh = function (self, data, offset, total_lines) end end -local line_onenter = function (self) +local line_onenter = function(self) self:SetBackdropColor (unpack (BGColorDefault_Hover)) end -local line_onleave = function (self) +local line_onleave = function(self) self:SetBackdropColor (unpack (BGColorDefault)) end -local ScrollCreateLine = function (self, index) +local ScrollCreateLine = function(self, index) local line = CreateFrame ("button", "$parentLine" .. index, self,"BackdropTemplate") line:SetPoint ("topleft", self, "topleft", 0, -((index-1)*(ScrollLineHeight+1))) line:SetSize (ScrollWidth, ScrollLineHeight) @@ -2406,8 +2406,8 @@ local Heal_Scroll = _detalhes.gump:CreateScrollBox (PhaseFrame, "$parentHealScro Damage_Scroll:SetPoint ("topleft", DamageLabel.widget, "bottomleft", 0, -4) Heal_Scroll:SetPoint ("topleft", HealLabel.widget, "bottomleft", 0, -4) -_detalhes.gump:ReskinSlider (Damage_Scroll, 4) -_detalhes.gump:ReskinSlider (Heal_Scroll, 4) +_detalhes.gump:ReskinSlider(Damage_Scroll, 4) +_detalhes.gump:ReskinSlider(Heal_Scroll, 4) for i = 1, ScrollLineAmount do Damage_Scroll:CreateLine (ScrollCreateLine) @@ -2429,15 +2429,15 @@ Heal_Scroll:SetBackdropColor (0, 0, 0, .4) PhaseFrame.PhasesBars = {} PhaseFrame.PhasesSegmentCompare = {} -local PhaseBarOnEnter = function (self) +local PhaseBarOnEnter = function(self) PhaseFrame:UpdateSegmentCompareBars (self.phase) self:SetBackdropColor (unpack (BGColorDefault_Hover)) end -local PhaseBarOnLeave = function (self) +local PhaseBarOnLeave = function(self) PhaseFrame:ClearSegmentCompareBars() self:SetBackdropColor (unpack (BGColorDefault)) end -local PhaseBarOnClick = function (self) +local PhaseBarOnClick = function(self) --report end @@ -2532,7 +2532,7 @@ function PhaseFrame:GetPhaseTimers (segment, ordered) for phase, _ in pairs (t) do tinsert (order, phase) end - table.sort (order, function (a, b) return a < b end) + table.sort (order, function(a, b) return a < b end) return order, t end @@ -2613,7 +2613,7 @@ end --> Selecionar o segmento - local buildSegmentosMenu = function (self) + local buildSegmentosMenu = function(self) local historico = _detalhes.tabela_historico.tabelas local return_table = {} @@ -2715,7 +2715,7 @@ end container_damagetaken_window.slider:cimaPoint (0, 1) container_damagetaken_window.slider:baixoPoint (0, -1) container_damagetaken_frame.slider = container_damagetaken_window.slider - _detalhes.gump:ReskinSlider (container_damagetaken_window) + _detalhes.gump:ReskinSlider(container_damagetaken_window) container_damagetaken_window.gump = container_damagetaken_frame container_damagetaken_frame.window = container_damagetaken_window @@ -2768,7 +2768,7 @@ end container_habilidades_window.slider:cimaPoint (0, 1) container_habilidades_window.slider:baixoPoint (0, -1) container_habilidades_frame.slider = container_habilidades_window.slider - _detalhes.gump:ReskinSlider (container_habilidades_window) + _detalhes.gump:ReskinSlider(container_habilidades_window) container_habilidades_window.gump = container_habilidades_frame container_habilidades_frame.window = container_habilidades_window @@ -2814,7 +2814,7 @@ end container_adds_window.slider:cimaPoint (0, 1) container_adds_window.slider:baixoPoint (0, -1) container_adds_frame.slider = container_adds_window.slider - _detalhes.gump:ReskinSlider (container_adds_window) + _detalhes.gump:ReskinSlider(container_adds_window) container_adds_window.gump = container_adds_frame container_adds_frame.window = container_adds_window @@ -2859,7 +2859,7 @@ end container_interrupt_window.slider:cimaPoint (0, 1) container_interrupt_window.slider:baixoPoint (0, -1) container_interrupt_frame.slider = container_interrupt_window.slider - _detalhes.gump:ReskinSlider (container_interrupt_window) + _detalhes.gump:ReskinSlider(container_interrupt_window) container_interrupt_window.gump = container_interrupt_frame @@ -2905,7 +2905,7 @@ end container_dispell_window.slider:cimaPoint (0, 1) container_dispell_window.slider:baixoPoint (0, -1) container_dispell_frame.slider = container_dispell_window.slider - _detalhes.gump:ReskinSlider (container_dispell_window) + _detalhes.gump:ReskinSlider(container_dispell_window) container_dispell_window.gump = container_dispell_frame container_dispell_frame.window = container_dispell_window @@ -2955,7 +2955,7 @@ end container_dead_window.slider:cimaPoint (0, 1) container_dead_window.slider:baixoPoint (0, -1) container_dead_frame.slider = container_dead_window.slider - _detalhes.gump:ReskinSlider (container_dead_window) + _detalhes.gump:ReskinSlider(container_dead_window) container_dead_window.gump = container_dead_frame container_dead_frame.window = container_dead_window @@ -2983,7 +2983,7 @@ end ["CHAT_MSG_MONSTER_YELL"] = 7, } - emote_frame:SetScript ("OnEvent", function (...) + emote_frame:SetScript ("OnEvent", function(...) if (not EncounterDetails.current_whisper_table) then return diff --git a/plugins/Details_RaidCheck/Details_RaidCheck.lua b/plugins/Details_RaidCheck/Details_RaidCheck.lua index a2f1397b..deb578f9 100644 --- a/plugins/Details_RaidCheck/Details_RaidCheck.lua +++ b/plugins/Details_RaidCheck/Details_RaidCheck.lua @@ -727,7 +727,7 @@ local CreatePluginFrames = function() raidCheckFrame:SetScript("OnUpdate", updateRaidCheckFrame) end) - DetailsRaidCheck.ToolbarButton:SetScript("OnLeave", function (self) + DetailsRaidCheck.ToolbarButton:SetScript("OnLeave", function(self) raidCheckFrame:SetScript("OnUpdate", nil) raidCheckFrame:Hide() end) @@ -903,21 +903,21 @@ local buildOptionsPanel = function() { type = "toggle", get = function() return DetailsRaidCheck.db.pre_pot_healers end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.pre_pot_healers = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.pre_pot_healers = value end, desc = "If enabled, pre potion for healers are also shown.", name = "Track Healers Pre Pot" }, { type = "toggle", get = function() return DetailsRaidCheck.db.pre_pot_tanks end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.pre_pot_tanks = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.pre_pot_tanks = value end, desc = "If enabled, pre potion for tanks are also shown.", name = "Track Tank Pre Pot" }, { type = "toggle", get = function() return DetailsRaidCheck.db.mythic_1_4 end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.mythic_1_4 = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.mythic_1_4 = value end, desc = "When raiding on Mythic difficult, only check the first 4 groups.", name = "Mythic 1-4 Group Only" }, @@ -928,21 +928,21 @@ local buildOptionsPanel = function() { type = "toggle", get = function() return DetailsRaidCheck.db.food_tier1 end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.food_tier1 = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.food_tier1 = value end, desc = "Consider players using Tier 1 food.", name = "Food Tier 1 [41]" }, { type = "toggle", get = function() return DetailsRaidCheck.db.food_tier2 end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.food_tier2 = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.food_tier2 = value end, desc = "Consider players using Tier 2 food.", name = "Food Tier 2 [55]" }, { type = "toggle", get = function() return DetailsRaidCheck.db.food_tier3 end, - set = function (self, fixedparam, value) DetailsRaidCheck.db.food_tier3 = value end, + set = function(self, fixedparam, value) DetailsRaidCheck.db.food_tier3 = value end, desc = "Consider players using Tier 3 food.", name = "Food Tier 3 [>= 75]" }, diff --git a/plugins/Details_Streamer/Details_Streamer.lua b/plugins/Details_Streamer/Details_Streamer.lua index 10befad1..2bccf587 100644 --- a/plugins/Details_Streamer/Details_Streamer.lua +++ b/plugins/Details_Streamer/Details_Streamer.lua @@ -148,7 +148,7 @@ local function CreatePluginFrames() titlebar.text = titlebar:CreateFontString (nil, "overlay", "GameFontNormal") titlebar.text:SetPoint ("center", titlebar, "center") titlebar.text:SetText ("Details! Streamer: Action Tracker") - titlebar:SetScript ("OnEnter", function (self) + titlebar:SetScript ("OnEnter", function(self) GameTooltip:SetOwner (self) GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") GameTooltip:AddLine ("|cFFFF7700Left Click|r: Open Options\n|cFFFF7700Right Click|r: Lock the Frame\n|cFFFF7700Slash Command|r: /streamer") @@ -158,14 +158,14 @@ local function CreatePluginFrames() GameTooltip:Hide() end) - SOF:SetScript ("OnMouseDown", function (self) + SOF:SetScript ("OnMouseDown", function(self) end) - SOF:SetScript ("OnMouseUp", function (self) + SOF:SetScript ("OnMouseUp", function(self) end) - titlebar:SetScript ("OnMouseDown", function (self, button) + titlebar:SetScript ("OnMouseDown", function(self, button) if (not SOF.moving and not StreamOverlay.db.main_frame_locked) then SOF:StartMoving() SOF.moving = true @@ -173,7 +173,7 @@ local function CreatePluginFrames() end end) - titlebar:SetScript ("OnMouseUp", function (self, button) + titlebar:SetScript ("OnMouseUp", function(self, button) if (SOF.movingAt) then if (SOF.moving) then @@ -262,13 +262,13 @@ local function CreatePluginFrames() left_resize:GetHighlightTexture():SetTexCoord (1, 0, 0, 1) left_resize:GetPushedTexture():SetTexCoord (1, 0, 0, 1) - left_resize:SetScript ("OnMouseDown", function (self) + left_resize:SetScript ("OnMouseDown", function(self) if (not SOF.resizing and not StreamOverlay.db.main_frame_locked) then SOF.resizing = true SOF:StartSizing ("bottomleft") end end) - left_resize:SetScript ("OnMouseUp", function (self) + left_resize:SetScript ("OnMouseUp", function(self) if (SOF.resizing) then SOF.resizing = false SOF:StopMovingOrSizing() @@ -277,13 +277,13 @@ local function CreatePluginFrames() StreamOverlay:SaveWindowSizeAnLocation() end end) - right_resize:SetScript ("OnMouseDown", function (self) + right_resize:SetScript ("OnMouseDown", function(self) if (not SOF.resizing and not StreamOverlay.db.main_frame_locked) then SOF.resizing = true SOF:StartSizing ("bottomright") end end) - right_resize:SetScript ("OnMouseUp", function (self) + right_resize:SetScript ("OnMouseUp", function(self) if (SOF.resizing) then SOF.resizing = false SOF:StopMovingOrSizing() @@ -293,17 +293,17 @@ local function CreatePluginFrames() end end) - SOF:SetScript ("OnSizeChanged", function (self) + SOF:SetScript ("OnSizeChanged", function(self) StreamOverlay:Refresh() end) - SOF:SetScript ("OnMouseDown", function (self) + SOF:SetScript ("OnMouseDown", function(self) if (not SOF.moving and not StreamOverlay.db.main_frame_locked) then SOF:StartMoving() SOF.moving = true end end) - SOF:SetScript ("OnMouseUp", function (self) + SOF:SetScript ("OnMouseUp", function(self) if (SOF.moving) then SOF.moving = false SOF:StopMovingOrSizing() @@ -315,7 +315,7 @@ local function CreatePluginFrames() --> scroll frame local autoscroll = CreateFrame ("scrollframe", "Details_StreamOverlayScrollFrame", SOF, "FauxScrollFrameTemplate, BackdropTemplate") - autoscroll:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, StreamOverlay.UpdateLines) end) + autoscroll:SetScript ("OnVerticalScroll", function(self, offset) FauxScrollFrame_OnVerticalScroll (self, offset, 20, StreamOverlay.UpdateLines) end) --> looks like this isn't working function StreamOverlay:ClearAll() @@ -960,11 +960,11 @@ local DefaultCoords = {0, 1, 0, 1} local DefaultColor = {r=1, g=1, b=1} local PetCoords = {0.25, 0.49609375, 0.75, 1} -local parse_target_name = function (target) +local parse_target_name = function(target) return StreamOverlay:GetOnlyName (target) end -local parse_target_icon = function (targetObject, target) +local parse_target_icon = function(targetObject, target) local icon2, icon2coords, pclass if (targetObject) then local role = targetObject.role @@ -1022,7 +1022,7 @@ local parse_target_icon = function (targetObject, target) return icon2, icon2coords, pclass end -local parse_target_color = function (class) +local parse_target_color = function(class) local color2 = RAID_CLASS_COLORS [class] return color2 end @@ -1040,7 +1040,7 @@ function StreamOverlay:CastStart (castGUID) end local icon, backgroundcolor, bordercolor = StreamOverlay:GetSpellInformation (spellid) - local spellname, _, spellicon = GetSpellInfo (spellid) + local spellname, _, spellicon = GetSpellInfo(spellid) local targetObject = Details:GetActor ("current", 1, target) or Details:GetActor ("current", 2, target) local icon2, icon2coords, class = parse_target_icon (targetObject, target) @@ -1078,7 +1078,7 @@ function StreamOverlay:CastFinished (castid) --just casted a instant spell local icon, backgroundcolor, bordercolor = StreamOverlay:GetSpellInformation (spellid) - local spellname, _, spellicon = GetSpellInfo (spellid) + local spellname, _, spellicon = GetSpellInfo(spellid) local targetObject = Details:GetActor ("current", 1, target) or Details:GetActor ("current", 2, target) @@ -1346,7 +1346,7 @@ APM_FRAME:SetScript ("OnEvent", function() ACTIONS = ACTIONS + 1 end) -eventFrame:SetScript ("OnEvent", function (self, event, ...) +eventFrame:SetScript ("OnEvent", function(self, event, ...) if (event ~= "UNIT_SPELLCAST_SENT" and event ~= "UNIT_SPELLCAST_SUCCEEDED" and ACTIONS_EVENT_TIME [event] ~= GetTime()) then ACTIONS = ACTIONS + 1 ACTIONS_EVENT_TIME [event] = GetTime() @@ -1355,7 +1355,7 @@ eventFrame:SetScript ("OnEvent", function (self, event, ...) if (event == "UNIT_SPELLCAST_SENT") then local unitID, target, castGUID, spellID = ... --local unitID, spell, rank, target, id = ... - local spell = GetSpellInfo (spellID) + local spell = GetSpellInfo(spellID) if (unitID == "player") then CastsTable [castGUID] = {Target = target or "", Id = castGUID, CastStart = GetTime()} @@ -1447,7 +1447,7 @@ eventFrame:SetScript ("OnEvent", function (self, event, ...) elseif (event == "UNIT_SPELLCAST_SUCCEEDED") then --local unitID, spell, rank, id, spellID = ... local unitID, castGUID, spellID = ... - local spell = GetSpellInfo (spellID) + local spell = GetSpellInfo(spellID) if (unitID == "player" and CastsTable[castGUID] and not channelspells [spell]) then if (CastsTable[castGUID].HasCastTime and not CastsTable[castGUID].IsChanneled) then @@ -1466,7 +1466,7 @@ eventFrame:SetScript ("OnEvent", function (self, event, ...) end) -local format_time = function (v) return "-" .. format ("%.2f", v) end +local format_time = function(v) return "-" .. format ("%.2f", v) end --when the player die, show the events before the death function StreamOverlay.OnDeath (_, token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, death_table, last_cooldown, death_at_combattime, max_health) @@ -1576,14 +1576,14 @@ screen_frame:SetBackdropColor (.1, .1, .1, .9) screen_frame:SetMovable (true) screen_frame:Hide() screen_frame:SetPoint ("center", UIParent, "center") -screen_frame:SetScript ("OnMouseDown", function (self) +screen_frame:SetScript ("OnMouseDown", function(self) if (not screen_frame.moving and not StreamOverlay.db.main_frame_locked) then screen_frame:StartMoving() screen_frame.moving = true screen_frame.movingAt = GetTime() end end) -screen_frame:SetScript ("OnMouseUp", function (self) +screen_frame:SetScript ("OnMouseUp", function(self) if (screen_frame.movingAt) then if (screen_frame.moving) then screen_frame.moving = false @@ -1599,7 +1599,7 @@ screen_frame:SetScript ("OnMouseUp", function (self) StreamOverlay.OpenOptionsPanel() end end) -screen_frame:SetScript ("OnEnter", function (self) +screen_frame:SetScript ("OnEnter", function(self) GameTooltip:SetOwner (self) GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") GameTooltip:AddLine ("|cFFFF7700Left Click|r: Open Options\n|cFFFF7700Slash Command|r: /streamer") @@ -1790,7 +1790,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) for name, fontPath in pairs(fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, onclick = setFontFace, font = fontPath, descfont = name} end - table.sort(fontTable, function (t1, t2) return t1.label < t2.label end) + table.sort(fontTable, function(t1, t2) return t1.label < t2.label end) -- select arrow local arrows = { @@ -1831,7 +1831,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) -- - local setWindowStrataCallback = function (_, _, strata) + local setWindowStrataCallback = function(_, _, strata) StreamOverlay.db.main_frame_strata = strata SOF:SetFrameStrata(strata) StreamerOverlayDpsHpsFrame:SetFrameStrata(strata) @@ -1868,7 +1868,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) desc = "Can't move or interact within the frame when it's locked.", order = 1, get = function() return StreamOverlay.db.main_frame_locked end, - set = function (self, fixedParam, val) + set = function(self, fixedParam, val) StreamOverlay:SetLocked (not StreamOverlay.db.main_frame_locked) end, }, @@ -1879,7 +1879,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) desc = "Show/Hide minimap icon.", order = 1, get = function() return not StreamOverlay.db.minimap.hide end, - set = function (self, fixedParam, val) + set = function(self, fixedParam, val) StreamOverlay.db.minimap.hide = not StreamOverlay.db.minimap.hide if (LDBIcon) then LDBIcon:Refresh ("DetailsStreamer", StreamOverlay.db.minimap) @@ -1890,7 +1890,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "color", get = function() return StreamOverlay.db.main_frame_color end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) StreamOverlay:SetBackgroundColor (r, g, b, a) end, desc = "Color used on the background.", @@ -1900,7 +1900,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.scale or 1 end, - set = function (self, fixedparam, value) StreamOverlay.db.scale = value; StreamOverlay.Frame:SetScale(value) end, + set = function(self, fixedparam, value) StreamOverlay.db.scale = value; StreamOverlay.Frame:SetScale(value) end, min = 0.6, max = 2, step = 0.1, @@ -1914,7 +1914,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.row_height end, - set = function (self, fixedparam, value) StreamOverlay.db.row_height = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.row_height = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = 10, max = 30, step = 1, @@ -1925,7 +1925,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.row_spacement end, - set = function (self, fixedparam, value) StreamOverlay.db.row_spacement = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.row_spacement = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = 8, max = 31, step = 1, @@ -1944,7 +1944,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "color", get = function() return StreamOverlay.db.row_color end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local c = StreamOverlay.db.row_color c[1], c[2], c[3], c[4] = r, g, b, a StreamOverlay:RefreshAllBattleLineStyle() @@ -1958,7 +1958,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.font_size end, - set = function (self, fixedparam, value) StreamOverlay.db.font_size = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.font_size = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = 8, max = 32, step = 1, @@ -1977,7 +1977,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "color", get = function() return StreamOverlay.db.font_color end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local c = StreamOverlay.db.font_color c[1], c[2], c[3], c[4] = r, g, b, a StreamOverlay:RefreshAllBattleLineStyle() @@ -1994,7 +1994,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) desc = "Show in the screen your current Dps or Hps.", order = 1, get = function() return StreamOverlay.db.per_second.enabled end, - set = function (self, fixedParam, val) + set = function(self, fixedParam, val) StreamOverlay.db.per_second.enabled = not StreamOverlay.db.per_second.enabled -- update hps dps frame StreamOverlay:UpdateDpsHpsFrameConfig() @@ -2012,7 +2012,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.per_second.size end, - set = function (self, fixedparam, value) StreamOverlay.db.per_second.size = value; + set = function(self, fixedparam, value) StreamOverlay.db.per_second.size = value; -- update hps dps frame StreamOverlay:UpdateDpsHpsFrameConfig() end, @@ -2026,7 +2026,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.per_second.scale end, - set = function (self, fixedparam, value) StreamOverlay.db.per_second.scale = value; + set = function(self, fixedparam, value) StreamOverlay.db.per_second.scale = value; -- update hps dps frame StreamOverlay:UpdateDpsHpsFrameConfig() end, @@ -2041,7 +2041,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.per_second.update_speed end, - set = function (self, fixedparam, value) StreamOverlay.db.per_second.update_speed = value; + set = function(self, fixedparam, value) StreamOverlay.db.per_second.update_speed = value; -- update hps dps frame StreamOverlay:UpdateDpsHpsFrameConfig() end, @@ -2059,7 +2059,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) desc = "Enable text shadow.", order = 1, get = function() return StreamOverlay.db.per_second.font_shadow end, - set = function (self, fixedParam, val) + set = function(self, fixedParam, val) StreamOverlay.db.per_second.font_shadow = not StreamOverlay.db.per_second.font_shadow -- update hps dps frame StreamOverlay:UpdateDpsHpsFrameConfig() @@ -2071,7 +2071,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.square_amount end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) StreamOverlay.db.square_amount = value StreamOverlay:Refresh() end, @@ -2084,7 +2084,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.square_size end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) StreamOverlay.db.square_size = value StreamOverlay:RefreshAllBoxesStyle() end, @@ -2115,7 +2115,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.arrow_size end, - set = function (self, fixedparam, value) StreamOverlay.db.arrow_size = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.arrow_size = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = 6, max = 32, step = 1, @@ -2126,7 +2126,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "color", get = function() return StreamOverlay.db.arrow_color end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local c = StreamOverlay.db.arrow_color c[1], c[2], c[3], c[4] = r, g, b, a StreamOverlay:RefreshAllBattleLineStyle() @@ -2138,7 +2138,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.arrow_anchor_x end, - set = function (self, fixedparam, value) StreamOverlay.db.arrow_anchor_x = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.arrow_anchor_x = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = -16, max = 16, step = 1, @@ -2149,7 +2149,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.arrow_anchor_y end, - set = function (self, fixedparam, value) StreamOverlay.db.arrow_anchor_y = value; StreamOverlay:RefreshAllBattleLineStyle() end, + set = function(self, fixedparam, value) StreamOverlay.db.arrow_anchor_y = value; StreamOverlay:RefreshAllBattleLineStyle() end, min = -16, max = 16, step = 1, @@ -2162,7 +2162,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.main_frame_size[1] end, - set = function (self, fixedparam, value) StreamOverlay.db.main_frame_size[1] = value; StreamOverlay:RestoreWindowSizeAndLocation() end, + set = function(self, fixedparam, value) StreamOverlay.db.main_frame_size[1] = value; StreamOverlay:RestoreWindowSizeAndLocation() end, min = 150, max = 800, step = 1, @@ -2173,7 +2173,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) { type = "range", get = function() return StreamOverlay.db.main_frame_size[2] end, - set = function (self, fixedparam, value) StreamOverlay.db.main_frame_size[2] = value; StreamOverlay:RestoreWindowSizeAndLocation() end, + set = function(self, fixedparam, value) StreamOverlay.db.main_frame_size[2] = value; StreamOverlay:RestoreWindowSizeAndLocation() end, min = 40, max = 1024, step = 1, @@ -2196,7 +2196,7 @@ function StreamOverlay.OpenOptionsPanel (fromOptionsPanel) desc = "Show or hide the spark at bars", order = 1, get = function() return StreamOverlay.db.use_spark end, - set = function (self, fixedParam, val) + set = function(self, fixedParam, val) StreamOverlay.db.use_spark = not StreamOverlay.db.use_spark @@ -2543,7 +2543,7 @@ function StreamOverlay:CreateMinimapIcon() type = "data source", icon = [[Interface\MINIMAP\MOVIERECORDINGICON]], - OnClick = function (self, button) + OnClick = function(self, button) if (button == "LeftButton") then StreamOverlay.OpenOptionsPanel() elseif (button == "RightButton") then @@ -2554,7 +2554,7 @@ function StreamOverlay:CreateMinimapIcon() end end, - OnTooltipShow = function (tooltip) + OnTooltipShow = function(tooltip) tooltip:AddLine ("Details!: Action Tracker", 1, 1, 1) tooltip:AddLine ("|cFFFF7700Left Click|r: open options.") tooltip:AddLine ("|cFFFF7700Right Click|r: hide this icon.") diff --git a/plugins/Details_TinyThreat/Details_TinyThreat.lua b/plugins/Details_TinyThreat/Details_TinyThreat.lua index 68542e3e..868ac70d 100644 --- a/plugins/Details_TinyThreat/Details_TinyThreat.lua +++ b/plugins/Details_TinyThreat/Details_TinyThreat.lua @@ -259,7 +259,7 @@ local function CreatePluginFrames (data) return newrow end - local absoluteSort = function (table1, table2) + local absoluteSort = function(table1, table2) if (table1[6] > table2[6]) then return true else @@ -267,7 +267,7 @@ local function CreatePluginFrames (data) end end - local relativeSort = function (table1, table2) + local relativeSort = function(table1, table2) if (table1[2] > table2[2]) then return true else @@ -528,7 +528,7 @@ local function CreatePluginFrames (data) end if gougeThreshold and ((not threatActor) or (threatActor[6] < gougeThreshold)) then - local spellName, _, spellTexture = GetSpellInfo (gougeSpellId) + local spellName, _, spellTexture = GetSpellInfo(gougeSpellId) thisRow._icon:SetTexture (spellTexture) thisRow._icon:SetTexCoord (0, 1, 0, 1) @@ -736,7 +736,7 @@ local build_options_panel = function() { type = "range", get = function() return ThreatMeter.saveddata.updatespeed end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.updatespeed = value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.updatespeed = value end, min = 0.2, max = 3, step = 0.2, @@ -747,14 +747,14 @@ local build_options_panel = function() { type = "toggle", get = function() return ThreatMeter.saveddata.useplayercolor end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.useplayercolor = value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.useplayercolor = value end, desc = "When enabled, your bar get the following color.", name = "Player Color Enabled" }, { type = "color", get = function() return ThreatMeter.saveddata.playercolor end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local current = ThreatMeter.saveddata.playercolor current[1], current[2], current[3], current[4] = r, g, b, a end, @@ -764,7 +764,7 @@ local build_options_panel = function() { type = "toggle", get = function() return ThreatMeter.saveddata.useclasscolors end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.useclasscolors = value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.useclasscolors = value end, desc = "When enabled, threat bars uses the class color of the character.", name = "Use Class Colors" }, @@ -774,14 +774,14 @@ local build_options_panel = function() { type = "toggle", get = function() return ThreatMeter.saveddata.usefocus end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.usefocus = value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.usefocus = value end, desc = "Show threat for the focus target if there's one.", name = "Track Focus Target (if any)" }, { type = "toggle", get = function() return not ThreatMeter.saveddata.hide_pull_bar end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.hide_pull_bar = not value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.hide_pull_bar = not value end, desc = "Show Pull Aggro Bar", name = "Show Pull Aggro Bar" }, @@ -805,7 +805,7 @@ local build_options_panel = function() { type = "toggle", get = function() return ThreatMeter.saveddata.playSound end, - set = function (self, fixedparam, value) ThreatMeter.saveddata.playSound = value end, + set = function(self, fixedparam, value) ThreatMeter.saveddata.playSound = value end, desc = "Except for tanks", name = "Play Audio On High Threat" }, diff --git a/plugins/Details_Vanguard/Details_Vanguard.lua b/plugins/Details_Vanguard/Details_Vanguard.lua index 525fa23a..7e8e5f0f 100644 --- a/plugins/Details_Vanguard/Details_Vanguard.lua +++ b/plugins/Details_Vanguard/Details_Vanguard.lua @@ -311,7 +311,7 @@ local function CreatePluginFrames (data) end end - local SetTank = function (self, index) + local SetTank = function(self, index) local name = Vanguard.TankList [index] self.tankname:SetText (Vanguard:GetOnlyName (name)) self.tankname_string = name @@ -354,22 +354,22 @@ local function CreatePluginFrames (data) self.unitFrame.castBar:SetTexture (SharedMedia:Fetch("statusbar", Vanguard.db.tank_block_texture)) end - local debuff_on_enter = function (self) + local debuff_on_enter = function(self) if (self.spellid) then --self.texture:SetBlendMode ("ADD") GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") - GameTooltip:SetSpellByID (self.spellid) + GameTooltip:SetSpellByID(self.spellid) GameTooltip:Show() end end - local debuff_on_leave = function (self) + local debuff_on_leave = function(self) --self.texture:SetBlendMode ("BLEND") if (self.spellid) then GameTooltip:Hide() end end - local on_click = function (self, button) + local on_click = function(self, button) if (button == "LeftButton") then Vanguard.OpenOptionsPanel() @@ -928,7 +928,7 @@ end local build_options_panel = function() local options_frame = Vanguard:CreatePluginOptionsFrame ("VanguardOptionsWindow", "Vanguard Options", 1) - local tank_texture_set = function (_, _, value) + local tank_texture_set = function(_, _, value) Vanguard.db.tank_block_texture = value; Vanguard:ResetBars() Vanguard:RefreshTanks() @@ -944,7 +944,7 @@ local build_options_panel = function() for name, texturePath in pairs (textures) do texTable[#texTable+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = tank_texture_set, icon = texture_icon, texcoord = texture_texcoord} end - table.sort (texTable, function (t1, t2) return t1.label < t2.label end) + table.sort (texTable, function(t1, t2) return t1.label < t2.label end) local tank_texture_menu = texTable @@ -969,14 +969,14 @@ local build_options_panel = function() { type = "toggle", get = function() return Vanguard.db.show_inc_bars end, - set = function (self, fixedparam, value) Vanguard.db.show_inc_bars = value; Vanguard:ResetBars() end, + set = function(self, fixedparam, value) Vanguard.db.show_inc_bars = value; Vanguard:ResetBars() end, --desc = "Shows the incoming heal vs incoming damage.", name = "Show Incoming Damage" }, { type = "range", get = function() return Vanguard.db.bar_height end, - set = function (self, fixedparam, value) + set = function(self, fixedparam, value) Vanguard.db.bar_height = value Vanguard:ResetBars() Vanguard:RefreshTanks() @@ -992,26 +992,26 @@ local build_options_panel = function() { type = "toggle", get = function() return Vanguard.db.show_health_bar end, - set = function (self, fixedparam, value) Vanguard.db.show_health_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, + set = function(self, fixedparam, value) Vanguard.db.show_health_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, name = "Show Health Bar" }, { type = "toggle", get = function() return Vanguard.db.show_cast_bar end, - set = function (self, fixedparam, value) Vanguard.db.show_cast_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, + set = function(self, fixedparam, value) Vanguard.db.show_cast_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, name = "Show Cast Bar" }, { type = "toggle", get = function() return Vanguard.db.show_power_bar end, - set = function (self, fixedparam, value) Vanguard.db.show_power_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, + set = function(self, fixedparam, value) Vanguard.db.show_power_bar = value; Vanguard:RefreshTanks(); Vanguard:ResetBars() end, name = "Show Power Bar" }, { type = "range", get = function() return Vanguard.db.tank_block_size end, - set = function (self, fixedparam, value) Vanguard.db.tank_block_size = value; Vanguard:RefreshTanks() end, + set = function(self, fixedparam, value) Vanguard.db.tank_block_size = value; Vanguard:RefreshTanks() end, min = 70, max = 250, step = 1, @@ -1021,7 +1021,7 @@ local build_options_panel = function() { type = "range", get = function() return Vanguard.db.tank_block_size_height end, - set = function (self, fixedparam, value) Vanguard.db.tank_block_size_height = value; Vanguard:RefreshTanks() end, + set = function(self, fixedparam, value) Vanguard.db.tank_block_size_height = value; Vanguard:RefreshTanks() end, min = 10, max = 100, step = 1, @@ -1030,7 +1030,7 @@ local build_options_panel = function() { type = "range", get = function() return Vanguard.db.tank_block_castbar_size_height end, - set = function (self, fixedparam, value) Vanguard.db.tank_block_castbar_size_height = value; Vanguard:RefreshTanks() end, + set = function(self, fixedparam, value) Vanguard.db.tank_block_castbar_size_height = value; Vanguard:RefreshTanks() end, min = 10, max = 60, step = 1, @@ -1039,7 +1039,7 @@ local build_options_panel = function() { type = "range", get = function() return Vanguard.db.tank_block_powerbar_size_height end, - set = function (self, fixedparam, value) Vanguard.db.tank_block_powerbar_size_height = value; Vanguard:RefreshTanks() end, + set = function(self, fixedparam, value) Vanguard.db.tank_block_powerbar_size_height = value; Vanguard:RefreshTanks() end, min = 10, max = 60, step = 1, @@ -1048,7 +1048,7 @@ local build_options_panel = function() { type = "color", get = function() return Vanguard.db.tank_block_color end, - set = function (self, r, g, b, a) + set = function(self, r, g, b, a) local current = Vanguard.db.tank_block_color; current[1], current[2], current[3], current[4] = r, g, b, a; Vanguard:RefreshTanks() @@ -1061,7 +1061,7 @@ local build_options_panel = function() { type = "range", get = function() return Vanguard.db.aura_offset_y end, - set = function (self, fixedparam, value) Vanguard.db.aura_offset_y = value; Vanguard.RefreshWidgets() end, + set = function(self, fixedparam, value) Vanguard.db.aura_offset_y = value; Vanguard.RefreshWidgets() end, min = -20, max = 20, step = 1, @@ -1070,7 +1070,7 @@ local build_options_panel = function() { type = "range", get = function() return Vanguard.db.aura_timer_text_size end, - set = function (self, fixedparam, value) Vanguard.db.aura_timer_text_size = value; Vanguard.RefreshWidgets() end, + set = function(self, fixedparam, value) Vanguard.db.aura_timer_text_size = value; Vanguard.RefreshWidgets() end, min = 6, max = 24, step = 1,