From c28f0350222a6220beedabb5ada03a6436167282 Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Thu, 17 Jul 2014 16:21:15 -0500 Subject: [PATCH] updates --- .../assets/artwork/Unitframe/UNIT-STUNNED-LG.blp | Bin 0 -> 88596 bytes .../SVUI/assets/artwork/Unitframe/UNIT-STUNNED.blp | Bin 88596 -> 23060 bytes .../oUF_Plugins/oUF_Combatant/oUF_Combatant.lua | 36 +- .../oUF_Plugins/oUF_Friendship/oUF_Friendship.lua | 16 +- Interface/AddOns/SVUI/packages/actionbar/SVBar.lua | 375 ++++++++++---------- .../SVUI/packages/laborer/common/archaeology.lua | 25 +- .../AddOns/SVUI/packages/map/common/mmbar.lua | 4 - .../AddOns/SVUI/packages/override/SVOverride.lua | 29 +- Interface/AddOns/SVUI/packages/tip/SVTip.lua | 35 +- .../SVUI/packages/unit/common/actionpanel.lua | 27 ++ .../AddOns/SVUI/packages/unit/common/auras.lua | 116 +++--- .../AddOns/SVUI/packages/unit/common/misc.lua | 11 +- .../AddOns/SVUI/packages/unit/frames/groups.lua | 4 +- .../AddOns/SVUI/packages/unit/frames/units.lua | 4 +- Interface/AddOns/SVUI/scripts/pvp.lua | 192 ++++++---- Interface/AddOns/SVUI/system/installer.lua | 6 +- Interface/AddOns/SVUI/system/mentalo.lua | 1 - Interface/AddOns/SVUI/system/system.lua | 21 +- Interface/AddOns/SVUI/system/timers.lua | 4 +- .../AddOns/SVUI_ConfigOMatic/modules/filter.lua | 30 +- .../SVUI_StyleOMatic/addons/lossofcontrol.lua | 44 +-- .../AddOns/SVUI_StyleOMatic/addons/system.lua | 204 ++++++----- 22 files changed, 696 insertions(+), 488 deletions(-) create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/UNIT-STUNNED-LG.blp diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/UNIT-STUNNED-LG.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/UNIT-STUNNED-LG.blp new file mode 100644 index 0000000000000000000000000000000000000000..07dcd94a551ec4d43b9582a80f0fa76de72d685f GIT binary patch literal 88596 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 literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/UNIT-STUNNED.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/UNIT-STUNNED.blp index 811f12323985a6831e3c649007ccda3cf81c4f5c..861744a42282e0a4545ba7c49eae1b04f43f98b6 100644 GIT binary patch literal 23060 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 O8gFht-{^n)JpT`EKOQpx diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Combatant/oUF_Combatant.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Combatant/oUF_Combatant.lua index ce08b25..48cd364 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Combatant/oUF_Combatant.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Combatant/oUF_Combatant.lua @@ -7,6 +7,17 @@ local trinketSpells = { [7744] = 45, } +local timeLeft = 0 +local Trinket_OnUpdate = function(self, elapsed) + local expires = (self.duration - (GetTime() - self.start)); + if(expires == 0) then + local parent = self:GetParent() + parent.Icon:SetDesaturated(false) + parent.Unavailable:Hide() + self:SetScript("OnUpdate", nil) + end +end + local function GetPVPIcons(unit, frameID) local _, trinket, badge local unitFactionGroup = UnitFactionGroup(unit) @@ -37,7 +48,15 @@ local function LogUpdate(self, event, ...) if(event == "COMBAT_LOG_EVENT_UNFILTERED") then local _, eventType, _, sourceGUID, _, _, _, _, _, _, _, spellID = ... if eventType == "SPELL_CAST_SUCCESS" and sourceGUID == UnitGUID(self.unit) and trinketSpells[spellID] then - CooldownFrame_SetTimer(trinket.cooldownFrame, GetTime(), trinketSpells[spellID], 1) + local startTime = GetTime() + local duration = trinketSpells[spellID] + trinket.CD.start = startTime + trinket.CD.duration = duration + trinket.CD.nextUpdate = 0 + trinket.CD:SetScript("OnUpdate", Trinket_OnUpdate) + trinket.Icon:SetDesaturated(true) + trinket.Unavailable:Show() + CooldownFrame_SetTimer(trinket.CD, startTime, duration, 1) end elseif(alert and event == "UNIT_SPELLCAST_SUCCEEDED") then local unitID, spellName, _, _, spellID = ... @@ -63,7 +82,7 @@ local Update = function(self, event, ...) trinket.Icon:SetTexture(tIcon) trinket:Show() if event == 'PLAYER_ENTERING_WORLD' then - CooldownFrame_SetTimer(trinket.cooldownFrame, 1, 1, 1) + CooldownFrame_SetTimer(trinket.CD, 1, 1, 1) end end end @@ -81,9 +100,9 @@ local Enable = function(self, unit) if(trinket) then self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update) self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", Update) - if not trinket.cooldownFrame then - trinket.cooldownFrame = CreateFrame("Cooldown", nil, trinket) - trinket.cooldownFrame:SetAllPoints(trinket) + if not trinket.CD then + trinket.CD = CreateFrame("Cooldown", nil, trinket) + trinket.CD:SetAllPoints(trinket) end if not trinket.Icon then @@ -92,6 +111,13 @@ local Enable = function(self, unit) trinket.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) trinket.Icon:SetTexture([[INTERFACE\ICONS\INV_MISC_QUESTIONMARK]]) end + + if not trinket.Unavailable then + trinket.Unavailable = trinket:CreateTexture(nil, "OVERLAY") + trinket.Unavailable:SetAllPoints(trinket) + trinket.Unavailable:SetTexCoord(0.1, 0.9, 0.1, 0.9) + trinket.Unavailable:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Pass-Up]]) + end trinket:Show() end diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Friendship/oUF_Friendship.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Friendship/oUF_Friendship.lua index 4382346..f37e03f 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Friendship/oUF_Friendship.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_Friendship/oUF_Friendship.lua @@ -8,7 +8,7 @@ assert(oUF, 'oUF Friendship was unable to locate oUF install') The list is currently generated with the following: for index = 1100, 1500 do - if(GetFriendshipReputationByID(index)) then + if(GetFriendshipReputation(index)) then friendships[GetFactionInfoByID(index)] = index end end @@ -39,35 +39,35 @@ for tag, func in pairs({ ['curfriendship'] = function() local id = GetFriendshipID() if(id) then - local _, cur, _, _, _, _, threshold = GetFriendshipReputationByID(id) + local _, cur, _, name, details, _, standing, threshold, maximum = GetFriendshipReputation(id) return cur - threshold end end, ['currawfriendship'] = function() local id = GetFriendshipID() if(id) then - local _, cur = GetFriendshipReputationByID(id) + local _, cur = GetFriendshipReputation(id) return cur end end, ['perfriendship'] = function() local id = GetFriendshipID() if(id) then - local _, cur, _, _, _, _, threshold = GetFriendshipReputationByID(id) + local _, cur, _, name, details, _, standing, threshold, maximum = GetFriendshipReputation(id) return math.floor((cur - threshold) / 8400 * 100) end end, ['perfullfriendship'] = function() local id = GetFriendshipID() if(id) then - local _, cur = GetFriendshipReputationByID(id) + local _, cur = GetFriendshipReputation(id) return math.floor(cur / 42999 * 100) end end, ['friendshipstanding'] = function() local id = GetFriendshipID() if(id) then - local _, _, _, _, _, standing = GetFriendshipReputationByID(id) + local _, cur, _, name, details, _, standing, threshold, maximum = GetFriendshipReputation(id) return standing end end, @@ -77,7 +77,7 @@ for tag, func in pairs({ end local function OnEnter(self) - local _, cur, _, details, _, standing, threshold = GetFriendshipReputationByID(GetFriendshipID()) + local _, cur, _, name, details, _, standing, threshold, maximum = GetFriendshipReputation(GetFriendshipID()) GameTooltip:SetOwner(self, 'ANCHOR_BOTTOMRIGHT') GameTooltip:SetText(UnitName('target'), 1, 1, 1) GameTooltip:AddLine(details, nil, nil, nil, true) @@ -90,7 +90,7 @@ local function Update(self) local id = GetFriendshipID() if(id) then - local _, cur, _, _, _, _, threshold = GetFriendshipReputationByID(id) + local _, cur, _, name, details, _, standing, threshold, maximum = GetFriendshipReputation(id) friendship:SetMinMaxValues(0, 8400) friendship:SetValue(cur - threshold) friendship:Show() diff --git a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua index 3c2ce9a..b324737 100644 --- a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua +++ b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua @@ -241,13 +241,13 @@ local Bar_OnEnter = function(self) if(self._fade) then SuperVillain:SecureFadeIn(self, 0.2, self:GetAlpha(), self._alpha) end -end; +end local Bar_OnLeave = function(self) if(self._fade) then SuperVillain:SecureFadeOut(self, 1, self:GetAlpha(), 0) end -end; +end function MOD:FixKeybindText(button) local hotkey = _G[button:GetName()..'HotKey'] @@ -270,10 +270,10 @@ function MOD:FixKeybindText(button) hotkeyText = hotkeyText:gsub('NMINUS', "N-") hotkeyText = hotkeyText:gsub('NPLUS', "N+") hotkey:SetText(hotkeyText) - end; + end hotkey:ClearAllPoints() hotkey:SetAllPoints() -end; +end local function Pinpoint(parent) local centerX,centerY = parent:GetCenter() @@ -282,7 +282,7 @@ local function Pinpoint(parent) local result; if not centerX or not centerY then return "CENTER" - end; + end local heightTop = screenHeight * 0.75; local heightBottom = screenHeight * 0.25; local widthLeft = screenWidth * 0.25; @@ -305,9 +305,9 @@ local function Pinpoint(parent) result="RIGHT" else result="CENTER" - end; + end return result -end; +end local function SaveActionButton(parent) local button = parent:GetName() @@ -319,10 +319,10 @@ local function SaveActionButton(parent) MOD.Storage.Cache[parent] = true end parent:SetSlotTemplate(true, 2, 0, 0) -end; +end local function SetFlyoutButton(button) - if not button or not button.FlyoutArrow or not button.FlyoutArrow:IsShown() or not button.FlyoutBorder then return end; + if not button or not button.FlyoutArrow or not button.FlyoutArrow:IsShown() or not button.FlyoutBorder then return end local LOCKDOWN = InCombatLockdown() button.FlyoutBorder:SetAlpha(0) button.FlyoutBorderShadow:SetAlpha(0) @@ -336,10 +336,10 @@ local function SetFlyoutButton(button) maxFlyoutCount = max; break end - end; + end local offset = 0; - if SpellFlyout:IsShown() and SpellFlyout:GetParent() == button or GetMouseFocus() == button then offset = 5 else offset = 2 end; - if button:GetParent() and button:GetParent():GetParent() and button:GetParent():GetParent():GetName() and button:GetParent():GetParent():GetName() == "SpellBookSpellIconsFrame" then return end; + if SpellFlyout:IsShown() and SpellFlyout:GetParent() == button or GetMouseFocus() == button then offset = 5 else offset = 2 end + if button:GetParent() and button:GetParent():GetParent() and button:GetParent():GetParent():GetName() and button:GetParent():GetParent():GetName() == "SpellBookSpellIconsFrame" then return end if button:GetParent() then local point = Pinpoint(button:GetParent()) if point:find("RIGHT") then @@ -372,7 +372,7 @@ local function SetFlyoutButton(button) end end end -end; +end local function ModifyActionButton(parent) local button = parent:GetName() @@ -390,42 +390,42 @@ local function ModifyActionButton(parent) local checked = parent:GetCheckedTexture() if cooldown then cooldown.SizeOverride = MOD.db.cooldownSize - end; + end if highlight then highlight:SetTexture(1,1,1,.2) - end; + end if pushed then pushed:SetTexture(0,0,0,.4) - end; + end if checked then checked:SetTexture(1,1,1,.2) - end; + end if flash then flash:SetTexture(nil) - end; + end if normal then normal:SetTexture(nil) normal:Hide() normal:SetAlpha(0) - end; + end if parentTex then parentTex:SetTexture(nil) parentTex:Hide() parentTex:SetAlpha(0) - end; - if border then border:MUNG()end; + end + if border then border:MUNG()end if count then count:ClearAllPoints() count:SetPoint("BOTTOMRIGHT",1,1) count:SetShadowOffset(1,-1) count:SetFontTemplate(SuperVillain.Shared:Fetch("font",MOD.db.countFont),MOD.db.countFontSize,MOD.db.countFontOutline) - end; + end if icon then icon:SetTexCoord(.1,.9,.1,.9) icon:SetGradient("VERTICAL",.5,.5,.5,1,1,1) icon:FillInner() - end; - if shine then shine:SetAllPoints()end; + end + if shine then shine:SetAllPoints()end if MOD.db.hotkeytext then hotkey:ClearAllPoints() hotkey:SetAllPoints() @@ -433,19 +433,19 @@ local function ModifyActionButton(parent) hotkey:SetJustifyH("RIGHT") hotkey:SetJustifyV("TOP") hotkey:SetShadowOffset(1,-1) - end; + end if parent.style then parent.style:SetDrawLayer('BACKGROUND',-7) - end; + end parent.FlyoutUpdateFunc = SetFlyoutButton; MOD:FixKeybindText(parent) -end; +end do local SpellFlyoutButton_OnEnter = function(self) local parent = self:GetParent() local anchor = select(2, parent:GetPoint()) - if not MOD.Storage.Cache[anchor] then return end; + if not MOD.Storage.Cache[anchor] then return end local anchorParent = anchor:GetParent() if anchorParent._fade then local alpha = anchorParent._alpha @@ -457,7 +457,7 @@ do local SpellFlyoutButton_OnLeave = function(self) local parent = self:GetParent() local anchor = select(2, parent:GetPoint()) - if not MOD.Storage.Cache[anchor] then return end; + if not MOD.Storage.Cache[anchor] then return end local anchorParent = anchor:GetParent() if anchorParent._fade then local actual = anchorParent:GetAlpha() @@ -467,7 +467,7 @@ do local SpellFlyout_OnEnter = function(self) local anchor = select(2,self:GetPoint()) - if not MOD.Storage.Cache[anchor] then return end; + if not MOD.Storage.Cache[anchor] then return end local anchorParent = anchor:GetParent() if anchorParent._fade then Bar_OnEnter(anchorParent) @@ -476,7 +476,7 @@ do local SpellFlyout_OnLeave = function(self) local anchor = select(2, self:GetPoint()) - if not MOD.Storage.Cache[anchor] then return end; + if not MOD.Storage.Cache[anchor] then return end local anchorParent=anchor:GetParent() if anchorParent._fade then Bar_OnLeave(anchorParent) @@ -493,25 +493,25 @@ do _G["SpellFlyoutButton"..i]:HookScript('OnLeave', SpellFlyoutButton_OnLeave) end - end; + end SpellFlyout:HookScript('OnEnter', SpellFlyout_OnEnter) SpellFlyout:HookScript('OnLeave', SpellFlyout_OnLeave) end local QualifyFlyouts = function() - if InCombatLockdown() then return end; + if InCombatLockdown() then return end for button,_ in pairs(MOD.Storage.Cache)do if(button and button.FlyoutArrow) then SetFlyoutButton(button) end - end; - end; + end + end function SetSpellFlyoutHook() SpellFlyout:HookScript("OnShow",SpellFlyout_OnShow); SuperVillain:ExecuteTimer(QualifyFlyouts, 5) end -end; +end --[[ ########################################################## CORE FUNCTIONS @@ -545,22 +545,22 @@ function MOD:UpdateBarBindings(pet,stance) MOD:FixKeybindText(_G["PetActionButton"..i]) else _G["PetActionButton"..i.."HotKey"]:Hide() - end; + end end end -end; +end function MOD:UpdateAllBindings(event) if event == "UPDATE_BINDINGS" then MOD:UpdateBarBindings(true,true) - end; + end MOD:UnregisterEvent("PLAYER_REGEN_DISABLED") - if InCombatLockdown()then return end; + if InCombatLockdown()then return end for barID,stored in pairs(MOD.Storage)do if (type(stored) == "table" and (barID ~= "Pet" and barID ~= "Stance" and barID ~= "Cache")) then local bar = stored.bar; local buttons = stored.buttons; - if not bar or not buttons then return end; + if not bar or not buttons then return end ClearOverrideBindings(bar); local nameMod = bar:GetName().."Button"; local thisBinding = stored.binding; @@ -571,12 +571,12 @@ function MOD:UpdateAllBindings(event) local key = select(x,GetBindingKey(binding)) if (key and key ~= "") then SetOverrideBindingClick(bar,false,key,btn) - end; + end end end end - end; -end; + end +end function MOD:SetBarConfigData(barID) local data = self.Storage[barID] @@ -601,13 +601,13 @@ function MOD:SetBarConfigData(barID) button:SetAttribute("checkfocuscast",true) button:UpdateConfig(data.config) end -end; +end function MOD:UpdateBarPagingDefaults() local parse = "[vehicleui,mod:alt,mod:ctrl] %d; [possessbar] %d; [overridebar] %d; [form,noform] 0; [shapeshift] 13; [bar:2] 2; [bar:3] 3; [bar:4] 4; [bar:5] 5; [bar:6] 6;"; if self.db.Bar6.enable then parse = "[vehicleui,mod:alt,mod:ctrl] %d; [possessbar] %d; [overridebar] %d; [form,noform] 0; [shapeshift] 13; [bar:3] 3; [bar:4] 4; [bar:5] 5; [bar:6] 6;"; - end; + end if self.db.Bar1.useCustomPaging then parse = parse .. " " .. self.db.Bar1.customPaging[SuperVillain.class]; end @@ -616,8 +616,8 @@ function MOD:UpdateBarPagingDefaults() if self.db['Bar'..i].useCustomPaging then self.Storage['Bar'..i].conditions = self.db['Bar'..i].customPaging[SuperVillain.class]; end - end; - if((not SuperVillain.db.SVBar.enable or InCombatLockdown()) or not self.isInitialized) then return end; + end + if((not SuperVillain.db.SVBar.enable or InCombatLockdown()) or not self.isInitialized) then return end local Bar2Option = InterfaceOptionsActionBarsPanelBottomRight local Bar3Option = InterfaceOptionsActionBarsPanelBottomLeft local Bar4Option = InterfaceOptionsActionBarsPanelRightTwo @@ -652,7 +652,7 @@ function MOD:UpdateBarPagingDefaults() elseif (self.db.Bar5.enable and not Bar5Option:GetChecked()) or (not self.db.Bar5.enable and Bar5Option:GetChecked()) then Bar5Option:Click() end -end; +end --[[ ########################################################## CORE FUNCTIONS @@ -664,7 +664,7 @@ do if parent and parent._fade then SuperVillain:SecureFadeIn(parent, 0.2, parent:GetAlpha(), parent._alpha) end - end; + end local Button_OnLeave = function(self) local parent = self:GetParent() @@ -672,11 +672,11 @@ do if parent and parent._fade then SuperVillain:SecureFadeOut(parent, 1, parent:GetAlpha(), 0) end - end; + end local function _refreshButtons(bar, id, max, space, cols, totalButtons, size, point, selfcast) - if InCombatLockdown() then return end; - if not bar then return end; + if InCombatLockdown() then return end + if not bar then return end local hideByScale = id == "Pet" and true or false; local isStance = id == "Stance" and true or false; local button,lastButton,lastRow; @@ -691,7 +691,7 @@ do if(selfcast) then button:SetAttribute("unit2", "player") - end; + end if(not button._hookFade) then button:HookScript('OnEnter', Button_OnEnter) @@ -700,7 +700,7 @@ do -- NewHook(button, "SetAlpha", function(self) print(self:GetName());print(self:GetAlpha()) end) -- end button._hookFade = true; - end; + end local x,y,anchor1,anchor2; @@ -735,7 +735,7 @@ do anchor2 = "LEFT" end button:Point(anchor1,lastButton,anchor2,x,y) - end; + end if(i > totalButtons) then if hideByScale then @@ -751,14 +751,14 @@ do else button:Show() end - end; + end if (not isStance or (isStance and not button.FlyoutUpdateFunc)) then ModifyActionButton(button); SaveActionButton(button); end - end; - end; + end + end local function _getPage(bar, defaultPage, condition) local page = MOD.db[bar].customPaging[SuperVillain.class] @@ -772,7 +772,7 @@ do end function MOD:RefreshBar(id) - if(InCombatLockdown() or (not self.Storage[id] or not self.Storage[id].bar or not self.db[id])) then return end; + if(InCombatLockdown() or (not self.Storage[id] or not self.Storage[id].bar or not self.db[id])) then return end local db = self.db[id]; local data = self.Storage[id] local selfcast = self.db.rightClickSelf @@ -788,8 +788,8 @@ do local max = isStance and GetNumShapeshiftForms() or totalButtons; local rows = ceil(max / cols); - if max < cols then cols = max end; - if rows < 1 then rows = 1 end; + if max < cols then cols = max end + if rows < 1 then rows = 1 end bar:Width(space + (size * cols) + ((space * (cols - 1)) + space)); bar:Height((space + (size * rows)) + ((space * (rows - 1)) + space)); bar.backdrop:ClearAllPoints() @@ -801,13 +801,13 @@ do bar.backdrop:Show() else bar.backdrop:Hide() - end; + end if(not bar._hookFade) then bar:HookScript('OnEnter', Bar_OnEnter) bar:HookScript('OnLeave', Bar_OnLeave) bar._hookFade = true; - end; + end if(db.mouseover == true) then bar:SetAlpha(0) @@ -815,7 +815,7 @@ do else bar:SetAlpha(db.alpha) bar._fade = false - end; + end _refreshButtons(bar, id, max, space, cols, totalButtons, size, point, selfcast); @@ -858,14 +858,14 @@ do else bar:Hide() UnregisterStateDriver(bar, "visibility") - end; + end SuperVillain:SetSnapOffset("SVUI_Action"..id.."_MOVE", (space / 2)) end - end; -end; + end +end function MOD:RefreshActionBars() - if InCombatLockdown() then return end; + if InCombatLockdown() then return end self:UpdateBarPagingDefaults() for button,_ in pairs(self.Storage.Cache)do if button then @@ -877,10 +877,10 @@ function MOD:RefreshActionBars() else self.Storage.Cache[button]=nil end - end; + end for t=1,6 do self:RefreshBar("Bar"..t) - end; + end self:RefreshBar("Pet") self:RefreshBar("Stance") self:UpdateBarBindings(true,true) @@ -888,8 +888,8 @@ function MOD:RefreshActionBars() if barID ~= "Pet" and barID ~= "Stance" then self:SetBarConfigData(barID) end - end; -end; + end +end local Vehicle_Updater = function() local bar = MOD.Storage['Bar1'].bar @@ -910,7 +910,7 @@ local Vehicle_Updater = function() bar.backdrop:SetFrameLevel(0); end MOD:RefreshBar("Bar1") -end; +end --[[ ########################################################## HOOKED / REGISTERED FUNCTIONS @@ -918,7 +918,7 @@ HOOKED / REGISTERED FUNCTIONS ]]-- local CreateExtraBar = function(self) local specialBar = CreateFrame("Frame", "SVUI_SpecialAbility", SuperVillain.UIParent) - specialBar:Point("BOTTOM", SuperVillain.UIParent, "BOTTOM", 0, 150) + specialBar:Point("TOP", SuperVillain.UIParent, "CENTER", 0, -50) specialBar:Size(ExtraActionBarFrame:GetSize()) ExtraActionBarFrame:SetParent(specialBar) ExtraActionBarFrame:ClearAllPoints() @@ -944,17 +944,6 @@ local CreateExtraBar = function(self) ExtraActionBarFrame:Show() end SuperVillain:SetSVMovable(specialBar, "SVUI_SpecialAbility_MOVE", L["Boss Button"], nil, nil, nil, "ALL, ACTIONBAR") - - local exitButton = CreateFrame("Button", "SVUI_BailOut", SuperVillain.UIParent, "SecureHandlerClickTemplate") - exitButton:Size(64, 64) - exitButton:Point("TOPLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 2, -30) - exitButton:SetNormalTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") - exitButton:SetPushedTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") - exitButton:SetHighlightTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") - exitButton:SetFixedPanelTemplate("Transparent") - exitButton:RegisterForClicks("AnyUp") - exitButton:SetScript("OnClick", VehicleExit) - RegisterStateDriver(exitButton, "visibility", "[vehicleui] show;hide") end local SVUIOptionsPanel_OnEvent = function() @@ -966,120 +955,120 @@ local SVUIOptionsPanel_OnEvent = function() InterfaceOptionsActionBarsPanelBottomLeft:SetScript('OnEnter',nil) InterfaceOptionsActionBarsPanelRightTwo:SetScript('OnEnter',nil) InterfaceOptionsActionBarsPanelRight:SetScript('OnEnter',nil) -end; +end local SVUIButton_ShowOverlayGlow = function(self) - if not self.overlay then return end; + if not self.overlay then return end local size = self:GetWidth() / 3; self.overlay:WrapOuter(self, size) -end; +end local function ResetAllBindings() - if InCombatLockdown()then return end; + if InCombatLockdown()then return end for barID,stored in pairs(MOD.Storage)do local bar = stored.bar; - if not bar then return end; + if not bar then return end ClearOverrideBindings(bar); - end; + end MOD:RegisterEvent("PLAYER_REGEN_DISABLED","UpdateAllBindings") -end; +end local function RemoveDefaults() - local removalManager=CreateFrame("Frame") - removalManager:Hide() - MultiBarBottomLeft:SetParent(removalManager) - MultiBarBottomRight:SetParent(removalManager) - MultiBarLeft:SetParent(removalManager) - MultiBarRight:SetParent(removalManager) - for i=1,12 do - _G["ActionButton"..i]:Hide() - _G["ActionButton"..i]:UnregisterAllEvents() - _G["ActionButton"..i]:SetAttribute("statehidden",true) - _G["MultiBarBottomLeftButton"..i]:Hide() - _G["MultiBarBottomLeftButton"..i]:UnregisterAllEvents() - _G["MultiBarBottomLeftButton"..i]:SetAttribute("statehidden",true) - _G["MultiBarBottomRightButton"..i]:Hide() - _G["MultiBarBottomRightButton"..i]:UnregisterAllEvents() - _G["MultiBarBottomRightButton"..i]:SetAttribute("statehidden",true) - _G["MultiBarRightButton"..i]:Hide() - _G["MultiBarRightButton"..i]:UnregisterAllEvents() - _G["MultiBarRightButton"..i]:SetAttribute("statehidden",true) - _G["MultiBarLeftButton"..i]:Hide() - _G["MultiBarLeftButton"..i]:UnregisterAllEvents() - _G["MultiBarLeftButton"..i]:SetAttribute("statehidden",true) - if _G["VehicleMenuBarActionButton"..i] then - _G["VehicleMenuBarActionButton"..i]:Hide() - _G["VehicleMenuBarActionButton"..i]:UnregisterAllEvents() - _G["VehicleMenuBarActionButton"..i]:SetAttribute("statehidden",true) - end; - if _G['OverrideActionBarButton'..i] then - _G['OverrideActionBarButton'..i]:Hide() - _G['OverrideActionBarButton'..i]:UnregisterAllEvents() - _G['OverrideActionBarButton'..i]:SetAttribute("statehidden",true) - end; - _G['MultiCastActionButton'..i]:Hide() - _G['MultiCastActionButton'..i]:UnregisterAllEvents() - _G['MultiCastActionButton'..i]:SetAttribute("statehidden",true) - end; - ActionBarController:UnregisterAllEvents() - ActionBarController:RegisterEvent('UPDATE_EXTRA_ACTIONBAR') - MainMenuBar:EnableMouse(false) - MainMenuBar:SetAlpha(0) - MainMenuExpBar:UnregisterAllEvents() - MainMenuExpBar:Hide() - MainMenuExpBar:SetParent(removalManager) - local maxChildren = MainMenuBar:GetNumChildren(); - for i=1,maxChildren do - local child=select(i,MainMenuBar:GetChildren()) - if child then - child:UnregisterAllEvents() - child:Hide() - child:SetParent(removalManager) - end - end; - ReputationWatchBar:UnregisterAllEvents() - ReputationWatchBar:Hide() - ReputationWatchBar:SetParent(removalManager) - MainMenuBarArtFrame:UnregisterEvent("ACTIONBAR_PAGE_CHANGED") - MainMenuBarArtFrame:UnregisterEvent("ADDON_LOADED") - MainMenuBarArtFrame:Hide() - MainMenuBarArtFrame:SetParent(removalManager) - StanceBarFrame:UnregisterAllEvents() - StanceBarFrame:Hide() - StanceBarFrame:SetParent(removalManager) - OverrideActionBar:UnregisterAllEvents() - OverrideActionBar:Hide() - OverrideActionBar:SetParent(removalManager) - PossessBarFrame:UnregisterAllEvents() - PossessBarFrame:Hide() - PossessBarFrame:SetParent(removalManager) - PetActionBarFrame:UnregisterAllEvents() - PetActionBarFrame:Hide() - PetActionBarFrame:SetParent(removalManager) - MultiCastActionBarFrame:UnregisterAllEvents() - MultiCastActionBarFrame:Hide() - MultiCastActionBarFrame:SetParent(removalManager) - IconIntroTracker:UnregisterAllEvents() - IconIntroTracker:Hide() - IconIntroTracker:SetParent(removalManager) - InterfaceOptionsCombatPanelActionButtonUseKeyDown:SetScale(0.0001) - InterfaceOptionsCombatPanelActionButtonUseKeyDown:SetAlpha(0) - InterfaceOptionsActionBarsPanelAlwaysShowActionBars:EnableMouse(false) - InterfaceOptionsActionBarsPanelPickupActionKeyDropDownButton:SetScale(0.0001) - InterfaceOptionsActionBarsPanelLockActionBars:SetScale(0.0001) - InterfaceOptionsActionBarsPanelAlwaysShowActionBars:SetAlpha(0) - InterfaceOptionsActionBarsPanelPickupActionKeyDropDownButton:SetAlpha(0) - InterfaceOptionsActionBarsPanelLockActionBars:SetAlpha(0) - InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetAlpha(0) - InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetScale(0.00001) - InterfaceOptionsStatusTextPanelXP:SetAlpha(0) - InterfaceOptionsStatusTextPanelXP:SetScale(0.00001) - if PlayerTalentFrame then - PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - else - hooksecurefunc("TalentFrame_LoadUI", function() PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") end) - end -end; + local removalManager=CreateFrame("Frame") + removalManager:Hide() + MultiBarBottomLeft:SetParent(removalManager) + MultiBarBottomRight:SetParent(removalManager) + MultiBarLeft:SetParent(removalManager) + MultiBarRight:SetParent(removalManager) + for i=1,12 do + _G["ActionButton"..i]:Hide() + _G["ActionButton"..i]:UnregisterAllEvents() + _G["ActionButton"..i]:SetAttribute("statehidden",true) + _G["MultiBarBottomLeftButton"..i]:Hide() + _G["MultiBarBottomLeftButton"..i]:UnregisterAllEvents() + _G["MultiBarBottomLeftButton"..i]:SetAttribute("statehidden",true) + _G["MultiBarBottomRightButton"..i]:Hide() + _G["MultiBarBottomRightButton"..i]:UnregisterAllEvents() + _G["MultiBarBottomRightButton"..i]:SetAttribute("statehidden",true) + _G["MultiBarRightButton"..i]:Hide() + _G["MultiBarRightButton"..i]:UnregisterAllEvents() + _G["MultiBarRightButton"..i]:SetAttribute("statehidden",true) + _G["MultiBarLeftButton"..i]:Hide() + _G["MultiBarLeftButton"..i]:UnregisterAllEvents() + _G["MultiBarLeftButton"..i]:SetAttribute("statehidden",true) + if _G["VehicleMenuBarActionButton"..i] then + _G["VehicleMenuBarActionButton"..i]:Hide() + _G["VehicleMenuBarActionButton"..i]:UnregisterAllEvents() + _G["VehicleMenuBarActionButton"..i]:SetAttribute("statehidden",true) + end + if _G['OverrideActionBarButton'..i] then + _G['OverrideActionBarButton'..i]:Hide() + _G['OverrideActionBarButton'..i]:UnregisterAllEvents() + _G['OverrideActionBarButton'..i]:SetAttribute("statehidden",true) + end + _G['MultiCastActionButton'..i]:Hide() + _G['MultiCastActionButton'..i]:UnregisterAllEvents() + _G['MultiCastActionButton'..i]:SetAttribute("statehidden",true) + end + ActionBarController:UnregisterAllEvents() + ActionBarController:RegisterEvent('UPDATE_EXTRA_ACTIONBAR') + MainMenuBar:EnableMouse(false) + MainMenuBar:SetAlpha(0) + MainMenuExpBar:UnregisterAllEvents() + MainMenuExpBar:Hide() + MainMenuExpBar:SetParent(removalManager) + local maxChildren = MainMenuBar:GetNumChildren(); + for i=1,maxChildren do + local child=select(i,MainMenuBar:GetChildren()) + if child then + child:UnregisterAllEvents() + child:Hide() + child:SetParent(removalManager) + end + end + ReputationWatchBar:UnregisterAllEvents() + ReputationWatchBar:Hide() + ReputationWatchBar:SetParent(removalManager) + MainMenuBarArtFrame:UnregisterEvent("ACTIONBAR_PAGE_CHANGED") + MainMenuBarArtFrame:UnregisterEvent("ADDON_LOADED") + MainMenuBarArtFrame:Hide() + MainMenuBarArtFrame:SetParent(removalManager) + StanceBarFrame:UnregisterAllEvents() + StanceBarFrame:Hide() + StanceBarFrame:SetParent(removalManager) + OverrideActionBar:UnregisterAllEvents() + OverrideActionBar:Hide() + OverrideActionBar:SetParent(removalManager) + PossessBarFrame:UnregisterAllEvents() + PossessBarFrame:Hide() + PossessBarFrame:SetParent(removalManager) + PetActionBarFrame:UnregisterAllEvents() + PetActionBarFrame:Hide() + PetActionBarFrame:SetParent(removalManager) + MultiCastActionBarFrame:UnregisterAllEvents() + MultiCastActionBarFrame:Hide() + MultiCastActionBarFrame:SetParent(removalManager) + IconIntroTracker:UnregisterAllEvents() + IconIntroTracker:Hide() + IconIntroTracker:SetParent(removalManager) + InterfaceOptionsCombatPanelActionButtonUseKeyDown:SetScale(0.0001) + InterfaceOptionsCombatPanelActionButtonUseKeyDown:SetAlpha(0) + InterfaceOptionsActionBarsPanelAlwaysShowActionBars:EnableMouse(false) + InterfaceOptionsActionBarsPanelPickupActionKeyDropDownButton:SetScale(0.0001) + InterfaceOptionsActionBarsPanelLockActionBars:SetScale(0.0001) + InterfaceOptionsActionBarsPanelAlwaysShowActionBars:SetAlpha(0) + InterfaceOptionsActionBarsPanelPickupActionKeyDropDownButton:SetAlpha(0) + InterfaceOptionsActionBarsPanelLockActionBars:SetAlpha(0) + InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetAlpha(0) + InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetScale(0.00001) + InterfaceOptionsStatusTextPanelXP:SetAlpha(0) + InterfaceOptionsStatusTextPanelXP:SetScale(0.00001) + if PlayerTalentFrame then + PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") + else + hooksecurefunc("TalentFrame_LoadUI", function() PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") end) + end +end --[[ ########################################################## BUILD FUNCTION / UPDATE @@ -1087,10 +1076,10 @@ BUILD FUNCTION / UPDATE ]]-- function MOD:ReLoad() self:RefreshActionBars(); -end; +end function MOD:Load() - if not SuperVillain.db.SVBar.enable then return end; + if not SuperVillain.db.SVBar.enable then return end RemoveDefaults(); self:Protect("RefreshActionBars"); self:UpdateBarPagingDefaults(); @@ -1104,13 +1093,13 @@ function MOD:Load() ResetAllBindings() else self:UpdateAllBindings() - end; + end NewHook("BlizzardOptionsPanel_OnEvent", SVUIOptionsPanel_OnEvent) NewHook("ActionButton_ShowOverlayGlow", SVUIButton_ShowOverlayGlow) - if not GetCVarBool("lockActionBars") then SetCVar("lockActionBars", 1) end; + if not GetCVarBool("lockActionBars") then SetCVar("lockActionBars", 1) end SetSpellFlyoutHook() MOD.IsLoaded = true -end; +end SuperVillain.Registry:NewPackage(MOD, "SVBar") SuperVillain.Registry:Temp("SVBar", CreateExtraBar) \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/laborer/common/archaeology.lua b/Interface/AddOns/SVUI/packages/laborer/common/archaeology.lua index d508775..228cb92 100644 --- a/Interface/AddOns/SVUI/packages/laborer/common/archaeology.lua +++ b/Interface/AddOns/SVUI/packages/laborer/common/archaeology.lua @@ -57,6 +57,7 @@ local refArtifacts = {}; for i = 1, 12 do refArtifacts[i] = {} end +local NEEDS_UPDATE = true; local ArchLaborer = CreateFrame("Frame", "SVUI_ArchLaborer", UIParent) --[[ ########################################################## @@ -160,7 +161,7 @@ end local function UpdateArtifactCache() local found, raceName, raceItemID, cache, _; - for index=1, 12 do + for index = 1, 12 do found = GetNumArtifactsByRace(index) raceName, _, raceItemID = GetArchaeologyRaceInfo(index) cache = refArtifacts[index] @@ -202,6 +203,7 @@ local function UpdateArtifactCache() end UpdateArtifactBars(index) end + NEEDS_UPDATE = false end local function GetTitleAndSkill() @@ -245,7 +247,13 @@ do local Arch_OnEvent = function(self, event, ...) if(InCombatLockdown() or not archSpell) then return end - if(event == "ZONE_CHANGED" or event == "ARTIFACT_DIG_SITE_UPDATED" or event == "ARTIFACT_DIGSITE_COMPLETE") then + if(ArchCanSurvey and (event == "ARCHAEOLOGY_SURVEY_CAST" or event == "CURRENCY_DISPLAY_UPDATE")) then + UpdateArtifactCache() + elseif(event == "ARTIFACT_COMPLETE" or event == "ARTIFACT_DIG_SITE_UPDATED") then + UpdateArtifactCache() + elseif(event == "ARTIFACT_HISTORY_READY" or event == "ARTIFACT_DIGSITE_COMPLETE") then + NEEDS_UPDATE = true + else ArchCanSurvey = CanScanResearchSite() if(ArchCanSurvey and not ArchWillSurvey) then _G["SVUI_ModeCaptureWindow"]:SetAttribute("type", "spell") @@ -258,6 +266,7 @@ do ModeAlert.HelpText = "Double-Right-Click anywhere on the screen to open the artifacts window."; ArchWillSurvey = false end + if(event == "ZONE_CHANGED_NEW_AREA") then ArchSiteFound = nil end if(not ArchSiteFound) then local sites = ArchaeologyMapUpdateAll(); if(sites and sites > 0) then @@ -267,11 +276,9 @@ do ArchSiteFound = nil end end - if(event == "ARTIFACT_DIG_SITE_UPDATED" or event == "ARTIFACT_DIGSITE_COMPLETE") then + if(NEEDS_UPDATE) then UpdateArtifactCache() end - elseif(ArchCanSurvey and (event == "ARTIFACT_HISTORY_READY" or event == "CURRENCY_DISPLAY_UPDATE" or event == "ARTIFACT_COMPLETE")) then - UpdateArtifactCache() end end; @@ -302,14 +309,16 @@ do UpdateArtifactCache() ArchEventHandler:RegisterEvent("ZONE_CHANGED") + ArchEventHandler:RegisterEvent("ZONE_CHANGED_NEW_AREA") + ArchEventHandler:RegisterEvent("ZONE_CHANGED_INDOORS") + ArchEventHandler:RegisterEvent("ARTIFACT_DIG_SITE_UPDATED") ArchEventHandler:RegisterEvent("ARTIFACT_DIGSITE_COMPLETE") ArchEventHandler:RegisterEvent("ARTIFACT_HISTORY_READY") ArchEventHandler:RegisterEvent("ARTIFACT_COMPLETE") + ArchEventHandler:RegisterEvent("CURRENCY_DISPLAY_UPDATE") - --ArchEventHandler:RegisterEvent("ZONE_CHANGED_NEW_AREA") - --ArchEventHandler:RegisterEvent("ZONE_CHANGED_INDOORS") - --ArchEventHandler:RegisterEvent("ARCHAEOLOGY_SURVEY_CAST") + ArchEventHandler:RegisterEvent("ARCHAEOLOGY_SURVEY_CAST") ArchEventHandler:SetScript("OnEvent", Arch_OnEvent) if(playerRace ~= "Dwarf") then diff --git a/Interface/AddOns/SVUI/packages/map/common/mmbar.lua b/Interface/AddOns/SVUI/packages/map/common/mmbar.lua index 019f2cb..fa9dd6a 100644 --- a/Interface/AddOns/SVUI/packages/map/common/mmbar.lua +++ b/Interface/AddOns/SVUI/packages/map/common/mmbar.lua @@ -211,8 +211,4 @@ function MOD:LoadMinimapButtons() MMBBar:SetScript("OnEnter",MMB_OnEnter) MMBBar:SetScript("OnLeave",MMB_OnLeave) self:UpdateMinimapButtonSettings() - - if SVUI_BailOut then - SVUI_BailOut:SetPoint("TOPLEFT",SVUI_MinimapFrame,"BOTTOMLEFT",2,-(SVUI_MiniMapButtonHolder:GetHeight() + 4)) - end end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/override/SVOverride.lua b/Interface/AddOns/SVUI/packages/override/SVOverride.lua index 4c5d5d9..2a75729 100644 --- a/Interface/AddOns/SVUI/packages/override/SVOverride.lua +++ b/Interface/AddOns/SVUI/packages/override/SVOverride.lua @@ -87,11 +87,30 @@ end local Vehicle_OnSetPoint = function(self,_,parent) if(parent == "MinimapCluster" or parent == _G["MinimapCluster"]) then VehicleSeatIndicator:ClearAllPoints() - if VehicleSeat_MOVE then - VehicleSeatIndicator:Point("TOPLEFT",VehicleSeat_MOVE,"TOPLEFT",0,0) - else - VehicleSeatIndicator:Point("TOPLEFT",SuperVillain.UIParent,"TOPLEFT",22,-45) - SuperVillain:SetSVMovable(VehicleSeatIndicator,"VehicleSeat_MOVE",L["Vehicle Seat Frame"]) + if SVUI_VehicleFrame_MOVE then + VehicleSeatIndicator:Point("BOTTOM", SVUI_VehicleFrame_MOVE, "BOTTOM", 0, 0) + else + local width,height = VehicleSeatIndicator:GetSize() + local holder = CreateFrame("Frame", "SVUI_VehicleFrame", SuperVillain.UIParent) + holder:SetSize(width, ((height + width) + 2)) + holder:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 22, -45) + + VehicleSeatIndicator:SetParent(holder) + VehicleSeatIndicator:Point("BOTTOM", holder, "BOTTOM", 0, 0) + VehicleSeatIndicator:SetFixedPanelTemplate("Transparent") + + local exit = CreateFrame("Button", "SVUI_BailOut", holder, "SecureHandlerClickTemplate") + exit:Size(width, width) + exit:Point("TOP", holder, "TOP", 0, 0) + exit:SetNormalTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") + exit:SetPushedTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") + exit:SetHighlightTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\EXIT") + exit:SetFixedPanelTemplate("Transparent") + exit:RegisterForClicks("AnyUp") + exit:SetScript("OnClick", VehicleExit) + RegisterStateDriver(exit, "visibility", "[vehicleui] show;hide") + + SuperVillain:SetSVMovable(holder, "SVUI_VehicleFrame_MOVE", L["Vehicle Seat Frame"]) end; VehicleSeatIndicator:SetScale(0.8) end diff --git a/Interface/AddOns/SVUI/packages/tip/SVTip.lua b/Interface/AddOns/SVUI/packages/tip/SVTip.lua index 3a2aeff..02e41d8 100644 --- a/Interface/AddOns/SVUI/packages/tip/SVTip.lua +++ b/Interface/AddOns/SVUI/packages/tip/SVTip.lua @@ -51,16 +51,26 @@ local targetList, inspectCache = {}, {}; local NIL_COLOR = { r = 1, g = 1, b = 1 }; local TAPPED_COLOR = { r = .6, g = .6, b = .6 }; local SKULL_ICON = "|TInterface\\TARGETINGFRAME\\UI-TargetingFrame-Skull.blp:16:16|t"; -local TAMABLE_INDICATOR = "|cffFFFF00Possibly Tamable|r"; +local TAMABLE_INDICATOR = "|cffFFFF00Tamable|r"; local TT_TOP = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-TOP]] local TT_BOTTOM = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-BOTTOM]] local TT_RIGHT = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-RIGHT-OVERLAY]] local TT_LEFT = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-LEFT-OVERLAY]] ---local TT_TOP = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-TOP]] ---local TT_BOTTOM = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-BOTTOM]] ---local TT_RIGHT = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-RIGHT]] ---local TT_LEFT = [[Interface\Addons\SVUI\assets\artwork\Template\Tooltip\TT-LEFT]] +local TAMABLE_FAMILIES = { + ["Basilisk"] = true, ["Bat"] = true, ["Bear"] = true, ["Beetle"] = true, + ["Bird of Prey"] = true, ["Boar"] = true, ["Carrion Bird"] = true, ["Cat"] = true, + ["Chimaera"] = true, ["Core Hound"] = true, ["Crab"] = true, ["Crane"] = true, + ["Crocolisk"] = true, ["Devilsaur"] = true, ["Direhorn"] = true, ["Dog"] = true, + ["Dragonhawk"] = true, ["Fox"] = true, ["Goat"] = true, ["Gorilla"] = true, + ["Wasp"] = true, ["Hydra"] = true, ["Hyena"] = true, ["Monkey"] = true, + ["Moth"] = true, ["Nether Ray"] = true, ["Porcupine"] = true, ["Quilen"] = true, + ["Raptor"] = true, ["Ravager"] = true, ["Rhino"] = true, ["Riverbeast"] = true, + ["Scorpid"] = true, ["Shale Spider"] = true, ["Spirit Beast"] = true, ["Serpent"] = true, + ["Silithid"] = true, ["Spider"] = true, ["Sporebat"] = true, ["Tallstrider"] = true, + ["Turtle"] = true, ["Warp Stalker"] = true, ["Wasp"] = true, ["Water strider"] = true, + ["Wind Serpent"] = true, ["Wolf"] = true, ["Worm"] = true +} local tooltips = { GameTooltip, ItemRefTooltip, ItemRefShoppingTooltip1, @@ -70,13 +80,14 @@ local tooltips = { WorldMapCompareTooltip1, WorldMapCompareTooltip2, WorldMapCompareTooltip3, DropDownList1MenuBackdrop, DropDownList2MenuBackdrop, DropDownList3MenuBackdrop, BNToastFrame -}; +} + local classification = { worldboss = format("|cffAF5050%s|r", BOSS), rareelite = format("|cffAF5050+%s|r", ITEM_QUALITY3_DESC), elite = "|cffAF5050+|r", rare = format("|cffAF5050%s|r", ITEM_QUALITY3_DESC) -}; +} --[[ ########################################################## LOCAL FUNCTIONS @@ -354,13 +365,13 @@ local _hook_GameTooltip_OnTooltipSetUnit = function(self) end if(UnitIsAFK(unit)) then - unitName = unitName .. " " .. L["AFK"] + GameTooltipTextLeft1:SetFormattedText("[|cffFF0000%s|r] |c%s%s|r ", L["AFK"], colors.colorStr, unitName) elseif(UnitIsDND(unit)) then - unitName = unitName .. " " .. L["DND"] + GameTooltipTextLeft1:SetFormattedText("[|cffFF9900%s|r] |c%s%s|r ", L["DND"], colors.colorStr, unitName) + else + GameTooltipTextLeft1:SetFormattedText("|c%s%s|r", colors.colorStr, unitName) end - GameTooltipTextLeft1:SetFormattedText("|c%s%s|r", colors.colorStr, unitName) - if(guildName) then if(guildRealm and isShiftKeyDown) then guildName = guildName.."-"..guildRealm @@ -420,7 +431,7 @@ local _hook_GameTooltip_OnTooltipSetUnit = function(self) if(creatureType) then local family = UnitCreatureFamily(unit) or creatureType - if(SuperVillain.class == "HUNTER" and creatureType == PET_TYPE_SUFFIX[8]) then + if(SuperVillain.class == "HUNTER" and creatureType == PET_TYPE_SUFFIX[8] and (family and TAMABLE_FAMILIES[family])) then local hunterLevel = UnitLevel("player") if(unitLevel <= hunterLevel) then TamablePet = true diff --git a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua index 5a145fe..3370203 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua @@ -25,6 +25,7 @@ assert(oUF_SuperVillain, "SVUI was unable to locate oUF."); local ELITE_TOP = [[Interface\Addons\SVUI\assets\artwork\Unitframe\Border\ELITE-TOP]] local ELITE_BOTTOM = [[Interface\Addons\SVUI\assets\artwork\Unitframe\Border\ELITE-BOTTOM]] local ELITE_RIGHT = [[Interface\Addons\SVUI\assets\artwork\Unitframe\Border\ELITE-RIGHT]] +local STUNNED_ANIM = [[Interface\Addons\SVUI\assets\artwork\Unitframe\UNIT-STUNNED]] --[[ ########################################################## LOCAL FUNCTIONS @@ -259,6 +260,32 @@ function MOD:SetActionPanel(frame, unit, noHealthText, noPowerText, noMiscText) frame.ActionPanel.special[3]:SetBlendMode("BLEND") frame.ActionPanel.special:SetAlpha(0.7) frame.ActionPanel.special:Hide() + else + frame.LossOfControl = CreateFrame("Frame", nil, frame) + frame.LossOfControl:SetAllPoints(frame) + frame.LossOfControl:SetFrameStrata("DIALOG") + frame.LossOfControl:SetFrameLevel(99) + + local stunned = frame.LossOfControl:CreateTexture(nil, "OVERLAY", nil, 1) + stunned:SetAllPoints() + stunned:SetTexture(STUNNED_ANIM) + stunned:SetVertexColor(1, 1, 0) + stunned:SetBlendMode("BLEND") + SuperVillain.Animate:Sprite(stunned, 0.15, false, true) + stunned:Hide() + + frame.LossOfControl.stunned = stunned + + LossOfControlFrame:HookScript("OnShow", function() + if(_G["SVUI_Player"] and _G["SVUI_Player"].LossOfControl) then + _G["SVUI_Player"].LossOfControl:Show() + end + end) + LossOfControlFrame:HookScript("OnHide", function() + if(_G["SVUI_Player"] and _G["SVUI_Player"].LossOfControl) then + _G["SVUI_Player"].LossOfControl:Hide() + end + end) end else frame.ActionPanel = CreateActionPanel(frame, 2) diff --git a/Interface/AddOns/SVUI/packages/unit/common/auras.lua b/Interface/AddOns/SVUI/packages/unit/common/auras.lua index ac50ef2..a4dacba 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/auras.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/auras.lua @@ -422,45 +422,51 @@ end UPDATE ########################################################## ]]-- -local temp = {} -function MOD:UpdateAuraWatch(frame, override) - local AW = frame.AuraWatch; - local unit = frame.unit - local key = frame.___key +local WATCH_CACHE = {} +function MOD:UpdateAuraWatch(frame, key, override) + twipe(WATCH_CACHE) + local AW = frame.AuraWatch + if not MOD.db[key] then return end - local db = MOD.db[key].buffIndicator; + local db = MOD.db[key].buffIndicator if not db then return end + if not db.enable then AW:Hide() return else AW:Show() - end + end + local bwSize = db.size; - if unit == "pet" and not override then - local petBW = SuperVillain.Filters["PetBuffWatch"] or {} - for _, buff in pairs(petBW)do - if buff.style == "text"then - buff.style = "NONE" - end - tinsert(temp, buff) - end + if key == "pet" and not override then + local petBW = SuperVillain.Filters["PetBuffWatch"] + if(petBW) then + for _, buff in pairs(petBW)do + if buff.style == "text" then + buff.style = "NONE" + end + tinsert(WATCH_CACHE, buff) + end + end else - local unitBW = SuperVillain.Filters["BuffWatch"] or {} - for _, buff in pairs(unitBW)do - if buff.style == "text"then - buff.style = "NONE" - end - tinsert(temp, buff) - end + local unitBW = SuperVillain.Filters["BuffWatch"] + if(unitBW) then + for _, buff in pairs(unitBW)do + if buff.style == "text" then + buff.style = "NONE" + end + tinsert(WATCH_CACHE, buff) + end + end end if AW.icons then for i = 1, #AW.icons do local iconTest = false; - for j = 1, #temp do - if #temp[j].id and #temp[j].id == AW.icons[i] then + for j = 1, #WATCH_CACHE do + if #WATCH_CACHE[j].id and #WATCH_CACHE[j].id == AW.icons[i] then iconTest = true; break end @@ -472,30 +478,34 @@ function MOD:UpdateAuraWatch(frame, override) end end - for i = 1, #temp do - if temp[i].id then - local buffName, _, buffTexture = GetSpellInfo(temp[i].id) + local fontFile = SuperVillain.Shared:Fetch("font", MOD.db.auraFont) + local fontSize = MOD.db.auraFontSize + local fontOutline = MOD.db.auraFontOutline + + for i = 1, #WATCH_CACHE do + if WATCH_CACHE[i].id then + local buffName, _, buffTexture = GetSpellInfo(WATCH_CACHE[i].id) if buffName then local watchedAura; - if not AW.icons[temp[i].id]then + if not AW.icons[WATCH_CACHE[i].id]then watchedAura = CreateFrame("Frame", nil, AW) else - watchedAura = AW.icons[temp[i].id] + watchedAura = AW.icons[WATCH_CACHE[i].id] end watchedAura.name = buffName; watchedAura.image = buffTexture; - watchedAura.spellID = temp[i].id; - watchedAura.anyUnit = temp[i].anyUnit; - watchedAura.style = temp[i].style; - watchedAura.onlyShowMissing = temp[i].onlyShowMissing; + watchedAura.spellID = WATCH_CACHE[i].id; + watchedAura.anyUnit = WATCH_CACHE[i].anyUnit; + watchedAura.style = WATCH_CACHE[i].style; + watchedAura.onlyShowMissing = WATCH_CACHE[i].onlyShowMissing; watchedAura.presentAlpha = watchedAura.onlyShowMissing and 0 or 1; watchedAura.missingAlpha = watchedAura.onlyShowMissing and 1 or 0; - watchedAura.textThreshold = temp[i].textThreshold or -1; - watchedAura.displayText = temp[i].displayText; + watchedAura.textThreshold = WATCH_CACHE[i].textThreshold or -1; + watchedAura.displayText = WATCH_CACHE[i].displayText; watchedAura:Width(bwSize) watchedAura:Height(bwSize) watchedAura:ClearAllPoints() - watchedAura:SetPoint(temp[i].point, frame.Health, temp[i].point, temp[i].xOffset, temp[i].yOffset) + watchedAura:SetPoint(WATCH_CACHE[i].point, frame.Health, WATCH_CACHE[i].point, WATCH_CACHE[i].xOffset, WATCH_CACHE[i].yOffset) if not watchedAura.icon then watchedAura.icon = watchedAura:CreateTexture(nil, "BORDER") watchedAura.icon:SetAllPoints(watchedAura) @@ -520,8 +530,8 @@ function MOD:UpdateAuraWatch(frame, override) end if watchedAura.style == "coloredIcon"then watchedAura.icon:SetTexture([[Interface\BUTTONS\WHITE8X8]]) - if temp[i]["color"]then - watchedAura.icon:SetVertexColor(temp[i]["color"].r, temp[i]["color"].g, temp[i]["color"].b) + if WATCH_CACHE[i]["color"]then + watchedAura.icon:SetVertexColor(WATCH_CACHE[i]["color"].r, WATCH_CACHE[i]["color"].g, WATCH_CACHE[i]["color"].b) else watchedAura.icon:SetVertexColor(0.8, 0.8, 0.8) end @@ -543,8 +553,8 @@ function MOD:UpdateAuraWatch(frame, override) if watchedAura.displayText then watchedAura.text:Show() local r, g, b = 1, 1, 1; - if temp[i].textColor then - r, g, b = temp[i].textColor.r, temp[i].textColor.g, temp[i].textColor.b + if WATCH_CACHE[i].textColor then + r, g, b = WATCH_CACHE[i].textColor.r, WATCH_CACHE[i].textColor.g, WATCH_CACHE[i].textColor.b end watchedAura.text:SetTextColor(r, g, b) else @@ -555,29 +565,25 @@ function MOD:UpdateAuraWatch(frame, override) end watchedAura.count:ClearAllPoints() if watchedAura.displayText then - local anchor, relative, x, y = unpack(textCounterOffsets[temp[i].point]) + local anchor, relative, x, y = unpack(textCounterOffsets[WATCH_CACHE[i].point]) watchedAura.count:SetPoint(anchor, watchedAura.text, relative, x, y) else - watchedAura.count:SetPoint("CENTER", unpack(counterOffsets[temp[i].point])) + watchedAura.count:SetPoint("CENTER", unpack(counterOffsets[WATCH_CACHE[i].point])) end - local fontFile = SuperVillain.Shared:Fetch("font", MOD.db.auraFont) - local fontSize = MOD.db.auraFontSize - local fontOutline = MOD.db.auraFontOutline - watchedAura.count:SetFont(fontFile, fontSize, fontOutline) watchedAura.text:SetFont(fontFile, fontSize, fontOutline) watchedAura.text:ClearAllPoints() - watchedAura.text:SetPoint(temp[i].point, watchedAura, temp[i].point) - if temp[i].enable then - AW.icons[temp[i].id] = watchedAura; + watchedAura.text:SetPoint(WATCH_CACHE[i].point, watchedAura, WATCH_CACHE[i].point) + if WATCH_CACHE[i].enable then + AW.icons[WATCH_CACHE[i].id] = watchedAura; if AW.watched then - AW.watched[temp[i].id] = watchedAura + AW.watched[WATCH_CACHE[i].id] = watchedAura end else - AW.icons[temp[i].id] = nil; + AW.icons[WATCH_CACHE[i].id] = nil; if AW.watched then - AW.watched[temp[i].id] = nil + AW.watched[WATCH_CACHE[i].id] = nil end watchedAura:Hide() watchedAura = nil @@ -588,14 +594,14 @@ function MOD:UpdateAuraWatch(frame, override) if frame.AuraWatch.Update then frame.AuraWatch.Update(frame) end - twipe(temp) + twipe(WATCH_CACHE) end -function MOD:UpdateAuraWatchFromHeader(header, override) +function MOD:UpdateGroupAuraWatch(header, override) assert(self.Headers[header], "Invalid group specified.") local group = self.Headers[header] for i = 1, group:GetNumChildren() do local frame = select(i, group:GetChildren()) - if frame and frame.Health then MOD:UpdateAuraWatch(frame, override) end + if frame and frame.Health then MOD:UpdateAuraWatch(frame, header, override) end end end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/unit/common/misc.lua b/Interface/AddOns/SVUI/packages/unit/common/misc.lua index 74f3666..8b2a8b2 100644 --- a/Interface/AddOns/SVUI/packages/unit/common/misc.lua +++ b/Interface/AddOns/SVUI/packages/unit/common/misc.lua @@ -117,11 +117,20 @@ function MOD:CreateCombatant(frame) local trinket = CreateFrame("Frame", nil, pvp) BasicBG(trinket) - trinket.Icon = trinket:CreateTexture(nil, "OVERLAY") + trinket.Icon = trinket:CreateTexture(nil, "BORDER") trinket.Icon:FillInner(trinket, 2, 2) trinket.Icon:SetTexture([[Interface\Icons\INV_MISC_QUESTIONMARK]]) trinket.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) + trinket.Unavailable = trinket:CreateTexture(nil, "OVERLAY") + trinket.Unavailable:SetAllPoints(trinket) + trinket.Unavailable:SetTexCoord(0.1, 0.9, 0.1, 0.9) + trinket.Unavailable:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Pass-Up]]) + trinket.Unavailable:Hide() + + trinket.CD = CreateFrame("Cooldown", nil, trinket) + trinket.CD:SetAllPoints(trinket) + pvp.Trinket = trinket local badge = CreateFrame("Frame", nil, pvp) diff --git a/Interface/AddOns/SVUI/packages/unit/frames/groups.lua b/Interface/AddOns/SVUI/packages/unit/frames/groups.lua index dd7820d..3d8847e 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames/groups.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames/groups.lua @@ -252,7 +252,7 @@ local UpdateRaidSubUnit = function(self, key, db) end end MOD.RefreshUnitMedia(self, key) - MOD:UpdateAuraWatch(self) + MOD:UpdateAuraWatch(self, key) MOD:RefreshUnitLayout(self, key) if(key ~= "raidpet") then self:EnableElement("ReadyCheck") @@ -590,7 +590,7 @@ local UpdatePartySubUnit = function(self, key, db) self:Size(db.width,db.height) end MOD:RefreshUnitLayout(self, key) - MOD:UpdateAuraWatch(self) + MOD:UpdateAuraWatch(self, key) end self:EnableElement('ReadyCheck') self:UpdateAllElements() diff --git a/Interface/AddOns/SVUI/packages/unit/frames/units.lua b/Interface/AddOns/SVUI/packages/unit/frames/units.lua index 6f2a1c3..9c4cd1c 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames/units.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames/units.lua @@ -462,7 +462,7 @@ local UpdatePetFrame = function(self) self:SetParent(SVUI_Player) end end - MOD:UpdateAuraWatch(self) + MOD:UpdateAuraWatch(self, "pet") self:UpdateAllElements() end UPDATERS["pet"] = UpdatePetFrame @@ -561,7 +561,7 @@ local UpdateFocusFrame = function(self) self.XRay:Hide() end - MOD:UpdateAuraWatch(self) + MOD:UpdateAuraWatch(self, "focus") self:UpdateAllElements() end UPDATERS["focus"] = UpdateFocusFrame diff --git a/Interface/AddOns/SVUI/scripts/pvp.lua b/Interface/AddOns/SVUI/scripts/pvp.lua index 1a890bb..ac90b0a 100644 --- a/Interface/AddOns/SVUI/scripts/pvp.lua +++ b/Interface/AddOns/SVUI/scripts/pvp.lua @@ -31,53 +31,89 @@ local SuperVillain, L = unpack(select(2, ...)); LOCALS ########################################################## ]]-- -local function EnteringBattleGround() - SVUI_PVPComm:Show() - local numButtons = 1 - local points = GetNumMapLandmarks() - for i = 1, points do - if(numButtons <= 6) then - local name, description, icon, _, _, _, active = GetMapLandmarkInfo(i) - local buttonName = ("SVUI_PVPCommButton"):format(numButtons) - local button = _G[buttonName] - button.name = name - button.description = description - button.Text:SetText(name) - button:SetFontString(button.Text) - button:Show() - numButtons = numButtons + 1 - end - end -end +local PVP_NODES = { + [461] = { --Arathi Basin (5) + "Stables", "Lumber", "Blacksmith", "Mine", "Farm" + }, + [935] = { --Deepwind Gorge (3) + "Center Mine", "North Mine", "South Mine" + }, + [482] = { --Eye of the Storm (4) + "Fel Reaver", "Blood Elf", "Draenei", "Mage" + }, + [736] = { --The Battle for Gilneas (3) + "LightHouse", "WaterWorks", "Mines" + }, +} + +-- local PVP_POI = { +-- [401] = { --Alterac Valley (15) +-- "Stormpike Aid Station", "Dun Baldar North Bunker", "Dun Baldar South Bunker", +-- "Stormpike Graveyard", "Icewing Bunker", "Stonehearth Graveyard", +-- "Stonehearth Bunker", "Snowfall Graveyard", "Iceblood Tower", +-- "Iceblood Graveyard", "Tower Point", "Frostwolf Graveyard", +-- "West Frostwolf Tower", "East Frostwolf Tower", "Frostwolf Relief Hut" +-- }, +-- [935] = { --Deepwind Gorge (2) +-- "Horde Cart", "Alliance Cart" +-- }, +-- [482] = { --Eye of the Storm (1) +-- "Flag" +-- }, +-- [860] = { --Silvershard Mines (1) +-- "Cart" +-- }, +-- [512] = { --Strand of the Ancients (5) +-- "Green Emerald", "Blue Sapphire", "Purple Amethyst", "Red Sun", "Yellow Moon" +-- }, +-- [540] = { --Isle of Conquest (5) +-- "Quarry", "Hangar", "Workshop", "Docks", "Refinery" +-- }, +-- [856] = { --Temple of Kotmogu (4) +-- "Red Orb", "Blue Orb", "Orange Orb", "Purple Orb" +-- }, +-- [626] = { --Twin Peaks (2) +-- "Horde Flag", "Alliance Flag" +-- }, +-- [443] = { --Warsong Gulch (2) +-- "Horde Flag", "Alliance Flag" +-- }, +-- } -local function UpdateBattleGroundLinks() +local function EnteringBattleGround() SVUI_PVPComm:Show() local numButtons = 1 - local points = GetNumMapLandmarks() - for i = 1, points do - if(numButtons <= 6) then - local name, description, icon, _, _, _, active = GetMapLandmarkInfo(i) - local buttonName = ("SVUI_PVPCommButton"):format(numButtons) - local button = _G[buttonName] - button.name = name - button.description = description - button.Text:SetText(name) - button:SetFontString(button.Text) - button:Show() + local mapID = GetCurrentMapAreaID() + local points = PVP_NODES[mapID] + if(not points) then return end + for i = 1, #points do + if(numButtons <= 5) then + local name = points[i] + local nodeName = ("SVUI_PVPNode%d"):format(numButtons) + local node = _G[nodeName] + local safe = node.Safe + local help = node.Help + safe.name = name + help.name = name + node.Text:SetText(name) + node:SetFontString(node.Text) + node:Show() numButtons = numButtons + 1 end end end local function ExitingBattleGround() - for i = 1, 6 do - local buttonName = ("SVUI_PVPCommButton"):format(numButtons) - local button = _G[buttonName] - button.name = "" - button.description = "" - button.Text:SetText("") - button:SetFontString(button.Text) - button:Hide() + for i = 1, 5 do + local nodeName = ("SVUI_PVPNode%d"):format(numButtons) + local node = _G[nodeName] + local safe = node.Safe + local help = node.Help + safe.name = "" + help.name = "" + node.Text:SetText("") + node:SetFontString(node.Text) + node:Hide() end SVUI_PVPComm:Hide() end @@ -86,7 +122,7 @@ end HANDLERS ########################################################## ]]-- -local Incoming_OnEnter = function(self) +local Node_OnEnter = function(self) if InCombatLockdown() then return end if(self.description and self.description ~= "") then self:SetBackdropBorderColor(1,0.45,0) @@ -97,13 +133,20 @@ local Incoming_OnEnter = function(self) end end -local Incoming_OnLeave = function(self) +local Node_OnLeave = function(self) if InCombatLockdown() then return end self:SetBackdropBorderColor(0,0,0) if(GameTooltip:IsShown()) then GameTooltip:Hide() end end -local Incoming_OnClick = function(self) +local Safe_OnClick = function(self) + if(self.name and self.name ~= "") then + local msg = ("%s Safe"):format(self.name) + SendChatMessage(msg, "INSTANCE_CHAT") + end +end + +local Help_OnClick = function(self) if(self.name and self.name ~= "") then local msg = ("{rt8} Incoming %s {rt8}"):format(self.name) SendChatMessage(msg, "INSTANCE_CHAT") @@ -131,30 +174,59 @@ LOADER ########################################################## ]]-- local function LoadPVPComm() - local width = 119 + local width = 156 local height = 156 local holder = CreateFrame("Frame", "SVUI_PVPComm", UIParent) holder:SetSize(width, height) holder:SetPoint("RIGHT", UIParent, "CENTER", -200, 0) - holder:SetPanelTemplate("Transparent") - for i = 1, 6 do + + for i = 1, 5 do local yOffset = (24 * (i - 1)) + 2 - local buttonName = ("SVUI_PVPCommButton"):format(i) - if(not _G[buttonName]) then - local button = CreateFrame("Button", buttonName, holder) - button:SetSize(115, 22) - button:SetPoint("TOP", holder, "TOP", 0, -yOffset) - button:SetButtonTemplate() - button.Text = button:CreateFontString(nil,"OVERLAY") - button.Text:SetFont(SuperVillain.Media.font.roboto, 12, "NONE") - button.Text:SetAllPoints(button) - button.Text:SetJustifyH("CENTER") - button.Text:SetText("") - button:SetFontString(button.Text) - button:SetScript("OnEnter", Incoming_OnEnter) - button:SetScript("OnLeave", Incoming_OnLeave) - button:SetScript("OnClick", Incoming_OnClick) - end + + local poiName = ("SVUI_PVPNode"):format(i) + local poi = CreateFrame("Frame", poiName, holder) + poi:SetSize(152, 22) + poi:SetPoint("TOP", holder, "TOP", 0, -yOffset) + poi:SetPanelTemplate("Transparent") + poi.Text = poi:CreateFontString(nil,"OVERLAY") + poi.Text:SetFont(SuperVillain.Media.font.roboto, 12, "NONE") + poi.Text:SetPoint("LEFT", poi, "LEFT", 2, 0) + poi.Text:SetHeight(22) + poi.Text:SetWidth(104) + poi.Text:SetJustifyH("CENTER") + poi.Text:SetText("") + + local safe = CreateFrame("Button", nil, poi) + safe:SetSize(22, 22) + safe:SetPoint("RIGHT", poi, "RIGHT", -2, 0) + safe:SetButtonTemplate() + local stxt = safe:CreateFontString(nil,"OVERLAY") + stxt:SetFont(SuperVillain.Media.font.roboto, 12, "NONE") + stxt:SetAllPoints(safe) + stxt:SetJustifyH("CENTER") + stxt:SetText("SAFE") + safe:SetFontString(stxt) + safe:SetScript("OnEnter", Node_OnEnter) + safe:SetScript("OnLeave", Node_OnLeave) + safe:SetScript("OnClick", Safe_OnClick) + + poi.Safe = safe + + local help = CreateFrame("Button", nil, poi) + help:SetSize(22, 22) + help:SetPoint("RIGHT", safe, "LEFT", -2, 0) + help:SetButtonTemplate() + local dtxt = help:CreateFontString(nil,"OVERLAY") + dtxt:SetFont(SuperVillain.Media.font.roboto, 12, "NONE") + dtxt:SetAllPoints(help) + dtxt:SetJustifyH("CENTER") + dtxt:SetText("HELP") + help:SetFontString(dtxt) + help:SetScript("OnEnter", Node_OnEnter) + help:SetScript("OnLeave", Node_OnLeave) + help:SetScript("OnClick", Help_OnClick) + + poi.Help = help end SuperVillain:SetSVMovable(holder, "SVUI_PVPComm_MOVE", L["PvP Communicator"]) diff --git a/Interface/AddOns/SVUI/system/installer.lua b/Interface/AddOns/SVUI/system/installer.lua index 9f1ba81..4bf9568 100644 --- a/Interface/AddOns/SVUI/system/installer.lua +++ b/Interface/AddOns/SVUI/system/installer.lua @@ -490,7 +490,7 @@ function SuperVillain:SetupAuralayout(style, preserve) end; local function InstallComplete() - SVUI_Profile.SAFEDATA.install_complete = SuperVillain.version; + SVUI_Profile.SAFEDATA.install_version = SuperVillain.version; StopMusic() SetCVar("Sound_MusicVolume",user_music_vol) okToResetMOVE = false; @@ -508,7 +508,7 @@ local function InstallMungsChoice() SuperVillain.db.SAFEDATA.barstyle = nil; SuperVillain:SetupBarLayout(); SuperVillain:SetupAuralayout(); - SVUI_Profile.SAFEDATA.install_complete = SuperVillain.version; + SVUI_Profile.SAFEDATA.install_version = SuperVillain.version; StopMusic() SetCVar("Sound_MusicVolume",user_music_vol) ReloadUI() @@ -863,7 +863,7 @@ function SuperVillain:ResetInstallation() SuperVillain:SetupAuralayout() end - SVUI_Profile.SAFEDATA.install_complete = SuperVillain.version; + SVUI_Profile.SAFEDATA.install_version = SuperVillain.version; SuperVillain:ResetMovables('') ReloadUI() end; diff --git a/Interface/AddOns/SVUI/system/mentalo.lua b/Interface/AddOns/SVUI/system/mentalo.lua index 0e38032..c2b7b9b 100644 --- a/Interface/AddOns/SVUI/system/mentalo.lua +++ b/Interface/AddOns/SVUI/system/mentalo.lua @@ -198,7 +198,6 @@ local DraggableFrames = { "ItemUpgradeFrame", "KeyBindingFrame", "LFGDungeonReadyPopup", - "LossOfControlFrame", "MacOptionsFrame", "MacroFrame", "MailFrame", diff --git a/Interface/AddOns/SVUI/system/system.lua b/Interface/AddOns/SVUI/system/system.lua index a45da6e..679ab9b 100644 --- a/Interface/AddOns/SVUI/system/system.lua +++ b/Interface/AddOns/SVUI/system/system.lua @@ -57,6 +57,7 @@ local SVUINameSpace, SVUICore = ...; LOCALS ########################################################## ]]-- +local minimumVersion = 4.04 local bld = select(2,GetBuildInfo()); local toonClass = select(2,UnitClass("player")); local rez = GetCVar("gxResolution"); @@ -289,6 +290,17 @@ end SYSTEM UPDATES ########################################################## ]]-- +function SuperVillain:VersionCheck() + if(not SVUI_Profile.SAFEDATA.install_version or (SVUI_Profile.SAFEDATA.install_version and type(SVUI_Profile.SAFEDATA.install_version) == "number" and (tonumber(SVUI_Profile.SAFEDATA.install_version) < minimumVersion))) then + if(SVUI_Profile.SAFEDATA.install_complete and type(SVUI_Profile.SAFEDATA.install_complete) == "number" and (tonumber(SVUI_Profile.SAFEDATA.install_complete) >= minimumVersion)) then + SVUI_Profile.SAFEDATA.install_version = self.version + SVUI_Profile.SAFEDATA.install_complete = nil + else + self:Install() + end + end +end + function SuperVillain:RefreshEverything(bypass) self:RefreshAllSystemMedia(); @@ -303,9 +315,7 @@ function SuperVillain:RefreshEverything(bypass) collectgarbage("collect"); if not bypass then - if(SVUI_Profile.SAFEDATA.install_complete == nil or (SVUI_Profile.SAFEDATA.install_complete and type(SVUI_Profile.SAFEDATA.install_complete) == 'boolean') or (SVUI_Profile.SAFEDATA.install_complete and type(tonumber(SVUI_Profile.SAFEDATA.install_complete)) == 'number' and tonumber(SVUI_Profile.SAFEDATA.install_complete) < 4.04)) then - self:Install(); - end + self:VersionCheck() end end --[[ @@ -372,10 +382,7 @@ local function FullLoad(self) self:SetSVMovablesPositions(); self.CoreEnabled = true; - if (SVUI_Profile.SAFEDATA.install_complete == nil or not SVUI_Profile.SAFEDATA.install_version or tonumber(SVUI_Profile.SAFEDATA.install_version) < 4.04) then - self:Install() - SVUI_Profile.SAFEDATA.install_version = self.version - end + self:VersionCheck() self:RefreshAllSystemMedia(); NewHook("StaticPopup_Show", self.StaticPopup_Show) diff --git a/Interface/AddOns/SVUI/system/timers.lua b/Interface/AddOns/SVUI/system/timers.lua index 9b4f659..eb2b3cd 100644 --- a/Interface/AddOns/SVUI/system/timers.lua +++ b/Interface/AddOns/SVUI/system/timers.lua @@ -239,6 +239,6 @@ local Cooldown_OnLoad = function(self, start, duration, elapsed) end; function SuperVillain:AddCD(cooldown) - if not SuperVillain.db.system.cooldown then return end; - hooksecurefunc(cooldown,"SetCooldown",Cooldown_OnLoad) + if not SuperVillain.db.system.cooldown then return end + hooksecurefunc(cooldown, "SetCooldown", Cooldown_OnLoad) end; \ No newline at end of file diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua index 71e6840..fcd64f2 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua +++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua @@ -390,10 +390,10 @@ local function generateFilterOptions() tinsert(SuperVillain.Filters["BuffWatch"], {["enable"] = true, ["id"] = tonumber(f), ["point"] = "TOPRIGHT", ["color"] = {["r"] = 1, ["g"] = 0, ["b"] = 0}, ["anyUnit"] = false}) generateFilterOptions() for t = 10, 40, 15 do - MOD:UpdateAuraWatchFromHeader("raid"..t) + MOD:UpdateGroupAuraWatch("raid"..t) end; - MOD:UpdateAuraWatchFromHeader("party") - MOD:UpdateAuraWatchFromHeader("raidpet", true) + MOD:UpdateGroupAuraWatch("party") + MOD:UpdateGroupAuraWatch("raidpet", true) selectedSpell = nil end end @@ -430,10 +430,10 @@ local function generateFilterOptions() selectedSpell = nil; generateFilterOptions() for t = 10, 40, 15 do - MOD:UpdateAuraWatchFromHeader("raid"..t) + MOD:UpdateGroupAuraWatch("raid"..t) end; - MOD:UpdateAuraWatchFromHeader("party") - MOD:UpdateAuraWatchFromHeader("raidpet", true) + MOD:UpdateGroupAuraWatch("party") + MOD:UpdateGroupAuraWatch("raidpet", true) end }, selectSpell = { @@ -470,10 +470,10 @@ local function generateFilterOptions() set = function(e, arg) SuperVillain.Filters["BuffWatch"][registeredSpell][e[#e]] = arg; for t = 10, 40, 15 do - MOD:UpdateAuraWatchFromHeader("raid"..t) + MOD:UpdateGroupAuraWatch("raid"..t) end; - MOD:UpdateAuraWatchFromHeader("party") - MOD:UpdateAuraWatchFromHeader("raidpet", true) + MOD:UpdateGroupAuraWatch("party") + MOD:UpdateGroupAuraWatch("raidpet", true) end, order = -10, args = { @@ -508,10 +508,10 @@ local function generateFilterOptions() local abColor = SuperVillain.Filters["BuffWatch"][registeredSpell][e[#e]] abColor.r, abColor.g, abColor.b = i, j, k; for t = 10, 40, 15 do - MOD:UpdateAuraWatchFromHeader("raid"..t) + MOD:UpdateGroupAuraWatch("raid"..t) end; - MOD:UpdateAuraWatchFromHeader("party") - MOD:UpdateAuraWatchFromHeader("raidpet", true) + MOD:UpdateGroupAuraWatch("party") + MOD:UpdateGroupAuraWatch("raidpet", true) end }, displayText = { @@ -536,10 +536,10 @@ local function generateFilterOptions() local abColor = SuperVillain.Filters["BuffWatch"][registeredSpell][e[#e]] abColor.r, abColor.g, abColor.b = i, j, k; for t = 10, 40, 15 do - MOD:UpdateAuraWatchFromHeader("raid"..t) + MOD:UpdateGroupAuraWatch("raid"..t) end; - MOD:UpdateAuraWatchFromHeader("party") - MOD:UpdateAuraWatchFromHeader("raidpet", true) + MOD:UpdateGroupAuraWatch("party") + MOD:UpdateGroupAuraWatch("raidpet", true) end }, textThreshold = { diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua index 5a81c80..b0fdb7b 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua @@ -20,6 +20,26 @@ local MOD = SuperVillain.Registry:Expose("SVStyle"); LOSSOFCONTROL STYLER ########################################################## ]]-- +local _hook_LossOfControl = function(self, ...) + self.Icon:ClearAllPoints() + self.Icon:SetPoint("CENTER", self, "CENTER", 0, 0) + self.AbilityName:ClearAllPoints() + self.AbilityName:SetPoint("BOTTOM", self, 0, -28) + self.AbilityName.scrollTime = nil; + self.AbilityName:SetFont(SuperVillain.Media.font.names, 20, 'OUTLINE') + self.TimeLeft.NumberText:ClearAllPoints() + self.TimeLeft.NumberText:SetPoint("BOTTOM", self, 4, -58) + self.TimeLeft.NumberText.scrollTime = nil; + self.TimeLeft.NumberText:SetFont(SuperVillain.Media.font.numbers, 20, 'OUTLINE') + self.TimeLeft.SecondsText:ClearAllPoints() + self.TimeLeft.SecondsText:SetPoint("BOTTOM", self, 0, -80) + self.TimeLeft.SecondsText.scrollTime = nil; + self.TimeLeft.SecondsText:SetFont(SuperVillain.Media.font.roboto, 20, 'OUTLINE') + if self.Anim:IsPlaying() then + self.Anim:Stop() + end +end + local function LossOfControlStyle() if SuperVillain.db.SVStyle.blizzard.enable ~= true or SuperVillain.db.SVStyle.blizzard.losscontrol ~= true then return end; local IconBackdrop = CreateFrame("Frame", nil, LossOfControlFrame) @@ -29,29 +49,9 @@ local function LossOfControlStyle() LossOfControlFrame.Icon:SetTexCoord(.1, .9, .1, .9) LossOfControlFrame:Formula409() LossOfControlFrame.AbilityName:ClearAllPoints() - LossOfControlFrame:Size(LossOfControlFrame.Icon:GetWidth()+50) + LossOfControlFrame:Size(LossOfControlFrame.Icon:GetWidth() + 50) --local bg = CreateFrame("Frame", nil, LossOfControlFrame) - - local font = SuperVillain.Media.font.default; - hooksecurefunc("LossOfControlFrame_SetUpDisplay", function(o, ...) - o.Icon:ClearAllPoints() - o.Icon:SetPoint("CENTER", o, "CENTER", 0, 0) - o.AbilityName:ClearAllPoints() - o.AbilityName:SetPoint("BOTTOM", o, 0, -28) - o.AbilityName.scrollTime = nil; - o.AbilityName:SetFontTemplate(font, 20, 'OUTLINE') - o.TimeLeft.NumberText:ClearAllPoints() - o.TimeLeft.NumberText:SetPoint("BOTTOM", o, 4, -58) - o.TimeLeft.NumberText.scrollTime = nil; - o.TimeLeft.NumberText:SetFontTemplate(font, 20, 'OUTLINE') - o.TimeLeft.SecondsText:ClearAllPoints() - o.TimeLeft.SecondsText:SetPoint("BOTTOM", o, 0, -80) - o.TimeLeft.SecondsText.scrollTime = nil; - o.TimeLeft.SecondsText:SetFontTemplate(font, 20, 'OUTLINE') - if o.Anim:IsPlaying() then - o.Anim:Stop() - end - end) + hooksecurefunc("LossOfControlFrame_SetUpDisplay", _hook_LossOfControl) end; --[[ ########################################################## diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua index 3318c5a..a4a5d86 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua @@ -487,27 +487,43 @@ end; SYSTEM WIDGET STYLERS ########################################################## ]]-- +local ChatGeneric_OnShow = function(self) if(not self.Panel) then self:SetPanelTemplate("Halftone") end end +local ChatMenu_OnShow = function(self) if(not self.Panel) then self:SetPanelTemplate("Halftone") end self:ClearAllPoints() self:Point("BOTTOMLEFT", ChatFrame1, "TOPLEFT", 0, 30) end + local function SystemPanelQue() if SuperVillain.db.SVStyle.blizzard.enable ~= true or SuperVillain.db.SVStyle.blizzard.misc ~= true then return end QueueStatusFrame:Formula409() for i = 1, #SystemPopList do - _G[SystemPopList[i]]:Formula409() - MOD:ApplyAlertStyle(_G[SystemPopList[i]]) - _G[SystemPopList[i]]:SetBackdropColor(0.8, 0.2, 0.2) + local this = _G[SystemPopList[i]] + if(this) then + this:Formula409() + MOD:ApplyAlertStyle(this) + this:SetBackdropColor(0.8, 0.2, 0.2) + end end for i = 1, #SystemFrameList1 do - _G[SystemFrameList1[i]]:Formula409() - _G[SystemFrameList1[i]]:SetPanelTemplate("Pattern") + local this = _G[SystemFrameList1[i]] + if(this) then + this:Formula409() + this:SetPanelTemplate("Pattern") + end end for i = 1, #SystemFrameList2 do - _G[SystemFrameList2[i]]:Formula409() - _G[SystemFrameList2[i]]:SetPanelTemplate("Halftone") + local this = _G[SystemFrameList2[i]] + if(this) then + this:Formula409() + this:SetPanelTemplate("Halftone") + end end for i = 1, #SystemFrameList3 do - if _G[SystemFrameList3[i]] == _G["ChatMenu"] then - _G[SystemFrameList3[i]]:HookScript("OnShow", function(self) self:SetPanelTemplate("Halftone") self:ClearAllPoints() self:Point("BOTTOMLEFT", ChatFrame1, "TOPLEFT", 0, 30) end) - else - _G[SystemFrameList3[i]]:HookScript("OnShow", function(self) self:SetPanelTemplate("Halftone") end) + local name = SystemFrameList3[i] + local this = _G[name] + if(this) then + if(name == "ChatMenu") then + this:HookScript("OnShow", ChatMenu_OnShow) + else + this:HookScript("OnShow", ChatGeneric_OnShow) + end end end LFDRoleCheckPopup:Formula409() @@ -538,9 +554,9 @@ local function SystemPanelQue() end end for i = 1, #SystemFrameList4 do - local SVUIMenuButtons = _G["GameMenuButton"..SystemFrameList4[i]] - if SVUIMenuButtons then - SVUIMenuButtons:SetButtonTemplate() + local this = _G["GameMenuButton"..SystemFrameList4[i]] + if(this) then + this:SetButtonTemplate() end end if IsAddOnLoaded("OptionHouse") then @@ -566,21 +582,21 @@ local function SystemPanelQue() tex:FillInner() end for i = 1, #SystemFrameList5 do - local title = _G[SystemFrameList5[i].."Header"] - if title then - title:SetTexture("") - title:ClearAllPoints() - if title == _G["GameMenuFrameHeader"] then - title:SetPoint("TOP", GameMenuFrame, 0, 7) + local this = _G[SystemFrameList5[i].."Header"] + if(this) then + this:SetTexture("") + this:ClearAllPoints() + if this == _G["GameMenuFrameHeader"] then + this:SetPoint("TOP", GameMenuFrame, 0, 7) else - title:SetPoint("TOP", SystemFrameList5[i], 0, 0) + this:SetPoint("TOP", SystemFrameList5[i], 0, 0) end end end for i = 1, #SystemFrameList6 do - local SVUIButtons = _G[SystemFrameList6[i]] - if SVUIButtons then - SVUIButtons:SetButtonTemplate() + local this = _G[SystemFrameList6[i]] + if(this) then + this:SetButtonTemplate() end end VideoOptionsFrameCancel:ClearAllPoints() @@ -649,34 +665,46 @@ local function SystemPanelQue() end OpacityFrame:Formula409() OpacityFrame:SetFixedPanelTemplate("Transparent", true) - for _, object in pairs(SystemFrameList7) do - _G[object]:Formula409() + for i = 1, #SystemFrameList7 do + local this = _G[SystemFrameList7[i]] + if(this) then + this:Formula409() + end end for i = 1, #SystemFrameList8 do - _G[SystemFrameList8[i]]:SetButtonTemplate() + local this = _G[SystemFrameList8[i]] + if(this) then + this:SetButtonTemplate() + end end ChatConfigFrameOkayButton:Point("RIGHT", ChatConfigFrameCancelButton, "RIGHT", -11, -1) ChatConfigCombatSettingsFiltersDeleteButton:Point("TOPRIGHT", ChatConfigCombatSettingsFilters, "BOTTOMRIGHT", 0, -1) ChatConfigCombatSettingsFiltersAddFilterButton:Point("RIGHT", ChatConfigCombatSettingsFiltersDeleteButton, "LEFT", -1, 0) ChatConfigCombatSettingsFiltersCopyFilterButton:Point("RIGHT", ChatConfigCombatSettingsFiltersAddFilterButton, "LEFT", -1, 0) for i=1, 5 do - local tab = _G["CombatConfigTab"..i] - tab:Formula409() + local this = _G["CombatConfigTab"..i] + if(this) then + this:Formula409() + end end CombatConfigSettingsNameEditBox:SetEditboxTemplate() ChatConfigFrame:SetPanelTemplate("Pattern", true) for i = 1, #SystemFrameList9 do - local QueuedFrames = _G[SystemFrameList9[i]] - QueuedFrames:Formula409() - QueuedFrames:SetFixedPanelTemplate("Inset", true) + local this = _G[SystemFrameList9[i]] + if(this) then + this:Formula409() + this:SetFixedPanelTemplate("Inset", true) + end end for i = 1, #SystemFrameList10 do - local QueuedFrames = _G[SystemFrameList10[i]] - QueuedFrames:ClearAllPoints() - if QueuedFrames == CombatConfigColorsColorizeSpellNames then - QueuedFrames:Point("TOP",CombatConfigColorsColorizeUnitName,"BOTTOM",0,-2) - else - QueuedFrames:Point("TOP",_G[SystemFrameList10[i-1]],"BOTTOM",0,-2) + local this = _G[SystemFrameList10[i]] + if(this) then + this:ClearAllPoints() + if this == CombatConfigColorsColorizeSpellNames then + this:Point("TOP",CombatConfigColorsColorizeUnitName,"BOTTOM",0,-2) + else + this:Point("TOP",_G[SystemFrameList10[i-1]],"BOTTOM",0,-2) + end end end ChatConfigChannelSettingsLeft:RegisterEvent("PLAYER_ENTERING_WORLD") @@ -772,20 +800,20 @@ local function SystemPanelQue() end end) for i = 1,#COMBAT_CONFIG_TABS do - local cctab = _G["CombatConfigTab"..i] - if cctab then - MOD:ApplyTabStyle(cctab) - cctab:SetHeight(cctab:GetHeight()-2) - cctab:SetWidth(ceil(cctab:GetWidth()+1.6)) + local this = _G["CombatConfigTab"..i] + if(this) then + MOD:ApplyTabStyle(this) + this:SetHeight(this:GetHeight()-2) + this:SetWidth(ceil(this:GetWidth()+1.6)) _G["CombatConfigTab"..i.."Text"]:SetPoint("BOTTOM",0,10) end end CombatConfigTab1:ClearAllPoints() CombatConfigTab1:SetPoint("BOTTOMLEFT",ChatConfigBackgroundFrame,"TOPLEFT",6,-2) for i = 1, #SystemFrameList11 do - local ccbtn = _G[SystemFrameList11[i]] - if ccbtn then - ccbtn:SetButtonTemplate() + local this = _G[SystemFrameList11[i]] + if(this) then + this:SetButtonTemplate() end end ChatConfigFrameOkayButton:SetPoint("TOPRIGHT",ChatConfigBackgroundFrame,"BOTTOMRIGHT",-3,-5) @@ -795,8 +823,10 @@ local function SystemPanelQue() ChatConfigCombatSettingsFiltersCopyFilterButton:SetPoint("RIGHT",ChatConfigCombatSettingsFiltersDeleteButton,"LEFT",-2,0) ChatConfigCombatSettingsFiltersAddFilterButton:SetPoint("RIGHT",ChatConfigCombatSettingsFiltersCopyFilterButton,"LEFT",-2,0) for i = 1, #SystemFrameList12 do - local ccbtn = _G[SystemFrameList12[i]] - ccbtn:SetCheckboxTemplate(true) + local this = _G[SystemFrameList12[i]] + if(this) then + this:SetCheckboxTemplate(true) + end end MOD:ApplyPaginationStyle(ChatConfigMoveFilterUpButton,true) MOD:ApplyPaginationStyle(ChatConfigMoveFilterDownButton,true) @@ -836,24 +866,24 @@ local function SystemPanelQue() end end for i = 1, #SystemFrameList13 do - local QueuedFrames = _G[SystemFrameList13[i]] - if QueuedFrames then - QueuedFrames:Formula409() - QueuedFrames:SetFixedPanelTemplate("Inset") - if QueuedFrames ~= _G["VideoOptionsFramePanelContainer"] and QueuedFrames ~= _G["InterfaceOptionsFramePanelContainer"] then - QueuedFrames.Panel:Point("TOPLEFT",-1,0) - QueuedFrames.Panel:Point("BOTTOMRIGHT",0,1) + local this = _G[SystemFrameList13[i]] + if(this) then + this:Formula409() + this:SetFixedPanelTemplate("Inset") + if this ~= _G["VideoOptionsFramePanelContainer"] and this ~= _G["InterfaceOptionsFramePanelContainer"] then + this.Panel:Point("TOPLEFT",-1,0) + this.Panel:Point("BOTTOMRIGHT",0,1) else - QueuedFrames.Panel:Point("TOPLEFT", 0, 0) - QueuedFrames.Panel:Point("BOTTOMRIGHT", 0, 0) + this.Panel:Point("TOPLEFT", 0, 0) + this.Panel:Point("BOTTOMRIGHT", 0, 0) end end end for i = 1, #SystemFrameList14 do - local itab = _G[SystemFrameList14[i]] - if itab then - itab:Formula409() - MOD:ApplyTabStyle(itab) + local this = _G[SystemFrameList14[i]] + if(this) then + this:Formula409() + MOD:ApplyTabStyle(this) end end InterfaceOptionsFrameTab1:ClearAllPoints() @@ -865,49 +895,55 @@ local function SystemPanelQue() InterfaceOptionsFrameDefaults:SetPoint("TOPLEFT",InterfaceOptionsFrameCategories,"BOTTOMLEFT",-1,-5) InterfaceOptionsFrameCancel:SetPoint("TOPRIGHT",InterfaceOptionsFramePanelContainer,"BOTTOMRIGHT",0,-6) for i = 1, #SystemFrameList15 do - local icheckbox = _G["InterfaceOptions"..SystemFrameList15[i]] - if icheckbox then - icheckbox:SetCheckboxTemplate(true) + local this = _G["InterfaceOptions"..SystemFrameList15[i]] + if(this) then + this:SetCheckboxTemplate(true) end end for i = 1, #SystemFrameList16 do - local idropdown = _G["InterfaceOptions"..SystemFrameList16[i]] - if idropdown then - MOD:ApplyDropdownStyle(idropdown) + local this = _G["InterfaceOptions"..SystemFrameList16[i]] + if(this) then + MOD:ApplyDropdownStyle(this) DropDownList1:SetFixedPanelTemplate("Default", true) end end InterfaceOptionsHelpPanelResetTutorials:SetButtonTemplate() for i = 1, #SystemFrameList17 do - local ocheckbox = _G[SystemFrameList17[i]] - if ocheckbox then - ocheckbox:SetCheckboxTemplate(true) + local this = _G[SystemFrameList17[i]] + if(this) then + this:SetCheckboxTemplate(true) end end for i = 1, #SystemFrameList18 do - local odropdown = _G[SystemFrameList18[i]] - if odropdown then - MOD:ApplyDropdownStyle(odropdown,165) + local this = _G[SystemFrameList18[i]] + if(this) then + MOD:ApplyDropdownStyle(this,165) DropDownList1:SetFixedPanelTemplate("Default", true) end end - for _, button in pairs(SystemFrameList19) do - _G[button]:SetButtonTemplate() + for i = 1, #SystemFrameList19 do + local this = _G[SystemFrameList19[i]] + if(this) then + this:SetButtonTemplate() + end end AudioOptionsVoicePanelChatMode1KeyBindingButton:ClearAllPoints() AudioOptionsVoicePanelChatMode1KeyBindingButton:Point("CENTER", AudioOptionsVoicePanelBinding, "CENTER", 0, -10) CompactUnitFrameProfilesRaidStylePartyFrames:SetCheckboxTemplate(true) CompactUnitFrameProfilesGeneralOptionsFrameResetPositionButton:SetButtonTemplate() for i = 1, #SystemFrameList20 do - local icheckbox = _G["CompactUnitFrameProfilesGeneralOptionsFrame"..SystemFrameList20[i]] - if icheckbox then - icheckbox:SetCheckboxTemplate(true) - icheckbox:SetFrameLevel(40) + local this = _G["CompactUnitFrameProfilesGeneralOptionsFrame"..SystemFrameList20[i]] + if(this) then + this:SetCheckboxTemplate(true) + this:SetFrameLevel(40) end end Graphics_RightQuality:MUNG() - for _, slider in pairs(SystemFrameList21) do - MOD:ApplyScrollbarStyle(_G[slider]) + for i = 1, #SystemFrameList21 do + local this = _G[SystemFrameList21[i]] + if(this) then + MOD:ApplyScrollbarStyle(this) + end end MacOptionsFrame:Formula409() MacOptionsFrame:SetFixedPanelTemplate() @@ -924,8 +960,10 @@ local function SystemPanelQue() MOD:ApplyDropdownStyle(MacOptionsFrameCodecDropDown) MOD:ApplyScrollbarStyle(MacOptionsFrameQualitySlider) for i = 1, 11 do - local b = _G["MacOptionsFrameCheckButton"..i] - b:SetCheckboxTemplate(true) + local this = _G["MacOptionsFrameCheckButton"..i] + if(this) then + this:SetCheckboxTemplate(true) + end end MacOptionsButtonKeybindings:ClearAllPoints() MacOptionsButtonKeybindings:SetPoint("LEFT", MacOptionsFrameDefaults, "RIGHT", 2, 0) -- 1.7.9.5