From 96aafa4fd5c0c52abfa40e3b889ed1d9d997f447 Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Sat, 11 Oct 2014 16:44:20 -0500 Subject: [PATCH] 4.9.9 --- .../LibSuperVillain-1.0/LibSuperVillain-1.0.lua | 5 - Interface/AddOns/SVUI/packages/bag/SVBag.lua | 609 +++++++++++++------- .../AddOns/SVUI/packages/override/SVOverride.lua | 1 - Interface/AddOns/SVUI/packages/unit/SVUnit.lua | 18 +- .../AddOns/SVUI/packages/unit/elements/castbar.lua | 31 +- Interface/AddOns/SVUI/scripts/mounts.lua | 45 +- .../AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua | 35 +- .../SVUI_CraftOMatic/components/archaeology.lua | 4 +- Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua | 56 +- .../components/blizzard/achievement.lua | 24 +- .../components/blizzard/petjournal.lua | 38 +- .../components/blizzard/talents.lua | 8 +- .../SVUI_StyleOMatic/components/style_methods.lua | 2 +- .../BattlefieldFrame/Battleground-Alliance.blp | Bin 2580 -> 2580 bytes Interface/BattlefieldFrame/Battleground-Horde.blp | Bin 2580 -> 2580 bytes Interface/FriendsFrame/Battlenet-Battleneticon.blp | Bin 0 -> 2580 bytes Interface/FriendsFrame/Battlenet-D3icon.blp | Bin 0 -> 2580 bytes Interface/FriendsFrame/Battlenet-Sc2icon.blp | Bin 0 -> 2580 bytes Interface/FriendsFrame/Battlenet-WTCGicon.blp | Bin 0 -> 2580 bytes Interface/FriendsFrame/Battlenet-WoWicon.blp | Bin 0 -> 2580 bytes Interface/FriendsFrame/TravelPass-Invite.blp | Bin 0 -> 12132 bytes Interface/MINIMAP/TRACKING/BattleMaster.blp | Bin 2580 -> 2580 bytes Interface/PVPFrame/PVP-Currency-Alliance.blp | Bin 2580 -> 2580 bytes Interface/PVPFrame/PVP-Currency-Horde.blp | Bin 2580 -> 2580 bytes Interface/TARGETINGFRAME/UI-PVP-Alliance.blp | Bin 0 -> 6676 bytes Interface/TARGETINGFRAME/UI-PVP-Horde.blp | Bin 0 -> 6676 bytes Interface/TARGETINGFRAME/UI-StatusBar.blp | Bin 0 -> 23060 bytes .../TARGETINGFRAME/UI-TargetingFrame-BarFill.blp | Bin 0 -> 23060 bytes .../UI-TargetingFrame-LevelBackground.blp | Bin 0 -> 23060 bytes Interface/WorldStateFrame/AllianceIcon.blp | Bin 2580 -> 2580 bytes Interface/WorldStateFrame/HordeIcon.blp | Bin 2580 -> 2580 bytes 31 files changed, 572 insertions(+), 304 deletions(-) create mode 100644 Interface/FriendsFrame/Battlenet-Battleneticon.blp create mode 100644 Interface/FriendsFrame/Battlenet-D3icon.blp create mode 100644 Interface/FriendsFrame/Battlenet-Sc2icon.blp create mode 100644 Interface/FriendsFrame/Battlenet-WTCGicon.blp create mode 100644 Interface/FriendsFrame/Battlenet-WoWicon.blp create mode 100644 Interface/FriendsFrame/TravelPass-Invite.blp create mode 100644 Interface/TARGETINGFRAME/UI-PVP-Alliance.blp create mode 100644 Interface/TARGETINGFRAME/UI-PVP-Horde.blp create mode 100644 Interface/TARGETINGFRAME/UI-StatusBar.blp create mode 100644 Interface/TARGETINGFRAME/UI-TargetingFrame-BarFill.blp create mode 100644 Interface/TARGETINGFRAME/UI-TargetingFrame-LevelBackground.blp diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua index f85d2b9..6664319 100644 --- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua +++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua @@ -487,11 +487,6 @@ function lib:UpdateDatabase(event) removedefaults(sv[k], src[k]) end end - for k,v in pairs(CACHE_SV) do - if(k ~= "STORED") then - CACHE_SV[k] = nil - end - end elseif(event == "ACTIVE_TALENT_GROUP_CHANGED") then local LastKey = SOURCE_KEY if(PROFILE_SV.SAFEDATA and PROFILE_SV.SAFEDATA.dualSpecEnabled) then diff --git a/Interface/AddOns/SVUI/packages/bag/SVBag.lua b/Interface/AddOns/SVUI/packages/bag/SVBag.lua index 8a1e8cd..40c6d0d 100644 --- a/Interface/AddOns/SVUI/packages/bag/SVBag.lua +++ b/Interface/AddOns/SVUI/packages/bag/SVBag.lua @@ -73,6 +73,8 @@ local RefProfessionColors = { [0x10000] = {222/255,13/255,65/255}, [0x100000] = {18/255,224/255,180/255} } + +local BagFilters = CreateFrame("Frame", "SVUI_BagFilterMenu", UIParent); --[[ ########################################################## LOCAL FUNCTIONS @@ -185,6 +187,47 @@ local function BuildEquipmentMap() end end end + +local DD_OnClick = function(self) + SetBagSlotFlag(self.BagID, self.FilterID, not GetBagSlotFlag(self.BagID, self.FilterID)) + self:GetParent():Hide() +end + +local DDClear_OnClick = function(self) + for i = LE_BAG_FILTER_FLAG_EQUIPMENT, NUM_LE_BAG_FILTER_FLAGS do + SetBagSlotFlag(self.BagID, i, false) + end + self:GetParent():Hide() +end + +local DD_OnEnter = function(self) + self.hoverTex:Show() +end + +local DD_OnLeave = function(self) + self.hoverTex:Hide() +end + +local function SetFilterMenu(self) + for i = LE_BAG_FILTER_FLAG_EQUIPMENT, NUM_LE_BAG_FILTER_FLAGS do + if(GetBagSlotFlag(self.id, i)) then + BagFilters.buttons[i].activeTex:Show() + else + BagFilters.buttons[i].activeTex:Hide() + end + BagFilters.buttons[i].BagID = self.id + end + + BagFilters.buttons[NUM_LE_BAG_FILTER_FLAGS + 1].BagID = self.id + + local maxHeight = ((NUM_LE_BAG_FILTER_FLAGS) * 16) + 30 + local maxWidth = 135 + + BagFilters:SetSize(maxWidth, maxHeight) + BagFilters:ClearAllPoints() + BagFilters:SetPoint("TOPLEFT", self, "BOTTOMLEFT", 0, -8) + ToggleFrame(BagFilters) +end --[[ ########################################################## CORE FUNCTIONS @@ -212,7 +255,7 @@ end local SlotUpdate = function(self, slotID) if(not self[slotID]) then return end - + --print(self[slotID]:GetName()) local bag = self:GetID(); local slot = self[slotID]; local bagType = self.bagFamily; @@ -260,17 +303,26 @@ end local RefreshSlots = function(self) local bagID = self:GetID() - if(not bagID or (not self.SlotUpdate)) then return end + if(not bagID) then return end local maxcount = GetContainerNumSlots(bagID) for slotID = 1, maxcount do self:SlotUpdate(slotID) end end +local RefreshReagentSlots = function(self) + local bagID = self:GetID() + if(not bagID or (not self.SlotUpdate)) then return end + local maxcount = self.numSlots + for slotID = 1, maxcount do + self:SlotUpdate(slotID) + end +end + local BagMenu_OnEnter = function(self) local parent = self.parent if(not parent) then return end - for bagID, bag in ipairs(parent.Bags) do + for bagID, bag in pairs(parent.Bags) do local numSlots = GetContainerNumSlots(bagID) for slotID = 1, numSlots do if bag[slotID] then @@ -281,33 +333,51 @@ local BagMenu_OnEnter = function(self) end end end - end + end + + local numSlots = GetContainerNumSlots(parent.BaseID) + for slotID = 1, numSlots do + if parent.Bags[parent.BaseID][slotID] then + parent.Bags[parent.BaseID][slotID]:SetAlpha(0.1) + end + end + + if(select(4, GetBuildInfo()) >= 60000) then GameTooltip:AppendText(" |cff00FF11[SHIFT-CLICK] To Set Filters|r") end end local BagMenu_OnLeave = function(self) local parent = self.parent if(not parent) then return end - for bagID, bag in ipairs(parent.Bags) do + for bagID, bag in pairs(parent.Bags) do local numSlots = GetContainerNumSlots(bagID) for slotID = 1, numSlots do if bag[slotID] then bag[slotID]:SetAlpha(1) end end - end + end + + local numSlots = GetContainerNumSlots(parent.BaseID) + for slotID = 1, numSlots do + if parent.Bags[parent.BaseID][slotID] then + parent.Bags[parent.BaseID][slotID]:SetAlpha(1) + end + end end local BAG_FILTER_LABELS = _G.BAG_FILTER_LABELS; local BagMenu_OnClick = function(self) if IsShiftKeyDown() then - print("Unavailable until WoD") - --SetBagSlotFlag(self.id, LE_BAG_FILTER_FLAG_EQUIPMENT, true) + SetFilterMenu(self); + elseif(BagFilters:IsShown()) then + ToggleFrame(BagFilters) end end local ContainerFrame_UpdateCooldowns = function(self) - for bagID, bag in ipairs(self.Bags) do + if self.isReagent then return end + for bagID, bag in pairs(self.Bags) do for slotID = 1, GetContainerNumSlots(bagID)do local start, duration, enable = GetContainerItemCooldown(bagID, slotID) if(bag[slotID]) then @@ -323,7 +393,7 @@ local ContainerFrame_UpdateCooldowns = function(self) end local ContainerFrame_UpdateBags = function(self) - for bagID, bag in ipairs(self.Bags) do + for bagID, bag in pairs(self.Bags) do bag:RefreshSlots() end end @@ -332,18 +402,19 @@ local ContainerFrame_UpdateLayout = function(self) if SV.db.SVBag.enable ~= true then return; end local isBank = self.isBank - local isReagent = self.isReagent local containerName = self:GetName() - local buttonSpacing, numContainerRows = 8, 0; + local buttonSpacing = 8; local containerWidth, numContainerColumns, buttonSize + local precount = 0; + for i, bagID in ipairs(self.BagIDs) do + local numSlots = GetContainerNumSlots(bagID); + precount = precount + (numSlots or 0); + end + if(SV.db.SVBag.alignToChat) then containerWidth = (isBank and SV.db.SVDock.dockLeftWidth or SV.db.SVDock.dockRightWidth) - local precount, avg = 0, 0.08; - for i, bagID in ipairs(self.BagIDs) do - local numSlots = GetContainerNumSlots(bagID); - precount = precount + (numSlots or 0); - end + local avg = 0.08; if(precount > 287) then avg = 0.12 elseif(precount > 167) then @@ -354,7 +425,6 @@ local ContainerFrame_UpdateLayout = function(self) avg = 0.09 end - --local rowCalc = ceil(precount * avg); numContainerColumns = avg * 100; local unitSize = floor(containerWidth / numContainerColumns) @@ -365,88 +435,95 @@ local ContainerFrame_UpdateLayout = function(self) numContainerColumns = floor(containerWidth / (buttonSize + buttonSpacing)); end + local numContainerRows = ceil(precount / numContainerColumns) + local containerHeight = (((buttonSize + buttonSpacing) * numContainerRows) - buttonSpacing) + self.topOffset + self.bottomOffset local holderWidth = ((buttonSize + buttonSpacing) * numContainerColumns) - buttonSpacing; local bottomPadding = (containerWidth - holderWidth) * 0.5; local lastButton, lastRowButton, globalName; local numContainerSlots, fullContainerSlots = GetNumBankSlots(); local totalSlots = 0; + self.ButtonSize = buttonSize; self.holderFrame:Width(holderWidth); local menu = self.BagMenu - if(not isReagent) then - for i, bagID in ipairs(self.BagIDs) do - if((not isBank and bagID <= 3) or (isBank and bagID ~= -1 and numContainerSlots >= 1 and not ((i - 1) > numContainerSlots))) then - menu:Size(((buttonSize + buttonSpacing) * (isBank and i - 1 or i)) + buttonSpacing, buttonSize + (buttonSpacing * 2)) - - local bagSlot; - - if(not menu[i]) then - if isBank then - globalName = ("SVUI_BankBag%d"):format((bagID - 4)); - bagSlot = CreateFrame("CheckButton", globalName, menu, "BankItemButtonBagTemplate") - else - globalName = ("SVUI_MainBag%dSlot"):format(bagID); - bagSlot = CreateFrame("CheckButton", globalName, menu, "BagSlotButtonTemplate") - end - - bagSlot.parent = self; - - bagSlot:SetNormalTexture("") - bagSlot:SetCheckedTexture("") - bagSlot:SetPushedTexture("") - bagSlot:SetScript("OnClick", nil) - - local texName = ("%sIconTexture"):format(globalName) - bagSlot.iconTexture = _G[texName]; - bagSlot.iconTexture:FillInner() - bagSlot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9) - - bagSlot:HookScript("OnEnter", BagMenu_OnEnter) - bagSlot:HookScript("OnLeave", BagMenu_OnLeave) + for i, bagID in ipairs(self.BagIDs) do + if((not isBank and bagID <= 3) or (isBank and bagID ~= -1 and numContainerSlots >= 1 and not ((i - 1) > numContainerSlots))) then + menu:Size(((buttonSize + buttonSpacing) * (isBank and i - 1 or i)) + buttonSpacing, buttonSize + (buttonSpacing * 2)) + + local bagSlot; - if(not bagSlot.tooltipText) then - bagSlot.tooltipText = "" - end + if(not menu[i]) then + if isBank then + globalName = ("SVUI_BankBag%d"):format(bagID); + bagSlot = CreateFrame("CheckButton", globalName, menu, "BankItemButtonBagTemplate") + else + globalName = ("SVUI_MainBag%dSlot"):format(bagID); + bagSlot = CreateFrame("CheckButton", globalName, menu, "BagSlotButtonTemplate") + end - if(isBank) then - bagSlot:SetID(bagID) - bagSlot.id = bagID; - else - bagSlot:HookScript("OnClick", BagMenu_OnClick) - bagSlot.id = (bagID + 1); - end + bagSlot.parent = self; + + bagSlot:SetNormalTexture("") + bagSlot:SetCheckedTexture("") + bagSlot:SetPushedTexture("") + bagSlot:SetScript("OnClick", nil) + bagSlot:RemoveTextures() + bagSlot:SetSlotTemplate(true, 2, 0, 0, true); + + local texName = ("%sIconTexture"):format(globalName) + bagSlot.iconTexture = _G[texName]; + bagSlot.iconTexture:FillInner() + bagSlot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9) + + hooksecurefunc(bagSlot, "UpdateTooltip", BagMenu_OnEnter) + --bagSlot:HookScript("OnEnter", BagMenu_OnEnter) + bagSlot:HookScript("OnLeave", BagMenu_OnLeave) + + if(not bagSlot.tooltipText) then + bagSlot.tooltipText = "" + end - menu[i] = bagSlot; + if(isBank) then + bagSlot:SetID(bagID) + bagSlot.id = bagID; else - bagSlot = menu[i] + if(select(4, GetBuildInfo()) >= 60000) then bagSlot:HookScript("OnClick", BagMenu_OnClick) end + bagSlot.id = (bagID + 1); end - bagSlot:Size(buttonSize) - bagSlot:ClearAllPoints() + menu[i] = bagSlot; + else + bagSlot = menu[i] + end - if(isBank) then - if(i == 2) then - bagSlot:SetPoint("BOTTOMLEFT", menu, "BOTTOMLEFT", buttonSpacing, buttonSpacing) - else - bagSlot:SetPoint("LEFT", menu[i - 1], "RIGHT", buttonSpacing, 0) - end + bagSlot:Size(buttonSize) + bagSlot:ClearAllPoints() - if(bagSlot.GetInventorySlot) then - BankFrameItemButton_Update(bagSlot) - BankFrameItemButton_UpdateLocked(bagSlot) - end - else - if(i == 1) then - bagSlot:SetPoint("BOTTOMLEFT", menu, "BOTTOMLEFT", buttonSpacing, buttonSpacing) - else - bagSlot:SetPoint("LEFT", menu[i - 1], "RIGHT", buttonSpacing, 0) - end + if(isBank) then + if(i == 2) then + bagSlot:SetPoint("BOTTOMLEFT", menu, "BOTTOMLEFT", buttonSpacing, buttonSpacing) + else + bagSlot:SetPoint("LEFT", menu[i - 1], "RIGHT", buttonSpacing, 0) + end + + if(bagSlot.GetInventorySlot) then + BankFrameItemButton_Update(bagSlot) + BankFrameItemButton_UpdateLocked(bagSlot) + end + else + if(i == 1) then + bagSlot:SetPoint("BOTTOMLEFT", menu, "BOTTOMLEFT", buttonSpacing, buttonSpacing) + else + bagSlot:SetPoint("LEFT", menu[i - 1], "RIGHT", buttonSpacing, 0) end end + end + + local numSlots = GetContainerNumSlots(bagID); - local numSlots = GetContainerNumSlots(bagID); + if numSlots > 0 then local bagName = ("%sBag%d"):format(containerName, bagID) local template = (bagID == -1) and "BankItemButtonGenericTemplate" or "ContainerFrameItemButtonTemplate" local bag; @@ -462,108 +539,135 @@ local ContainerFrame_UpdateLayout = function(self) bag = self.Bags[bagID] end - if numSlots > 0 then - local btype = select(2, GetContainerNumFreeSlots(bagID)); - if RefProfessionColors[btype] then - local r, g, b = unpack(RefProfessionColors[btype]); - bag.bagFamily = {r, g, b}; - bag:SetBackdropColor(r, g, b, 0.25) - bag:SetBackdropBorderColor(r, g, b, 1) - else - bag.bagFamily = false; - end + local btype = select(2, GetContainerNumFreeSlots(bagID)); + if RefProfessionColors[btype] then + local r, g, b = unpack(RefProfessionColors[btype]); + bag.bagFamily = {r, g, b}; + bag:SetBackdropColor(r, g, b, 0.25) + bag:SetBackdropBorderColor(r, g, b, 1) + else + bag.bagFamily = false; + end - for i = 1, MAX_CONTAINER_ITEMS do - if bag[i] then - bag[i]:Hide(); - end - end + for i = 1, MAX_CONTAINER_ITEMS do + if bag[i] then + bag[i]:Hide(); + end + end - for slotID = 1, numSlots do - local slot; - totalSlots = totalSlots + 1; - - if not bag[slotID] then - local slotName = ("%sSlot%d"):format(bagName, slotID) - local newTexName = ("%sNewItemTexture"):format(slotName) - local iconName = ("%sIconTexture"):format(slotName) - local cdName = ("%sCooldown"):format(slotName) - - slot = CreateFrame("CheckButton", slotName, bag, template); - slot:SetNormalTexture(nil); - slot:SetCheckedTexture(nil); - slot:SetSlotTemplate(true, 2, 0, 0, true); - - if(_G[newTexName]) then - _G[newTexName]:Hide() - end + for slotID = 1, numSlots do + local slot; + totalSlots = totalSlots + 1; + + if not bag[slotID] then + local slotName = ("%sSlot%d"):format(bagName, slotID) + local newTexName = ("%sNewItemTexture"):format(slotName) + local iconName = ("%sIconTexture"):format(slotName) + local cdName = ("%sCooldown"):format(slotName) + + slot = CreateFrame("CheckButton", slotName, bag, template); + slot:SetNormalTexture(""); + slot:SetCheckedTexture(""); + slot:RemoveTextures() + slot:SetSlotTemplate(true, 2, 0, 0, true); + + if(_G[newTexName]) then + _G[newTexName]:Hide() + end - slot.iconTexture = _G[iconName]; - slot.iconTexture:FillInner(slot); - slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9); - slot.cooldown = _G[cdName]; + slot.iconTexture = _G[iconName]; + slot.iconTexture:FillInner(slot); + slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9); + slot.cooldown = _G[cdName]; - SV.Timers:AddCooldown(slot.cooldown) + SV.Timers:AddCooldown(slot.cooldown) - bag[slotID] = slot - else - slot = bag[slotID] - end + bag[slotID] = slot + else + slot = bag[slotID] + end - slot:SetID(slotID); - slot:Size(buttonSize); - bag:SlotUpdate(slotID); + slot:SetID(slotID); + slot:Size(buttonSize); + bag:SlotUpdate(slotID); - if slot:GetPoint() then - slot:ClearAllPoints(); - end + if slot:GetPoint() then + slot:ClearAllPoints(); + end - if lastButton then - if((totalSlots - 1) % numContainerColumns == 0) then - slot:Point("TOP", lastRowButton, "BOTTOM", 0, -buttonSpacing); - numContainerRows = numContainerRows + 1; - lastRowButton = slot; - else - slot:Point("LEFT", lastButton, "RIGHT", buttonSpacing, 0); - end - else - slot:Point("TOPLEFT", self.holderFrame, "TOPLEFT"); - numContainerRows = numContainerRows + 1; + if lastButton then + if((totalSlots - 1) % numContainerColumns == 0) then + slot:Point("TOP", lastRowButton, "BOTTOM", 0, -buttonSpacing); lastRowButton = slot; - end - - lastButton = slot; - end - else - if(menu[i] and menu[i].GetInventorySlot) then - BankFrameItemButton_Update(menu[i]) - BankFrameItemButton_UpdateLocked(menu[i]) - end - for i = 1, MAX_CONTAINER_ITEMS do - if(bag[i]) then - bag[i]:Hide(); + else + slot:Point("LEFT", lastButton, "RIGHT", buttonSpacing, 0); end - end + else + slot:Point("TOPLEFT", self.holderFrame, "TOPLEFT"); + lastRowButton = slot; + end + + lastButton = slot; + end + else + if(menu[i] and menu[i].GetInventorySlot) then + BankFrameItemButton_Update(menu[i]) + BankFrameItemButton_UpdateLocked(menu[i]) end + for i = 1, MAX_CONTAINER_ITEMS do + if(bag[i]) then + bag[i]:Hide(); + end + end end - else + end + + self:Size(containerWidth, containerHeight); +end + +local ReagentFrame_UpdateLayout = function(self) + if SV.db.SVBag.enable ~= true or not _G.ReagentBankFrame then return; end + + local ReagentBankFrame = _G.ReagentBankFrame; + + local containerName = self:GetName() + local buttonSpacing = 8; + local preColumns = ReagentBankFrame.numColumn or 7 + local preSubColumns = ReagentBankFrame.numSubColumn or 2 + local numContainerColumns = preColumns * preSubColumns + local numContainerRows = ReagentBankFrame.numRow or 7 + local buttonSize = SVUI_BankContainerFrame.ButtonSize + local containerWidth = (buttonSize + buttonSpacing) * numContainerColumns + buttonSpacing + local containerHeight = (((buttonSize + buttonSpacing) * numContainerRows) - buttonSpacing) + self.topOffset + self.bottomOffset + local maxCount = numContainerColumns * numContainerRows + local holderWidth = ((buttonSize + buttonSpacing) * numContainerColumns) - buttonSpacing; + local lastButton, lastRowButton; + local bagID = REAGENTBANK_CONTAINER; + local totalSlots = 0; + + self.holderFrame:Width(holderWidth); + + if(not IsReagentBankUnlocked()) then + local cost = GetReagentBankCost() + print(cost) + else local bag; - local bagName = ("%sBag%d"):format(containerName, 1) + local bagName = ("%sBag%d"):format(containerName, bagID) - if not self.Bags[1] then + if not self.Bags[bagID] then bag = CreateFrame("Frame", bagName, self); - bag:SetID(1); - bag.numSlots = numSlots; + bag:SetID(bagID); + bag.numSlots = maxCount; bag.SlotUpdate = SlotUpdate; - bag.RefreshSlots = RefreshSlots; - self.Bags[1] = bag + bag.RefreshSlots = RefreshReagentSlots; + self.Bags[bagID] = bag else - bag = self.Bags[1] + bag = self.Bags[bagID] end bag.bagFamily = false; - for slotID = 1, 98 do + for slotID = 1, maxCount do local slot; totalSlots = totalSlots + 1; @@ -573,9 +677,10 @@ local ContainerFrame_UpdateLayout = function(self) local iconName = ("%sIconTexture"):format(slotName) local cdName = ("%sCooldown"):format(slotName) - slot = CreateFrame("CheckButton", slotName, bag, template); + slot = CreateFrame("CheckButton", slotName, bag, "ReagentBankItemButtonGenericTemplate"); slot:SetNormalTexture(nil); slot:SetCheckedTexture(nil); + slot:RemoveTextures() slot:SetSlotTemplate(true, 2, 0, 0, true); if(_G[newTexName]) then @@ -605,23 +710,23 @@ local ContainerFrame_UpdateLayout = function(self) if lastButton then if((totalSlots - 1) % numContainerColumns == 0) then slot:Point("TOP", lastRowButton, "BOTTOM", 0, -buttonSpacing); - numContainerRows = numContainerRows + 1; lastRowButton = slot; else slot:Point("LEFT", lastButton, "RIGHT", buttonSpacing, 0); end else slot:Point("TOPLEFT", self.holderFrame, "TOPLEFT"); - numContainerRows = numContainerRows + 1; lastRowButton = slot; end - lastButton = slot; - end + lastButton = slot; + BankFrameItemButton_Update(slot); + BankFrameItemButton_UpdateLocked(slot) + end end - self:Size(containerWidth, (((buttonSize + buttonSpacing) * numContainerRows) - buttonSpacing) + self.topOffset + self.bottomOffset); + self:Size(containerWidth, containerHeight); end function MOD:RefreshBagFrames(frame) @@ -928,12 +1033,13 @@ do end local Container_OnEvent = function(self, event, ...) - if(event == "ITEM_LOCK_CHANGED") then + if(event == "BAG_UPDATE" or event == "ITEM_LOCK_CHANGED") then local bagID, slotID = ... - if(bagID and slotID and self.Bags[bagID] and self.Bags[bagID][slotID]) then + if(bagID and slotID and self.Bags[bagID]) then self.Bags[bagID]:SlotUpdate(slotID) end - elseif(event == "BAG_UPDATE" or event == "EQUIPMENT_SETS_CHANGED") then + self:RefreshBags() + elseif(event == "EQUIPMENT_SETS_CHANGED") then BuildEquipmentMap() for id, bag in ipairs(self.Bags) do local numSlots = GetContainerNumSlots(id) @@ -1077,7 +1183,6 @@ do function MOD:MakeBags() local bagName = "SVUI_ContainerFrame" - local uisCount = #UISpecialFrames + 1; local bagsCount = #self.BagFrames + 1; local frame = CreateFrame("Button", "SVUI_ContainerFrame", SV.UIParent) @@ -1092,7 +1197,7 @@ do frame:RegisterEvent("BAG_UPDATE") frame:RegisterEvent("EQUIPMENT_SETS_CHANGED") frame:RegisterEvent("PLAYERBANKSLOTS_CHANGED") - frame:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED") + --frame:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED") frame:SetMovable(true) frame:RegisterForDrag("LeftButton", "RightButton") @@ -1111,12 +1216,21 @@ do frame.bottomOffset = 32; frame.topOffset = 65; frame.BagIDs = {0, 1, 2, 3, 4} + frame.BaseID = 0 frame.Bags = {} frame.closeButton = CreateFrame("Button", "SVUI_ContainerFrameCloseButton", frame, "UIPanelCloseButton") frame.closeButton:Point("TOPRIGHT", -4, -4) + frame.holderFrame = CreateFrame("Frame", nil, frame) frame.holderFrame:Point("TOP", frame, "TOP", 0, -frame.topOffset) frame.holderFrame:Point("BOTTOM", frame, "BOTTOM", 0, frame.bottomOffset) + + frame.Title = frame:CreateFontString() + frame.Title:SetFontObject(NumberFont_Outline_Large) + frame.Title:SetText(INVENTORY_TOOLTIP) + frame.Title:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2) + frame.Title:SetTextColor(1,0.8,0) + frame.BagMenu = CreateFrame("Button", "SVUI_ContainerFrameBagMenu", frame) frame.BagMenu:Point("BOTTOMLEFT", frame, "TOPLEFT", 0, 1) frame.BagMenu:SetFixedPanelTemplate("Transparent") @@ -1201,6 +1315,10 @@ do frame.bagsButton:SetScript("OnEnter", Tooltip_Show) frame.bagsButton:SetScript("OnLeave", Tooltip_Hide) local BagBtn_OnClick = function() + PlaySound("igMainMenuOption"); + if(BagFilters:IsShown()) then + ToggleFrame(BagFilters) + end ToggleFrame(frame.BagMenu) end frame.bagsButton:SetScript("OnClick", BagBtn_OnClick) @@ -1239,7 +1357,6 @@ do frame:SetScript("OnHide", CloseAllBags) SV:AddToDisplayAudit(frame) - --UISpecialFrames[uisCount] = "SVUI_ContainerFrame"; self.BagFrames[bagsCount] = frame self.BagFrame = frame @@ -1249,14 +1366,13 @@ do -- Reagent Slots: 1 - 98 -- /script print(ReagentBankFrameItem1:GetInventorySlot()) local bagName = isReagent and "SVUI_ReagentContainerFrame" or "SVUI_BankContainerFrame" - local uisCount = #UISpecialFrames + 1; local bagsCount = #self.BagFrames + 1; local frame = CreateFrame("Button", bagName, isReagent and self.BankFrame or SV.UIParent) frame:SetPanelTemplate(isReagent and "Action" or "Container") frame:SetFrameStrata("HIGH") - frame.UpdateLayout = ContainerFrame_UpdateLayout; + frame.UpdateLayout = isReagent and ReagentFrame_UpdateLayout or ContainerFrame_UpdateLayout; frame.RefreshBags = ContainerFrame_UpdateBags; frame.RefreshCooldowns = ContainerFrame_UpdateCooldowns; @@ -1265,7 +1381,7 @@ do frame:RegisterEvent("BAG_UPDATE") frame:RegisterEvent("EQUIPMENT_SETS_CHANGED") frame:RegisterEvent("PLAYERBANKSLOTS_CHANGED") - frame:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED") + --frame:RegisterEvent("PLAYERREAGENTBANKSLOTS_CHANGED") frame:SetMovable(true) frame:RegisterForDrag("LeftButton", "RightButton") @@ -1287,6 +1403,7 @@ do frame.BagIDs = {} else frame.BagIDs = {-1, 5, 6, 7, 8, 9, 10, 11} + frame.BaseID = -1 end frame.Bags = {} @@ -1298,10 +1415,11 @@ do frame.holderFrame:Point("TOP", frame, "TOP", 0, -frame.topOffset) frame.holderFrame:Point("BOTTOM", frame, "BOTTOM", 0, frame.bottomOffset) - frame.BagMenu = CreateFrame("Button", bagName.."BagMenu", frame) - frame.BagMenu:Point("BOTTOMLEFT", frame, "TOPLEFT", 0, 1) - frame.BagMenu:SetFixedPanelTemplate("Transparent") - frame.BagMenu:Hide() + frame.Title = frame:CreateFontString() + frame.Title:SetFontObject(NumberFont_Outline_Large) + frame.Title:SetText(isReagent and REAGENT_BANK or BANK or "Bank") + frame.Title:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2) + frame.Title:SetTextColor(1,0.8,0) frame.sortButton = CreateFrame("Button", nil, frame) frame.sortButton:Point("TOPRIGHT", frame, "TOP", 0, -10) @@ -1325,23 +1443,26 @@ do local Stack_OnClick = MOD:RunSortingProcess(MOD.Stack, "bank") frame.stackButton:SetScript("OnClick", Stack_OnClick) - frame.transferButton = CreateFrame("Button", nil, frame) - frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) - frame.transferButton:Size(25, 25) - frame.transferButton:SetNormalTexture(ICON_TRANSFER) - StyleBagToolButton(frame.transferButton) - frame.transferButton.ttText = L["Stack Bank to Bags"] - frame.transferButton:SetScript("OnEnter", Tooltip_Show) - frame.transferButton:SetScript("OnLeave", Tooltip_Hide) - local Transfer_OnClick = MOD:RunSortingProcess(MOD.Transfer, "bank bags") - frame.transferButton:SetScript("OnClick", Transfer_OnClick) - + if(not isReagent) then + frame.BagMenu = CreateFrame("Button", bagName.."BagMenu", frame) + frame.BagMenu:Point("BOTTOMLEFT", frame, "TOPLEFT", 0, 1) + frame.BagMenu:SetFixedPanelTemplate("Transparent") + frame.BagMenu:Hide() + + frame.transferButton = CreateFrame("Button", nil, frame) + frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) + frame.transferButton:Size(25, 25) + frame.transferButton:SetNormalTexture(ICON_TRANSFER) + StyleBagToolButton(frame.transferButton) + frame.transferButton.ttText = L["Stack Bank to Bags"] + frame.transferButton:SetScript("OnEnter", Tooltip_Show) + frame.transferButton:SetScript("OnLeave", Tooltip_Hide) + local Transfer_OnClick = MOD:RunSortingProcess(MOD.Transfer, "bank bags") + frame.transferButton:SetScript("OnClick", Transfer_OnClick) - SV:AddToDisplayAudit(frame) - --UISpecialFrames[uisCount] = bagName; - self.BagFrames[bagsCount] = frame + SV:AddToDisplayAudit(frame) + self.BagFrames[bagsCount] = frame - if(not isReagent) then frame.bagsButton = CreateFrame("Button", nil, frame) frame.bagsButton:Point("RIGHT", frame.sortButton, "LEFT", -10, 0) frame.bagsButton:Size(25, 25) @@ -1351,6 +1472,10 @@ do frame.bagsButton:SetScript("OnEnter", Tooltip_Show) frame.bagsButton:SetScript("OnLeave", Tooltip_Hide) local BagBtn_OnClick = function() + PlaySound("igMainMenuOption"); + if(BagFilters:IsShown()) then + ToggleFrame(BagFilters) + end local numSlots, _ = GetNumBankSlots() if numSlots >= 1 then ToggleFrame(frame.BagMenu) @@ -1370,6 +1495,7 @@ do frame.purchaseBagButton:SetScript("OnEnter", Tooltip_Show) frame.purchaseBagButton:SetScript("OnLeave", Tooltip_Hide) local PurchaseBtn_OnClick = function() + PlaySound("igMainMenuOption"); local _, full = GetNumBankSlots() if not full then SV:StaticPopup_Show("BUY_BANK_SLOT") @@ -1389,6 +1515,7 @@ do frame.swapButton:SetScript("OnEnter", Tooltip_Show) frame.swapButton:SetScript("OnLeave", Tooltip_Hide) frame.swapButton:SetScript("OnClick", function() + PlaySound("igMainMenuOption"); if(_G["SVUI_ReagentContainerFrame"]:IsShown()) then _G["SVUI_ReagentContainerFrame"]:Hide() else @@ -1399,6 +1526,17 @@ do frame:SetScript("OnHide", CloseBankFrame) self.BankFrame = frame else + --DepositReagentBank() + frame.transferButton = CreateFrame("Button", nil, frame) + frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0) + frame.transferButton:Size(25, 25) + frame.transferButton:SetNormalTexture(ICON_TRANSFER) + StyleBagToolButton(frame.transferButton) + frame.transferButton.ttText = L["Deposit All Reagents"] + frame.transferButton:SetScript("OnEnter", Tooltip_Show) + frame.transferButton:SetScript("OnLeave", Tooltip_Hide) + frame.transferButton:SetScript("OnClick", DepositReagentBank) + frame:SetPoint("TOPLEFT", self.BankFrame, "TOPRIGHT", 2, 0) self.ReagentFrame = frame end @@ -1561,6 +1699,87 @@ function MOD:Load() self:ModifyBags() self.BagFrame:UpdateLayout() + BagFilters:SetParent(SV.UIParent) + BagFilters:SetPanelTemplate("Default") + BagFilters.buttons = {} + BagFilters:SetFrameStrata("DIALOG") + BagFilters:SetClampedToScreen(true) + + if(select(4, GetBuildInfo()) >= 60000) then + + for i = LE_BAG_FILTER_FLAG_EQUIPMENT, NUM_LE_BAG_FILTER_FLAGS do + BagFilters.buttons[i] = CreateFrame("Button", nil, BagFilters) + + BagFilters.buttons[i].hoverTex = BagFilters.buttons[i]:CreateTexture(nil, 'OVERLAY') + BagFilters.buttons[i].hoverTex:SetAllPoints() + BagFilters.buttons[i].hoverTex:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]]) + BagFilters.buttons[i].hoverTex:SetBlendMode("ADD") + BagFilters.buttons[i].hoverTex:Hide() + + BagFilters.buttons[i].activeTex = BagFilters.buttons[i]:CreateTexture(nil, 'OVERLAY') + BagFilters.buttons[i].activeTex:SetAllPoints() + BagFilters.buttons[i].activeTex:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]]) + BagFilters.buttons[i].activeTex:SetVertexColor(0,0.7,0) + BagFilters.buttons[i].activeTex:SetBlendMode("ADD") + BagFilters.buttons[i].activeTex:Hide() + + BagFilters.buttons[i].text = BagFilters.buttons[i]:CreateFontString(nil, 'BORDER') + BagFilters.buttons[i].text:SetAllPoints() + BagFilters.buttons[i].text:SetFont(SV.Media.font.roboto,12,"OUTLINE") + BagFilters.buttons[i].text:SetJustifyH("LEFT") + BagFilters.buttons[i].text:SetText(BAG_FILTER_LABELS[i]) + + BagFilters.buttons[i]:SetScript("OnEnter", DD_OnEnter) + BagFilters.buttons[i]:SetScript("OnLeave", DD_OnLeave) + + BagFilters.buttons[i]:SetHeight(16) + BagFilters.buttons[i]:SetWidth(115) + + BagFilters.buttons[i].FilterID = i + BagFilters.buttons[i]:SetScript("OnClick", DD_OnClick) + + if i == LE_BAG_FILTER_FLAG_EQUIPMENT then + BagFilters.buttons[i]:SetPoint("TOPLEFT", BagFilters, "TOPLEFT", 10, -10) + else + BagFilters.buttons[i]:SetPoint("TOPLEFT", BagFilters.buttons[i - 1], "BOTTOMLEFT", 0, 0) + end + + BagFilters.buttons[i]:Show() + end + + local clearID = NUM_LE_BAG_FILTER_FLAGS + 1 + + BagFilters.buttons[clearID] = CreateFrame("Button", nil, BagFilters) + + BagFilters.buttons[clearID].hoverTex = BagFilters.buttons[clearID]:CreateTexture(nil, 'OVERLAY') + BagFilters.buttons[clearID].hoverTex:SetAllPoints() + BagFilters.buttons[clearID].hoverTex:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]]) + BagFilters.buttons[clearID].hoverTex:SetBlendMode("ADD") + BagFilters.buttons[clearID].hoverTex:Hide() + + BagFilters.buttons[clearID].text = BagFilters.buttons[clearID]:CreateFontString(nil, 'BORDER') + BagFilters.buttons[clearID].text:SetAllPoints() + BagFilters.buttons[clearID].text:SetFont(SV.Media.font.roboto,12,"OUTLINE") + BagFilters.buttons[clearID].text:SetJustifyH("LEFT") + BagFilters.buttons[clearID].text:SetText(CLEAR_ALL .. " " .. FILTERS) + + BagFilters.buttons[clearID]:SetScript("OnEnter", DD_OnEnter) + BagFilters.buttons[clearID]:SetScript("OnLeave", DD_OnLeave) + + BagFilters.buttons[clearID]:SetHeight(16) + BagFilters.buttons[clearID]:SetWidth(115) + + BagFilters.buttons[clearID].FilterID = 0 + BagFilters.buttons[clearID]:SetScript("OnClick", DDClear_OnClick) + + BagFilters.buttons[clearID]:SetPoint("TOPLEFT", BagFilters.buttons[NUM_LE_BAG_FILTER_FLAGS], "BOTTOMLEFT", 0, -10) + + BagFilters.buttons[clearID]:Show() + end + + BagFilters:Hide() + SV:AddToDisplayAudit(BagFilters) + BankFrame:UnregisterAllEvents() for i = 1, NUM_CONTAINER_FRAMES do local frame = _G["ContainerFrame"..i] @@ -1583,7 +1802,7 @@ function MOD:Load() self:RegisterEvent("PLAYER_ENTERING_WORLD") self:RegisterEvent("PLAYER_TRADE_MONEY", "UpdateGoldText") self:RegisterEvent("TRADE_MONEY_CHANGED", "UpdateGoldText") - if(SV.GameVersion >= 60000) then self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED"); end + self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED") StackSplitFrame:SetFrameStrata("DIALOG") diff --git a/Interface/AddOns/SVUI/packages/override/SVOverride.lua b/Interface/AddOns/SVUI/packages/override/SVOverride.lua index 58f5e6b..ecd51cf 100644 --- a/Interface/AddOns/SVUI/packages/override/SVOverride.lua +++ b/Interface/AddOns/SVUI/packages/override/SVOverride.lua @@ -1067,7 +1067,6 @@ function MOD:Load() SV.Mentalo:Add(SVUI_LootFrameHolder, L["Loot Frame"], nil, nil, nil, nil, "SVUI_LootFrame"); SV:AddToDisplayAudit(SVUI_LootFrame); SVUI_LootFrame:Hide(); - --tinsert(UISpecialFrames, "SVUI_LootFrame"); UIParent:UnregisterEvent("LOOT_BIND_CONFIRM") UIParent:UnregisterEvent("CONFIRM_DISENCHANT_ROLL") diff --git a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua index 5c97e27..a084307 100644 --- a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua +++ b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua @@ -875,15 +875,19 @@ function MOD:RefreshUnitLayout(frame, template) else castbar.SafeZone = nil; castbar.LatencyTexture:Hide() - end + end + + if castbar.Grip then + castbar.Grip:Width(castHeight + 2) + castbar.Grip:Height(castHeight + 2) + end + if castbar.Icon then if db.castbar.icon then - castbar.Icon.bg:Width(castHeight + 2) - castbar.Icon.bg:Height(castHeight + 2) - castbar.Icon.bg:Show() - else - castbar.Icon.bg:Hide() - castbar.Icon = nil + castbar.Grip.Icon:SetAllPoints(castbar.Grip) + castbar.Grip.Icon:Show() + else + castbar.Grip.Icon:Hide() end end diff --git a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua index 7722dd6..f0d1e4d 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua @@ -512,25 +512,32 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss) local cbName = frame:GetName().."Castbar" local castbarHolder = CreateFrame("Frame", cbName, castbar) - local iconHolder = CreateFrame("Frame", nil, castbar) + local grip = CreateFrame("Frame", nil, castbar) + grip:SetFrameStrata("HIGH") + + local iconHolder = CreateFrame("Frame", nil, grip) iconHolder:SetFixedPanelTemplate("Inset", false) - iconHolder:SetFrameStrata("HIGH") + grip.Icon = iconHolder + local buttonIcon = iconHolder:CreateTexture(nil, "BORDER") buttonIcon:FillInner() buttonIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9) - buttonIcon.bg = iconHolder; castbar.Icon = buttonIcon; + local shieldIcon = iconHolder:CreateTexture(nil, "ARTWORK") - shieldIcon:Point("TOPLEFT",buttonIcon,"TOPLEFT",-7,7) - shieldIcon:Point("BOTTOMRIGHT",buttonIcon,"BOTTOMRIGHT",7,-8) + shieldIcon:Point("TOPLEFT", buttonIcon, "TOPLEFT", -7, 7) + shieldIcon:Point("BOTTOMRIGHT", buttonIcon, "BOTTOMRIGHT", 7, -8) shieldIcon:SetTexture("Interface\\Addons\\SVUI\\assets\\artwork\\Unitframe\\Castbar\\SHIELD") castbar.Shield = shieldIcon; - castbar.Time = iconHolder:CreateFontString(nil, "OVERLAY") + castbar.Time = grip:CreateFontString(nil, "OVERLAY") castbar.Time:SetDrawLayer("OVERLAY", 7) - castbar.Text = iconHolder:CreateFontString(nil, "OVERLAY") + + castbar.Text = grip:CreateFontString(nil, "OVERLAY") castbar.Text:SetDrawLayer("OVERLAY", 7) + castbar.Grip = grip + local bgFrame = CreateFrame("Frame", nil, castbar) local hadouken = CreateFrame("Frame", nil, castbar) @@ -591,7 +598,7 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss) SV.Animate:Sprite(hadouken[2],false,false,true) castbar:Point("BOTTOMLEFT", castbarHolder, "BOTTOMLEFT", 1, 1) - iconHolder:Point("LEFT", castbar, "RIGHT", 4, 0) + grip:Point("LEFT", castbar, "RIGHT", 4, 0) castbar.Time:Point("RIGHT", castbar, "LEFT", -4, 0) castbar.Time:SetJustifyH("CENTER") @@ -627,13 +634,13 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss) SV.Animate:Sprite(hadouken[2],false,false,true) castbar:Point("BOTTOMRIGHT", castbarHolder, "BOTTOMRIGHT", -1, 1) - iconHolder:Point("RIGHT", castbar, "LEFT", -4, 0) + grip:Point("RIGHT", castbar, "LEFT", -4, 0) castbar.Time:Point("LEFT", castbar, "RIGHT", 4, 0) castbar.Time:SetJustifyH("CENTER") end - -- castbar.Time:Point("CENTER", iconHolder, "CENTER", 0, 0) + -- castbar.Time:Point("CENTER", grip, "CENTER", 0, 0) -- castbar.Time:SetJustifyH("CENTER") castbar.Text:SetPoint("CENTER", castbar, "CENTER", 0, 0) @@ -664,9 +671,9 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss) if reversed then castbar:SetReverseFill(true) - iconHolder:Point("LEFT", castbar, "RIGHT", 6, 0) + grip:Point("LEFT", castbar, "RIGHT", 6, 0) else - iconHolder:Point("RIGHT", castbar, "LEFT", -6, 0) + grip:Point("RIGHT", castbar, "LEFT", -6, 0) end end diff --git a/Interface/AddOns/SVUI/scripts/mounts.lua b/Interface/AddOns/SVUI/scripts/mounts.lua index 29c56e2..7b9d1c2 100644 --- a/Interface/AddOns/SVUI/scripts/mounts.lua +++ b/Interface/AddOns/SVUI/scripts/mounts.lua @@ -45,7 +45,7 @@ local NewHook = hooksecurefunc; local CountMounts, MountInfo, RandomMount, MountUp, UnMount; local MountListener = CreateFrame("Frame"); -MountListener.favorites = 0 +MountListener.favorites = false --[[ ########################################################## LOCAL FUNCTIONS @@ -56,10 +56,10 @@ if(select(4, GetBuildInfo()) >= 60000) then return C_MountJournal.GetNumMounts() end function MountInfo(index) - return C_MountJournal.GetMountInfo(index) + return true, C_MountJournal.GetMountInfo(index) end function RandomMount() - if(MountListener.favorites > 0) then + if(MountListener.favorites) then return 0 end maxMounts = C_MountJournal.GetNumMounts() @@ -82,7 +82,7 @@ else return random(1, maxMounts) end function MountUp(index) - index = index or random(1, maxMounts) + index = index or RandomMount() return CallCompanion("MOUNT", index) end UnMount = Dismount @@ -108,45 +108,50 @@ local function UpdateMountCheckboxes(button, index) if(SV.cache.Mounts.types["GROUND"] ~= index) then SV.cache.Mounts.types["GROUND"] = index end - bar["GROUND"]:SetChecked(1) + bar["GROUND"]:SetChecked(true) else - bar["GROUND"]:SetChecked(0) + bar["GROUND"]:SetChecked(false) end if(SV.cache.Mounts.names["FLYING"] == creatureName) then if(SV.cache.Mounts.types["FLYING"] ~= index) then SV.cache.Mounts.types["FLYING"] = index end - bar["FLYING"]:SetChecked(1) + bar["FLYING"]:SetChecked(true) else - bar["FLYING"]:SetChecked(0) + bar["FLYING"]:SetChecked(false) end if(SV.cache.Mounts.names["SWIMMING"] == creatureName) then if(SV.cache.Mounts.types["SWIMMING"] ~= index) then SV.cache.Mounts.types["SWIMMING"] = index end - bar["SWIMMING"]:SetChecked(1) + bar["SWIMMING"]:SetChecked(true) else - bar["SWIMMING"]:SetChecked(0) + bar["SWIMMING"]:SetChecked(false) end if(SV.cache.Mounts.names["SPECIAL"] == creatureName) then if(SV.cache.Mounts.types["SPECIAL"] ~= index) then SV.cache.Mounts.types["SPECIAL"] = index end - bar["SPECIAL"]:SetChecked(1) + bar["SPECIAL"]:SetChecked(true) else - bar["SPECIAL"]:SetChecked(0) + bar["SPECIAL"]:SetChecked(false) end end end local function UpdateMountsCache() - if(not MountJournal or not MountJournal.cachedMounts) then return end + if(not MountJournal) then return end local num = CountMounts() + MountListener.favorites = false + for index = 1, num, 1 do - local _, info, id = MountInfo(index) + local _, info, id, _, _, _, _, _, favorite = MountInfo(index) + if(favorite == true) then + MountListener.favorites = true + end if(SV.cache.Mounts.names["GROUND"] == info) then if(SV.cache.Mounts.types["GROUND"] ~= index) then SV.cache.Mounts.types["GROUND"] = index @@ -171,7 +176,7 @@ local function UpdateMountsCache() end local function Update_MountCheckButtons() - if(not MountJournal or not MountJournal.cachedMounts) then return end + if(not MountJournal or (MountJournal and not MountJournal.cachedMounts)) then return end local count = #MountJournal.cachedMounts if(type(count) ~= "number") then return end local scrollFrame = MountJournal.ListScrollFrame; @@ -233,7 +238,7 @@ local CheckButton_OnClick = function(self) local key = self.key if(index) then - if(self:GetChecked() == 1) then + if(self:GetChecked() == true) then SV.cache.Mounts.types[key] = index SV.cache.Mounts.names[key] = name else @@ -318,7 +323,7 @@ local function SetMountCheckButtons() buttonBar["GROUND"]:SetPanelColor(0.2, 0.7, 0.1, 0.15) buttonBar["GROUND"]:GetCheckedTexture():SetVertexColor(0.2, 0.7, 0.1, 1) buttonBar["GROUND"].key = "GROUND" - buttonBar["GROUND"]:SetChecked(0) + buttonBar["GROUND"]:SetChecked(false) buttonBar["GROUND"]:SetScript("OnClick", CheckButton_OnClick) buttonBar["GROUND"]:SetScript("OnEnter", CheckButton_OnEnter) buttonBar["GROUND"]:SetScript("OnLeave", CheckButton_OnLeave) @@ -331,7 +336,7 @@ local function SetMountCheckButtons() buttonBar["FLYING"]:SetPanelColor(1, 1, 0.2, 0.15) buttonBar["FLYING"]:GetCheckedTexture():SetVertexColor(1, 1, 0.2, 1) buttonBar["FLYING"].key = "FLYING" - buttonBar["FLYING"]:SetChecked(0) + buttonBar["FLYING"]:SetChecked(false) buttonBar["FLYING"]:SetScript("OnClick", CheckButton_OnClick) buttonBar["FLYING"]:SetScript("OnEnter", CheckButton_OnEnter) buttonBar["FLYING"]:SetScript("OnLeave", CheckButton_OnLeave) @@ -344,7 +349,7 @@ local function SetMountCheckButtons() buttonBar["SWIMMING"]:SetPanelColor(0.2, 0.42, 0.76, 0.15) buttonBar["SWIMMING"]:GetCheckedTexture():SetVertexColor(0.2, 0.42, 0.76, 1) buttonBar["SWIMMING"].key = "SWIMMING" - buttonBar["SWIMMING"]:SetChecked(0) + buttonBar["SWIMMING"]:SetChecked(false) buttonBar["SWIMMING"]:SetScript("OnClick", CheckButton_OnClick) buttonBar["SWIMMING"]:SetScript("OnEnter", CheckButton_OnEnter) buttonBar["SWIMMING"]:SetScript("OnLeave", CheckButton_OnLeave) @@ -357,7 +362,7 @@ local function SetMountCheckButtons() buttonBar["SPECIAL"]:SetPanelColor(0.7, 0.1, 0.1, 0.15) buttonBar["SPECIAL"]:GetCheckedTexture():SetVertexColor(0.7, 0.1, 0.1, 1) buttonBar["SPECIAL"].key = "SPECIAL" - buttonBar["SPECIAL"]:SetChecked(0) + buttonBar["SPECIAL"]:SetChecked(false) buttonBar["SPECIAL"]:SetScript("OnClick", CheckButton_OnClick) buttonBar["SPECIAL"]:SetScript("OnEnter", CheckButton_OnEnter) buttonBar["SPECIAL"]:SetScript("OnLeave", CheckButton_OnLeave) diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua index db76226..5a09b33 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua +++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua @@ -836,35 +836,40 @@ SV.Options.args.common = { } }; -local q, r, dnt = "", "", ""; +local q, r, community, dnt = "", "", "", ""; local s = "\n"; local p = "\n"..format("|cff4f4f4f%s|r", "---------------------------------------------"); -local t = {"Munglunch", "Elv", "Tukz", "Azilroka", "Sortokk", "AlleyKat", "Quokka", "Haleth", "P3lim", "Haste", "Totalpackage", "Kryso", "Thepilli"}; -local u = {"Wowinterface Community", "Doonga - (The man who keeps me busy)", "Judicate", "Cazart506", "Movster", "MuffinMonster", "Joelsoul", "Trendkill09", "Luamar", "Zharooz", "Lyn3x5", "Madh4tt3r", "Xarioth", "Sinnisterr", "Melonmaniac", "Hojowameeat", "Xandeca", "Bkan", "Daigan - (My current 2nd in command)", "AtomicKiller", "Meljen", "Moondoggy", "Stormblade", "Schreibstift", "Anj", "Risien", "Penguinsane", "Cromax", "Nitro_Turtle", "Shinzou", "Autolykus", "Taotao"}; +local t = {"Munglunch", "Elv", "Tukz", "Azilroka", "Sortokk", "Kkthnx", "AlleyKat", "Quokka", "Haleth", "P3lim", "Haste", "Totalpackage", "Kryso", "Thepilli"}; +local u = {"Sinnisterr - (My wife, the MOST ruthless Warlock you will ever meet)", "Doonga - (The man who keeps me busy)", "Daigan - (My current 2nd in command)", "Penguinsane - (Tester extraordinaire)", "FaolanKing - (King of the bug report portal)"}; local v = {"Movster", "Cazart506", "FaolanKing", "Doonga", "Other Silent Partners.. (Let me know if I have forgotten you)"}; +local w = {"Wowinterface Community", "Judicate", "Cazart506", "Movster", "MuffinMonster", "Joelsoul", "Trendkill09", "Luamar", "Zharooz", "Lyn3x5", "Madh4tt3r", "Xarioth", "Melonmaniac", "Hojowameeat", "Xandeca", "Bkan", "AtomicKiller", "Meljen", "Moondoggy", "Stormblade", "Schreibstift", "Anj", "Risien", "Cromax", "Nitro_Turtle", "Shinzou", "Autolykus", "Taotao"}; local credit_header = format("|cffff9900%s|r", "SUPERVILLAIN CREDITS:")..p; local credit_sub = format("|cffff9900%s|r", "CREATED BY:").." Munglunch"..p; -local credit_sub2 = format("|cffff9900%s|r", "USING ORIGINAL CODE BY:").." Elv, Tukz, Azilroka, Sortokk"..p; -local special_thanks = format("|cffff9900%s|r", "A VERY SPECIAL THANKS TO: ")..format("|cffffff00%s|r", "Movster").." ..who inspired me to bring this project back to life!"..p; -local coding = format("|cff3399ff%s|r", L['CODE MONKEYS (aka ORIGINAL AUTHORS):'])..p; -local testing = format("|cffaa33ff%s|r", L['PERFECTIONISTS (aka TESTERS):'])..p; +local credit_sub2 = format("|cffff9900%s|r", "CODE GRANTS BY:").." Elv, Tukz, Azilroka, Sortokk"..p; +local special_thanks = format("|cffff9900%s|r", "SPECIAL THANKS TO: ")..format("|cfff81422%s|r |cff2288cc(@WowInterface.com)|r", "Cairenn").." ..the most patient and accomodating person I know!\n\n"..format("|cffff9900%s|r", "A VERY SPECIAL THANKS TO: ")..format("|cffffff00%s|r", "Movster").." ..who inspired me to bring this project back to life!"..p; +local coding = format("|cff3399ff%s|r", L['CODE MONKEYS (aka CONTRIBUTORS):'])..p; +local testing = format("|cffaa33ff%s|r", L['PERFECTIONISTS (aka CORE TESTING TEAM):'])..p; +local testing2 = format("|cffaa33ff%s|r", L['MINIONS (aka COMMUNITY TESTERS):'])..p; local doners = format("|cff99ff33%s|r", L['KINGPINS (aka INVESTORS):'])..p; local music = format("|cff00ccff%s|r", 'Theme Song By: Fingathing [taken from the song: SuperHero Music]'); -tsort(t, function(o,n) return o < n end) for _, x in pairs(t) do q = q..s..x +end + +for _, x in pairs(u) do + r = r..s..x end -tsort(u, function(o,n) return o < n end) -for _, y in pairs(u) do - r = r..s..y + +for _, x in pairs(v) do + dnt = dnt..s..x end -tsort(u, function(o,n) return o < n end) -for _, z in pairs(v) do - dnt = dnt..s..z + +for _, x in pairs(w) do + community = community..s..x end -local creditsString = credit_header..'\n'..credit_sub..'\n'..credit_sub2..'\n'..special_thanks..'\n\n'..coding..q..'\n\n'..testing..r..'\n\n'..doners..dnt..'\n\n'..music..'\n\n'; +local creditsString = credit_header..'\n'..credit_sub..'\n'..credit_sub2..'\n'..special_thanks..'\n\n'..coding..q..'\n\n'..testing..r..'\n\n'..testing2..community..'\n\n'..doners..dnt..'\n\n'..music..'\n\n'; SV.Options.args.credits = { type = "group", diff --git a/Interface/AddOns/SVUI_CraftOMatic/components/archaeology.lua b/Interface/AddOns/SVUI_CraftOMatic/components/archaeology.lua index c34500a..02e3b07 100644 --- a/Interface/AddOns/SVUI_CraftOMatic/components/archaeology.lua +++ b/Interface/AddOns/SVUI_CraftOMatic/components/archaeology.lua @@ -440,8 +440,6 @@ function PLUGIN:LoadArchaeologyMode() for i = 1, 12 do local bar = CreateFrame("StatusBar", nil, ArchCrafting) - local race = bar:CreateFontString() - local progress = bar:CreateFontString() local solve = CreateFrame("Button", nil, bar, "SecureHandlerClickTemplate") local yOffset; @@ -459,12 +457,14 @@ function PLUGIN:LoadArchaeologyMode() local sOffset = SV.Scale(1) -- Race Text + local race = bar:CreateFontString() race:SetFontObject(NumberFont_Outline_Large) race:SetText(RACE) race:SetPoint("TOPLEFT", bar, "TOPLEFT", sOffset, -sOffset) race:SetTextColor(1,0.8,0) -- Progress Text + local progress = bar:CreateFontString() progress:SetFont(SV.Media.font.roboto, 11, "OUTLINE") progress:SetText("") progress:SetPoint("BOTTOMRIGHT", bar, "BOTTOMRIGHT", -sOffset, sOffset) diff --git a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua index a6fee08..a55841e 100644 --- a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua +++ b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua @@ -69,52 +69,52 @@ LOCAL FUNCTIONS ]]-- local RefreshLoggedSlot = function(self, slotID, save) if(not self[slotID]) then return end - local bag = self:GetID() - local slot, _ = self[slotID], nil; + --print(self[slotID]:GetName()) + local bag = self:GetID(); + local slot = self[slotID]; local bagType = self.bagFamily; - local texture, count, locked = GetContainerItemInfo(bag, slotID) - local itemLink = GetContainerItemLink(bag, slotID); - local key; + slot:Show() - slot.name, slot.rarity = nil, nil; - local start, duration, enable = GetContainerItemCooldown(bag, slotID) - CooldownFrame_SetTimer(slot.cooldown, start, duration, enable) - if duration > 0 and enable == 0 then + + local texture, count, locked, rarity = GetContainerItemInfo(bag, slotID); + local start, duration, enable = GetContainerItemCooldown(bag, slotID); + local itemLink = GetContainerItemLink(bag, slotID); + + CooldownFrame_SetTimer(slot.cooldown, start, duration, enable); + + if(duration > 0 and enable == 0) then SetItemButtonTextureVertexColor(slot, 0.4, 0.4, 0.4) else SetItemButtonTextureVertexColor(slot, 1, 1, 1) - end - if bagType then + end + + if(bagType) then local r, g, b = bagType[1], bagType[2], bagType[3]; slot:SetBackdropColor(r, g, b, 0.5) slot:SetBackdropBorderColor(r, g, b, 1) - elseif itemLink then - local class, subclass, maxStack; - key, _, slot.rarity, _, _, class, subclass, maxStack = GetItemInfo(itemLink) - slot.name = key - local z, A, C = GetContainerItemQuestInfo(bag, slotID) - if A and not isActive then - slot:SetBackdropBorderColor(1.0, 0.3, 0.3) - elseif A or z then - slot:SetBackdropBorderColor(1.0, 0.3, 0.3) - elseif slot.rarity and slot.rarity>1 then - local D, E, F = GetItemQualityColor(slot.rarity) - slot:SetBackdropBorderColor(D, E, F) + elseif(itemLink) then + local key, _, rarity, _, _, class, subclass, maxStack = GetItemInfo(itemLink) + if(rarity and rarity > 1) then + local r, g, b = GetItemQualityColor(rarity) + slot:SetBackdropBorderColor(r, g, b) else slot:SetBackdropBorderColor(0, 0, 0) end - if (key and save) then + + if(key and save) then local id = GetContainerItemID(bag,slotID) if id ~= 6948 then PLUGIN.myStash[bag][key] = GetItemCount(id,true) end end else slot:SetBackdropBorderColor(0, 0, 0) - end - if C_NewItems.IsNewItem(bag, slotID)then + end + + if(C_NewItems.IsNewItem(bag, slotID)) then ActionButton_ShowOverlayGlow(slot) else ActionButton_HideOverlayGlow(slot) - end + end + SetItemButtonTexture(slot, texture) SetItemButtonCount(slot, count) SetItemButtonDesaturated(slot, locked, 0.5, 0.5, 0.5) @@ -130,7 +130,7 @@ local RefreshLoggedSlots = function(self, bagID, save) end local RefreshLoggedBags = function(self) - for id,bag in ipairs(self.Bags)do + for id,bag in pairs(self.Bags)do if PLUGIN.myStash[id] then twipe(PLUGIN.myStash[id]) else diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/achievement.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/achievement.lua index 6069bbc..dcb5f09 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/achievement.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/achievement.lua @@ -209,15 +209,21 @@ local function AchievementStyle() AchievementFrameComparisonSummaryFriendStatusBar.text:SetPoint("CENTER") AchievementFrameComparisonHeader:Point("BOTTOMRIGHT", AchievementFrameComparison, "TOPRIGHT", 45, -20) - for f = 1, 10 do - local d = _G["AchievementFrameSummaryCategoriesCategory"..f] - local i = _G["AchievementFrameSummaryCategoriesCategory"..f.."Button"] - local j = _G["AchievementFrameSummaryCategoriesCategory"..f.."ButtonHighlight"] - BarStyleHelper(d) - i:RemoveTextures() - j:RemoveTextures() - _G[j:GetName().."Middle"]:SetTexture(1, 1, 1, 0.3) - _G[j:GetName().."Middle"]:SetAllPoints(d) + for i = 1, 12 do + local categoryName = ("AchievementFrameSummaryCategoriesCategory%d"):format(i) + if(_G[categoryName]) then + if _G[categoryName.."Button"] then + _G[categoryName.."Button"]:RemoveTextures() + end + local hlName = categoryName.."ButtonHighlight" + local highlight = _G[hlName] + if(highlight) then + highlight:RemoveTextures() + _G[hlName.."Middle"]:SetTexture(1, 1, 1, 0.3) + _G[hlName.."Middle"]:SetAllPoints(categoryName) + end + BarStyleHelper(_G[categoryName]) + end end AchievementFrame:HookScript("OnShow", function(self) diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/petjournal.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/petjournal.lua index d4695d4..7924b6b 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/petjournal.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/petjournal.lua @@ -110,18 +110,29 @@ local function PetJournalStyle() MountJournal.MountDisplay.ShadowOverlay:RemoveTextures() MountJournal.MountCount:RemoveTextures() MountJournalListScrollFrame:RemoveTextures() + MountJournalMountButton:RemoveTextures() MountJournalMountButton:SetButtonTemplate() MountJournalSearchBox:SetEditboxTemplate() STYLE:ApplyScrollFrameStyle(MountJournalListScrollFrameScrollBar) MountJournal.MountDisplay:SetFixedPanelTemplate("ModelComic") - for i = 1, #MountJournal.ListScrollFrame.buttons do - local button = _G["MountJournalListScrollFrameButton"..i] + local buttons = MountJournal.ListScrollFrame.buttons + for i = 1, #buttons do + local button = buttons[i] if(button) then STYLE:ApplyItemButtonStyle(button, nil, true, true) local bar = _G["SVUI_MountSelectBar"..i] if(bar) then bar:SetParent(button.Panel) end + if(SV.GameVersion >= 60000) then + if(button.favorite) then + local fg = CreateFrame("Frame", nil, button) + fg:SetSize(40,40) + fg:SetPoint("TOPLEFT", button, "TOPLEFT", -1, 1) + fg:SetFrameLevel(button:GetFrameLevel() + 30) + button.favorite:SetParent(fg) + end + end end end @@ -216,19 +227,23 @@ local function PetJournalStyle() PetJournalPetCardPetInfo.levelBG:SetAlpha(0) PetJournalPetCardPetInfoIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9) STYLE:ApplyItemButtonStyle(PetJournalPetCardPetInfo, nil, true, true) + local fg = CreateFrame("Frame", nil, PetJournalPetCardPetInfo) fg:SetSize(40,40) fg:SetPoint("TOPLEFT", PetJournalPetCardPetInfo, "TOPLEFT", -1, 1) fg:SetFrameLevel(PetJournalPetCardPetInfo:GetFrameLevel() + 30) + PetJournalPetCardPetInfo.favorite:SetParent(fg) PetJournalPetCardPetInfo.Panel:WrapOuter(PetJournalPetCardPetInfoIcon) PetJournalPetCardPetInfoIcon:SetParent(PetJournalPetCardPetInfo.Panel) PetJournalPetCardPetInfo.level:SetParent(PetJournalPetCardPetInfo.Panel) + local R = PetJournalPrimaryAbilityTooltip;R.Background:SetTexture(0,0,0,0) if R.Delimiter1 then R.Delimiter1:SetTexture(0,0,0,0) R.Delimiter2:SetTexture(0,0,0,0) - end + end + R.BorderTop:SetTexture(0,0,0,0) R.BorderTopLeft:SetTexture(0,0,0,0) R.BorderTopRight:SetTexture(0,0,0,0) @@ -238,6 +253,7 @@ local function PetJournalStyle() R.BorderBottomRight:SetTexture(0,0,0,0) R.BorderBottomLeft:SetTexture(0,0,0,0) R:SetFixedPanelTemplate("Transparent", true) + for b = 1, 6 do local S = _G['PetJournalPetCardSpell'..b] S:SetFrameLevel(S:GetFrameLevel() + 2) @@ -246,7 +262,8 @@ local function PetJournalStyle() S.Panel:SetAllPoints() S.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) S.icon:FillInner(S.Panel) - end + end + PetJournalPetCardHealthFrame.healthBar:RemoveTextures() PetJournalPetCardHealthFrame.healthBar:SetPanelTemplate('Default') PetJournalPetCardHealthFrame.healthBar:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Template\DEFAULT]]) @@ -259,9 +276,18 @@ local function PetJournalStyle() ToyBox:RemoveTextures() ToyBoxProgressBar:SetPanelTemplate("Bar", true) ToyBoxSearchBox:SetEditboxTemplate() + ToyBoxFilterButton:RemoveTextures() ToyBoxFilterButton:SetButtonTemplate() - STYLE:ApplyDropdownStyle(ToyBoxFilterDropDown) - ToyBoxIconsFrame:SetBasicPanel() + ToyBoxIconsFrame:RemoveTextures() + ToyBoxIconsFrame:SetFixedPanelTemplate('ModelComic') + + MountJournalFilterButton:RemoveTextures() + MountJournalFilterButton:SetButtonTemplate() + + MountJournal.SummonRandomFavoriteButton:RemoveTextures() + MountJournal.SummonRandomFavoriteButton:SetSlotTemplate(true, 2, 0, 0, true) + MountJournal.SummonRandomFavoriteButton.texture:SetTexture([[Interface\ICONS\ACHIEVEMENT_GUILDPERK_MOUNTUP]]) + MountJournal.SummonRandomFavoriteButton.texture:SetTexCoord(0.1, 0.9, 0.1, 0.9) for i = 1, 18 do local gName = ("ToySpellButton%d"):format(i) diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/talents.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/talents.lua index 60bc03b..068ca9f 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/talents.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/talents.lua @@ -176,7 +176,9 @@ local function TalentFrameStyle() PlayerSpecTab1:Point(d, x, f, -1, h) end) - for i = 1, MAX_NUM_TALENT_TIERS do + local maxTiers = (SV.GameVersion >= 60000) and MAX_TALENT_TIERS or MAX_NUM_TALENT_TIERS + + for i = 1, maxTiers do local gName = ("PlayerTalentFrameTalentsTalentRow%d"):format(i) local rowFrame = _G[gName] if(rowFrame) then @@ -191,14 +193,14 @@ local function TalentFrameStyle() for z = 1, NUM_TALENT_COLUMNS do local talentItem = _G[("%sTalent%d"):format(gName, z)] if(talentItem) then - STYLE:ApplyItemButtonStyle(talentItem, false, true) + STYLE:ApplyItemButtonStyle(talentItem) end end end end hooksecurefunc("TalentFrame_Update", function() - for i = 1, MAX_NUM_TALENT_TIERS do + for i = 1, maxTiers do local gName = ("PlayerTalentFrameTalentsTalentRow%d"):format(i) for z = 1, NUM_TALENT_COLUMNS do diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua b/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua index 6c6b599..268fa0d 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua @@ -186,7 +186,7 @@ function STYLE:ApplyItemButtonStyle(frame, adjust, shrink, noScript) if shrink then frame:SetPanelTemplate("Button", true, 1, -2, -2) else - frame:SetFixedPanelTemplate("Button") + frame:SetPanelTemplate("Button", true, 1, -1, -1) end end diff --git a/Interface/BattlefieldFrame/Battleground-Alliance.blp b/Interface/BattlefieldFrame/Battleground-Alliance.blp index 9c11a829b1bf8e3ee48b9375135c88eccd49ce49..60000901c3b51826a854d4c490cd17314f240864 100644 GIT binary patch literal 2580 zcmeHIeN0oIt4I}WRN7^Qni5IH@B<`iuVwv zuJaRm2{Fqf48||6-a!TPPjqeT8L_!&9KWmu<4sMSE2^h=9K~iN@!F@n@+qDlC3}yQ zW!WCqq;PRRCUW1&7w#!U^8xPth>kdt8E)@LU_s@PzxfJ?Nz77~Z_1<-7C(=>uey;y z?Jpr;)(dj!{<&Kp?Pg2AxkyyeE4y);D+{9fi|XRHe1TU*w*Irs4lCh zzTe{^waP*eGBCF|rb@F{Af8`5x;??-Pip4zzTm-o?`IamJRX}#-2RTVVvxszg*9X` zO-_Fsajbq#*2w(KI8+~KfbZbsh_+gw<@C&EwgeqLZB0LI>v?iFfS=m;(Qrd}yg%Hr zC`oo6u-kdQx3X6e?cX2u3TNEPQ?dtuk6(%`7oEvFpU&gpz;$H7*t8xcL`~K|m<_!_ z`HlpyK~<`@IyI(WVrES_;A>)it+m|w?7-MV-j^tlvI@>Eb*h%c;xjy7V4xpO7aub5 zmJccECc7o99;PJjI7i7&X9=sSOzp6=S=v?HK;yJ5zT-c~&hj*~UF8Z@# z%_ftU>bDu+3vl`#S|HJgXOUV_aQLiCk)yM}berZ+)*A>jv>%z+qBWjBH*igvmeyLr zm6crYm7I#nbBj&?@9WKBz*)4v#fW8{0LVH2wvb&sO0q`n<75fA+BSbzKMtBe8tK`o275W)B*<{!&xx zyYi`??kd>@q8`|jeQCg@s66y6ZikK^wFPbsrRGQ$;@!pc5_QO&!1kxL${@2JI$1zSF*-`k({ z#q)1~v3<&0nHaR`rPwd;iwYc{hJKJ7>n^6aBv%?0`W#co%eRf%41jYkKYrKGZP!~W zHa;8cE|cQAmFalC{~MNi>PItaf69s&z^NFI!SVeHIzkT`0Q%{T^l$aFz)GWr?w3>o lT%hOkXx83RA)TbThXm5D4|{u6yMCW535%ewx3@Q*?>DOZ^4S0Y literal 2580 zcmZ?r2{2-0U|?Y4U}sbS(jYvA1&BF-n3I9w3J^a5;x9nV!o|QKLIh?2>Sq8N>Hwq! z&@hlY3PwX4(lA%KyaV#fvQ^GEGcbgPhE6qpx2-qR zbJG8>{}Tj4L$9s}@@;uNf7$;4^TYqWWAL1$62xSqUl_cqKt1_J(j$Iv;I zxpM;dIgou*r%pZdE@9q(AXvVnU100_AO9FwLA?L}6OI~K-3Y(C8^(XI=VFk0X!yG` z@AyC31Lco&YbwU<(7*nUp^C{ifJrsK$AJUr{xCxJr@eE_dm8rc>9_w45>uyMy$UnG zdCdmJdm-VWFuu~YY|URMS2n@;2j8tR++Uq_2*yuZvQcrn=+&#C@7Di0q5tR1H(>aL zg@uO`vS09BSklw5Jd>A64jiJQqHy~d*XT-C#6%Ut%vboPC)xaV>sC1bAD`f%>bN)< zKXDDOq^|DLvx4td&N&%?r0c z>a)Ut>hCu4-T<1X05mT?K9r#S=XjtO(@u z6HYIz#%4*N_*6&bi-r?|08VZ*yB<69E8*t0Fwky1i*a4XoZH`9=xh4ghnOs!8 zJ-7Fs`?WGk2Xd#JJ+)S{SXrd{7|;|awn+f<9T$D}h={F~wq0eP#?KhH%fZLtCcM1K z{Uh5t=mY3zZ|^Yj)q?-M&-^3z>rncjwq8fI`#KrO;rgPZaTz~-gWY!~lX-z&1Cwmq z$70->*yU)Xr8WG$0h=d{`HjaTfhCH1`SZdnTGz9<9YSq$tPkpb{vnHc1tVd?O|;B@ z^uX+0Hf-Gi%bxcKV-M>3st#490oSxuc@)xT6iy92uOZ%BTiY%Q@m$FxZq6N{XHC=O zgNbk&@oLT9BK;V+SD|`P_oIn$aEWdk6SjYIdLY~7CqydH$AJB+-Xd0=Q|uAByuA%} z=G`wT?(s)Z-%uz-nxE zAP6pi5b_!CBLTh1Z&5-M#?NE?8asdekoNW=y&h6(@fiIa*7vg;#Q3Dbz1S&9^pn*h zFg$F{#_VQIBDDU?4ND`eFaA>})~6gK*^@khn%Pshn?#2!GgT8<-`#)cZ{#=n6~>ob z)0;eKl3Z}!TQ1T?hM9v_zF{)v+#-rw=v8w7EcTR;>$F>~UvyJ4#I`OJ+@%qT3*rWd z<-hS6`TOBm@`V4y{1~2JE#mz=3?6aq+OOG@ie1{#BQG$_lUFJ?g#r(7^tA&a2@;pw z&kPItdH+gZBYqdw|2x7{_4z1|@9hb82KvTYF4g!;2_EY;oH`2H;p5#i7?(I%W!djx z|N8Qf#b4U%;_$iS`&+K$-{=3C-vQbi1naF3#`o~LEW7qkUv9?w$fN%YcD#Q&pJh*Y mw_Z&So+hBi?U_HFn+r literal 2580 zcmZ?r2{2-0U|?Y4U}sbS(jYvA1&BF-n3I9w3J^a5;x9nV!o|QKLIh?2>Sq8N>Hwq! z&@hlY3PwX7aE?DYKqiV@&qmf`NZpa1{= z|E$0;!BK*nq2k(^cmF^CKPmq~p+iC700XbM(!1P`%jF0I3Y=ZsgsrKf7+}KjHef*CUz)rsIrQN z|L=%k$q_IOa_nGWm~&&A=v|82m zEJ+&ZWSDye-~GI=l9kQie1L%g=<&b*jW00kG{rb3O<>>%i73qcAG%+Fky*tdafTy@ z>DtWV|4IxB4zsoZ-K)URkR2L&mmy%0y5A&t{1LJrU0x9A9_4N6(lGa&d3R!_{m*85 z#R-ZWo=(o5XWsoeZ~x~ci^2j0fy0i4v3D5?n$*2Mk!>Hk{pft-yQdzjnkC#;09Ce( ztf6NZ7~a`?lJ7rs^XbiJF$1N~Tn$DAVEzdW-Ddt z{g`YOJwWQisBo`gV6|G_N2tbfmGB} zgo8Z<3K`DzkPkT~1kUIsq9`XFTx^fcJ4Xp;a0 zsI-Zp^~AszdO%_cJ>2@G6xe}m-_N#I09jUKDeteyJfA&N$d}WbANy3u&+Z3zE(W*S z@ekSW_k&8wE%FnuG^0NqX(Nt`GcXno|0JF~!0YMv5SPcF4sri=ufz^#-x#tf@=FdB z#~(4p&*2>`%d&xZL^lD)I$OJm*YMtTZ^S~xd!h-h?RBJyqdH#ibOUi8-sK*r%PBcf zybApQ-s#g=0L72!-a>bjT_R4R9&C8r#8Ko?VIe}ii~X6so6-_5iap?FS3TA0KSX_$ zFXVfL{T;A9I!gImn2%k)(?QJjkH5Q7sAo}}fOBi!)l&bkHD#?N~wxDxP1;CovrUsn9a9N_#eV1V2Gyi778F;4892nKJ(iGiAzI60g!e(65*1 zwZszoz>lSDgTUvV(Vt&QoP_b+*_%zd`S%MknE(BLDLW*X(0}iPqP7czVRhi?g`D37 zDylrc|7W}n_TEPO6SJD1_cmGHhOQpY7S7N3eE2xA0ODstqLk}ZYWc01F~^$!^4Td>1D{P=M0Ip2HFIlq?n zj?)|fSnPW^hG*G_tI_S~4uCZJ9C{wT+6ln#zyb3Ci%NLZZgIqlRXR}VK&1oQcEHw< ziXLbV&Cv^dBIWX*TQZ1+WXc8p-80r}bohUo^-#~19W0JfeLm6Jn^R&rVz3&kX76Sm zS(YCVd+#uY>?A%jDX~mCtrP!R0FSDw2J!coK93RzbP+SQrobmo7N(MgDbf>?t+6?L zi0SU*^BBmX@GeCdind6fRL;y zjNwCi+vzibF|XI*rTiNUKGB6ne13LNN}~}+e)uH(f0a119BhLsjw5b=b68NYA^)Hc z7BtHLmg6?*UwIG03>wA5c@Sr2*7XC%c=-9~s5zhc*Gvc~UGh%#;~KDHvDirU8)qN4 zS*?yZalSNhK~Wx=^@mGZN2Y$DL~)^{N#UE9%=!5w#=_x9WUD@(z~xh7d7201>mlZO zyJ7yHJD51Xfm@~}QBG&fd0$>)qO7j(LueW~peR(2iHzxbq?=FR@+Ausq-SerjU7z| zv&4MD_~^dZW3rGmM%7ZtpI0Pd`}c%m1AJ8Sh_g9urd0?D05&Y{>E= z9P`!shum%-va@{u|NeiD2`!Yx{4XLvJ?;lzCumieqVY%Uqfd3+S+kZud5Uo_bRG9~ GbG_dtx$qwV literal 0 HcmV?d00001 diff --git a/Interface/FriendsFrame/Battlenet-Sc2icon.blp b/Interface/FriendsFrame/Battlenet-Sc2icon.blp new file mode 100644 index 0000000000000000000000000000000000000000..f7c62321735cafa70f7936d5a8bb152f6c1b89b2 GIT binary patch literal 2580 zcmeH|QAkr!7{|X&H#h0xWVi5QgtM&}I-J2Qq=&kJGAoGYaTS|Q4H9zGhlD@|iqQzE z8)687NYp5<6uo#MA{>HZi|{3}*u#3zryh(@Dw*BBnctNRLwpN%IUk4LJ?Hy>-}%nD z=Za^}9nk@R-c+C~!#-<6`Di9IGr)Va1+-(KReQOEQ=VNu9i%pS5Vlb%d zPZ_>2WG~ANKGqGuCi3FM!TCoP)|^Zd`$t+$Y`jlLTsqNWV$F#VG3oQMs?3a(nIU#d zb&&;Z#5A9ch%mR}aS(r-atLz_R*5IlPpZQ#*+V=$Qc(PwIb6gSpF4z03}oW(am<&6 zF1V$lOadFl+b+KKI)G;dBW|p}WV&5A-!`D>4-Odx##kebe~izHP6x*kCv5uAFu>|qH?t0 z`u|=(AH&1f6j`SIp!r+*GuG2{e>0y~(>CbsU)1tjQ_7)AifX(!3J}0}TlM%D9zH2E zN&3c$y2wGLB}L4~)U^HH6^-4JI%rzd^t%Otg z0-jHfu_ZWk(&8Pok2N5dXZP>l>oZS=T2tunti|(z1w35o4&|Xss8SCP2uDIM6IT=xt-$gjWHT_9f!po=ZkXW~3`NSy2zp3t1Vx1q z)_NTkqD~@3wkK(AB|)VR)rH7FDi=`?QYl0%|IS^Wt4x$ZPr(lN@blgCpL72I{O4Z& zy2GwL1puJaZz!!Av z!wnKIaJ%W)WK<#E)a$E>4lPy@%QJo)2tR_E~iSc1YkH4iDbw71K+UStN;K2 literal 0 HcmV?d00001 diff --git a/Interface/FriendsFrame/Battlenet-WoWicon.blp b/Interface/FriendsFrame/Battlenet-WoWicon.blp new file mode 100644 index 0000000000000000000000000000000000000000..0022ecda32fbeb0aa692929f8ff4cd841316be63 GIT binary patch literal 2580 zcmeH`Ur5tY6vxk|&i%CIq93k5Qd`czOk7b0Jw!7Q*FRJCQ%RxCgobmQ*o#?E%<~I`LVOE$xnC|H?(clh@1A>Z z!TC!^MF1d{CX1A~#?+CBlA;)ZDO3=(h)PTWU^gMactF$BxX3pMF+SoIh*uz9fxlKj zlH;@N&94s92Q2TC=`MVY5^LN(8R)jo=$Fgreh7Y;PZqGRjFLag7urH))(|lyMc2mg zAOOdOWW@Dvv{LSQDiA+@Wt4LL{ZEK5-V*}{{r$w(UK9XV^>KvQ-5c|(tY-PVh~FLY zQ$CHm&>F-^Oy3ucCqS<3{!?Pt^!AfejMGWH+-g4C(%d{v?7id6ZrcAyK|CL7RZbfk zZxSaqsGz9+s#)Vsi;Uu=e1FR?s|2Y?#4r@khlffh#~oS3$xHl^PDOgYz~N+M#VO)& zP@<};sHh-*St5qwVw-KV`OT#&V6r_Piucc?>^`ATbQ906_PKmZ);ePU7suUn_OPAU z5$xGjrPu2PZUDGtvlVYPf5>$J<|bsq{kL6acI^4N(nWsG)tVBM$;1)Qt*W(l&v$_x zJ$9wOtX#N{Pw%vHi?N|`V}6#$<}0%<(tVJh_aT6@j}!bt?OJGT84|dr_6%_4*mCRr z>L0}Z8)O?|*O6VZ`~Ua( rm@z|j0OQ+A0ght<^Nwi@2^eBfXM(5C>s4g@jt`$R!hqN7-RSoV8y)s~ literal 0 HcmV?d00001 diff --git a/Interface/FriendsFrame/TravelPass-Invite.blp b/Interface/FriendsFrame/TravelPass-Invite.blp new file mode 100644 index 0000000000000000000000000000000000000000..88dd31c0cb2b715187e9d17885a91595f58613a0 GIT binary patch literal 12132 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 ZFYfE;m>7>tM6u2yq~N;9_pm_y{sYNLGQa=; literal 0 HcmV?d00001 diff --git a/Interface/MINIMAP/TRACKING/BattleMaster.blp b/Interface/MINIMAP/TRACKING/BattleMaster.blp index 4a9be080bbf35d5a36cbc845e194ea1131daac2f..aadc6e2de5f9ac48f842d688a8c40b53d5646b08 100644 GIT binary patch literal 2580 zcmeHJdq`7J82{Xqj>c*?N`(sV9UJzh5``k#W=f1+B0Fm=BOe9*(a3@zU9r@l%t(9O z$jq`xko8auMlV|7@E`(zcj7WeN7(t9L7~xR>bN?a$=L3?Ou+u66;dGmJVA_Fc2mb6p z#P35~tJmpI3SXtej|rvpJtuiJ&VA=c3chb3h!YuDvW;^zrtaG*p>bIpWJm_a(Wdn@+gM6~k zc>f5B&n{>dugFgW5-y&VGGM7B?|{oWq4%+cT(=AwWPB`G0@>*{>(J)g+!-eqz3RAX2Osv^`$$KBu3kXLOzO zS3i~fEAV_no2sWMTZQ{!(H+i*`$Md3EI2*BKUjEPc7?Z7RaBw}niuoI2bSl0yJ}rG z9~!qglzjgij=Y<+as}?U8)jV3LrM(~!MhBxdNDu`p5Uq0Qv&^EdOQ+c=!XXVkDk9W eQ;p_V%@N4;YL91T=%)-@Sq8N>Hwq! z&@hlY3PwXVLJ=F$2BS(Ydbwp zGC=vvM+F&H@GoV8@fTg~*KE?=x`Bb!{sS`*9b3b|5Ec>=LdZVC@(}wMPFCaS^z`(E z*{5)~-|)w_Z`WXarh5UJlRJM-g4+MzWex*F2+#o#^FRDY_y^8{Fwp#u=^lvv%1crN ze0|q0h1uu4dJwM?7Kk)Ru#Qv#scfjPIWi3*;(s5@xjIZC*pir;>zZ&E|d7zQ+ zn}P8YR^*LoAG-T~^#4D=|EH;&fkV}F>Q$I|%uD(OOqZ$rfbpHq9#eSpE)!@z#JvtD z9$7q9eOeFWKe+M8WB;kIaQy-;PM%BU#YGud*$Wte$W;^Qo^V)rA-RE-fe*xU1g58{ zzyt+0?+5>%Wm^~+R_lI+@PSsQH9K+qc>Z)N%s$114-Ja)zkh}C7c@9q8tmWt6vjWD z_0U0nswgl#A@;K*rVqdzA_X#jPq%<=!gjQ;E)$iZNdwZko?G{ja3JoVYzY`8${O+Z; ze*OL1dKG|PUgQY$j}kBh_8WA7`IZU{rQD$S#qS=oam^t)=+Ds=MzAwX?% diff --git a/Interface/PVPFrame/PVP-Currency-Alliance.blp b/Interface/PVPFrame/PVP-Currency-Alliance.blp index 25c67e5575164ad83f61288125707ce36c02a085..60000901c3b51826a854d4c490cd17314f240864 100644 GIT binary patch literal 2580 zcmeHIeN0oIt4I}WRN7^Qni5IH@B<`iuVwv zuJaRm2{Fqf48||6-a!TPPjqeT8L_!&9KWmu<4sMSE2^h=9K~iN@!F@n@+qDlC3}yQ zW!WCqq;PRRCUW1&7w#!U^8xPth>kdt8E)@LU_s@PzxfJ?Nz77~Z_1<-7C(=>uey;y z?Jpr;)(dj!{<&Kp?Pg2AxkyyeE4y);D+{9fi|XRHe1TU*w*Irs4lCh zzTe{^waP*eGBCF|rb@F{Af8`5x;??-Pip4zzTm-o?`IamJRX}#-2RTVVvxszg*9X` zO-_Fsajbq#*2w(KI8+~KfbZbsh_+gw<@C&EwgeqLZB0LI>v?iFfS=m;(Qrd}yg%Hr zC`oo6u-kdQx3X6e?cX2u3TNEPQ?dtuk6(%`7oEvFpU&gpz;$H7*t8xcL`~K|m<_!_ z`HlpyK~<`@IyI(WVrES_;A>)it+m|w?7-MV-j^tlvI@>Eb*h%c;xjy7V4xpO7aub5 zmJccECc7o99;PJjI7i7&X9=sSOzp6=S=v?HK;yJ5zT-c~&hj*~UF8Z@# z%_ftU>bDu+3vl`#S|HJgXOUV_aQLiCk)yM}berZ+)*A>jv>%z+qBWjBH*igvmeyLr zm6crYm7I#nbBj&?@9WKBz*)4v#fW8{0LVH2wvb&sO0q`n<75fA+BSbzKMtBe8tK`o275W)B*<{!&xx zyYi`??kd>@q8`|jeQCg@s66y6ZikK^wFPbsrRGQ$;@!pc5_QO&!1kxL${@2JI$1zSF*-`k({ z#q)1~v3<&0nHaR`rPwd;iwYc{hJKJ7>n^6aBv%?0`W#co%eRf%41jYkKYrKGZP!~W zHa;8cE|cQAmFalC{~MNi>PItaf69s&z^NFI!SVeHIzkT`0Q%{T^l$aFz)GWr?w3>o lT%hOkXx83RA)TbThXm5D4|{u6yMCW535%ewx3@Q*?>DOZ^4S0Y literal 2580 zcmeH|Ur19?7{I^fbXRM#i+^fJFvryXFl&WDPwCo2j%pR1O~x8yT8X-lASn0Xa1q)v z|E+p4GEK+{>4Vdk!mz9cE?<<2ZBQaYfmc%(G?usTDtFKzR&PG+z{laoIrsbjovS{1 z=8ymYwoxL140lf4LKF%m9bg7!9%T(hm;sRe4+8i-pwd#@Byob6T*(Y1Gmy-{-!qUJ zcNE8T?x-y=YRltqX_`519sZLqr189YUmV~W;`AkA2Fg1XH|&C*T>yj#K+aro75X1V zC!NS%<@OLmb+Wj6{NIkw4t_L*n6l+#$g;^L$@ZB39s*SUx(B{X3ac5 zW@@!x2YO${_(z@AUegrwM`-Vo-XkBB>|w`_ca99@@os?nh6Yn2`*P;QvuHI_SUDnt zf`V|E*ROURpiQQVt2{ei4}(jo9FOtyA(*>fvCeaot5{l6QqU^L_(i&onJ0dW#AG&* zMD{~Kw+FEWUSj=!g$bb<-}r*wI^wgIN>XzOnPRXQKii^~noMcX9C2+hyDE~oPD{Ps z#Z{VVTshwooS1UTs2U?7A#ltUp}tc5$2OiN3GK)GN9P`?!~T!;Gad4^Dc)QPWZnd- z9~+7eHFgT~>NXh75jyu4H!rdK@%pwJtL~t)4#i%lF(2nG++z8JJl}p_agLimqjd%6 zF*;_;O3})Y#eESdw-yC%+vdx-^ZMqk7SI3sqtTC^(qPCFTs%XBc)&MJW54WiBeRM7 sCGA>TC0B2&3ZMY%zgvFLlEOWHS#lWY_joe1HebT3eE@?Vk0;*0-^sdO;s5{u diff --git a/Interface/PVPFrame/PVP-Currency-Horde.blp b/Interface/PVPFrame/PVP-Currency-Horde.blp index 8d8603f2f43ca3644c3819db9d0c50df1ce730ce..5532ffc697c145732a83a829b2eeb4a6826ac41c 100644 GIT binary patch literal 2580 zcmeHIVQ5=b6h8O8Bz;NSHS5d_sO)8ZT^v-2!&LL5^}TJV*}55VF9{ghG)u=23Ynv9 zb*6&bi-r?|08VZ*yB<69E8*t0Fwky1i*a4XoZH`9=xh4ghnOs!8 zJ-7Fs`?WGk2Xd#JJ+)S{SXrd{7|;|awn+f<9T$D}h={F~wq0eP#?KhH%fZLtCcM1K z{Uh5t=mY3zZ|^Yj)q?-M&-^3z>rncjwq8fI`#KrO;rgPZaTz~-gWY!~lX-z&1Cwmq z$70->*yU)Xr8WG$0h=d{`HjaTfhCH1`SZdnTGz9<9YSq$tPkpb{vnHc1tVd?O|;B@ z^uX+0Hf-Gi%bxcKV-M>3st#490oSxuc@)xT6iy92uOZ%BTiY%Q@m$FxZq6N{XHC=O zgNbk&@oLT9BK;V+SD|`P_oIn$aEWdk6SjYIdLY~7CqydH$AJB+-Xd0=Q|uAByuA%} z=G`wT?(s)Z-%uz-nxE zAP6pi5b_!CBLTh1Z&5-M#?NE?8asdekoNW=y&h6(@fiIa*7vg;#Q3Dbz1S&9^pn*h zFg$F{#_VQIBDDU?4ND`eFaA>})~6gK*^@khn%Pshn?#2!GgT8<-`#)cZ{#=n6~>ob z)0;eKl3Z}!TQ1T?hM9v_zF{)v+#-rw=v8w7EcTR;>$F>~UvyJ4#I`OJ+@%qT3*rWd z<-hS6`TOBm@`V4y{1~2JE#mz=3?6aq+OOG@ie1{#BQG$_lUFJ?g#r(7^tA&a2@;pw z&kPItdH+gZBYqdw|2x7{_4z1|@9hb82KvTYF4g!;2_EY;oH`2H;p5#i7?(I%W!djx z|N8Qf#b4U%;_$iS`&+K$-{=3C-vQbi1naF3#`o~LEW7qkUv9?w$fN%YcD#Q&pJh*Y mw_Z&So+hBi?U_HFn+r literal 2580 zcmeHJUr19?82>hBPNn7z|3o4k=N(ogi3^{K-76AZNc6$eMy>J>MFoaIME2sG6!W2` zmLMU`LJ{XnJ-CMmQXfKbLQ(d|wURRF>0p|mv~~J!wvr36d<=HrNY?fo%YkPOl0q&=AV)sV2oLZsri@e7tob8}kJka$~Hl?1@X9d>^Ur z1&DIaDLeBnf-~{tXAI*#8D`B32vrO6eG3efMX^eMpq8lo?A3AW zv(j^W&a?TCmjRZe(I{J5QPXqq$dV3RQkZdGsM`{eT(WW2nUx%56FW*w3n{f80()ON z8r5~a>gDn{A%6eRpul$Zj8uLZKt4c^I33#h=0X&UlHu1dv*R}}PPNWoyFiT7$3`uf z&uc>pa(5jm8*KqDY$xdtuYPhPzvQfG`)S6%4Jgk7?s0%CC+sxLR=j-0$K`fHbfc~M zAT!A@vE*~3A9gy~CUK8uWc;gKEBH!t=n55`D00ml(a&4u^X z{{Gght*^yGIB=@)QeA<{XL@;gnR|qN5*VcXZaG6yM#h3{+#3m2ekZ*I+EO=P7nl;w ztn3)8a{-*Jwo`4sjbeHf%~;3R%2uE6|6FgWZ^vhi^Qbs8;S=Spp<2|}K+&IYOP;zP z)q@@JM(f4fZ!IsaThB+x-k6`-{5E`_=N{v~h@`$BKGPy7AH>^9XV zn^K!eTntRTDe4HUVFx~hD0Kb!&#)7eF*jamuoLy&ptJ_sOgh9r_3e(|KPRMii0b|- hfMM*nZc}kh68hoN>EUj_-yid*Kmg;A{|}B?_5&m_GhYAz diff --git a/Interface/TARGETINGFRAME/UI-PVP-Alliance.blp b/Interface/TARGETINGFRAME/UI-PVP-Alliance.blp new file mode 100644 index 0000000000000000000000000000000000000000..ee0ff56a583acf2bfbfb6b06ecdfbaf3cbd6ebc5 GIT binary patch literal 6676 zcmeHL4NOy46uz%ecm+F(LxC;ER*MA{1hgz{Q(DM0B{O5Dw`Kg4mY>BxmV&{kh*U~4 zk!T9qxyW?2fIk>@7-_PMtp&}LO&xJox1bCeoy@HTkv4*~Z}&l7g>DI1vhFW^;iP=L z-uuq?opaAShtxMS5-|V(4G+Ww=##X={>Z|RMIeg=;5M=WWTVLZUjiU(76UA_3EBgo zjmiB;INcERT|NbT3iuTGV+H6QfA+vwn4$RPq>anC8~`BHny&&;{eW>xkUxpdcl%uo zk?XStf6%c@h(nmiAm&zHG^+xD+@fGXC>tKbL?bDUAqUbD(D!pQ+qax`?2{3W{-No_nXp5eWX%v>wyIrihEFqsVtZX9Mgm(hlcoV=71Ohxj=!GNAd$hZGjL5YF2*OyN$)28I^qDaVOT zlk59jZ-<^ZQ&yVhaTv&(aGGM0heoxE}ykMhUc{OL@CqQOw`8udJ4VazZV zuEYe+e3q6U6-D_kw6@|BgGxzZfxVT%kK&styy*Uh$STXIio%yIrIFE=VkU)8I7&I` zU1^yVPPIV{TAA9LuF7E}@gzm(c%Q8hnoOs#ibUR^dd+3j4?u}n>}~#ma|~O`4Mpzw zFLTOY_zC@(Ch}Q)ZCe}VuWq!2kt3E!D7@r)HwIBbps>)ol7rRgbrjxf9Zq0I$3MsR z5=frhP9>&2au=P?sr*+t-#y!RTDOkZL-c(>VEOuM6Bt|IkKJ{Z9?@?VHv`k>GT7{8z4ZgniJpWs*1?pB$d4a zcIbKKw|G!d%d+KWgpVnn|9phGS7UJ`?6=g&?U}H8-1KXisC51!y*oER4``$-dmADLQ54}Jt2XQz~IW1 ziV+?+2A%Kih1odhdqTcne#rtL`)|niKdT=)AByREBmrYxlj!)sQ2EsPB@hI)sNaEQel|4kj!Y!o6?Tvq5+ISBhefnC3Y?rr zVX#GfZev>Rcbz6WND2Y5;xpN>uIY6X#F-0E)i$_ZoTJzK0H%jpC12jJ&ZtnqNx6AYp8o~K>EL496L;!pdG<(0Q1w0K|ubR;M7*rq^N5{+kP|64w b)9}XTmX^@@Q~C3yh>e|XX+iVz%zXL{1Ku!G literal 0 HcmV?d00001 diff --git a/Interface/TARGETINGFRAME/UI-PVP-Horde.blp b/Interface/TARGETINGFRAME/UI-PVP-Horde.blp new file mode 100644 index 0000000000000000000000000000000000000000..e229b9d099d0c9cae6928071d14e8f672a2d88ff GIT binary patch literal 6676 zcmeHLeN0nV6hH5kk0%IyepF$Ig0wux{9q(yl1wRnBz8_{CJz{v@rq^Y5|Revl&M&& zU1Y|fIA#=`TE-@rZJ@EH&e>LsTC*&IW5cjSBZy&}lMm7G)w}aBRjf<+%dez2Icd+k zJ?Gr>JHLD0yI~nhB&-_$kVlekc=B!cf8ienV+PxsT%a2EfEo1Xy%}J^&qy z{zP@8pz0ew1bhhi5cq!t{JkD~>C|j%K}3Ll#^N^tc%CmW0Ckz1%%d#WWKiEhXxE{N zdnzihQOAh$MDsAlh%U{}$}pZ^2yRGgChNYR4Tw)&|(c~ z_UPah|7Gi4;HubAR6d~+*RN1i-6j{phu3blSy+B0P5d`uexaP+~L26#C!*sMRj?Yl_8znL<}Ohc(W7r z)BK9NZgIYJQ17f~03;#(M19~Jq>$OQILV=Mz#vsy4Kf=^;XKx-f<5;TEEQ{M$r=g`+Z_QJ=63y6AKQNaBcAVg5F!D z?kcB=;OjK473DnW1nkml&l;C`c&J7Z!LvdNP?__e!YoMiLnNTN_l{&9qM zF1b?4rfW4B)VPz&TDC_zJ?nYidESNgOpL7jkJ|15(zS*35VNzM6;vuCSvA2CwCU(~+=)EQkLSrA(NpZqi?(_Ihp>Wd zIS?NdyPH~q`O9QV`i(KF1c#=t(n0 z!u}v=wCStBaGp!;mV4Ioyz}?=Pfh(iZ>3fD7>^+;va_u3u>6ub8l*!!ANWw6n%Ee$ zqu`p3DaVFS&H*ie9I9OPj6qoFB=gj|;Fu`t;`Kb1Z;~m=j{t%(bf&q%#HtKg=|l?g zspsx;=4u_IMEfBs%RaxjOkN)au-dSkrvgrew2Y{S_xfJ6F7}5AtM1AEpk4bncCnH> z`%{3=S*Ij-DM75S`MQa9m6VuB`#T!RyAH^2&@l>yQrYE}V#gSmrg!Cqr6b{gfkK)q zJi)bMzFKW|1{F|?@4qMfd(rug77z2+jocrEu4bi0dp4Lm9@QWFd6`^ok?R|DGmOS< zTglb9sNfT|WA#oQE5kviK)^95P0}~yu}JUCR4_DhY29-1Jdug@A1(f?HvcJ<>^Z1D z*e34p@+RbeBCUd{>{2tHaCVt{`Ch+fu=d>G+OWQJj%R1P;K=giv@*H)e*Y|+M}EKB z^&SmxRBJ#PF10{poF%cxf=T(+*25+-f?uYELxUXJ&ZE-AR7P_s#fHYG(=BPv-uZjW9g6ZcCh8;> z4epPPadRj;8}pwb3mQerz literal 0 HcmV?d00001 diff --git a/Interface/TARGETINGFRAME/UI-StatusBar.blp b/Interface/TARGETINGFRAME/UI-StatusBar.blp new file mode 100644 index 0000000000000000000000000000000000000000..6556b55c004e82e480340e5702c1679a84c83279 GIT binary patch literal 23060 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 literal 2580 zcmZ?r2{2-0U|?Y4U}sbS(jYvA1&BF-n3I9w3J^a5;x9nV!o|QKLIh?2>Sq8N>Hwq! z&@hlY3PwX30Q=(9o+}|GQ-B zcrpRY$#07!La(m=^WV5m*%Md@9yz;EA~bx3UfR2Dcdups74hu>sSk|`E#H=Vdzqv=oHx<4&T7#O~8HEn(O`Nw|{XlXuc*jW)am4Ow^{qL|O$SUmW?iDb8 z!r2Q!S3}F~-+li75u~EInb+zA@6~Xncb=vOn$Jsr7$Ood4r| zl!<|t_w8Gl`5MKOB=>}e-i7fWz2oqzd%1HFjDP4|me=3vtR@)$Wzr=@v#X(@|3e%2 zUNkVRIQnj(LQqtEJR$o9-(~kbJJtWJ`KbcOR@0?lVdgc=_LGbQdH}|6yz8sjbaJaI zjKAm+ zf4_#hy!$`@Pi~${>SQI3PrX~O0>c*w`u`_o>MKLe{^NX(6ejvYL zZpfl21rR^Nv;*uJ&Ez1E{MF9PD?t8}31P`WAo=j5!R8-Q-4n>*ndA&CauR`!r_lAG zp`Iz*d<}qJOfm%Wfh7nb^Ay9(l0fnO2$;U60s~A;+8}`$m{<;QGBT`Ox@r|Ss8I$4 OjleeEA7IKwHxB@OLsH-X diff --git a/Interface/WorldStateFrame/HordeIcon.blp b/Interface/WorldStateFrame/HordeIcon.blp index 18e88e1f23de6bb8141ab395725cd082b46fd383..5532ffc697c145732a83a829b2eeb4a6826ac41c 100644 GIT binary patch literal 2580 zcmeHIVQ5=b6h8O8Bz;NSHS5d_sO)8ZT^v-2!&LL5^}TJV*}55VF9{ghG)u=23Ynv9 zb*6&bi-r?|08VZ*yB<69E8*t0Fwky1i*a4XoZH`9=xh4ghnOs!8 zJ-7Fs`?WGk2Xd#JJ+)S{SXrd{7|;|awn+f<9T$D}h={F~wq0eP#?KhH%fZLtCcM1K z{Uh5t=mY3zZ|^Yj)q?-M&-^3z>rncjwq8fI`#KrO;rgPZaTz~-gWY!~lX-z&1Cwmq z$70->*yU)Xr8WG$0h=d{`HjaTfhCH1`SZdnTGz9<9YSq$tPkpb{vnHc1tVd?O|;B@ z^uX+0Hf-Gi%bxcKV-M>3st#490oSxuc@)xT6iy92uOZ%BTiY%Q@m$FxZq6N{XHC=O zgNbk&@oLT9BK;V+SD|`P_oIn$aEWdk6SjYIdLY~7CqydH$AJB+-Xd0=Q|uAByuA%} z=G`wT?(s)Z-%uz-nxE zAP6pi5b_!CBLTh1Z&5-M#?NE?8asdekoNW=y&h6(@fiIa*7vg;#Q3Dbz1S&9^pn*h zFg$F{#_VQIBDDU?4ND`eFaA>})~6gK*^@khn%Pshn?#2!GgT8<-`#)cZ{#=n6~>ob z)0;eKl3Z}!TQ1T?hM9v_zF{)v+#-rw=v8w7EcTR;>$F>~UvyJ4#I`OJ+@%qT3*rWd z<-hS6`TOBm@`V4y{1~2JE#mz=3?6aq+OOG@ie1{#BQG$_lUFJ?g#r(7^tA&a2@;pw z&kPItdH+gZBYqdw|2x7{_4z1|@9hb82KvTYF4g!;2_EY;oH`2H;p5#i7?(I%W!djx z|N8Qf#b4U%;_$iS`&+K$-{=3C-vQbi1naF3#`o~LEW7qkUv9?w$fN%YcD#Q&pJh*Y mw_Z&So+hBi?U_HFn+r literal 2580 zcmeHHZAepL6h3pVZsKq^v@8kl)k*!4B$*@>+glP13Rd{4#I${oWFQ*-=$ANWA4`;+ zxtg%hh_DusLF`8nTK>@xGHvv+E`4Ah6kM`gC>U?&j*J+@T)+CUmwR}5IOn|Qoaa98 zyJL@KiwXeJxRojacg1?s(KxhK08h|n(B{z6GXS!eVSxF7hnjHH#TmlXN->aPAjQDn z8PLSJ5@5bQ)EEgh7A|F#dKA3j*%F2X`N{fuxvcZ($IFX?U*sr_Y8hX?PkBQ{kHGn~ zYGAxY?NV?zaCOZtD3C(hh%{#;H2{=Wk5rhI{XTXj;+wAy6ZVr zXZN*wyC1k3>(j6#FZAcPele16LFckH5AgElz(aGiLUUh0{tnh9s?XnD(Nq{Z6mcI0 z$O%)*3Xr+!-Vfv|aBzoGULKsCXnlN|VErnqg9%+8s$i5lHA);$&a5$v5^Jf`; zCcl{LY;PmHe1d;5So>VW@>N(c{=8%{>fM=#62j>L>7W(z!l-fV^F1;oaL$GnoNr+| zuwIN1D({BK|KuSDgC4x#8|xbb+Y~cZ}C~%LfVrGf2bFFlhRr+yH(~MJ#0ms mkyx+$;fzoz6m0)lQ6V%V5@{Yv4k3Rv@i5Fx5 -- 1.7.9.5