Browse Source

Regular auto-commit at 21:36:59 on 15/11/2022

master
Quildra 3 years ago
parent
commit
10d37df899
  1. 64
      Interface/AddOns/ElvUI/Core/Defaults/Profile.lua
  2. 12
      Interface/AddOns/ElvUI/Core/Modules/Bags/Bags.lua
  3. 4
      Interface/AddOns/ElvUI/Core/Modules/Bags/Sort.lua
  4. 18
      Interface/AddOns/ElvUI/Core/Modules/Blizzard/Blizzard.lua
  5. 18
      Interface/AddOns/ElvUI/Core/Modules/DataBars/Experience.lua
  6. 4
      Interface/AddOns/ElvUI/Core/Modules/DataBars/Reputation.lua
  7. 8
      Interface/AddOns/ElvUI/Core/Modules/DataTexts/Bags.lua
  8. 6
      Interface/AddOns/ElvUI/Core/Modules/DataTexts/Friends.lua
  9. 15
      Interface/AddOns/ElvUI/Core/Modules/Maps/Minimap.lua
  10. 3
      Interface/AddOns/ElvUI/Core/Modules/Nameplates/Elements/ClassPower.lua
  11. 179
      Interface/AddOns/ElvUI/Core/Modules/Tooltip/Tooltip.lua
  12. 2
      Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/AuraBars.lua
  13. 90
      Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/CastBar.lua
  14. 2
      Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/ClassBars.lua
  15. 3
      Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/EnergyManaRegen.lua
  16. 162
      Interface/AddOns/ElvUI/Core/Modules/UnitFrames/UnitFrames.lua
  17. 2
      Interface/AddOns/ElvUI/ElvUI_Classic.toc
  18. 6
      Interface/AddOns/ElvUI/ElvUI_Mainline.toc
  19. 2
      Interface/AddOns/ElvUI/ElvUI_Wrath.toc
  20. 18
      Interface/AddOns/ElvUI/Mainline/Modules/DataTexts/Mastery.lua
  21. 23
      Interface/AddOns/ElvUI/Mainline/Modules/Skins/Bags.lua
  22. 16
      Interface/AddOns/ElvUI/Mainline/Modules/Skins/Communities.lua
  23. 4
      Interface/AddOns/ElvUI/Mainline/Modules/Skins/Loot.lua
  24. 23
      Interface/AddOns/ElvUI_Libraries/Core/CallbackHandler-1.0/LICENSE.txt
  25. 21
      Interface/AddOns/ElvUI_Libraries/Core/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
  26. 59
      Interface/AddOns/ElvUI_Libraries/Core/oUF/elements/castbar.lua
  27. 2
      Interface/AddOns/ElvUI_Libraries/Core/oUF_Plugins/oUF_AuraBars.lua
  28. 1
      Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Classic.toc
  29. 3
      Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Mainline.toc
  30. 1
      Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Wrath.toc
  31. 4
      Interface/AddOns/ElvUI_Options/Core/Maps.lua
  32. 12
      Interface/AddOns/ElvUI_Options/Core/UnitFrames.lua
  33. 2
      Interface/AddOns/ElvUI_Options/ElvUI_Options_Mainline.toc
  34. 1
      Interface/AddOns/ElvUI_Options/Locales/deDE.lua
  35. 1
      Interface/AddOns/ElvUI_Options/Locales/enUS.lua
  36. 29
      Interface/AddOns/ElvUI_Options/Locales/esMX.lua
  37. 1
      Interface/AddOns/ElvUI_Options/Locales/frFR.lua
  38. 1
      Interface/AddOns/ElvUI_Options/Locales/itIT.lua
  39. 1
      Interface/AddOns/ElvUI_Options/Locales/koKR.lua
  40. 1
      Interface/AddOns/ElvUI_Options/Locales/ptBR.lua
  41. 1
      Interface/AddOns/ElvUI_Options/Locales/ruRU.lua
  42. 1
      Interface/AddOns/ElvUI_Options/Locales/trTR.lua
  43. 1
      Interface/AddOns/ElvUI_Options/Locales/zhCN.lua
  44. 1
      Interface/AddOns/ElvUI_Options/Locales/zhTW.lua
  45. 1
      Interface/AddOns/Rematch/Cards/PetCard.lua
  46. 19
      Interface/AddOns/Rematch/Menus/PetMenus.lua
  47. 3
      Interface/AddOns/Rematch/Process/PetInfo.lua
  48. 4
      Interface/AddOns/Rematch/Rematch.toc
  49. 33
      Interface/AddOns/Rematch/Widgets/Toolbar.lua
  50. 26
      Interface/AddOns/Rematch/Widgets/Toolbar.xml
  51. 6
      Interface/AddOns/Rematch/changelog.txt
  52. 12
      Interface/AddOns/WIM/CHANGELOG.md
  53. 5
      Interface/AddOns/WIM/Modules/Emoticons.lua
  54. 57
      Interface/AddOns/WIM/Modules/URLHandler.lua
  55. 2
      Interface/AddOns/WIM/WIM.lua
  56. 4
      Interface/AddOns/WIM/WIM.toc
  57. 2
      Interface/AddOns/WIM/WIM_TBC.toc
  58. 2
      Interface/AddOns/WIM/WIM_Vanilla.toc
  59. 2
      Interface/AddOns/WIM/WIM_Wrath.toc
  60. 40
      Interface/AddOns/WeakAuras/CHANGELOG.md
  61. 32
      Interface/AddOns/WeakAuras/Conditions.lua
  62. 6
      Interface/AddOns/WeakAuras/Init.lua
  63. 339
      Interface/AddOns/WeakAuras/Libs/LibCustomGlow-1.0/LICENSE.md
  64. 2
      Interface/AddOns/WeakAuras/Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.toc
  65. 54
      Interface/AddOns/WeakAuras/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua
  66. 17
      Interface/AddOns/WeakAuras/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
  67. 2
      Interface/AddOns/WeakAuras/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.toc
  68. 5
      Interface/AddOns/WeakAuras/Locales/koKR.lua
  69. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxleft.tga
  70. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxlefth.tga
  71. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxleftp.tga
  72. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxoverlay.tga
  73. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxright.tga
  74. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxrighth.tga
  75. BIN
      Interface/AddOns/WeakAuras/Media/Textures/spinboxrightp.tga
  76. 49
      Interface/AddOns/WeakAuras/Prototypes.lua
  77. 2
      Interface/AddOns/WeakAuras/RegionTypes/Model.lua
  78. 6
      Interface/AddOns/WeakAuras/RegionTypes/RegionPrototype.lua
  79. 4
      Interface/AddOns/WeakAuras/RegionTypes/Texture.lua
  80. 233
      Interface/AddOns/WeakAuras/Types.lua
  81. 2
      Interface/AddOns/WeakAuras/Types_Retail.lua
  82. 2
      Interface/AddOns/WeakAuras/Types_Vanilla.lua
  83. 2
      Interface/AddOns/WeakAuras/Types_Wrath.lua
  84. 34
      Interface/AddOns/WeakAuras/WeakAuras.lua
  85. 4
      Interface/AddOns/WeakAuras/WeakAuras.toc
  86. 2
      Interface/AddOns/WeakAuras/WeakAuras_TBC.toc
  87. 2
      Interface/AddOns/WeakAuras/WeakAuras_Vanilla.toc
  88. 2
      Interface/AddOns/WeakAuras/WeakAuras_Wrath.toc
  89. 4
      Interface/AddOns/WeakAurasArchive/WeakAurasArchive.toc
  90. 2
      Interface/AddOns/WeakAurasArchive/WeakAurasArchive_TBC.toc
  91. 2
      Interface/AddOns/WeakAurasArchive/WeakAurasArchive_Vanilla.toc
  92. 2
      Interface/AddOns/WeakAurasArchive/WeakAurasArchive_Wrath.toc
  93. 4
      Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths.toc
  94. 2
      Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_TBC.toc
  95. 2
      Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_Vanilla.toc
  96. 2
      Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_Wrath.toc
  97. 210
      Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasScrollArea.lua
  98. 359
      Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasSpinBox.lua
  99. 75
      Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasTextureButton.lua
  100. 15
      Interface/AddOns/WeakAurasOptions/ActionOptions.lua

64
Interface/AddOns/ElvUI/Core/Defaults/Profile.lua

@ -714,6 +714,12 @@ P.nameplates = {
[ 9] = {r = 0.60, g = 0.60, b = 0.60}, -- DEAD
[13] = {r = 0.10, g = 0.58, b = 0.28}, -- BATTLEGROUND_FRIENDLY_PVP
},
empoweredCast = {
{r = 1.00, g = 0.26, b = 0.20, a = 0.3}, -- red
{r = 1.00, g = 0.80, b = 0.26, a = 0.3}, -- orange
{r = 1.00, g = 1.00, b = 0.26, a = 0.3}, -- yellow
{r = 0.66, g = 1.00, b = 0.40, a = 0.3}, -- green
},
classResources = {
chargedComboPoint = { r = 0.16, g = 0.64, b = 1.0 },
comboPoints = {
@ -733,8 +739,16 @@ P.nameplates = {
{r = 0.25, g = 1, b = 0.25},
{r = 0.8, g = 0.4, b = 1}
},
PALADIN = { r = 0.89, g = 0.88, b = 0.06},
MAGE = { r = 0, g = 0.62, b = 1},
PALADIN = {r = 0.89, g = 0.88, b = 0.06},
MAGE = {r = 0, g = 0.62, b = 1.00},
EVOKER = {
{r = 0.10, g = 0.92, b = 1.00},
{r = 0.17, g = 0.94, b = 0.84},
{r = 0.24, g = 0.96, b = 0.69},
{r = 0.31, g = 0.98, b = 0.53},
{r = 0.34, g = 0.99, b = 0.45},
{r = 0.38, g = 1.00, b = 0.38},
},
MONK = {
{r = 0.71, g = 0.76, b = 0.32},
{r = 0.58, g = 0.73, b = 0.36},
@ -743,6 +757,12 @@ P.nameplates = {
{r = 0.27, g = 0.66, b = 0.46},
{r = 0.14, g = 0.63, b = 0.50}
},
SHAMAN = {
{r = .23, g = .45, b = .13}, -- earth
{r = .58, g = .23, b = .10}, -- fire
{r = .19, g = .48, b = .60}, -- water
{r = .42, g = .18, b = .74}, -- air
},
WARLOCK = {r = 0.58, g = 0.51, b = 0.79}
},
},
@ -1694,43 +1714,6 @@ P.unitframe = {
additional = {r = 1, g = 1, b = 1, a = 1},
color = {r = 1, g = 1, b = 1, a = 1},
},
classResources = {
chargedComboPoint = { r = 0.16, g = 0.64, b = 1.0 },
comboPoints = {
{r = 0.75, g = 0.31, b = 0.31},
{r = 0.78, g = 0.56, b = 0.31},
{r = 0.81, g = 0.81, b = 0.31},
{r = 0.56, g = 0.78, b = 0.31},
{r = 0.43, g = 0.76, b = 0.31},
{r = 0.31, g = 0.75, b = 0.31},
{r = 0.36, g = 0.81, b = 0.54},
},
DEATHKNIGHT = {
[-1] = {r = 0.5, g = 0.5, b = 0.5},
[0] = {r = 0.8, g = 0.1, b = 0.28},
{r = 1, g = 0.25, b = 0.25},
{r = 0.25, g = 1, b = 1},
{r = 0.25, g = 1, b = 0.25},
{r = 0.8, g = 0.4, b = 1}
},
PALADIN = {r = 0.89, g = 0.88, b = 0.06},
MAGE = {r = 0, g = 0.62, b = 1.00},
MONK = {
{r = 0.71, g = 0.76, b = 0.32},
{r = 0.58, g = 0.73, b = 0.36},
{r = 0.49, g = 0.71, b = 0.39},
{r = 0.39, g = 0.69, b = 0.42},
{r = 0.27, g = 0.66, b = 0.46},
{r = 0.14, g = 0.63, b = 0.50}
},
SHAMAN = {
{r = .23, g = .45, b = .13}, -- earth
{r = .58, g = .23, b = .10}, -- fire
{r = .19, g = .48, b = .60}, -- water
{r = .42, g = .18, b = .74}, -- air
},
WARLOCK = {r = 0.58, g = 0.51, b = 0.79}
},
frameGlow = {
mainGlow = {
enable = false,
@ -2066,6 +2049,9 @@ P.unitframe = {
},
}
P.unitframe.colors.classResources = CopyTable(P.nameplates.colors.classResources)
P.unitframe.colors.empoweredCast = CopyTable(P.nameplates.colors.empoweredCast)
P.unitframe.units.player.aurabar.enemyAuraType = 'HARMFUL'
P.unitframe.units.player.aurabar.friendlyAuraType = 'HELPFUL'
P.unitframe.units.player.aurabar.maxDuration = 120

12
Interface/AddOns/ElvUI/Core/Modules/Bags/Bags.lua

@ -14,7 +14,6 @@ local BreakUpLargeNumbers = BreakUpLargeNumbers
local CreateFrame = CreateFrame
local CursorHasItem = CursorHasItem
local DepositReagentBank = DepositReagentBank
local SetItemSearch = SetItemSearch
local GameTooltip = GameTooltip
local GameTooltip_Hide = GameTooltip_Hide
local GetBindingKey = GetBindingKey
@ -50,7 +49,6 @@ local SplitContainerItem = SplitContainerItem
local StaticPopup_Show = StaticPopup_Show
local ToggleFrame = ToggleFrame
local UnitAffectingCombat = UnitAffectingCombat
local UseContainerItem = UseContainerItem
local IsBagOpen, IsOptionFrameOpen = IsBagOpen, IsOptionFrameOpen
local IsShiftKeyDown, IsControlKeyDown = IsShiftKeyDown, IsControlKeyDown
@ -67,6 +65,7 @@ local C_NewItems_IsNewItem = C_NewItems.IsNewItem
local C_NewItems_RemoveNewItem = C_NewItems.RemoveNewItem
local C_Item_IsBound = C_Item.IsBound
local SetItemSearch = SetItemSearch or (C_Container and C_Container.SetItemSearch)
local GetBagSlotFlag = GetBagSlotFlag or (C_Container and C_Container.GetBagSlotFlag)
local SetBagSlotFlag = SetBagSlotFlag or (C_Container and C_Container.SetBagSlotFlag)
local GetBankBagSlotFlag = GetBankBagSlotFlag or (C_Container and C_Container.GetBankBagSlotFlag)
@ -79,6 +78,7 @@ local GetContainerNumFreeSlots = GetContainerNumFreeSlots or (C_Container and C_
local GetContainerNumSlots = GetContainerNumSlots or (C_Container and C_Container.GetContainerNumSlots)
local SetBackpackAutosortDisabled = SetBackpackAutosortDisabled or (C_Container and C_Container.SetBackpackAutosortDisabled)
local SetInsertItemsLeftToRight = SetInsertItemsLeftToRight or (C_Container and C_Container.SetInsertItemsLeftToRight)
local UseContainerItem = UseContainerItem or (C_Container and C_Container.UseContainerItem)
local CONTAINER_OFFSET_X, CONTAINER_OFFSET_Y = CONTAINER_OFFSET_X, CONTAINER_OFFSET_Y
local IG_BACKPACK_CLOSE = SOUNDKIT.IG_BACKPACK_CLOSE
@ -143,7 +143,7 @@ do
info.iconFileID, info.stackCount, info.isLocked, info.quality, info.isReadable, info.hasLoot, info.hyperlink, info.isFiltered, info.hasNoValue, info.itemID, info.isBound = GetContainerItemInfo(containerIndex, slotIndex)
return info
else
return GetContainerItemInfo(containerIndex, slotIndex)
return GetContainerItemInfo(containerIndex, slotIndex) or {}
end
end
@ -581,7 +581,7 @@ function B:UpdateSlot(frame, bagID, slotID)
if not slot then return end
local keyring = not E.Retail and (bagID == KEYRING_CONTAINER)
local info = B:GetContainerItemInfo(bagID, slotID) or {}
local info = B:GetContainerItemInfo(bagID, slotID)
slot.name, slot.spellID, slot.itemID, slot.rarity, slot.locked, slot.readable, slot.itemLink, slot.isBound = nil, nil, info.itemID, info.quality, info.isLocked, info.isReadable, info.hyperlink, info.isBound
slot.isJunk = (slot.rarity and slot.rarity == ITEMQUALITY_POOR) and not info.hasNoValue
@ -702,7 +702,7 @@ function B:Slot_OnEvent(event)
elseif event == 'INVENTORY_SEARCH_UPDATE' then
if self.BagID and self.SlotID then
local info = B:GetContainerItemInfo(self.BagID, self.SlotID)
self.searchOverlay:SetShown(info and info.isFiltered)
self.searchOverlay:SetShown(info.isFiltered)
end
end
end
@ -1337,7 +1337,7 @@ function B:GetGrays(vendor)
for bagID = 0, 4 do
for slotID = 1, B:GetContainerNumSlots(bagID) do
local info = B:GetContainerItemInfo(bagID, slotID)
local itemLink = info and info.hyperlink
local itemLink = info.hyperlink
if itemLink and not info.hasNoValue and not B.ExcludeGrays[info.itemID] then
local _, _, rarity, _, _, _, _, _, _, _, itemPrice, classID, _, bindType = GetItemInfo(itemLink)

4
Interface/AddOns/ElvUI/Core/Modules/Bags/Sort.lua

@ -421,9 +421,7 @@ function B:GetItemInfo(bag, slot)
return GetGuildBankItemInfo(bag - 50, slot)
else
local info = B:GetContainerItemInfo(bag, slot)
if info then
return info.iconFileID, info.stackCount, info.isLocked
end
return info.iconFileID, info.stackCount, info.isLocked
end
end

18
Interface/AddOns/ElvUI/Core/Modules/Blizzard/Blizzard.lua

@ -67,10 +67,6 @@ function B:Initialize()
B:HandleWidgets()
B:PositionCaptureBar()
if not E.Classic then
B:PositionVehicleFrame()
end
if E.Retail then
B:DisableHelpTip()
B:DisableNPE()
@ -86,13 +82,17 @@ function B:Initialize()
B:PositionAltPowerBar()
B:SkinAltPowerBar()
end
elseif E.Classic and E.db.general.objectiveTracker then
B:QuestWatch_MoveFrames()
hooksecurefunc('QuestWatch_Update', B.QuestWatch_AddQuestClick)
end
if not (E:IsAddOnEnabled('DugisGuideViewerZ') or E:IsAddOnEnabled('!KalielsTracker')) then
B:MoveObjectiveFrame()
if not E.Classic then
B:PositionVehicleFrame()
if not (E:IsAddOnEnabled('DugisGuideViewerZ') or E:IsAddOnEnabled('!KalielsTracker')) then
B:MoveObjectiveFrame()
end
elseif E.db.general.objectiveTracker then -- classic check
B:QuestWatch_MoveFrames()
hooksecurefunc('QuestWatch_Update', B.QuestWatch_AddQuestClick)
end
-- Battle.Net Frame

18
Interface/AddOns/ElvUI/Core/Modules/DataBars/Experience.lua

@ -2,8 +2,6 @@ local E, L, V, P, G = unpack(ElvUI)
local DB = E:GetModule('DataBars')
local LSM = E.Libs.LSM
local error = error
local type, pairs = type, pairs
local min, format = min, format
local CreateFrame = CreateFrame
local GetXPExhaustion = GetXPExhaustion
@ -158,12 +156,6 @@ function DB:ExperienceBar_QuestXP()
else
bar.Quest:Hide()
end
if DB.CustomQuestXPWatchers then
for _, func in pairs(DB.CustomQuestXPWatchers) do
func(QuestLogXP)
end
end
end
function DB:ExperienceBar_OnEnter()
@ -271,13 +263,3 @@ function DB:ExperienceBar()
DB:RegisterEvent('ENABLE_XP_GAIN', 'ExperienceBar_Toggle')
DB:ExperienceBar_Toggle()
end
function DB:RegisterCustomQuestXPWatcher(name, func)
if not name or not func or type(name) ~= "string" or type(func) ~= "function" then
error("Usage: DB:RegisterCustomQuestXPWatcher(name [string], func [function])")
return
end
DB.CustomQuestXPWatchers = DB.CustomQuestXPWatchers or {}
DB.CustomQuestXPWatchers[name] = func
end

4
Interface/AddOns/ElvUI/Core/Modules/DataBars/Reputation.lua

@ -74,9 +74,9 @@ function DB:ReputationBar_Update()
local customColors = DB.db.colors.useCustomFactionColors
local customReaction = reaction == 9 or reaction == 10 -- 9 is paragon, 10 is renown
local color = (customColors or customReaction) and DB.db.colors.factionColors[reaction] or _G.FACTION_BAR_COLORS[reaction]
local alpha = not customColors and DB.db.colors.reputationAlpha
local alpha = (customColors and color.a) or DB.db.colors.reputationAlpha
bar:SetStatusBarColor(color.r, color.g, color.b, alpha or color.a or 1)
bar:SetStatusBarColor(color.r or 1, color.g or 1, color.b or 1, alpha or 1)
bar:SetMinMaxValues(minValue, maxValue)
bar:SetValue(curValue)

8
Interface/AddOns/ElvUI/Core/Modules/DataTexts/Bags.lua

@ -3,13 +3,15 @@ local DT = E:GetModule('DataTexts')
local format = format
local strjoin = strjoin
local GetBagName = GetBagName
local ToggleAllBags = ToggleAllBags
local GetContainerNumFreeSlots = GetContainerNumFreeSlots
local GetContainerNumSlots = GetContainerNumSlots
local GetInventoryItemQuality = GetInventoryItemQuality
local GetInventoryItemTexture = GetInventoryItemTexture
local GetItemQualityColor = GetItemQualityColor
local GetBagName = GetBagName or (C_Container and C_Container.GetBagName)
local GetContainerNumFreeSlots = GetContainerNumFreeSlots or (C_Container and C_Container.GetContainerNumFreeSlots)
local GetContainerNumSlots = GetContainerNumSlots or (C_Container and C_Container.GetContainerNumSlots)
local MAX_WATCHED_TOKENS = MAX_WATCHED_TOKENS or 3
local NUM_BAG_SLOTS = NUM_BAG_SLOTS
local CURRENCY = CURRENCY

6
Interface/AddOns/ElvUI/Core/Modules/DataTexts/Friends.lua

@ -144,9 +144,9 @@ local clientList = {
RTRO = { index = 11, tag = 'AC', name = 'Arcade Collection'},
WLBY = { index = 12, tag = 'CB4', name = 'Crash Bandicoot 4'},
VIPR = { index = 13, tag = 'BO4', name = 'COD: Black Ops 4'},
ODIN = { index = 14, tag = 'MW', name = 'COD: Modern Warfare'},
LAZR = { index = 15, tag = 'MW2', name = 'COD: Modern Warfare 2'},
AUKS = { index = 16, tag = 'MWII', name = 'COD: Modern Warfare II'},
ODIN = { index = 14, tag = 'WZ', name = 'COD: Warzone'},
AUKS = { index = 15, tag = 'WZ2', name = 'COD: Warzone 2'},
LAZR = { index = 16, tag = 'MW2', name = 'COD: Modern Warfare 2'},
ZEUS = { index = 17, tag = 'CW', name = 'COD: Cold War'},
FORE = { index = 18, tag = 'VG', name = 'COD: Vanguard'},
GRY = { index = 19, tag = 'AR', name = 'Warcraft Arclight Rumble'},

15
Interface/AddOns/ElvUI/Core/Modules/Maps/Minimap.lua

@ -343,6 +343,7 @@ end
function M:UpdateSettings()
if not M.Initialized then return end
local noCluster = not E.Retail or E.db.general.minimap.clusterDisable
E.MinimapSize = E.db.general.minimap.size or Minimap:GetWidth()
local panel, holder = _G.MinimapPanel, M.holder
@ -361,7 +362,7 @@ function M:UpdateSettings()
MinimapCluster:SetScale(mmScale)
MinimapCluster:ClearAllPoints()
if E.db.general.minimap.clusterDisable then
if noCluster then
MinimapCluster:Point('TOPRIGHT', _G.UIParent)
else
MinimapCluster:Point('TOPRIGHT', M.ClusterHolder, 0, offset)
@ -374,7 +375,7 @@ function M:UpdateSettings()
M.ClusterBackdrop:SetSize(width, height)
M.ClusterHolder:SetSize(width, height)
M.ClusterBackdrop:SetShown(E.db.general.minimap.clusterBackdrop and not E.db.general.minimap.clusterDisable)
M.ClusterBackdrop:SetShown(E.db.general.minimap.clusterBackdrop and not noCluster)
else
Minimap:SetScale(mmScale)
end
@ -389,7 +390,7 @@ function M:UpdateSettings()
if Minimap.location then
Minimap.location:Width(E.MinimapSize)
Minimap.location:FontTemplate(locationFont, locaitonSize, locationOutline)
Minimap.location:SetShown(E.db.general.minimap.locationText == 'SHOW' and E.db.general.minimap.clusterDisable)
Minimap.location:SetShown(E.db.general.minimap.locationText == 'SHOW' and noCluster)
end
_G.MiniMapMailIcon:SetTexture(E.Media.MailIcons[E.db.general.minimap.icons.mail.texture] or E.Media.MailIcons.Mail3)
@ -399,7 +400,7 @@ function M:UpdateSettings()
_G.MinimapZoneText:FontTemplate(locationFont, locaitonSize, locationOutline)
_G.TimeManagerClockTicker:FontTemplate(LSM:Fetch('font', E.db.general.minimap.timeFont), E.db.general.minimap.timeFontSize, E.db.general.minimap.timeFontOutline)
if E.db.general.minimap.clusterDisable then
if noCluster then
MinimapCluster.ZoneTextButton:Kill()
_G.TimeManagerClockButton:Kill()
else
@ -420,7 +421,7 @@ function M:UpdateSettings()
local instance = difficulty and difficulty.Instance or _G.MiniMapInstanceDifficulty
local guild = difficulty and difficulty.Guild or _G.GuildInstanceDifficulty
local challenge = difficulty and difficulty.ChallengeMode or _G.MiniMapChallengeMode
if not E.db.general.minimap.clusterDisable then
if not noCluster then
if M.ClusterHolder then
E:EnableMover(M.ClusterHolder.mover.name)
end
@ -655,8 +656,8 @@ function M:Initialize()
M.ClusterBackdrop = clusterBackdrop
end
Minimap:HookScript('OnEnter', function(mm) if E.db.general.minimap.locationText == 'MOUSEOVER' and E.db.general.minimap.clusterDisable then mm.location:Show() end end)
Minimap:HookScript('OnLeave', function(mm) if E.db.general.minimap.locationText == 'MOUSEOVER' and E.db.general.minimap.clusterDisable then mm.location:Hide() end end)
Minimap:HookScript('OnEnter', function(mm) if E.db.general.minimap.locationText == 'MOUSEOVER' and (not E.Retail or E.db.general.minimap.clusterDisable) then mm.location:Show() end end)
Minimap:HookScript('OnLeave', function(mm) if E.db.general.minimap.locationText == 'MOUSEOVER' and (not E.Retail or E.db.general.minimap.clusterDisable) then mm.location:Hide() end end)
Minimap.location = Minimap:CreateFontString(nil, 'OVERLAY')
Minimap.location:Point('TOP', Minimap, 'TOP', 0, -2)

3
Interface/AddOns/ElvUI/Core/Modules/Nameplates/Elements/ClassPower.lua

@ -17,6 +17,7 @@ local MAX_POINTS = { -- match to UF.classMaxResourceBar
MONK = max(6, MAX_COMBO_POINTS),
MAGE = max(4, MAX_COMBO_POINTS),
ROGUE = max(7, MAX_COMBO_POINTS),
EVOKER = max(6, MAX_COMBO_POINTS),
DRUID = max(5, MAX_COMBO_POINTS)
}
@ -41,7 +42,7 @@ function NP:ClassPower_UpdateColor(powerType, rune)
local color = colors.DEATHKNIGHT[rune.runeType or 0]
NP:ClassPower_SetBarColor(rune, color.r, color.g, color.b)
else
local classColor = not classPower and ((isRunes and colors.DEATHKNIGHT) or (powerType == 'COMBO_POINTS' and colors.comboPoints) or (powerType == 'CHI' and colors.MONK))
local classColor = not classPower and ((isRunes and colors.DEATHKNIGHT) or (powerType == 'COMBO_POINTS' and colors.comboPoints) or (powerType == 'ESSENCE' and colors.EVOKER) or (powerType == 'CHI' and colors.MONK))
for i, bar in ipairs(self) do
local color = classPower or (isRunes and classColor[bar.runeType or 0]) or (classColor and classColor[i]) or colors[E.myclass] or fallback
NP:ClassPower_SetBarColor(bar, color.r, color.g, color.b)

179
Interface/AddOns/ElvUI/Core/Modules/Tooltip/Tooltip.lua

@ -71,6 +71,9 @@ local UnitReaction = UnitReaction
local UnitRealmRelationship = UnitRealmRelationship
local UnitSex = UnitSex
local TooltipDataType = Enum.TooltipDataType
local AddTooltipPostCall = TooltipDataProcessor and TooltipDataProcessor.AddTooltipPostCall
local GameTooltip, GameTooltipStatusBar = GameTooltip, GameTooltipStatusBar
local C_QuestLog_GetQuestIDForLogIndex = C_QuestLog.GetQuestIDForLogIndex
local C_ChallengeMode_GetDungeonScoreRarityColor = C_ChallengeMode and C_ChallengeMode.GetDungeonScoreRarityColor
@ -123,14 +126,20 @@ function TT:GameTooltip_SetDefaultAnchor(tt, parent)
statusBar:ClearAllPoints()
statusBar:Point('TOPLEFT', tt, 'BOTTOMLEFT', E.Border, -spacing)
statusBar:Point('TOPRIGHT', tt, 'BOTTOMRIGHT', -E.Border, -spacing)
statusBar.text:Point('CENTER', statusBar, 0, 0)
statusBar.anchoredToTop = nil
if statusBar.text then
statusBar.text:Point('CENTER', statusBar, 0, 0)
end
elseif position == 'TOP' and not statusBar.anchoredToTop then
statusBar:ClearAllPoints()
statusBar:Point('BOTTOMLEFT', tt, 'TOPLEFT', E.Border, spacing)
statusBar:Point('BOTTOMRIGHT', tt, 'TOPRIGHT', -E.Border, spacing)
statusBar.text:Point('CENTER', statusBar, 0, 0)
statusBar.anchoredToTop = true
if statusBar.text then
statusBar.text:Point('CENTER', statusBar, 0, 0)
end
end
end
@ -178,9 +187,11 @@ function TT:RemoveTrashLines(tt)
for i = 3, tt:NumLines() do
local tiptext = _G['GameTooltipTextLeft'..i]
local linetext = tiptext:GetText()
local linetext = tiptext and tiptext:GetText()
if linetext == _G.PVP or linetext == _G.FACTION_ALLIANCE or linetext == _G.FACTION_HORDE then
if not linetext then
break
elseif linetext == _G.PVP or linetext == _G.FACTION_ALLIANCE or linetext == _G.FACTION_HORDE then
tiptext:SetText('')
tiptext:Hide()
end
@ -523,13 +534,13 @@ function TT:AddMythicInfo(tt, unit)
end
end
function TT:GameTooltip_OnTooltipSetUnit(tt)
if tt:IsForbidden() or not TT.db.visibility then return end
function TT:GameTooltip_OnTooltipSetUnit(data)
if self ~= GameTooltip or self:IsForbidden() or not TT.db.visibility then return end
local _, unit = tt:GetUnit()
local _, unit = self:GetUnit()
local isPlayerUnit = UnitIsPlayer(unit)
if tt:GetOwner() ~= _G.UIParent and not TT:IsModKeyDown(TT.db.visibility.unitFrames) then
tt:Hide()
if self:GetOwner() ~= _G.UIParent and not TT:IsModKeyDown(TT.db.visibility.unitFrames) then
self:Hide()
return
end
@ -542,53 +553,56 @@ function TT:GameTooltip_OnTooltipSetUnit(tt)
end
end
TT:RemoveTrashLines(tt) --keep an eye on this may be buggy
TT:RemoveTrashLines(self) --keep an eye on this may be buggy
local isShiftKeyDown = IsShiftKeyDown()
local isControlKeyDown = IsControlKeyDown()
local color = TT:SetUnitText(tt, unit, isPlayerUnit)
local color = TT:SetUnitText(self, unit, isPlayerUnit)
if TT.db.targetInfo and not isShiftKeyDown and not isControlKeyDown then
TT:AddTargetInfo(tt, unit)
TT:AddTargetInfo(self, unit)
end
if E.Retail then
if TT.db.role then
TT:AddRoleInfo(tt, unit)
TT:AddRoleInfo(self, unit)
end
if not InCombatLockdown() then
if not isShiftKeyDown and (isPlayerUnit and unit ~= 'player') and TT.db.showMount and E.Retail then
TT:AddMountInfo(tt, unit)
TT:AddMountInfo(self, unit)
end
if TT.db.mythicDataEnable then
TT:AddMythicInfo(tt, unit)
TT:AddMythicInfo(self, unit)
end
if isShiftKeyDown and color and TT.db.inspectDataEnable then
TT:AddInspectInfo(tt, unit, 0, color.r, color.g, color.b)
TT:AddInspectInfo(self, unit, 0, color.r, color.g, color.b)
end
end
end
if unit and not isPlayerUnit and TT:IsModKeyDown() and not (E.Retail and C_PetBattles_IsInBattle()) then
local guid = UnitGUID(unit) or ''
local guid = (data and data.guid) or UnitGUID(unit) or ''
local id = tonumber(strmatch(guid, '%-(%d-)%-%x-$'), 10)
if id then -- NPC ID's
tt:AddLine(format(IDLine, _G.ID, id))
self:AddLine(format(IDLine, _G.ID, id))
end
end
local statusBar = self.StatusBar
if color then
tt.StatusBar:SetStatusBarColor(color.r, color.g, color.b)
statusBar:SetStatusBarColor(color.r, color.g, color.b)
else
tt.StatusBar:SetStatusBarColor(0.6, 0.6, 0.6)
statusBar:SetStatusBarColor(0.6, 0.6, 0.6)
end
local textWidth = tt.StatusBar.text:GetStringWidth()
if textWidth then
tt:SetMinimumWidth(textWidth)
if statusBar.text then
local textWidth = statusBar.text:GetStringWidth()
if textWidth then
self:SetMinimumWidth(textWidth)
end
end
end
@ -659,61 +673,69 @@ function TT:EmbeddedItemTooltip_QuestReward(tt)
end
end
function TT:GameTooltip_OnTooltipSetItem(tt)
if tt:IsForbidden() or not TT.db.visibility then return end
function TT:GameTooltip_OnTooltipSetItem(data)
if self ~= GameTooltip or self:IsForbidden() or not TT.db.visibility then return end
local owner = tt:GetOwner()
local owner = self:GetOwner()
local ownerName = owner and owner.GetName and owner:GetName()
if ownerName and (strfind(ownerName, 'ElvUI_Container') or strfind(ownerName, 'ElvUI_BankContainer')) and not TT:IsModKeyDown(TT.db.visibility.bags) then
tt:Hide()
self:Hide()
return
end
local name, link = tt:GetItem()
local itemID, bagCount, bankCount
local modKey = TT:IsModKeyDown()
if not E.Retail and name == '' and _G.CraftFrame and _G.CraftFrame:IsShown() then
local reagentIndex = ownerName and tonumber(strmatch(ownerName, 'Reagent(%d+)'))
if reagentIndex then link = GetCraftReagentItemLink(GetCraftSelectionIndex(), reagentIndex) end
end
if self.GetItem then -- Some tooltips don't have this func. Example - compare tooltip
local name, link = self:GetItem()
if not link then return end
if not E.Retail and name == '' and _G.CraftFrame and _G.CraftFrame:IsShown() then
local reagentIndex = ownerName and tonumber(strmatch(ownerName, 'Reagent(%d+)'))
if reagentIndex then link = GetCraftReagentItemLink(GetCraftSelectionIndex(), reagentIndex) end
end
local modKey = TT:IsModKeyDown()
local itemID, bagCount, bankCount
if TT.db.itemQuality then
local _, _, quality = GetItemInfo(link)
if quality and quality > 1 then
local r, g, b = GetItemQualityColor(quality)
if tt.NineSlice then
tt.NineSlice:SetBorderColor(r, g, b)
else
tt:SetBackdropBorderColor(r, g, b)
end
if not link then return end
tt.qualityChanged = true
if TT.db.itemQuality then
local _, _, quality = GetItemInfo(link)
if quality and quality > 1 then
local r, g, b = GetItemQualityColor(quality)
if self.NineSlice then
self.NineSlice:SetBorderColor(r, g, b)
else
self:SetBackdropBorderColor(r, g, b)
end
self.qualityChanged = true
end
end
end
if modKey then
itemID = format('|cFFCA3C3C%s|r %s', _G.ID, strmatch(link, ':(%w+)'))
end
if modKey then
itemID = format('|cFFCA3C3C%s|r %s', _G.ID, (data and data.id) or strmatch(link, ':(%w+)'))
end
if TT.db.itemCount ~= 'NONE' and (not TT.db.modifierCount or modKey) then
local count = GetItemCount(link)
local total = GetItemCount(link, true)
if TT.db.itemCount == 'BAGS_ONLY' then
bagCount = format(IDLine, L["Count"], count)
elseif TT.db.itemCount == 'BANK_ONLY' then
bankCount = format(IDLine, L["Bank"], total - count)
elseif TT.db.itemCount == 'BOTH' then
bagCount = format(IDLine, L["Count"], count)
bankCount = format(IDLine, L["Bank"], total - count)
if TT.db.itemCount ~= 'NONE' and (not TT.db.modifierCount or modKey) then
local count = GetItemCount(link)
local total = GetItemCount(link, true)
if TT.db.itemCount == 'BAGS_ONLY' then
bagCount = format(IDLine, L["Count"], count)
elseif TT.db.itemCount == 'BANK_ONLY' then
bankCount = format(IDLine, L["Bank"], total - count)
elseif TT.db.itemCount == 'BOTH' then
bagCount = format(IDLine, L["Count"], count)
bankCount = format(IDLine, L["Bank"], total - count)
end
end
elseif modKey then
local id = data and data.id
if id then
itemID = format('|cFFCA3C3C%s|r %s', _G.ID, id)
end
end
if itemID or bagCount or bankCount then tt:AddLine(' ') end
if itemID or bagCount then tt:AddDoubleLine(itemID or ' ', bagCount or ' ') end
if bankCount then tt:AddDoubleLine(' ', bankCount) end
if itemID or bagCount or bankCount then self:AddLine(' ') end
if itemID or bagCount then self:AddDoubleLine(itemID or ' ', bagCount or ' ') end
if bankCount then self:AddDoubleLine(' ', bankCount) end
end
function TT:GameTooltip_AddQuestRewardsToTooltip(tt, questID)
@ -812,14 +834,14 @@ function TT:SetUnitAura(tt, unit, index, filter)
tt:Show()
end
function TT:GameTooltip_OnTooltipSetSpell(tt)
if tt:IsForbidden() or not TT:IsModKeyDown() then return end
function TT:GameTooltip_OnTooltipSetSpell(data)
if (self ~= GameTooltip and self ~= _G.ElvUISpellBookTooltip) or self:IsForbidden() or not TT:IsModKeyDown() then return end
local _, id = tt:GetSpell()
local id = (data and data.id) or select(2, self:GetSpell())
if not id then return end
local ID = format(IDLine, _G.ID, id)
for i = 3, tt:NumLines() do
for i = 3, self:NumLines() do
local line = _G[format('GameTooltipTextLeft%d', i)]
local text = line and line:GetText()
if text and strfind(text, ID) then
@ -827,8 +849,8 @@ function TT:GameTooltip_OnTooltipSetSpell(tt)
end
end
tt:AddLine(ID)
tt:Show()
self:AddLine(ID)
self:Show()
end
function TT:SetItemRef(link)
@ -972,19 +994,30 @@ function TT:Initialize()
TT:SecureHook(GameTooltip, 'SetUnitAura')
TT:SecureHook(GameTooltip, 'SetUnitBuff', 'SetUnitAura')
TT:SecureHook(GameTooltip, 'SetUnitDebuff', 'SetUnitAura')
TT:SecureHookScript(GameTooltip, 'OnTooltipSetSpell', 'GameTooltip_OnTooltipSetSpell')
TT:SecureHookScript(GameTooltip, 'OnTooltipCleared', 'GameTooltip_OnTooltipCleared')
TT:SecureHookScript(GameTooltip, 'OnTooltipSetItem', 'GameTooltip_OnTooltipSetItem')
TT:SecureHookScript(GameTooltip, 'OnTooltipSetUnit', 'GameTooltip_OnTooltipSetUnit')
TT:SecureHookScript(GameTooltip.StatusBar, 'OnValueChanged', 'GameTooltipStatusBar_OnValueChanged')
TT:SecureHookScript(_G.ElvUISpellBookTooltip, 'OnTooltipSetSpell', 'GameTooltip_OnTooltipSetSpell')
if AddTooltipPostCall then
AddTooltipPostCall(TooltipDataType.Spell, TT.GameTooltip_OnTooltipSetSpell)
AddTooltipPostCall(TooltipDataType.Item, TT.GameTooltip_OnTooltipSetItem)
AddTooltipPostCall(TooltipDataType.Unit, TT.GameTooltip_OnTooltipSetUnit)
else
TT:SecureHookScript(GameTooltip, 'OnTooltipSetSpell', TT.GameTooltip_OnTooltipSetSpell)
TT:SecureHookScript(GameTooltip, 'OnTooltipSetItem', TT.GameTooltip_OnTooltipSetItem)
TT:SecureHookScript(GameTooltip, 'OnTooltipSetUnit', TT.GameTooltip_OnTooltipSetUnit)
TT:SecureHookScript(_G.ElvUISpellBookTooltip, 'OnTooltipSetSpell', TT.GameTooltip_OnTooltipSetSpell)
if not E.Classic then -- what's the replacement in DF
TT:SecureHook(GameTooltip, 'SetCurrencyTokenByID')
end
end
TT:RegisterEvent('MODIFIER_STATE_CHANGED')
if E.Retail then
TT:SecureHook('EmbeddedItemTooltip_SetSpellWithTextureByID', 'EmbeddedItemTooltip_ID')
TT:SecureHook(GameTooltip, 'SetToyByItemID')
TT:SecureHook(GameTooltip, 'SetCurrencyToken')
--TT:SecureHook(GameTooltip, 'SetCurrencyTokenByID') -- DF
TT:SecureHook(GameTooltip, 'SetBackpackToken')
TT:SecureHook('BattlePetToolTip_Show', 'AddBattlePetID')
TT:SecureHook('QuestMapLogTitleButton_OnEnter', 'AddQuestID')

2
Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/AuraBars.lua

@ -16,7 +16,7 @@ function UF:Construct_AuraBars(bar)
bar:Point('RIGHT')
bar.spark:SetTexture(E.media.blankTex)
bar.spark:SetVertexColor(1, 1, 1, 0.4)
bar.spark:SetVertexColor(0.9, 0.9, 0.9, 0.6)
bar.spark:Width(2)
bar.icon:CreateBackdrop(nil, nil, nil, nil, true)

90
Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/CastBar.lua

@ -3,7 +3,8 @@ local UF = E:GetModule('UnitFrames')
local LSM = E.Libs.LSM
local ElvUF = E.oUF
local unpack, tonumber, abs = unpack, tonumber, abs
local abs, next = abs, next
local unpack, tonumber = unpack, tonumber
local CreateFrame = CreateFrame
local GetTalentInfo = GetTalentInfo
@ -16,6 +17,76 @@ local UnitSpellHaste = UnitSpellHaste
local ticks = {}
do
local pipMapColor = {4, 1, 2, 3}
function UF:CastBar_UpdatePip(pip, stage, texture)
local color = UF.db.colors.empoweredCast[pipMapColor[stage]]
pip.texture:SetVertexColor(color.r, color.g, color.b, pip.pipAlpha)
pip.texture:SetTexture(texture)
end
local pipMapAlpha = {2, 3, 4, 1}
function UF:UpdatePipStep(stage) -- self is element
local pip = self.Pips[pipMapAlpha[stage]]
if not pip then return end
pip.texture:SetAlpha(1)
E:UIFrameFadeOut(pip.texture, pip.pipTimer, pip.pipStart, pip.pipFaded)
end
end
function UF:PostUpdatePip(pip, stage) -- self is element
pip.texture:SetAlpha(pip.pipAlpha or 1)
local pips = self.Pips
local numStages = self.numStages
local reverse = self:GetReverseFill()
if stage == numStages then
local firstPip = pips[1]
local anchor = pips[numStages]
if reverse then
firstPip.texture:Point('RIGHT', self, 'LEFT', 0, 0)
firstPip.texture:Point('LEFT', anchor, 3, 0)
else
firstPip.texture:Point('LEFT', self, 'RIGHT', 0, 0)
firstPip.texture:Point('RIGHT', anchor, -3, 0)
end
end
if stage ~= 1 then
local anchor = pips[stage - 1]
if reverse then
pip.texture:Point('RIGHT', -3, 0)
pip.texture:Point('LEFT', anchor, 3, 0)
else
pip.texture:Point('LEFT', 3, 0)
pip.texture:Point('RIGHT', anchor, -3, 0)
end
end
end
function UF:CreatePip(stage)
local pip = CreateFrame('Frame', nil, self, 'CastingBarFrameStagePipTemplate')
pip.BasePip:SetAlpha(0)
pip.texture = pip:CreateTexture(nil, 'ARTWORK', nil, 2)
pip.texture:Point('BOTTOM')
pip.texture:Point('TOP')
pip.pipStart = 1.0 -- alpha on hit
pip.pipAlpha = 0.3 -- alpha on init
pip.pipFaded = 0.6 -- alpha when passed
pip.pipTimer = 0.4 -- fading time to passed
UF.statusbars[pip.texture] = true
UF:CastBar_UpdatePip(pip, stage, LSM:Fetch('statusbar', UF.db.statusbar))
return pip
end
function UF:Construct_Castbar(frame, moverName)
local castbar = CreateFrame('StatusBar', '$parent_CastBar', frame)
castbar:SetFrameLevel(frame.RaisedElementParent.CastBarLevel)
@ -27,6 +98,10 @@ function UF:Construct_Castbar(frame, moverName)
castbar.PostCastStop = UF.PostCastStop
castbar.PostCastInterruptible = UF.PostCastInterruptible
castbar.PostCastFail = UF.PostCastFail
castbar.UpdatePipStep = UF.UpdatePipStep
castbar.PostUpdatePip = UF.PostUpdatePip
castbar.CreatePip = UF.CreatePip
castbar:SetClampedToScreen(true)
castbar:CreateBackdrop(nil, nil, nil, nil, true)
@ -44,13 +119,14 @@ function UF:Construct_Castbar(frame, moverName)
castbar.Text:SetWordWrap(false)
castbar.Text:FontTemplate()
castbar.Spark_ = castbar:CreateTexture(nil, 'OVERLAY')
castbar.Spark_ = castbar:CreateTexture(nil, 'OVERLAY', nil, 3)
castbar.Spark_:SetTexture(E.media.blankTex)
castbar.Spark_:SetVertexColor(1, 1, 1, 0.4)
castbar.Spark_:SetVertexColor(0.9, 0.9, 0.9, 0.6)
castbar.Spark_:SetBlendMode('ADD')
castbar.Spark_:Width(2)
--Set to castbar.SafeZone
castbar.LatencyTexture = castbar:CreateTexture(nil, 'OVERLAY')
castbar.LatencyTexture = castbar:CreateTexture(nil, 'OVERLAY', nil, 2)
castbar.LatencyTexture:SetTexture(E.media.blankTex)
castbar.LatencyTexture:SetVertexColor(0.69, 0.31, 0.31, 0.75)
@ -108,6 +184,12 @@ function UF:Configure_Castbar(frame)
castbar:SetFrameLevel(db.strataAndLevel.frameLevel)
end
--Empowered
local pipTexture = LSM:Fetch('statusbar', UF.db.statusbar)
for stage, pip in next, castbar.Pips do
UF:CastBar_UpdatePip(pip, stage, pipTexture)
end
--Latency
if frame.unit == 'player' and db.latency then
castbar.SafeZone = castbar.LatencyTexture

2
Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/ClassBars.lua

@ -71,7 +71,7 @@ function UF:ClassPower_UpdateColor(powerType, rune)
local color = colors.DEATHKNIGHT[rune.runeType or 0]
UF:ClassPower_SetBarColor(rune, color.r, color.g, color.b, custom_backdrop)
else
local classColor = (isRunes and colors.DEATHKNIGHT) or (powerType == 'COMBO_POINTS' and colors.comboPoints) or (powerType == 'CHI' and colors.MONK) or (powerType == 'Totems' and colors.SHAMAN)
local classColor = (isRunes and colors.DEATHKNIGHT) or (powerType == 'COMBO_POINTS' and colors.comboPoints) or (powerType == 'ESSENCE' and colors.EVOKER) or (powerType == 'CHI' and colors.MONK) or (powerType == 'Totems' and colors.SHAMAN)
for i, bar in ipairs(self) do
local color = (isRunes and classColor[bar.runeType or 0]) or (classColor and classColor[i]) or colors[E.myclass] or fallback
UF:ClassPower_SetBarColor(bar, color.r, color.g, color.b, custom_backdrop)

3
Interface/AddOns/ElvUI/Core/Modules/UnitFrames/Elements/EnergyManaRegen.lua

@ -15,7 +15,8 @@ function UF:Construct_EnergyManaRegen(frame)
element.Spark = element:CreateTexture(nil, 'OVERLAY')
element.Spark:SetTexture(E.media.blankTex)
element.Spark:SetVertexColor(1, 1, 1, .8)
element.Spark:SetVertexColor(0.9, 0.9, 0.9, 0.6)
element.Spark:SetBlendMode('ADD')
element.Spark:Point('RIGHT', barTexture)
element.Spark:Point('BOTTOM')
element.Spark:Point('TOP')

162
Interface/AddOns/ElvUI/Core/Modules/UnitFrames/UnitFrames.lua

@ -34,7 +34,6 @@ local SELECT_NPC = SOUNDKIT.IG_CHARACTER_NPC_SELECT
local SELECT_NEUTRAL = SOUNDKIT.IG_CREATURE_NEUTRAL_SELECT
local SELECT_LOST = SOUNDKIT.INTERFACE_SOUND_LOST_TARGET_UNIT
local POWERTYPE_ALTERNATE = Enum.PowerType.Alternate or 10
local MAX_BOSS_FRAMES = 8
-- GLOBALS: Arena_LoadUI
@ -63,6 +62,7 @@ UF.classMaxResourceBar = { -- match to NP ClassPower MAX_POINTS
DEATHKNIGHT = 6,
PALADIN = 5,
WARLOCK = 5,
EVOKER = 6,
MONK = 6,
MAGE = 4,
ROGUE = 7,
@ -414,14 +414,24 @@ function UF:UpdateColors()
ElvUF.colors.ComboPoints[i] = E:SetColorTable(ElvUF.colors.ComboPoints[i], db.classResources.comboPoints[i])
end
--Monk, Mage, Paladin and Warlock, Death Knight
if not ElvUF.colors.empoweredCast then
ElvUF.colors.empoweredCast = {}
end
for i = 1, 4 do
ElvUF.colors.empoweredCast[i] = E:SetColorTable(ElvUF.colors.empoweredCast[i], db.empoweredCast[i])
end
--Evoker, Monk, Mage, Paladin and Warlock, Death Knight
if not ElvUF.colors.ClassBars then ElvUF.colors.ClassBars = {} end
ElvUF.colors.ClassBars.PALADIN = E:SetColorTable(ElvUF.colors.ClassBars.PALADIN, db.classResources.PALADIN)
ElvUF.colors.ClassBars.MAGE = E:SetColorTable(ElvUF.colors.ClassBars.MAGE, db.classResources.MAGE)
ElvUF.colors.ClassBars.WARLOCK = E:SetColorTable(ElvUF.colors.ClassBars.WARLOCK, db.classResources.WARLOCK)
if not ElvUF.colors.ClassBars.EVOKER then ElvUF.colors.ClassBars.EVOKER = {} end
if not ElvUF.colors.ClassBars.MONK then ElvUF.colors.ClassBars.MONK = {} end
for i=1, 6 do
ElvUF.colors.ClassBars.EVOKER[i] = E:SetColorTable(ElvUF.colors.ClassBars.EVOKER[i], db.classResources.EVOKER[i])
ElvUF.colors.ClassBars.MONK[i] = E:SetColorTable(ElvUF.colors.ClassBars.MONK[i], db.classResources.MONK[i])
end
@ -1215,60 +1225,50 @@ do
end
do
local disabledPlates = {}
local function HandleFrame(baseName, doNotReparent)
local frame
if type(baseName) == 'string' then
frame = _G[baseName]
else
frame = baseName
end
local MAX_PARTY = _G.MEMBERS_PER_RAID_GROUP or _G.MAX_PARTY_MEMBERS or 5
local MAX_ARENA_ENEMIES = _G.MAX_ARENA_ENEMIES or 5
local MAX_BOSS_FRAMES = 8
if not frame then return end
frame:UnregisterAllEvents()
frame:Hide()
local disabledPlates = {}
local lockedFrames = {}
if not doNotReparent then
-- lock Boss, Party, and Arena
local function LockParent(frame, parent)
if parent ~= E.HiddenFrame then
frame:SetParent(E.HiddenFrame)
end
end
local petFrame = frame.petFrame or frame.PetFrame
if petFrame then
petFrame:UnregisterAllEvents()
petFrame:SetParent(E.HiddenFrame)
end
local totFrame = frame.totFrame
if totFrame then
totFrame:UnregisterAllEvents()
totFrame:SetParent(E.HiddenFrame)
local function HandleFrame(frame, doNotReparent)
if type(frame) == 'string' then
frame = _G[frame]
end
local health = frame.healthBar or frame.healthbar or frame.HealthBar
if health then
health:UnregisterAllEvents()
end
if not frame then return end
local power = frame.manabar or frame.ManaBar
if power then
power:UnregisterAllEvents()
end
local lockParent = doNotReparent == 1
if lockParent or not doNotReparent then
frame:SetParent(E.HiddenFrame)
local spell = frame.castBar or frame.spellbar
if spell then
spell:UnregisterAllEvents()
if lockParent and not lockedFrames[frame] then
hooksecurefunc(frame, 'SetParent', LockParent)
lockedFrames[frame] = true
end
end
local altpowerbar = frame.powerBarAlt or frame.PowerBarAlt
if altpowerbar then
altpowerbar:UnregisterAllEvents()
end
frame:UnregisterAllEvents()
frame:Hide()
local buffFrame = frame.BuffFrame
if buffFrame then
buffFrame:UnregisterAllEvents()
for _, child in next, {
frame.petFrame or frame.PetFrame,
frame.healthBar or frame.healthbar or frame.HealthBar,
frame.manabar or frame.ManaBar,
frame.castBar or frame.spellbar,
frame.powerBarAlt or frame.PowerBarAlt,
frame.totFrame,
frame.BuffFrame
} do
child:UnregisterAllEvents()
end
end
@ -1279,20 +1279,20 @@ do
local disable = E.private.unitframe.disabledBlizzardFrames
if unit == 'player' then
if disable.player then
local PlayerFrame = _G.PlayerFrame
HandleFrame(PlayerFrame)
local frame = _G.PlayerFrame
HandleFrame(frame)
-- For the damn vehicle support:
PlayerFrame:RegisterEvent('PLAYER_ENTERING_WORLD')
PlayerFrame:RegisterEvent('UNIT_ENTERING_VEHICLE')
PlayerFrame:RegisterEvent('UNIT_ENTERED_VEHICLE')
PlayerFrame:RegisterEvent('UNIT_EXITING_VEHICLE')
PlayerFrame:RegisterEvent('UNIT_EXITED_VEHICLE')
frame:RegisterEvent('PLAYER_ENTERING_WORLD')
frame:RegisterEvent('UNIT_ENTERING_VEHICLE')
frame:RegisterEvent('UNIT_ENTERED_VEHICLE')
frame:RegisterEvent('UNIT_EXITING_VEHICLE')
frame:RegisterEvent('UNIT_EXITED_VEHICLE')
-- User placed frames don't animate
PlayerFrame:SetMovable(true)
PlayerFrame:SetUserPlaced(true)
PlayerFrame:SetDontSavePosition(true)
frame:SetMovable(true)
frame:SetUserPlaced(true)
frame:SetDontSavePosition(true)
end
if E.Retail then
@ -1318,43 +1318,43 @@ do
elseif disable.target and unit == 'targettarget' then
HandleFrame(_G.TargetFrameToT)
elseif disable.boss and strmatch(unit, 'boss%d?$') then
HandleFrame(_G.BossTargetFrameContainer, 1)
local id = strmatch(unit, 'boss(%d)')
if id then
HandleFrame('Boss'..id..'TargetFrame')
HandleFrame('Boss'..id..'TargetFrame', true)
else
for i = 1, MAX_BOSS_FRAMES do
HandleFrame('Boss'..i..'TargetFrame')
HandleFrame('Boss'..i..'TargetFrame', true)
end
end
elseif disable.party and strmatch(unit, 'party%d?$') then
if _G.PartyFrame then -- Retail
_G.PartyFrame:UnregisterAllEvents()
_G.PartyFrame:SetScript('OnShow', nil)
local frame = _G.PartyFrame
if frame then -- Retail
HandleFrame(frame, 1)
for frame in _G.PartyFrame.PartyMemberFramePool:EnumerateActive() do
HandleFrame(frame)
for child in frame.PartyMemberFramePool:EnumerateActive() do
HandleFrame(child, true)
end
else
HandleFrame(_G.PartyMemberBackground)
end
HandleFrame(_G.PartyFrame.Background)
local id = strmatch(unit, 'party(%d)')
if id then
HandleFrame('PartyMemberFrame'..id)
HandleFrame('CompactPartyFrameMember'..id)
else
local id = strmatch(unit, 'party(%d)')
if id then
HandleFrame('PartyMemberFrame'..id)
HandleFrame('CompactPartyMemberFrame'..id)
else
for i = 1, _G.MAX_PARTY_MEMBERS do
HandleFrame('PartyMemberFrame'..i)
HandleFrame('CompactPartyMemberFrame'..i)
end
for i = 1, MAX_PARTY do
HandleFrame('PartyMemberFrame'..i)
HandleFrame('CompactPartyFrameMember'..i)
end
HandleFrame(_G.PartyMemberBackground)
end
elseif disable.arena and strmatch(unit, 'arena%d?$') then
if _G.ArenaEnemyFramesContainer then -- Retail
_G.ArenaEnemyFramesContainer:UnregisterAllEvents()
_G.ArenaEnemyPrepFramesContainer:UnregisterAllEvents()
_G.ArenaEnemyMatchFramesContainer:UnregisterAllEvents()
HandleFrame(_G.ArenaEnemyFramesContainer, 1)
HandleFrame(_G.ArenaEnemyPrepFramesContainer, 1)
HandleFrame(_G.ArenaEnemyMatchFramesContainer, 1)
elseif _G.ArenaEnemyFrames then
_G.ArenaEnemyFrames:UnregisterAllEvents()
_G.ArenaPrepFrames:UnregisterAllEvents()
@ -1371,12 +1371,12 @@ do
-- actually handle the sub frames now
local id = strmatch(unit, 'arena(%d)')
if id then
HandleFrame('ArenaEnemyMatchFrame'..id)
HandleFrame('ArenaEnemyPrepFrame'..id)
HandleFrame('ArenaEnemyMatchFrame'..id, true)
HandleFrame('ArenaEnemyPrepFrame'..id, true)
else
for i = 1, _G.MAX_ARENA_ENEMIES do
HandleFrame('ArenaEnemyMatchFrame'..i)
HandleFrame('ArenaEnemyPrepFrame'..i)
for i = 1, MAX_ARENA_ENEMIES do
HandleFrame('ArenaEnemyMatchFrame'..i, true)
HandleFrame('ArenaEnemyPrepFrame'..i, true)
end
end
end

2
Interface/AddOns/ElvUI/ElvUI_Classic.toc

@ -1,7 +1,7 @@
## Title: |cff1784d1ElvUI|r |cfd9b9b9bClassic|r
## Notes: User Interface Replacement
## Author: Elv, Simpy
## Version: 13.01
## Version: 13.02
## SavedVariables: ElvDB, ElvPrivateDB
## SavedVariablesPerCharacter: ElvCharacterDB
## OptionalDeps: SharedMedia, Tukui, Masque

6
Interface/AddOns/ElvUI/ElvUI_Mainline.toc

@ -1,13 +1,13 @@
## Title: |cff1784d1ElvUI|r
## Notes: User Interface Replacement
## Author: Elv, Simpy
## Version: 13.01
## Version: 13.02
## SavedVariables: ElvDB, ElvPrivateDB
## SavedVariablesPerCharacter: ElvCharacterDB
## OptionalDeps: SharedMedia, Tukui, Masque, Blizzard_PetJournal
## RequiredDeps: ElvUI_Libraries
## Interface: 100000
## X-Interface: 100000
## Interface: 100002
## X-Interface: 100002
Core\Load.xml

2
Interface/AddOns/ElvUI/ElvUI_Wrath.toc

@ -1,7 +1,7 @@
## Title: |cff1784d1ElvUI|r |cfd9b9b9bWrath|r
## Notes: User Interface Replacement
## Author: Elv, Simpy
## Version: 13.01
## Version: 13.02
## SavedVariables: ElvDB, ElvPrivateDB
## SavedVariablesPerCharacter: ElvCharacterDB
## OptionalDeps: SharedMedia, Tukui, Masque

18
Interface/AddOns/ElvUI/Mainline/Modules/DataTexts/Mastery.lua

@ -7,6 +7,7 @@ local GetSpecialization = GetSpecialization
local GetSpecializationMasterySpells = GetSpecializationMasterySpells
local STAT_CATEGORY_ENHANCEMENTS = STAT_CATEGORY_ENHANCEMENTS
local STAT_MASTERY = STAT_MASTERY
local CreateBaseTooltipInfo = CreateBaseTooltipInfo
local displayString, lastPanel = ''
@ -17,11 +18,24 @@ local function OnEnter()
if primaryTalentTree then
local masterySpell, masterySpell2 = GetSpecializationMasterySpells(primaryTalentTree)
if masterySpell then
DT.tooltip:AddSpellByID(masterySpell)
if CreateBaseTooltipInfo then
local tooltipInfo = CreateBaseTooltipInfo('GetSpellByID', masterySpell)
tooltipInfo.append = true
DT.tooltip:ProcessInfo(tooltipInfo)
else
DT.tooltip:AddSpellByID(masterySpell)
end
end
if masterySpell2 then
DT.tooltip:AddLine(' ')
DT.tooltip:AddSpellByID(masterySpell2)
if CreateBaseTooltipInfo then
local tooltipInfo = CreateBaseTooltipInfo('GetSpellByID', masterySpell2)
tooltipInfo.append = true
DT.tooltip:ProcessInfo(tooltipInfo)
else
DT.tooltip:AddSpellByID(masterySpell2)
end
end
DT.tooltip:Show()

23
Interface/AddOns/ElvUI/Mainline/Modules/Skins/Bags.lua

@ -12,13 +12,12 @@ local CreateFrame = CreateFrame
local GetItemInfo = GetItemInfo
local GetCVarBool = GetCVarBool
local GetItemQualityColor = GetItemQualityColor
local GetContainerItemInfo = GetContainerItemInfo
local GetContainerItemCooldown = GetContainerItemCooldown
local GetContainerItemQuestInfo = GetContainerItemQuestInfo
local GetInventoryItemTexture = GetInventoryItemTexture
local GetInventorySlotInfo = GetInventorySlotInfo
local hooksecurefunc = hooksecurefunc
local GetContainerItemCooldown = GetContainerItemCooldown or (C_Container and C_Container.GetContainerItemCooldown)
local NUM_CONTAINER_FRAMES = NUM_CONTAINER_FRAMES
local BACKPACK_TOOLTIP = BACKPACK_TOOLTIP
local QUESTS_LABEL = QUESTS_LABEL
@ -283,20 +282,18 @@ local function UpdateBankItem(button)
if not button.isBag then
local container = button:GetParent():GetID()
local _, _, _, rarity, _, _, itemLink, _, _, itemID = GetContainerItemInfo(container, slotID)
local isQuestItem, questId = GetContainerItemQuestInfo(container, slotID)
button.itemID, button.itemLink = itemID, itemLink
if itemLink then
button.name, _, button.quality, _, _, button.type = GetItemInfo(itemLink)
if not button.quality then
button.quality = rarity
end
local info = B:GetContainerItemInfo(container, slotID)
local questInfo = B:GetContainerItemQuestInfo(container, slotID)
button.itemID, button.itemLink = info.itemID, info.hyperlink
if info.hyperlink then
local _
button.name, _, button.quality, _, _, button.type = GetItemInfo(info.hyperlink)
else
button.name, button.quality, button.type = nil, nil, nil
end
if isQuestItem or questId then
if questInfo.isQuestItem or questInfo.questID then
button.type = QUESTS_LABEL
end

16
Interface/AddOns/ElvUI/Mainline/Modules/Skins/Communities.lua

@ -529,10 +529,10 @@ function S:Blizzard_Communities()
S:HandleButton(RecruitmentDialog.Cancel)
S:HandleScrollBar(RecruitmentDialog.RecruitmentMessageFrame.RecruitmentMessageInput.ScrollBar)
-- Notification Settings Dialog
local NotificationSettings = _G.CommunitiesFrame.NotificationSettingsDialog
NotificationSettings:StripTextures()
NotificationSettings:SetTemplate('Transparent')
-- Notification Settings Dialog -- ToDo: Check this if it goes live O.o
--local NotificationSettings = _G.CommunitiesFrame.NotificationSettingsDialog
--NotificationSettings:StripTextures()
--NotificationSettings:SetTemplate('Transparent')
S:HandleDropDownBox(CommunitiesFrame.NotificationSettingsDialog.CommunitiesListDropDownMenu)
S:HandleCheckBox(CommunitiesFrame.NotificationSettingsDialog.ScrollFrame.Child.QuickJoinButton)
@ -540,6 +540,7 @@ function S:Blizzard_Communities()
S:HandleButton(CommunitiesFrame.NotificationSettingsDialog.ScrollFrame.Child.NoneButton)
S:HandleButton(CommunitiesFrame.NotificationSettingsDialog.OkayButton)
S:HandleButton(CommunitiesFrame.NotificationSettingsDialog.CancelButton)
S:HandleScrollBar(CommunitiesFrame.NotificationSettingsDialog.ScrollFrame.ScrollBar)
-- Create Channel Dialog
local EditStreamDialog = CommunitiesFrame.EditStreamDialog
@ -573,11 +574,12 @@ function S:Blizzard_Communities()
-- Avatar Picker
local Avatar = _G.CommunitiesAvatarPickerDialog
Avatar:StripTextures()
Avatar.Selector:StripTextures()
Avatar:SetTemplate('Transparent')
S:HandleButton(Avatar.OkayButton)
S:HandleButton(Avatar.CancelButton)
S:HandleTrimScrollBar(Avatar.ScrollBar)
S:HandleButton(Avatar.Selector.OkayButton)
S:HandleButton(Avatar.Selector.CancelButton)
-- Invite Frame
local TicketManager = _G.CommunitiesTicketManagerDialog

4
Interface/AddOns/ElvUI/Mainline/Modules/Skins/Loot.lua

@ -42,13 +42,15 @@ function S:LootFrame()
for _, button in next, { frame.ScrollTarget:GetChildren() } do
local item = button.Item
if item and not item.backdrop then
item:StripTextures()
--item:StripTextures() -- this will also kill the icon
S:HandleIcon(item.icon, true)
S:HandleIconBorder(item.IconBorder, item.icon.backdrop)
end
button.IconQuestTexture:SetAlpha(0)
button.BorderFrame:SetAlpha(0)
button.HighlightNameFrame:SetAlpha(0)
button.PushedNameFrame:SetAlpha(0)
end
end)

23
Interface/AddOns/ElvUI_Libraries/Core/CallbackHandler-1.0/LICENSE.txt

@ -0,0 +1,23 @@
Copyright (c) 2008, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

21
Interface/AddOns/ElvUI_Libraries/Core/LibRangeCheck-2.0/LibRangeCheck-2.0.lua

@ -41,22 +41,16 @@ License: Public Domain
-- @class file
-- @name LibRangeCheck-2.0
local MAJOR_VERSION = "LibRangeCheck-2.0"
local MINOR_VERSION = tonumber(("$Revision: 214 $"):match("%d+")) + 100000
local MINOR_VERSION = tonumber(("$Revision: 216 $"):match("%d+")) + 100000
local lib, oldminor = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
if not lib then return end
local _, _, _, toc = GetBuildInfo()
local isRetail = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
local isClassic = WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
local isTBC = toc >= 20500 and toc < 30000 -- TODO: Wrath
local isWrath = toc >= 30400 and toc < 40000 -- TODO: Wrath
local isWrath = WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC
-- GLOBALS: LibStub, CreateFrame, C_Map, FriendColor (??), HarmColor (??)
local _G = _G
local next = next
local sort = sort
local type = type
local wipe = wipe
local print = print
@ -119,10 +113,18 @@ local InteractLists = {
local MeleeRange = 2
local FriendSpells, HarmSpells, ResSpells, PetSpells = {}, {}, {}, {}
for _, n in ipairs({ 'DEATHKNIGHT', 'DEMONHUNTER', 'DRUID', 'HUNTER', 'SHAMAN', 'MAGE', 'PALADIN', 'PRIEST', 'WARLOCK', 'WARRIOR', 'MONK', 'ROGUE' }) do
for _, n in ipairs({ 'EVOKER', 'DEATHKNIGHT', 'DEMONHUNTER', 'DRUID', 'HUNTER', 'SHAMAN', 'MAGE', 'PALADIN', 'PRIEST', 'WARLOCK', 'WARRIOR', 'MONK', 'ROGUE' }) do
FriendSpells[n], HarmSpells[n], ResSpells[n], PetSpells[n] = {}, {}, {}, {}
end
-- Evoker
tinsert(HarmSpells.EVOKER, 369819) -- Disintegrate (25 yards)
tinsert(FriendSpells.EVOKER, 361469) -- Living Flame (25 yards)
tinsert(FriendSpells.EVOKER, 360823) -- Naturalize (Preservation) (30 yards)
tinsert(ResSpells.EVOKER, 361227) -- Return (40 yards)
-- Death Knights
tinsert(HarmSpells.DEATHKNIGHT, 49576) -- Death Grip (30 yards)
tinsert(HarmSpells.DEATHKNIGHT, 47541) -- Death Coil (Unholy) (40 yards)
@ -292,6 +294,7 @@ if not isRetail then
tinsert(HarmSpells.WARLOCK, 172) -- Corruption (30 yards, level 4, rank 1)
tinsert(HarmSpells.WARLOCK, 348) -- Immolate (30 yards, level 1, rank 1)
tinsert(HarmSpells.WARLOCK, 17877) -- Shadowburn (Destruction) (20 yards)
tinsert(HarmSpells.WARLOCK, 18223) -- Curse of Exhaustion (Affliction) (30/33/36/35/38/42 yards)
end
tinsert(ResSpells.WARLOCK, 20707) -- Soulstone (40 yards)

59
Interface/AddOns/ElvUI_Libraries/Core/oUF/elements/castbar.lua

@ -96,6 +96,7 @@ local INTERRUPTED = _G.INTERRUPTED or 'Interrupted'
local CASTBAR_STAGE_DURATION_INVALID = -1 -- defined in FrameXML/CastingBarFrame.lua
-- ElvUI block
local wipe = wipe
local next = next
local select = select
local CreateFrame = CreateFrame
@ -130,6 +131,8 @@ local function resetAttributes(self)
self.spellID = nil
self.spellName = nil -- ElvUI
wipe(self.stagePoints)
for _, pip in next, self.Pips do
pip:Hide()
end
@ -144,6 +147,8 @@ local function UpdatePips(element, numStages)
local stageMaxValue = element.max * 1000
local isHoriz = element:GetOrientation() == 'HORIZONTAL'
local elementSize = isHoriz and element:GetWidth() or element:GetHeight()
element.numStages = numStages
element.curStage = -1 -- dummy
for stage = 1, numStages do
local duration
@ -155,6 +160,7 @@ local function UpdatePips(element, numStages)
if(duration > CASTBAR_STAGE_DURATION_INVALID) then
stageTotalDuration = stageTotalDuration + duration
element.stagePoints[stage] = stageTotalDuration
local portion = stageTotalDuration / stageMaxValue
local offset = elementSize * portion
@ -198,6 +204,10 @@ local function UpdatePips(element, numStages)
pip:SetPoint('RIGHT', element, 'BOTTOMRIGHT', 0, offset)
end
end
if element.PostUpdatePip then -- ElvUI
element:PostUpdatePip(pip, stage)
end
end
end
end
@ -224,6 +234,14 @@ local function CastStart(self, real, unit, castGUID)
return
end
element.casting = event == 'UNIT_SPELLCAST_START'
element.channeling = event == 'UNIT_SPELLCAST_CHANNEL_START'
element.empowering = event == 'UNIT_SPELLCAST_EMPOWER_START'
if element.empowering then
endTime = endTime + GetUnitEmpowerHoldAtMaxTime(unit)
end
endTime = endTime / 1000
startTime = startTime / 1000
@ -231,20 +249,12 @@ local function CastStart(self, real, unit, castGUID)
element.startTime = startTime
element.delay = 0
element.casting = event == 'UNIT_SPELLCAST_START'
element.channeling = event == 'UNIT_SPELLCAST_CHANNEL_START'
element.empowering = event == 'UNIT_SPELLCAST_EMPOWER_START'
element.notInterruptible = notInterruptible
element.holdTime = 0
element.castID = castID
element.spellID = spellID
element.spellName = name -- ElvUI
if element.empowering then
endTime = endTime + GetUnitEmpowerHoldAtMaxTime(unit)
end
if element.channeling then
element.duration = endTime - GetTime()
else
@ -463,6 +473,27 @@ local function CastInterruptible(self, event, unit)
end
end
local function OnUpdateStage(element)
if element.UpdatePipStep then
local maxStage = 0
local stageValue = element.duration * 1000
for i = 1, element.numStages do
local step = element.stagePoints[i]
if not step or stageValue < step then
break
else
maxStage = i
end
end
if maxStage ~= element.curStage then
element:UpdatePipStep(maxStage)
element.curStage = maxStage
end
end
end
local function onUpdate(self, elapsed)
self.elapsed = (self.elapsed or 0) + elapsed
@ -513,6 +544,10 @@ local function onUpdate(self, elapsed)
end
end
if(self.empowering) then
OnUpdateStage(self)
end
self.elapsed = 0
end
@ -578,7 +613,13 @@ local function Enable(self, unit)
-- end block
element.holdTime = 0
element.Pips = {}
if not element.Pips then
element.Pips = {}
end
if not element.stagePoints then
element.stagePoints = {}
end
element:SetScript('OnUpdate', element.OnUpdate or onUpdate)

2
Interface/AddOns/ElvUI_Libraries/Core/oUF_Plugins/oUF_AuraBars.lua

@ -74,7 +74,7 @@ local function createAuraBar(element, index)
local spark = bar:CreateTexture(nil, "OVERLAY", nil);
spark:SetTexture([[Interface\CastingBar\UI-CastingBar-Spark]])
spark:SetWidth(12)
spark:SetBlendMode("ADD")
spark:SetBlendMode('ADD')
spark:SetPoint('CENTER', bar:GetStatusBarTexture(), 'RIGHT')
local icon = bar:CreateTexture(nil, 'ARTWORK')

1
Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Classic.toc

@ -3,7 +3,6 @@
## Author: Elv, Simpy
## Version: 1.00
## Interface: 11403
## X-Interface: 11403
## X-oUF: ElvUF
Classic\Libs.xml

3
Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Mainline.toc

@ -2,8 +2,7 @@
## Notes: Libraries that power ElvUI
## Author: Elv, Simpy
## Version: 1.00
## Interface: 100000
## X-Interface: 100000
## Interface: 100002
## X-oUF: ElvUF
Mainline\Libs.xml

1
Interface/AddOns/ElvUI_Libraries/ElvUI_Libraries_Wrath.toc

@ -3,7 +3,6 @@
## Author: Elv, Simpy
## Version: 1.00
## Interface: 30400
## X-Interface: 30400
## X-oUF: ElvUF
Wrath\Libs.xml

4
Interface/AddOns/ElvUI_Options/Core/Maps.lua

@ -49,8 +49,8 @@ Maps.args.worldMap.args.coordinatesGroup.args.yOffset = ACH:Range(L["Y-Offset"],
Maps.args.minimap = ACH:Group(L["Minimap"], nil, 2, 'tab', function(info) return E.db.general.minimap[info[#info]] end, function(info, value) E.db.general.minimap[info[#info]] = value; MM:UpdateSettings() end)
Maps.args.minimap.args.enable = ACH:Toggle(L["Enable"], L["Enable/Disable the minimap. |cffFF3333Warning: This will prevent you from seeing the minimap datatexts.|r"], 1, nil, nil, nil, function(info) return E.private.general.minimap[info[#info]] end, function(info, value) E.private.general.minimap[info[#info]] = value; E.ShowPopup = true end)
Maps.args.minimap.args.clusterDisable = ACH:Toggle(L["Disable Cluster"], nil, 2, nil, nil, nil, function(info) return E.db.general.minimap[info[#info]] end, function(info, value) E.db.general.minimap[info[#info]] = value; MM:UpdateSettings(); E.ShowPopup = true end)
Maps.args.minimap.args.clusterBackdrop = ACH:Toggle(L["Cluster Backdrop"], nil, 3, nil, nil, nil, function(info) return E.db.general.minimap[info[#info]] end, function(info, value) E.db.general.minimap[info[#info]] = value; MM:UpdateSettings() end, function() return E.db.general.minimap.clusterDisable end)
Maps.args.minimap.args.clusterDisable = ACH:Toggle(L["Disable Cluster"], nil, 2, nil, nil, nil, function(info) return E.db.general.minimap[info[#info]] end, function(info, value) E.db.general.minimap[info[#info]] = value; MM:UpdateSettings(); E.ShowPopup = true end, nil, not E.Retail)
Maps.args.minimap.args.clusterBackdrop = ACH:Toggle(L["Cluster Backdrop"], nil, 3, nil, nil, nil, function(info) return E.db.general.minimap[info[#info]] end, function(info, value) E.db.general.minimap[info[#info]] = value; MM:UpdateSettings() end, function() return E.db.general.minimap.clusterDisable end, not E.Retail)
Maps.args.minimap.args.spacer1 = ACH:Spacer(5)
Maps.args.minimap.args.size = ACH:Range(L["Size"], L["Adjust the size of the minimap."], 6, { min = 24, max = 500, step = 1 }, nil, nil, nil, function() return not E.private.general.minimap.enable end)
Maps.args.minimap.args.scale = ACH:Range(L["Scale"], L["Adjust the scale of the minimap and also the pins. Eg: Quests, Resource nodes, Group members"], 7, { min = .5, max = 2, step = .01, isPercent = true }, nil, nil, nil, function() return not E.private.general.minimap.enable end)

12
Interface/AddOns/ElvUI_Options/Core/UnitFrames.lua

@ -70,6 +70,7 @@ for i = 1, GetNumClasses() do
end
local roles = { TANK = L["Tank"] , HEALER = L["Healer"], DAMAGER = L["DPS"] }
local roman = { 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX' } -- 1 to 20
-----------------------------------------------------------------------
-- OPTIONS TABLES
@ -1070,6 +1071,13 @@ Colors.castBars.args.castColor = ACH:Color(function() return (E.Retail or E.Wrat
Colors.castBars.args.castNoInterrupt = ACH:Color(L["Non-Interruptible"], nil, 10, nil, nil, nil, nil, nil, not (E.Retail or E.Wrath))
Colors.castBars.args.castInterruptedColor = ACH:Color(L["Interrupted"], nil, 11, nil, nil, nil, nil, nil, not (E.Retail or E.Wrath))
Colors.castBars.args.empowerStage = ACH:Group(L["Empower Stages"], nil, 20, nil, function(info) local i = tonumber(info[#info]); local t, d = E.db.unitframe.colors.empoweredCast[i], P.unitframe.colors.empoweredCast[i] return t.r, t.g, t.b, 1, d.r, d.g, d.b, 1 end, function(info, r, g, b) local t = E.db.unitframe.colors.empoweredCast[tonumber(info[#info])] t.r, t.g, t.b = r, g, b UF:Update_AllFrames() end, nil, not E.Retail)
Colors.castBars.args.empowerStage.inline = true
for i = 1, 4 do
Colors.castBars.args.empowerStage.args[''..i] = ACH:Color(roman[i])
end
Colors.auras = ACH:Group(L["Auras"], nil, nil)
Colors.auras.args.auraByDispels = ACH:Toggle(L["Borders By Dispel"], nil, 1)
Colors.auras.args.auraByType = ACH:Toggle(L["Borders By Type"], nil, 2)
@ -1177,10 +1185,10 @@ Colors.classResourceGroup.args.CHI_POWER.inline = true
for i = 1, 7 do
if i ~= 7 then
Colors.classResourceGroup.args.CHI_POWER.args[''..i] = ACH:Color(L["CHI_POWER"]..' #'..i)
Colors.classResourceGroup.args.CHI_POWER.args[''..i] = ACH:Color(roman[i])
end
Colors.classResourceGroup.args.COMBO_POINTS.args[''..i] = ACH:Color(L["COMBO_POINTS"]..' #'..i)
Colors.classResourceGroup.args.COMBO_POINTS.args[''..i] = ACH:Color(roman[i])
end
Colors.classResourceGroup.args.RUNES = ACH:Group(L["RUNES"], nil, 4, nil, function(info) local i = tonumber(info[#info]); local t, d = E.db.unitframe.colors.classResources.DEATHKNIGHT[i], P.unitframe.colors.classResources.DEATHKNIGHT[i] return t.r, t.g, t.b, t.a, d.r, d.g, d.b end, function(info, r, g, b) local t = E.db.unitframe.colors.classResources.DEATHKNIGHT[tonumber(info[#info])] t.r, t.g, t.b = r, g, b UF:Update_AllFrames() end, nil, not (E.Retail or E.Wrath))

2
Interface/AddOns/ElvUI_Options/ElvUI_Options_Mainline.toc

@ -2,7 +2,7 @@
## Notes: Powers the configuration window.|n|cffff3333Does not store any profile data.|r
## Author: Elv, Simpy
## Version: 1.09
## Interface: 100000
## Interface: 100002
## RequiredDeps: ElvUI
## LoadOnDemand: 1

1
Interface/AddOns/ElvUI_Options/Locales/deDE.lua

@ -1,6 +1,7 @@
-- German localization file for deDE.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "deDE")
L["Empower Stages"] = true
L["Faded Charging Rune"] = true
L["Abbreviate Name"] = "Name abkürzen"
L["Max Allowed Groups"] = "Max. zulässige Gruppen"

1
Interface/AddOns/ElvUI_Options/Locales/enUS.lua

@ -1,6 +1,7 @@
-- English localization file for enUS and enGB.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "enUS", true, true)
L["Empower Stages"] = true
L["%s and then %s"] = true
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

29
Interface/AddOns/ElvUI_Options/Locales/esMX.lua

@ -1,6 +1,7 @@
-- Spanish localization file for esES and esMX.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "esMX")
L["Empower Stages"] = "Potenciar Etapas"
L["%s and then %s"] = "%s y entonces %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true
@ -11,27 +12,27 @@ L["24-Hour Time"] = "Tiempo de 24 horas"
L["2D"] = "2D"
L["3D"] = "3D"
L["Abbreviate Name"] = "Abreviar el Nombre"
L["Above Chat (Inside)"] = true
L["Above Chat"] = "Arriba del Chat"
L["Above Chat (Inside)"] = "Arriba Chat (Interior)"
L["Above Chat"] = "Arriba Chat"
L["Above"] = "Encima"
L["Absorb Style"] = true
L["Absorb Style"] = "Absorber el Estilo"
L["Absorbs"] = "Absorciones"
L["Accept Invites"] = "Aceptar Invitaciones"
L["ACHIEVEMENTS"] = "Logros"
L["Action Button Glow"] = true
L["Action Button Glow"] = "Brillo del boton de accion"
L["Action Paging"] = "Paginación"
L["ActionBars"] = "Barras de Acción"
L["Actions"] = "Acciones"
L["Add / Remove"] = "Añadir / Quitar"
L["Add a Item Name or ID to the list."] = true
L["Add a Item Name or ID to the list."] = "Añadir un nombre o ID de objetos a la lista."
L["Add a Name or NPC ID to the list."] = "Agregue un nombre o ID de NPC a la lista."
L["Add a spell to the filter."] = "Añade un hechizo al filtro."
L["Add an item or search syntax to the ignored list. Items matching the search syntax will be ignored."] = "Agregue un objetos o una sintaxis de búsqueda a la lista ignorada. Los objetos que coincidan con la sintaxis de búsqueda serán ignorados."
L["Add Currency by ID"] = "Agregar ID de moneda"
L["Add Currency"] = true
L["Add Current"] = "Agregar corriente"
L["Add Currency"] = "Añadir Moneda"
L["Add Current"] = "Agregar Corriente"
L["Add Instance ID"] = "Agregar ID de instancia"
L["Add Item Name or ID"] = true
L["Add Item Name or ID"] = "Anadir un nombre o ID de objetos."
L["Add Item or Search Syntax"] = "Agregar objetos o sintaxis de búsqueda"
L["Add Map ID"] = "Agregar ID de mapa"
L["Add Name or NPC ID"] = "Agregar nombre o ID de NPC"
@ -41,23 +42,23 @@ L["Add Spell ID or Name"] = "Agregar nombre o ID de hechizo"
L["Add SpellID"] = "Añadir ID de Hechizo"
L["Add Subzone Name"] = "Agregar nombre de subzona"
L["Add Zone Name"] = "Agregar nombre de zona"
L["Add"] = true
L["Add"] = "Añadir"
L["Added Instance ID: %s"] = "ID de instancia agregado: %s"
L["Added Map ID: %s"] = "ID de mapa agregado: %s"
L["Added Subzone Name: %s"] = "Nombre de subzona agregado: %s"
L["Added Zone Name: %s"] = "Nombre de zona agregado: %s"
L["Additional Power Prediction Color"] = "Color de predicción de poder adicional"
L["Additional Power"] = true
L["Additional Power"] = "Espaciado Energía."
L["Additional spacing between each individual group."] = "Espaciado adicional entre cada grupo individual."
L["Additive Blend"] = "Mezcla Aditiva"
L["AddOn Manager"] = "Gestor de Complementos"
L["Adds an arrow infront of the chat lines to copy the entire line."] = "Agrega una flecha frente a las líneas de chat para copiar toda la línea."
L["Adjust the height of your left chat panel."] = true
L["Adjust the height of your left chat panel."] = "Ajuste la altura del panel de chat izquierda."
L["Adjust the height of your right chat panel."] = "Ajuste la altura del panel de chat derecho."
L["Adjust the size of the minimap."] = "Ajusta el tamaño del minimapa."
L["Adjust the width of the bag frame."] = "Ajustar el ancho del marco de las bolsas."
L["Adjust the width of the bank frame."] = "Ajustar el ancho del marco del banco."
L["Adjust the width of your left chat panel."] = true
L["Adjust the width of your left chat panel."] = "Ajusta el ancho del panel de chat izquierda."
L["Adjust the width of your right chat panel."] = "Ajusta el ancho del panel de chat derecho."
L["ADVENTURE_MAP_TITLE"] = "Mapa de exploración"
L["Alert Frames"] = "Alertas"
@ -177,8 +178,8 @@ L["BATTLEFIELDS"] = "Campos de batalla"
L["Battleground Friendly"] = "Campo de Batalla Amistoso"
L["Battleground Texts"] = "Textos de los Campos de Batalla"
L["Begin a new row or column after this many auras."] = "Empieza una nueva fila o columna después de estas auras."
L["Below Chat (Inside)"] = true
L["Below Chat"] = "Debajo del Chat"
L["Below Chat (Inside)"] = "Debajo Chat (Interior)"
L["Below Chat"] = "Debajo Chat"
L["Below"] = "Debajo"
L["BG Map"] = "Mapa de CB"
L["BG Score"] = "Puntuación de CB"

1
Interface/AddOns/ElvUI_Options/Locales/frFR.lua

@ -1,6 +1,7 @@
-- French localization file for frFR.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "frFR")
L["Empower Stages"] = true
L["%s and then %s"] = "%s et alors %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

1
Interface/AddOns/ElvUI_Options/Locales/itIT.lua

@ -1,6 +1,7 @@
-- Italian localization file for enUS and enGB.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "itIT")
L["Empower Stages"] = true
L["%s and then %s"] = true
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

1
Interface/AddOns/ElvUI_Options/Locales/koKR.lua

@ -1,6 +1,7 @@
-- Korean localization file for koKR.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "koKR")
L["Empower Stages"] = true
L["%s and then %s"] = "%s 이후 %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

1
Interface/AddOns/ElvUI_Options/Locales/ptBR.lua

@ -1,6 +1,7 @@
-- Portuguese localization file for ptBR.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "ptBR")
L["Empower Stages"] = true
L["%s and then %s"] = "%s e depois %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = true
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

1
Interface/AddOns/ElvUI_Options/Locales/ruRU.lua

@ -1,6 +1,7 @@
-- Russian localization file for ruRU.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "ruRU")
L["Empower Stages"] = true
L["%s and then %s"] = "%s, а затем %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = "|cffFF3333 Это не работает в подземельях и гарнизонах!"
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = true

1
Interface/AddOns/ElvUI_Options/Locales/trTR.lua

@ -1,6 +1,7 @@
-- Turkish localization file for trTR.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "trTR")
L["Empower Stages"] = true
L["%s and then %s"] = "%s ve ardından %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = "|cffFF3333Bu, orneklerde veya Garnizonlarda calismaz!|r"
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = "|cffFF3333Bu bilgi amaclidir. Bu, kullanici arayuzundeki etiketleri degistirmez.|r"

1
Interface/AddOns/ElvUI_Options/Locales/zhCN.lua

@ -1,6 +1,7 @@
-- Simplified Chinese localization file for zhCN.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "zhCN")
L["Empower Stages"] = true
L["%s and then %s"] = "%s 于 %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = "|cffFF3333这在副本或要塞中不起作用!|r"
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = "|cffFF3333这是为了提供信息。 这不会更改 UI 中的标签。|r"

1
Interface/AddOns/ElvUI_Options/Locales/zhTW.lua

@ -1,6 +1,7 @@
-- Traditional Chinese localization file for zhTW.
local L = ElvUI[1].Libs.ACL:NewLocale("ElvUI", "zhTW")
L["Empower Stages"] = true
L["%s and then %s"] = "%s 與 %s"
L["|cffFF3333This does not work in Instances or Garrisons!|r"] = "|cffFF3333這個功能在副本或要塞中無法正常使用!|r"
L["|cffFF3333This is for information. This will not change the tags in the UI.|r"] = "|cffFF3333注意: 這不會改變在介面上的標籤.|r"

1
Interface/AddOns/Rematch/Cards/PetCard.lua

@ -16,6 +16,7 @@ local expansionCoords = {
[6] = {0.3955078125,0.5908203125,0.53125,0.921875}, -- legion
[7] = {0.3955078125,0.5908203125,0,0.390625}, -- battle for azeroth
[8] = {0.5927734375,0.7880859375,0,0.390625}, -- shadowlands
[9] = {0.791015625,0.986328125,0,0.390625}, -- dragonflight
}
rematch:InitModule(function()

19
Interface/AddOns/Rematch/Menus/PetMenus.lua

@ -360,15 +360,16 @@ rematch:InitModule(function()
},rematch.UpdateRoster)
rematch:RegisterMenu("PetExpansion", {
{ text=EXPANSION_NAME0, check=true, group="Expansion", size=9, var=0, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME1, check=true, group="Expansion", size=9, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME2, check=true, group="Expansion", size=9, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME3, check=true, group="Expansion", size=9, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME4, check=true, group="Expansion", size=9, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME5, check=true, group="Expansion", size=9, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME6, check=true, group="Expansion", size=9, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME7, check=true, group="Expansion", size=9, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME8, check=true, group="Expansion", size=9, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME0, check=true, group="Expansion", size=10, var=0, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME1, check=true, group="Expansion", size=10, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME2, check=true, group="Expansion", size=10, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME3, check=true, group="Expansion", size=10, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME4, check=true, group="Expansion", size=10, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME5, check=true, group="Expansion", size=10, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME6, check=true, group="Expansion", size=10, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME7, check=true, group="Expansion", size=10, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME8, check=true, group="Expansion", size=10, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=EXPANSION_NAME9, check=true, group="Expansion", size=10, var=9, value=rmf.GetValue, func=rmf.ToggleValue },
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
{ text=RESET, group="Expansion", stay=true, func=rmf.ResetGroup },
},rematch.UpdateRoster)

3
Interface/AddOns/Rematch/Process/PetInfo.lua

@ -171,7 +171,8 @@ local expansionRanges = {
[5] = {1384,1693}, -- Warlords of Draenor
[6] = {1699,2163}, -- Legion
[7] = {2165,2872}, -- Battle for Azeroth
[8] = {2878,9999}, -- Shadowlands (next expansion, get max speciesID for Shadowlands and change 9999 to that)
[8] = {2878,3255}, -- Shadowlands
[9] = {3256,9999}, -- Dragonflight
}
-- the majority of pets fall into a range for each expansion above, except for some outliers. these are the

4
Interface/AddOns/Rematch/Rematch.toc

@ -1,8 +1,8 @@
## Interface: 100000
## Interface: 100002
## Title: Rematch
## Notes: A pet journal alternative for managing pets and teams.
## Author: Gello
## Version: 4.14.4
## Version: 4.14.5
## X-WoWI-ID: 22190
## X-Wago-ID: e56nOpK9
## X-Curse-Project-ID: 66047

33
Interface/AddOns/Rematch/Widgets/Toolbar.lua

@ -277,7 +277,8 @@ function toolbar:ButtonOnLeave()
end
-- all toolbar buttons use this PreClick, but only heals and treats do anything for now
function toolbar:ButtonPreClick()
function toolbar:ButtonPreClick(button,down)
if GetCVarBool("ActionButtonUseKeyDown")~=down then return end
if InCombatLockdown() then return end
-- for heal/bandage button, check if all pets are fully healed and prevent use if so
if self==toolbar.Heal or self==toolbar.Bandage then
@ -324,7 +325,8 @@ function toolbar:ButtonPreClick()
end
-- all toolbar buttons use this PostClick
function toolbar:ButtonPostClick(button)
function toolbar:ButtonPostClick(button,down)
if GetCVarBool("ActionButtonUseKeyDown")~=down then return end
-- for heal, bandage and treat buttons that are turned off in their pre-click
if self.backupAttribute then
self:SetAttribute("type",self.backupAttribute)
@ -344,7 +346,8 @@ end
-- for the latter three which have a redirect keyvalue, it passes its click to the
-- BottomPanel[redirect] version of those buttons.
-- for SummonRandom it just does the summon/dismiss business.
function toolbar:ButtonOnClick(button)
function toolbar:ButtonOnClick(button,down)
if GetCVarBool("ActionButtonUseKeyDown")~=down then return end
if self.redirect then
rematch.BottomPanel[self.redirect]:Click()
elseif self==toolbar.SummonRandom then
@ -445,3 +448,27 @@ function toolbar:PetCountOnEnter()
end
rematch.ShowTooltip(self.PetCount,BATTLE_PETS_TOTAL_PETS,format(L["%s\n\nPets At Max Level: %s%d\124r\nPets Not Collected: %s%d\124r\n\n%s Click to display more about your collection."],format(BATTLE_PETS_TOTAL_PETS_TOOLTIP,C_PetJournal.GetNumMaxPets and C_PetJournal.GetNumMaxPets() or ""),rematch.hexWhite,at25,rematch.hexWhite,missing,rematch.LMB))
end
function rematch:ToggleAchievementFrame()
ToggleAchievementFrame()
if AchievementFrame:IsVisible() then
-- some of this is lifted out of AchievementFrameCategories_SelectDefaultElementData() in Blizzard_AchievementUI.lua
if not AchievementFrameCategories.ScrollBox:HasDataProvider() then
AchievementFrameCategories_UpdateDataProvider()
end
-- find the Pet Battles index in the data provider
local categoryIndex
for index,info in AchievementFrameCategories.ScrollBox:GetDataProvider():Enumerate() do
if info.id==15117 then
categoryIndex = index
end
end
-- go to that category if it exists
if categoryIndex then
local elementData = AchievementFrameCategories.ScrollBox:ScrollToElementDataIndex(categoryIndex, ScrollBoxConstants.AlignCenter, ScrollBoxConstants.NoScrollInterpolation);
if elementData then
AchievementFrameCategories_SelectElementData(elementData)
end
end
end
end

26
Interface/AddOns/Rematch/Widgets/Toolbar.xml

@ -35,10 +35,10 @@
RematchToolbar.ButtonOnLeave(self)
</OnLeave>
<PreClick>
RematchToolbar.ButtonPreClick(self,button)
RematchToolbar.ButtonPreClick(self,button,down)
</PreClick>
<PostClick>
RematchToolbar.ButtonPostClick(self,button)
RematchToolbar.ButtonPostClick(self,button,down)
</PostClick>
<OnDragStart>
RematchToolbar.ButtonOnDragStart(self)
@ -172,17 +172,7 @@
</Anchors>
<Scripts>
<OnClick>
ToggleAchievementFrame()
local i = 1
local button = _G["AchievementFrameCategoriesContainerButton"..i]
while button do
if button.element.id == 15117 then
button:Click()
return
end
i = i + 1
button = _G["AchievementFrameCategoriesContainerButton"..i]
end
Rematch:ToggleAchievementFrame()
</OnClick>
<OnEnter>
self:GetParent().Highlight:Show()
@ -304,7 +294,7 @@
</Layers>
<Scripts>
<OnClick>
RematchToolbar.ButtonOnClick(self,button)
RematchToolbar.ButtonOnClick(self,button,down)
</OnClick>
</Scripts>
</Button>
@ -314,7 +304,7 @@
</KeyValues>
<Scripts>
<OnClick>
RematchToolbar.ButtonOnClick(self,button)
RematchToolbar.ButtonOnClick(self,button,down)
</OnClick>
</Scripts>
</Button>
@ -325,7 +315,7 @@
</KeyValues>
<Scripts>
<OnClick>
RematchToolbar.ButtonOnClick(self,button)
RematchToolbar.ButtonOnClick(self,button,down)
</OnClick>
</Scripts>
</Button>
@ -336,7 +326,7 @@
</KeyValues>
<Scripts>
<OnClick>
RematchToolbar.ButtonOnClick(self,button)
RematchToolbar.ButtonOnClick(self,button,down)
</OnClick>
</Scripts>
</Button>
@ -357,7 +347,7 @@
</Layers>
<Scripts>
<OnClick>
RematchToolbar.ButtonOnClick(self,button)
RematchToolbar.ButtonOnClick(self,button,down)
</OnClick>
</Scripts>
</Button>

6
Interface/AddOns/Rematch/changelog.txt

@ -1,3 +1,9 @@
11/15/2022 version 4.14.5
- Added Dragonflight to Expansion pet filter.
- Clicking a toolbar button and holding it down won't click it again on release.
- Clicking the achievement total at the top of the dialog will jump to the Pet Battles achievement category.
- toc update for 10.0.2
10/30/2022 version 4.14.4
- Updated appearance of option list and target list headers.
- Updated appearance of frame titlebar/borders for main window, pet card, notes, win record and dialogs.

12
Interface/AddOns/WIM/CHANGELOG.md

@ -1,7 +1,11 @@
# WIM
## [3.9.10](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/tree/3.9.10) (2022-11-07)
[Full Changelog](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/compare/3.9.9...3.9.10) [Previous Releases](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/releases)
## [3.9.11](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/tree/3.9.11) (2022-11-15)
[Full Changelog](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/compare/3.9.10...3.9.11) [Previous Releases](https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger/releases)
- fix(History): reference correct table in OnDisable
- fix(ClickControl): refactor behavior so module doesn't need to be unregistered if WIM is disabled.
- Merge branch 'master' of https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger
- Bump TOC
- Fix Emoticons and URLHandler bug introducted by ElvUI string encoding which broke gsub. #21
- Merge branch 'master' of https://github.com/Legacy-of-Sylvanaar/wow-instant-messenger
- Fix Emoticons and URLHandler bug introducted by ElvUI string encoding which broke gsub.
- Bump TOC file

5
Interface/AddOns/WIM/Modules/Emoticons.lua

@ -69,6 +69,8 @@ local function decodeColors(theMsg)
end
local function filterEmoticons(theMsg, smf)
-- sanitize string of any % characters
theMsg = string.gsub(theMsg, "%%", "%%%%");
--safety check...
if(not theMsg or theMsg == "") then
@ -152,6 +154,9 @@ local function filterEmoticons(theMsg, smf)
LinkRepository[key] = nil;
end
-- desanitize string of any % characters
theMsg = string.gsub(theMsg, "%%%%", "%%");
return decodeColors((playerLink or "")..theMsg);
end

57
Interface/AddOns/WIM/Modules/URLHandler.lua

@ -133,32 +133,41 @@ local function decodeColors(theMsg)
end
local function convertURLtoLinks(text)
-- clean text first
local theMsg = text;
local results;
theMsg = decodeURI(theMsg)
theMsg = encodeColors(theMsg);
repeat
theMsg, results = string.gsub(theMsg, "(|H[^|]+|h[^|]+|h)", function(theLink)
table.insert(LinkRepository, theLink);
return "\001\004"..#LinkRepository;
end, 1);
until results == 0;
-- create urls
for i=1, table.getn(patterns) do
theMsg = string.gsub(theMsg, patterns[i], formatRawURL);
end
_G.test = text
--restore links
for i=1, #LinkRepository do
theMsg = string.gsub(theMsg, "\001\004"..i.."", LinkRepository[i]);
end
-- clean text first
local theMsg = text;
local results;
-- clear table to be recycled by next process
for key, _ in pairs(LinkRepository) do
LinkRepository[key] = nil;
end
-- sanitize string of any % characters
theMsg = string.gsub(theMsg, "%%", "%%%%");
theMsg = decodeURI(theMsg)
theMsg = encodeColors(theMsg);
repeat
theMsg, results = string.gsub(theMsg, "(|H[^|]+|h[^|]+|h)", function(theLink)
table.insert(LinkRepository, theLink);
return "\001\004"..#LinkRepository;
end, 1);
until results == 0;
-- create urls
for i=1, table.getn(patterns) do
theMsg = string.gsub(theMsg, patterns[i], formatRawURL);
end
--restore links
for i=1, #LinkRepository do
theMsg = string.gsub(theMsg, "\001\004"..i.."", LinkRepository[i]);
end
-- clear table to be recycled by next process
for key, _ in pairs(LinkRepository) do
LinkRepository[key] = nil;
end
-- desanitize string of any % characters
theMsg = string.gsub(theMsg, "%%%%", "%%");
return decodeColors(theMsg);
end

2
Interface/AddOns/WIM/WIM.lua

@ -15,7 +15,7 @@ setfenv(1, WIM);
-- Core information
addonTocName = "WIM";
version = "3.9.10";
version = "3.9.11";
beta = false; -- flags current version as beta.
debug = false; -- turn debugging on and off.
useProtocol2 = true; -- test switch for new W2W Protocol. (Dev use only)

4
Interface/AddOns/WIM/WIM.toc

@ -1,11 +1,11 @@
## Interface: 100000
## Interface: 100002
## X-Curse-Project-ID: 7474
## X-WoWI-ID: 5342
## Title: WIM
## Author: Pazza (Bronzebeard), (Updated by Sylvanaar/MysticalOS/Humfras)
## Version: 3.9.10
## Version: 3.9.11
## Notes: Give whispers an instant messenger feel.
## Notes-esES: Dale a los susurros una sensación de mensajería instantánea.
## Notes-esMX: Dale a los susurros una sensación de mensajería instantánea.

2
Interface/AddOns/WIM/WIM_TBC.toc

@ -5,7 +5,7 @@
## Title: WIM
## Author: Pazza (Bronzebeard), (Updated by Sylvanaar/MysticalOS/Humfras)
## Version: 3.9.10
## Version: 3.9.11
## Notes: Give whispers an instant messenger feel.
## Notes-esES: Dale a los susurros una sensación de mensajería instantánea.
## Notes-esMX: Dale a los susurros una sensación de mensajería instantánea.

2
Interface/AddOns/WIM/WIM_Vanilla.toc

@ -5,7 +5,7 @@
## Title: WIM
## Author: Pazza (Bronzebeard), (Updated by Sylvanaar/MysticalOS/Humfras)
## Version: 3.9.10
## Version: 3.9.11
## Notes: Give whispers an instant messenger feel.
## Notes-esES: Dale a los susurros una sensación de mensajería instantánea.
## Notes-esMX: Dale a los susurros una sensación de mensajería instantánea.

2
Interface/AddOns/WIM/WIM_Wrath.toc

@ -5,7 +5,7 @@
## Title: WIM
## Author: Pazza (Bronzebeard), (Updated by Sylvanaar/MysticalOS/Humfras)
## Version: 3.9.10
## Version: 3.9.11
## Notes: Give whispers an instant messenger feel.
## Notes-esES: Dale a los susurros una sensación de mensajería instantánea.
## Notes-esMX: Dale a los susurros una sensación de mensajería instantánea.

40
Interface/AddOns/WeakAuras/CHANGELOG.md

@ -1,21 +1,41 @@
# [5.1.1](https://github.com/WeakAuras/WeakAuras2/tree/5.1.1) (2022-11-08)
# [5.2.0](https://github.com/WeakAuras/WeakAuras2/tree/5.2.0) (2022-11-15)
[Full Changelog](https://github.com/WeakAuras/WeakAuras2/compare/5.1.0...5.1.1)
[Full Changelog](https://github.com/WeakAuras/WeakAuras2/compare/5.1.1...5.2.0)
## Highlights
- Bug Fixes
- Replace Sliders in options with new SpinBox widget
- Add Blizzard Atlas textures to the picker
- Bug Fixes
## Commits
InfusOnWoW (3):
InfusOnWoW (5):
- MoverSizer: Skip regions that are anchoring restricted
- Remove useless debug prints
- Change how z-scale is interpreted
- Add some nil check for Private.regions[id].region
- Fix diff algorithm to correctly allow for ignoring nested values
- Options: Make dragEnd run the trigger functions again
- Fix Conditions with paused states
- Make IsSpellKnown* checks check the base spell more correctly
mrbuds (2):
Jesse Manelius (1):
- Fix talent trigger active when wrong choice node is selected
- Fix error with dynamic group background/border positioning
- Use SetClampedToScreen on title instead of using complicated code
Stanzilla (1):
- Bump retail TOC for Patch 10.0.2
Tharre (2):
- Crowd Controlled: enable for classic era
- Spell Cooldown: enable LOC option for classic
mrbuds (5):
- Texture picker: keep aspect ratio for atlas in preview
- fix broken zoom on icons
- Texture Picker: add "Blizzard Atlas" category with all atlas (#3966)
- Add "blizzard alert" textures for evoker
- SpinBox Widget (#3981)

32
Interface/AddOns/WeakAuras/Conditions.lua

@ -130,6 +130,12 @@ local function formatValueForCall(type, property)
end
function Private.ExecEnv.CancelConditionCheck(uid, cloneId)
if conditionChecksTimers.recheckHandle[uid] and conditionChecksTimers.recheckHandle[uid][cloneId] then
timer:CancelTimer(conditionChecksTimers.recheckHandle[uid][cloneId])
conditionChecksTimers.recheckHandle[uid][cloneId] = nil
end
end
function Private.ExecEnv.ScheduleConditionCheck(time, uid, cloneId)
conditionChecksTimers.recheckTime[uid] = conditionChecksTimers.recheckTime[uid] or {}
@ -258,21 +264,22 @@ local function CreateTestForCondition(uid, input, allConditionsTemplate, usedSta
end
end
elseif (cType == "timer" and value and op) then
local triggerState = "state[" .. trigger .. "]"
local varString = triggerState .. string.format("[%q]", variable)
local remaingTime = "(" .. triggerState .. ".paused and (" .. triggerState .. ".remaining or 0) or (" .. varString .. " - now)" .. ")"
if useModRate then
local modRateString = "(state[" .. trigger .. "].modRate or 1.0)"
if (op == "==") then
check = stateCheck .. stateVariableCheck .. "abs(((state[" .. trigger .. "]" .. string.format("[%q]", variable)
.. "- now) " .. "/ (state[" .. trigger .. "].modRate or 1.0))" .. " -" .. value .. ") < 0.05"
check = stateCheck .. stateVariableCheck .. "abs((" .. remaingTime .. "-" .. value .. ")/" .. modRateString .. ") < 0.05"
else
check = stateCheck .. stateVariableCheck .. "((state[" .. trigger .. "]" .. string.format("[%q]", variable)
.. "- now) / (state[" .. trigger .. "].modRate or 1.0))" .. op .. value;
check = stateCheck .. stateVariableCheck .. remaingTime .. "/" .. modRateString .. op .. value
end
else
if (op == "==") then
check = stateCheck .. stateVariableCheck .. "abs(state[" .. trigger .. "]" .. string.format("[%q]", variable)
.. "- now -" .. value .. ") < 0.05";
check = stateCheck .. stateVariableCheck .. "abs(" .. remaingTime .. "-" .. value .. ") < 0.05"
else
check = stateCheck .. stateVariableCheck .. "state[" .. trigger .. "]" .. string.format("[%q]", variable)
.. "- now" .. op .. value;
check = stateCheck .. stateVariableCheck .. remaingTime .. op .. value
end
end
elseif (cType == "elapsedTimer" and value and op) then
@ -357,9 +364,9 @@ local function CreateTestForCondition(uid, input, allConditionsTemplate, usedSta
-- If adding a new condition type, don't forget to adjust the validator in the options code
if (cType == "timer" and value) then
recheckCode = " nextTime = state[" .. trigger .. "] and state[" .. trigger .. "]"
.. string.format("[%q]", variable) .. " and (state[" .. trigger .. "]"
.. string.format("[%q]", variable) .. " - " .. value .. ")\n"
recheckCode = " nextTime = state[" .. trigger .. "] and not state[" .. trigger .. "].paused"
.. " and state[" .. trigger .. "]" .. string.format("[%q]", variable)
.. " and (state[" .. trigger .. "]" .. string.format("[%q]", variable) .. " - " .. value .. ")\n"
recheckCode = recheckCode .. " if (nextTime and (not recheckTime or nextTime < recheckTime) and nextTime >= now) then\n"
recheckCode = recheckCode .. " recheckTime = nextTime\n";
recheckCode = recheckCode .. " end\n"
@ -613,6 +620,7 @@ local globalConditions =
["rangecheck"] = {
display = WeakAuras.newFeatureString .. L["Range Check"],
type = "range",
control = "WeakAurasSpinBox",
events = {"WA_SPELL_RANGECHECK"}
},
["attackabletarget"] = {
@ -682,6 +690,8 @@ local function ConstructConditionFunction(data)
ret = ret .. " if (recheckTime) then\n"
ret = ret .. " Private.ExecEnv.ScheduleConditionCheck(recheckTime, uid, cloneId);\n"
ret = ret .. " else\n"
ret = ret .. " Private.ExecEnv.CancelConditionCheck(uid, cloneId)"
ret = ret .. " end\n"
local properties = Private.GetProperties(data);

6
Interface/AddOns/WeakAuras/Init.lua

@ -239,8 +239,8 @@ WeakAuras.halfWidth = WeakAuras.normalWidth / 2
WeakAuras.doubleWidth = WeakAuras.normalWidth * 2
local versionStringFromToc = GetAddOnMetadata("WeakAuras", "Version")
local versionString = "5.1.1"
local buildTime = "20221108192300"
local versionString = "5.2.0"
local buildTime = "20221115183018"
local flavorFromToc = GetAddOnMetadata("WeakAuras", "X-Flavor")
local flavorFromTocToNumber = {
@ -252,7 +252,7 @@ local flavorFromTocToNumber = {
local flavor = flavorFromTocToNumber[flavorFromToc]
--[==[@debug@
if versionStringFromToc == "5.1.1" then
if versionStringFromToc == "5.2.0" then
versionStringFromToc = "Dev"
buildTime = "Dev"
end

339
Interface/AddOns/WeakAuras/Libs/LibCustomGlow-1.0/LICENSE.md

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

2
Interface/AddOns/WeakAuras/Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.toc

@ -4,7 +4,7 @@
## Author: deezo
## X-Category: Library
## X-License: BSD
## Version: 357b944
## Version: e685cd9
## OptionalDeps: Masque
LibStub\LibStub.lua

54
Interface/AddOns/WeakAuras/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua

@ -6,7 +6,7 @@
--
local DBICON10 = "LibDBIcon-1.0"
local DBICON10_MINOR = 44 -- Bump on changes
local DBICON10_MINOR = 45 -- Bump on changes
if not LibStub then error(DBICON10 .. " requires LibStub.") end
local ldb = LibStub("LibDataBroker-1.1", true)
if not ldb then error(DBICON10 .. " requires LibDataBroker-1.1.") end
@ -225,26 +225,42 @@ local function createButton(name, object, db)
button:RegisterForClicks("anyUp")
button:RegisterForDrag("LeftButton")
button:SetHighlightTexture(136477) --"Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight"
local overlay = button:CreateTexture(nil, "OVERLAY")
overlay:SetSize(53, 53)
overlay:SetTexture(136430) --"Interface\\Minimap\\MiniMap-TrackingBorder"
overlay:SetPoint("TOPLEFT")
local background = button:CreateTexture(nil, "BACKGROUND")
background:SetSize(20, 20)
background:SetTexture(136467) --"Interface\\Minimap\\UI-Minimap-Background"
background:SetPoint("TOPLEFT", 7, -5)
local icon = button:CreateTexture(nil, "ARTWORK")
icon:SetSize(17, 17)
icon:SetTexture(object.icon)
icon:SetPoint("TOPLEFT", 7, -6)
button.icon = icon
button.isMouseDown = false
if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then
local overlay = button:CreateTexture(nil, "OVERLAY")
overlay:SetSize(50, 50)
overlay:SetTexture(136430) --"Interface\\Minimap\\MiniMap-TrackingBorder"
overlay:SetPoint("TOPLEFT", button, "TOPLEFT", 0, 0)
local background = button:CreateTexture(nil, "BACKGROUND")
background:SetSize(24, 24)
background:SetTexture(136467) --"Interface\\Minimap\\UI-Minimap-Background"
background:SetPoint("CENTER", button, "CENTER", 0, 1)
local icon = button:CreateTexture(nil, "ARTWORK")
icon:SetSize(18, 18)
icon:SetTexture(object.icon)
icon:SetPoint("CENTER", button, "CENTER", 0, 1)
button.icon = icon
else
local overlay = button:CreateTexture(nil, "OVERLAY")
overlay:SetSize(53, 53)
overlay:SetTexture(136430) --"Interface\\Minimap\\MiniMap-TrackingBorder"
overlay:SetPoint("TOPLEFT")
local background = button:CreateTexture(nil, "BACKGROUND")
background:SetSize(20, 20)
background:SetTexture(136467) --"Interface\\Minimap\\UI-Minimap-Background"
background:SetPoint("TOPLEFT", 7, -5)
local icon = button:CreateTexture(nil, "ARTWORK")
icon:SetSize(17, 17)
icon:SetTexture(object.icon)
icon:SetPoint("TOPLEFT", 7, -6)
button.icon = icon
end
local r, g, b = icon:GetVertexColor()
icon:SetVertexColor(object.iconR or r, object.iconG or g, object.iconB or b)
button.isMouseDown = false
local r, g, b = button.icon:GetVertexColor()
button.icon:SetVertexColor(object.iconR or r, object.iconG or g, object.iconB or b)
icon.UpdateCoord = updateCoord
icon:UpdateCoord()
button.icon.UpdateCoord = updateCoord
button.icon:UpdateCoord()
button:SetScript("OnEnter", onEnter)
button:SetScript("OnLeave", onLeave)

17
Interface/AddOns/WeakAuras/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua

@ -41,14 +41,13 @@ License: Public Domain
-- @class file
-- @name LibRangeCheck-2.0
local MAJOR_VERSION = "LibRangeCheck-2.0"
local MINOR_VERSION = tonumber(("$Revision: 215 $"):match("%d+")) + 100000
local MINOR_VERSION = tonumber(("$Revision: 216 $"):match("%d+")) + 100000
local lib, oldminor = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
if not lib then return end
local isRetail = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
local isClassic = WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
local isTBC = WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC
local isWrath = WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC
-- GLOBALS: LibStub, CreateFrame, C_Map, FriendColor (??), HarmColor (??)
local _G = _G
@ -116,10 +115,18 @@ local InteractLists = {
local MeleeRange = 2
local FriendSpells, HarmSpells, ResSpells, PetSpells = {}, {}, {}, {}
for _, n in ipairs({ 'DEATHKNIGHT', 'DEMONHUNTER', 'DRUID', 'HUNTER', 'SHAMAN', 'MAGE', 'PALADIN', 'PRIEST', 'WARLOCK', 'WARRIOR', 'MONK', 'ROGUE' }) do
for _, n in ipairs({ 'EVOKER', 'DEATHKNIGHT', 'DEMONHUNTER', 'DRUID', 'HUNTER', 'SHAMAN', 'MAGE', 'PALADIN', 'PRIEST', 'WARLOCK', 'WARRIOR', 'MONK', 'ROGUE' }) do
FriendSpells[n], HarmSpells[n], ResSpells[n], PetSpells[n] = {}, {}, {}, {}
end
-- Evoker
tinsert(HarmSpells.EVOKER, 369819) -- Disintegrate (25 yards)
tinsert(FriendSpells.EVOKER, 361469) -- Living Flame (25 yards)
tinsert(FriendSpells.EVOKER, 360823) -- Naturalize (Preservation) (30 yards)
tinsert(ResSpells.EVOKER, 361227) -- Return (40 yards)
-- Death Knights
tinsert(HarmSpells.DEATHKNIGHT, 49576) -- Death Grip (30 yards)
tinsert(HarmSpells.DEATHKNIGHT, 47541) -- Death Coil (Unholy) (40 yards)
@ -1179,7 +1186,7 @@ function lib:activate()
frame:RegisterEvent("CHARACTER_POINTS_CHANGED")
frame:RegisterEvent("SPELLS_CHANGED")
if isRetail then
if isRetail or isWrath then
frame:RegisterEvent("PLAYER_TALENT_UPDATE")
end

2
Interface/AddOns/WeakAuras/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.toc

@ -2,7 +2,7 @@
## Title: Lib: RangeCheck-2.0
## Notes: A library to determine estimated range.
## Author: mitch0
## Version: ed1715d
## Version: 4697c61
## LoadOnDemand: 1
## X-Category: Library
## X-AceLibrary-LibRangeCheck-2.0: true

5
Interface/AddOns/WeakAuras/Locales/koKR.lua

@ -318,8 +318,7 @@ L["Conditions"] = "조건"
L["Contains"] = "포함"
L["Continuously update Movement Speed"] = "이동 속도 계속 업데이트"
L["Cooldown"] = "재사용 대기시간"
--[[Translation missing --]]
L["Cooldown bars show time before an ability is ready to be use, BigWigs prefix them with '~'"] = "Cooldown bars show time before an ability is ready to be use, BigWigs prefix them with '~'"
L["Cooldown bars show time before an ability is ready to be use, BigWigs prefix them with '~'"] = "재사용 대기시간 바는 능력을 사용할 준비가 되기까지의 시간을 표시하며 BigWigs는 '~'를 접두사로 붙입니다."
L["Cooldown Progress (Item)"] = "재사용 대기시간 진행 (아이템)"
L["Cooldown Progress (Slot)"] = "재사용 대기시간 진행 상황 (아이템 칸)"
L["Cooldown Ready Event"] = "재사용 준비 이벤트"
@ -1160,7 +1159,7 @@ L["Seconds"] = "초"
L[ [=[Secure frame detected. Find more information:
https://github.com/WeakAuras/WeakAuras2/wiki/Protected-Frames]=] ] = [=[Secure frame detected. Find more information:
https://github.com/WeakAuras/WeakAuras2/wiki/Protected-Frames]=]
L["Select Frame"] = "프레임 선택"
L["Select Frame"] = "선택 프레임"
--[[Translation missing --]]
L["Separator"] = "Separator"
L["Set IDs can be found on websites such as classic.wowhead.com/item-sets"] = "세트 ID는 classic.wowhead.com/item-sets와 같은 웹사이트에서 찾을 수 있습니다."

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxleft.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxlefth.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxleftp.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxoverlay.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxright.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxrighth.tga

Binary file not shown.

BIN
Interface/AddOns/WeakAuras/Media/Textures/spinboxrightp.tga

Binary file not shown.

49
Interface/AddOns/WeakAuras/Prototypes.lua

@ -879,26 +879,40 @@ function Private.ExecEnv.CheckRaidFlags(flags, flagToCheck)
end
end
local function IsSpellKnownOrOverridesAndBaseIsKnown(spell, pet)
if IsSpellKnown(spell, pet) then
return true
end
local baseSpell = FindBaseSpellByID(spell)
if baseSpell and baseSpell ~= spell then
if FindSpellOverrideByID(baseSpell) == spell then
return IsSpellKnown(baseSpell, pet)
end
end
end
function WeakAuras.IsSpellKnownForLoad(spell, exact)
local result = IsPlayerSpell(spell) or IsSpellKnownOrOverridesKnown(spell, true)
local result = IsPlayerSpell(spell)
or IsSpellKnownOrOverridesAndBaseIsKnown(spell, false)
or IsSpellKnownOrOverridesAndBaseIsKnown(spell, true)
if exact or result then
return result
end
-- Dance through the spellname to the current spell id
spell = GetSpellInfo(spell)
if (spell) then
spell = select(7, GetSpellInfo(spell))
end
if spell then
return WeakAuras.IsSpellKnown(spell)
local spellName = GetSpellInfo(spell)
if (spellName) then
local otherSpell = select(7, GetSpellInfo(spellName))
if otherSpell and otherSpell ~= spell then
return WeakAuras.IsSpellKnownForLoad(otherSpell)
end
end
end
function WeakAuras.IsSpellKnown(spell, pet)
if (pet) then
return IsSpellKnownOrOverridesKnown(spell, pet);
return IsSpellKnownOrOverridesAndBaseIsKnown(spell, true)
end
return IsPlayerSpell(spell) or IsSpellKnownOrOverridesKnown(spell);
return IsPlayerSpell(spell) or IsSpellKnownOrOverridesAndBaseIsKnown(spell, false)
end
function WeakAuras.IsSpellKnownIncludingPet(spell)
@ -908,19 +922,7 @@ function WeakAuras.IsSpellKnownIncludingPet(spell)
if (not spell) then
return false;
end
if (WeakAuras.IsSpellKnown(spell) or WeakAuras.IsSpellKnown(spell, true)) then
return true;
end
-- WORKAROUND brain damage around void eruption
-- In shadow form void eruption is overridden by void bolt, yet IsSpellKnown for void bolt
-- returns false, whereas it returns true for void eruption
local baseSpell = FindBaseSpellByID(spell);
if (not baseSpell) then
return false;
end
if (baseSpell ~= spell) then
return WeakAuras.IsSpellKnown(baseSpell) or WeakAuras.IsSpellKnown(baseSpell, true);
end
return WeakAuras.IsSpellKnown(spell, false) or WeakAuras.IsSpellKnown(spell, true)
end
function Private.ExecEnv.CompareSpellIds(a, b, exactCheck)
@ -4334,8 +4336,6 @@ Private.event_prototypes = {
type = "toggle",
test = "true",
collapse = "extra Cooldown Progress (Spell)",
enable = WeakAuras.IsRetail(),
hidden = not WeakAuras.IsRetail()
},
{
name = "matchedRune",
@ -9473,7 +9473,6 @@ if WeakAuras.IsClassicOrBCCOrWrath() then
end
if not WeakAuras.IsWrathClassic() then
Private.event_prototypes["Death Knight Rune"] = nil
Private.event_prototypes["Crowd Controlled"] = nil
end
Private.event_prototypes["Alternate Power"] = nil
Private.event_prototypes["Equipment Set"] = nil

2
Interface/AddOns/WeakAuras/RegionTypes/Model.lua

@ -326,7 +326,7 @@ do
Private.StartProfileSystem("model");
for id, data in pairs(Private.regions) do
Private.StartProfileAura(id);
if data.region.toShow then
if data.region and data.region.toShow then
if (data.regionType == "model") then
data.region:PreShow();
end

6
Interface/AddOns/WeakAuras/RegionTypes/RegionPrototype.lua

@ -4,7 +4,7 @@ local AddonName, Private = ...
local WeakAuras = WeakAuras;
local L = WeakAuras.L;
local GetAtlasInfo = WeakAuras.IsClassic() and GetAtlasInfo or C_Texture.GetAtlasInfo
local GetAtlasInfo = C_Texture and C_Texture.GetAtlasInfo or GetAtlasInfo
WeakAuras.regionPrototype = {};
@ -975,7 +975,9 @@ function WeakAuras.regionPrototype.AddExpandFunction(data, region, cloneId, pare
end
function WeakAuras.SetTextureOrAtlas(texture, path, wrapModeH, wrapModeV)
if type(path) == "string" and GetAtlasInfo(path) then
texture.IsAtlas = type(path) == "string" and GetAtlasInfo(path) ~= nil
if texture.IsAtlas then
texture:SetTexCoord(0, 1, 0, 1)
return texture:SetAtlas(path);
else
if (texture.wrapModeH and texture.wrapModeH ~= wrapModeH) or (texture.wrapModeV and texture.wrapModeV ~= wrapModeV) then

4
Interface/AddOns/WeakAuras/RegionTypes/Texture.lua

@ -3,6 +3,7 @@ if not WeakAuras.IsLibsOK() then return end
local AddonName, Private = ...
local L = WeakAuras.L;
local GetAtlasInfo = C_Texture and C_Texture.GetAtlasInfo or GetAtlasInfo
local default = {
texture = "Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura3",
@ -112,6 +113,7 @@ local function modify(parent, region, data)
region.mirror = data.mirror
local function DoTexCoord()
if region.texture.IsAtlas then return end
local mirror_h, mirror_v = region.mirror_h, region.mirror_v;
if(region.mirror) then
mirror_h = not mirror_h;
@ -223,7 +225,7 @@ local function modify(parent, region, data)
region.texture:SetDesaturated(b);
end
if(data.rotate) then
if data.rotate then
function region:Rotate(degrees)
region.rotation = degrees;
DoTexCoord();

233
Interface/AddOns/WeakAuras/Types.lua

@ -229,6 +229,7 @@ Private.format_types = {
})
addOption(symbol .. "_abbreviate_max", {
type = "range",
control = "WeakAurasSpinBox",
name = L["Max Char "],
width = WeakAuras.normalWidth,
min = 1,
@ -264,6 +265,7 @@ Private.format_types = {
addOption(symbol .. "_time_dynamic_threshold", {
type = "range",
control = "WeakAurasSpinBox",
min = 0,
max = 60,
step = 1,
@ -452,6 +454,7 @@ Private.format_types = {
})
addOption(symbol .. "_abbreviate_max", {
type = "range",
control = "WeakAurasSpinBox",
name = L["Max Char "],
width = WeakAuras.normalWidth,
min = 1,
@ -579,6 +582,7 @@ Private.format_types = {
})
addOption(symbol .. "_abbreviate_max", {
type = "range",
control = "WeakAurasSpinBox",
name = L["Max Char "],
width = WeakAuras.normalWidth,
min = 1,
@ -1445,30 +1449,20 @@ Private.main_spell_schools = {
Private.texture_types = {
["Blizzard Alerts"] = {
["1027131"] = "Arcane Missiles 1",
["1027132"] = "Arcane Missiles 2",
["1027133"] = "Arcane Missiles 3",
["450913"] = "Art of War",
["801266"] = "Backlash_Green",
["460830"] = "Backslash",
["1030393"] = "Bandits Guile",
["510822"] = "Berserk",
["511104"] = "Blood Boil",
["424570"] = "Spell Activation Overlay 0",
["449486"] = "Arcane Missiles",
["449487"] = "Blood Surge",
["449488"] = "Brain Freeze",
["603338"] = "Dark Tiger",
["461878"] = "Dark Transformation",
["459313"] = "Daybreak",
["511469"] = "Denounce",
["2851787"] = "Demonic Core",
["2888300"] = "Demonic Core Vertical",
["1057288"] = "Echo of the Elements",
["449489"] = "Frozen Fingers",
["449490"] = "Hot Streak",
["449491"] = "Imp Empowerment",
["449492"] = "Nightfall",
["449493"] = "Sudden Death",
["449494"] = "Sword and Board",
["450913"] = "Art of War",
["450914"] = "Eclipse Moon",
["450915"] = "Eclipse Sun",
["450916"] = "Focus Fire",
["449489"] = "Frozen Fingers",
["467696"] = "Fulmination",
["460831"] = "Fury of Stormrage",
["450917"] = "Generic Arc 1",
["450918"] = "Generic Arc 2",
["450919"] = "Generic Arc 3",
@ -1478,83 +1472,97 @@ Private.texture_types = {
["450923"] = "Generic Top 1",
["450924"] = "Generic Top 2",
["450925"] = "Grand Crusader",
["459314"] = "Hand of Light",
["2851788"] = "High Tide",
["449490"] = "Hot Streak",
["801267"] = "Imp Empowerment Green",
["449491"] = "Imp Empowerment",
["457658"] = "Impact",
["458740"] = "Killing Machine",
["450926"] = "Lock and Load",
["1028136"] = "Maelstrom Weapon 1",
["1028137"] = "Maelstrom Weapon 2",
["1028138"] = "Maelstrom Weapon 3",
["1028139"] = "Maelstrom Weapon 4",
["450927"] = "Maelstrom Weapon",
["450928"] = "Master Marksman",
["801268"] = "Molten Core Green",
["450929"] = "Nature's Grace",
["450930"] = "Rime",
["450931"] = "Slice and Dice",
["450932"] = "Sudden Doom",
["450933"] = "Surge of Light",
["457658"] = "Impact",
["458740"] = "Killing Machine",
["458741"] = "Molten Core",
["1001511"] = "Monk Blackout Kick",
["1028091"] = "Monk Ox 2",
["1028092"] = "Monk Ox 3",
["459313"] = "Daybreak",
["459314"] = "Hand of Light",
["460830"] = "Backslash",
["460831"] = "Fury of Stormrage",
["461878"] = "Dark Transformation",
["463452"] = "Shooting Stars",
["467696"] = "Fulmination",
["469752"] = "Serendipity",
["510822"] = "Berserk",
["510823"] = "Omen of Clarity (Feral)",
["511104"] = "Blood Boil",
["511105"] = "Necropolis",
["511469"] = "Denounce",
["592058"] = "Surge of Darkness",
["603338"] = "Dark Tiger",
["603339"] = "White Tiger",
["623950"] = "Monk Ox",
["623951"] = "Monk Serpent",
["1001512"] = "Monk Tiger Palm",
["623952"] = "Monk Tiger",
["450929"] = "Nature's Grace",
["511105"] = "Necropolis",
["449492"] = "Nightfall",
["510823"] = "Omen of Clarity (Feral)",
["627609"] = "Shadow of Death",
["627610"] = "Ultimatum",
["656728"] = "Shadow Word Insanity",
["774420"] = "Tooth and Claw",
["801266"] = "Backlash_Green",
["801267"] = "Imp Empowerment Green",
["801268"] = "Molten Core Green",
["898423"] = "Predatory Swiftness",
["962497"] = "Raging Blow",
["450930"] = "Rime",
["469752"] = "Serendipity",
["656728"] = "Shadow Word Insanity",
["627609"] = "Shadow of Death",
["463452"] = "Shooting Stars",
["450931"] = "Slice and Dice",
["424570"] = "Spell Activation Overlay 0",
["449493"] = "Sudden Death",
["450932"] = "Sudden Doom",
["592058"] = "Surge of Darkness",
["450933"] = "Surge of Light",
["449494"] = "Sword and Board",
["1001511"] = "Monk Blackout Kick",
["1001512"] = "Monk Tiger Palm",
["1027131"] = "Arcane Missiles 1",
["1027132"] = "Arcane Missiles 2",
["1027133"] = "Arcane Missiles 3",
["1028091"] = "Monk Ox 2",
["1028092"] = "Monk Ox 3",
["1028136"] = "Maelstrom Weapon 1",
["1028137"] = "Maelstrom Weapon 2",
["1028138"] = "Maelstrom Weapon 3",
["1028139"] = "Maelstrom Weapon 4",
["1029138"] = "Thrill of the Hunt 1",
["1029139"] = "Thrill of the Hunt 2",
["1029140"] = "Thrill of the Hunt 3",
["774420"] = "Tooth and Claw",
["627610"] = "Ultimatum",
["603339"] = "White Tiger",
["1030393"] = "Bandits Guile",
["1057288"] = "Echo of the Elements",
["1518303"] = "Predatory Swiftness Green",
["2851787"] = "Demonic Core",
["2851788"] = "High Tide",
["2888300"] = "Demonic Core Vertical",
["4699056"] = "Essence Burst",
["4699057"] = "Snapfire",
},
["Icons"] = {
["166662"] = "Shield",
["165558"] = "Paw",
["166989"] = "Stun Whirl",
["166036"] = "Rage",
["165610"] = "Monkey",
["165605"] = "Feathers",
["165607"] = "Lion",
["240925"] = "Holy Ruin",
["166058"] = "Eyes",
["166606"] = "Leaf",
["166706"] = "Reticle",
["166984"] = "Crossed Swords",
["166418"] = "Inner Fire",
["165608"] = "Cheetah",
["240972"] = "Poison Skull",
["166680"] = "Rampage",
["165605"] = "Feathers",
["166423"] = "Intellect",
["165609"] = "Hawk",
["240961"] = "Crescent",
["166056"] = "Eye",
["165610"] = "Monkey",
["165611"] = "Snake",
["241049"] = "Star",
["166386"] = "Snowflake",
["165612"] = "Wolf",
["166036"] = "Rage",
["166056"] = "Eye",
["166058"] = "Eyes",
["166125"] = "Fire",
["166386"] = "Snowflake",
["166418"] = "Inner Fire",
["166423"] = "Intellect",
["166606"] = "Leaf",
["166662"] = "Shield",
["166680"] = "Rampage",
["166683"] = "Rapid Fire",
["166706"] = "Reticle",
["166948"] = "Spirit",
["166954"] = "Bull",
["166683"] = "Rapid Fire",
["166125"] = "Fire",
["166984"] = "Crossed Swords",
["166989"] = "Stun Whirl",
["240925"] = "Holy Ruin",
["240961"] = "Crescent",
["240972"] = "Poison Skull",
["241049"] = "Star",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\cancel-icon.tga"] = "Cancel Icon",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\cancel-mark.tga"] = "Cancel Mark",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\emoji.tga"] = "Emoji",
@ -1566,31 +1574,31 @@ Private.texture_types = {
},
["Runes"] = {
["165630"] = "Ringed Aura Rune",
["166341"] = "Holy Cross Rune",
["166757"] = "Circular Frost Rune",
["241005"] = "Dense Circular Rune",
["165927"] = "Demon Rune",
["241004"] = "Octagonal Skulls",
["166753"] = "Heavy BC Rune",
["165631"] = "Square Aura Rune",
["165633"] = "Tri-Circle Aura Rune",
["165634"] = "Tri-Circle Ringed Aura Rune",
["165635"] = "Spike-Ringed Aura Rune",
["165638"] = "Small Tri-Circle Aura Rune",
["165639"] = "Sliced Aura Rune",
["165640"] = "Oblong Aura Rune",
["165881"] = "Dark Summon",
["165885"] = "Death Rune",
["166749"] = "Ringed Circular Rune",
["165922"] = "Demonic Summon",
["165927"] = "Demon Rune",
["165928"] = "Demon Rune",
["165633"] = "Tri-Circle Aura Rune",
["165929"] = "Demon Rune",
["165634"] = "Tri-Circle Ringed Aura Rune",
["165635"] = "Spike-Ringed Aura Rune",
["166750"] = "Sparse Circular Rune",
["241003"] = "Dual Blades",
["165631"] = "Square Aura Rune",
["165881"] = "Dark Summon",
["166340"] = "Holy Rune",
["165640"] = "Oblong Aura Rune",
["166341"] = "Holy Cross Rune",
["166748"] = "Filled Circular Rune",
["166749"] = "Ringed Circular Rune",
["166750"] = "Sparse Circular Rune",
["166753"] = "Heavy BC Rune",
["166754"] = "Light BC Rune",
["166757"] = "Circular Frost Rune",
["166979"] = "Star Rune",
["241003"] = "Dual Blades",
["241004"] = "Octagonal Skulls",
["241005"] = "Dense Circular Rune",
},
["PvP Emblems"] = {
["Interface\\PVPFrame\\PVP-Banner-Emblem-1"] = "Wheelchair",
@ -1702,35 +1710,35 @@ Private.texture_types = {
["Interface\\PVPFrame\\Icons\\PVP-Banner-Emblem-101"] = "Eagle Face"
},
["Beams"] = {
["186198"] = "Lightning",
["186187"] = "Red Drops Beam",
["167096"] = "Gold Chain",
["186205"] = "Mana Burn Beam",
["186208"] = "Rope",
["186185"] = "Purple Beam",
["167097"] = "Iron Chain",
["167098"] = "Green Fire Beam",
["167099"] = "Red Fire Beam",
["186214"] = "Soul Beam",
["186189"] = "Drain Mana Lightning",
["167100"] = "Brown Smoke Beam",
["167101"] = "Grey Smoke Beam",
["167102"] = "Green Vine",
["167103"] = "Red Vine",
["186192"] = "Ethereal Ribbon",
["186201"] = "Red Lightning",
["241099"] = "Summon Gargoyle Beam",
["167104"] = "Blue Water Beam",
["167098"] = "Green Fire Beam",
["167105"] = "Green Water Beam",
["186185"] = "Purple Beam",
["186186"] = "Red Beam",
["167101"] = "Grey Smoke Beam",
["186187"] = "Red Drops Beam",
["186189"] = "Drain Mana Lightning",
["186192"] = "Ethereal Ribbon",
["186193"] = "Ghost Chain",
["186194"] = "Purple Ghost Chain",
["167102"] = "Green Vine",
["369750"] = "Shadow Beam",
["186195"] = "Heal Beam",
["167100"] = "Brown Smoke Beam",
["186198"] = "Lightning",
["186201"] = "Red Lightning",
["186202"] = "Mana Beam",
["369749"] = "Straight Purple Beam",
["241098"] = "Spirit Link Beam",
["167105"] = "Green Water Beam",
["167097"] = "Iron Chain",
["186193"] = "Ghost Chain",
["186205"] = "Mana Burn Beam",
["186208"] = "Rope",
["186211"] = "Shock Lightning",
["186214"] = "Soul Beam",
["241098"] = "Spirit Link Beam",
["241099"] = "Summon Gargoyle Beam",
["369749"] = "Straight Purple Beam",
["369750"] = "Shadow Beam",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\rainbowbar"] = "Rainbow Bar",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\StripedTexture"] = "Striped Bar",
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\stripe-bar.tga"] = "Striped Bar 2",
@ -1799,6 +1807,13 @@ Private.texture_types = {
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\logo_256.tga"] = "WeakAuras logo 256px"
}
}
if Private.AtlasList then
Private.texture_types["Blizzard Atlas"] = {}
for _, atlas in ipairs(Private.AtlasList) do
Private.texture_types["Blizzard Atlas"][atlas] = atlas
end
end
local BuildInfo = select(4, GetBuildInfo())
if BuildInfo <= 80100 then -- 8.1.5
Private.texture_types.Sparks["worldstate-capturebar-spark-green"] = "Capture Bar Green Spark"

2
Interface/AddOns/WeakAuras/Types_Retail.lua

File diff suppressed because one or more lines are too long

2
Interface/AddOns/WeakAuras/Types_Vanilla.lua

File diff suppressed because one or more lines are too long

2
Interface/AddOns/WeakAuras/Types_Wrath.lua

File diff suppressed because one or more lines are too long

34
Interface/AddOns/WeakAuras/WeakAuras.lua

@ -1174,7 +1174,7 @@ function Private.Login(initialTime, takeNewSnapshots)
loginFinished = true
-- Tell Dynamic Groups that we are done with login
for _, region in pairs(Private.regions) do
if (region.region.RunDelayedActions) then
if (region.region and region.region.RunDelayedActions) then
region.region:RunDelayedActions();
end
end
@ -1365,7 +1365,7 @@ end
function Private.PauseAllDynamicGroups()
local suspended = {}
for id, region in pairs(Private.regions) do
if (region.region.Suspend) then
if (region.region and region.region.Suspend) then
region.region:Suspend();
tinsert(suspended, id)
end
@ -1846,7 +1846,9 @@ function Private.Resume()
local suspended = Private.PauseAllDynamicGroups()
for id, region in pairs(Private.regions) do
region.region:Collapse();
if region.region then
region.region:Collapse();
end
end
for id, cloneList in pairs(clones) do
@ -1982,7 +1984,7 @@ function WeakAuras.Delete(data)
end
end
if Private.regions[id] then
if Private.regions[id] and Private.regions[id].region then
Private.regions[id].region:Collapse()
Private.CancelAnimation(Private.regions[id].region, true, true, true, true, true, true)
@ -2064,7 +2066,7 @@ function WeakAuras.Rename(data, newid)
UIDtoID[data.uid] = newid
Private.regions[newid] = Private.regions[oldid];
Private.regions[oldid] = nil;
if Private.regions[newid] then
if Private.regions[newid] and Private.regions[newid].region then
Private.regions[newid].region.id = newid
end
@ -2504,7 +2506,7 @@ function Private.AddMany(tbl, takeSnapshots)
for data in pairs(groups) do
if data.type == "dynamicgroup" then
if Private.regions[data.id] then
if Private.regions[data.id] and Private.regions[data.id].region then
Private.regions[data.id].region:ReloadControlledChildren()
end
else
@ -3482,7 +3484,7 @@ function Private.HandleGlowAction(actions, region)
if WeakAuras.GetData(frame_name) then
Private.EnsureRegion(frame_name)
end
if Private.regions[frame_name] then
if Private.regions[frame_name] and Private.regions[frame_name].region then
glow_frame = Private.regions[frame_name].region
should_glow_frame = true
end
@ -3885,12 +3887,14 @@ local DisplayTimes = {};
function WeakAuras.ProfileDisplays(all)
UpdateAddOnCPUUsage();
for id, regionData in pairs(Private.regions) do
local DisplayTime = GetFrameCPUUsage(regionData.region, true);
DisplayTimes[id] = DisplayTimes[id] or 0;
if(all or DisplayTime > DisplayTimes[id]) then
print("|cFFFF0000"..id.."|r -", DisplayTime, "-", DisplayTime - DisplayTimes[id]);
if regionData.region then
local DisplayTime = GetFrameCPUUsage(regionData.region, true);
DisplayTimes[id] = DisplayTimes[id] or 0;
if(all or DisplayTime > DisplayTimes[id]) then
print("|cFFFF0000"..id.."|r -", DisplayTime, "-", DisplayTime - DisplayTimes[id]);
end
DisplayTimes[id] = DisplayTime;
end
DisplayTimes[id] = DisplayTime;
end
end
@ -4448,7 +4452,7 @@ function Private.UpdatedTriggerState(id)
for _, clone in pairs(clones[id]) do
clone:Collapse()
end
if Private.regions[id] then
if Private.regions[id] and Private.regions[id].region then
Private.regions[id].region:Collapse()
end
elseif (show and oldShow) then -- Already shown, update regions
@ -4459,7 +4463,7 @@ function Private.UpdatedTriggerState(id)
end
end
if (not activeTriggerState[""] or not activeTriggerState[""].show) then
if Private.regions[id] then
if Private.regions[id] and Private.regions[id].region then
Private.regions[id].region:Collapse()
end
end
@ -5383,7 +5387,7 @@ local function GetAnchorFrame(data, region, parent)
end
end
if(Private.regions[frame_name]) then
if Private.regions[frame_name] and Private.regions[frame_name].region then
return Private.regions[frame_name].region;
end
postponeAnchor(id);

4
Interface/AddOns/WeakAuras/WeakAuras.toc

@ -1,7 +1,7 @@
## Interface: 100000
## Interface: 100002
## Title: WeakAuras
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## X-Flavor: Mainline
## Notes: A powerful, comprehensive utility for displaying graphics and information based on buffs, debuffs, and other triggers.
## Notes-esES: Potente y completa aplicación que te permitirá mostrar por pantalla múltiples diseños, basados en beneficios, perjuicios y otros activadores.

2
Interface/AddOns/WeakAuras/WeakAuras_TBC.toc

@ -1,7 +1,7 @@
## Interface: 20504
## Title: WeakAuras
## Author: The WeakAuras Team
## Version: 5.1.1 tbc
## Version: 5.2.0 tbc
## X-Flavor: TBC
## Notes: A powerful, comprehensive utility for displaying graphics and information based on buffs, debuffs, and other triggers.
## Notes-esES: Potente y completa aplicación que te permitirá mostrar por pantalla múltiples diseños, basados en beneficios, perjuicios y otros activadores.

2
Interface/AddOns/WeakAuras/WeakAuras_Vanilla.toc

@ -1,7 +1,7 @@
## Interface: 11403
## Title: WeakAuras
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## X-Flavor: Vanilla
## Notes: A powerful, comprehensive utility for displaying graphics and information based on buffs, debuffs, and other triggers.
## Notes-esES: Potente y completa aplicación que te permitirá mostrar por pantalla múltiples diseños, basados en beneficios, perjuicios y otros activadores.

2
Interface/AddOns/WeakAuras/WeakAuras_Wrath.toc

@ -1,7 +1,7 @@
## Interface: 30400
## Title: WeakAuras
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## X-Flavor: Wrath
## Notes: A powerful, comprehensive utility for displaying graphics and information based on buffs, debuffs, and other triggers.
## Notes-esES: Potente y completa aplicación que te permitirá mostrar por pantalla múltiples diseños, basados en beneficios, perjuicios y otros activadores.

4
Interface/AddOns/WeakAurasArchive/WeakAurasArchive.toc

@ -1,7 +1,7 @@
## Interface: 100000
## Interface: 100002
## Title: WeakAuras Archive
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## LoadOnDemand: 1
## SavedVariables: WeakAurasArchive
## Dependencies: WeakAuras

2
Interface/AddOns/WeakAurasArchive/WeakAurasArchive_TBC.toc

@ -1,7 +1,7 @@
## Interface: 20504
## Title: WeakAuras Archive
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## LoadOnDemand: 1
## SavedVariables: WeakAurasArchive
## Dependencies: WeakAuras

2
Interface/AddOns/WeakAurasArchive/WeakAurasArchive_Vanilla.toc

@ -1,7 +1,7 @@
## Interface: 11403
## Title: WeakAuras Archive
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## LoadOnDemand: 1
## SavedVariables: WeakAurasArchive
## Dependencies: WeakAuras

2
Interface/AddOns/WeakAurasArchive/WeakAurasArchive_Wrath.toc

@ -1,7 +1,7 @@
## Interface: 30400
## Title: WeakAuras Archive
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## LoadOnDemand: 1
## SavedVariables: WeakAurasArchive
## Dependencies: WeakAuras

4
Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths.toc

@ -1,7 +1,7 @@
## Interface: 100000
## Interface: 100002
## Title: WeakAuras Model Paths
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## Notes: Model paths for WeakAuras
## Notes-esES: Las rutas de archivos de modelos en 3D para WeakAuras
## Notes-deDE: 3D-Model Pfade für WeakAuras

2
Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_TBC.toc

@ -1,7 +1,7 @@
## Interface: 20504
## Title: WeakAuras Model Paths
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## Notes: Model paths for WeakAuras
## Notes-esES: Las rutas de archivos de modelos en 3D para WeakAuras
## Notes-deDE: 3D-Model Pfade für WeakAuras

2
Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_Vanilla.toc

@ -1,7 +1,7 @@
## Interface: 11403
## Title: WeakAuras Model Paths
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## Notes: Model paths for WeakAuras
## Notes-esES: Las rutas de archivos de modelos en 3D para WeakAuras
## Notes-deDE: 3D-Model Pfade für WeakAuras

2
Interface/AddOns/WeakAurasModelPaths/WeakAurasModelPaths_Wrath.toc

@ -1,7 +1,7 @@
## Interface: 30400
## Title: WeakAuras Model Paths
## Author: The WeakAuras Team
## Version: 5.1.1
## Version: 5.2.0
## Notes: Model paths for WeakAuras
## Notes-esES: Las rutas de archivos de modelos en 3D para WeakAuras
## Notes-deDE: 3D-Model Pfade für WeakAuras

210
Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasScrollArea.lua

@ -0,0 +1,210 @@
--[[-----------------------------------------------------------------------------
ScrollArea Widget
Plain widget that scrolls a content widget and doesn't grow in height.
Heavly based on AceGUIContainer-ScrollFrame
-------------------------------------------------------------------------------]]
local Type, Version = "WeakAurasScrollArea", 1
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
-- Lua APIs
local pairs, assert, type = pairs, assert, type
local min, max, floor = math.min, math.max, math.floor
-- WoW APIs
local CreateFrame, UIParent = CreateFrame, UIParent
--[[-----------------------------------------------------------------------------
Support functions
-------------------------------------------------------------------------------]]
local function FixScrollOnUpdate(frame)
frame:SetScript("OnUpdate", nil)
frame.obj:FixScroll()
end
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function ScrollFrame_OnMouseWheel(frame, value)
frame.obj:MoveScroll(value)
end
local function ScrollFrame_OnSizeChanged(frame)
frame:SetScript("OnUpdate", FixScrollOnUpdate)
end
local function ScrollBar_OnScrollValueChanged(frame, value)
frame.obj:SetScroll(value)
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self:SetScroll(0)
self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate)
end,
["OnRelease"] = function(self)
for k in pairs(self.localstatus) do
self.localstatus[k] = nil
end
self.scrollframe:SetPoint("BOTTOMRIGHT")
self.scrollbar:Hide()
self.scrollBarShown = nil
end,
["SetScroll"] = function(self, value)
local status = self.localstatus
local viewheight = self.scrollframe:GetHeight()
local height = self.content:GetHeight()
local offset
if viewheight > height then
offset = 0
else
offset = floor((height - viewheight) / 10000.0 * value)
end
self.content:ClearAllPoints()
self.content:SetPoint("TOPLEFT", 0, offset)
self.content:SetPoint("TOPRIGHT", 0, offset)
status.offset = offset
status.scrollvalue = value
self:Fire("ContentScrolled")
end,
["GetContentOffset"] = function(self)
local status = self.localstatus
return status.offset or 0
end,
["GetViewportSize"] = function(self)
return self.scrollframe:GetSize()
end,
["MoveScroll"] = function(self, value)
local status = self.localstatus
local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight()
if self.scrollBarShown then
local diff = height - viewheight
local delta = 1
if value < 0 then
delta = -1
end
self.scrollbar:SetValue(min(max(status.scrollvalue + delta*(10000/(diff/45)),0), 10000))
end
end,
["FixScroll"] = function(self)
if self.updateLock then return end
self.updateLock = true
local status = self.localstatus
local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight()
local offset = status.offset or 0
-- Give us a margin of error of 2 pixels to stop some conditions that i would blame on floating point inaccuracys
-- No-one is going to miss 2 pixels at the bottom of the frame, anyhow!
if viewheight < height + 2 then
if self.scrollBarShown then
self.scrollBarShown = nil
self.scrollbar:Hide()
self.scrollbar:SetValue(0)
self.scrollframe:SetPoint("BOTTOMRIGHT")
if self.content.original_width then
self.content.width = self.content.original_width
end
end
else
if not self.scrollBarShown then
self.scrollBarShown = true
self.scrollbar:Show()
self.scrollframe:SetPoint("BOTTOMRIGHT", -20, 0)
if self.content.original_width then
self.content.width = self.content.original_width - 20
end
end
local value = (offset / (viewheight - height) * 10000)
if value > 10000 then value = 10000 end
self.scrollbar:SetValue(value)
self:SetScroll(value)
if value < 10000 then
self.content:ClearAllPoints()
self.content:SetPoint("TOPLEFT", 0, offset)
self.content:SetPoint("TOPRIGHT", 0, offset)
status.offset = offset
end
end
self.updateLock = nil
end,
["SetContentHeight"] = function(self, height)
self.content:SetHeight(height)
-- update the scrollframe
self:FixScroll()
-- schedule another update when everything has "settled"
self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate)
end,
["OnWidthSet"] = function(self, width)
self:Fire("ContentScrolled")
end,
["OnHeightSet"] = function(self, height)
self:Fire("ContentScrolled")
end
}
--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
local frame = CreateFrame("Frame", nil, UIParent)
local num = AceGUI:GetNextWidgetNum(Type)
local scrollframe = CreateFrame("ScrollFrame", nil, frame)
scrollframe:SetPoint("TOPLEFT")
scrollframe:SetPoint("BOTTOMRIGHT")
scrollframe:EnableMouseWheel(true)
scrollframe:SetScript("OnMouseWheel", ScrollFrame_OnMouseWheel)
scrollframe:SetScript("OnSizeChanged", ScrollFrame_OnSizeChanged)
local scrollbar = CreateFrame("Slider", ("AceConfigDialogScrollFrame%dScrollBar"):format(num), scrollframe, "UIPanelScrollBarTemplate")
scrollbar:SetPoint("TOPLEFT", scrollframe, "TOPRIGHT", 4, -16)
scrollbar:SetPoint("BOTTOMLEFT", scrollframe, "BOTTOMRIGHT", 4, 16)
scrollbar:SetMinMaxValues(0, 10000)
scrollbar:SetValueStep(1)
scrollbar:SetValue(0)
scrollbar:SetWidth(16)
scrollbar:Hide()
-- set the script as the last step, so it doesn't fire yet
scrollbar:SetScript("OnValueChanged", ScrollBar_OnScrollValueChanged)
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND")
scrollbg:SetAllPoints(scrollbar)
scrollbg:SetColorTexture(0, 0, 0, 0.4)
--Container Support
local content = CreateFrame("Frame", nil, scrollframe)
content:SetPoint("TOPLEFT")
content:SetPoint("TOPRIGHT")
content:SetHeight(400)
scrollframe:SetScrollChild(content)
local widget = {
localstatus = { scrollvalue = 0 },
scrollframe = scrollframe,
scrollbar = scrollbar,
content = content,
frame = frame,
type = Type
}
for method, func in pairs(methods) do
widget[method] = func
end
scrollframe.obj, scrollbar.obj = widget, widget
return AceGUI:RegisterAsWidget(widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)

359
Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasSpinBox.lua

@ -0,0 +1,359 @@
--[[-----------------------------------------------------------------------------
Spin Box Widget
-------------------------------------------------------------------------------]]
local Type, Version = "WeakAurasSpinBox", 1
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then
return
end
-- Lua APIs
local math_min, math_max, floor = math.min, math.max, math.floor
local tonumber, pairs = tonumber, pairs
-- WoW APIs
local PlaySound = PlaySound
local CreateFrame, UIParent = CreateFrame, UIParent
local progressLeftOffset = WeakAuras.IsClassicOrBCCOrWrath() and -2 or -3
local progressExtraWidth = WeakAuras.IsClassicOrBCCOrWrath() and -2 or 0
local progressTopOffset = WeakAuras.IsClassicOrBCCOrWrath() and -3 or -2
local progressBottomOffset = WeakAuras.IsClassicOrBCCOrWrath() and 3 or 2
--[[-----------------------------------------------------------------------------
Support functions
-------------------------------------------------------------------------------]]
local function UpdateText(self)
local value = self:GetValue() or 0
if self.ispercent then
self.editbox:SetText(("%s%%"):format(floor(value * 1000 + 0.5) / 10))
else
self.editbox:SetText(floor(value * 100 + 0.5) / 100)
end
end
local function UpdateButtons(self)
local value = self:GetValue() or 0
self.leftbutton:SetEnabled(value > self.min)
self.rightbutton:SetEnabled(value < self.max)
end
local function UpdateProgressBar(self)
local value = self:GetValue() or 0
local p = 0
if self.min and self.max then
if self.min < self.max then
p = (value - self.min) / (self.max - self.min)
end
end
p = Clamp(p, 0, 1)
local w = p * (self.frame:GetWidth() - 45 + progressExtraWidth)
self.progressBar:SetWidth(max(w, 1))
self.progressBar:SetTexCoord(0, p , 0, 1)
end
local function UpdateHandleColor(self)
if self.progressBarHandle.mouseDown then
self.progressBarHandleTexture:SetColorTexture(0.6, 0.6, 0, 1)
elseif MouseIsOver(self.progressBarHandle) then
self.progressBarHandleTexture:SetColorTexture(0.8, 0.8, 0, 1)
else
self.progressBarHandleTexture:SetColorTexture(0.4, 0.4, 0, 1)
end
end
local function UpdateHandleVisibility(self)
if MouseIsOver(self.frame) then
self.progressBarHandle:Show()
UpdateHandleColor(self)
else
self.progressBarHandle:Hide()
end
end
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function SpinBox_OnValueDown(frame)
local self = frame.obj
--self.editbox:SetFocus()
local value = self.value or 0
local step = self.step or 1
value = math_max(self.min, value - step)
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
self:SetValue(value)
end
local function SpinBox_OnValueUp(frame)
local self = frame.obj
--self.editbox:SetFocus()
local value = self.value or 0
local step = self.step or 1
value = math_min(self.max, value + step)
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
self:SetValue(value)
end
local function EditBox_OnEscapePressed(frame)
frame:ClearFocus()
end
local function EditBox_OnEnterPressed(frame)
local self = frame.obj
local value = frame:GetText()
if self.ispercent then
value = value:gsub("%%", "")
value = tonumber(value) / 100
else
value = tonumber(value)
end
if value then
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
self:SetValue(value)
end
end
local function EditBox_OnEnter(frame)
frame.onEntered = true
if not frame.obj.progressBarHandle.mouseDown then
frame.obj:Fire("OnEnter")
end
end
local function EditBox_OnLeave(frame)
if frame.onEntered then
frame.obj:Fire("OnLeave")
end
frame.onEntered = false
end
local function Frame_OnEnter(frame)
UpdateHandleVisibility(frame.obj)
end
local function ProgressBarHandle_OnUpdate(frame, elapsed)
UpdateHandleColor(frame.obj)
if not IsMouseButtonDown("LeftButton") then
frame.mouseDown = false
end
if frame.mouseDown then
frame.timeElapsed = frame.timeElapsed + elapsed
if frame.timeElapsed > 0.1 then
local currentX = GetCursorPosition()
local deltaX = currentX - frame.startX
deltaX = deltaX / frame.obj.editbox:GetEffectiveScale()
local p = deltaX / (frame.obj.frame:GetWidth() - 45 + progressExtraWidth)
local delta = p * (frame.obj.max - frame.obj.min)
local step = frame.obj.step
local v = frame.originalValue + delta
v = v - v % step
v = Clamp(v, frame.obj.min, frame.obj.max)
frame.obj:SetValue(v)
frame.timeElapsed = 0
end
else
UpdateHandleVisibility(frame.obj)
end
end
local function ProgressBarHandle_OnMouseDown(frame, button)
if button ~= "LeftButton" then
return
end
frame.startX = GetCursorPosition()
frame.originalValue = frame.obj:GetValue()
frame.timeElapsed = 0
frame.mouseDown = true
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self:SetWidth(200)
self:SetHeight(44)
self:SetDisabled(false)
self:SetIsPercent(nil)
self:SetSpinBoxValues(0, 100, 1)
self:SetValue(0)
self.progressOpacity = 0
end,
["OnRelease"] = function(self)
self:ClearFocus()
end,
["OnWidthSet"] = function(self, width)
UpdateProgressBar(self)
end,
["SetDisabled"] = function(self, disabled)
self.disabled = disabled
if disabled then
self.label:SetTextColor(0.5, 0.5, 0.5)
self.editbox:SetTextColor(0.5, 0.5, 0.5)
self.editbox:EnableMouse(false)
self.editbox:ClearFocus()
self.leftbutton:SetEnabled(false)
self.rightbutton:SetEnabled(false)
else
self.label:SetTextColor(1, 0.82, 0)
self.editbox:SetTextColor(1, 1, 1)
self.editbox:EnableMouse(true)
end
end,
["SetValue"] = function(self, value)
local changed = value ~= self.value
self.value = value
UpdateText(self)
UpdateButtons(self)
UpdateProgressBar(self)
if changed then
self:Fire("OnValueChanged", value)
end
end,
["GetValue"] = function(self)
return self.value
end,
["SetLabel"] = function(self, text)
self.label:SetText(text)
end,
["SetSliderValues"] = function(self, ...)
self:SetSpinBoxValues(...)
end,
["SetSpinBoxValues"] = function(self, min, max, step)
self.min = min or 0
self.max = max or 100
self.step = step or 1
UpdateButtons(self)
UpdateProgressBar(self)
end,
["SetIsPercent"] = function(self, value)
self.ispercent = value
UpdateText(self)
end,
["ClearFocus"] = function(self)
self.editbox:ClearFocus()
end,
["SetFocus"] = function(self)
self.editbox:SetFocus()
self.progressBarHandle:Hide()
end,
}
--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
local frame = CreateFrame("Frame", nil, UIParent)
frame:SetScript("OnEnter", Frame_OnEnter)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
label:SetPoint("TOPLEFT")
label:SetPoint("TOPRIGHT")
label:SetJustifyH("LEFT")
label:SetHeight(18)
local leftbutton = CreateFrame("Button", nil, frame)
leftbutton:SetSize(16, 16)
leftbutton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleft")
leftbutton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxlefth")
leftbutton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleftp")
leftbutton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleftp")
leftbutton:SetScript("OnClick", SpinBox_OnValueDown)
local rightbutton = CreateFrame("Button", nil, frame)
rightbutton:SetSize(16, 16)
rightbutton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxright")
rightbutton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrighth")
rightbutton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrightp")
rightbutton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrightp")
rightbutton:SetScript("OnClick", SpinBox_OnValueUp)
local editbox = CreateFrame("EditBox", nil, frame, "InputBoxTemplate")
editbox:SetAutoFocus(false)
editbox:SetFontObject(ChatFontNormal)
editbox:SetHeight(19)
editbox:SetJustifyH("CENTER")
editbox:EnableMouse(true)
editbox:SetTextInsets(0, 0, 3, 3)
editbox:SetScript("OnEnter", EditBox_OnEnter)
editbox:SetScript("OnLeave", EditBox_OnLeave)
editbox:SetScript("OnEnterPressed", EditBox_OnEnterPressed)
editbox:SetScript("OnEscapePressed", EditBox_OnEscapePressed)
editbox:SetScript("OnEditFocusGained", function(frame)
AceGUI:SetFocus(frame.obj)
UpdateHandleVisibility(frame.obj)
end)
editbox:SetScript("OnEditFocusLost", function(frame)
UpdateHandleVisibility(frame.obj)
end)
editbox:SetScript("OnMouseWheel", function(self, delta)
if self:HasFocus() then
if delta == 1 then
SpinBox_OnValueUp(self)
else
SpinBox_OnValueDown(self)
end
end
end)
leftbutton:SetPoint("TOPLEFT", 2, -18)
rightbutton:SetPoint("TOPRIGHT", -2, -18)
editbox:SetPoint("LEFT", leftbutton, "RIGHT", 8, 0)
editbox:SetPoint("RIGHT", rightbutton, "LEFT", -2, 0)
local progressBar = editbox:CreateTexture(nil, "ARTWORK", nil)
progressBar:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxoverlay")
progressBar:SetVertexColor(0.50, 0.50, 0.50, 1)
progressBar:SetPoint("TOPLEFT", editbox, "TOPLEFT", progressLeftOffset, progressTopOffset)
progressBar:SetPoint("BOTTOMLEFT", editbox, "BOTTOMLEFT", progressLeftOffset, progressBottomOffset)
progressBar:SetWidth(0)
local progressBarHandle = CreateFrame("Frame", nil, editbox)
progressBarHandle:SetPoint("TOP", progressBar, "TOP", 0, 2)
progressBarHandle:SetPoint("BOTTOM", progressBar, "BOTTOM", 0, -2)
progressBarHandle:SetPoint("LEFT", progressBar, "RIGHT", -4, 0)
progressBarHandle:SetPoint("RIGHT", progressBar, "RIGHT", 4, 0)
progressBarHandle:EnableMouse(true)
progressBarHandle:Hide()
progressBarHandle:SetScript("OnMouseDown", ProgressBarHandle_OnMouseDown)
progressBarHandle:SetScript("OnUpdate", ProgressBarHandle_OnUpdate)
local progressBarHandleTexture = progressBarHandle:CreateTexture(nil, "ARTWORK")
progressBarHandleTexture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\Square_White")
progressBarHandleTexture:SetColorTexture(0.8, 0.8, 0, 0.8)
progressBarHandleTexture:SetPoint("TOPLEFT", progressBarHandle, "TOPLEFT", 2, -2)
progressBarHandleTexture:SetPoint("BOTTOMRIGHT", progressBarHandle, "BOTTOMRIGHT", -2, 2)
local widget = {
label = label,
editbox = editbox,
leftbutton = leftbutton,
rightbutton = rightbutton,
progressBar = progressBar,
progressBarHandle = progressBarHandle,
progressBarHandleTexture = progressBarHandleTexture,
frame = frame,
type = Type,
}
for method, func in pairs(methods) do
widget[method] = func
end
editbox.obj, leftbutton.obj, rightbutton.obj, frame.obj, progressBarHandle.obj = widget, widget, widget, widget, widget
return AceGUI:RegisterAsWidget(widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)

75
Interface/AddOns/WeakAurasOptions/AceGUI-Widgets/AceGUIWidget-WeakAurasTextureButton.lua

@ -3,7 +3,7 @@ if not WeakAuras.IsLibsOK() then return end
local Type, Version = "WeakAurasTextureButton", 24
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
local GetAtlasInfo = WeakAuras.IsClassic() and GetAtlasInfo or C_Texture.GetAtlasInfo
local GetAtlasInfo = C_Texture and C_Texture.GetAtlasInfo or GetAtlasInfo
local function Hide_Tooltip()
GameTooltip:Hide();
@ -28,46 +28,67 @@ local methods = {
end,
["OnRelease"] = function(self)
self:ClearPick();
self:SetOnUpdate(nil)
self.texture:SetTexture();
end,
["SetTexture"] = function(self, texturePath, name)
if (GetAtlasInfo(texturePath)) then
self.texture:SetAtlas(texturePath);
["SetTexture"] = function(self, texturePath, name, IsStopMotion)
self.texture:SetTexCoord(0, 1, 0, 1)
local atlasInfo = GetAtlasInfo(texturePath)
if atlasInfo then
self.texture:SetAtlas(texturePath, false);
self.texture.IsAtlas = true
if atlasInfo.width > atlasInfo.height then
self.texture:SetSize(120, 120 * (atlasInfo.height / atlasInfo.width))
elseif atlasInfo.height > atlasInfo.width then
self.texture:SetSize(120 * (atlasInfo.width / atlasInfo.height), 120)
else
self.texture:SetSize(120, 120)
end
else
self.texture:SetSize(120, 120)
self.texture:SetTexture(texturePath, "CLAMPTOBLACKADDITIVE", "CLAMPTOBLACKADDITIVE");
self.texture.IsAtlas = nil
end
self.texture.path = texturePath;
self.texture.name = name;
self.texture.IsStopMotion = IsStopMotion
end,
["ChangeTexture"] = function(self, r, g, b, a, rotate, discrete_rotation, rotation, mirror, blendMode)
local ulx,uly , llx,lly , urx,ury , lrx,lry;
if(rotate) then
local angle = rad(135 - rotation);
local vx = math.cos(angle);
local vy = math.sin(angle);
ulx,uly , llx,lly , urx,ury , lrx,lry = 0.5+vx,0.5-vy , 0.5-vy,0.5-vx , 0.5+vy,0.5+vx , 0.5-vx,0.5+vy;
else
if(discrete_rotation == 0 or discrete_rotation == 360) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 0,0 , 0,1 , 1,0 , 1,1;
elseif(discrete_rotation == 90) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 1,0 , 0,0 , 1,1 , 0,1;
elseif(discrete_rotation == 180) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 1,1 , 1,0 , 0,1 , 0,0;
elseif(discrete_rotation == 270) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 0,1 , 1,1 , 0,0 , 1,0;
if not self.texture.IsAtlas then
local ulx,uly , llx,lly , urx,ury , lrx,lry;
if(rotate) then
local angle = rad(135 - rotation);
local vx = math.cos(angle);
local vy = math.sin(angle);
ulx,uly , llx,lly , urx,ury , lrx,lry = 0.5+vx,0.5-vy , 0.5-vy,0.5-vx , 0.5+vy,0.5+vx , 0.5-vx,0.5+vy;
else
if(discrete_rotation == 0 or discrete_rotation == 360) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 0,0 , 0,1 , 1,0 , 1,1;
elseif(discrete_rotation == 90) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 1,0 , 0,0 , 1,1 , 0,1;
elseif(discrete_rotation == 180) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 1,1 , 1,0 , 0,1 , 0,0;
elseif(discrete_rotation == 270) then
ulx,uly , llx,lly , urx,ury , lrx,lry = 0,1 , 1,1 , 0,0 , 1,0;
end
end
if(mirror) then
self.texture:SetTexCoord(urx,ury , lrx,lry , ulx,uly , llx,lly);
else
self.texture:SetTexCoord(ulx,uly , llx,lly , urx,ury , lrx,lry);
end
end
if(mirror) then
self.texture:SetTexCoord(urx,ury , lrx,lry , ulx,uly , llx,lly);
else
self.texture:SetTexCoord(ulx,uly , llx,lly , urx,ury , lrx,lry);
self.texture:SetAtlas(self.texture.path)
end
self.texture:SetVertexColor(r, g, b, a);
self.texture:SetBlendMode(blendMode);
end,
["SetTexCoord"] = function(self, left, right, top, bottom)
self.texture:SetTexCoord(left, right, top, bottom);
if self.texture.IsAtlas and not self.texture.IsStopMotion then
self.texture:SetAtlas(self.texture.path)
else
self.texture:SetTexCoord(left, right, top, bottom);
end
end,
["SetOnUpdate"] = function(self, func)
self.frame:SetScript("OnUpdate", func);
@ -115,8 +136,8 @@ local function Constructor()
button:SetHighlightTexture(highlighttexture);
local texture = button:CreateTexture(nil, "OVERLAY");
texture:SetPoint("BOTTOMLEFT", button, 4, 4);
texture:SetPoint("TOPRIGHT", button, -4, -4);
texture:SetPoint("CENTER")
texture:SetSize(120, 120)
button:SetScript("OnEnter", function() Show_Tooltip(button, texture.name, texture.path:gsub("\\", "\n")) end);
button:SetScript("OnLeave", Hide_Tooltip);

15
Interface/AddOns/WeakAurasOptions/ActionOptions.lua

@ -198,6 +198,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_sound_repeat = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Repeat After"],
order = 8.2,
@ -358,6 +359,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_lines = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Lines & Particles"],
order = 10.81,
@ -377,6 +379,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_frequency = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frequency"],
order = 10.82,
@ -396,6 +399,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_length = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Length"],
order = 10.83,
@ -414,6 +418,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_thickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 10.84,
@ -432,6 +437,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_XOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X-Offset"],
order = 10.85,
@ -448,6 +454,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_YOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y-Offset"],
order = 10.86,
@ -464,6 +471,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Scale"],
order = 10.87,
@ -752,6 +760,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_lines = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Lines & Particles"],
order = 30.81,
@ -771,6 +780,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_frequency = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frequency"],
order = 30.82,
@ -790,6 +800,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_length = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Length"],
order = 30.83,
@ -808,6 +819,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_thickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 30.84,
@ -826,6 +838,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_XOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X-Offset"],
order = 30.85,
@ -842,6 +855,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_YOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y-Offset"],
order = 30.86,
@ -858,6 +872,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Scale"],
order = 30.87,

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save