From a9e858d86476db42569b7f9229589a004454d4ce Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Thu, 20 Oct 2022 09:47:48 -0300 Subject: [PATCH] Disabled Bindings.xml to avoid taints in 10.0 --- Bindings.xml | 75 +- Details.xml | 2 +- Libs/DF/fw.lua | 833 +++++++++--------- Libs/DF/help.lua | 8 +- Libs/DF/math.lua | 53 +- Libs/DF/normal_bar.lua | 43 +- Libs/DF/panel.lua | 36 +- Libs/DF/pictureedit.lua | 6 +- Libs/DF/schedules.lua | 4 +- Libs/DF/slider.lua | 209 +++-- Libs/DF/split_bar.lua | 18 +- Libs/DF/textentry.lua | 181 +--- Libs/LibOpenRaid/LibOpenRaid.lua | 16 +- .../ThingsToMantain_Dragonflight.lua | 401 ++++----- Libs/NickTag-1.0/NickTag-1.0.lua | 4 +- boot.lua | 25 +- classes/class_damage.lua | 12 +- classes/class_heal.lua | 6 +- classes/class_instance.lua | 10 +- classes/class_resources.lua | 8 +- classes/class_spelldamage.lua | 55 +- classes/class_spellresources.lua | 2 +- classes/class_spellutility.lua | 2 +- classes/class_utility.lua | 4 +- classes/container_actors.lua | 6 +- classes/container_pets.lua | 6 +- classes/container_spells.lua | 6 +- classes/custom_damagedone.lua | 4 +- classes/custom_healingdone.lua | 4 +- core/gears.lua | 56 +- core/meta.lua | 4 +- core/parser.lua | 10 +- core/plugins.lua | 10 +- core/plugins_statusbar.lua | 48 +- core/plugins_toolbar.lua | 4 +- core/util.lua | 6 +- frames/anime.lua | 4 +- frames/fw_mods.lua | 2 +- frames/window_benchmark.lua | 6 +- frames/window_brokertexteditor.lua | 2 +- frames/window_copy.lua | 2 +- frames/window_currentdps.lua | 10 +- frames/window_custom.lua | 24 +- frames/window_custom_scripts.lua | 10 +- frames/window_dump.lua | 4 +- frames/window_eventtracker.lua | 2 +- frames/window_forge.lua | 2 +- frames/window_main.lua | 10 +- frames/window_news.lua | 4 +- frames/window_options2_sections.lua | 14 +- frames/window_playerbreakdown.lua | 18 +- frames/window_rowtexteditor.lua | 2 +- frames/window_runcode.lua | 2 +- frames/window_statistics.lua | 6 +- frames/window_wa.lua | 2 +- frames/window_welcome.lua | 20 +- functions/bossmods.lua | 6 +- functions/deathmenu.lua | 4 +- functions/dungeon.lua | 6 +- functions/events.lua | 6 +- functions/mythicdungeon.lua | 22 +- functions/plater.lua | 2 +- functions/profiles.lua | 4 +- functions/skins.lua | 4 +- functions/slash.lua | 6 +- functions/spellcache.lua | 30 +- functions/testbars.lua | 2 +- images/bar_hyanda.tga | Bin 0 -> 24620 bytes images/spec_icons_normal.tga | Bin 1048620 -> 1048620 bytes .../Details_DataStorage.lua | 2 +- .../Details_EncounterDetails.lua | 6 +- plugins/Details_EncounterDetails/frames.lua | 28 +- plugins/Details_Streamer/Details_Streamer.lua | 32 +- .../Details_TinyThreat/Details_TinyThreat.lua | 28 +- plugins/Details_Vanguard/Details_Vanguard.lua | 22 +- startup.lua | 2 +- 76 files changed, 1162 insertions(+), 1373 deletions(-) create mode 100644 images/bar_hyanda.tga diff --git a/Bindings.xml b/Bindings.xml index 0843ae07e..ddc3cf8af 100644 --- a/Bindings.xml +++ b/Bindings.xml @@ -1,74 +1 @@ - - - _detalhes.tabela_historico:resetar() - - - - DetailsKeyBindScrollDown() - - - - DetailsKeyBindScrollUp() - - - - _detalhes:FastReportWindow (1) - - - _detalhes:FastReportWindow (2) - - - - _detalhes:ToggleWindows() - - - - _detalhes:ToggleWindow (1) - - - _detalhes:ToggleWindow (2) - - - _detalhes:ToggleWindow (3) - - - _detalhes:ToggleWindow (4) - - - _detalhes:ToggleWindow (5) - - - - - DetailsChangeDisplayFromBookmark (1); - - - DetailsChangeDisplayFromBookmark (2); - - - DetailsChangeDisplayFromBookmark (3); - - - DetailsChangeDisplayFromBookmark (4); - - - DetailsChangeDisplayFromBookmark (5); - - - DetailsChangeDisplayFromBookmark (6); - - - DetailsChangeDisplayFromBookmark (7); - - - DetailsChangeDisplayFromBookmark (8); - - - DetailsChangeDisplayFromBookmark (9); - - - DetailsChangeDisplayFromBookmark (10); - - - - + \ No newline at end of file diff --git a/Details.xml b/Details.xml index 10df081c9..22744c6a6 100644 --- a/Details.xml +++ b/Details.xml @@ -7,7 +7,7 @@ - self:RegisterEvent ("ADDON_LOADED"); + self:RegisterEvent("ADDON_LOADED"); _detalhes.OnEvent (self, event, ...); diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index c82204f80..be61dfa8c 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -725,15 +725,15 @@ function DF:SetFontColor(fontString, r, g, b, a) fontString:SetTextColor(r, g, b, a) end -function DF:SetFontShadow (fontString, r, g, b, a, x, y) +function DF:SetFontShadow(fontString, r, g, b, a, x, y) r, g, b, a = DF:ParseColors(r, g, b, a) - fontString:SetShadowColor (r, g, b, a) + fontString:SetShadowColor(r, g, b, a) local offSetX, offSetY = fontString:GetShadowOffset() x = x or offSetX y = y or offSetY - - fontString:SetShadowOffset (x, y) + + fontString:SetShadowOffset(x, y) end function DF:SetFontRotation(fontString, degrees) @@ -815,6 +815,7 @@ function DF:GetFontSize(fontString) local _, size = fontString:GetFont() return size end + function DF:GetFontFace(fontString) local fontface = fontString:GetFont() return fontface @@ -1083,119 +1084,119 @@ end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --anchoring - function DF:CheckPoints(point1, point2, point3, point4, point5, object) - if (not point1 and not point2) then - return "topleft", object.widget:GetParent(), "topleft", 0, 0 - end - - if (type(point1) == "string") then - local frameGlobal = _G[point1] - if (frameGlobal and type(frameGlobal) == "table" and frameGlobal.GetObjectType) then - return DF:CheckPoints(frameGlobal, point2, point3, point4, point5, object) - end +function DF:CheckPoints(point1, point2, point3, point4, point5, object) + if (not point1 and not point2) then + return "topleft", object.widget:GetParent(), "topleft", 0, 0 + end - elseif (type(point2) == "string") then - local frameGlobal = _G[point2] - if (frameGlobal and type(frameGlobal) == "table" and frameGlobal.GetObjectType) then - return DF:CheckPoints(point1, frameGlobal, point3, point4, point5, object) - end + if (type(point1) == "string") then + local frameGlobal = _G[point1] + if (frameGlobal and type(frameGlobal) == "table" and frameGlobal.GetObjectType) then + return DF:CheckPoints(frameGlobal, point2, point3, point4, point5, object) end - if (type(point1) == "string" and type(point2) == "table") then --setpoint("left", frame, _, _, _) - if (not point3 or type(point3) == "number") then --setpoint("left", frame, 10, 10) - point1, point2, point3, point4, point5 = point1, point2, point1, point3, point4 - end + elseif (type(point2) == "string") then + local frameGlobal = _G[point2] + if (frameGlobal and type(frameGlobal) == "table" and frameGlobal.GetObjectType) then + return DF:CheckPoints(point1, frameGlobal, point3, point4, point5, object) + end + end - elseif (type(point1) == "string" and type(point2) == "number") then --setpoint("topleft", x, y) - point1, point2, point3, point4, point5 = point1, object.widget:GetParent(), point1, point2, point3 + if (type(point1) == "string" and type(point2) == "table") then --setpoint("left", frame, _, _, _) + if (not point3 or type(point3) == "number") then --setpoint("left", frame, 10, 10) + point1, point2, point3, point4, point5 = point1, point2, point1, point3, point4 + end - elseif (type(point1) == "number") then --setpoint(x, y) - point1, point2, point3, point4, point5 = "topleft", object.widget:GetParent(), "topleft", point1, point2 + elseif (type(point1) == "string" and type(point2) == "number") then --setpoint("topleft", x, y) + point1, point2, point3, point4, point5 = point1, object.widget:GetParent(), point1, point2, point3 - elseif (type(point1) == "table") then --setpoint(frame, x, y) - point1, point2, point3, point4, point5 = "topleft", point1, "topleft", point2, point3 - end + elseif (type(point1) == "number") then --setpoint(x, y) + point1, point2, point3, point4, point5 = "topleft", object.widget:GetParent(), "topleft", point1, point2 - if (not point2) then - point2 = object.widget:GetParent() - elseif (point2.dframework) then - point2 = point2.widget - end + elseif (type(point1) == "table") then --setpoint(frame, x, y) + point1, point2, point3, point4, point5 = "topleft", point1, "topleft", point2, point3 + end - return point1 or "topleft", point2, point3 or "topleft", point4 or 0, point5 or 0 + if (not point2) then + point2 = object.widget:GetParent() + elseif (point2.dframework) then + point2 = point2.widget end - local anchoringFunctions = { - function(frame, anchorTo, offSetX, offSetY) --1 TOP LEFT - frame:ClearAllPoints() - frame:SetPoint("bottomleft", anchorTo, "topleft", offSetX, offSetY) - end, + return point1 or "topleft", point2, point3 or "topleft", point4 or 0, point5 or 0 +end - function(frame, anchorTo, offSetX, offSetY) --2 LEFT - frame:ClearAllPoints() - frame:SetPoint("right", anchorTo, "left", offSetX, offSetY) - end, +local anchoringFunctions = { + function(frame, anchorTo, offSetX, offSetY) --1 TOP LEFT + frame:ClearAllPoints() + frame:SetPoint("bottomleft", anchorTo, "topleft", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --3 BOTTOM LEFT - frame:ClearAllPoints() - frame:SetPoint("topleft", anchorTo, "bottomleft", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --2 LEFT + frame:ClearAllPoints() + frame:SetPoint("right", anchorTo, "left", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --4 BOTTOM - frame:ClearAllPoints() - frame:SetPoint("top", anchorTo, "bottom", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --3 BOTTOM LEFT + frame:ClearAllPoints() + frame:SetPoint("topleft", anchorTo, "bottomleft", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --5 BOTTOM RIGHT - frame:ClearAllPoints() - frame:SetPoint("topright", anchorTo, "bottomright", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --4 BOTTOM + frame:ClearAllPoints() + frame:SetPoint("top", anchorTo, "bottom", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --6 RIGHT - frame:ClearAllPoints() - frame:SetPoint("left", anchorTo, "right", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --5 BOTTOM RIGHT + frame:ClearAllPoints() + frame:SetPoint("topright", anchorTo, "bottomright", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --7 TOP RIGHT - frame:ClearAllPoints() - frame:SetPoint("bottomright", anchorTo, "topright", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --6 RIGHT + frame:ClearAllPoints() + frame:SetPoint("left", anchorTo, "right", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --8 TOP - frame:ClearAllPoints() - frame:SetPoint("bottom", anchorTo, "top", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --7 TOP RIGHT + frame:ClearAllPoints() + frame:SetPoint("bottomright", anchorTo, "topright", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --9 CENTER - frame:ClearAllPoints() - frame:SetPoint("center", anchorTo, "center", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --8 TOP + frame:ClearAllPoints() + frame:SetPoint("bottom", anchorTo, "top", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --10 - frame:ClearAllPoints() - frame:SetPoint("left", anchorTo, "left", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --9 CENTER + frame:ClearAllPoints() + frame:SetPoint("center", anchorTo, "center", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --11 - frame:ClearAllPoints() - frame:SetPoint("right", anchorTo, "right", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --10 + frame:ClearAllPoints() + frame:SetPoint("left", anchorTo, "left", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --12 - frame:ClearAllPoints() - frame:SetPoint("top", anchorTo, "top", offSetX, offSetY) - end, + function(frame, anchorTo, offSetX, offSetY) --11 + frame:ClearAllPoints() + frame:SetPoint("right", anchorTo, "right", offSetX, offSetY) + end, - function(frame, anchorTo, offSetX, offSetY) --13 - frame:ClearAllPoints() - frame:SetPoint("bottom", anchorTo, "bottom", offSetX, offSetY) - end - } + function(frame, anchorTo, offSetX, offSetY) --12 + frame:ClearAllPoints() + frame:SetPoint("top", anchorTo, "top", offSetX, offSetY) + end, - function DF:SetAnchor(widget, config, anchorTo) - anchorTo = anchorTo or widget:GetParent() - anchoringFunctions[config.side](widget, anchorTo, config.x, config.y) + function(frame, anchorTo, offSetX, offSetY) --13 + frame:ClearAllPoints() + frame:SetPoint("bottom", anchorTo, "bottom", offSetX, offSetY) end +} + +function DF:SetAnchor(widget, config, anchorTo) + anchorTo = anchorTo or widget:GetParent() + anchoringFunctions[config.side](widget, anchorTo, config.x, config.y) +end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --colors @@ -1341,24 +1342,6 @@ end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --menus - --get the text for the widget name and description from the language system - local parseWidgetNameAndDesc = function(languageTable, namePhraseId, descPhraseId, widgetName, widgetDesc) - local returnedName = widgetName - local returnedDesc = widgetDesc - - if (languageTable) then - if (namePhraseId) then - returnedName = languageTable[namePhraseId] or namePhraseId - end - if (descPhraseId) then - returnedDesc = languageTable[descPhraseId] or descPhraseId - end - return returnedName, returnedDesc - else - return returnedName, returnedDesc - end - end - local formatOptionNameWithColon = function(text, useColon) if (text) then if (useColon) then @@ -1370,7 +1353,7 @@ end end end - local disable_on_combat = {} + local widgetsToDisableOnCombat = {} local getMenuWidgetVolative = function(parent, widgetType, indexTable) local widgetObject @@ -1465,9 +1448,9 @@ end end --if the widget is inside the no combat table, remove it - for i = 1, #disable_on_combat do - if (disable_on_combat[i] == widgetObject) then - tremove(disable_on_combat, i) + for i = 1, #widgetsToDisableOnCombat do + if (widgetsToDisableOnCombat[i] == widgetObject) then + tremove(widgetsToDisableOnCombat, i) break end end @@ -1884,7 +1867,7 @@ end end --end loop if (widgetTable.nocombat) then - tinsert(disable_on_combat, widgetCreated) + tinsert(widgetsToDisableOnCombat, widgetCreated) end if (not widgetTable.inline) then @@ -2315,7 +2298,7 @@ end end if (widgetTable.nocombat) then - tinsert(disable_on_combat, widgetCreated) + tinsert(widgetsToDisableOnCombat, widgetCreated) end if (not widgetTable.inline) then @@ -2342,23 +2325,23 @@ end DF.RefreshUnsafeOptionsWidgets() end - local lock_notsafe_widgets = function() - for _, widget in ipairs(disable_on_combat) do + local lockNotSafeWidgetsForCombat = function() + for _, widget in ipairs(widgetsToDisableOnCombat) do widget:Disable() end end - local unlock_notsafe_widgets = function() - for _, widget in ipairs(disable_on_combat) do + local unlockNotSafeWidgetsForCombat = function() + for _, widget in ipairs(widgetsToDisableOnCombat) do widget:Enable() end end function DF.RefreshUnsafeOptionsWidgets() if (DF.PlayerHasCombatFlag) then - lock_notsafe_widgets() + lockNotSafeWidgetsForCombat() else - unlock_notsafe_widgets() + unlockNotSafeWidgetsForCombat() end end @@ -2383,7 +2366,6 @@ end elseif (event == "PLAYER_REGEN_DISABLED") then DF.PlayerHasCombatFlag = true DF.RefreshUnsafeOptionsWidgets() - end end) @@ -2392,36 +2374,36 @@ end error("Details! Framework: CreateInCombatTexture invalid frame on parameter 1.") end - local in_combat_background = DF:CreateImage(frame) - in_combat_background:SetColorTexture(.6, 0, 0, .1) - in_combat_background:Hide() + local inCombatBackgroundTexture = DF:CreateImage(frame) + inCombatBackgroundTexture:SetColorTexture(.6, 0, 0, .1) + inCombatBackgroundTexture:Hide() + + local inCombatLabel = Plater:CreateLabel(frame, "you are in combat", 24, "silver") + inCombatLabel:SetPoint("right", inCombatBackgroundTexture, "right", -10, 0) + inCombatLabel:Hide() - local in_combat_label = Plater:CreateLabel(frame, "you are in combat", 24, "silver") - in_combat_label:SetPoint("right", in_combat_background, "right", -10, 0) - in_combat_label:Hide() + frame:RegisterEvent("PLAYER_REGEN_DISABLED") + frame:RegisterEvent("PLAYER_REGEN_ENABLED") - frame:RegisterEvent ("PLAYER_REGEN_DISABLED") - frame:RegisterEvent ("PLAYER_REGEN_ENABLED") frame:SetScript("OnEvent", function(self, event) if (event == "PLAYER_REGEN_DISABLED") then - in_combat_background:Show() - in_combat_label:Show() + inCombatBackgroundTexture:Show() + inCombatLabel:Show() + elseif (event == "PLAYER_REGEN_ENABLED") then - in_combat_background:Hide() - in_combat_label:Hide() + inCombatBackgroundTexture:Hide() + inCombatLabel:Hide() end end) - - return in_combat_background + + return inCombatBackgroundTexture end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --tutorials - - function DF:ShowTutorialAlertFrame (maintext, desctext, clickfunc) - + function DF:ShowTutorialAlertFrame(maintext, desctext, clickfunc) local TutorialAlertFrame = _G.DetailsFrameworkAlertFrame - + if (not TutorialAlertFrame) then TutorialAlertFrame = CreateFrame("frame", "DetailsFrameworkAlertFrame", UIParent, "MicroButtonAlertTemplate") @@ -2429,8 +2411,8 @@ end TutorialAlertFrame:SetPoint("left", UIParent, "left", -20, 100) 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 @@ -2438,16 +2420,16 @@ end end) TutorialAlertFrame:Hide() end - + -- TutorialAlertFrame.label = type(maintext) == "string" and maintext or type(desctext) == "string" and desctext or "" MicroButtonAlert_SetText (TutorialAlertFrame, alert.label) -- - + TutorialAlertFrame.clickfunc = clickfunc TutorialAlertFrame:Show() end - + local refresh_options = function(self) for _, widget in ipairs(self.widget_list) do if (widget._get) then @@ -2455,16 +2437,21 @@ end if (widget._get()) then widget:SetText(widget._get()) end + elseif (widget.widget_type == "select") then widget:Select(widget._get()) + elseif (widget.widget_type == "toggle" or widget.widget_type == "range") then widget:SetValue(widget._get()) + elseif (widget.widget_type == "textentry") then widget:SetText(widget._get()) + elseif (widget.widget_type == "color") then local default_value, g, b, a = widget._get() if (type(default_value) == "table") then widget:SetColor (unpack(default_value)) + else widget:SetColor (default_value, g, b, a) end @@ -2472,7 +2459,7 @@ end end end end - + local get_frame_by_id = function(self, id) return self.widgetids [id] end @@ -2488,7 +2475,7 @@ end table.wipe(frame.widgetids) end - function DF:SetAsOptionsPanel (frame) + function DF:SetAsOptionsPanel(frame) frame.RefreshOptions = refresh_options frame.widget_list = {} frame.widget_list_by_type = { @@ -2503,113 +2490,110 @@ end frame.widgetids = {} frame.GetWidgetById = get_frame_by_id end - - function DF:CreateOptionsFrame (name, title, template) - + + function DF:CreateOptionsFrame(name, title, template) template = template or 1 - + if (template == 2) then - local options_frame = CreateFrame("frame", name, UIParent, "ButtonFrameTemplate") + local newOptionsFrame = CreateFrame("frame", name, UIParent, "ButtonFrameTemplate") tinsert(UISpecialFrames, name) - options_frame:SetSize(500, 200) - options_frame.RefreshOptions = refresh_options - options_frame.widget_list = {} - - options_frame:SetScript("OnMouseDown", function(self, button) + + newOptionsFrame:SetSize(500, 200) + newOptionsFrame.RefreshOptions = refresh_options + newOptionsFrame.widget_list = {} + + newOptionsFrame:SetScript("OnMouseDown", function(self, button) if (button == "RightButton") then - if (self.moving) then + if (self.moving) then self.moving = false self:StopMovingOrSizing() end - return options_frame:Hide() + return newOptionsFrame:Hide() elseif (button == "LeftButton" and not self.moving) then self.moving = true self:StartMoving() end end) - options_frame:SetScript("OnMouseUp", function(self) - if (self.moving) then + + newOptionsFrame:SetScript("OnMouseUp", function(self) + if (self.moving) then self.moving = false self:StopMovingOrSizing() end end) - - options_frame:SetMovable(true) - options_frame:EnableMouse(true) - options_frame:SetFrameStrata("DIALOG") - options_frame:SetToplevel (true) - - options_frame:Hide() - - options_frame:SetPoint("center", UIParent, "center") - options_frame.TitleText:SetText(title) --10.0 fuck - --options_frame.portrait:SetTexture([[Interface\CHARACTERFRAME\TEMPORARYPORTRAIT-FEMALE-BLOODELF]]) - - return options_frame - + + newOptionsFrame:SetMovable(true) + newOptionsFrame:EnableMouse(true) + newOptionsFrame:SetFrameStrata("DIALOG") + newOptionsFrame:SetToplevel(true) + newOptionsFrame:Hide() + newOptionsFrame:SetPoint("center", UIParent, "center") + newOptionsFrame.TitleText:SetText(title) + + return newOptionsFrame + elseif (template == 1) then - - local options_frame = CreateFrame("frame", name, UIParent) + local newOptionsFrame = CreateFrame("frame", name, UIParent) tinsert(UISpecialFrames, name) - options_frame:SetSize(500, 200) - options_frame.RefreshOptions = refresh_options - options_frame.widget_list = {} - options_frame:SetScript("OnMouseDown", function(self, button) + newOptionsFrame:SetSize(500, 200) + newOptionsFrame.RefreshOptions = refresh_options + newOptionsFrame.widget_list = {} + + newOptionsFrame:SetScript("OnMouseDown", function(self, button) if (button == "RightButton") then - if (self.moving) then + if (self.moving) then self.moving = false self:StopMovingOrSizing() end - return options_frame:Hide() + return newOptionsFrame:Hide() elseif (button == "LeftButton" and not self.moving) then self.moving = true self:StartMoving() end end) - options_frame:SetScript("OnMouseUp", function(self) - if (self.moving) then + + newOptionsFrame:SetScript("OnMouseUp", function(self) + if (self.moving) then self.moving = false self:StopMovingOrSizing() end end) - - options_frame:SetMovable(true) - options_frame:EnableMouse(true) - options_frame:SetFrameStrata("DIALOG") - options_frame:SetToplevel (true) - - options_frame:Hide() - - options_frame:SetPoint("center", UIParent, "center") - - options_frame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, + + newOptionsFrame:SetMovable(true) + newOptionsFrame:EnableMouse(true) + newOptionsFrame:SetFrameStrata("DIALOG") + newOptionsFrame:SetToplevel(true) + newOptionsFrame:Hide() + newOptionsFrame:SetPoint("center", UIParent, "center") + + newOptionsFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, insets = {left = 1, right = 1, top = 1, bottom = 1}}) - options_frame:SetBackdropColor(0, 0, 0, .7) - - local texturetitle = options_frame:CreateTexture(nil, "artwork") - texturetitle:SetTexture([[Interface\CURSOR\Interact]]) - texturetitle:SetTexCoord(0, 1, 0, 1) - texturetitle:SetVertexColor(1, 1, 1, 1) - texturetitle:SetPoint("topleft", options_frame, "topleft", 2, -3) - texturetitle:SetWidth(36) - texturetitle:SetHeight(36) - - local titleLabel = DF:NewLabel(options_frame, nil, "$parentTitle", nil, title, nil, 20, "yellow") - titleLabel:SetPoint("left", texturetitle, "right", 2, -1) + newOptionsFrame:SetBackdropColor(0, 0, 0, .7) + + local textureTitle = newOptionsFrame:CreateTexture(nil, "artwork") + textureTitle:SetTexture([[Interface\CURSOR\Interact]]) + textureTitle:SetTexCoord(0, 1, 0, 1) + textureTitle:SetVertexColor(1, 1, 1, 1) + textureTitle:SetPoint("topleft", newOptionsFrame, "topleft", 2, -3) + textureTitle:SetWidth(36) + textureTitle:SetHeight(36) + + local titleLabel = DF:NewLabel(newOptionsFrame, nil, "$parentTitle", nil, title, nil, 20, "yellow") + titleLabel:SetPoint("left", textureTitle, "right", 2, -1) DF:SetFontOutline (titleLabel, true) - local c = CreateFrame("Button", nil, options_frame, "UIPanelCloseButton") - c:SetWidth(32) - c:SetHeight(32) - c:SetPoint("TOPRIGHT", options_frame, "TOPRIGHT", -3, -3) - c:SetFrameLevel(options_frame:GetFrameLevel()+1) - - return options_frame + local closeButton = CreateFrame("Button", nil, newOptionsFrame, "UIPanelCloseButton") + closeButton:SetWidth(32) + closeButton:SetHeight(32) + closeButton:SetPoint("TOPRIGHT", newOptionsFrame, "TOPRIGHT", -3, -3) + closeButton:SetFrameLevel(newOptionsFrame:GetFrameLevel()+1) + + return newOptionsFrame end - end - + end + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --~templates @@ -2789,7 +2773,7 @@ DF.slider_templates["OPTIONS_SLIDER_TEMPLATE"] = { thumbcolor = {0, 0, 0, 0.5}, } -function DF:InstallTemplate (widgetType, templateName, template, parentName) +function DF:InstallTemplate(widgetType, templateName, template, parentName) local newTemplate = {} --if has a parent, just copy the parent to the new template @@ -2833,22 +2817,27 @@ function DF:InstallTemplate (widgetType, templateName, template, parentName) return newTemplate end -function DF:GetTemplate(widget_type, template_name) - widget_type = string.lower(widget_type) +function DF:GetTemplate(widgetType, templateName) + widgetType = string.lower(widgetType) + local templateTable + + if (widgetType == "font") then + templateTable = DF.font_templates - local template_table - if (widget_type == "font") then - template_table = DF.font_templates - elseif (widget_type == "dropdown") then - template_table = DF.dropdown_templates - elseif (widget_type == "button") then - template_table = DF.button_templates - elseif (widget_type == "switch") then - template_table = DF.switch_templates - elseif (widget_type == "slider") then - template_table = DF.slider_templates + elseif (widgetType == "dropdown") then + templateTable = DF.dropdown_templates + + elseif (widgetType == "button") then + templateTable = DF.button_templates + + elseif (widgetType == "switch") then + templateTable = DF.switch_templates + + elseif (widgetType == "slider") then + templateTable = DF.slider_templates end - return template_table [template_name] + + return templateTable[templateName] end function DF.GetParentName(frame) @@ -2881,16 +2870,16 @@ DF.GlobalWidgetControlNames = { timebar = "DF_TimeBarMetaFunctions", } -function DF:AddMemberForWidget (widgetName, memberType, memberName, func) - if (DF.GlobalWidgetControlNames [widgetName]) then +function DF:AddMemberForWidget(widgetName, memberType, memberName, func) + if (DF.GlobalWidgetControlNames[widgetName]) then if (type(memberName) == "string" and (memberType == "SET" or memberType == "GET")) then if (func) then - local widgetControlObject = _G [DF.GlobalWidgetControlNames [widgetName]] - + local widgetControlObject = _G [DF.GlobalWidgetControlNames[widgetName]] + if (memberType == "SET") then - widgetControlObject ["SetMembers"] [memberName] = func + widgetControlObject["SetMembers"][memberName] = func elseif (memberType == "GET") then - widgetControlObject ["GetMembers"] [memberName] = func + widgetControlObject["GetMembers"][memberName] = func end else if (DF.debug) then @@ -2938,7 +2927,7 @@ function DF:OpenInterfaceProfile() return end end - + -- fallback (broken as of ElvUI Skins in version 12.18+... maybe fix/change will come) InterfaceOptionsFrame_OpenToCategory (self.__name) InterfaceOptionsFrame_OpenToCategory (self.__name) @@ -3037,11 +3026,11 @@ FrameshakeUpdateFrame.RegisteredFrames = FrameshakeUpdateFrame.RegisteredFrames FrameshakeUpdateFrame.RegisterFrame = function(newFrame) --add the frame into the registered frames to update - DF.table.addunique (FrameshakeUpdateFrame.RegisteredFrames, newFrame) + DF.table.addunique(FrameshakeUpdateFrame.RegisteredFrames, newFrame) end --forward declared -local frameshake_do_update +local frameshake_DoUpdate FrameshakeUpdateFrame:SetScript("OnUpdate", function(self, deltaTime) for i = 1, #FrameshakeUpdateFrame.RegisteredFrames do @@ -3052,43 +3041,43 @@ FrameshakeUpdateFrame:SetScript("OnUpdate", function(self, deltaTime) for i = 1, #parent.__frameshakes do local shakeObject = parent.__frameshakes [i] if (shakeObject.IsPlaying) then - frameshake_do_update (parent, shakeObject, deltaTime) + frameshake_DoUpdate(parent, shakeObject, deltaTime) end end - end + end end end) -local frameshake_shake_finished = function(parent, shakeObject) +local frameshake_ShakeFinished = function(parent, shakeObject) if (shakeObject.IsPlaying) then shakeObject.IsPlaying = false shakeObject.TimeLeft = 0 shakeObject.IsFadingOut = false shakeObject.IsFadingIn = false - + --update the amount of shake running on this frame parent.__frameshakes.enabled = parent.__frameshakes.enabled - 1 - + --restore the default anchors, in case where deltaTime was too small that didn't triggered an update for i = 1, #shakeObject.Anchors do local anchor = shakeObject.Anchors [i] - + --automatic anchoring and reanching needs to the reviwed in the future if (#anchor == 1) then local anchorTo = unpack(anchor) parent:ClearAllPoints() parent:SetPoint(anchorTo) - + elseif (#anchor == 2) then local anchorTo, point1 = unpack(anchor) parent:ClearAllPoints() parent:SetPoint(anchorTo, point1) - + elseif (#anchor == 3) then local anchorTo, point1, point2 = unpack(anchor) parent:SetPoint(anchorTo, point1, point2) - + elseif (#anchor == 5) then local anchorName1, anchorTo, anchorName2, point1, point2 = unpack(anchor) parent:SetPoint(anchorName1, anchorTo, anchorName2, point1, point2) @@ -3098,11 +3087,10 @@ local frameshake_shake_finished = function(parent, shakeObject) end --already declared above the update function -frameshake_do_update = function(parent, shakeObject, deltaTime) - +frameshake_DoUpdate = function(parent, shakeObject, deltaTime) --check delta time deltaTime = deltaTime or 0 - + --update time left shakeObject.TimeLeft = max(shakeObject.TimeLeft - deltaTime, 0) @@ -3119,73 +3107,72 @@ frameshake_do_update = function(parent, shakeObject, deltaTime) if (shakeObject.IsFadingIn and shakeObject.IsFadingInTime > shakeObject.FadeInTime) then shakeObject.IsFadingIn = false end - + --check if can enable fade out if (not shakeObject.IsFadingOut and shakeObject.TimeLeft < shakeObject.FadeOutTime) then shakeObject.IsFadingOut = true shakeObject.IsFadingOutTime = shakeObject.FadeOutTime - shakeObject.TimeLeft end - + --update position - local scaleShake = min (shakeObject.IsFadingIn and (shakeObject.IsFadingInTime / shakeObject.FadeInTime) or 1, shakeObject.IsFadingOut and (1 - shakeObject.IsFadingOutTime / shakeObject.FadeOutTime) or 1) + local scaleShake = min(shakeObject.IsFadingIn and (shakeObject.IsFadingInTime / shakeObject.FadeInTime) or 1, shakeObject.IsFadingOut and (1 - shakeObject.IsFadingOutTime / shakeObject.FadeOutTime) or 1) if (scaleShake > 0) then --delate the time by the frequency on both X and Y offsets shakeObject.XSineOffset = shakeObject.XSineOffset + (deltaTime * shakeObject.Frequency) shakeObject.YSineOffset = shakeObject.YSineOffset + (deltaTime * shakeObject.Frequency) - + --calc the new position local newX, newY if (shakeObject.AbsoluteSineX) then --absoluting only the sine wave, passing a negative scale will reverse the absolute direction - newX = shakeObject.Amplitude * abs(math.sin (shakeObject.XSineOffset)) * scaleShake * shakeObject.ScaleX + newX = shakeObject.Amplitude * abs(math.sin(shakeObject.XSineOffset)) * scaleShake * shakeObject.ScaleX else - newX = shakeObject.Amplitude * math.sin (shakeObject.XSineOffset) * scaleShake * shakeObject.ScaleX + newX = shakeObject.Amplitude * math.sin(shakeObject.XSineOffset) * scaleShake * shakeObject.ScaleX end - + if (shakeObject.AbsoluteSineY) then - newY = shakeObject.Amplitude * abs(math.sin (shakeObject.YSineOffset)) * scaleShake * shakeObject.ScaleY + newY = shakeObject.Amplitude * abs(math.sin(shakeObject.YSineOffset)) * scaleShake * shakeObject.ScaleY else - newY = shakeObject.Amplitude * math.sin (shakeObject.YSineOffset) * scaleShake * shakeObject.ScaleY + newY = shakeObject.Amplitude * math.sin(shakeObject.YSineOffset) * scaleShake * shakeObject.ScaleY end - + --apply the offset to the frame anchors for i = 1, #shakeObject.Anchors do local anchor = shakeObject.Anchors [i] - + if (#anchor == 1 or #anchor == 3) then local anchorTo, point1, point2 = unpack(anchor) point1 = point1 or 0 point2 = point2 or 0 parent:SetPoint(anchorTo, point1 + newX, point2 + newY) - + elseif (#anchor == 5) then local anchorName1, anchorTo, anchorName2, point1, point2 = unpack(anchor) --parent:ClearAllPoints() - + parent:SetPoint(anchorName1, anchorTo, anchorName2, point1 + newX, point2 + newY) end end - + end else - frameshake_shake_finished (parent, shakeObject) + frameshake_ShakeFinished(parent, shakeObject) end end local frameshake_stop = function(parent, shakeObject) - frameshake_shake_finished (parent, shakeObject) + frameshake_ShakeFinished(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) - --check if is already playing if (shakeObject.TimeLeft > 0) then --reset the time left shakeObject.TimeLeft = shakeObject.Duration - + if (shakeObject.IsFadingOut) then if (shakeObject.FadeInTime > 0) then shakeObject.IsFadingIn = true @@ -3195,7 +3182,7 @@ local frameshake_play = function(parent, shakeObject, scaleDirection, scaleAmpli shakeObject.IsFadingIn = false shakeObject.IsFadingInTime = 0 end - + --disable fade out and enable fade in shakeObject.IsFadingOut = false shakeObject.IsFadingOutTime = 0 @@ -3204,55 +3191,55 @@ local frameshake_play = function(parent, shakeObject, scaleDirection, scaleAmpli --create a new random offset shakeObject.XSineOffset = math.pi * 2 * math.random() shakeObject.YSineOffset = math.pi * 2 * math.random() - + --store the initial position if case it needs a reset shakeObject.StartedXSineOffset = shakeObject.XSineOffset shakeObject.StartedYSineOffset = shakeObject.YSineOffset - + --check if there's a fade in time if (shakeObject.FadeInTime > 0) then shakeObject.IsFadingIn = true else shakeObject.IsFadingIn = false end - + shakeObject.IsFadingInTime = 0 shakeObject.IsFadingOut = false shakeObject.IsFadingOutTime = 0 - + --apply custom scale shakeObject.ScaleX = (scaleDirection or 1) * shakeObject.OriginalScaleX shakeObject.ScaleY = (scaleDirection or 1) * shakeObject.OriginalScaleY shakeObject.Frequency = (scaleFrequency or 1) * shakeObject.OriginalFrequency shakeObject.Amplitude = (scaleAmplitude or 1) * shakeObject.OriginalAmplitude shakeObject.Duration = (scaleDuration or 1) * shakeObject.OriginalDuration - + --update the time left shakeObject.TimeLeft = shakeObject.Duration - + --check if is dynamic points if (shakeObject.IsDynamicAnchor) then - wipe (shakeObject.Anchors) + wipe(shakeObject.Anchors) for i = 1, parent:GetNumPoints() do - local p1, p2, p3, p4, p5 = parent:GetPoint (i) - shakeObject.Anchors [#shakeObject.Anchors+1] = {p1, p2, p3, p4, p5} + local p1, p2, p3, p4, p5 = parent:GetPoint(i) + shakeObject.Anchors[#shakeObject.Anchors+1] = {p1, p2, p3, p4, p5} end end - + --update the amount of shake running on this frame parent.__frameshakes.enabled = parent.__frameshakes.enabled + 1 - + if (not parent:GetScript("OnUpdate")) then parent:SetScript("OnUpdate", function()end) end end shakeObject.IsPlaying = true - - frameshake_do_update (parent, shakeObject) + + frameshake_DoUpdate(parent, shakeObject) end -local frameshake_set_config = function(parent, shakeObject, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints) +local frameshake_SetConfig = 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 @@ -3260,14 +3247,15 @@ local frameshake_set_config = function(parent, shakeObject, duration, amplitude, shakeObject.FadeOutTime = fadeOutTime or shakeObject.FadeOutTime shakeObject.ScaleX = scaleX or shakeObject.ScaleX shakeObject.ScaleY = scaleY or shakeObject.ScaleY - + if (absoluteSineX ~= nil) then shakeObject.AbsoluteSineX = absoluteSineX end + if (absoluteSineY ~= nil) then shakeObject.AbsoluteSineY = absoluteSineY end - + shakeObject.OriginalScaleX = shakeObject.ScaleX shakeObject.OriginalScaleY = shakeObject.ScaleY shakeObject.OriginalFrequency = shakeObject.Frequency @@ -3275,7 +3263,7 @@ local frameshake_set_config = function(parent, shakeObject, duration, amplitude, shakeObject.OriginalDuration = shakeObject.Duration end -function DF:CreateFrameShake (parent, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints) +function DF:CreateFrameShake(parent, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints) --create the shake table local frameShake = { @@ -3292,20 +3280,20 @@ function DF:CreateFrameShake (parent, duration, amplitude, frequency, absoluteSi IsPlaying = false, TimeLeft = 0, } - + frameShake.OriginalScaleX = frameShake.ScaleX frameShake.OriginalScaleY = frameShake.ScaleY frameShake.OriginalFrequency = frameShake.Frequency frameShake.OriginalAmplitude = frameShake.Amplitude frameShake.OriginalDuration = frameShake.Duration - + if (type(anchorPoints) ~= "table") then frameShake.IsDynamicAnchor = true frameShake.Anchors = {} - else + else frameShake.Anchors = anchorPoints end - + --inject frame shake table into the frame if (not parent.__frameshakes) then parent.__frameshakes = { @@ -3313,15 +3301,15 @@ function DF:CreateFrameShake (parent, duration, amplitude, frequency, absoluteSi } parent.PlayFrameShake = frameshake_play parent.StopFrameShake = frameshake_stop - parent.UpdateFrameShake = frameshake_do_update - parent.SetFrameShakeSettings = frameshake_set_config - + parent.UpdateFrameShake = frameshake_DoUpdate + parent.SetFrameShakeSettings = frameshake_SetConfig + --register the frame within the frame shake updater FrameshakeUpdateFrame.RegisterFrame (parent) end tinsert(parent.__frameshakes, frameShake) - + return frameShake end @@ -3363,7 +3351,7 @@ local glow_overlay_setcolor = function(self, antsColor, glowColor) self.AntsColor.b = b self.AntsColor.a = a end - + if (glowColor) then local r, g, b, a = DF:ParseColors(glowColor) self.outerGlow:SetVertexColor(r, g, b, a) @@ -3387,31 +3375,31 @@ function DF:CreateGlowOverlay (parent, antsColor, glowColor) local glowFrame = CreateFrame("frame", parent:GetName() and "$parentGlow2" or "OverlayActionGlow" .. math.random(1, 10000000), parent, "ActionBarButtonSpellActivationAlert") glowFrame:HookScript ("OnShow", glow_overlay_onshow) glowFrame:HookScript ("OnHide", glow_overlay_onhide) - + glowFrame.Play = glow_overlay_play glowFrame.Stop = glow_overlay_stop glowFrame.SetColor = glow_overlay_setcolor - + glowFrame:Hide() - + parent.overlay = glowFrame local frameWidth, frameHeight = parent:GetSize() - + local scale = 1.4 - + --Make the height/width available before the next frame: parent.overlay:SetSize(frameWidth * scale, frameHeight * scale) parent.overlay:SetPoint("TOPLEFT", parent, "TOPLEFT", -frameWidth * 0.32, frameHeight * 0.36) parent.overlay:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", frameWidth * 0.32, -frameHeight * 0.36) - + local r, g, b, a = DF:ParseColors(antsColor or defaultColor) glowFrame.ants:SetVertexColor(r, g, b, a) glowFrame.AntsColor = {r, g, b, a} - + local r, g, b, a = DF:ParseColors(glowColor or defaultColor) glowFrame.outerGlow:SetVertexColor(r, g, b, a) glowFrame.GlowColor = {r, g, b, a} - + glowFrame.outerGlow:SetScale(1.2) glowFrame:EnableMouse(false) return glowFrame @@ -3434,33 +3422,33 @@ function DF:CreateAnts (parent, antTable, leftOffset, rightOffset, topOffset, bo rightOffset = rightOffset or 0 topOffset = topOffset or 0 bottomOffset = bottomOffset or 0 - + local f = CreateFrame("frame", nil, parent) f:SetPoint("topleft", leftOffset, topOffset) f:SetPoint("bottomright", rightOffset, bottomOffset) - + f.SetOffset = ants_set_texture_offset - + local t = f:CreateTexture(nil, "overlay") t:SetAllPoints() t:SetTexture(antTable.Texture) t:SetBlendMode(antTable.BlendMode or "ADD") t:SetVertexColor(DF:ParseColors(antTable.Color or "white")) f.Texture = t - + f.AntTable = antTable - + 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) - + return f end --[=[ --test ants do local f = DF:CreateAnts (UIParent) -end +end --]=] ----------------------------- @@ -3474,7 +3462,7 @@ 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 - + for _, texture in ipairs(self.Borders.Layer1) do texture:SetAlpha(self.Borders.Alpha1) end @@ -3499,23 +3487,20 @@ local SetBorderColor = function(self, r, g, b) end local SetLayerVisibility = function(self, layer1Shown, layer2Shown, layer3Shown) - for _, texture in ipairs(self.Borders.Layer1) do texture:SetShown (layer1Shown) end - + for _, texture in ipairs(self.Borders.Layer2) do texture:SetShown (layer2Shown) end - + for _, texture in ipairs(self.Borders.Layer3) do texture:SetShown (layer3Shown) end - end -function DF:CreateBorder (parent, alpha1, alpha2, alpha3) - +function DF:CreateBorder(parent, alpha1, alpha2, alpha3) parent.Borders = { Layer1 = {}, Layer2 = {}, @@ -3524,11 +3509,11 @@ function DF:CreateBorder (parent, alpha1, alpha2, alpha3) Alpha2 = alpha2 or default_border_color2, Alpha3 = alpha3 or default_border_color3, } - + parent.SetBorderAlpha = SetBorderAlpha parent.SetBorderColor = SetBorderColor parent.SetLayerVisibility = SetLayerVisibility - + local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "topleft", parent, "topleft", -1, 1) PixelUtil.SetPoint(border1, "bottomleft", parent, "bottomleft", -1, -1) @@ -3541,11 +3526,11 @@ function DF:CreateBorder (parent, alpha1, alpha2, alpha3) PixelUtil.SetPoint(border3, "topleft", parent, "topleft", -3, 3) PixelUtil.SetPoint(border3, "bottomleft", parent, "bottomleft", -3, -3) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) tinsert(parent.Borders.Layer3, border3) - + local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "topleft", parent, "topleft", 0, 1) PixelUtil.SetPoint(border1, "topright", parent, "topright", 1, 1) @@ -3558,11 +3543,11 @@ function DF:CreateBorder (parent, alpha1, alpha2, alpha3) PixelUtil.SetPoint(border3, "topleft", parent, "topleft", -2, 3) PixelUtil.SetPoint(border3, "topright", parent, "topright", 3, 3) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) - tinsert(parent.Borders.Layer3, border3) - + tinsert(parent.Borders.Layer3, border3) + local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "topright", parent, "topright", 1, 0) PixelUtil.SetPoint(border1, "bottomright", parent, "bottomright", 1, -1) @@ -3575,11 +3560,11 @@ function DF:CreateBorder (parent, alpha1, alpha2, alpha3) PixelUtil.SetPoint(border3, "topright", parent, "topright", 3, 2) PixelUtil.SetPoint(border3, "bottomright", parent, "bottomright", 3, -3) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) - tinsert(parent.Borders.Layer3, border3) - + tinsert(parent.Borders.Layer3, border3) + local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "bottomleft", parent, "bottomleft", 0, -1) PixelUtil.SetPoint(border1, "bottomright", parent, "bottomright", 0, -1) @@ -3592,11 +3577,10 @@ function DF:CreateBorder (parent, alpha1, alpha2, alpha3) PixelUtil.SetPoint(border3, "bottomleft", parent, "bottomleft", -2, -3) PixelUtil.SetPoint(border3, "bottomright", parent, "bottomright", 2, -3) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) tinsert(parent.Borders.Layer3, border3) - end --DFNamePlateBorder as copy from "NameplateFullBorderTemplate" -> DF:CreateFullBorder (name, parent) @@ -3654,7 +3638,7 @@ function DF:CreateFullBorder (name, parent) border:SetFrameLevel(border:GetParent():GetFrameLevel()) border.Textures = {} Mixin(border, DFNamePlateBorderTemplateMixin) - + local left = border:CreateTexture("$parentLeft", "BACKGROUND", nil, -8) --left:SetDrawLayer("BACKGROUND", -8) left:SetColorTexture(1, 1, 1, 1) @@ -3663,7 +3647,7 @@ function DF:CreateFullBorder (name, parent) left:SetPoint("BOTTOMRIGHT", border, "BOTTOMLEFT", 0, -1.0) border.Left = left tinsert(border.Textures, left) - + local right = border:CreateTexture("$parentRight", "BACKGROUND", nil, -8) --right:SetDrawLayer("BACKGROUND", -8) right:SetColorTexture(1, 1, 1, 1) @@ -3672,7 +3656,7 @@ function DF:CreateFullBorder (name, parent) right:SetPoint("BOTTOMLEFT", border, "BOTTOMRIGHT", 0, -1.0) border.Right = right tinsert(border.Textures, right) - + local bottom = border:CreateTexture("$parentBottom", "BACKGROUND", nil, -8) --bottom:SetDrawLayer("BACKGROUND", -8) bottom:SetColorTexture(1, 1, 1, 1) @@ -3681,7 +3665,7 @@ function DF:CreateFullBorder (name, parent) bottom:SetPoint("TOPRIGHT", border, "BOTTOMRIGHT", 0, 0) border.Bottom = bottom tinsert(border.Textures, bottom) - + local top = border:CreateTexture("$parentTop", "BACKGROUND", nil, -8) --top:SetDrawLayer("BACKGROUND", -8) top:SetColorTexture(1, 1, 1, 1) @@ -3690,7 +3674,7 @@ function DF:CreateFullBorder (name, parent) top:SetPoint("BOTTOMRIGHT", border, "TOPRIGHT", 0, 0) border.Top = top tinsert(border.Textures, top) - + return border end @@ -3698,8 +3682,7 @@ function DF:CreateBorderSolid (parent, size) end -function DF:CreateBorderWithSpread (parent, alpha1, alpha2, alpha3, size, spread) - +function DF:CreateBorderWithSpread(parent, alpha1, alpha2, alpha3, size, spread) parent.Borders = { Layer1 = {}, Layer2 = {}, @@ -3708,106 +3691,106 @@ function DF:CreateBorderWithSpread (parent, alpha1, alpha2, alpha3, size, spread Alpha2 = alpha2 or default_border_color2, Alpha3 = alpha3 or default_border_color3, } - + parent.SetBorderAlpha = SetBorderAlpha parent.SetBorderColor = SetBorderColor parent.SetLayerVisibility = SetLayerVisibility - + size = size or 1 local minPixels = 1 local spread = 0 - + --left local border1 = parent:CreateTexture(nil, "background") border1:SetColorTexture(0, 0, 0, alpha1 or default_border_color1) PixelUtil.SetPoint(border1, "topleft", parent, "topleft", -1 + spread, 1 + (-spread), 0, 0) PixelUtil.SetPoint(border1, "bottomleft", parent, "bottomleft", -1 + spread, -1 + spread, 0, 0) PixelUtil.SetWidth (border1, size, minPixels) - + local border2 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border2, "topleft", parent, "topleft", -2 + spread, 2 + (-spread)) PixelUtil.SetPoint(border2, "bottomleft", parent, "bottomleft", -2 + spread, -2 + spread) border2:SetColorTexture(0, 0, 0, alpha2 or default_border_color2) PixelUtil.SetWidth (border2, size, minPixels) - + local border3 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border3, "topleft", parent, "topleft", -3 + spread, 3 + (-spread)) PixelUtil.SetPoint(border3, "bottomleft", parent, "bottomleft", -3 + spread, -3 + spread) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) PixelUtil.SetWidth (border3, size, minPixels) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) tinsert(parent.Borders.Layer3, border3) - + --top local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "topleft", parent, "topleft", 0 + spread, 1 + (-spread)) PixelUtil.SetPoint(border1, "topright", parent, "topright", 1 + (-spread), 1 + (-spread)) border1:SetColorTexture(0, 0, 0, alpha1 or default_border_color1) PixelUtil.SetHeight(border1, size, minPixels) - + local border2 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border2, "topleft", parent, "topleft", -1 + spread, 2 + (-spread)) PixelUtil.SetPoint(border2, "topright", parent, "topright", 2 + (-spread), 2 + (-spread)) border2:SetColorTexture(0, 0, 0, alpha2 or default_border_color2) PixelUtil.SetHeight(border2, size, minPixels) - + local border3 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border3, "topleft", parent, "topleft", -2 + spread, 3 + (-spread)) PixelUtil.SetPoint(border3, "topright", parent, "topright", 3 + (-spread), 3 + (-spread)) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) PixelUtil.SetHeight(border3, size, minPixels) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) - tinsert(parent.Borders.Layer3, border3) - + tinsert(parent.Borders.Layer3, border3) + --right local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "topright", parent, "topright", 1 + (-spread), 0 + (-spread)) PixelUtil.SetPoint(border1, "bottomright", parent, "bottomright", 1 + (-spread), -1 + spread) border1:SetColorTexture(0, 0, 0, alpha1 or default_border_color1) PixelUtil.SetWidth (border1, size, minPixels) - + local border2 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border2, "topright", parent, "topright", 2 + (-spread), 1 + (-spread)) PixelUtil.SetPoint(border2, "bottomright", parent, "bottomright", 2 + (-spread), -2 + spread) border2:SetColorTexture(0, 0, 0, alpha2 or default_border_color2) PixelUtil.SetWidth (border2, size, minPixels) - + local border3 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border3, "topright", parent, "topright", 3 + (-spread), 2 + (-spread)) PixelUtil.SetPoint(border3, "bottomright", parent, "bottomright", 3 + (-spread), -3 + spread) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) PixelUtil.SetWidth (border3, size, minPixels) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) - tinsert(parent.Borders.Layer3, border3) - + tinsert(parent.Borders.Layer3, border3) + local border1 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border1, "bottomleft", parent, "bottomleft", 0 + spread, -1 + spread) PixelUtil.SetPoint(border1, "bottomright", parent, "bottomright", 0 + (-spread), -1 + spread) border1:SetColorTexture(0, 0, 0, alpha1 or default_border_color1) PixelUtil.SetHeight(border1, size, minPixels) - + local border2 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border2, "bottomleft", parent, "bottomleft", -1 + spread, -2 + spread) PixelUtil.SetPoint(border2, "bottomright", parent, "bottomright", 1 + (-spread), -2 + spread) border2:SetColorTexture(0, 0, 0, alpha2 or default_border_color2) PixelUtil.SetHeight(border2, size, minPixels) - + local border3 = parent:CreateTexture(nil, "background") PixelUtil.SetPoint(border3, "bottomleft", parent, "bottomleft", -2 + spread, -3 + spread) PixelUtil.SetPoint(border3, "bottomright", parent, "bottomright", 2 + (-spread), -3 + spread) border3:SetColorTexture(0, 0, 0, alpha3 or default_border_color3) PixelUtil.SetHeight(border3, size, minPixels) - + tinsert(parent.Borders.Layer1, border1) tinsert(parent.Borders.Layer2, border2) tinsert(parent.Borders.Layer3, border3) - + end function DF:ReskinSlider(slider, heightOffset) @@ -3840,7 +3823,7 @@ function DF:ReskinSlider(slider, heightOffset) 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 @@ -3849,14 +3832,14 @@ function DF:ReskinSlider(slider, heightOffset) local normalTexture = slider.ScrollBar.ScrollUpButton.Normal 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) - + local pushedTexture = slider.ScrollBar.ScrollUpButton.Pushed 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) @@ -3864,40 +3847,40 @@ function DF:ReskinSlider(slider, heightOffset) 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) - + 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: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: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:SetPoint("topleft", slider.ScrollBar.ScrollDownButton, "topleft", offset, -4) disabledTexture:SetPoint("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", offset, -4) - + slider.ScrollBar.ScrollDownButton:SetSize(16, 16) 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) @@ -3999,7 +3982,7 @@ function DF:CoreDispatch(context, func, ...) local errortext = "D!Framework " .. context .. " error: invalid function to call\n====================\n" .. stack .. "\n====================\n" error(errortext) end - + local okay, result1, result2, result3, result4 = xpcall(func, geterrorhandler(), ...) --if (not okay) then --when using pcall @@ -4007,7 +3990,7 @@ function DF:CoreDispatch(context, func, ...) --local errortext = "D!Framework (" .. context .. ") error: " .. result1 .. "\n====================\n" .. stack .. "\n====================\n" --error(errortext) --end - + return result1, result2, result3, result4 end @@ -4051,7 +4034,7 @@ function DF:GetClassList() if (next (DF.ClassCache)) then return DF.ClassCache end - + for className, classIndex in pairs(DF.ClassFileNameToIndex) do local classTable = C_CreatureInfo.GetClassInfo (classIndex) if classTable then @@ -4065,9 +4048,9 @@ function DF:GetClassList() tinsert(DF.ClassCache, t) end end - + return DF.ClassCache - + end --hardcoded race list @@ -4129,13 +4112,13 @@ function DF:GetCharacterRaceList() if (next (DF.RaceCache)) then return DF.RaceCache end - + for i = 1, 100 do local raceInfo = C_CreatureInfo.GetRaceInfo (i) if (raceInfo and DF.RaceList [raceInfo.raceID]) then tinsert(DF.RaceCache, {Name = raceInfo.raceName, FileString = raceInfo.clientFileString, ID = raceInfo.raceID}) end - + if IS_WOW_PROJECT_MAINLINE then local alliedRaceInfo = C_AlliedRaces.GetRaceInfoByID (i) if (alliedRaceInfo and DF.AlliedRaceList [alliedRaceInfo.raceID]) then @@ -4143,16 +4126,16 @@ function DF:GetCharacterRaceList() end end end - + return DF.RaceCache end --get a list of talents for the current spec the player is using --if onlySelected return an index table with only the talents the character has selected ---if onlySelectedHash return a hash table with [spelID] = true +--if onlySelectedHash return a hash table with [spelID] = true function DF:GetCharacterTalents (onlySelected, onlySelectedHash) local talentList = {} - + for i = 1, 7 do for o = 1, 3 do local talentID, name, texture, selected, available = GetTalentInfo (i, o, 1) @@ -4171,7 +4154,7 @@ function DF:GetCharacterTalents (onlySelected, onlySelectedHash) end end end - + return talentList end @@ -4188,8 +4171,8 @@ function DF:GetCharacterPvPTalents (onlySelected, onlySelectedHash) end end return talentList - - else + + else local alreadyAdded = {} local talentList = {} for i = 1, 4 do --4 slots - get talents available in each one @@ -4305,7 +4288,7 @@ end DF.ClassSpecs = { ["DEMONHUNTER"] = { - [577] = true, + [577] = true, [581] = true, }, ["DEATHKNIGHT"] = { @@ -4325,7 +4308,7 @@ DF.ClassSpecs = { }, ["ROGUE"] = { [259] = true, - [260] = true, + [260] = true, [261] = true, }, ["DRUID"] = { @@ -4336,7 +4319,7 @@ DF.ClassSpecs = { }, ["HUNTER"] = { [253] = true, - [254] = true, + [254] = true, [255] = true, }, ["SHAMAN"] = { @@ -4360,9 +4343,9 @@ DF.ClassSpecs = { [70] = true, }, ["MONK"] = { - [268] = true, - [269] = true, - [270] = true, + [268] = true, + [269] = true, + [270] = true, }, ["EVOKER"] = { [1467] = true, @@ -4372,7 +4355,7 @@ DF.ClassSpecs = { DF.SpecListByClass = { ["DEMONHUNTER"] = { - 577, + 577, 581, }, ["DEATHKNIGHT"] = { @@ -4392,7 +4375,7 @@ DF.SpecListByClass = { }, ["ROGUE"] = { 259, - 260, + 260, 261, }, ["DRUID"] = { @@ -4403,7 +4386,7 @@ DF.SpecListByClass = { }, ["HUNTER"] = { 253, - 254, + 254, 255, }, ["SHAMAN"] = { @@ -4427,9 +4410,9 @@ DF.SpecListByClass = { 70, }, ["MONK"] = { - 268, - 269, - 270, + 268, + 269, + 270, }, ["EVOKER"] = { 1467, @@ -4493,7 +4476,7 @@ end local classLoc, class = UnitClass(unitId) local spec = GetSpecialization() - + if (spec and class) then --prist if (class == "PRIEST") then @@ -4507,7 +4490,7 @@ end end end end - + elseif (class == "MAGE") then --playing fire mage? local specID = GetSpecializationInfo(spec) @@ -4519,7 +4502,7 @@ end end end end - + elseif (class == "WARRIOR") then --is playing as a Arms warrior? local specID = GetSpecializationInfo(spec) @@ -4537,7 +4520,7 @@ end return 0.20 end end - + elseif (class == "HUNTER") then local specID = GetSpecializationInfo(spec) if (specID and specID ~= 0) then @@ -4563,7 +4546,7 @@ end end end end - end + end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -4596,12 +4579,12 @@ end local aceComm = LibStub:GetLibrary ("AceComm-3.0", true) local LibAceSerializer = LibStub:GetLibrary ("AceSerializer-3.0", true) local LibDeflate = LibStub:GetLibrary ("LibDeflate", true) - + DF.RegisteredScriptsComm = DF.RegisteredScriptsComm or {} - + function DF.OnReceiveScriptComm (...) local prefix, encodedString, channel, commSource = ... - + local decodedString = LibDeflate:DecodeForWoWAddonChannel (encodedString) if (decodedString) then local uncompressedString = LibDeflate:DecompressDeflate (decodedString) @@ -4623,7 +4606,7 @@ end end end end - + function DF:RegisterScriptComm (ID, func) if (ID) then if (type(func) == "function") then @@ -4633,7 +4616,7 @@ end end end end - + function DF:SendScriptComm (ID, ...) if (DF.RegisteredScriptsComm [ID]) then local sourceName = UnitName ("player") .. "-" .. GetRealmName() @@ -4643,11 +4626,11 @@ end aceComm:SendCommMessage ("_GSC", data, "PARTY") end end - + if (aceComm and LibAceSerializer and LibDeflate) then aceComm:RegisterComm ("_GSC", DF.OnReceiveScriptComm) end - + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --debug @@ -4658,30 +4641,30 @@ DF.DebugMixin = { CheckPoint = function(self, checkPointName, ...) print(self:GetName(), checkPointName, ...) end, - + CheckVisibilityState = function(self, widget) - + self = widget or self - + local width, height = self:GetSize() width = floor(width) height = floor(height) - + local numPoints = self:GetNumPoints() - + print("shown:", self:IsShown(), "visible:", self:IsVisible(), "alpha:", self:GetAlpha(), "size:", width, height, "points:", numPoints) end, - + CheckStack = function(self) local stack = debugstack() Details:Dump (stack) end, - + } ----------------------------------------------------------------------------------------------------------------------------------------------------------- - ---returns if the unit is tapped (gray health color when another player hit the unit first) + +--returns if the unit is tapped (gray health color when another player hit the unit first) function DF:IsUnitTapDenied (unitId) return unitId and not UnitPlayerControlled(unitId) and UnitIsTapDenied(unitId) end @@ -4755,7 +4738,7 @@ do end end - --return the amount of objects + --return the amount of objects local getamount = function(self) return #self.notUse + #self.inUse, #self.notUse, #self.inUse end @@ -4899,7 +4882,7 @@ end end end end - + DF.DefaultSecureScriptEnvironmentHandle = { __index = function(env, key) @@ -4908,7 +4891,7 @@ end elseif (key == "_G") then return env - + elseif (C_SubFunctionsTable[key]) then return C_SubFunctionsTable[key] end diff --git a/Libs/DF/help.lua b/Libs/DF/help.lua index 2874dd968..ccf283765 100644 --- a/Libs/DF/help.lua +++ b/Libs/DF/help.lua @@ -6,8 +6,8 @@ if (not DF or not DetailsFrameworkCanLoad) then end local _ -local _rawset = rawset --lua local -local _rawget = rawget --lua local +local rawset = rawset --lua local +local rawget = rawget --lua local local APIHelpFunctions = false local HelpMetaFunctions = {} @@ -21,7 +21,7 @@ local HelpMetaFunctions = {} return func (_table, _member_requested) end - local fromMe = _rawget (_table, _member_requested) + local fromMe = rawget (_table, _member_requested) if (fromMe) then return fromMe end @@ -36,7 +36,7 @@ local HelpMetaFunctions = {} if (func) then return func (_table, _value) else - return _rawset (_table, _key, _value) + return rawset (_table, _key, _value) end end diff --git a/Libs/DF/math.lua b/Libs/DF/math.lua index 11ffe6157..793b9ddad 100644 --- a/Libs/DF/math.lua +++ b/Libs/DF/math.lua @@ -1,61 +1,60 @@ - -local DF = _G ["DetailsFramework"] +local DF = _G["DetailsFramework"] if (not DF or not DetailsFrameworkCanLoad) then - return + return end local UnitExists = UnitExists local atan2 = math.atan2 local pi = math.pi -local abs = math.abs +local abs = math.abs SMALL_FLOAT = 0.000001 --find distance between two players -function DF:GetDistance_Unit (unit1, unit2) +function DF:GetDistance_Unit(unit1, unit2) if (UnitExists(unit1) and UnitExists(unit2)) then - local u1X, u1Y = UnitPosition (unit1) - local u2X, u2Y = UnitPosition (unit2) - + local u1X, u1Y = UnitPosition(unit1) + local u2X, u2Y = UnitPosition(unit2) + local dX = u2X - u1X local dY = u2Y - u1Y - + return ((dX*dX) + (dY*dY)) ^ .5 end return 0 end --find distance between two points -function DF:GetDistance_Point (x1, y1, x2, y2) +function DF:GetDistance_Point(x1, y1, x2, y2) local dx = x2 - x1 local dy = y2 - y1 return ((dx * dx) + (dy * dy)) ^ .5 end --find a rotation for an object from a point to another point -function DF:FindLookAtRotation (x1, y1, x2, y2) +function DF:FindLookAtRotation(x1, y1, x2, y2) return atan2 (y2 - y1, x2 - x1) + pi end --find the value scale between two given values. e.g: value of 500 in a range 0-100 result in 10 in a scale for 0-10 function DF:MapRangeClamped(inputX, inputY, outputX, outputY, value) - return DF:GetRangeValue (outputX, outputY, Clamp (DF:GetRangePercent (inputX, inputY, value), 0, 1)) + return DF:GetRangeValue(outputX, outputY, Clamp(DF:GetRangePercent(inputX, inputY, value), 0, 1)) end --find the value scale between two given values. e.g: value of 75 in a range 0-100 result in 7.5 in a scale for 0-10 -function DF:MapRangeUnclamped (inputX, inputY, outputX, outputY, value) - return DF:GetRangeValue (outputX, outputY, DF:GetRangePercent (inputX, inputY, value)) +function DF:MapRangeUnclamped(inputX, inputY, outputX, outputY, value) + return DF:GetRangeValue(outputX, outputY, DF:GetRangePercent(inputX, inputY, value)) end --find the normalized percent of the value in the range. e.g range of 200-400 and a value of 250 result in 0.25 -function DF:GetRangePercent (minValue, maxValue, value) +function DF:GetRangePercent(minValue, maxValue, value) return (value - minValue) / max((maxValue - minValue), SMALL_FLOAT) end --find the value in the range given from a normalized percent. e.g range of 200-400 and a percent of 0.8 result in 360 -function DF:GetRangeValue (minValue, maxValue, percent) - return Lerp (minValue, maxValue, percent) +function DF:GetRangeValue(minValue, maxValue, percent) + return Lerp(minValue, maxValue, percent) end function DF:GetColorRangeValue(r1, g1, b1, r2, g2, b2, value) @@ -66,7 +65,7 @@ function DF:GetColorRangeValue(r1, g1, b1, r2, g2, b2, value) end --dot product of two 2D Vectors -function DF:GetDotProduct (value1, value2) +function DF:GetDotProduct(value1, value2) return (value1.x * value2.x) + (value1.y * value2.y) end @@ -77,12 +76,12 @@ function DF:GetBezierPoint(value, point1, point2, point3) end --normalized value 0-1 result in the value on the range given, e.g 200-400 range with a value of .5 result in 300 -function DF:LerpNorm (minValue, maxValue, value) +function DF:LerpNorm(minValue, maxValue, value) return (minValue + value * (maxValue - minValue)) end --change the color by the deltaTime -function DF:LerpLinearColor (deltaTime, interpSpeed, r1, g1, b1, r2, g2, b2) +function DF:LerpLinearColor(deltaTime, interpSpeed, r1, g1, b1, r2, g2, b2) deltaTime = deltaTime * interpSpeed local r = r1 + (r2 - r1) * deltaTime local g = g1 + (g2 - g1) * deltaTime @@ -91,37 +90,37 @@ function DF:LerpLinearColor (deltaTime, interpSpeed, r1, g1, b1, r2, g2, b2) end --check if a number is near another number by a tolerance -function DF:IsNearlyEqual (value1, value2, tolerance) +function DF:IsNearlyEqual(value1, value2, tolerance) tolerance = tolerance or SMALL_FLOAT return abs(value1 - value2) <= tolerance end --check if a number is near zero -function DF:IsNearlyZero (value, tolerance) +function DF:IsNearlyZero(value, tolerance) tolerance = tolerance or SMALL_FLOAT return abs(value) <= tolerance end --check if a number is within a two other numbers, if isInclusive is true, it'll include the max value -function DF:IsWithin (minValue, maxValue, value, isInclusive) +function DF:IsWithin(minValue, maxValue, value, isInclusive) if (isInclusive) then - return ((value >= minValue) and (value <= maxValue)) + return ((value >= minValue) and (value <= maxValue)) else return ((value >= minValue) and (value < maxValue)) end end --dont allow a number ot be lower or bigger than a certain range -function DF:Clamp (minValue, maxValue, value) +function DF:Clamp(minValue, maxValue, value) return value < minValue and minValue or value < maxValue and value or maxValue end --from http://lua-users.org/wiki/SimpleRound cut fractions on a float -function DF:Round (num, numDecimalPlaces) +function DF:Round(num, numDecimalPlaces) local mult = 10^(numDecimalPlaces or 0) return math.floor(num * mult + 0.5) / mult end -function DF:ScaleBack () +function DF:ScaleBack() end diff --git a/Libs/DF/normal_bar.lua b/Libs/DF/normal_bar.lua index 19e9b1757..3ddce3c35 100644 --- a/Libs/DF/normal_bar.lua +++ b/Libs/DF/normal_bar.lua @@ -1,20 +1,15 @@ -local DF = _G ["DetailsFramework"] +local DF = _G["DetailsFramework"] if (not DF or not DetailsFrameworkCanLoad) then - return + return end local _ -local _rawset = rawset --lua locals -local _rawget = rawget --lua locals -local _setmetatable = setmetatable --lua locals -local _unpack = unpack --lua locals -local type = type --lua locals -local _math_floor = math.floor --lua locals +local _unpack = unpack +local type = type +local _math_floor = math.floor -local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") - -local cleanfunction = function() end +local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local APIBarFunctions do @@ -26,7 +21,7 @@ do --check if there's a metaPrototype already existing if (_G[DF.GlobalWidgetControlNames["normal_bar"]]) then --get the already existing metaPrototype - local oldMetaPrototype = _G[DF.GlobalWidgetControlNames ["normal_bar"]] + local oldMetaPrototype = _G[DF.GlobalWidgetControlNames["normal_bar"]] --check if is older if ( (not oldMetaPrototype.dversion) or (oldMetaPrototype.dversion < DF.dversion) ) then --the version is older them the currently loading one @@ -37,7 +32,7 @@ do end else --first time loading the framework - _G[DF.GlobalWidgetControlNames ["normal_bar"]] = metaPrototype + _G[DF.GlobalWidgetControlNames["normal_bar"]] = metaPrototype end end @@ -47,15 +42,15 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin) ------------------------------------------------------------------------------------------------------------ --metatables - BarMetaFunctions.__call = function(_table, value) + BarMetaFunctions.__call = function(object, value) if (not value) then - return _table.statusbar:GetValue() + return object.statusbar:GetValue() else - return _table.statusbar:SetValue(value) + return object.statusbar:SetValue(value) 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 @@ -67,7 +62,7 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin) 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 @@ -168,7 +163,7 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin) return func (_table, _member_requested) end - local fromMe = _rawget (_table, _member_requested) + local fromMe = rawget (_table, _member_requested) if (fromMe) then return fromMe end @@ -350,7 +345,7 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin) if (func) then return func (_table, _value) else - return _rawset (_table, _key, _value) + return rawset (_table, _key, _value) end end @@ -444,13 +439,13 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin) -- tooltip function BarMetaFunctions:SetTooltip (tooltip) if (tooltip) then - return _rawset (self, "have_tooltip", tooltip) + return rawset (self, "have_tooltip", tooltip) else - return _rawset (self, "have_tooltip", nil) + return rawset (self, "have_tooltip", nil) end end function BarMetaFunctions:GetTooltip() - return _rawget (self, "have_tooltip") + return rawget (self, "have_tooltip") end -- frame levels @@ -855,7 +850,7 @@ function DF:NewBar (parent, container, name, member, w, h, value, texture_name) BarObject.statusbar:SetScript("OnMouseUp", OnMouseUp) --set class - _setmetatable(BarObject, BarMetaFunctions) + setmetatable(BarObject, BarMetaFunctions) --set texture if (texture_name) then diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index f21cf46d0..3279fe07d 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -298,10 +298,10 @@ detailsFramework.LayoutFrame = { local smember_locked = function(_object, _value) if (_value) then _object.frame:SetMovable(false) - return rawset (_object, "is_locked", true) + return rawset(_object, "is_locked", true) else _object.frame:SetMovable(true) - rawset (_object, "is_locked", false) + rawset(_object, "is_locked", false) return end end @@ -313,7 +313,7 @@ detailsFramework.LayoutFrame = { --close with right button local smember_right_close = function(_object, _value) - return rawset (_object, "rightButtonClose", _value) + return rawset(_object, "rightButtonClose", _value) end PanelMetaFunctions.SetMembers = PanelMetaFunctions.SetMembers or {} @@ -332,7 +332,7 @@ detailsFramework.LayoutFrame = { if (func) then return func (_table, _value) else - return rawset (_table, _key, _value) + return rawset(_table, _key, _value) end end @@ -451,9 +451,9 @@ detailsFramework.LayoutFrame = { -- tooltip function PanelMetaFunctions:SetTooltip (tooltip) if (tooltip) then - return rawset (self, "have_tooltip", tooltip) + return rawset(self, "have_tooltip", tooltip) else - return rawset (self, "have_tooltip", nil) + return rawset(self, "have_tooltip", nil) end end function PanelMetaFunctions:GetTooltip() @@ -5644,18 +5644,18 @@ local default_load_conditions_frame_options = { function detailsFramework:CreateLoadFilterParser (callback) local f = CreateFrame("frame") - f:RegisterEvent ("PLAYER_ENTERING_WORLD") + f:RegisterEvent("PLAYER_ENTERING_WORLD") if IS_WOW_PROJECT_MAINLINE then - f:RegisterEvent ("PLAYER_SPECIALIZATION_CHANGED") - f:RegisterEvent ("PLAYER_TALENT_UPDATE") + f:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") + f:RegisterEvent("PLAYER_TALENT_UPDATE") end - f:RegisterEvent ("PLAYER_ROLES_ASSIGNED") - f:RegisterEvent ("ZONE_CHANGED_NEW_AREA") + f:RegisterEvent("PLAYER_ROLES_ASSIGNED") + f:RegisterEvent("ZONE_CHANGED_NEW_AREA") if IS_WOW_PROJECT_MAINLINE then - f:RegisterEvent ("CHALLENGE_MODE_START") + f:RegisterEvent("CHALLENGE_MODE_START") end - f:RegisterEvent ("ENCOUNTER_START") - f:RegisterEvent ("PLAYER_REGEN_ENABLED") + f:RegisterEvent("ENCOUNTER_START") + f:RegisterEvent("PLAYER_REGEN_ENABLED") f:SetScript("OnEvent", function(self, event, ...) if (event == "ENCOUNTER_START") then @@ -7031,7 +7031,7 @@ detailsFramework.StatusBarFunctions = { if (isUnitEvent) then self:RegisterUnitEvent (event, self.displayedUnit, self.unit) else - self:RegisterEvent (event) + self:RegisterEvent(event) end end end @@ -7362,7 +7362,7 @@ detailsFramework.PowerFrameFunctions = { if (isUnitEvent) then self:RegisterUnitEvent (event, self.displayedUnit) else - self:RegisterEvent (event) + self:RegisterEvent(event) end end @@ -7799,7 +7799,7 @@ detailsFramework.CastFrameFunctions = { if (isUnitEvent) then self:RegisterUnitEvent (event, unit) else - self:RegisterEvent (event) + self:RegisterEvent(event) end end end @@ -8777,7 +8777,7 @@ end for index, eventTable in ipairs(self.UnitFrameEvents) do local event, isUnitEvent = unpack(eventTable) if (not isUnitEvent) then - self:RegisterEvent (event) + self:RegisterEvent(event) else self:RegisterUnitEvent (event, self.unit, self.displayedUnit ~= unit and self.displayedUnit or nil) end diff --git a/Libs/DF/pictureedit.lua b/Libs/DF/pictureedit.lua index 18a385057..826d49736 100644 --- a/Libs/DF/pictureedit.lua +++ b/Libs/DF/pictureedit.lua @@ -71,7 +71,7 @@ local CreateImageEditorFrame = function() local topSlider = DF:NewSlider (editorWindow, nil, "$parentTopSlider", "topSlider", 100, 100, 0.1, 100, 0.1, 0) topSlider:SetAllPoints(editorWindow.widget) - topSlider:SetOrientation ("VERTICAL") + topSlider:SetOrientation("VERTICAL") topSlider.backdrop = nil topSlider.fractional = true topSlider:SetHook("OnEnter", function() return true end) @@ -102,7 +102,7 @@ local CreateImageEditorFrame = function() local bottomSlider = DF:NewSlider (editorWindow, nil, "$parentBottomSlider", "bottomSlider", 100, 100, 0.1, 100, 0.1, 100) bottomSlider:SetAllPoints(editorWindow.widget) - bottomSlider:SetOrientation ("VERTICAL") + bottomSlider:SetOrientation("VERTICAL") bottomSlider.backdrop = nil bottomSlider.fractional = true bottomSlider:SetHook("OnEnter", function() return true end) @@ -311,7 +311,7 @@ local CreateImageEditorFrame = function() alphaFrame:Hide() local alphaSlider = DF:NewSlider (alphaFrame, nil, "$parentAlphaSlider", "alphaSlider", 30, 220, 1, 100, 1, edit_texture:GetAlpha()*100) alphaSlider:SetPoint("top", alphaFrame, "top", 0, -5) - alphaSlider:SetOrientation ("VERTICAL") + alphaSlider:SetOrientation("VERTICAL") alphaSlider.thumb:SetSize(40, 30) --leftSlider.backdrop = nil --leftSlider.fractional = true diff --git a/Libs/DF/schedules.lua b/Libs/DF/schedules.lua index 2e9814e58..a4d62b234 100644 --- a/Libs/DF/schedules.lua +++ b/Libs/DF/schedules.lua @@ -1,11 +1,11 @@ -local DF = _G ["DetailsFramework"] +local DF = _G["DetailsFramework"] if (not DF or not DetailsFrameworkCanLoad) then return end local C_Timer = _G.C_Timer -local unpack = _G.unpack +local unpack = table.unpack or _G.unpack --make a namespace for schedules DF.Schedules = DF.Schedules or {} diff --git a/Libs/DF/slider.lua b/Libs/DF/slider.lua index baf044bee..75ef682c9 100644 --- a/Libs/DF/slider.lua +++ b/Libs/DF/slider.lua @@ -603,7 +603,7 @@ DF:Mixin(DFSliderMetaFunctions, DF.ScriptHookMixin) DFSliderMetaFunctions.editbox_typevalue = editbox end - local pvalue = self.previous_value [2] + local pvalue = self.previous_value[2] self:SetValue(pvalue) self.typing_value = true @@ -628,190 +628,176 @@ DF:Mixin(DFSliderMetaFunctions, DF.ScriptHookMixin) end local OnMouseDown = function(slider, button) - slider.MyObject.IsValueChanging = true + local object = slider.MyObject + object.IsValueChanging = true - local capsule = slider.MyObject - local kill = capsule:RunHooksForWidget("OnMouseDown", slider, button, capsule) + local kill = object:RunHooksForWidget("OnMouseDown", slider, button, object) if (kill) then return end if (button == "RightButton") then - slider.MyObject:TypeValue() + object:TypeValue() end end local OnMouseUp = function(slider, button) - slider.MyObject.IsValueChanging = nil + local object = slider.MyObject + object.IsValueChanging = nil - local capsule = slider.MyObject - local kill = capsule:RunHooksForWidget("OnMouseUp", slider, button, capsule) + local kill = object:RunHooksForWidget("OnMouseUp", slider, button, object) if (kill) then return end end local OnHide = function(slider) - local capsule = slider.MyObject - local kill = capsule:RunHooksForWidget("OnHide", slider, capsule) + local object = slider.MyObject + local kill = object:RunHooksForWidget("OnHide", slider, object) if (kill) then return end - if (slider.MyObject.typing_value) then + if (object.typing_value) then DFSliderMetaFunctions.editbox_typevalue:ClearFocus() DFSliderMetaFunctions.editbox_typevalue:SetText("") - slider.MyObject.typing_valu = false + object.typing_valu = false end end local OnShow = function(slider) - local capsule = slider.MyObject - local kill = capsule:RunHooksForWidget("OnShow", slider, capsule) + local object = slider.MyObject + local kill = object:RunHooksForWidget("OnShow", slider, object) if (kill) then return end end - local table_insert = table.insert - local table_remove = table.remove - local OnValueChanged = function(slider) + local object = slider.MyObject local amt - if (slider.MyObject.useDecimals) then + if (object.useDecimals) then amt = slider:GetValue() else amt = do_precision(slider:GetValue()) end - if (slider.MyObject.typing_value and not slider.MyObject.typing_can_change) then - slider.MyObject:SetValue(slider.MyObject.typing_value_started) + if (object.typing_value and not object.typing_can_change) then + object:SetValue(object.typing_value_started) return end - table_insert (slider.MyObject.previous_value, 1, amt) - table_remove (slider.MyObject.previous_value, 4) - - local capsule = slider.MyObject + table.insert(object.previous_value, 1, amt) + table.remove(object.previous_value, 4) --some plugins registered OnValueChanged and others with OnValueChange - local kill = capsule:RunHooksForWidget("OnValueChanged", slider, capsule.FixedValue, amt, capsule) + local kill = object:RunHooksForWidget("OnValueChanged", slider, object.FixedValue, amt, object) if (kill) then return end - local kill = capsule:RunHooksForWidget("OnValueChange", slider, capsule.FixedValue, amt, capsule) + + local kill = object:RunHooksForWidget("OnValueChange", slider, object.FixedValue, amt, object) if (kill) then return end - if (slider.MyObject.OnValueChanged) then - slider.MyObject.OnValueChanged (slider, slider.MyObject.FixedValue, amt) + if (object.OnValueChanged) then + object.OnValueChanged(slider, object.FixedValue, amt) end if (amt < 10 and amt >= 1) then - amt = "0"..amt + amt = "0" .. amt end - if (slider.MyObject.useDecimals) then + if (object.useDecimals) then slider.amt:SetText(string.format("%.2f", amt)) else slider.amt:SetText(math.floor(amt)) end - slider.MyObject.ivalue = amt - + object.ivalue = amt end ------------------------------------------------------------------------------------------------------------ --object constructor local SwitchOnClick = function(self, button, forced_value, value) + local object = self.MyObject - local slider = self.MyObject - - if (rawget(slider, "lockdown")) then + if (rawget(object, "lockdown")) then return end if (forced_value) then - rawset (slider, "value", not value) + rawset(object, "value", not value) end - if (rawget(slider, "value")) then --actived - rawset (slider, "value", false) + if (rawget(object, "value")) then --actived + rawset(object, "value", false) - if (slider.backdrop_disabledcolor) then - slider:SetBackdropColor(unpack(slider.backdrop_disabledcolor)) + if (object.backdrop_disabledcolor) then + object:SetBackdropColor(unpack(object.backdrop_disabledcolor)) else - slider:SetBackdropColor(1, 0, 0, 0.4) + object:SetBackdropColor(1, 0, 0, 0.4) end - if (slider.is_checkbox) then - slider.checked_texture:Hide() + if (object.is_checkbox) then + object.checked_texture:Hide() else - slider._text:SetText(slider._ltext) - slider._thumb:ClearAllPoints() - slider._thumb:SetPoint("left", slider.widget, "left") + object._text:SetText(object._ltext) + object._thumb:ClearAllPoints() + object._thumb:SetPoint("left", object.widget, "left") end else - rawset (slider, "value", true) - if (slider.backdrop_enabledcolor) then - slider:SetBackdropColor(unpack(slider.backdrop_enabledcolor)) + rawset(object, "value", true) + if (object.backdrop_enabledcolor) then + object:SetBackdropColor(unpack(object.backdrop_enabledcolor)) else - slider:SetBackdropColor(0, 0, 1, 0.4) + object:SetBackdropColor(0, 0, 1, 0.4) end - if (slider.is_checkbox) then - slider.checked_texture:Show() + if (object.is_checkbox) then + object.checked_texture:Show() else - slider._text:SetText(slider._rtext) - slider._thumb:ClearAllPoints() - slider._thumb:SetPoint("right", slider.widget, "right") + object._text:SetText(object._rtext) + object._thumb:ClearAllPoints() + object._thumb:SetPoint("right", object.widget, "right") end end - if (slider.OnSwitch and not forced_value) then - local value = rawget(slider, "value") - if (slider.return_func) then - value = slider:return_func (value) + if (object.OnSwitch and not forced_value) then + local value = rawget(object, "value") + if (object.return_func) then + value = object:return_func (value) end - local success, errorText = xpcall(slider.OnSwitch, geterrorhandler(), slider, slider.FixedValue, value) + local success, errorText = xpcall(object.OnSwitch, geterrorhandler(), object, object.FixedValue, value) if (not success) then return end --trigger hooks - slider:RunHooksForWidget("OnSwitch", slider, slider.FixedValue, value) + object:RunHooksForWidget("OnSwitch", object, object.FixedValue, value) end end -local default_switch_func = function(self, passed_value) - if (self.value) then - return false - else - return true - end -end - local switch_get_value = function(self) return self.value end local switch_set_value = function(self, value) if (self.switch_func) then - value = self:switch_func (value) + value = self:switch_func(value) end SwitchOnClick (self.widget, nil, true, value) end local switch_set_fixparameter = function(self, value) - rawset (self, "FixedValue", value) + rawset(self, "FixedValue", value) end local switch_disable = function(self) - if (self.is_checkbox) then self.checked_texture:Hide() else @@ -825,8 +811,9 @@ local switch_disable = function(self) end self:SetAlpha(.4) - rawset (self, "lockdown", true) + rawset(self, "lockdown", true) end + local switch_enable = function(self) if (self.is_checkbox) then if (rawget(self, "value")) then @@ -845,7 +832,7 @@ local switch_enable = function(self) end self:SetAlpha(1) - return rawset (self, "lockdown", false) + return rawset(self, "lockdown", false) end local set_switch_func = function(self, newFunction) @@ -858,12 +845,11 @@ local set_as_checkbok = function(self) checked:SetTexture([[Interface\Buttons\UI-CheckBox-Check]]) checked:SetPoint("center", self.button, "center", -1, -1) local size_pct = self:GetWidth()/32 - checked:SetSize(32*size_pct, 32*size_pct) + checked:SetSize(32 * size_pct, 32 * size_pct) self.checked_texture = checked self._thumb:Hide() self._text:Hide() - self.is_checkbox = true if (rawget(self, "value")) then @@ -881,39 +867,39 @@ local set_as_checkbok = function(self) self:SetBackdropColor(0, 0, 1, 0.4) end end - end -function DF:CreateSwitch(parent, on_switch, default_value, w, h, ltext, rtext, member, name, color_inverted, switch_func, return_func, with_label, switch_template, label_template) - local switch, label = DF:NewSwitch (parent, parent, name, member, w or 60, h or 20, ltext, rtext, default_value, color_inverted, switch_func, return_func, with_label, switch_template, label_template) - if (on_switch) then - switch.OnSwitch = on_switch +function DF:CreateSwitch(parent, onSwitch, defaultValue, width, height, leftText, rightText, member, name, colorInverted, switchFunc, returnFunc, withLabel, switch_template, label_template) + local switch, label = DF:NewSwitch(parent, parent, name, member, width or 60, height or 20, leftText, rightText, defaultValue, colorInverted, switchFunc, returnFunc, withLabel, switch_template, label_template) + if (onSwitch) then + switch.OnSwitch = onSwitch end return switch, label end -function DF:NewSwitch (parent, container, name, member, w, h, ltext, rtext, default_value, color_inverted, switch_func, return_func, with_label, switch_template, label_template) - +function DF:NewSwitch(parent, container, name, member, width, height, leftText, rightText, defaultValue, colorInverted, switch_func, return_func, with_label, switch_template, label_template) --early checks if (not name) then name = "DetailsFrameWorkSlider" .. DF.SwitchCounter DF.SwitchCounter = DF.SwitchCounter + 1 + elseif (not parent) then return error("Details! FrameWork: parent not found.", 2) end + if (not container) then container = parent end --defaults - ltext = ltext or "OFF" - rtext = rtext or "ON" + leftText = leftText or "OFF" + rightText = rightText or "ON" --build frames - w = w or 60 - h = h or 20 + width = width or 60 + height = height or 20 - local slider = DF:NewButton(parent, container, name, member, w, h) + local slider = DF:NewButton(parent, container, name, member, width, height) slider.HookList.OnSwitch = {} slider.switch_func = switch_func @@ -928,7 +914,7 @@ function DF:NewSwitch (parent, container, name, member, w, h, ltext, rtext, defa slider.SetSwitchFunction = set_switch_func if (member) then - parent [member] = slider + parent[member] = slider end slider:SetBackdrop({edgeFile = [[Interface\Buttons\UI-SliderBar-Border]], edgeSize = 8, @@ -936,7 +922,7 @@ function DF:NewSwitch (parent, container, name, member, w, h, ltext, rtext, defa local thumb = slider:CreateTexture(nil, "artwork") thumb:SetTexture("Interface\\Buttons\\UI-ScrollBar-Knob") - thumb:SetSize(34+(h*0.2), h*1.2) + thumb:SetSize(34+(height*0.2), height*1.2) thumb:SetAlpha(0.7) thumb:SetPoint("left", slider.widget, "left") @@ -946,15 +932,15 @@ function DF:NewSwitch (parent, container, name, member, w, h, ltext, rtext, defa slider._text = text slider._thumb = thumb - slider._ltext = ltext - slider._rtext = rtext + slider._ltext = leftText + slider._rtext = rightText slider.thumb = thumb - slider.invert_colors = color_inverted + slider.invert_colors = colorInverted slider:SetScript("OnClick", SwitchOnClick) - slider:SetValue(default_value) + slider:SetValue(defaultValue) slider.isSwitch = true @@ -977,7 +963,6 @@ function DF:NewSwitch (parent, container, name, member, w, h, ltext, rtext, defa end function DFSliderMetaFunctions:SetTemplate(template) - --slider e switch if (template.width) then self:SetWidth(template.width) @@ -1052,9 +1037,11 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, name = "DetailsFrameworkSlider" .. DF.SliderCounter DF.SliderCounter = DF.SliderCounter + 1 end + if (not parent) then return error("Details! FrameWork: parent not found.", 2) end + if (not container) then container = parent end @@ -1067,7 +1054,7 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, local SliderObject = {type = "slider", dframework = true} if (member) then - parent [member] = SliderObject + parent[member] = SliderObject end if (parent.dframework) then @@ -1077,7 +1064,7 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, container = container.widget end ---defaults + --defaults minValue = minValue or 1 maxValue = maxValue or 2 step = step or 1 @@ -1086,9 +1073,9 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, width = width or 130 height = height or 19 - --default members: - SliderObject.lockdown = false - SliderObject.container = container + --default members + SliderObject.lockdown = false + SliderObject.container = container SliderObject.slider = CreateFrame("slider", name, parent,"BackdropTemplate") SliderObject.widget = SliderObject.slider @@ -1107,7 +1094,7 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, for funcName, funcAddress in pairs(idx) do if (not DFSliderMetaFunctions[funcName]) then DFSliderMetaFunctions[funcName] = function(object, ...) - local x = loadstring ( "return _G['"..object.slider:GetName().."']:"..funcName.."(...)") + local x = loadstring( "return _G['" .. object.slider:GetName() .. "']:" .. funcName .. "(...)") return x(...) end end @@ -1117,7 +1104,7 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue, SliderObject.slider.MyObject = SliderObject SliderObject.slider:SetWidth(width) SliderObject.slider:SetHeight(height) - SliderObject.slider:SetOrientation ("horizontal") + SliderObject.slider:SetOrientation("horizontal") SliderObject.slider:SetMinMaxValues(minValue, maxValue) SliderObject.slider:SetValue(defaultValue) SliderObject.ivalue = defaultValue @@ -1284,14 +1271,14 @@ DF.AdjustmentSliderFunctions = { --button can be the left or right button OnButtonDownkHook = function(button) - button = button.MyObject + local object = button.MyObject --change the icon - if (button.direction == "center") then + if (object.direction == "center") then DF:DisableOnEnterScripts() end - local adjustmentSlider = button:GetParent() + local adjustmentSlider = object:GetParent() adjustmentSlider.NextTick = GetTime() + 0.05 --save where the mouse is on the moment of the click @@ -1301,7 +1288,7 @@ DF.AdjustmentSliderFunctions = { adjustmentSlider.initialMouseX = mouseX adjustmentSlider.initialMouseY = mouseY - adjustmentSlider.buttonPressed = button.direction + adjustmentSlider.buttonPressed = object.direction --start monitoring the mouse moviment adjustmentSlider.buttonPressedTime = GetTime() @@ -1310,21 +1297,21 @@ DF.AdjustmentSliderFunctions = { --button can be the left or right button OnButtonUpHook = function(button) - button = button.MyObject + local object = button.MyObject --change the icon - if (button.direction == "center") then + if (object.direction == "center") then DF:EnableOnEnterScripts() end - local adjustmentSlider = button:GetParent() + local adjustmentSlider = object:GetParent() --check if the mouse did not moved at all, if not send a callback with a value of 1 local mouseX, mouseY = GetCursorPosition() if (mouseX == adjustmentSlider.MouseX and mouseY == adjustmentSlider.MouseY and adjustmentSlider.buttonPressedTime+0.5 > GetTime()) then - if (button.direction == "left") then + if (object.direction == "left") then DF.AdjustmentSliderFunctions.RunCallback(adjustmentSlider, -1, 0, true) - elseif (button.direction == "right") then + elseif (object.direction == "right") then DF.AdjustmentSliderFunctions.RunCallback(adjustmentSlider, 1, 0, true) end end diff --git a/Libs/DF/split_bar.lua b/Libs/DF/split_bar.lua index e5c2aeaee..5a102cb90 100644 --- a/Libs/DF/split_bar.lua +++ b/Libs/DF/split_bar.lua @@ -5,9 +5,9 @@ if (not DF or not DetailsFrameworkCanLoad) then end local _ -local _rawset = rawset --lua local -local _rawget = rawget --lua local -local _setmetatable = setmetatable --lua local +local rawset = rawset --lua local +local rawget = rawget --lua local +local setmetatable = setmetatable --lua local local _unpack = unpack --lua local local type = type --lua local local _math_floor = math.floor --lua local @@ -175,7 +175,7 @@ DF:Mixin(SplitBarMetaFunctions, DF.ScriptHookMixin) return func (_table, _member_requested) end - local fromMe = _rawget (_table, _member_requested) + local fromMe = rawget (_table, _member_requested) if (fromMe) then return fromMe end @@ -324,7 +324,7 @@ DF:Mixin(SplitBarMetaFunctions, DF.ScriptHookMixin) if (func) then return func (_table, _value) else - return _rawset (_table, _key, _value) + return rawset (_table, _key, _value) end end @@ -433,13 +433,13 @@ DF:Mixin(SplitBarMetaFunctions, DF.ScriptHookMixin) -- tooltip function SplitBarMetaFunctions:SetTooltip (tooltip) if (tooltip) then - return _rawset (self, "have_tooltip", tooltip) + return rawset (self, "have_tooltip", tooltip) else - return _rawset (self, "have_tooltip", nil) + return rawset (self, "have_tooltip", nil) end end function SplitBarMetaFunctions:GetTooltip() - return _rawget (self, "have_tooltip") + return rawget (self, "have_tooltip") end -- frame levels @@ -798,7 +798,7 @@ function DF:NewSplitBar (parent, container, name, member, w, h) SplitBarObject.statusbar:SetScript("OnMouseUp", OnMouseUp) SplitBarObject.statusbar:SetScript("OnSizeChanged", OnSizeChanged) - _setmetatable(SplitBarObject, SplitBarMetaFunctions) + setmetatable(SplitBarObject, SplitBarMetaFunctions) return SplitBarObject end diff --git a/Libs/DF/textentry.lua b/Libs/DF/textentry.lua index 7f403f92d..c6f4c1d15 100644 --- a/Libs/DF/textentry.lua +++ b/Libs/DF/textentry.lua @@ -5,7 +5,6 @@ if (not DF or not DetailsFrameworkCanLoad) then end local _ -local loadstring = loadstring --lua local local APITextEntryFunctions = false do @@ -624,8 +623,8 @@ function DF:NewTextEntry(parent, container, name, member, width, height, func, p return newTextEntryObject, withLabel end -function DF:NewSpellEntry(parent, func, w, h, param1, param2, member, name) - local editbox = DF:NewTextEntry(parent, parent, name, member, w, h, func, param1, param2) +function DF:NewSpellEntry(parent, func, width, height, param1, param2, member, name) + local editbox = DF:NewTextEntry(parent, parent, name, member, width, height, func, param1, param2) return editbox end @@ -645,114 +644,6 @@ local function_setfocus = function(self) return self.editbox:SetFocus(true) end ------------------------------------------------------------------------------------- ---auto complete - --- block ------------------- ---code author Saiket from http://www.wowinterface.com/forums/showpost.php?p=245759&postcount=6 ---- @return StartPos, EndPos of highlight in this editbox. -local function GetTextHighlight ( self ) - local Text, Cursor = self:GetText(), self:GetCursorPosition(); - self:Insert( "" ); -- Delete selected text - local TextNew, CursorNew = self:GetText(), self:GetCursorPosition(); - -- Restore previous text - self:SetText( Text ); - self:SetCursorPosition( Cursor ); - local Start, End = CursorNew, #Text - ( #TextNew - CursorNew ); - self:HighlightText( Start, End ); - return Start, End; -end -local StripColors; -do - local CursorPosition, CursorDelta; - --- Callback for gsub to remove unescaped codes. - local function StripCodeGsub ( Escapes, Code, End ) - if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code - if ( CursorPosition and CursorPosition >= End - 1 ) then - CursorDelta = CursorDelta - #Code; - end - return Escapes; - end - end - --- Removes a single escape sequence. - local function StripCode ( Pattern, Text, OldCursor ) - CursorPosition, CursorDelta = OldCursor, 0; - return Text:gsub( Pattern, StripCodeGsub ), OldCursor and CursorPosition + CursorDelta; - end - --- Strips Text of all color escape sequences. - -- @param Cursor Optional cursor position to keep track of. - -- @return Stripped text, and the updated cursor position if Cursor was given. - function StripColors ( Text, Cursor ) - Text, Cursor = StripCode( "(|*)(|c%x%x%x%x%x%x%x%x)()", Text, Cursor ); - return StripCode( "(|*)(|r)()", Text, Cursor ); - end -end - -local COLOR_END = "|r"; ---- Wraps this editbox's selected text with the given color. -local function ColorSelection ( self, ColorCode ) - local Start, End = GetTextHighlight( self ); - local Text, Cursor = self:GetText(), self:GetCursorPosition(); - if ( Start == End ) then -- Nothing selected - --Start, End = Cursor, Cursor; -- Wrap around cursor - return; -- Wrapping the cursor in a color code and hitting backspace crashes the client! - end - -- Find active color code at the end of the selection - local ActiveColor; - if ( End < #Text ) then -- There is text to color after the selection - local ActiveEnd; - local CodeEnd, _, Escapes, Color = 0; - while ( true ) do - _, CodeEnd, Escapes, Color = Text:find( "(|*)(|c%x%x%x%x%x%x%x%x)", CodeEnd + 1 ); - if ( not CodeEnd or CodeEnd > End ) then - break; - end - if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code - ActiveColor, ActiveEnd = Color, CodeEnd; - end - end - - if ( ActiveColor ) then - -- Check if color gets terminated before selection ends - CodeEnd = 0; - while ( true ) do - _, CodeEnd, Escapes = Text:find( "(|*)|r", CodeEnd + 1 ); - if ( not CodeEnd or CodeEnd > End ) then - break; - end - if ( CodeEnd > ActiveEnd and #Escapes % 2 == 0 ) then -- Terminates ActiveColor - ActiveColor = nil; - break; - end - end - end - end - - local Selection = Text:sub( Start + 1, End ); - -- Remove color codes from the selection - local Replacement, CursorReplacement = StripColors( Selection, Cursor - Start ); - - self:SetText( ( "" ):join( - Text:sub( 1, Start ), - ColorCode, Replacement, COLOR_END, - ActiveColor or "", Text:sub( End + 1 ) - ) ); - - -- Restore cursor and highlight, adjusting for wrapper text - Cursor = Start + CursorReplacement; - if ( CursorReplacement > 0 ) then -- Cursor beyond start of color code - Cursor = Cursor + #ColorCode; - end - if ( CursorReplacement >= #Replacement ) then -- Cursor beyond end of color - Cursor = Cursor + #COLOR_END; - end - - self:SetCursorPosition( Cursor ); - -- Highlight selection and wrapper - self:HighlightText( Start, #ColorCode + ( #Replacement - #Selection ) + #COLOR_END + End ); -end --- end of the block --------------------- - local get_last_word = function(self) self.lastword = "" local cursor_pos = self.editbox:GetCursorPosition() @@ -951,8 +842,7 @@ local AutoComplete_OnChar = function(editboxWidget, char, capsule) editboxWidget.ignore_input = false end -function TextEntryMetaFunctions:SetAsAutoComplete (poolName, poolTable, shouldOptimize) - +function TextEntryMetaFunctions:SetAsAutoComplete(poolName, poolTable, shouldOptimize) if (not self.SetHook) then --self is borderframe self = self.editbox @@ -996,23 +886,21 @@ end local set_speciallua_editor_font_size = function(borderFrame, newSize) local file, size, flags = borderFrame.editbox:GetFont() - borderFrame.editbox:SetFont (file, newSize, flags) - - borderFrame.editboxlines:SetFont (file, newSize, flags) + borderFrame.editbox:SetFont(file, newSize, flags) + borderFrame.editboxlines:SetFont(file, newSize, flags) end -function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, showLineNumbers) - +function DF:NewSpecialLuaEditorEntry(parent, width, height, member, name, nointent, showLineNumbers) if (name:find("$parent")) then local parentName = DF.GetParentName(parent) name = name:gsub("$parent", parentName) end local borderframe = CreateFrame("Frame", name, parent,"BackdropTemplate") - borderframe:SetSize(w, h) + borderframe:SetSize(width, height) if (member) then - parent [member] = borderframe + parent[member] = borderframe end local scrollframe = CreateFrame("ScrollFrame", name, borderframe, "UIPanelScrollFrameTemplate, BackdropTemplate") @@ -1024,7 +912,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show scrollframe.editbox:SetScript("OnCursorChanged", _G.ScrollingEdit_OnCursorChanged) scrollframe.editbox:SetScript("OnEscapePressed", _G.EditBox_ClearFocus) scrollframe.editbox:SetFontObject("GameFontHighlightSmall") - scrollframe:SetScrollChild (scrollframe.editbox) + scrollframe:SetScrollChild(scrollframe.editbox) --line number if (showLineNumbers) then @@ -1039,7 +927,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show scrollframeNumberLines.editbox:SetPoint("topleft", borderframe, "topleft", 10, -10) scrollframeNumberLines.editbox:SetPoint("bottomright", borderframe, "bottomright", -30, 10) - scrollframeNumberLines:SetScrollChild (scrollframeNumberLines.editbox) + scrollframeNumberLines:SetScrollChild(scrollframeNumberLines.editbox) scrollframeNumberLines:EnableMouseWheel(false) for i = 1, 1000 do @@ -1111,7 +999,7 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show borderframe.SetTemplate = TextEntryMetaFunctions.SetTemplate if (not nointent) then - IndentationLib.enable (scrollframe.editbox, nil, 4) + IndentationLib.enable(scrollframe.editbox, nil, 4) end borderframe:SetBackdrop({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], @@ -1133,51 +1021,4 @@ function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent, show borderframe.editbox.borderframe = borderframe return borderframe -end - --- encryption table -local base64chars = {[0]='A',[1]='B',[2]='C',[3]='D',[4]='E',[5]='F',[6]='G',[7]='H',[8]='I',[9]='J',[10]='K',[11]='L',[12]='M',[13]='N',[14]='O',[15]='P',[16]='Q',[17]='R',[18]='S',[19]='T',[20]='U',[21]='V',[22]='W',[23]='X',[24]='Y',[25]='Z',[26]='a',[27]='b',[28]='c',[29]='d',[30]='e',[31]='f',[32]='g',[33]='h',[34]='i',[35]='j',[36]='k',[37]='l',[38]='m',[39]='n',[40]='o',[41]='p',[42]='q',[43]='r',[44]='s',[45]='t',[46]='u',[47]='v',[48]='w',[49]='x',[50]='y',[51]='z',[52]='0',[53]='1',[54]='2',[55]='3',[56]='4',[57]='5',[58]='6',[59]='7',[60]='8',[61]='9',[62]='-',[63]='_'} - --- decryption table -local base64bytes = {['A']=0,['B']=1,['C']=2,['D']=3,['E']=4,['F']=5,['G']=6,['H']=7,['I']=8,['J']=9,['K']=10,['L']=11,['M']=12,['N']=13,['O']=14,['P']=15,['Q']=16,['R']=17,['S']=18,['T']=19,['U']=20,['V']=21,['W']=22,['X']=23,['Y']=24,['Z']=25,['a']=26,['b']=27,['c']=28,['d']=29,['e']=30,['f']=31,['g']=32,['h']=33,['i']=34,['j']=35,['k']=36,['l']=37,['m']=38,['n']=39,['o']=40,['p']=41,['q']=42,['r']=43,['s']=44,['t']=45,['u']=46,['v']=47,['w']=48,['x']=49,['y']=50,['z']=51,['0']=52,['1']=53,['2']=54,['3']=55,['4']=56,['5']=57,['6']=58,['7']=59,['8']=60,['9']=61,['-']=62,['_']=63,['=']=nil} - --- shift left -local function lsh (value,shift) - return (value*(2^shift)) % 256 -end - --- shift right -local function rsh (value,shift) - return math.floor(value/2^shift) % 256 -end - --- return single bit (for OR) -local function bit (x,b) - return (x % 2^b - x % 2^(b-1) > 0) -end - -local function lor (x,y) - local result = 0 - for p=1,8 do result = result + (((bit(x,p) or bit(y,p)) == true) and 2^(p-1) or 0) end - return result -end - -function DF.EncodeString (data) - local bytes = {} - local result = "" - for spos=0,string.len(data)-1,3 do - for byte=1,3 do bytes[byte] = string.byte(string.sub(data,(spos+byte))) or 0 end - result = string.format('%s%s%s%s%s',result,base64chars[rsh(bytes[1],2)],base64chars[lor(lsh((bytes[1] % 4),4), rsh(bytes[2],4))] or "=",((#data-spos) > 1) and base64chars[lor(lsh(bytes[2] % 16,2), rsh(bytes[3],6))] or "=",((#data-spos) > 2) and base64chars[(bytes[3] % 64)] or "=") - end - return result -end - -function DF.DecodeString (data) - local chars = {} - local result="" - for dpos=0,string.len(data)-1,4 do - for char=1,4 do chars[char] = base64bytes[(string.sub(data,(dpos+char),(dpos+char)) or "=")] end - result = string.format('%s%s%s%s',result,string.char(lor(lsh(chars[1],2), rsh(chars[2],4))),(chars[3] ~= nil) and string.char(lor(lsh(chars[2],4), rsh(chars[3],2))) or "",(chars[4] ~= nil) and string.char(lor(lsh(chars[3],6) % 192, (chars[4]))) or "") - end - return result end \ No newline at end of file diff --git a/Libs/LibOpenRaid/LibOpenRaid.lua b/Libs/LibOpenRaid/LibOpenRaid.lua index 787919dc6..f2e5dbab0 100644 --- a/Libs/LibOpenRaid/LibOpenRaid.lua +++ b/Libs/LibOpenRaid/LibOpenRaid.lua @@ -68,7 +68,7 @@ if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE and not isExpansion_Dragonflight()) t end local major = "LibOpenRaid-1.0" -local CONST_LIB_VERSION = 62 +local CONST_LIB_VERSION = 63 LIB_OPEN_RAID_CAN_LOAD = false local unpack = table.unpack or _G.unpack @@ -242,7 +242,7 @@ end function tempCache.RestoreData() local data = C_CVar.GetCVar(CONST_CVAR_TEMPCACHE) - if (data and type(data) == "string" and data ~= "") then + if (data and type(data) == "string" and string.len(data) > 1) then local LibAceSerializer = LibStub:GetLibrary("AceSerializer-3.0", true) if (LibAceSerializer) then local okay, cacheInfo = LibAceSerializer:Deserialize(data) @@ -279,13 +279,21 @@ function tempCache.RestoreData() tempCache.AddDebugText("invalid GearInfo") end else - tempCache.AddDebugText("Deserialization not okay") + tempCache.AddDebugText("Deserialization not okay, reason: " .. cacheInfo) end else tempCache.AddDebugText("LibAceSerializer not found") end else - tempCache.AddDebugText("invalid temporary cache, isn't string or cvar not found") + if (not data) then + tempCache.AddDebugText("invalid temporary cache: getCVar returned nil") + elseif (type(data) ~= "string") then + tempCache.AddDebugText("invalid temporary cache: getCVar did not returned a string") + elseif (string.len(data) < 2) then + tempCache.AddDebugText("invalid temporary cache: data length lower than 2 bytes (first login?)") + else + tempCache.AddDebugText("invalid temporary cache: no reason found") + end end end diff --git a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua index 7dedf84c5..4d69a4d8f 100644 --- a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua +++ b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua @@ -269,6 +269,7 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = { -- 4 raid defensive cooldown -- 5 personal utility cooldown -- 6 interrupt + -- 8 crowd control --interrupts [6552] = {class = "WARRIOR", specs = {71, 72, 73}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Pummel @@ -292,131 +293,130 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = { -- 66 - Protection -- 70 - Retribution - [31884] = {cooldown = 120, duration = 20, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 1}, --Avenging Wrath - [216331] = {cooldown = 120, duration = 20, specs = {65}, talent =22190, charges = 1, class = "PALADIN", type = 1}, --Avenging Crusader (talent) - [498] = {cooldown = 60, duration = 8, specs = {65}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Divine Protection - [642] = {cooldown = 300, duration = 8, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Divine Shield - [105809] = {cooldown = 90, duration = 20, specs = {65,66,70}, talent =22164, charges = 1, class = "PALADIN", type = 2}, --Holy Avenger (talent) - [152262] = {cooldown = 45, duration = 15, specs = {65,66,70}, talent =17601, charges = 1, class = "PALADIN", type = 2}, --Seraphim - [633] = {cooldown = 600, duration = false, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Lay on Hands - [1022] = {cooldown = 300, duration = 10, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Protection - [6940] = {cooldown = 120, duration = 12, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Sacrifice - [31821] = {cooldown = 180, duration = 8, specs = {65}, talent =false, charges = 1, class = "PALADIN", type = 4}, --Aura Mastery - [1044] = {cooldown = 25, duration = 8, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 5}, --Blessing of Freedom - [853] = {cooldown = 60, duration = 6, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 5}, --Hammer of Justice - [115750] = {cooldown = 90, duration = 6, specs = {65,66,70}, talent =21811, charges = 1, class = "PALADIN", type = 5}, --Blinding Light(talent) - [327193] = {cooldown = 90, duration = 15, specs = {66}, talent =23468, charges = 1, class = "PALADIN", type = 1}, --Moment of Glory (talent) - [31850] = {cooldown = 120, duration = 8, specs = {66}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Ardent Defender - [86659] = {cooldown = 300, duration = 8, specs = {66}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Guardian of Ancient Kings - [204018] = {cooldown = 180, duration = 10, specs = {66}, talent =22435, charges = 1, class = "PALADIN", type = 3}, --Blessing of Spellwarding (talent) - [231895] = {cooldown = 120, duration = 25, specs = {70}, talent =22215, charges = 1, class = "PALADIN", type = 1}, --Crusade (talent) - [205191] = {cooldown = 60, duration = 10, specs = {70}, talent =22183, charges = 1, class = "PALADIN", type = 2}, --Eye for an Eye (talent) - [184662] = {cooldown = 120, duration = 15, specs = {70}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Shield of Vengeance + [31884] = {cooldown = 120, duration = 20, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 1}, --Avenging Wrath + [216331] = {cooldown = 120, duration = 20, specs = {65}, talent = false, charges = 1, class = "PALADIN", type = 1}, --Avenging Crusader + [498] = {cooldown = 60, duration = 8, specs = {65}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Divine Protection + [642] = {cooldown = 300, duration = 8, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Divine Shield + [105809] = {cooldown = 90, duration = 20, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Holy Avenger + [152262] = {cooldown = 45, duration = 15, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Seraphim + [633] = {cooldown = 600, duration = false, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 3}, --Lay on Hands + [1022] = {cooldown = 300, duration = 10, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Protection + [6940] = {cooldown = 120, duration = 12, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Sacrifice + [31821] = {cooldown = 180, duration = 8, specs = {65}, talent = false, charges = 1, class = "PALADIN", type = 4}, --Aura Mastery + [1044] = {cooldown = 25, duration = 8, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 5}, --Blessing of Freedom + [853] = {cooldown = 60, duration = 6, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 5}, --Hammer of Justice + [115750] = {cooldown = 90, duration = 6, specs = {65,66,70}, talent = false, charges = 1, class = "PALADIN", type = 5}, --Blinding Light(talent) + [327193] = {cooldown = 90, duration = 15, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 1}, --Moment of Glory + [31850] = {cooldown = 120, duration = 8, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Ardent Defender + [86659] = {cooldown = 300, duration = 8, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Guardian of Ancient Kings + [204018] = {cooldown = 180, duration = 10, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Spellwarding + [231895] = {cooldown = 120, duration = 25, specs = {70}, talent = false, charges = 1, class = "PALADIN", type = 1}, --Crusade + [205191] = {cooldown = 60, duration = 10, specs = {70}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Eye for an Eye + [184662] = {cooldown = 120, duration = 15, specs = {70}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Shield of Vengeance --warrior -- 71 - Arms -- 72 - Fury -- 73 - Protection - [107574] = {cooldown = 90, duration = 20, specs = {71,73}, talent =22397, charges = 1, class = "WARRIOR", type = 1}, --Avatar - [227847] = {cooldown = 90, duration = 5, specs = {71}, talent =false, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm - [46924] = {cooldown = 60, duration = 4, specs = {72}, talent =22400, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm (talent) - [152277] = {cooldown = 60, duration = 6, specs = {71}, talent =21667, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) - [228920] = {cooldown = 60, duration = 6, specs = {73}, talent =23099, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) - [118038] = {cooldown = 180, duration = 8, specs = {71}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Die by the Sword - [97462] = {cooldown = 180, duration = 10, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 4}, --Rallying Cry - [1719] = {cooldown = 90, duration = 10, specs = {72}, talent =false, charges = 1, class = "WARRIOR", type = 1}, --Recklessness - [184364] = {cooldown = 120, duration = 8, specs = {72}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Enraged Regeneration - [12975] = {cooldown = 180, duration = 15, specs = {73}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Last Stand - [871] = {cooldown = 8, duration = 240, specs = {73}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Shield Wall - [64382] = {cooldown = 180, duration = false, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 5}, --Shattering Throw - [5246] = {cooldown = 90, duration = 8, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 5}, --Intimidating Shout + [107574] = {cooldown = 90, duration = 20, specs = {71,73}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Avatar + [227847] = {cooldown = 90, duration = 5, specs = {71}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm + [46924] = {cooldown = 60, duration = 4, specs = {72}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm + [152277] = {cooldown = 60, duration = 6, specs = {71}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Ravager + [228920] = {cooldown = 60, duration = 6, specs = {73}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Ravager + [118038] = {cooldown = 180, duration = 8, specs = {71}, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Die by the Sword + [97462] = {cooldown = 180, duration = 10, specs = {71,72,73}, talent = false, charges = 1, class = "WARRIOR", type = 4}, --Rallying Cry + [1719] = {cooldown = 90, duration = 10, specs = {72}, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Recklessness + [184364] = {cooldown = 120, duration = 8, specs = {72}, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Enraged Regeneration + [12975] = {cooldown = 180, duration = 15, specs = {73}, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Last Stand + [871] = {cooldown = 8, duration = 240, specs = {73}, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Shield Wall + [64382] = {cooldown = 180, duration = false, specs = {71,72,73}, talent = false, charges = 1, class = "WARRIOR", type = 5}, --Shattering Throw + [5246] = {cooldown = 90, duration = 8, specs = {71,72,73}, talent = false, charges = 1, class = "WARRIOR", type = 5}, --Intimidating Shout --warlock -- 265 - Affliction -- 266 - Demonology -- 267 - Destruction - [205180] = {cooldown = 180, duration = 20, specs = {265}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Darkglare - --[342601] = {cooldown = 3600, duration = false, specs = {}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Ritual of Doom - [113860] = {cooldown = 120, duration = 20, specs = {265}, talent =19293, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Misery (talent) - [104773] = {cooldown = 180, duration = 8, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 2}, --Unending Resolve - [108416] = {cooldown = 60, duration = 20, specs = {265,266,267}, talent =19286, charges = 1, class = "WARLOCK", type = 2}, --Dark Pact (talent) - [265187] = {cooldown = 90, duration = 15, specs = {266}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Demonic Tyrant - [111898] = {cooldown = 120, duration = 15, specs = {266}, talent =21717, charges = 1, class = "WARLOCK", type = 1}, --Grimoire: Felguard (talent) - [267171] = {cooldown = 60, duration = false, specs = {266}, talent =23138, charges = 1, class = "WARLOCK", type = 1}, --Demonic Strength (talent) - [267217] = {cooldown = 180, duration = 20, specs = {266}, talent =23091, charges = 1, class = "WARLOCK", type = 1}, --Nether Portal - [1122] = {cooldown = 180, duration = 30, specs = {267}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Infernal - [113858] = {cooldown = 120, duration = 20, specs = {267}, talent =23092, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Instability (talent) - [30283] = {cooldown = 60, duration = 3, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 5}, --Shadowfury - [333889] = {cooldown = 180, duration = 15, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 5}, --Fel Domination - [5484] = {cooldown = 40, duration = 20, specs = {265,266,267}, talent =23465, charges = 1, class = "WARLOCK", type = 5}, --Howl of Terror (talent) + [205180] = {cooldown = 180, duration = 20, specs = {265}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Darkglare + [113860] = {cooldown = 120, duration = 20, specs = {265}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Misery + [104773] = {cooldown = 180, duration = 8, specs = {265,266,267}, talent = false, charges = 1, class = "WARLOCK", type = 2}, --Unending Resolve + [108416] = {cooldown = 60, duration = 20, specs = {265,266,267}, talent = false, charges = 1, class = "WARLOCK", type = 2}, --Dark Pact + [265187] = {cooldown = 90, duration = 15, specs = {266}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Demonic Tyrant + [111898] = {cooldown = 120, duration = 15, specs = {266}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Grimoire: Felguard + [267171] = {cooldown = 60, duration = false, specs = {266}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Demonic Strength + [267217] = {cooldown = 180, duration = 20, specs = {266}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Nether Portal + [1122] = {cooldown = 180, duration = 30, specs = {267}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Infernal + [113858] = {cooldown = 120, duration = 20, specs = {267}, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Instability + [30283] = {cooldown = 60, duration = 3, specs = {265,266,267}, talent = false, charges = 1, class = "WARLOCK", type = 5}, --Shadowfury + [333889] = {cooldown = 180, duration = 15, specs = {265,266,267}, talent = false, charges = 1, class = "WARLOCK", type = 5}, --Fel Domination + [5484] = {cooldown = 40, duration = 20, specs = {265,266,267}, talent = false, charges = 1, class = "WARLOCK", type = 5}, --Howl of Terror --shaman -- 262 - Elemental -- 263 - Enchancment -- 264 - Restoration - [198067] = {cooldown = 150, duration = 30, specs = {262}, talent =false, charges = 1, class = "SHAMAN", type = 1}, --Fire Elemental - [192249] = {cooldown = 150, duration = 30, specs = {262}, talent =19272, charges = 1, class = "SHAMAN", type = 1}, --Storm Elemental (talent) - [108271] = {cooldown = 90, duration = 8, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 2}, --Astral Shift - [108281] = {cooldown = 120, duration = 10, specs = {262,263}, talent =22172, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Guidance (talent) - [51533] = {cooldown = 120, duration = 15, specs = {263}, talent =false, charges = 1, class = "SHAMAN", type = 1}, --Feral Spirit - [114050] = {cooldown = 180, duration = 15, specs = {262}, talent =21675, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) - [114051] = {cooldown = 180, duration = 15, specs = {263}, talent =21972, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) - [114052] = {cooldown = 180, duration = 15, specs = {264}, talent =22359, charges = 1, class = "SHAMAN", type = 4}, --Ascendance (talent) - [98008] = {cooldown = 180, duration = 6, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Spirit Link Totem - [108280] = {cooldown = 180, duration = 10, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Healing Tide Totem - [207399] = {cooldown = 240, duration = 30, specs = {264}, talent =22323, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Protection Totem (talent) - [16191] = {cooldown = 180, duration = 8, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Mana Tide Totem - [198103] = {cooldown = 300, duration = 60, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 2}, --Earth Elemental - [192058] = {cooldown = 60, duration = false, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 5}, --Capacitor Totem - [8143] = {cooldown = 60, duration = 10, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 5}, --Tremor Totem - [192077] = {cooldown = 120, duration = 15, specs = {262,263,264}, talent =21966, charges = 1, class = "SHAMAN", type = 5}, --Wind Rush Totem (talent) + [198067] = {cooldown = 150, duration = 30, specs = {262}, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Fire Elemental + [192249] = {cooldown = 150, duration = 30, specs = {262}, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Storm Elemental + [108271] = {cooldown = 90, duration = 8, specs = {262,263,264}, talent = false, charges = 1, class = "SHAMAN", type = 2}, --Astral Shift + [108281] = {cooldown = 120, duration = 10, specs = {262,263}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Guidance + [51533] = {cooldown = 120, duration = 15, specs = {263}, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Feral Spirit + [114050] = {cooldown = 180, duration = 15, specs = {262}, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Ascendance + [114051] = {cooldown = 180, duration = 15, specs = {263}, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Ascendance + [114052] = {cooldown = 180, duration = 15, specs = {264}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Ascendance + [98008] = {cooldown = 180, duration = 6, specs = {264}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Spirit Link Totem + [108280] = {cooldown = 180, duration = 10, specs = {264}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Healing Tide Totem + [207399] = {cooldown = 240, duration = 30, specs = {264}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Protection Totem + [16191] = {cooldown = 180, duration = 8, specs = {264}, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Mana Tide Totem + [198103] = {cooldown = 300, duration = 60, specs = {262,263,264}, talent = false, charges = 1, class = "SHAMAN", type = 2}, --Earth Elemental + [192058] = {cooldown = 60, duration = false, specs = {262,263,264}, talent = false, charges = 1, class = "SHAMAN", type = 5}, --Capacitor Totem + [8143] = {cooldown = 60, duration = 10, specs = {262,263,264}, talent = false, charges = 1, class = "SHAMAN", type = 5}, --Tremor Totem + [192077] = {cooldown = 120, duration = 15, specs = {262,263,264}, talent = false, charges = 1, class = "SHAMAN", type = 5}, --Wind Rush Totem --monk -- 268 - Brewmaster -- 269 - Windwalker -- 270 - Restoration - [132578] = {cooldown = 180, duration = 25, specs = {268}, talent =false, charges = 1, class = "MONK", type = 1}, --Invoke Niuzao, the Black Ox - [115080] = {cooldown = 180, duration = false, specs = {268,269,270}, talent =false, charges = 1, class = "MONK", type = 1}, --Touch of Death - [115203] = {cooldown = 420, duration = 15, specs = {268}, talent =false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew - [115176] = {cooldown = 300, duration = 8, specs = {268}, talent =false, charges = 1, class = "MONK", type = 2}, --Zen Meditation - [115399] = {cooldown = 120, duration = false, specs = {268}, talent =19992, charges = 1, class = "MONK", type = 2}, --Black Ox brew (talent) - [122278] = {cooldown = 120, duration = 10, specs = {268,269,270}, talent =20175, charges = 1, class = "MONK", type = 2}, --Dampen Harm (talent) - [137639] = {cooldown = 90, duration = 15, specs = {269}, talent =false, charges = 1, class = "MONK", type = 1}, --Storm, Earth, and Fire - [123904] = {cooldown = 120, duration = 24, specs = {269}, talent =false, charges = 1, class = "MONK", type = 1}, --Invoke Xuen, the White Tiger - [152173] = {cooldown = 90, duration = 12, specs = {269}, talent =21191, charges = 1, class = "MONK", type = 1}, --Serenity (talent) - [122470] = {cooldown = 90, duration = 6, specs = {269}, talent =false, charges = 1, class = "MONK", type = 2}, --Touch of Karma - [322118] = {cooldown = 180, duration = 25, specs = {270}, talent =false, charges = 1, class = "MONK", type = 4}, --Invoke Yulon, the Jade serpent - [243435] = {cooldown = 90, duration = 15, specs = {269,270}, talent =false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew - [122783] = {cooldown = 90, duration = 6, specs = {269,270}, talent =20173, charges = 1, class = "MONK", type = 2}, --Diffuse Magic (talent) - [116849] = {cooldown = 120, duration = 12, specs = {270}, talent =false, charges = 1, class = "MONK", type = 3}, --Life Cocoon - [115310] = {cooldown = 180, duration = false, specs = {270}, talent =false, charges = 1, class = "MONK", type = 4}, --Revival - [197908] = {cooldown = 90, duration = 10, specs = {270}, talent =22166, charges = 1, class = "MONK", type = 5}, --Mana tea (talent) - [116844] = {cooldown = 45, duration = 5, specs = {268,269,270}, talent =19995, charges = 1, class = "MONK", type = 5}, --Ring of peace (talent) - [119381] = {cooldown = 50, duration = 3, specs = {268,269,270}, talent =false, charges = 1, class = "MONK", type = 5}, --Leg Sweep + [132578] = {cooldown = 180, duration = 25, specs = {268}, talent = false, charges = 1, class = "MONK", type = 1}, --Invoke Niuzao, the Black Ox + [115080] = {cooldown = 180, duration = false, specs = {268,269,270}, talent = false, charges = 1, class = "MONK", type = 1}, --Touch of Death + [115203] = {cooldown = 420, duration = 15, specs = {268}, talent = false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew + [115176] = {cooldown = 300, duration = 8, specs = {268}, talent = false, charges = 1, class = "MONK", type = 2}, --Zen Meditation + [115399] = {cooldown = 120, duration = false, specs = {268}, talent = false, charges = 1, class = "MONK", type = 2}, --Black Ox brew + [122278] = {cooldown = 120, duration = 10, specs = {268,269,270}, talent = false, charges = 1, class = "MONK", type = 2}, --Dampen Harm + [137639] = {cooldown = 90, duration = 15, specs = {269}, talent = false, charges = 1, class = "MONK", type = 1}, --Storm, Earth, and Fire + [123904] = {cooldown = 120, duration = 24, specs = {269}, talent = false, charges = 1, class = "MONK", type = 1}, --Invoke Xuen, the White Tiger + [152173] = {cooldown = 90, duration = 12, specs = {269}, talent = false, charges = 1, class = "MONK", type = 1}, --Serenity + [122470] = {cooldown = 90, duration = 6, specs = {269}, talent = false, charges = 1, class = "MONK", type = 2}, --Touch of Karma + [322118] = {cooldown = 180, duration = 25, specs = {270}, talent = false, charges = 1, class = "MONK", type = 4}, --Invoke Yulon, the Jade serpent + [243435] = {cooldown = 90, duration = 15, specs = {269,270}, talent = false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew + [122783] = {cooldown = 90, duration = 6, specs = {269,270}, talent = false, charges = 1, class = "MONK", type = 2}, --Diffuse Magic + [116849] = {cooldown = 120, duration = 12, specs = {270}, talent = false, charges = 1, class = "MONK", type = 3}, --Life Cocoon + [115310] = {cooldown = 180, duration = false, specs = {270}, talent = false, charges = 1, class = "MONK", type = 4}, --Revival + [197908] = {cooldown = 90, duration = 10, specs = {270}, talent = false, charges = 1, class = "MONK", type = 5}, --Mana tea + [116844] = {cooldown = 45, duration = 5, specs = {268,269,270}, talent = false, charges = 1, class = "MONK", type = 5}, --Ring of peace + [119381] = {cooldown = 50, duration = 3, specs = {268,269,270}, talent = false, charges = 1, class = "MONK", type = 5}, --Leg Sweep --hunter -- 253 - Beast Mastery -- 254 - Marksmenship -- 255 - Survival - [193530] = {cooldown = 120, duration = 20, specs = {253}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Aspect of the Wild - [19574] = {cooldown = 90, duration = 12, specs = {253}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Bestial Wrath - [201430] = {cooldown = 180, duration = 12, specs = {253}, talent =23044, charges = 1, class = "HUNTER", type = 1}, --Stampede (talent) - [288613] = {cooldown = 180, duration = 15, specs = {254}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Trueshot - [199483] = {cooldown = 60, duration = 60, specs = {253,254,255}, talent =23100, charges = 1, class = "HUNTER", type = 2}, --Camouflage (talent) - [281195] = {cooldown = 180, duration = 6, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Survival of the Fittest - [266779] = {cooldown = 120, duration = 20, specs = {255}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Coordinated Assault - [186265] = {cooldown = 180, duration = 8, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Aspect of the Turtle - [109304] = {cooldown = 120, duration = false, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Exhilaration - [186257] = {cooldown = 144, duration = 14, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the cheetah - [19577] = {cooldown = 60, duration = 5, specs = {253,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Intimidation - [109248] = {cooldown = 45, duration = 10, specs = {253,254,255}, talent =22499, charges = 1, class = "HUNTER", type = 5}, --Binding Shot (talent) - [187650] = {cooldown = 25, duration = 60, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Freezing Trap - [186289] = {cooldown = 72, duration = 15, specs = {255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the eagle + [193530] = {cooldown = 120, duration = 20, specs = {253}, talent = false, charges = 1, class = "HUNTER", type = 1}, --Aspect of the Wild + [19574] = {cooldown = 90, duration = 12, specs = {253}, talent = false, charges = 1, class = "HUNTER", type = 1}, --Bestial Wrath + [201430] = {cooldown = 180, duration = 12, specs = {253}, talent = false, charges = 1, class = "HUNTER", type = 1}, --Stampede + [288613] = {cooldown = 180, duration = 15, specs = {254}, talent = false, charges = 1, class = "HUNTER", type = 1}, --Trueshot + [199483] = {cooldown = 60, duration = 60, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 2}, --Camouflage + [281195] = {cooldown = 180, duration = 6, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 2}, --Survival of the Fittest + [266779] = {cooldown = 120, duration = 20, specs = {255}, talent = false, charges = 1, class = "HUNTER", type = 1}, --Coordinated Assault + [186265] = {cooldown = 180, duration = 8, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 2}, --Aspect of the Turtle + [109304] = {cooldown = 120, duration = false, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 2}, --Exhilaration + [186257] = {cooldown = 144, duration = 14, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the cheetah + [19577] = {cooldown = 60, duration = 5, specs = {253,255}, talent = false, charges = 1, class = "HUNTER", type = 5}, --Intimidation + [109248] = {cooldown = 45, duration = 10, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 5}, --Binding Shot + [187650] = {cooldown = 25, duration = 60, specs = {253,254,255}, talent = false, charges = 1, class = "HUNTER", type = 5}, --Freezing Trap + [186289] = {cooldown = 72, duration = 15, specs = {255}, talent = false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the eagle --druid -- 102 - Balance @@ -424,135 +424,142 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = { -- 104 - Guardian -- 105 - Restoration - [77761] = {cooldown = 120, duration = 8, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 4}, --Stampeding Roar - [194223] = {cooldown = 180, duration = 20, specs = {102}, talent =false, charges = 1, class = "DRUID", type = 1}, --Celestial Alignment - [102560] = {cooldown = 180, duration = 30, specs = {102}, talent =21702, charges = 1, class = "DRUID", type = 1}, --Incarnation: Chosen of Elune (talent) - [22812] = {cooldown = 60, duration = 12, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 2}, --Barkskin - [108238] = {cooldown = 90, duration = false, specs = {102,103,104,105}, talent =18570, charges = 1, class = "DRUID", type = 2}, --Renewal (talent) - [29166] = {cooldown = 180, duration = 12, specs = {102,105}, talent =false, charges = 1, class = "DRUID", type = 3}, --Innervate - [106951] = {cooldown = 180, duration = 15, specs = {103,104}, talent =false, charges = 1, class = "DRUID", type = 1}, --Berserk - [102543] = {cooldown = 30, duration = 180, specs = {103}, talent =21704, charges = 1, class = "DRUID", type = 1}, --Incarnation: King of the Jungle (talent) - [61336] = {cooldown = 120, duration = 6, specs = {103,104}, talent =false, charges = 2, class = "DRUID", type = 2}, --Survival Instincts (2min feral 4min guardian, same spellid) - [102558] = {cooldown = 180, duration = 30, specs = {104}, talent =22388, charges = 1, class = "DRUID", type = 2}, --Incarnation: Guardian of Ursoc (talent) - [33891] = {cooldown = 180, duration = 30, specs = {105}, talent =22421, charges = 1, class = "DRUID", type = 2}, --Incarnation: Tree of Life (talent) - [102342] = {cooldown = 60, duration = 12, specs = {105}, talent =false, charges = 1, class = "DRUID", type = 3}, --Ironbark - [203651] = {cooldown = 60, duration = false, specs = {105}, talent =22422, charges = 1, class = "DRUID", type = 3}, --Overgrowth (talent) - [740] = {cooldown = 180, duration = 8, specs = {105}, talent =false, charges = 1, class = "DRUID", type = 4}, --Tranquility - [197721] = {cooldown = 90, duration = 8, specs = {105}, talent =22404, charges = 1, class = "DRUID", type = 4}, --Flourish (talent) - [132469] = {cooldown = 30, duration = false, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 5}, --Typhoon - [319454] = {cooldown = 300, duration = 45, specs = {102,103,104,105}, talent =18577, charges = 1, class = "DRUID", type = 5}, --Heart of the Wild (talent) - [102793] = {cooldown = 60, duration = 10, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 5}, --Ursol's Vortex + [22812] = {cooldown = 60, duration = 12, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 2}, --Barkskin + [106951] = {cooldown = 180, duration = 15, specs = {103, 104}, talent = false, charges = 1, class = "DRUID", type = 1}, --Berserk + [194223] = {cooldown = 180, duration = 20, specs = {102}, talent = false, charges = 1, class = "DRUID", type = 1}, --Celestial Alignment + [391528] = {cooldown = 120, duration = 4, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 1}, --Convoke the Spirits + [197721] = {cooldown = 90, duration = 8, specs = {105}, talent = false, charges = 1, class = "DRUID", type = 4}, --Flourish + [319454] = {cooldown = 300, duration = 45, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 1}, --Heart of the Wild + [102543] = {cooldown = 30, duration = 180, specs = {103}, talent = false, charges = 1, class = "DRUID", type = 1}, --Incarnation: Avatar of Ashamane + [102560] = {cooldown = 180, duration = 30, specs = {102}, talent = false, charges = 1, class = "DRUID", type = 1}, --Incarnation: Chosen of Elune + [102558] = {cooldown = 180, duration = 30, specs = {104}, talent = false, charges = 1, class = "DRUID", type = 2}, --Incarnation: Guardian of Ursoc + [33891] = {cooldown = 180, duration = 30, specs = {105}, talent = false, charges = 1, class = "DRUID", type = 4}, --Incarnation: Tree of Life + [99] = {cooldown = 30, duration = 3, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 8}, --Incapacitating Roar + [29166] = {cooldown = 180, duration = 12, specs = {102, 105}, talent = false, charges = 1, class = "DRUID", type = 5}, --Innervate + [102342] = {cooldown = 60, duration = 12, specs = {105}, talent = false, charges = 1, class = "DRUID", type = 3}, --Ironbark + [203651] = {cooldown = 60, duration = 0, specs = {105}, talent = false, charges = 1, class = "DRUID", type = 3}, --Overgrowth + [108238] = {cooldown = 90, duration = 0, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 2}, --Renewal + [77761] = {cooldown = 120, duration = 8, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 4}, --Stampeding Roar | 106898 + [61336] = {cooldown = 120, duration = 6, specs = {103, 104}, talent = false, charges = 1, class = "DRUID", type = 2}, --Survival Instincts + [740] = {cooldown = 180, duration = 8, specs = {105}, talent = false, charges = 1, class = "DRUID", type = 4}, --Tranquility + [132469] = {cooldown = 30, duration = 0, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 8}, --Typhoon + [102793] = {cooldown = 60, duration = 10, specs = {102, 103, 104, 105}, talent = false, charges = 1, class = "DRUID", type = 8}, --Ursol's Vortex --death knight -- 252 - Unholy -- 251 - Frost -- 252 - Blood - [275699] = {cooldown = 90, duration = 15, specs = {252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Apocalypse - [42650] = {cooldown = 480, duration = 30, specs = {252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Army of the Dead - [49206] = {cooldown = 180, duration = 30, specs = {252}, talent =22110, charges = 1, class = "DEATHKNIGHT", type = 1}, --Summon Gargoyle (talent) - [207289] = {cooldown = 78, duration = 12, specs = {252}, talent =22538, charges = 1, class = "DEATHKNIGHT", type = 1}, --Unholy Assault (talent) - [48743] = {cooldown = 120, duration = 15, specs = {250,251,252}, talent =23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Death Pact (talent) - [48707] = {cooldown = 60, duration = 10, specs = {250,251,252}, talent =23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Anti-magic Shell - [152279] = {cooldown = 120, duration = 5, specs = {251}, talent =22537, charges = 1, class = "DEATHKNIGHT", type = 1}, --Breath of Sindragosa (talent) - [47568] = {cooldown = 120, duration = 20, specs = {251}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Empower Rune Weapon - [279302] = {cooldown = 120, duration = 10, specs = {251}, talent =22535, charges = 1, class = "DEATHKNIGHT", type = 1}, --Frostwyrm's Fury (talent) - [49028] = {cooldown = 120, duration = 8, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Dancing Rune Weapon - [55233] = {cooldown = 90, duration = 10, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Vampiric Blood - [48792] = {cooldown = 120, duration = 8, specs = {250,251,252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Icebound Fortitude - [51052] = {cooldown = 120, duration = 10, specs = {250,251,252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 4}, --Anti-magic Zone - [219809] = {cooldown = 60, duration = 8, specs = {250}, talent =23454, charges = 1, class = "DEATHKNIGHT", type = 2}, --Tombstone (talent) - [108199] = {cooldown = 120, duration = false, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Gorefiend's Grasp - [207167] = {cooldown = 60, duration = 5, specs = {251}, talent =22519, charges = 1, class = "DEATHKNIGHT", type = 5}, --Blinding Sleet (talent) - [108194] = {cooldown = 45, duration = 4, specs = {251,252}, talent =22520, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate (talent) - [221562] = {cooldown = 45, duration = 5, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate - [212552] = {cooldown = 60, duration = 4, specs = {250,251,252}, talent =19228, charges = 1, class = "DEATHKNIGHT", type = 5}, --Wraith walk (talent) + [383269] = {cooldown = 120, duration = 12, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Abomination Limb + [48707] = {cooldown = 60, duration = 10, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Anti-Magic Shell + [51052] = {cooldown = 120, duration = 10, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 4}, --Anti-Magic Zone + [275699] = {cooldown = 90, duration = 15, specs = {252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Apocalypse + [42650] = {cooldown = 480, duration = 30, specs = {252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Army of the Dead + [221562] = {cooldown = 45, duration = 5, specs = {250}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 8}, --Asphyxiate + [108194] = {cooldown = 45, duration = 4, specs = {251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 8}, --Asphyxiate + [207167] = {cooldown = 60, duration = 5, specs = {251}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 8}, --Blinding Sleet + [152279] = {cooldown = 120, duration = 5, specs = {251}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Breath of Sindragosa + [49028] = {cooldown = 120, duration = 8, specs = {250}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Dancing Rune Weapon + [48743] = {cooldown = 120, duration = 15, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Death Pact + [47568] = {cooldown = 120, duration = 20, specs = {251}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Empower Rune Weapon + [279302] = {cooldown = 120, duration = 10, specs = {251}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Frostwyrm's Fury + [108199] = {cooldown = 120, duration = 0, specs = {250}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Gorefiend's Grasp + [48792] = {cooldown = 120, duration = 8, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Icebound Fortitude + [46585] = {cooldown = 120, duration = 60, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Raise Dead + [49206] = {cooldown = 180, duration = 30, specs = {252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Summon Gargoyle + [219809] = {cooldown = 60, duration = 8, specs = {250}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Tombstone + [207289] = {cooldown = 78, duration = 12, specs = {252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Unholy Assault + [55233] = {cooldown = 90, duration = 10, specs = {250}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Vampiric Blood + [212552] = {cooldown = 60, duration = 4, specs = {250, 251, 252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Wraith Walk + --demon hunter -- 577 - Havoc -- 581 - Vengance - [191427] = {cooldown = 240, duration = 30, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 1}, --Metamorphosis - [198589] = {cooldown = 60, duration = 10, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Blur - [196555] = {cooldown = 120, duration = 5, specs = {577}, talent =21865, charges = 1, class = "DEMONHUNTER", type = 2}, --Netherwalk (talent) - [187827] = {cooldown = 180, duration = 15, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Metamorphosis - [196718] = {cooldown = 180, duration = 8, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 4}, --Darkness - [188501] = {cooldown = 30, duration = 10, specs = {577,581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Spectral Sight - [179057] = {cooldown = 60, duration = 2, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Chaos Nova - [211881] = {cooldown = 30, duration = 4, specs = {577}, talent =22767, charges = 1, class = "DEMONHUNTER", type = 5}, --Fel Eruption (talent) - [320341] = {cooldown = 90, duration = false, specs = {581}, talent =21902, charges = 1, class = "DEMONHUNTER", type = 1}, --Bulk Extraction (talent) - [204021] = {cooldown = 60, duration = 10, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Fiery Brand - [263648] = {cooldown = 30, duration = 12, specs = {581}, talent =22768, charges = 1, class = "DEMONHUNTER", type = 2}, --Soul Barrier (talent) - [207684] = {cooldown = 90, duration = 12, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Misery - [202137] = {cooldown = 60, duration = 8, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Silence - [202138] = {cooldown = 90, duration = 6, specs = {581}, talent =22511, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Chains (talent) - + [198589] = {cooldown = 60, duration = 10, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Blur + [320341] = {cooldown = 90, duration = 0, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Bulk Extraction + [179057] = {cooldown = 60, duration = 2, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 8}, --Chaos Nova + [196718] = {cooldown = 180, duration = 8, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 4}, --Darkness + [211881] = {cooldown = 30, duration = 4, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Fel Eruption + [204021] = {cooldown = 60, duration = 10, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Fiery Brand + [217832] = {cooldown = 45, duration = 0, specs = {577, 581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 8}, --Imprison + [187827] = {cooldown = 180, duration = 15, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Metamorphosis + [191427] = {cooldown = 240, duration = 30, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 1}, --Metamorphosis + [196555] = {cooldown = 120, duration = 5, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Netherwalk + [202138] = {cooldown = 90, duration = 6, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 8}, --Sigil of Chains + [207684] = {cooldown = 90, duration = 12, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 8}, --Sigil of Misery + [202137] = {cooldown = 60, duration = 8, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 6}, --Sigil of Silence + [263648] = {cooldown = 30, duration = 12, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Soul Barrier + [188501] = {cooldown = 30, duration = 10, specs = {577, 581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Spectral Sight + --mage -- 62 - Arcane -- 63 - Fire -- 64 - Frost - - [12042] = {cooldown = 90, duration = 10, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 1}, --Arcane Power - [12051] = {cooldown = 90, duration = 6, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 1}, --Evocation - [110960] = {cooldown = 120, duration = 20, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 2}, --Greater Invisibility - [235450] = {cooldown = 25, duration = 60, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 5}, --Prismatic Barrier - [235313] = {cooldown = 25, duration = 60, specs = {63}, talent =false, charges = 1, class = "MAGE", type = 5}, --Blazing Barrier - [11426] = {cooldown = 25, duration = 60, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 5}, --Ice Barrier - [190319] = {cooldown = 120, duration = 10, specs = {63}, talent =false, charges = 1, class = "MAGE", type = 1}, --Combustion - [55342] = {cooldown = 120, duration = 40, specs = {62,63,64}, talent =22445, charges = 1, class = "MAGE", type = 1}, --Mirror Image - [66] = {cooldown = 300, duration = 20, specs = {63,64}, talent =false, charges = 1, class = "MAGE", type = 2}, --Invisibility - [12472] = {cooldown = 180, duration = 20, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 1}, --Icy Veins - [205021] = {cooldown = 78, duration = 5, specs = {64}, talent =22309, charges = 1, class = "MAGE", type = 1}, --Ray of Frost (talent) - [45438] = {cooldown = 240, duration = 10, specs = {62,63,64}, talent =false, charges = 1, class = "MAGE", type = 2}, --Ice Block - [235219] = {cooldown = 300, duration = false, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 5}, --Cold Snap - [113724] = {cooldown = 45, duration = 10, specs = {62,63,64}, talent =22471, charges = 1, class = "MAGE", type = 5}, --Ring of Frost (talent) + [12042] = {cooldown = 90, duration = 10, specs = {62}, talent = false, charges = 1, class = "MAGE", type = 1}, --Arcane Power + [235313] = {cooldown = 25, duration = 60, specs = {63}, talent = false, charges = 1, class = "MAGE", type = 5}, --Blazing Barrier + [235219] = {cooldown = 300, duration = 0, specs = {64}, talent = false, charges = 1, class = "MAGE", type = 2}, --Cold Snap + [190319] = {cooldown = 120, duration = 10, specs = {63}, talent = false, charges = 1, class = "MAGE", type = 1}, --Combustion + [12051] = {cooldown = 90, duration = 6, specs = {62}, talent = false, charges = 1, class = "MAGE", type = 1}, --Evocation + [110960] = {cooldown = 120, duration = 20, specs = {62}, talent = false, charges = 1, class = "MAGE", type = 2}, --Greater Invisibility | 110959 + [11426] = {cooldown = 25, duration = 60, specs = {64}, talent = false, charges = 1, class = "MAGE", type = 2}, --Ice Barrier + [45438] = {cooldown = 240, duration = 10, specs = {62, 63, 64}, talent = false, charges = 1, class = "MAGE", type = 2}, --Ice Block + [12472] = {cooldown = 180, duration = 20, specs = {64}, talent = false, charges = 1, class = "MAGE", type = 1}, --Icy Veins + [66] = {cooldown = 300, duration = 20, specs = {63, 64}, talent = false, charges = 1, class = "MAGE", type = 2}, --Invisibility + [383121] = {cooldown = 60, duration = 0, specs = {62, 63, 64}, talent = false, charges = 1, class = "MAGE", type = 8}, --Mass Polymorph + [55342] = {cooldown = 120, duration = 40, specs = {62, 63, 64}, talent = false, charges = 1, class = "MAGE", type = 2}, --Mirror Image + [235450] = {cooldown = 25, duration = 60, specs = {62}, talent = false, charges = 1, class = "MAGE", type = 5}, --Prismatic Barrier + [205021] = {cooldown = 78, duration = 5, specs = {64}, talent = false, charges = 1, class = "MAGE", type = 1}, --Ray of Frost + [113724] = {cooldown = 45, duration = 10, specs = {62, 63, 64}, talent = false, charges = 1, class = "MAGE", type = 8}, --Ring of Frost --priest -- 256 - Discipline -- 257 - Holy -- 258 - Shadow - [10060] = {cooldown = 120, duration = 20, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 1}, --Power Infusion - [34433] = {cooldown = 180, duration = 15, specs = {256,258}, talent =false, charges = 1, class = "PRIEST", type = 1, ignoredIfTalent = 21719}, --Shadowfiend - [200174] = {cooldown = 60, duration = 15, specs = {258}, talent =21719, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) - [123040] = {cooldown = 60, duration = 12, specs = {256}, talent =22094, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) - [33206] = {cooldown = 180, duration = 8, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 3}, --Pain Suppression - [62618] = {cooldown = 180, duration = 10, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Power Word: Barrier - [271466] = {cooldown = 180, duration = 10, specs = {256}, talent =21184, charges = 1, class = "PRIEST", type = 4}, --Luminous Barrier (talent) - [47536] = {cooldown = 90, duration = 10, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Rapture - [19236] = {cooldown = 90, duration = 10, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Desperate Prayer - [200183] = {cooldown = 120, duration = 20, specs = {257}, talent =21644, charges = 1, class = "PRIEST", type = 2}, --Apotheosis (talent) - [47788] = {cooldown = 180, duration = 10, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 3}, --Guardian Spirit - [64843] = {cooldown = 180, duration = 8, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Divine Hymn - [64901] = {cooldown = 300, duration = 6, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Symbol of Hope - [265202] = {cooldown = 720, duration = false, specs = {257}, talent =23145, charges = 1, class = "PRIEST", type = 4}, --Holy Word: Salvation (talent) - [109964] = {cooldown = 60, duration = 12, specs = {256}, talent =21184, charges = 1, class = "PRIEST", type = 4}, --Spirit Shell (talent) - [8122] = {cooldown = 60, duration = 8, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Psychic Scream - [193223] = {cooldown = 240, duration = 60, specs = {258}, talent =21979, charges = 1, class = "PRIEST", type = 1}, --Surrender to Madness (talent) - [47585] = {cooldown = 120, duration = 6, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 2}, --Dispersion - [15286] = {cooldown = 120, duration = 15, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Vampiric Embrace - [64044] = {cooldown = 45, duration = 4, specs = {258}, talent =21752, charges = 1, class = "PRIEST", type = 5}, --Psychic Horror - [205369] = {cooldown = 30, duration = 6, specs = {258}, talent =23375, charges = 1, class = "PRIEST", type = 5}, --Mind Bomb - [228260] = {cooldown = 90, duration = 15, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 1}, --Void Erruption - [73325] = {cooldown = 90, duration = false, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Leap of Faith + [200183] = {cooldown = 120, duration = 20, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 2}, --Apotheosis + [19236] = {cooldown = 90, duration = 10, specs = {256, 257, 258}, talent = false, charges = 1, class = "PRIEST", type = 2}, --Desperate Prayer + [47585] = {cooldown = 120, duration = 6, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 2}, --Dispersion + [64843] = {cooldown = 180, duration = 8, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Divine Hymn + [246287] = {cooldown = 90, duration = 0, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Evangelism + [47788] = {cooldown = 180, duration = 10, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 3}, --Guardian Spirit + [265202] = {cooldown = 720, duration = 0, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Holy Word: Salvation + [372835] = {cooldown = 180, duration = 0, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Lightwell + [73325] = {cooldown = 90, duration = 0, specs = {256, 257, 258}, talent = false, charges = 1, class = "PRIEST", type = 5}, --Leap of Faith + [271466] = {cooldown = 180, duration = 10, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Luminous Barrier + [205369] = {cooldown = 30, duration = 6, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 5}, --Mind Bomb + [200174] = {cooldown = 60, duration = 15, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 1}, --Mindbender spec 258 + [123040] = {cooldown = 60, duration = 12, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 1}, --Mindbender spec 256 + [33206] = {cooldown = 180, duration = 8, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 3}, --Pain Suppression + [10060] = {cooldown = 120, duration = 20, specs = {256, 257, 258}, talent = false, charges = 1, class = "PRIEST", type = 1}, --Power Infusion + [62618] = {cooldown = 180, duration = 10, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Power Word: Barrier + [64044] = {cooldown = 45, duration = 4, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 8}, --Psychic Horror + [8122] = {cooldown = 60, duration = 8, specs = {256, 257, 258}, talent = false, charges = 1, class = "PRIEST", type = 8}, --Psychic Scream + [47536] = {cooldown = 90, duration = 10, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 5}, --Rapture + [34433] = {cooldown = 180, duration = 15, specs = {256, 258}, talent = false, charges = 1, class = "PRIEST", type = 1}, --Shadowfiend + [109964] = {cooldown = 60, duration = 12, specs = {256}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Spirit Shell + [64901] = {cooldown = 300, duration = 6, specs = {257}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Symbol of Hope + [15286] = {cooldown = 120, duration = 15, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 4}, --Vampiric Embrace + [228260] = {cooldown = 90, duration = 15, specs = {258}, talent = false, charges = 1, class = "PRIEST", type = 1}, --Void Eruption --rogue -- 259 - Assasination -- 260 - Outlaw -- 261 - Subtlety - [79140] = {cooldown = 120, duration = 20, specs = {259}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Vendetta - [1856] = {cooldown = 120, duration = 3, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Vanish - [5277] = {cooldown = 120, duration = 10, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Evasion - [31224] = {cooldown = 120, duration = 5, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Cloak of Shadows - [2094] = {cooldown = 120, duration = 60, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Blind - [114018] = {cooldown = 360, duration = 15, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Shroud of Concealment - [185311] = {cooldown = 30, duration = 15, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Crimson Vial - [13750] = {cooldown = 180, duration = 20, specs = {260}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Adrenaline Rush - [51690] = {cooldown = 120, duration = 2, specs = {260}, talent =23175, charges = 1, class = "ROGUE", type = 1}, --Killing Spree (talent) - [199754] = {cooldown = 120, duration = 10, specs = {260}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Riposte - [343142] = {cooldown = 90, duration = 10, specs = {260}, talent =19250, charges = 1, class = "ROGUE", type = 5}, --Dreadblades - [121471] = {cooldown = 180, duration = 20, specs = {261}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Shadow Blades + [13750] = {cooldown = 180, duration = 20, specs = {260}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Adrenaline Rush + [2094] = {cooldown = 120, duration = 60, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 8}, --Blind + [31224] = {cooldown = 120, duration = 5, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 2}, --Cloak of Shadows + [185311] = {cooldown = 30, duration = 15, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 2}, --Crimson Vial + [343142] = {cooldown = 90, duration = 10, specs = {260}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Dreadblades + [5277] = {cooldown = 120, duration = 10, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 2}, --Evasion + [51690] = {cooldown = 120, duration = 2, specs = {260}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Killing Spree + [199754] = {cooldown = 120, duration = 10, specs = {260}, talent = false, charges = 1, class = "ROGUE", type = 2}, --Riposte + [121471] = {cooldown = 180, duration = 20, specs = {261}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Shadow Blades + [114018] = {cooldown = 360, duration = 15, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 5}, --Shroud of Concealment + [1856] = {cooldown = 120, duration = 3, specs = {259, 260, 261}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Vanish + [79140] = {cooldown = 120, duration = 20, specs = {259}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Vendetta } LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {}; diff --git a/Libs/NickTag-1.0/NickTag-1.0.lua b/Libs/NickTag-1.0/NickTag-1.0.lua index 389b0fe82..0e00f1b08 100644 --- a/Libs/NickTag-1.0/NickTag-1.0.lua +++ b/Libs/NickTag-1.0/NickTag-1.0.lua @@ -321,8 +321,8 @@ end --when the roster changes or the player enters the game, send the persona to guild mates --send on roster update can only happen every 30 seconds, if is on cooldown, it'll schedule an update - NickTag.EventFrame:RegisterEvent ("GROUP_ROSTER_UPDATE") - NickTag.EventFrame:RegisterEvent ("PLAYER_LOGIN") + NickTag.EventFrame:RegisterEvent("GROUP_ROSTER_UPDATE") + NickTag.EventFrame:RegisterEvent("PLAYER_LOGIN") NickTag.EventFrame:SetScript("OnEvent", NickTag.OnEvent) diff --git a/boot.lua b/boot.lua index c19a37b60..77bac1dab 100644 --- a/boot.lua +++ b/boot.lua @@ -36,13 +36,16 @@ Details.gameVersionPrefix = gameVersionPrefix function Details.GetVersionString() - local alphaId = _detalhes.curseforgeVersion:match("%-(%d+)%-") + local curseforgeVersion = _detalhes.curseforgeVersion or "" + local alphaId = curseforgeVersion:match("%-(%d+)%-") + if (not alphaId) then --this is a release version alphaId = "R1" else alphaId = "A" .. alphaId end + return Details.gameVersionPrefix .. Details.build_counter .. "." .. Details.acounter .. "." .. alphaId .. "(" .. Details.game_version .. ")" end @@ -572,7 +575,7 @@ do _detalhes.gump:NewColor("DETAILS_PLUGIN_BUTTONTEXT_COLOR", 0.9999, 0.8196, 0, 1) - _detalhes.gump:InstallTemplate ("button", "DETAILS_PLUGINPANEL_BUTTON_TEMPLATE", + _detalhes.gump:InstallTemplate("button", "DETAILS_PLUGINPANEL_BUTTON_TEMPLATE", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {0, 0, 0, .5}, @@ -580,7 +583,7 @@ do onentercolor = {0.3, 0.3, 0.3, .5}, } ) - _detalhes.gump:InstallTemplate ("button", "DETAILS_PLUGINPANEL_BUTTONSELECTED_TEMPLATE", + _detalhes.gump:InstallTemplate("button", "DETAILS_PLUGINPANEL_BUTTONSELECTED_TEMPLATE", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {0, 0, 0, .5}, @@ -589,7 +592,7 @@ do } ) - _detalhes.gump:InstallTemplate ("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE", + _detalhes.gump:InstallTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {1, 1, 1, .5}, @@ -601,7 +604,7 @@ do height = 20, } ) - _detalhes.gump:InstallTemplate ("button", "DETAILS_PLUGIN_BUTTONSELECTED_TEMPLATE", + _detalhes.gump:InstallTemplate("button", "DETAILS_PLUGIN_BUTTONSELECTED_TEMPLATE", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {1, 1, 1, .5}, @@ -614,14 +617,14 @@ do } ) - _detalhes.gump:InstallTemplate ("button", "DETAILS_TAB_BUTTON_TEMPLATE", + _detalhes.gump:InstallTemplate("button", "DETAILS_TAB_BUTTON_TEMPLATE", { width = 100, height = 20, }, "DETAILS_PLUGIN_BUTTON_TEMPLATE" ) - _detalhes.gump:InstallTemplate ("button","DETAILS_TAB_BUTTONSELECTED_TEMPLATE", + _detalhes.gump:InstallTemplate("button","DETAILS_TAB_BUTTONSELECTED_TEMPLATE", { width = 100, height = 20, @@ -868,7 +871,7 @@ do --Event Frame _detalhes.listener = CreateFrame("Frame", nil, UIParent) - _detalhes.listener:RegisterEvent ("ADDON_LOADED") + _detalhes.listener:RegisterEvent("ADDON_LOADED") _detalhes.listener:SetFrameStrata("LOW") _detalhes.listener:SetFrameLevel(9) _detalhes.listener.FrameTime = 0 @@ -926,7 +929,7 @@ do self.isMoving = nil end end) - f:SetToplevel (true) + f:SetToplevel(true) f:SetMovable(true) end @@ -942,6 +945,8 @@ do --register textures and fonts for shared media local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") --default bars + SharedMedia:Register("statusbar", "Details Hyanda", [[Interface\AddOns\Details\images\bar_hyanda]]) + 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]]) @@ -1062,6 +1067,7 @@ do Details.failed_to_load = C_Timer.NewTimer(1, function() Details.Schedules.NewTimer(20, _detalhes.WelcomeMsgLogon) end) --key binds + --[=[ --header _G ["BINDING_HEADER_Details"] = "Details!" _G ["BINDING_HEADER_DETAILS_KEYBIND_SEGMENTCONTROL"] = Loc ["STRING_KEYBIND_SEGMENTCONTROL"] @@ -1097,6 +1103,7 @@ do _G ["BINDING_NAME_DETAILS_BOOKMARK8"] = format(Loc ["STRING_KEYBIND_BOOKMARK_NUMBER"], 8) _G ["BINDING_NAME_DETAILS_BOOKMARK9"] = format(Loc ["STRING_KEYBIND_BOOKMARK_NUMBER"], 9) _G ["BINDING_NAME_DETAILS_BOOKMARK10"] = format(Loc ["STRING_KEYBIND_BOOKMARK_NUMBER"], 10) + --]=] end diff --git a/classes/class_damage.lua b/classes/class_damage.lua index 574880e4b..bb96f9d05 100644 --- a/classes/class_damage.lua +++ b/classes/class_damage.lua @@ -14,11 +14,11 @@ local _table_sort = table.sort --lua local local tinsert = table.insert --lua local local _table_size = table.getn --lua local - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local _getmetatable = getmetatable --lua local local ipairs = ipairs --lua local local pairs = pairs --lua local - local _rawget= rawget --lua local + local rawget= rawget --lua local local _math_min = math.min --lua local local _math_max = math.max --lua local local abs = math.abs --lua local @@ -440,7 +440,7 @@ end spells = container_habilidades:NovoContainer (container_damage) } - _setmetatable(_new_damageActor, atributo_damage) + setmetatable(_new_damageActor, atributo_damage) return _new_damageActor end @@ -950,7 +950,7 @@ end thisLine.colocacao = colocacao if (not _getmetatable (tabela)) then - _setmetatable(tabela, {__call = RefreshBarraBySpell}) + setmetatable(tabela, {__call = RefreshBarraBySpell}) tabela._custom = true end @@ -1141,7 +1141,7 @@ end thisLine.colocacao = colocacao if (not _getmetatable (tabela)) then - _setmetatable(tabela, {__call = RefreshBarraFrags}) + setmetatable(tabela, {__call = RefreshBarraFrags}) tabela._custom = true end @@ -5875,7 +5875,7 @@ end function Details.refresh:r_atributo_damage (este_jogador, shadow) --restaura metas do ator - _setmetatable(este_jogador, Details.atributo_damage) + setmetatable(este_jogador, Details.atributo_damage) este_jogador.__index = Details.atributo_damage --restaura as metas dos containers Details.refresh:r_container_habilidades (este_jogador.spells, shadow and shadow.spells) diff --git a/classes/class_heal.lua b/classes/class_heal.lua index 57889b452..84b5a655f 100644 --- a/classes/class_heal.lua +++ b/classes/class_heal.lua @@ -2,7 +2,7 @@ --lua locals local _cstr = string.format local _math_floor = math.floor -local _setmetatable = setmetatable +local setmetatable = setmetatable local pairs = pairs local ipairs = ipairs local _unpack = unpack @@ -112,7 +112,7 @@ function atributo_heal:NovaTabela (serial, nome, link) targets_absorbs = {} } - _setmetatable(_new_healActor, atributo_heal) + setmetatable(_new_healActor, atributo_heal) return _new_healActor end @@ -2915,7 +2915,7 @@ atributo_heal.__sub = function(tabela1, tabela2) end function _detalhes.refresh:r_atributo_heal (este_jogador, shadow) - _setmetatable(este_jogador, atributo_heal) + setmetatable(este_jogador, atributo_heal) este_jogador.__index = atributo_heal _detalhes.refresh:r_container_habilidades (este_jogador.spells, shadow and shadow.spells) diff --git a/classes/class_instance.lua b/classes/class_instance.lua index 06de13b7a..886aa1508 100644 --- a/classes/class_instance.lua +++ b/classes/class_instance.lua @@ -9,7 +9,7 @@ local _math_floor = math.floor --lua local local abs = math.abs --lua local local _table_remove = table.remove --lua local local _getmetatable = getmetatable --lua local -local _setmetatable = setmetatable --lua local +local setmetatable = setmetatable --lua local local _string_len = string.len --lua local local _unpack = unpack --lua local local _cstr = string.format --lua local @@ -49,7 +49,7 @@ local segmentos = _detalhes.segmentos for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (not _getmetatable (instancia)) then - _setmetatable(_detalhes.tabela_instancias[index], _detalhes) + setmetatable(_detalhes.tabela_instancias[index], _detalhes) end end @@ -1353,7 +1353,7 @@ end LastModo = modo_grupo, } - _setmetatable(new_instance, _detalhes) + setmetatable(new_instance, _detalhes) _detalhes.tabela_instancias [#_detalhes.tabela_instancias+1] = new_instance --fill the empty instance with default values @@ -1375,7 +1375,7 @@ end function _detalhes:NovaInstancia (ID) local new_instance = {} - _setmetatable(new_instance, _detalhes) + setmetatable(new_instance, _detalhes) _detalhes.tabela_instancias [#_detalhes.tabela_instancias+1] = new_instance --instance number @@ -3012,7 +3012,7 @@ function _detalhes:FormatReportLines (report_table, data, f1, f2, f3) fontSize = 10 end local fonte, _, flags = _detalhes.fontstring_len:GetFont() - _detalhes.fontstring_len:SetFont (fonte, fontSize, flags) + _detalhes.fontstring_len:SetFont(fonte, fontSize, flags) _detalhes.fontstring_len:SetText("DEFAULT NAME") local biggest_len = _detalhes.fontstring_len:GetStringWidth() diff --git a/classes/class_resources.lua b/classes/class_resources.lua index 3161fd5d5..17ca06e9d 100644 --- a/classes/class_resources.lua +++ b/classes/class_resources.lua @@ -4,10 +4,10 @@ local _cstr = string.format local _math_floor = math.floor local _table_sort = table.sort local tinsert = table.insert -local _setmetatable = setmetatable +local setmetatable = setmetatable local ipairs = ipairs local pairs = pairs -local _rawget= rawget +local rawget= rawget local _math_min = math.min local _math_max = math.max local _bit_band = bit.band @@ -87,7 +87,7 @@ function atributo_energy:NovaTabela (serial, nome, link) spells = container_habilidades:NovoContainer (container_energy), } - _setmetatable(_new_energyActor, atributo_energy) + setmetatable(_new_energyActor, atributo_energy) return _new_energyActor end @@ -1523,7 +1523,7 @@ function atributo_energy:ColetarLixo (lastevent) end function _detalhes.refresh:r_atributo_energy (este_jogador, shadow) - _setmetatable(este_jogador, _detalhes.atributo_energy) + setmetatable(este_jogador, _detalhes.atributo_energy) este_jogador.__index = _detalhes.atributo_energy _detalhes.refresh:r_container_habilidades (este_jogador.spells, shadow and shadow.spells) diff --git a/classes/class_spelldamage.lua b/classes/class_spelldamage.lua index 6e50d6e84..bd965ec46 100644 --- a/classes/class_spelldamage.lua +++ b/classes/class_spelldamage.lua @@ -1,32 +1,23 @@ -- damage ability file - local _detalhes = _G._detalhes local _ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --local pointers - local ipairs = ipairs--lua local - local pairs = pairs--lua local - local _UnitAura = UnitAura--api local + local ipairs = ipairs + local pairs = pairs + local _UnitAura = UnitAura ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --constants - - local alvo_da_habilidade = _detalhes.alvo_da_habilidade local habilidade_dano = _detalhes.habilidade_dano - local container_combatentes = _detalhes.container_combatentes - local container_damage_target = _detalhes.container_type.CONTAINER_DAMAGETARGET_CLASS - local container_playernpc = _detalhes.container_type.CONTAINER_PLAYERNPC - local _recording_ability_with_buffs = false ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --internals - function habilidade_dano:NovaTabela (id, link, token) - + function habilidade_dano:NovaTabela(id, link, token) local _newDamageSpell = { - total = 0, --total damage counter = 0, --counter id = id, --spellid @@ -37,7 +28,7 @@ n_max = 0, n_amt = 0, n_dmg = 0, - + --critical hits c_min = 0, c_max = 0, @@ -47,11 +38,11 @@ --glacing hits g_amt = 0, g_dmg = 0, - + --resisted r_amt = 0, r_dmg = 0, - + --blocked b_amt = 0, b_dmg = 0, @@ -59,29 +50,29 @@ --obsorved a_amt = 0, a_dmg = 0, - + targets = {}, extra = {} } - + if (token == "SPELL_PERIODIC_DAMAGE") then _detalhes:SpellIsDot (id) end - + return _newDamageSpell end function habilidade_dano:AddMiss (serial, nome, flags, who_nome, missType) self.counter = self.counter + 1 self [missType] = (self [missType] or 0) + 1 - + self.targets [nome] = self.targets [nome] or 0 end function habilidade_dano:Add (serial, nome, flag, amount, who_nome, resisted, blocked, absorbed, critical, glacing, token, isoffhand, isreflected) self.total = self.total + amount - + --if is reflected add the spellId into the extra table --this is too show which spells has been reflected if (isreflected) then @@ -89,24 +80,24 @@ end self.targets [nome] = (self.targets [nome] or 0) + amount - + self.counter = self.counter + 1 - + if (resisted and resisted > 0) then self.r_dmg = self.r_dmg+amount --tabela.total � o total de dano self.r_amt = self.r_amt+1 --tabela.total � o total de dano end - + if (blocked and blocked > 0) then self.b_dmg = self.b_dmg+amount --amount � o total de dano self.b_amt = self.b_amt+1 --amount � o total de dano end - + if (absorbed and absorbed > 0) then self.a_dmg = self.a_dmg+amount --amount � o total de dano self.a_amt = self.a_amt+1 --amount � o total de dano end - + if (glacing) then self.g_dmg = self.g_dmg+amount --amount � o total de dano self.g_amt = self.g_amt+1 --amount � o total de dano @@ -120,7 +111,7 @@ if (self.c_min > amount or self.c_min == 0) then self.c_min = amount end - + else self.n_dmg = self.n_dmg+amount self.n_amt = self.n_amt+1 @@ -132,18 +123,18 @@ end end - + if (_recording_ability_with_buffs) then if (who_nome == _detalhes.playername) then --aqui ele vai detalhar tudo sobre a magia usada - + local buffsNames = _detalhes.SoloTables.BuffsTableNameCache - + local SpellBuffDetails = self.BuffTable if (not SpellBuffDetails) then self.BuffTable = {} SpellBuffDetails = self.BuffTable end - + if (token == "SPELL_PERIODIC_DAMAGE") then --precisa ver se ele tinha na hora que aplicou local SoloDebuffPower = _detalhes.tabela_vigente.SoloDebuffPower @@ -165,7 +156,7 @@ end end end - + else for BuffName, _ in pairs(_detalhes.Buffs.BuffsTable) do diff --git a/classes/class_spellresources.lua b/classes/class_spellresources.lua index 935b40b1d..f40971389 100644 --- a/classes/class_spellresources.lua +++ b/classes/class_spellresources.lua @@ -6,7 +6,7 @@ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --local pointers - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local ipairs = ipairs --lua local local _UnitAura = UnitAura --api local diff --git a/classes/class_spellutility.lua b/classes/class_spellutility.lua index 89a16d856..1d144e8d1 100644 --- a/classes/class_spellutility.lua +++ b/classes/class_spellutility.lua @@ -5,7 +5,7 @@ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --local pointers - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local ipairs = ipairs --lua local local _UnitAura = UnitAura --api local diff --git a/classes/class_utility.lua b/classes/class_utility.lua index 7d2762cd2..4211b2fde 100644 --- a/classes/class_utility.lua +++ b/classes/class_utility.lua @@ -5,7 +5,7 @@ local tinsert = table.insert local _table_size = table.getn local ipairs = ipairs local pairs = pairs -local _rawget= rawget +local rawget= rawget local min = math.min local _math_max = math.max local abs = math.abs @@ -434,7 +434,7 @@ function atributo_misc:ReportSingleDeadLine (morte, instancia) fontSize = 10 end local fonte, _, flags = _detalhes.fontstring_len:GetFont() - _detalhes.fontstring_len:SetFont (fonte, fontSize, flags) + _detalhes.fontstring_len:SetFont(fonte, fontSize, flags) _detalhes.fontstring_len:SetText("thisisspacement") end local default_len = _detalhes.fontstring_len:GetStringWidth() diff --git a/classes/container_actors.lua b/classes/container_actors.lua index dd8cd400e..3f1ed2bcf 100644 --- a/classes/container_actors.lua +++ b/classes/container_actors.lua @@ -15,7 +15,7 @@ local UnitGUID = UnitGUID --api local local strsplit = strsplit --api local - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local _getmetatable = getmetatable --lua local local _bit_band = bit.band --lua local local _table_sort = table.sort --lua local @@ -160,7 +160,7 @@ _NameIndexTable = {} } - _setmetatable(_newContainer, container_combatentes) + setmetatable(_newContainer, container_combatentes) return _newContainer end @@ -876,7 +876,7 @@ function _detalhes.refresh:r_container_combatentes (container, shadow) --reconstr�i meta e indexes - _setmetatable(container, _detalhes.container_combatentes) + setmetatable(container, _detalhes.container_combatentes) container.__index = _detalhes.container_combatentes container.funcao_de_criacao = container_combatentes:FuncaoDeCriacao (container.tipo) diff --git a/classes/container_pets.lua b/classes/container_pets.lua index c9a87c2ed..0fe953d90 100644 --- a/classes/container_pets.lua +++ b/classes/container_pets.lua @@ -11,7 +11,7 @@ local IsInGroup = _G.IsInGroup local GetNumGroupMembers = _G.GetNumGroupMembers -- lua locals -local _setmetatable = setmetatable +local setmetatable = setmetatable local _bit_band = bit.band --lua local local pairs = pairs local ipairs = ipairs @@ -22,7 +22,7 @@ local is_ignored = _detalhes.pets_ignored function container_pets:NovoContainer() local esta_tabela = {} - _setmetatable(esta_tabela, _detalhes.container_pets) + setmetatable(esta_tabela, _detalhes.container_pets) esta_tabela.pets = {} --armazena a pool -> uma dictionary com o [serial do pet] -> nome do dono esta_tabela._ActorTable = {} --armazena os 15 ultimos pets do jogador -> [jogador nome] -> {nil, nil, nil, ...} return esta_tabela @@ -256,6 +256,6 @@ function _detalhes:SchedulePetUpdate(seconds) end function _detalhes.refresh:r_container_pets (container) - _setmetatable(container, container_pets) + setmetatable(container, container_pets) end diff --git a/classes/container_spells.lua b/classes/container_spells.lua index 37a11520b..63cfcbed2 100644 --- a/classes/container_spells.lua +++ b/classes/container_spells.lua @@ -6,7 +6,7 @@ local _ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --local pointers - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --constants @@ -39,7 +39,7 @@ local _ _ActorTable = {} } - _setmetatable(_newContainer, container_habilidades) + setmetatable(_newContainer, container_habilidades) return _newContainer end @@ -101,7 +101,7 @@ local _ function _detalhes.refresh:r_container_habilidades (container, shadow) --reconstr�i meta e indexes - _setmetatable(container, _detalhes.container_habilidades) + setmetatable(container, _detalhes.container_habilidades) container.__index = _detalhes.container_habilidades local func_criacao = container_habilidades:FuncaoDeCriacao (container.tipo) container.funcao_de_criacao = func_criacao diff --git a/classes/custom_damagedone.lua b/classes/custom_damagedone.lua index 94ee605d9..aea20b3b1 100644 --- a/classes/custom_damagedone.lua +++ b/classes/custom_damagedone.lua @@ -21,10 +21,10 @@ local _math_floor = math.floor --lua local local _table_sort = table.sort --lua local local tinsert = table.insert --lua local local _table_size = table.getn --lua local -local _setmetatable = setmetatable --lua local +local setmetatable = setmetatable --lua local local ipairs = ipairs --lua local local pairs = pairs --lua local -local _rawget= rawget --lua local +local rawget= rawget --lua local local _math_min = math.min --lua local local _math_max = math.max --lua local local _bit_band = bit.band --lua local diff --git a/classes/custom_healingdone.lua b/classes/custom_healingdone.lua index 566e672ae..970662cbc 100644 --- a/classes/custom_healingdone.lua +++ b/classes/custom_healingdone.lua @@ -14,10 +14,10 @@ local _table_sort = table.sort --lua local local tinsert = table.insert --lua local local _table_size = table.getn --lua local - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local ipairs = ipairs --lua local local pairs = pairs --lua local - local _rawget= rawget --lua local + local rawget= rawget --lua local local _math_min = math.min --lua local local _math_max = math.max --lua local local _bit_band = bit.band --lua local diff --git a/core/gears.lua b/core/gears.lua index 2a9648da1..f37d6dcbc 100644 --- a/core/gears.lua +++ b/core/gears.lua @@ -1811,11 +1811,11 @@ local ilvl_core = _detalhes:CreateEventListener() ilvl_core.amt_inspecting = 0 _detalhes.ilevel.core = ilvl_core -ilvl_core:RegisterEvent ("GROUP_ONENTER", "OnEnter") -ilvl_core:RegisterEvent ("GROUP_ONLEAVE", "OnLeave") -ilvl_core:RegisterEvent ("COMBAT_PLAYER_ENTER", "EnterCombat") -ilvl_core:RegisterEvent ("COMBAT_PLAYER_LEAVE", "LeaveCombat") -ilvl_core:RegisterEvent ("ZONE_TYPE_CHANGED", "ZoneChanged") +ilvl_core:RegisterEvent("GROUP_ONENTER", "OnEnter") +ilvl_core:RegisterEvent("GROUP_ONLEAVE", "OnLeave") +ilvl_core:RegisterEvent("COMBAT_PLAYER_ENTER", "EnterCombat") +ilvl_core:RegisterEvent("COMBAT_PLAYER_LEAVE", "LeaveCombat") +ilvl_core:RegisterEvent("ZONE_TYPE_CHANGED", "ZoneChanged") local inspecting = {} ilvl_core.forced_inspects = {} @@ -1828,7 +1828,7 @@ function ilvl_core:HasQueuedInspec (unitName) end local inspect_frame = CreateFrame("frame") -inspect_frame:RegisterEvent ("INSPECT_READY") +inspect_frame:RegisterEvent("INSPECT_READY") local two_hand = { ["INVTYPE_2HWEAPON"] = true, @@ -2939,6 +2939,7 @@ function Details.GenerateSpecSpellList() end) end +--fill the passed table with spells from talents and spellbook, affect only the active spec function Details.FillTableWithPlayerSpells(completeListOfSpells) local specId, specName, _, specIconTexture = GetSpecializationInfo(GetSpecialization()) local classNameLoc, className, classId = UnitClass("player") @@ -3105,4 +3106,47 @@ function Details:HandleRogueCombatSpecIconByGameVersion() rogueCombatCoords[3] = 384 / 512 rogueCombatCoords[4] = 448 / 512 end +end + +function CopyText(text) + if (not Details.CopyTextField) then + Details.CopyTextField = CreateFrame("Frame", "DetailsCopyText", UIParent, "BackdropTemplate") + Details.CopyTextField:SetHeight(14) + Details.CopyTextField:SetWidth(120) + Details.CopyTextField:SetPoint("center", UIParent, "center") + Details.CopyTextField:SetBackdrop(backdrop) + + DetailsFramework:ApplyStandardBackdrop(Details.CopyTextField) + + tinsert(UISpecialFrames, "DetailsCopyText") + + Details.CopyTextField.textField = CreateFrame("editbox", nil, Details.CopyTextField, "BackdropTemplate") + Details.CopyTextField.textField:SetPoint("topleft", Details.CopyTextField, "topleft") + Details.CopyTextField.textField:SetAutoFocus(false) + Details.CopyTextField.textField:SetFontObject("GameFontHighlightSmall") + Details.CopyTextField.textField:SetAllPoints() + Details.CopyTextField.textField:EnableMouse(true) + + Details.CopyTextField.textField:SetScript("OnEnterPressed", function() + Details.CopyTextField.textField:ClearFocus() + Details.CopyTextField:Hide() + end) + + Details.CopyTextField.textField:SetScript("OnEscapePressed", function() + Details.CopyTextField.textField:ClearFocus() + Details.CopyTextField:Hide() + end) + + Details.CopyTextField.textField:SetScript("OnChar", function() + Details.CopyTextField.textField:ClearFocus() + Details.CopyTextField:Hide() + end) + end + + C_Timer.After(0.1, function() + Details.CopyTextField:Show() + Details.CopyTextField.textField:SetFocus() + Details.CopyTextField.textField:SetText(text) + Details.CopyTextField.textField:HighlightText() + end) end \ No newline at end of file diff --git a/core/meta.lua b/core/meta.lua index 046bc65d8..dfb6a061b 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -8,8 +8,8 @@ local _ local pairs = pairs --lua local local ipairs = ipairs --lua local - local _rawget = rawget --lua local - local _setmetatable = setmetatable --lua local + local rawget = rawget --lua local + local setmetatable = setmetatable --lua local local _table_remove = table.remove --lua local local _bit_band = bit.band --lua local local wipe = table.wipe --lua local diff --git a/core/parser.lua b/core/parser.lua index e3b86ac20..266f717fa 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -3497,15 +3497,15 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 local AlternatePowerEnableFrame = CreateFrame("frame") local AlternatePowerMonitorFrame = CreateFrame("frame") - AlternatePowerEnableFrame:RegisterEvent ("UNIT_POWER_BAR_SHOW") - --AlternatePowerEnableFrame:RegisterEvent ("UNIT_POWER_BAR_HIDE") - AlternatePowerEnableFrame:RegisterEvent ("ENCOUNTER_END") - --AlternatePowerEnableFrame:RegisterEvent ("PLAYER_REGEN_ENABLED") + AlternatePowerEnableFrame:RegisterEvent("UNIT_POWER_BAR_SHOW") + --AlternatePowerEnableFrame:RegisterEvent("UNIT_POWER_BAR_HIDE") + AlternatePowerEnableFrame:RegisterEvent("ENCOUNTER_END") + --AlternatePowerEnableFrame:RegisterEvent("PLAYER_REGEN_ENABLED") AlternatePowerEnableFrame.IsRunning = false AlternatePowerEnableFrame:SetScript("OnEvent", function(self, event) if (event == "UNIT_POWER_BAR_SHOW") then - AlternatePowerMonitorFrame:RegisterEvent ("UNIT_POWER_UPDATE") -- 8.0 + AlternatePowerMonitorFrame:RegisterEvent("UNIT_POWER_UPDATE") -- 8.0 AlternatePowerEnableFrame.IsRunning = true elseif (AlternatePowerEnableFrame.IsRunning and (event == "ENCOUNTER_END" or event == "PLAYER_REGEN_ENABLED")) then -- and not InCombatLockdown() AlternatePowerMonitorFrame:UnregisterEvent ("UNIT_POWER_UPDATE") diff --git a/core/plugins.lua b/core/plugins.lua index 1726f1e4a..deee9a58a 100644 --- a/core/plugins.lua +++ b/core/plugins.lua @@ -273,7 +273,7 @@ end local register_event_func = function(self, event) - self.Frame:RegisterEvent (event) + self.Frame:RegisterEvent(event) end local unregister_event_func = function(self, event) self.Frame:UnregisterEvent (event) @@ -285,8 +285,8 @@ local NewPlugin = {__options = PluginOptions, __enabled = true, RegisterEvent = register_event_func, UnregisterEvent = unregister_event_func} local Frame = CreateFrame("Frame", FrameName, UIParent,"BackdropTemplate") - Frame:RegisterEvent ("PLAYER_LOGIN") - Frame:RegisterEvent ("PLAYER_LOGOUT") + Frame:RegisterEvent("PLAYER_LOGIN") + Frame:RegisterEvent("PLAYER_LOGOUT") Frame:SetScript("OnEvent", function(self, event, ...) if (NewPlugin.OnEvent) then @@ -360,7 +360,7 @@ options_frame:SetMovable(true) options_frame:EnableMouse(true) options_frame:SetFrameStrata("DIALOG") - options_frame:SetToplevel (true) + options_frame:SetToplevel(true) options_frame:Hide() @@ -398,7 +398,7 @@ options_frame:SetMovable(true) options_frame:EnableMouse(true) options_frame:SetFrameStrata("DIALOG") - options_frame:SetToplevel (true) + options_frame:SetToplevel(true) options_frame:Hide() diff --git a/core/plugins_statusbar.lua b/core/plugins_statusbar.lua index bac305d4b..aa5fae018 100644 --- a/core/plugins_statusbar.lua +++ b/core/plugins_statusbar.lua @@ -707,10 +707,10 @@ do --Register needed events -- here we are redirecting the event to an specified function, otherwise events need to be handle inside "PDps:OnDetailsEvent (event)" - _detalhes:RegisterEvent (PDps, "DETAILS_INSTANCE_CHANGESEGMENT", PDps.ChangeSegment) - _detalhes:RegisterEvent (PDps, "DETAILS_DATA_RESET", PDps.DataReset) - _detalhes:RegisterEvent (PDps, "COMBAT_PLAYER_ENTER", PDps.PlayerEnterCombat) - _detalhes:RegisterEvent (PDps, "COMBAT_PLAYER_LEAVE", PDps.PlayerLeaveCombat) + _detalhes:RegisterEvent(PDps, "DETAILS_INSTANCE_CHANGESEGMENT", PDps.ChangeSegment) + _detalhes:RegisterEvent(PDps, "DETAILS_DATA_RESET", PDps.DataReset) + _detalhes:RegisterEvent(PDps, "COMBAT_PLAYER_ENTER", PDps.PlayerEnterCombat) + _detalhes:RegisterEvent(PDps, "COMBAT_PLAYER_LEAVE", PDps.PlayerLeaveCombat) end @@ -860,9 +860,9 @@ do end --Register needed events - _detalhes:RegisterEvent (PSegment, "DETAILS_INSTANCE_CHANGESEGMENT", PSegment.OnSegmentChange) - _detalhes:RegisterEvent (PSegment, "DETAILS_DATA_RESET", PSegment.Change) - _detalhes:RegisterEvent (PSegment, "COMBAT_PLAYER_ENTER", PSegment.NewCombat) + _detalhes:RegisterEvent(PSegment, "DETAILS_INSTANCE_CHANGESEGMENT", PSegment.OnSegmentChange) + _detalhes:RegisterEvent(PSegment, "DETAILS_DATA_RESET", PSegment.Change) + _detalhes:RegisterEvent(PSegment, "COMBAT_PLAYER_ENTER", PSegment.NewCombat) end @@ -908,7 +908,7 @@ do end --Register needed events - _detalhes:RegisterEvent (PAttribute, "DETAILS_INSTANCE_CHANGEATTRIBUTE", PAttribute.Change) + _detalhes:RegisterEvent(PAttribute, "DETAILS_INSTANCE_CHANGEATTRIBUTE", PAttribute.Change) end @@ -1066,11 +1066,11 @@ do end --Register needed events - _detalhes:RegisterEvent (Clock, "COMBAT_PLAYER_ENTER", Clock.PlayerEnterCombat) - _detalhes:RegisterEvent (Clock, "COMBAT_PLAYER_LEAVE", Clock.PlayerLeaveCombat) - _detalhes:RegisterEvent (Clock, "DETAILS_INSTANCE_CHANGESEGMENT", _detalhes.ClockPluginTickOnSegment) - _detalhes:RegisterEvent (Clock, "DETAILS_DATA_SEGMENTREMOVED", _detalhes.ClockPluginTick) - _detalhes:RegisterEvent (Clock, "DETAILS_DATA_RESET", Clock.DataReset) + _detalhes:RegisterEvent(Clock, "COMBAT_PLAYER_ENTER", Clock.PlayerEnterCombat) + _detalhes:RegisterEvent(Clock, "COMBAT_PLAYER_LEAVE", Clock.PlayerLeaveCombat) + _detalhes:RegisterEvent(Clock, "DETAILS_INSTANCE_CHANGESEGMENT", _detalhes.ClockPluginTickOnSegment) + _detalhes:RegisterEvent(Clock, "DETAILS_DATA_SEGMENTREMOVED", _detalhes.ClockPluginTick) + _detalhes:RegisterEvent(Clock, "DETAILS_DATA_RESET", Clock.DataReset) end @@ -1138,7 +1138,7 @@ do local new_child = _detalhes.StatusBar:CreateChildTable (instance, Threat, myframe) - myframe.widget:RegisterEvent ("PLAYER_TARGET_CHANGED") + myframe.widget:RegisterEvent("PLAYER_TARGET_CHANGED") myframe.widget:SetScript("OnEvent", function() _detalhes:ThreatPluginTick() end) @@ -1154,8 +1154,8 @@ do end --Register needed events - _detalhes:RegisterEvent (Threat, "COMBAT_PLAYER_ENTER", Threat.PlayerEnterCombat) - _detalhes:RegisterEvent (Threat, "COMBAT_PLAYER_LEAVE", Threat.PlayerLeaveCombat) + _detalhes:RegisterEvent(Threat, "COMBAT_PLAYER_ENTER", Threat.PlayerEnterCombat) + _detalhes:RegisterEvent(Threat, "COMBAT_PLAYER_LEAVE", Threat.PlayerLeaveCombat) end @@ -1280,12 +1280,12 @@ do end function PDurability:OnEnable() - self.frame.widget:RegisterEvent ("PLAYER_DEAD") - self.frame.widget:RegisterEvent ("PLAYER_UNGHOST") - self.frame.widget:RegisterEvent ("UPDATE_INVENTORY_DURABILITY") - self.frame.widget:RegisterEvent ("MERCHANT_SHOW") - self.frame.widget:RegisterEvent ("MERCHANT_CLOSED") - self.frame.widget:RegisterEvent ("ZONE_CHANGED_NEW_AREA") + self.frame.widget:RegisterEvent("PLAYER_DEAD") + self.frame.widget:RegisterEvent("PLAYER_UNGHOST") + self.frame.widget:RegisterEvent("UPDATE_INVENTORY_DURABILITY") + self.frame.widget:RegisterEvent("MERCHANT_SHOW") + self.frame.widget:RegisterEvent("MERCHANT_CLOSED") + self.frame.widget:RegisterEvent("ZONE_CHANGED_NEW_AREA") self:UpdateDurability() end @@ -1356,8 +1356,8 @@ do texture:SetHeight(12) myframe.texture = texture - myframe.widget:RegisterEvent ("PLAYER_MONEY") - myframe.widget:RegisterEvent ("PLAYER_ENTERING_WORLD") + myframe.widget:RegisterEvent("PLAYER_MONEY") + myframe.widget:RegisterEvent("PLAYER_ENTERING_WORLD") myframe.widget:SetScript("OnEvent", function(event) if (event == "PLAYER_ENTERING_WORLD") then return PGold:ScheduleTimer("GoldPluginTick", 10) diff --git a/core/plugins_toolbar.lua b/core/plugins_toolbar.lua index 16633abe7..bda56f206 100644 --- a/core/plugins_toolbar.lua +++ b/core/plugins_toolbar.lua @@ -237,8 +237,8 @@ end end end - _detalhes:RegisterEvent (_detalhes.ToolBar, "DETAILS_INSTANCE_OPEN", "OnInstanceOpen") - _detalhes:RegisterEvent (_detalhes.ToolBar, "DETAILS_INSTANCE_CLOSE", "OnInstanceClose") + _detalhes:RegisterEvent(_detalhes.ToolBar, "DETAILS_INSTANCE_OPEN", "OnInstanceOpen") + _detalhes:RegisterEvent(_detalhes.ToolBar, "DETAILS_INSTANCE_CLOSE", "OnInstanceClose") _detalhes.ToolBar.Enabled = true --must have this member or wont receive the event _detalhes.ToolBar.__enabled = true diff --git a/core/util.lua b/core/util.lua index a978499ef..7b8b8fc0d 100644 --- a/core/util.lua +++ b/core/util.lua @@ -1026,7 +1026,7 @@ end --font size function _detalhes:SetFontSize(fontString, ...) local fonte, _, flags = fontString:GetFont() - fontString:SetFont (fonte, _math_max (...), flags) + fontString:SetFont(fonte, _math_max (...), flags) end function _detalhes:GetFontSize (fontString) local _, size = fontString:GetFont() @@ -1036,7 +1036,7 @@ end --font face function _detalhes:SetFontFace (fontString, fontface) local _, size, flags = fontString:GetFont() - fontString:SetFont (fontface, size, flags) + fontString:SetFont(fontface, size, flags) end function _detalhes:GetFontFace (fontString) local fontface = fontString:GetFont() @@ -1066,7 +1066,7 @@ end end end - fontString:SetFont (fonte, size, outline) + fontString:SetFont(fonte, size, outline) end function _detalhes:UseOutline (outline) diff --git a/frames/anime.lua b/frames/anime.lua index 505948af0..7898b89d2 100644 --- a/frames/anime.lua +++ b/frames/anime.lua @@ -290,7 +290,7 @@ function _detalhes.PlayBestDamageOnGuild (damage) ---------------------------------------------- local NewDamageRecord = DetailsNewDamageRecord:CreateFontString("NewDamageRecordFontString", "OVERLAY") - NewDamageRecord:SetFont ([=[Fonts\FRIZQT__.TTF]=], 12, "OUTLINE") + NewDamageRecord:SetFont([=[Fonts\FRIZQT__.TTF]=], 12, "OUTLINE") NewDamageRecord:SetText("Damage Record!") NewDamageRecord:SetDrawLayer("OVERLAY", 0) NewDamageRecord:SetPoint("center", DetailsNewDamageRecord, "center", 18, 7) @@ -329,7 +329,7 @@ function _detalhes.PlayBestDamageOnGuild (damage) ---------------------------------------------- local DamageAmount = DetailsNewDamageRecord:CreateFontString("DamageAmountFontString", "OVERLAY") - DamageAmount:SetFont ([=[Fonts\FRIZQT__.TTF]=], 12, "THICKOUTLINE") + DamageAmount:SetFont([=[Fonts\FRIZQT__.TTF]=], 12, "THICKOUTLINE") DamageAmount:SetText(_detalhes:comma_value (damage)) DamageAmount:SetDrawLayer("OVERLAY", 0) DamageAmount:SetPoint("center", DetailsNewDamageRecord, "center", 18, -7) diff --git a/frames/fw_mods.lua b/frames/fw_mods.lua index e7407adb6..b1d8256dc 100644 --- a/frames/fw_mods.lua +++ b/frames/fw_mods.lua @@ -507,7 +507,7 @@ function gump:NewScrollBar2 (master, slave, x, y) slider_gump.thumb:SetSize(29, 30) slider_gump:SetThumbTexture (slider_gump.thumb) - slider_gump:SetOrientation ("VERTICAL") + slider_gump:SetOrientation("VERTICAL") slider_gump:SetSize(16, 100) slider_gump:SetMinMaxValues(0, slider_gump.scrollMax) slider_gump:SetValue(0) diff --git a/frames/window_benchmark.lua b/frames/window_benchmark.lua index c10ae79af..df0588e6a 100644 --- a/frames/window_benchmark.lua +++ b/frames/window_benchmark.lua @@ -61,7 +61,7 @@ local libwindow = LibStub("LibWindow-1.1") f.Title:SetTextColor(.8, .8, .8, 1) f.Title:SetText("Details! Benchmark") - DF:InstallTemplate ("font", "DETAILS_BENCHMARK_NORMAL", {color = "white", size = 10, font = "Friz Quadrata TT"}) + DF:InstallTemplate("font", "DETAILS_BENCHMARK_NORMAL", {color = "white", size = 10, font = "Friz Quadrata TT"}) function f.CreateCombatObject() local t = {} @@ -93,8 +93,8 @@ local libwindow = LibStub("LibWindow-1.1") end --events - f:RegisterEvent ("PLAYER_REGEN_DISABLED") - f:RegisterEvent ("PLAYER_REGEN_ENABLED") + f:RegisterEvent("PLAYER_REGEN_DISABLED") + f:RegisterEvent("PLAYER_REGEN_ENABLED") f:SetScript("OnEvent", function(self, event, ...) if (event == "PLAYER_REGEN_DISABLED") then diff --git a/frames/window_brokertexteditor.lua b/frames/window_brokertexteditor.lua index 4fe62e409..110aad3be 100644 --- a/frames/window_brokertexteditor.lua +++ b/frames/window_brokertexteditor.lua @@ -17,7 +17,7 @@ function Details:OpenBrokerTextEditor() local titleBar = DF:CreateTitleBar (panel, "Broker Text Editor") - local textentry = DF:NewSpecialLuaEditorEntry (panel, 650, 270, "editbox", "$parentEntry", true) + local textentry = DF:NewSpecialLuaEditorEntry(panel, 650, 270, "editbox", "$parentEntry", true) textentry:SetPoint("topleft", panel, "topleft", 2, -25) DF:ApplyStandardBackdrop(textentry) diff --git a/frames/window_copy.lua b/frames/window_copy.lua index a1ca2acfd..14763018c 100644 --- a/frames/window_copy.lua +++ b/frames/window_copy.lua @@ -13,7 +13,7 @@ do panel:SetFrameStrata("TOOLTIP") panel:SetPoint("center", UIParent, "center") panel.locked = false - panel:SetToplevel (true) + panel:SetToplevel(true) panel:SetMovable(true) panel:SetScript("OnMouseDown", function(self, button) if (self.isMoving) then diff --git a/frames/window_currentdps.lua b/frames/window_currentdps.lua index 5303551bd..f86724e61 100644 --- a/frames/window_currentdps.lua +++ b/frames/window_currentdps.lua @@ -901,11 +901,11 @@ function Details:CreateCurrentDpsFrame(parent, name) end end - eventListener:RegisterEvent ("COMBAT_ARENA_START", "ArenaStarted") - eventListener:RegisterEvent ("COMBAT_ARENA_END", "ArenaEnded") - eventListener:RegisterEvent ("COMBAT_MYTHICDUNGEON_START", "MythicDungeonStarted") - eventListener:RegisterEvent ("COMBAT_MYTHICDUNGEON_END", "MythicDungeonEnded") - eventListener:RegisterEvent ("COMBAT_PLAYER_ENTER", "ResetBuffer") + eventListener:RegisterEvent("COMBAT_ARENA_START", "ArenaStarted") + eventListener:RegisterEvent("COMBAT_ARENA_END", "ArenaEnded") + eventListener:RegisterEvent("COMBAT_MYTHICDUNGEON_START", "MythicDungeonStarted") + eventListener:RegisterEvent("COMBAT_MYTHICDUNGEON_END", "MythicDungeonEnded") + eventListener:RegisterEvent("COMBAT_PLAYER_ENTER", "ResetBuffer") _detalhes.Broadcaster_CurrentDpsLoaded = true _detalhes.Broadcaster_CurrentDpsFrame = f diff --git a/frames/window_custom.lua b/frames/window_custom.lua index 51939f3b5..b9ed9e556 100644 --- a/frames/window_custom.lua +++ b/frames/window_custom.lua @@ -21,7 +21,7 @@ local _table_sort = table.sort --lua local local tinsert = table.insert --lua local local _unpack = unpack --lua local - local _setmetatable = setmetatable --lua local + local setmetatable = setmetatable --lua local local _GetSpellInfo = _detalhes.getspellinfo --api local local CreateFrame = CreateFrame --api local @@ -56,7 +56,7 @@ local CONST_BUTTON_TEMPLATE = gump:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") local CONST_TEXTENTRY_TEMPLATE = gump:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") - gump:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", + gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", { icon = {texture = [[Interface\BUTTONS\UI-GuildButton-PublicNote-Up]]}, width = 160, @@ -64,24 +64,24 @@ "DETAILS_PLUGIN_BUTTON_TEMPLATE" ) - gump:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON", + gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON", { width = 130, }, "DETAILS_PLUGIN_BUTTON_TEMPLATE" ) - gump:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", { + gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 0.6}, backdropbordercolor = {0, 0, 0, 1}, }) - gump:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", { + gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 1}, backdropbordercolor = {0, 0, 0, 1}, }) - gump:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", { + gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 1}, backdropbordercolor = {0, 0, 0, 1}, @@ -508,7 +508,7 @@ } tinsert(_detalhes.custom, new_custom_object) - _setmetatable(new_custom_object, _detalhes.atributo_custom) + setmetatable(new_custom_object, _detalhes.atributo_custom) new_custom_object.__index = _detalhes.atributo_custom _detalhes:Msg(Loc ["STRING_CUSTOM_CREATED"]) end @@ -591,7 +591,7 @@ end tinsert(_detalhes.custom, new_custom_object) - _setmetatable(new_custom_object, _detalhes.atributo_custom) + setmetatable(new_custom_object, _detalhes.atributo_custom) new_custom_object.__index = _detalhes.atributo_custom _detalhes:Msg(Loc ["STRING_CUSTOM_CREATED"]) end @@ -1725,7 +1725,7 @@ box2:Hide() --create the code editbox - local code_editor = gump:NewSpecialLuaEditorEntry (custom_window, CONST_EDITBOX_WIDTH, CONST_EDITBOX_HEIGHT, "codeeditor", "$parentCodeEditor") + local code_editor = gump:NewSpecialLuaEditorEntry(custom_window, CONST_EDITBOX_WIDTH, CONST_EDITBOX_HEIGHT, "codeeditor", "$parentCodeEditor") code_editor:SetPoint("topleft", custom_window, "topleft", CONST_MENU_X_POSITION, CONST_EDITBOX_Y_POSITION) code_editor:SetFrameLevel(custom_window:GetFrameLevel()+4) code_editor:SetBackdrop(nil) @@ -1754,7 +1754,7 @@ code_editor.font_size = 11 local file, size, flags = code_editor.editbox:GetFont() - code_editor.editbox:SetFont (file, 11, flags) + code_editor.editbox:SetFont(file, 11, flags) local expand_func = function() if (code_editor.expanded) then @@ -1778,11 +1778,11 @@ if (increase) then local file, size, flags = code_editor.editbox:GetFont() code_editor.font_size = code_editor.font_size + 1 - code_editor.editbox:SetFont (file, code_editor.font_size, flags) + code_editor.editbox:SetFont(file, code_editor.font_size, flags) else local file, size, flags = code_editor.editbox:GetFont() code_editor.font_size = code_editor.font_size - 1 - code_editor.editbox:SetFont (file, code_editor.font_size, flags) + code_editor.editbox:SetFont(file, code_editor.font_size, flags) end end diff --git a/frames/window_custom_scripts.lua b/frames/window_custom_scripts.lua index 435138c2c..f9df7c97f 100644 --- a/frames/window_custom_scripts.lua +++ b/frames/window_custom_scripts.lua @@ -26,7 +26,7 @@ local CONST_EDITBOX_BUTTON_HEIGHT = 20 local CONST_BUTTON_TEMPLATE = DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") local CONST_TEXTENTRY_TEMPLATE = DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") -DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", +DF:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", { icon = {texture = [[Interface\BUTTONS\UI-GuildButton-PublicNote-Up]]}, width = 160, @@ -34,24 +34,24 @@ DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", "DETAILS_PLUGIN_BUTTON_TEMPLATE" ) -DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON", +DF:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON", { width = 130, }, "DETAILS_PLUGIN_BUTTON_TEMPLATE" ) -DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", { +DF:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 0.6}, backdropbordercolor = {0, 0, 0, 1}, }) -DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", { +DF:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 1}, backdropbordercolor = {0, 0, 0, 1}, }) -DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", { +DF:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", { backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, backdropcolor = {.2, .2, .2, 1}, backdropbordercolor = {0, 0, 0, 1}, diff --git a/frames/window_dump.lua b/frames/window_dump.lua index f538cf414..65884b01d 100644 --- a/frames/window_dump.lua +++ b/frames/window_dump.lua @@ -23,7 +23,7 @@ function Details:Dump (...) DetailsDumpFrame:SetSize(700, 600) DetailsDumpFrame:SetTitle("Details! Dump Table [|cFFFF3333Ready Only|r]") - local text_editor = DetailsFramework:NewSpecialLuaEditorEntry (DetailsDumpFrame, 680, 560, "Editbox", "$parentEntry", true) + local text_editor = DetailsFramework:NewSpecialLuaEditorEntry(DetailsDumpFrame, 680, 560, "Editbox", "$parentEntry", true) text_editor:SetPoint("topleft", DetailsDumpFrame, "topleft", 10, -30) text_editor.scroll:SetBackdrop(nil) @@ -85,7 +85,7 @@ function _detalhes:ShowImportWindow (defaultText, confirmFunc, titleText) importWindow:SetPoint("center") DetailsFramework:ApplyStandardBackdrop(importWindow, false, 1.2) - local importTextEditor = DetailsFramework:NewSpecialLuaEditorEntry (importWindow, 780, 540, "ImportEditor", "$parentEditor", true) + local importTextEditor = DetailsFramework:NewSpecialLuaEditorEntry(importWindow, 780, 540, "ImportEditor", "$parentEditor", true) importTextEditor:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) importTextEditor:SetBackdropColor(.2, .2, .2, .5) importTextEditor:SetBackdropBorderColor(0, 0, 0, 1) diff --git a/frames/window_eventtracker.lua b/frames/window_eventtracker.lua index a59ee0682..0c3098ae2 100644 --- a/frames/window_eventtracker.lua +++ b/frames/window_eventtracker.lua @@ -725,7 +725,7 @@ function Details:CreateEventTrackerFrame(parent, name) local crowdControlFromFramework = DetailsFramework.CrowdControlSpells local combatLog = CreateFrame("frame") - combatLog:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED") + combatLog:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") local OBJECT_TYPE_PLAYER = 0x00000400 local OBJECT_TYPE_ENEMY = 0x00000040 diff --git a/frames/window_forge.lua b/frames/window_forge.lua index 40d338070..eb0f2be0f 100644 --- a/frames/window_forge.lua +++ b/frames/window_forge.lua @@ -47,7 +47,7 @@ function Details:OpenForge() local f = DetailsForgePanel or Details.gump:CreateSimplePanel(UIParent, 960, 600, "Details! " .. L["STRING_SPELLLIST"], "DetailsForgePanel") f:SetPoint("center", UIParent, "center") f:SetFrameStrata("HIGH") - f:SetToplevel (true) + f:SetToplevel(true) f:SetMovable(true) f.Title:SetTextColor(1, .8, .2) diff --git a/frames/window_main.lua b/frames/window_main.lua index 4c2d64061..82bb59d95 100644 --- a/frames/window_main.lua +++ b/frames/window_main.lua @@ -3101,7 +3101,7 @@ local function CreateAlertFrame(baseframe, instancia) frame_lower:SetHeight(25) frame_lower:SetPoint("left", frame_upper, "left") frame_lower:SetPoint("right", frame_upper, "right") - frame_upper:SetScrollChild (frame_lower) + frame_upper:SetScrollChild(frame_lower) local alert_bg = CreateFrame("frame", "DetailsAlertFrame" .. instancia.meu_id, frame_lower,"BackdropTemplate") alert_bg:SetPoint("bottom", baseframe, "bottom") @@ -3551,7 +3551,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) scrollbar:Show() --config set - scrollbar:SetOrientation ("VERTICAL") + scrollbar:SetOrientation("VERTICAL") scrollbar.scrollMax = 0 scrollbar:SetMinMaxValues(0, 0) scrollbar:SetValue(0) @@ -3612,7 +3612,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) -- background window config ------------------------------------------------------------------------------------------------------------------------------------------------- backgroundframe:SetAllPoints(baseframe) - backgroundframe:SetScrollChild (backgrounddisplay) + backgroundframe:SetScrollChild(backgrounddisplay) backgrounddisplay:SetResizable(true) backgrounddisplay:SetPoint("topleft", baseframe, "topleft") @@ -7332,8 +7332,8 @@ function updateClickThroughListener:LeaveCombat() end) end -updateClickThroughListener:RegisterEvent ("COMBAT_PLAYER_ENTER", "EnterCombat") -updateClickThroughListener:RegisterEvent ("COMBAT_PLAYER_LEAVE", "EnterCombat") +updateClickThroughListener:RegisterEvent("COMBAT_PLAYER_ENTER", "EnterCombat") +updateClickThroughListener:RegisterEvent("COMBAT_PLAYER_LEAVE", "EnterCombat") function Details:UpdateClickThroughSettings (inCombat, window, bars, toolbaricons) if (inCombat ~= nil) then diff --git a/frames/window_news.lua b/frames/window_news.lua index d1ac19382..5615ff2c9 100644 --- a/frames/window_news.lua +++ b/frames/window_news.lua @@ -103,7 +103,7 @@ function Details:CreateOrOpenNewsWindow() tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1},}) frameUpper:SetBackdropColor(.1, .1, .1, .3) - frameUpper:SetScrollChild (frameLower) + frameUpper:SetScrollChild(frameLower) local slider = CreateFrame("slider", "DetailsNewsWindowSlider", frame, "BackdropTemplate") slider.bg = slider:CreateTexture(nil, "background") @@ -115,7 +115,7 @@ function Details:CreateOrOpenNewsWindow() slider.thumb:SetSize(25, 25) slider:SetThumbTexture (slider.thumb) - slider:SetOrientation ("vertical"); + slider:SetOrientation("vertical"); slider:SetSize(16, 499) slider:SetPoint("topleft", frameUpper, "topright") slider:SetMinMaxValues(0, 2000) diff --git a/frames/window_options2_sections.lua b/frames/window_options2_sections.lua index d305b46b9..e3acbe430 100644 --- a/frames/window_options2_sections.lua +++ b/frames/window_options2_sections.lua @@ -3560,7 +3560,7 @@ do y = y - 20 --plugins installed, adding their abs name - DF.table.addunique (installedToolbarPlugins, absName) + DF.table.addunique(installedToolbarPlugins, absName) end @@ -3698,7 +3698,7 @@ do end --plugins installed, adding their abs name - DF.table.addunique (installedRaidPlugins, absName) + DF.table.addunique(installedRaidPlugins, absName) i = i + 1 y = y - 20 @@ -6418,7 +6418,7 @@ do sectionFrame.userTimeCaptureFillPanel:Refresh() end - local big_code_editor = DF:NewSpecialLuaEditorEntry (sectionFrame, 683, 422, "bigCodeEditor", "$parentBigCodeEditor") + local big_code_editor = DF:NewSpecialLuaEditorEntry(sectionFrame, 683, 422, "bigCodeEditor", "$parentBigCodeEditor") 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}) @@ -6488,7 +6488,7 @@ do sectionFrame.userTimeCaptureFillPanel:Refresh() end - local big_code_editor2 = DF:NewSpecialLuaEditorEntry (sectionFrame, 643, 402, "exportEditor", "$parentExportEditor", true) + local big_code_editor2 = DF:NewSpecialLuaEditorEntry(sectionFrame, 643, 402, "exportEditor", "$parentExportEditor", true) 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}) @@ -6606,7 +6606,7 @@ do --function local capture_func = DF:NewLabel(addframe, nil, "$parentFunctionLabel", "functionLabel", Loc ["STRING_OPTIONS_CHART_ADDCODE"]) - local capture_func_entry = DF:NewSpecialLuaEditorEntry (addframe.widget, 300, 200, "funcEntry", "$parentFuncEntry") + local capture_func_entry = DF:NewSpecialLuaEditorEntry(addframe.widget, 300, 200, "funcEntry", "$parentFuncEntry") capture_func_entry:SetPoint("topleft", capture_func.widget, "topright", 2, 0) capture_func_entry:SetSize(500, 220) capture_func_entry:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) @@ -6655,9 +6655,9 @@ do --open import panel button - local importframe = DF:NewSpecialLuaEditorEntry (sectionFrame, 683, 422, "importEditor", "$parentImportEditor", true) + local importframe = DF:NewSpecialLuaEditorEntry(sectionFrame, 683, 422, "importEditor", "$parentImportEditor", true) local font, size, flag = importframe.editbox:GetFont() - importframe.editbox:SetFont (font, 9, flag) + importframe.editbox:SetFont(font, 9, flag) importframe:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 70) importframe:SetFrameLevel(sectionFrame:GetFrameLevel()+6) importframe:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) diff --git a/frames/window_playerbreakdown.lua b/frames/window_playerbreakdown.lua index a746eb1f7..6aa695188 100644 --- a/frames/window_playerbreakdown.lua +++ b/frames/window_playerbreakdown.lua @@ -875,7 +875,7 @@ local function cria_container_barras (este_gump, SWW) container_barras_window:SetWidth(300) container_barras_window:SetHeight(145) - container_barras_window:SetScrollChild (container_barras) + container_barras_window:SetScrollChild(container_barras) container_barras_window:SetPoint("TOPLEFT", este_gump, "TOPLEFT", 21, -76) container_barras_window:SetScript("OnSizeChanged", function(self) @@ -958,7 +958,7 @@ local function cria_container_alvos (este_gump, SWW) container_alvos_window:SetWidth(300) container_alvos_window:SetHeight(100) - container_alvos_window:SetScrollChild (container_alvos) + 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) @@ -1627,7 +1627,7 @@ function gump:CriaJanelaInfo() este_gump.Loaded = true este_gump:SetFrameStrata("HIGH") - este_gump:SetToplevel (true) + este_gump:SetToplevel(true) este_gump.extra_frames = {} @@ -4438,7 +4438,7 @@ function gump:CriaJanelaInfo() 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", 4, 0) bar.lefttext:SetJustifyH("left") @@ -4455,7 +4455,7 @@ function gump:CriaJanelaInfo() 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") @@ -4465,7 +4465,7 @@ function gump:CriaJanelaInfo() 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", -42, 0) bar.righttext2:SetJustifyH("right") @@ -4636,7 +4636,7 @@ function gump:CriaJanelaInfo() 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) @@ -4652,7 +4652,7 @@ function gump:CriaJanelaInfo() 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) @@ -4660,7 +4660,7 @@ function gump:CriaJanelaInfo() 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) diff --git a/frames/window_rowtexteditor.lua b/frames/window_rowtexteditor.lua index 0126d92f2..ac96093e8 100644 --- a/frames/window_rowtexteditor.lua +++ b/frames/window_rowtexteditor.lua @@ -33,7 +33,7 @@ end local y = -32 local buttonTemplate = DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") -local textentry = DF:NewSpecialLuaEditorEntry (panel, scrollWidth, 555, "editbox", "$parentEntry") +local textentry = DF:NewSpecialLuaEditorEntry(panel, scrollWidth, 555, "editbox", "$parentEntry") textentry:SetPoint("topleft", panel, "topleft", 10, y) DF:ApplyStandardBackdrop(textentry) DF:SetFontSize(textentry.editbox, 14) diff --git a/frames/window_runcode.lua b/frames/window_runcode.lua index fe3dafe55..218c0c657 100644 --- a/frames/window_runcode.lua +++ b/frames/window_runcode.lua @@ -33,7 +33,7 @@ function Details.OpenRunCodeWindow() local f = DetailsRunCodePanel or DF:CreateSimplePanel(UIParent, 700, 480, "Details! Run Code", "DetailsRunCodePanel") --lua editor - local code_editor = DF:NewSpecialLuaEditorEntry (f, 885, 510, "text", "$parentCodeEditorWindow") + local code_editor = DF:NewSpecialLuaEditorEntry(f, 885, 510, "text", "$parentCodeEditorWindow") f.CodeEditor = code_editor code_editor:SetPoint("topleft", f, "topleft", 20, -56) diff --git a/frames/window_statistics.lua b/frames/window_statistics.lua index 9e498fe2c..afc0a0908 100644 --- a/frames/window_statistics.lua +++ b/frames/window_statistics.lua @@ -36,7 +36,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild local f = DetailsRaidHistoryWindow or CreateFrame("frame", "DetailsRaidHistoryWindow", UIParent,"BackdropTemplate") --, "ButtonFrameTemplate" f:SetPoint("center", UIParent, "center") f:SetFrameStrata("HIGH") - f:SetToplevel (true) + f:SetToplevel(true) f:SetMovable(true) f:SetWidth(850) @@ -257,8 +257,8 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild end end - eventListener:RegisterEvent ("COMM_EVENT_RECEIVED", "OnCommReceived") - eventListener:RegisterEvent ("COMM_EVENT_SENT", "OnCommSent") + eventListener:RegisterEvent("COMM_EVENT_RECEIVED", "OnCommReceived") + eventListener:RegisterEvent("COMM_EVENT_SENT", "OnCommSent") --report results function f.BuildReport() diff --git a/frames/window_wa.lua b/frames/window_wa.lua index 3fac47cca..1f837164c 100644 --- a/frames/window_wa.lua +++ b/frames/window_wa.lua @@ -1986,7 +1986,7 @@ function _detalhes:OpenAuraPanel (spellid, spellname, spellicon, encounterid, tr f:SetFrameStrata("DIALOG") f:EnableMouse(true) f:SetMovable(true) - f:SetToplevel (true) + f:SetToplevel(true) --background f.bg1 = f:CreateTexture(nil, "background") diff --git a/frames/window_welcome.lua b/frames/window_welcome.lua index ecd0cba99..21bf2eca5 100644 --- a/frames/window_welcome.lua +++ b/frames/window_welcome.lua @@ -1321,7 +1321,7 @@ local window_openned_at = time() texto_snap:SetJustifyV ("top") texto_snap:SetTextColor(1, 1, 1, 1) local fonte, _, flags = texto_snap:GetFont() - texto_snap:SetFont (fonte, 11, flags) + texto_snap:SetFont(fonte, 11, flags) local snap_image1 = window:CreateTexture(nil, "overlay") snap_image1:SetTexture([[Interface\Addons\Details\images\icons]]) @@ -1402,14 +1402,14 @@ local window_openned_at = time() --local t = {esta_morte, time(), joe.nome, joe.classe, 400000, "52m 12s", ["dead"] = true} --table.insert(current_combat.last_events_tables, #current_combat.last_events_tables+1, t) - rawset (_detalhes.spellcache, 300000, {"A Gun in Your Hand", 300000, [[Interface\ICONS\INV_Legendary_Gun]]}) - rawset (_detalhes.spellcache, 300001, {"Shot", 300001, [[Interface\ICONS\INV_Archaeology_Ogres_HarGunn_Eye]]}) - rawset (_detalhes.spellcache, 300002, {"Mexico Travel", 300002, [[Interface\ICONS\Achievement_Dungeon_Gundrak_Normal]]}) - rawset (_detalhes.spellcache, 300003, {"Rope", 300003, [[Interface\ICONS\Creatureportrait_RopeLadder01]]}) - rawset (_detalhes.spellcache, 300004, {"A Guitar Solo", 300004, [[Interface\ICONS\INV_Staff_2h_DraenorDungeon_C_05]]}) - rawset (_detalhes.spellcache, 300005, {"Watchtower", 300005, [[Interface\ICONS\Achievement_BG_DefendXtowers_AV]]}) - rawset (_detalhes.spellcache, 300006, {"Oh! Hey There!", 300006, [[Interface\ICONS\Spell_Shadow_SummonSuccubus]]}) - rawset (_detalhes.spellcache, 300007, {"I'm an Ability!", 300007, [[Interface\ICONS\Spell_Nature_Polymorph]]}) + rawset(_detalhes.spellcache, 300000, {"A Gun in Your Hand", 300000, [[Interface\ICONS\INV_Legendary_Gun]]}) + rawset(_detalhes.spellcache, 300001, {"Shot", 300001, [[Interface\ICONS\INV_Archaeology_Ogres_HarGunn_Eye]]}) + rawset(_detalhes.spellcache, 300002, {"Mexico Travel", 300002, [[Interface\ICONS\Achievement_Dungeon_Gundrak_Normal]]}) + rawset(_detalhes.spellcache, 300003, {"Rope", 300003, [[Interface\ICONS\Creatureportrait_RopeLadder01]]}) + rawset(_detalhes.spellcache, 300004, {"A Guitar Solo", 300004, [[Interface\ICONS\INV_Staff_2h_DraenorDungeon_C_05]]}) + rawset(_detalhes.spellcache, 300005, {"Watchtower", 300005, [[Interface\ICONS\Achievement_BG_DefendXtowers_AV]]}) + rawset(_detalhes.spellcache, 300006, {"Oh! Hey There!", 300006, [[Interface\ICONS\Spell_Shadow_SummonSuccubus]]}) + rawset(_detalhes.spellcache, 300007, {"I'm an Ability!", 300007, [[Interface\ICONS\Spell_Nature_Polymorph]]}) joe.targets ["My Old Lady"] = 3500000 joe.targets ["My Self"] = 2000000 @@ -1490,7 +1490,7 @@ local window_openned_at = time() texto_plugins:SetJustifyV ("top") texto_plugins:SetTextColor(1, 1, 1, 1) --local fonte, _, flags = texto_plugins:GetFont() - --texto_plugins:SetFont (fonte, 11, flags) + --texto_plugins:SetFont(fonte, 11, flags) local plugins_image1 = window:CreateTexture(nil, "overlay") plugins_image1:SetTexture([[Interface\Addons\Details\images\icons2]]) diff --git a/functions/bossmods.lua b/functions/bossmods.lua index b3c21986f..65cbccb92 100644 --- a/functions/bossmods.lua +++ b/functions/bossmods.lua @@ -137,9 +137,9 @@ function Details:CreateCallbackListeners() wipe (current_table_bigwigs) end end) - event_frame:RegisterEvent ("ENCOUNTER_START") - event_frame:RegisterEvent ("ENCOUNTER_END") - event_frame:RegisterEvent ("PLAYER_REGEN_ENABLED") + event_frame:RegisterEvent("ENCOUNTER_START") + event_frame:RegisterEvent("ENCOUNTER_END") + 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) diff --git a/functions/deathmenu.lua b/functions/deathmenu.lua index 4aebfab2d..98edb9ce2 100644 --- a/functions/deathmenu.lua +++ b/functions/deathmenu.lua @@ -10,8 +10,8 @@ local detailsOnDeathMenu = CreateFrame("frame", "DetailsOnDeathMenu", UIParent, detailsOnDeathMenu:SetHeight(30) detailsOnDeathMenu.Debug = false -detailsOnDeathMenu:RegisterEvent ("PLAYER_REGEN_ENABLED") -detailsOnDeathMenu:RegisterEvent ("ENCOUNTER_END") +detailsOnDeathMenu:RegisterEvent("PLAYER_REGEN_ENABLED") +detailsOnDeathMenu:RegisterEvent("ENCOUNTER_END") DetailsFramework:ApplyStandardBackdrop(detailsOnDeathMenu) detailsOnDeathMenu:SetAlpha(0.75) diff --git a/functions/dungeon.lua b/functions/dungeon.lua index 15035a824..347656a14 100644 --- a/functions/dungeon.lua +++ b/functions/dungeon.lua @@ -265,9 +265,9 @@ function mythicDungeonCharts:OnEndMythicDungeon() end end -mythicDungeonCharts:RegisterEvent ("COMBAT_MYTHICDUNGEON_START", "OnStartMythicDungeon") -mythicDungeonCharts:RegisterEvent ("COMBAT_MYTHICDUNGEON_END", "OnEndMythicDungeon") -mythicDungeonCharts:RegisterEvent ("COMBAT_BOSS_DEFEATED", "OnBossDefeated") +mythicDungeonCharts:RegisterEvent("COMBAT_MYTHICDUNGEON_START", "OnStartMythicDungeon") +mythicDungeonCharts:RegisterEvent("COMBAT_MYTHICDUNGEON_END", "OnEndMythicDungeon") +mythicDungeonCharts:RegisterEvent("COMBAT_BOSS_DEFEATED", "OnBossDefeated") -- /run _G.DetailsMythicDungeonChartHandler.ShowChart(); DetailsMythicDungeonChartFrame.ShowChartFrame() -- /run _G.DetailsMythicDungeonChartHandler.ShowReadyPanel() diff --git a/functions/events.lua b/functions/events.lua index 6ea4098a0..99ede30e0 100644 --- a/functions/events.lua +++ b/functions/events.lua @@ -126,7 +126,7 @@ local common_events = { ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --register a event - function _detalhes:RegisterEvent (object, event, func) + function _detalhes:RegisterEvent(object, event, func) if (not _detalhes.RegistredEvents [event]) then if (object.Msg) then @@ -391,8 +391,8 @@ local common_events = { local listener_meta = setmetatable({}, _detalhes) listener_meta.__index = listener_meta - function listener_meta:RegisterEvent (event, func) - return _detalhes:RegisterEvent (self, event, func) + function listener_meta:RegisterEvent(event, func) + return _detalhes:RegisterEvent(self, event, func) end function listener_meta:UnregisterEvent (event) return _detalhes:UnregisterEvent (self, event) diff --git a/functions/mythicdungeon.lua b/functions/mythicdungeon.lua index 65f7591cd..a99895b95 100644 --- a/functions/mythicdungeon.lua +++ b/functions/mythicdungeon.lua @@ -19,11 +19,11 @@ DetailsMythicPlusFrame.DevelopmentDebug = false --disabling the mythic+ feature if the user is playing in wow classic if (not DF.IsTimewalkWoW()) then - DetailsMythicPlusFrame:RegisterEvent ("CHALLENGE_MODE_START") - DetailsMythicPlusFrame:RegisterEvent ("CHALLENGE_MODE_COMPLETED") - DetailsMythicPlusFrame:RegisterEvent ("ZONE_CHANGED_NEW_AREA") - DetailsMythicPlusFrame:RegisterEvent ("ENCOUNTER_END") - DetailsMythicPlusFrame:RegisterEvent ("START_TIMER") + DetailsMythicPlusFrame:RegisterEvent("CHALLENGE_MODE_START") + DetailsMythicPlusFrame:RegisterEvent("CHALLENGE_MODE_COMPLETED") + DetailsMythicPlusFrame:RegisterEvent("ZONE_CHANGED_NEW_AREA") + DetailsMythicPlusFrame:RegisterEvent("ENCOUNTER_END") + DetailsMythicPlusFrame:RegisterEvent("START_TIMER") end --[[ @@ -713,12 +713,12 @@ end --make an event listener to sync combat data DetailsMythicPlusFrame.EventListener = Details:CreateEventListener() -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_ENCOUNTER_START") -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_ENCOUNTER_END") -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_PLAYER_ENTER") -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_PLAYER_LEAVE") -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_MYTHICDUNGEON_START") -DetailsMythicPlusFrame.EventListener:RegisterEvent ("COMBAT_MYTHICDUNGEON_END") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_ENCOUNTER_START") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_ENCOUNTER_END") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_PLAYER_ENTER") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_PLAYER_LEAVE") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_MYTHICDUNGEON_START") +DetailsMythicPlusFrame.EventListener:RegisterEvent("COMBAT_MYTHICDUNGEON_END") function DetailsMythicPlusFrame.EventListener.OnDetailsEvent(contextObject, event, ...) --these events triggers within Details control functions, they run exactly after details! creates or close a segment diff --git a/functions/plater.lua b/functions/plater.lua index 20e5a36cf..547d632a0 100644 --- a/functions/plater.lua +++ b/functions/plater.lua @@ -117,7 +117,7 @@ function Details:RefreshPlaterIntegration() wipe (plater_integration_frame.DamageTaken) --read cleu events - plater_integration_frame:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED") + plater_integration_frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") --start the real time dps updater plater_integration_frame.OnTickFrame.NextUpdate = CONST_REALTIME_UPDATE_TIME diff --git a/functions/profiles.lua b/functions/profiles.lua index 24736b8aa..f9c0c4020 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -126,9 +126,9 @@ function _detalhes:SetProfileCProp (name, cprop, value) if (profile) then if (type(value) == "table") then - rawset (profile, cprop, Details.CopyTable(value)) + rawset(profile, cprop, Details.CopyTable(value)) else - rawset (profile, cprop, value) + rawset(profile, cprop, value) end else return diff --git a/functions/skins.lua b/functions/skins.lua index 7d399caaf..bb8a5dfbd 100644 --- a/functions/skins.lua +++ b/functions/skins.lua @@ -473,7 +473,7 @@ local _ ["textL_custom_text"] = "{data1}. {data3}{data2}", ["font_size"] = 16, ["height"] = 21, - ["texture_file"] = "Interface\\AddOns\\Details\\images\\bar_skyline", + ["texture_file"] = "Interface\\AddOns\\Details\\images\\bar_hyanda", ["icon_file"] = "Interface\\AddOns\\Details\\images\\classes_small", ["textR_bracket"] = "(", ["textR_enable_custom_text"] = false, @@ -484,7 +484,7 @@ local _ }, ["textL_show_number"] = true, ["textR_custom_text"] = "{data1} ({data2}, {data3}%)", - ["texture"] = "Skyline", + ["texture"] = "Details Hyanda", ["use_spec_icons"] = true, ["textR_class_colors"] = false, ["textL_class_colors"] = false, diff --git a/functions/slash.lua b/functions/slash.lua index 41ba60cb3..cbbbbe687 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -233,7 +233,7 @@ function SlashCmdList.DETAILS (msg, editbox) } for i = 1, window1.baseframe:GetNumPoints() do - state ["Point" .. i] = {window1.baseframe:GetPoint (i)} + state ["Point" .. i] = {window1.baseframe:GetPoint(i)} end local parent = window1.baseframe:GetParent() @@ -733,7 +733,7 @@ function SlashCmdList.DETAILS (msg, editbox) local barra = instancia.barras [whichRowLine] for i = 1, barra:GetNumPoints() do - local point, relativeTo, relativePoint, xOfs, yOfs = barra:GetPoint (i) + local point, relativeTo, relativePoint, xOfs, yOfs = barra:GetPoint(i) print(point, relativeTo, relativePoint, xOfs, yOfs) end @@ -1928,7 +1928,7 @@ function _detalhes:CreateListPanel() container_barras_window:SetWidth(460) container_barras_window:SetHeight(550) - container_barras_window:SetScrollChild (container_barras) + container_barras_window:SetScrollChild(container_barras) container_barras_window:SetPoint("TOPLEFT", _detalhes.ListPanel.widget, "TOPLEFT", 21, -10) _detalhes.gump:NewScrollBar (container_barras_window, container_barras, -10, -17) diff --git a/functions/spellcache.lua b/functions/spellcache.lua index a1cded6d6..f67785670 100644 --- a/functions/spellcache.lua +++ b/functions/spellcache.lua @@ -8,9 +8,9 @@ do local _detalhes = _G._detalhes local Loc = LibStub("AceLocale-3.0"):GetLocale ( "Details" ) local _ - local _rawget = rawget - local _rawset = rawset - local _setmetatable = setmetatable + local rawget = rawget + local rawset = rawset + local setmetatable = setmetatable local _GetSpellInfo = GetSpellInfo local _unpack = unpack @@ -61,9 +61,9 @@ do --reset spell cache function _detalhes:ClearSpellCache() - _detalhes.spellcache = _setmetatable({}, + _detalhes.spellcache = setmetatable({}, {__index = function(tabela, valor) - local esta_magia = _rawget (tabela, valor) + local esta_magia = rawget (tabela, valor) if (esta_magia) then return esta_magia end @@ -85,19 +85,19 @@ do end}) --default overwrites - --_rawset (_detalhes.spellcache, 1, {Loc ["STRING_MELEE"], 1, "Interface\\AddOns\\Details\\images\\melee.tga"}) - --_rawset (_detalhes.spellcache, 2, {Loc ["STRING_AUTOSHOT"], 1, "Interface\\AddOns\\Details\\images\\autoshot.tga"}) + --rawset (_detalhes.spellcache, 1, {Loc ["STRING_MELEE"], 1, "Interface\\AddOns\\Details\\images\\melee.tga"}) + --rawset (_detalhes.spellcache, 2, {Loc ["STRING_AUTOSHOT"], 1, "Interface\\AddOns\\Details\\images\\autoshot.tga"}) --built-in overwrites for spellId, spellTable in pairs(_detalhes.SpellOverwrite) do local name, _, icon = _GetSpellInfo(spellId) - _rawset (_detalhes.spellcache, spellId, {spellTable.name or name, 1, spellTable.icon or icon}) + rawset (_detalhes.spellcache, spellId, {spellTable.name or name, 1, spellTable.icon or icon}) end --user overwrites -- [1] spellid [2] spellname [3] spellicon for index, spellTable in ipairs(_detalhes.savedCustomSpells) do - _rawset (_detalhes.spellcache, spellTable [1], {spellTable [2], 1, spellTable [3]}) + rawset (_detalhes.spellcache, spellTable [1], {spellTable [2], 1, spellTable [3]}) end end @@ -194,7 +194,7 @@ do local t = _detalhes.savedCustomSpells[index] if (t) then t [2], t [3] = name or t [2], icon or t [3] - return _rawset (_detalhes.spellcache, t [1], {t [2], 1, t [3]}) + return rawset (_detalhes.spellcache, t [1], {t [2], 1, t [3]}) else return false end @@ -218,7 +218,7 @@ do icon = [[Interface\InventoryItems\WoWUnknownItem01]] end - _rawset (_detalhes.spellcache, spellid, {name, 1, icon}) + rawset (_detalhes.spellcache, spellid, {name, 1, icon}) t[2] = name t[3] = icon @@ -267,7 +267,7 @@ do if (not is_overwrite) then tinsert(_detalhes.savedCustomSpells, {spellid, name, icon}) end - return _rawset (_detalhes.spellcache, spellid, {name, 1, icon}) + return rawset (_detalhes.spellcache, spellid, {name, 1, icon}) end function _detalhes:UserCustomSpellRemove (index) @@ -276,7 +276,7 @@ do local spellid = t [1] local name, _, icon = _GetSpellInfo(spellid) if (name) then - _rawset (_detalhes.spellcache, spellid, {name, 1, icon}) + rawset (_detalhes.spellcache, spellid, {name, 1, icon}) end return tremove(_detalhes.savedCustomSpells, index) end @@ -294,9 +294,9 @@ do local spellName, rank, spellIcon = _GetSpellInfo(spellid) if (spellName) then - _rawset (_detalhes.spellcache, spellid, {spellName .. Loc ["STRING_DOT"], rank, spellIcon}) + rawset (_detalhes.spellcache, spellid, {spellName .. Loc ["STRING_DOT"], rank, spellIcon}) else - _rawset (_detalhes.spellcache, spellid, {"Unknown DoT Spell? " .. Loc ["STRING_DOT"], rank, [[Interface\InventoryItems\WoWUnknownItem01]]}) + rawset (_detalhes.spellcache, spellid, {"Unknown DoT Spell? " .. Loc ["STRING_DOT"], rank, [[Interface\InventoryItems\WoWUnknownItem01]]}) end end diff --git a/functions/testbars.lua b/functions/testbars.lua index 985828263..422d0076f 100644 --- a/functions/testbars.lua +++ b/functions/testbars.lua @@ -252,7 +252,7 @@ function Details:CreateTestBars (alphabet, isArena) table.insert(current_combat.last_events_tables, #current_combat.last_events_tables+1, t) elseif (robot.nome == "Mr. President") then - rawset (Details.spellcache, 56488, {"Nuke", 56488, [[Interface\ICONS\inv_gizmo_supersappercharge]]}) + rawset(Details.spellcache, 56488, {"Nuke", 56488, [[Interface\ICONS\inv_gizmo_supersappercharge]]}) robot.spells:PegaHabilidade (56488, true, "SPELL_DAMAGE") robot.spells._ActorTable [56488].total = robot.total end diff --git a/images/bar_hyanda.tga b/images/bar_hyanda.tga new file mode 100644 index 0000000000000000000000000000000000000000..f514ab478963645792f785c4228531629cfe40c7 GIT binary patch literal 24620 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 Be^USe literal 1048620 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 Zqt8Y5>#%VE##c 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 WR<+U7sKKWhNC|7V+?pWIg| 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 Wvy;!AnK|?HQ^Vy`XU