Compare commits
114 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9be1195f88 | |||
| 9f6c3bd180 | |||
| ed291376aa | |||
| fea116a72e | |||
| bbe272bb48 | |||
| b2b4848ff4 | |||
| aa66a9a10c | |||
| cf64424080 | |||
| db66226209 | |||
| f2df08feac | |||
| 02de969fa4 | |||
| b413d4ee49 | |||
| 8e477b96e3 | |||
| 5642cf686d | |||
| 330e207761 | |||
| 7f17ebc442 | |||
| a9247e1f76 | |||
| e86acf0cb2 | |||
| c9fab2d8c2 | |||
| 32d4ae6a5c | |||
| 8cec363d5e | |||
| c49fff4bd1 | |||
| 5f1e1da895 | |||
| 14dc227c86 | |||
| 7d86078c8c | |||
| 6b7b3ce3c9 | |||
| 8727482b96 | |||
| 6e6673c4fd | |||
| fccc31b6f5 | |||
| 7c2cd5092e | |||
| b9f696675b | |||
| 7c3906533b | |||
| cacf464818 | |||
| a089172201 | |||
| c00710f110 | |||
| e507d70eca | |||
| 379040426c | |||
| 86bf851c64 | |||
| f1652e2b42 | |||
| 23097951e3 | |||
| be1d4475d1 | |||
| 674eabd489 | |||
| e68dea3f22 | |||
| a87455e7bd | |||
| 2a12f35e58 | |||
| 1cf5f3df25 | |||
| 13a26d82c6 | |||
| c408448aad | |||
| c576adec2f | |||
| b8e75b6804 | |||
| eaf7c6a517 | |||
| 764c8a971b | |||
| dbaaccd3ec | |||
| 02e9b2e41a | |||
| 96c42b1522 | |||
| 29c3a7596c | |||
| f1fde07e6c | |||
| 73a54b4489 | |||
| 6f50bc96ef | |||
| 9afc359b57 | |||
| f673850eb0 | |||
| 45eacbde7f | |||
| 80eee574a9 | |||
| cb6de72b93 | |||
| 2720e25cea | |||
| 7d77054a7b | |||
| 3d4479cc06 | |||
| d43d8e9284 | |||
| a8a6002f47 | |||
| f283ea994a | |||
| 15fb697258 | |||
| eddd7588f4 | |||
| 5b32b8c793 | |||
| 10caa05e31 | |||
| c6c3d23074 | |||
| 1a8cd81f7a | |||
| d348b87ddf | |||
| 2f20d305b6 | |||
| 24bb84663f | |||
| d6351dbe88 | |||
| 26241d73d6 | |||
| 8fa481affe | |||
| 3c82edc441 | |||
| d23d749f1e | |||
| 34b0a18d9a | |||
| ad4ba087f5 | |||
| b14406f75f | |||
| 907c64a864 | |||
| 27573b7530 | |||
| 051571f4ef | |||
| 3e59a03ce9 | |||
| 86337919b8 | |||
| 5212479dae | |||
| 09bfb99681 | |||
| 803abd6f07 | |||
| 41b299e0b1 | |||
| d8391b0f66 | |||
| ce3812d234 | |||
| 23729f5960 | |||
| 0b512af2b7 | |||
| 5ceedb53de | |||
| 66931e18f9 | |||
| 27eeade507 | |||
| 37902e37e7 | |||
| 9266274c16 | |||
| 19eba81faa | |||
| 2d58d3fb77 | |||
| 016327c659 | |||
| 4885e11b10 | |||
| 4583cbdf24 | |||
| 35e119160a | |||
| ddccf7a62e | |||
| 89a5511fb9 | |||
| 874d8471e8 |
@@ -6,4 +6,5 @@ BuffLib
|
||||
Ace-Libs
|
||||
Images_Raw
|
||||
Gladdy_old
|
||||
untracked
|
||||
Gladdy_TW
|
||||
+393
-199
@@ -1,17 +1,15 @@
|
||||
local tbl_sort, select = table.sort, select
|
||||
local tbl_sort, select, string_lower = table.sort, select, string.lower
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local GetItemInfo = GetItemInfo
|
||||
local GetLocale = GetLocale
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
||||
|
||||
Gladdy.expansion = "BCC"
|
||||
Gladdy.CLASSES = {"MAGE", "PRIEST", "DRUID", "SHAMAN", "PALADIN", "WARLOCK", "WARRIOR", "HUNTER", "ROGUE"}
|
||||
tbl_sort(Gladdy.CLASSES)
|
||||
Gladdy.RACES = {"Scourge", "BloodElf", "Tauren", "Orc", "Troll", "NightElf", "Draenei", "Human", "Gnome", "Dwarf"}
|
||||
tbl_sort(Gladdy.RACES)
|
||||
|
||||
local specBuffs = {
|
||||
-- DRUID
|
||||
@@ -20,9 +18,10 @@ local specBuffs = {
|
||||
[GetSpellInfo(24858)] = L["Restoration"], -- Moonkin Form; Dreamstate spec in TBC equals Restoration
|
||||
[GetSpellInfo(17007)] = L["Feral"], -- Leader of the Pack
|
||||
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||
[GetSpellInfo(33891)] = L["Restoration"], -- Tree of Life
|
||||
|
||||
-- HUNTER
|
||||
[GetSpellInfo(34692)] = L["Beast Mastery"], -- The Beast Within
|
||||
[GetSpellInfo(34471)] = L["Beast Mastery"], -- The Beast Within
|
||||
[GetSpellInfo(20895)] = L["Beast Mastery"], -- Spirit Bond
|
||||
[GetSpellInfo(34455)] = L["Beast Mastery"], -- Ferocious Inspiration
|
||||
[GetSpellInfo(27066)] = L["Marksmanship"], -- Trueshot Aura
|
||||
@@ -78,8 +77,9 @@ local specBuffs = {
|
||||
-- WARLOCK
|
||||
[GetSpellInfo(19028)] = L["Demonology"], -- Soul Link
|
||||
[GetSpellInfo(23759)] = L["Demonology"], -- Master Demonologist
|
||||
[GetSpellInfo(30302)] = L["Destruction"], -- Nether Protection
|
||||
[GetSpellInfo(34935)] = L["Destruction"], -- Backlash
|
||||
[GetSpellInfo(35696)] = L["Demonology"], -- Demonic Knowledge
|
||||
[GetSpellInfo(30300)] = L["Destruction"], -- Nether Protection
|
||||
[GetSpellInfo(34936)] = L["Destruction"], -- Backlash
|
||||
|
||||
-- WARRIOR
|
||||
[GetSpellInfo(29838)] = L["Arms"], -- Second Wind
|
||||
@@ -96,7 +96,8 @@ local specSpells = {
|
||||
[GetSpellInfo(33983)] = L["Feral"], -- Mangle (Cat)
|
||||
[GetSpellInfo(33987)] = L["Feral"], -- Mangle (Bear)
|
||||
[GetSpellInfo(18562)] = L["Restoration"], -- Swiftmend
|
||||
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||
[GetSpellInfo(17116)] = L["Restoration"], -- Nature's Swiftness
|
||||
[GetSpellInfo(33891)] = L["Restoration"], -- Tree of Life
|
||||
|
||||
-- HUNTER
|
||||
[GetSpellInfo(19577)] = L["Beast Mastery"], -- Intimidation
|
||||
@@ -152,7 +153,7 @@ local specSpells = {
|
||||
[GetSpellInfo(17364)] = L["Enhancement"], -- Stormstrike
|
||||
[GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem
|
||||
[GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield
|
||||
--[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||
|
||||
-- WARLOCK
|
||||
[GetSpellInfo(30405)] = L["Affliction"], -- Unstable Affliction
|
||||
@@ -160,6 +161,7 @@ local specSpells = {
|
||||
--[GetSpellInfo(30911)] = L["Affliction"], -- Siphon Life
|
||||
[GetSpellInfo(30414)] = L["Destruction"], -- Shadowfury
|
||||
[GetSpellInfo(30912)] = L["Destruction"], -- Conflagrate
|
||||
[GetSpellInfo(18708)] = L["Demonology"], -- Fel Domination
|
||||
|
||||
-- WARRIOR
|
||||
[GetSpellInfo(30330)] = L["Arms"], -- Mortal Strike
|
||||
@@ -306,11 +308,11 @@ local importantAuras = {
|
||||
spellID = 19577,
|
||||
},
|
||||
-- The Beast Within
|
||||
[GetSpellInfo(34692)] = {
|
||||
[GetSpellInfo(34471)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 18,
|
||||
priority = 20,
|
||||
spellID = 34692,
|
||||
spellID = 34471,
|
||||
},
|
||||
|
||||
|
||||
@@ -367,6 +369,11 @@ local importantAuras = {
|
||||
priority = 20,
|
||||
spellID = 45438,
|
||||
},
|
||||
[GetSpellInfo(41425)] = { -- Hypothermia (Ice Block Immune
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
priority = 8,
|
||||
spellID = 41425,
|
||||
},
|
||||
-- Impact
|
||||
[GetSpellInfo(12355)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
@@ -549,7 +556,13 @@ local importantAuras = {
|
||||
priority = 10,
|
||||
spellID = 26669,
|
||||
},
|
||||
|
||||
-- Riposte
|
||||
[GetSpellInfo(14251)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 6,
|
||||
priority = 20,
|
||||
spellID = 14251,
|
||||
},
|
||||
|
||||
-- Fear
|
||||
[GetSpellInfo(5782)] = {
|
||||
@@ -678,6 +691,13 @@ local importantAuras = {
|
||||
spellSchool = "magic",
|
||||
spellID = 12292,
|
||||
},
|
||||
--Disarm
|
||||
[GetSpellInfo(676)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 10,
|
||||
priority = 20,
|
||||
spellID = 676,
|
||||
},
|
||||
|
||||
-- Grounding Totem Effect
|
||||
[GetSpellInfo(8178)] = {
|
||||
@@ -775,6 +795,13 @@ local importantAuras = {
|
||||
spellID = 5024,
|
||||
altName = select(1, GetSpellInfo(5024)) .. " - " .. (select(1, GetItemInfo(4984)) or "Skull of Impending Doom"),
|
||||
},
|
||||
-- Will of the Forsaken
|
||||
[GetSpellInfo(7744)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 5,
|
||||
priority = 15,
|
||||
spellID = 7744,
|
||||
},
|
||||
}
|
||||
function Gladdy:GetImportantAuras()
|
||||
return importantAuras
|
||||
@@ -794,35 +821,6 @@ function Gladdy:GetInterrupts()
|
||||
return interrupts
|
||||
end
|
||||
|
||||
local auraTypeColor = {}
|
||||
auraTypeColor["none"] = { r = 0.80, g = 0, b = 0 , a = 1}
|
||||
auraTypeColor["magic"] = { r = 0.20, g = 0.60, b = 1.00, a = 1}
|
||||
auraTypeColor["curse"] = { r = 0.60, g = 0.00, b = 1.00, a = 1 }
|
||||
auraTypeColor["disease"] = { r = 0.60, g = 0.40, b = 0, a = 1 }
|
||||
auraTypeColor["poison"] = { r = 0.00, g = 0.60, b = 0, a = 1 }
|
||||
auraTypeColor["immune"] = { r = 1.00, g = 0.02, b = 0.99, a = 1 }
|
||||
auraTypeColor["form"] = auraTypeColor["none"]
|
||||
auraTypeColor["aura"] = auraTypeColor["none"]
|
||||
auraTypeColor[""] = auraTypeColor["none"]
|
||||
|
||||
function Gladdy:GetAuraTypeColor()
|
||||
return auraTypeColor
|
||||
end
|
||||
|
||||
local spellSchoolColors = {}
|
||||
spellSchoolColors[1] = {r = 1, g = 1, b = 0, a = 1, type = "Physical"} --- "physical" 255, 255, 0
|
||||
spellSchoolColors[2] = {r = 1, g = 0.901, b = 0.501, a = 1, type = "Holy"} ---"holy" -- 255, 230, 128
|
||||
spellSchoolColors[4] = {r = 1, g = 0.501, b = 0, a = 1, type = "Fire"} ---"fire" -- 255, 128, 0
|
||||
spellSchoolColors[8] = {r = 0.302, g = 1, b = 0.302, a = 1, type = "Nature"} ---"nature" -- 77, 255, 77
|
||||
spellSchoolColors[16] = {r = 0.501, g = 1, b = 1, a = 1, type = "Frost"} ---"frost" -- 128, 255, 255
|
||||
spellSchoolColors[32] = {r = 0.501, g = 0.501, b = 1, a = 1, type = "Shadow"} ---"shadow" --128, 128, 255
|
||||
spellSchoolColors[64] = {r = 1, g = 0.501, b = 1, a = 1, type = "Arcane"} ---"arcane" -- 255, 128, 255
|
||||
spellSchoolColors["unknown"] = {r = 0, g = 0, b = 0, a = 1, type = "Unknown"} ---"unknown spell school"
|
||||
|
||||
function Gladdy:GetSpellSchoolColors()
|
||||
return spellSchoolColors
|
||||
end
|
||||
|
||||
local cooldownList = {
|
||||
-- Spell Name Cooldown[, Spec]
|
||||
-- Mage
|
||||
@@ -922,6 +920,7 @@ local cooldownList = {
|
||||
[27277] = 8, -- Devour Magic
|
||||
[30414] = { cd = 20, spec = L["Destruction"], }, -- Shadowfury
|
||||
[17877] = { cd = 15, spec = L["Destruction"], }, -- Shadowburn
|
||||
[30912] = { cd = 10, spec = L["Destruction"], }, -- Conflagrate
|
||||
[18708] = { cd = 900, spec = L["Demonology"], }, -- Feldom
|
||||
},
|
||||
|
||||
@@ -944,7 +943,7 @@ local cooldownList = {
|
||||
[18499] = 30, -- Berserker Rage
|
||||
--[2565] = 60, -- Shield Block
|
||||
[12292] = { cd = 180, spec = L["Arms"], }, -- Death Wish
|
||||
[20252] = { cd = 30, [L["Arms"]] = 20 }, -- Intercept
|
||||
[20252] = { cd = 25, [L["Arms"]] = 15 }, -- Intercept
|
||||
[12975] = { cd = 180, spec = L["Protection"], }, -- Last Stand
|
||||
[12809] = { cd = 30, spec = L["Protection"], }, -- Concussion Blow
|
||||
|
||||
@@ -955,28 +954,33 @@ local cooldownList = {
|
||||
[19503] = 30, -- Scatter Shot
|
||||
[14327] = 30, -- Scare Beast
|
||||
[19263] = 300, -- Deterrence; not on BM but can't do 2 specs
|
||||
[14311] = { cd = 30, -- Freezing Trap
|
||||
sharedCD = {
|
||||
[13809] = true, -- Frost Trap
|
||||
[34600] = true, -- Snake Trap
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
[13809] = { cd = 30, -- Frost Trap
|
||||
sharedCD = {
|
||||
[14311] = true, -- Freezing Trap
|
||||
[34600] = true, -- Snake Trap
|
||||
},
|
||||
icon = select(3, GetSpellInfo(14311)),
|
||||
},
|
||||
[14311] = { cd = 30, -- Freezing Trap
|
||||
sharedCD = {
|
||||
[13809] = true, -- Frost Trap
|
||||
[34600] = true, -- Snake Trap
|
||||
},
|
||||
icon = select(3, GetSpellInfo(14311)),
|
||||
},
|
||||
[34600] = { cd = 30, -- Snake Trap
|
||||
sharedCD = {
|
||||
[14311] = true, -- Freezing Trap
|
||||
[13809] = true, -- Frost Trap
|
||||
},
|
||||
icon = select(3, GetSpellInfo(14311)),
|
||||
},
|
||||
[34490] = { cd = 20, spec = L["Marksmanship"], }, -- Silencing Shot
|
||||
[19386] = { cd = 60, spec = L["Survival"], }, -- Wyvern Sting
|
||||
[19577] = { cd = 60, spec = L["Beast Mastery"], }, -- Intimidation
|
||||
[38373] = { cd = 120, spec = L["Beast Mastery"], }, -- The Beast Within
|
||||
[34471] = { cd = 120, spec = L["Beast Mastery"], }, -- The Beast Within
|
||||
[5384] = 30, -- Feign Death
|
||||
[3034] = 15, -- Viper Sting
|
||||
[1543] = 20, -- Flare
|
||||
@@ -1021,19 +1025,19 @@ local cooldownList = {
|
||||
|
||||
},
|
||||
["NightElf"] = {
|
||||
[2651] = { cd = 180, spec = L["Discipline"], }, -- Elune's Grace
|
||||
[10797] = { cd = 30, spec = L["Discipline"], }, -- Star Shards
|
||||
[2651] = { cd = 180, spec = L["Discipline"], class = "PRIEST"}, -- Elune's Grace
|
||||
[10797] = { cd = 30, spec = L["Discipline"], class = "PRIEST"}, -- Star Shards
|
||||
},
|
||||
["Draenei"] = {
|
||||
[32548] = { cd = 300, spec = L["Discipline"], }, -- Hymn of Hope
|
||||
[32548] = { cd = 300, spec = L["Discipline"], class = "PRIEST"}, -- Hymn of Hope
|
||||
},
|
||||
["Human"] = {
|
||||
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
|
||||
[13908] = { cd = 600, spec = L["Discipline"], class = "PRIEST"}, -- Desperate Prayer
|
||||
},
|
||||
["Gnome"] = {
|
||||
},
|
||||
["Dwarf"] = {
|
||||
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
|
||||
[13908] = { cd = 600, spec = L["Discipline"], class = "PRIEST"}, -- Desperate Prayer
|
||||
},
|
||||
}
|
||||
function Gladdy:GetCooldownList()
|
||||
@@ -1110,150 +1114,340 @@ function Gladdy:Racials()
|
||||
return racials
|
||||
end
|
||||
|
||||
local arenaTimer = {
|
||||
["default"] = {
|
||||
[61] = "One minute until the Arena battle begins!",
|
||||
[31] = "Thirty seconds until the Arena battle begins!",
|
||||
[16] = "Fifteen seconds until the Arena battle begins!",
|
||||
[0] = "The Arena battle has begun!",
|
||||
},
|
||||
["esES"] = {
|
||||
[61] = "¡Un minuto hasta que dé comienzo la batalla en arena!",
|
||||
[31] = "¡Treinta segundos hasta que comience la batalla en arena!",
|
||||
[16] = "¡Quince segundos hasta que comience la batalla en arena!",
|
||||
[0] = "¡La batalla en arena ha comenzado!",
|
||||
},
|
||||
["ptBR"] = {
|
||||
[61] = "Um minuto até a batalha na Arena começar!",
|
||||
[31] = "Trinta segundos até a batalha na Arena começar!",
|
||||
[16] = "Quinze segundos até a batalha na Arena começar!",
|
||||
[0] = "A batalha na Arena começou!",
|
||||
},
|
||||
["deDE"] = {
|
||||
[61] = "Noch eine Minute bis der Arenakampf beginnt!",
|
||||
[31] = "Noch dreißig Sekunden bis der Arenakampf beginnt!",
|
||||
[16] = "Noch fünfzehn Sekunden bis der Arenakampf beginnt!",
|
||||
[0] = "Der Arenakampf hat begonnen!",
|
||||
},
|
||||
["frFR"] = {
|
||||
[61] = "Le combat d'arène commence dans une minute\194\160!",
|
||||
[31] = "Le combat d'arène commence dans trente secondes\194\160!",
|
||||
[16] = "Le combat d'arène commence dans quinze secondes\194\160!",
|
||||
[0] = "Le combat d'arène commence\194\160!",
|
||||
},
|
||||
["ruRU"] = {
|
||||
[61] = "Одна минута до начала боя на арене!",
|
||||
[31] = "Тридцать секунд до начала боя на арене!",
|
||||
[16] = "До начала боя на арене осталось 15 секунд.",
|
||||
[0] = "Бой начался!",
|
||||
},
|
||||
["itIT"] = { -- TODO
|
||||
-- Beta has no itIT version available?
|
||||
},
|
||||
["koKR"] = {
|
||||
[61] = "투기장 전투 시작 1분 전입니다!",
|
||||
[31] = "투기장 전투 시작 30초 전입니다!",
|
||||
[16] = "투기장 전투 시작 15초 전입니다!",
|
||||
[0] = "투기장 전투가 시작되었습니다!",
|
||||
},
|
||||
["zhCN"] = {
|
||||
[61] = "竞技场战斗将在一分钟后开始!",
|
||||
[31] = "竞技场战斗将在三十秒后开始!",
|
||||
[16] = "竞技场战斗将在十五秒后开始!",
|
||||
[0] = "竞技场的战斗开始了!",
|
||||
},
|
||||
["zhTW"] = {
|
||||
[61] = "1分鐘後競技場戰鬥開始!",
|
||||
[31] = "30秒後競技場戰鬥開始!",
|
||||
[16] = "15秒後競技場戰鬥開始!",
|
||||
[0] = "競技場戰鬥開始了!",
|
||||
},
|
||||
}
|
||||
arenaTimer["esMX"] = arenaTimer["esES"]
|
||||
arenaTimer["ptPT"] = arenaTimer["ptBR"]
|
||||
|
||||
function Gladdy:GetArenaTimer()
|
||||
if arenaTimer[GetLocale()] then
|
||||
return arenaTimer[GetLocale()]
|
||||
else
|
||||
return arenaTimer["default"]
|
||||
end
|
||||
---------------------
|
||||
-- TOTEM STUFF
|
||||
---------------------
|
||||
|
||||
local totemData = {
|
||||
-- Fire
|
||||
[string_lower("Searing Totem")] = {id = 3599,texture = select(3, GetSpellInfo(3599)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Flametongue Totem")] = {id = 8227,texture = select(3, GetSpellInfo(8227)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Magma Totem")] = {id = 8190,texture = select(3, GetSpellInfo(8190)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 2},
|
||||
[string_lower("Fire Nova Totem")] = {id = 1535,texture = select(3, GetSpellInfo(1535)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = { cd = 4, once = true }},
|
||||
[string_lower("Totem of Wrath")] = {id = 30706,texture = select(3, GetSpellInfo(30706)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Fire Elemental Totem")] = {id = 32982,texture = select(3, GetSpellInfo(32982)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Frost Resistance Totem")] = {id = 8181,texture = select(3, GetSpellInfo(8181)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
-- Water
|
||||
[string_lower("Fire Resistance Totem")] = {id = 8184,texture = select(3, GetSpellInfo(8184)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Poison Cleansing Totem")] = {id = 8166,texture = select(3, GetSpellInfo(8166)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 5},
|
||||
[string_lower("Disease Cleansing Totem")] = {id = 8170,texture = select(3, GetSpellInfo(8170)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 5},
|
||||
[string_lower("Healing Stream Totem")] = {id = 5394,texture = select(3, GetSpellInfo(5394)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 2},
|
||||
[string_lower("Mana Tide Totem")] = {id = 16190,texture = select(3, GetSpellInfo(16190)), color = {r = 0.078, g = 0.9, b = 0.16, a = 1}},
|
||||
[string_lower("Mana Spring Totem")] = {id = 5675,texture = select(3, GetSpellInfo(5675)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 2},
|
||||
-- Earth
|
||||
[string_lower("Earthbind Totem")] = {id = 2484,texture = select(3, GetSpellInfo(2484)), color = {r = 0.5, g = 0.5, b = 0.5, a = 1}, pulse = 3},
|
||||
[string_lower("Stoneclaw Totem")] = {id = 5730,texture = select(3, GetSpellInfo(5730)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 2},
|
||||
[string_lower("Stoneskin Totem")] = {id = 8071,texture = select(3, GetSpellInfo(8071)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Strength of Earth Totem")] = {id = 8075,texture = select(3, GetSpellInfo(8075)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Earth Elemental Totem")] = {id = 33663,texture = select(3, GetSpellInfo(33663)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Tremor Totem")] = {id = 8143,texture = select(3, GetSpellInfo(8143)), color = {r = 1, g = 0.9, b = 0.1, a = 1}, pulse = 3},
|
||||
-- Air
|
||||
[string_lower("Grounding Totem")] = {id = 8177,texture = select(3, GetSpellInfo(8177)), color = {r = 0, g = 0.53, b = 0.92, a = 1}},
|
||||
[string_lower("Grace of Air Totem")] = {id = 8835,texture = select(3, GetSpellInfo(8835)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Nature Resistance Totem")] = {id = 10595,texture = select(3, GetSpellInfo(10595)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Windfury Totem")] = {id = 8512,texture = select(3, GetSpellInfo(8512)), color = {r = 0.96, g = 0, b = 0.07, a = 1}},
|
||||
[string_lower("Sentry Totem")] = {id = 6495, texture = select(3, GetSpellInfo(6495)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Windwall Totem")] = {id = 15107,texture = select(3, GetSpellInfo(15107)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Wrath of Air Totem")] = {id = 3738,texture = select(3, GetSpellInfo(3738)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
[string_lower("Tranquil Air Totem")] = {id = 25908,texture = select(3, GetSpellInfo(25908)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||
}
|
||||
|
||||
local totemSpellIdToPulse = {
|
||||
[GetSpellInfo(totemData[string_lower("Earthbind Totem")].id)] = totemData[string_lower("Earthbind Totem")].pulse,
|
||||
[2484] = totemData[string_lower("Earthbind Totem")].pulse,
|
||||
[GetSpellInfo(totemData[string_lower("Tremor Totem")].id)] = totemData[string_lower("Tremor Totem")].pulse,
|
||||
[8143] = totemData[string_lower("Tremor Totem")].pulse,
|
||||
[GetSpellInfo(totemData[string_lower("Poison Cleansing Totem")].id)] = totemData[string_lower("Poison Cleansing Totem")].pulse,
|
||||
[8166] = totemData[string_lower("Poison Cleansing Totem")].pulse,
|
||||
[GetSpellInfo(totemData[string_lower("Disease Cleansing Totem")].id)] = totemData[string_lower("Disease Cleansing Totem")].pulse,
|
||||
[8170] = totemData[string_lower("Disease Cleansing Totem")].pulse,
|
||||
[GetSpellInfo(totemData[string_lower("Fire Nova Totem")].id)] = totemData[string_lower("Fire Nova Totem")].pulse,
|
||||
[1535] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 1
|
||||
[8498] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 2
|
||||
[8499] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 3
|
||||
[11314] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 4
|
||||
[11315] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 5
|
||||
[25546] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 6
|
||||
[25547] = totemData[string_lower("Fire Nova Totem")].pulse, -- Rank 7
|
||||
[GetSpellInfo(totemData[string_lower("Magma Totem")].id)] = totemData[string_lower("Magma Totem")].pulse,
|
||||
[8190] = totemData[string_lower("Magma Totem")].pulse, -- Rank 1
|
||||
[10585] = totemData[string_lower("Magma Totem")].pulse, -- Rank 2
|
||||
[10586] = totemData[string_lower("Magma Totem")].pulse, -- Rank 3
|
||||
[10587] = totemData[string_lower("Magma Totem")].pulse, -- Rank 4
|
||||
[25552] = totemData[string_lower("Magma Totem")].pulse, -- Rank 5
|
||||
[GetSpellInfo(totemData[string_lower("Healing Stream Totem")].id)] = totemData[string_lower("Healing Stream Totem")].pulse,
|
||||
[5394] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 1
|
||||
[6375] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 2
|
||||
[6377] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 3
|
||||
[10462] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 4
|
||||
[10463] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 5
|
||||
[25567] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 6
|
||||
[GetSpellInfo(totemData[string_lower("Mana Spring Totem")].id)] = totemData[string_lower("Mana Spring Totem")].pulse,
|
||||
[5675] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 1
|
||||
[10495] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 2
|
||||
[10496] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 3
|
||||
[10497] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 4
|
||||
[25570] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 5
|
||||
[GetSpellInfo(totemData[string_lower("Stoneclaw Totem")].id)] = totemData[string_lower("Stoneclaw Totem")].pulse,
|
||||
[5730] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 1
|
||||
[6390] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 2
|
||||
[6391] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 3
|
||||
[6392] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 4
|
||||
[10427] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 5
|
||||
[10428] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 6
|
||||
[25525] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 7
|
||||
}
|
||||
|
||||
local totemNpcIdsToTotemData = {
|
||||
--fire
|
||||
[2523] = totemData[string_lower("Searing Totem")],
|
||||
[3902] = totemData[string_lower("Searing Totem")],
|
||||
[3903] = totemData[string_lower("Searing Totem")],
|
||||
[3904] = totemData[string_lower("Searing Totem")],
|
||||
[7400] = totemData[string_lower("Searing Totem")],
|
||||
[7402] = totemData[string_lower("Searing Totem")],
|
||||
[15480] = totemData[string_lower("Searing Totem")],
|
||||
[31162] = totemData[string_lower("Searing Totem")],
|
||||
[31164] = totemData[string_lower("Searing Totem")],
|
||||
[31165] = totemData[string_lower("Searing Totem")],
|
||||
[21995] = totemData[string_lower("Searing Totem")],
|
||||
[22209] = totemData[string_lower("Searing Totem")],
|
||||
[22895] = totemData[string_lower("Searing Totem")],
|
||||
[22896] = totemData[string_lower("Searing Totem")],
|
||||
[34687] = totemData[string_lower("Searing Totem")],
|
||||
[36532] = totemData[string_lower("Searing Totem")],
|
||||
[43423] = totemData[string_lower("Searing Totem")],
|
||||
[67380] = totemData[string_lower("Searing Totem")],
|
||||
[73477] = totemData[string_lower("Searing Totem")],
|
||||
[79238] = totemData[string_lower("Searing Totem")],
|
||||
[22896] = totemData[string_lower("Searing Totem")],
|
||||
[84519] = totemData[string_lower("Searing Totem")],
|
||||
[110730] = totemData[string_lower("Searing Totem")],
|
||||
[132178] = totemData[string_lower("Searing Totem")],
|
||||
[9637] = totemData[string_lower("Searing Totem")],
|
||||
|
||||
[5950] = totemData[string_lower("Flametongue Totem")],
|
||||
[6012] = totemData[string_lower("Flametongue Totem")],
|
||||
[7423] = totemData[string_lower("Flametongue Totem")],
|
||||
[10557] = totemData[string_lower("Flametongue Totem")],
|
||||
[15485] = totemData[string_lower("Flametongue Totem")],
|
||||
[31132] = totemData[string_lower("Flametongue Totem")],
|
||||
[31133] = totemData[string_lower("Flametongue Totem")],
|
||||
[31158] = totemData[string_lower("Flametongue Totem")],
|
||||
[42605] = totemData[string_lower("Flametongue Totem")],
|
||||
|
||||
[5929] = totemData[string_lower("Magma Totem")],
|
||||
[7464] = totemData[string_lower("Magma Totem")],
|
||||
[7465] = totemData[string_lower("Magma Totem")],
|
||||
[7466] = totemData[string_lower("Magma Totem")],
|
||||
[15484] = totemData[string_lower("Magma Totem")],
|
||||
[31166] = totemData[string_lower("Magma Totem")],
|
||||
[31167] = totemData[string_lower("Magma Totem")],
|
||||
[32887] = totemData[string_lower("Magma Totem")],
|
||||
[42211] = totemData[string_lower("Magma Totem")],
|
||||
[71335] = totemData[string_lower("Magma Totem")],
|
||||
[71925] = totemData[string_lower("Magma Totem")],
|
||||
[73085] = totemData[string_lower("Magma Totem")],
|
||||
[73093] = totemData[string_lower("Magma Totem")],
|
||||
[73268] = totemData[string_lower("Magma Totem")],
|
||||
[88971] = totemData[string_lower("Magma Totem")],
|
||||
[97369] = totemData[string_lower("Magma Totem")],
|
||||
[98676] = totemData[string_lower("Magma Totem")],
|
||||
|
||||
[5879] = totemData[string_lower("Fire Nova Totem")],
|
||||
[6110] = totemData[string_lower("Fire Nova Totem")],
|
||||
[6111] = totemData[string_lower("Fire Nova Totem")],
|
||||
[7844] = totemData[string_lower("Fire Nova Totem")],
|
||||
[7845] = totemData[string_lower("Fire Nova Totem")],
|
||||
[14662] = totemData[string_lower("Fire Nova Totem")],
|
||||
[15482] = totemData[string_lower("Fire Nova Totem")],
|
||||
[15483] = totemData[string_lower("Fire Nova Totem")],
|
||||
[24320] = totemData[string_lower("Fire Nova Totem")],
|
||||
[32775] = totemData[string_lower("Fire Nova Totem")],
|
||||
[32776] = totemData[string_lower("Fire Nova Totem")],
|
||||
|
||||
[17539] = totemData[string_lower("Totem of Wrath")],
|
||||
[22970] = totemData[string_lower("Totem of Wrath")],
|
||||
[22971] = totemData[string_lower("Totem of Wrath")],
|
||||
[30652] = totemData[string_lower("Totem of Wrath")],
|
||||
[30653] = totemData[string_lower("Totem of Wrath")],
|
||||
[30654] = totemData[string_lower("Totem of Wrath")],
|
||||
|
||||
[15439] = totemData[string_lower("Fire Elemental Totem")],
|
||||
[40830] = totemData[string_lower("Fire Elemental Totem")],
|
||||
[41337] = totemData[string_lower("Fire Elemental Totem")],
|
||||
[41346] = totemData[string_lower("Fire Elemental Totem")],
|
||||
[72301] = totemData[string_lower("Fire Elemental Totem")],
|
||||
|
||||
[5926] = totemData[string_lower("Frost Resistance Totem")],
|
||||
[7412] = totemData[string_lower("Frost Resistance Totem")],
|
||||
[7413] = totemData[string_lower("Frost Resistance Totem")],
|
||||
[15486] = totemData[string_lower("Frost Resistance Totem")],
|
||||
[31171] = totemData[string_lower("Frost Resistance Totem")],
|
||||
[31172] = totemData[string_lower("Frost Resistance Totem")],
|
||||
|
||||
-- Water
|
||||
[5927] = totemData[string_lower("Fire Resistance Totem")],
|
||||
[7424] = totemData[string_lower("Fire Resistance Totem")],
|
||||
[7425] = totemData[string_lower("Fire Resistance Totem")],
|
||||
[15487] = totemData[string_lower("Fire Resistance Totem")],
|
||||
[31169] = totemData[string_lower("Fire Resistance Totem")],
|
||||
[31170] = totemData[string_lower("Fire Resistance Totem")],
|
||||
|
||||
[5923] = totemData[string_lower("Poison Cleansing Totem")],
|
||||
[22487] = totemData[string_lower("Poison Cleansing Totem")],
|
||||
|
||||
[5924] = totemData[string_lower("Disease Cleansing Totem")],
|
||||
|
||||
[3527] = totemData[string_lower("Healing Stream Totem")],
|
||||
[3906] = totemData[string_lower("Healing Stream Totem")],
|
||||
[3907] = totemData[string_lower("Healing Stream Totem")],
|
||||
[3908] = totemData[string_lower("Healing Stream Totem")],
|
||||
[3909] = totemData[string_lower("Healing Stream Totem")],
|
||||
[14664] = totemData[string_lower("Healing Stream Totem")],
|
||||
[15488] = totemData[string_lower("Healing Stream Totem")],
|
||||
[18235] = totemData[string_lower("Healing Stream Totem")],
|
||||
[31181] = totemData[string_lower("Healing Stream Totem")],
|
||||
[31182] = totemData[string_lower("Healing Stream Totem")],
|
||||
[31185] = totemData[string_lower("Healing Stream Totem")],
|
||||
[34686] = totemData[string_lower("Healing Stream Totem")],
|
||||
[36542] = totemData[string_lower("Healing Stream Totem")],
|
||||
[37810] = totemData[string_lower("Healing Stream Totem")],
|
||||
[38428] = totemData[string_lower("Healing Stream Totem")],
|
||||
[47077] = totemData[string_lower("Healing Stream Totem")],
|
||||
[72309] = totemData[string_lower("Healing Stream Totem")],
|
||||
[72457] = totemData[string_lower("Healing Stream Totem")],
|
||||
[73890] = totemData[string_lower("Healing Stream Totem")],
|
||||
[74433] = totemData[string_lower("Healing Stream Totem")],
|
||||
[97508] = totemData[string_lower("Healing Stream Totem")],
|
||||
[112567] = totemData[string_lower("Healing Stream Totem")],
|
||||
[120357] = totemData[string_lower("Healing Stream Totem")],
|
||||
[128539] = totemData[string_lower("Healing Stream Totem")],
|
||||
[132049] = totemData[string_lower("Healing Stream Totem")],
|
||||
|
||||
[10467] = totemData[string_lower("Mana Tide Totem")],
|
||||
[11100] = totemData[string_lower("Mana Tide Totem")],
|
||||
[11101] = totemData[string_lower("Mana Tide Totem")],
|
||||
[17061] = totemData[string_lower("Mana Tide Totem")],
|
||||
|
||||
[3573] = totemData[string_lower("Mana Spring Totem")],
|
||||
[7414] = totemData[string_lower("Mana Spring Totem")],
|
||||
[7415] = totemData[string_lower("Mana Spring Totem")],
|
||||
[7416] = totemData[string_lower("Mana Spring Totem")],
|
||||
[15304] = totemData[string_lower("Mana Spring Totem")],
|
||||
[15489] = totemData[string_lower("Mana Spring Totem")],
|
||||
[31186] = totemData[string_lower("Mana Spring Totem")],
|
||||
[31189] = totemData[string_lower("Mana Spring Totem")],
|
||||
[31190] = totemData[string_lower("Mana Spring Totem")],
|
||||
|
||||
-- Earth
|
||||
[2630] = totemData[string_lower("Earthbind Totem")],
|
||||
[22486] = totemData[string_lower("Earthbind Totem")],
|
||||
[40233] = totemData[string_lower("Earthbind Totem")],
|
||||
[74737] = totemData[string_lower("Earthbind Totem")],
|
||||
[79155] = totemData[string_lower("Earthbind Totem")],
|
||||
|
||||
[3579] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[3911] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[3912] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[3913] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[7398] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[7399] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[14870] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[15478] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[31120] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[31121] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[31122] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[40258] = totemData[string_lower("Stoneclaw Totem")],
|
||||
[102402] = totemData[string_lower("Stoneclaw Totem")],
|
||||
|
||||
[5873] = totemData[string_lower("Stoneskin Totem")],
|
||||
[5919] = totemData[string_lower("Stoneskin Totem")],
|
||||
[5920] = totemData[string_lower("Stoneskin Totem")],
|
||||
[7366] = totemData[string_lower("Stoneskin Totem")],
|
||||
[7367] = totemData[string_lower("Stoneskin Totem")],
|
||||
[7368] = totemData[string_lower("Stoneskin Totem")],
|
||||
[14663] = totemData[string_lower("Stoneskin Totem")],
|
||||
[15470] = totemData[string_lower("Stoneskin Totem")],
|
||||
[15474] = totemData[string_lower("Stoneskin Totem")],
|
||||
[18177] = totemData[string_lower("Stoneskin Totem")],
|
||||
[21994] = totemData[string_lower("Stoneskin Totem")],
|
||||
[31175] = totemData[string_lower("Stoneskin Totem")],
|
||||
[31176] = totemData[string_lower("Stoneskin Totem")],
|
||||
[36550] = totemData[string_lower("Stoneskin Totem")],
|
||||
[40267] = totemData[string_lower("Stoneskin Totem")],
|
||||
[41967] = totemData[string_lower("Stoneskin Totem")],
|
||||
|
||||
[5874] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[5921] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[5922] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[7403] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[15464] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[15479] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[21992] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[30647] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[31129] = totemData[string_lower("Strength of Earth Totem")],
|
||||
[40266] = totemData[string_lower("Strength of Earth Totem")],
|
||||
|
||||
[15430] = totemData[string_lower("Earth Elemental Totem")],
|
||||
[24649] = totemData[string_lower("Earth Elemental Totem")],
|
||||
[39387] = totemData[string_lower("Earth Elemental Totem")],
|
||||
[40247] = totemData[string_lower("Earth Elemental Totem")],
|
||||
[72307] = totemData[string_lower("Earth Elemental Totem")],
|
||||
|
||||
[5913] = totemData[string_lower("Tremor Totem")],
|
||||
[41938] = totemData[string_lower("Tremor Totem")],
|
||||
[41939] = totemData[string_lower("Tremor Totem")],
|
||||
|
||||
-- Air
|
||||
[5925] = totemData[string_lower("Grounding Totem")],
|
||||
[128537] = totemData[string_lower("Grounding Totem")],
|
||||
[136251] = totemData[string_lower("Grounding Totem")],
|
||||
|
||||
[7486] = totemData[string_lower("Grace of Air Totem")],
|
||||
[7487] = totemData[string_lower("Grace of Air Totem")],
|
||||
[15463] = totemData[string_lower("Grace of Air Totem")],
|
||||
|
||||
[7467] = totemData[string_lower("Nature Resistance Totem")],
|
||||
[7468] = totemData[string_lower("Nature Resistance Totem")],
|
||||
[7469] = totemData[string_lower("Nature Resistance Totem")],
|
||||
[15490] = totemData[string_lower("Nature Resistance Totem")],
|
||||
[31173] = totemData[string_lower("Nature Resistance Totem")],
|
||||
[31174] = totemData[string_lower("Nature Resistance Totem")],
|
||||
|
||||
[6112] = totemData[string_lower("Windfury Totem")],
|
||||
[7483] = totemData[string_lower("Windfury Totem")],
|
||||
[7484] = totemData[string_lower("Windfury Totem")],
|
||||
[14666] = totemData[string_lower("Windfury Totem")],
|
||||
[15496] = totemData[string_lower("Windfury Totem")],
|
||||
[15497] = totemData[string_lower("Windfury Totem")],
|
||||
[22897] = totemData[string_lower("Windfury Totem")],
|
||||
[41940] = totemData[string_lower("Windfury Totem")],
|
||||
[41941] = totemData[string_lower("Windfury Totem")],
|
||||
[80703] = totemData[string_lower("Windfury Totem")],
|
||||
[105690] = totemData[string_lower("Windfury Totem")],
|
||||
[133684] = totemData[string_lower("Windfury Totem")],
|
||||
|
||||
[3968] = totemData[string_lower("Sentry Totem")],
|
||||
[28938] = totemData[string_lower("Sentry Totem")],
|
||||
[40187] = totemData[string_lower("Sentry Totem")],
|
||||
[69505] = totemData[string_lower("Sentry Totem")],
|
||||
[70413] = totemData[string_lower("Sentry Totem")],
|
||||
[71145] = totemData[string_lower("Sentry Totem")],
|
||||
[147410] = totemData[string_lower("Sentry Totem")],
|
||||
|
||||
[9687] = totemData[string_lower("Windwall Totem")],
|
||||
[9688] = totemData[string_lower("Windwall Totem")],
|
||||
[9689] = totemData[string_lower("Windwall Totem")],
|
||||
[15492] = totemData[string_lower("Windwall Totem")],
|
||||
|
||||
[15447] = totemData[string_lower("Wrath of Air Totem")],
|
||||
[36556] = totemData[string_lower("Wrath of Air Totem")],
|
||||
|
||||
[15803] = totemData[string_lower("Tranquil Air Totem")],
|
||||
}
|
||||
|
||||
function Gladdy:GetTotemData()
|
||||
return totemData, totemNpcIdsToTotemData, totemSpellIdToPulse
|
||||
end
|
||||
|
||||
Gladdy.legacy = {
|
||||
castBarPos = "LEFT",
|
||||
buffsCooldownPos = "TOP",
|
||||
buffsBuffsCooldownPos = "BOTTOM",
|
||||
classIconPos = "LEFT",
|
||||
ciAnchor = "healthBar",
|
||||
ciPos = "TOP",
|
||||
cooldownYPos = "TOP",
|
||||
cooldownXPos = "LEFT",
|
||||
drCooldownPos = "RIGHT",
|
||||
racialAnchor = "trinket",
|
||||
racialPos = "RIGHT",
|
||||
trinketPos = "RIGHT",
|
||||
padding = 1,
|
||||
growUp = false,
|
||||
}
|
||||
|
||||
Gladdy.newDefaults = {
|
||||
["bottomMargin"] = 94.99996948242188,
|
||||
["newLayout"] = true,
|
||||
Pets = {
|
||||
["petYOffset"] = -81.99993896484375,
|
||||
["petXOffset"] = 181,
|
||||
},
|
||||
ClassIcon = {
|
||||
["classIconXOffset"] = -74.90008544921875,
|
||||
},
|
||||
Racial = {
|
||||
["racialXOffset"] = 255.9000244140625,
|
||||
},
|
||||
Trinket = {
|
||||
["trinketXOffset"] = 182,
|
||||
},
|
||||
["Combat Indicator"] = {
|
||||
["ciXOffset"] = 79.99993896484375,
|
||||
["ciYOffset"] = -10.99993896484375,
|
||||
},
|
||||
Cooldowns = {
|
||||
["cooldownYOffset"] = 31,
|
||||
},
|
||||
["Buffs and Debuffs"] = {
|
||||
["buffsBuffsXOffset"] = 29,
|
||||
["buffsBuffsYOffset"] = -82.99993896484375,
|
||||
["buffsXOffset"] = 29,
|
||||
["buffsYOffset"] = 62.00006103515625,
|
||||
},
|
||||
Diminishings = {
|
||||
["drXOffset"] = 329.7999877929688,
|
||||
["drYOffset"] = -22.5,
|
||||
},
|
||||
["Cast Bar"] = {
|
||||
["castBarXOffset"] = -235.900146484375,
|
||||
["castBarYOffset"] = -30.5,
|
||||
},
|
||||
}
|
||||
|
||||
Gladdy.frameStrata = {
|
||||
BACKGROUND = L["Background"] .. "(0)",
|
||||
LOW = L["Low"] .. "(1)",
|
||||
MEDIUM = L["Medium"] .. "(2)",
|
||||
HIGH = L["High"] .. "(3)",
|
||||
DIALOG = L["Dialog"] .. "(4)",
|
||||
FULLSCREEN = L["Fullscreen"] .. "(5)",
|
||||
FULLSCREEN_DIALOG = L["Fullscreen Dialog"] .. "(6)",
|
||||
TOOLTIP = L["Tooltip"] .. "(7)",
|
||||
}
|
||||
|
||||
Gladdy.frameStrataSorting = {
|
||||
[1] = "BACKGROUND",
|
||||
[2] = "LOW",
|
||||
[3] = "MEDIUM",
|
||||
[4] = "HIGH",
|
||||
[5] = "DIALOG",
|
||||
[6] = "FULLSCREEN",
|
||||
[7] = "FULLSCREEN_DIALOG",
|
||||
[8] = "TOOLTIP",
|
||||
}
|
||||
+1383
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,295 @@
|
||||
local tbl_sort, select, string_lower = table.sort, select, string.lower
|
||||
local GetLocale = GetLocale
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
|
||||
Gladdy.RACES = {"Scourge", "BloodElf", "Tauren", "Orc", "Troll", "NightElf", "Draenei", "Human", "Gnome", "Dwarf"}
|
||||
tbl_sort(Gladdy.RACES)
|
||||
|
||||
local RACE_ICON_TCOORDS = {
|
||||
["HUMAN_MALE"] = { 0, 0.125, 0, 0.25 },
|
||||
["DWARF_MALE"] = { 0.125, 0.25, 0, 0.25 },
|
||||
["GNOME_MALE"] = { 0.25, 0.375, 0, 0.25 },
|
||||
["NIGHTELF_MALE"] = { 0.375, 0.5, 0, 0.25 },
|
||||
|
||||
["TAUREN_MALE"] = { 0, 0.125, 0.25, 0.5 },
|
||||
["SCOURGE_MALE"] = { 0.125, 0.25, 0.25, 0.5 },
|
||||
["TROLL_MALE"] = { 0.25, 0.375, 0.25, 0.5 },
|
||||
["ORC_MALE"] = { 0.375, 0.5, 0.25, 0.5 },
|
||||
|
||||
["HUMAN_FEMALE"] = { 0, 0.125, 0.5, 0.75 },
|
||||
["DWARF_FEMALE"] = { 0.125, 0.25, 0.5, 0.75 },
|
||||
["GNOME_FEMALE"] = { 0.25, 0.375, 0.5, 0.75 },
|
||||
["NIGHTELF_FEMALE"] = { 0.375, 0.5, 0.5, 0.75 },
|
||||
|
||||
["TAUREN_FEMALE"] = { 0, 0.125, 0.75, 1.0 },
|
||||
["SCOURGE_FEMALE"] = { 0.125, 0.25, 0.75, 1.0 },
|
||||
["TROLL_FEMALE"] = { 0.25, 0.375, 0.75, 1.0 },
|
||||
["ORC_FEMALE"] = { 0.375, 0.5, 0.75, 1.0 },
|
||||
|
||||
["BLOODELF_MALE"] = { 0.5, 0.625, 0.25, 0.5 },
|
||||
["BLOODELF_FEMALE"] = { 0.5, 0.625, 0.75, 1.0 },
|
||||
|
||||
["DRAENEI_MALE"] = { 0.5, 0.625, 0, 0.25 },
|
||||
["DRAENEI_FEMALE"] = { 0.5, 0.625, 0.5, 0.75 },
|
||||
}
|
||||
|
||||
local arenaTimer = {
|
||||
["default"] = {
|
||||
[60] = "One minute until the Arena battle begins!",
|
||||
[30] = "Thirty seconds until the Arena battle begins!",
|
||||
[15] = "Fifteen seconds until the Arena battle begins!",
|
||||
[0] = "The Arena battle has begun!",
|
||||
},
|
||||
["esES"] = {
|
||||
[60] = "¡Un minuto hasta que dé comienzo la batalla en arena!",
|
||||
[30] = "¡Treinta segundos hasta que comience la batalla en arena!",
|
||||
[15] = "¡Quince segundos hasta que comience la batalla en arena!",
|
||||
[0] = "¡La batalla en arena ha comenzado!",
|
||||
},
|
||||
["ptBR"] = {
|
||||
[60] = "Um minuto até a batalha na Arena começar!",
|
||||
[30] = "Trinta segundos até a batalha na Arena começar!",
|
||||
[15] = "Quinze segundos até a batalha na Arena começar!",
|
||||
[0] = "A batalha na Arena começou!",
|
||||
},
|
||||
["deDE"] = {
|
||||
[60] = "Noch eine Minute bis der Arenakampf beginnt!",
|
||||
[30] = "Noch dreißig Sekunden bis der Arenakampf beginnt!",
|
||||
[15] = "Noch fünfzehn Sekunden bis der Arenakampf beginnt!",
|
||||
[0] = "Der Arenakampf hat begonnen!",
|
||||
},
|
||||
["frFR"] = {
|
||||
[60] = "Le combat d'arène commence dans une minute\194\160!",
|
||||
[30] = "Le combat d'arène commence dans trente secondes\194\160!",
|
||||
[15] = "Le combat d'arène commence dans quinze secondes\194\160!",
|
||||
[0] = "Le combat d'arène commence\194\160!",
|
||||
},
|
||||
["ruRU"] = {
|
||||
[60] = "Одна минута до начала боя на арене!",
|
||||
[30] = "Тридцать секунд до начала боя на арене!",
|
||||
[15] = "До начала боя на арене осталось 15 секунд.",
|
||||
[0] = "Бой начался!",
|
||||
},
|
||||
["itIT"] = { -- TODO
|
||||
-- Beta has no itIT version available?
|
||||
},
|
||||
["koKR"] = {
|
||||
[60] = "투기장 전투 시작 1분 전입니다!",
|
||||
[30] = "투기장 전투 시작 30초 전입니다!",
|
||||
[15] = "투기장 전투 시작 15초 전입니다!",
|
||||
[0] = "투기장 전투가 시작되었습니다!",
|
||||
},
|
||||
["zhCN"] = {
|
||||
[60] = "竞技场战斗将在一分钟后开始!",
|
||||
[30] = "竞技场战斗将在三十秒后开始!",
|
||||
[15] = "竞技场战斗将在十五秒后开始!",
|
||||
[0] = "竞技场的战斗开始了!",
|
||||
},
|
||||
["zhTW"] = {
|
||||
[60] = "1分鐘後競技場戰鬥開始!",
|
||||
[30] = "30秒後競技場戰鬥開始!",
|
||||
[15] = "15秒後競技場戰鬥開始!",
|
||||
[0] = "競技場戰鬥開始了!",
|
||||
},
|
||||
}
|
||||
arenaTimer["esMX"] = arenaTimer["esES"]
|
||||
arenaTimer["ptPT"] = arenaTimer["ptBR"]
|
||||
|
||||
function Gladdy:GetArenaTimer()
|
||||
if arenaTimer[GetLocale()] then
|
||||
return arenaTimer[GetLocale()]
|
||||
else
|
||||
return arenaTimer["default"]
|
||||
end
|
||||
end
|
||||
|
||||
Gladdy.legacy = {
|
||||
castBarPos = "LEFT",
|
||||
buffsCooldownPos = "TOP",
|
||||
buffsBuffsCooldownPos = "BOTTOM",
|
||||
classIconPos = "LEFT",
|
||||
ciAnchor = "healthBar",
|
||||
ciPos = "TOP",
|
||||
cooldownYPos = "TOP",
|
||||
cooldownXPos = "LEFT",
|
||||
drCooldownPos = "RIGHT",
|
||||
racialAnchor = "trinket",
|
||||
racialPos = "RIGHT",
|
||||
trinketPos = "RIGHT",
|
||||
padding = 1,
|
||||
growUp = false,
|
||||
}
|
||||
|
||||
Gladdy.newDefaults = {
|
||||
["bottomMargin"] = 94.99996948242188,
|
||||
["newLayout"] = true,
|
||||
Pets = {
|
||||
["petYOffset"] = -81.99993896484375,
|
||||
["petXOffset"] = 181,
|
||||
},
|
||||
ClassIcon = {
|
||||
["classIconXOffset"] = -74.90008544921875,
|
||||
},
|
||||
Racial = {
|
||||
["racialXOffset"] = 255.9000244140625,
|
||||
},
|
||||
Trinket = {
|
||||
["trinketXOffset"] = 182,
|
||||
},
|
||||
["Combat Indicator"] = {
|
||||
["ciXOffset"] = 79.99993896484375,
|
||||
["ciYOffset"] = -10.99993896484375,
|
||||
},
|
||||
Cooldowns = {
|
||||
["cooldownYOffset"] = 31,
|
||||
},
|
||||
["Buffs and Debuffs"] = {
|
||||
["buffsBuffsXOffset"] = 29,
|
||||
["buffsBuffsYOffset"] = -82.99993896484375,
|
||||
["buffsXOffset"] = 29,
|
||||
["buffsYOffset"] = 62.00006103515625,
|
||||
},
|
||||
Diminishings = {
|
||||
["drXOffset"] = 329.7999877929688,
|
||||
["drYOffset"] = -22.5,
|
||||
},
|
||||
["Cast Bar"] = {
|
||||
["castBarXOffset"] = -235.900146484375,
|
||||
["castBarYOffset"] = -30.5,
|
||||
},
|
||||
}
|
||||
|
||||
Gladdy.frameStrata = {
|
||||
BACKGROUND = L["Background"] .. "(0)",
|
||||
LOW = L["Low"] .. "(1)",
|
||||
MEDIUM = L["Medium"] .. "(2)",
|
||||
HIGH = L["High"] .. "(3)",
|
||||
DIALOG = L["Dialog"] .. "(4)",
|
||||
FULLSCREEN = L["Fullscreen"] .. "(5)",
|
||||
FULLSCREEN_DIALOG = L["Fullscreen Dialog"] .. "(6)",
|
||||
TOOLTIP = L["Tooltip"] .. "(7)",
|
||||
}
|
||||
|
||||
Gladdy.frameStrataSorting = {
|
||||
[1] = "BACKGROUND",
|
||||
[2] = "LOW",
|
||||
[3] = "MEDIUM",
|
||||
[4] = "HIGH",
|
||||
[5] = "DIALOG",
|
||||
[6] = "FULLSCREEN",
|
||||
[7] = "FULLSCREEN_DIALOG",
|
||||
[8] = "TOOLTIP",
|
||||
}
|
||||
|
||||
local dispelTypeColors = {}
|
||||
dispelTypeColors["none"] = { r = 0.80, g = 0, b = 0, a = 1 }
|
||||
dispelTypeColors["magic"] = { r = 0.20, g = 0.60, b = 1.00, a = 1 }
|
||||
dispelTypeColors["curse"] = { r = 0.60, g = 0.00, b = 1.00, a = 1 }
|
||||
dispelTypeColors["disease"] = { r = 0.60, g = 0.40, b = 0, a = 1 }
|
||||
dispelTypeColors["poison"] = { r = 0.00, g = 0.60, b = 0, a = 1 }
|
||||
dispelTypeColors["immune"] = { r = 1.00, g = 0.02, b = 0.99, a = 1 }
|
||||
dispelTypeColors["enrage"] = dispelTypeColors["none"]
|
||||
dispelTypeColors["form"] = dispelTypeColors["none"]
|
||||
dispelTypeColors["aura"] = dispelTypeColors["none"]
|
||||
dispelTypeColors[""] = dispelTypeColors["none"]
|
||||
|
||||
function Gladdy:GetDispelTypeColors()
|
||||
return dispelTypeColors
|
||||
end
|
||||
|
||||
|
||||
--[[schoolColoring = {
|
||||
[SCHOOL_MASK_NONE] = {a=1.0,r=1.00,g=1.00,b=1.00};
|
||||
[SCHOOL_MASK_PHYSICAL] = {a=1.0,r=1.00,g=1.00,b=0.00};
|
||||
[SCHOOL_MASK_HOLY] = {a=1.0,r=1.00,g=0.90,b=0.50};
|
||||
[SCHOOL_MASK_FIRE] = {a=1.0,r=1.00,g=0.50,b=0.00};
|
||||
[SCHOOL_MASK_NATURE] = {a=1.0,r=0.30,g=1.00,b=0.30};
|
||||
[SCHOOL_MASK_FROST] = {a=1.0,r=0.50,g=1.00,b=1.00};
|
||||
[SCHOOL_MASK_SHADOW] = {a=1.0,r=0.50,g=0.50,b=1.00};
|
||||
[SCHOOL_MASK_ARCANE] = {a=1.0,r=1.00,g=0.50,b=1.00};
|
||||
|
||||
SCHOOL_MASK_NONE = 0x00;
|
||||
SCHOOL_MASK_PHYSICAL = 0x01;
|
||||
SCHOOL_MASK_HOLY = 0x02;
|
||||
SCHOOL_MASK_FIRE = 0x04;
|
||||
SCHOOL_MASK_NATURE = 0x08;
|
||||
SCHOOL_MASK_FROST = 0x10;
|
||||
SCHOOL_MASK_SHADOW = 0x20;
|
||||
SCHOOL_MASK_ARCANE = 0x40;
|
||||
--]]
|
||||
local spellSchoolColors = {}
|
||||
spellSchoolColors[1] = { r = 1, g = 1, b = 0, a = 1, type = "Physical" } -- "physical" 255, 255, 0
|
||||
spellSchoolColors[2] = { r = 1, g = 0.901, b = 0.501, a = 1, type = "Holy" } --"holy" -- 255, 230, 128
|
||||
spellSchoolColors[4] = { r = 1, g = 0.501, b = 0, a = 1, type = "Fire" } --"fire" -- 255, 128, 0
|
||||
spellSchoolColors[8] = { r = 0.302, g = 1, b = 0.302, a = 1, type = "Nature" } --"nature" -- 77, 255, 77
|
||||
spellSchoolColors[16] = { r = 0.501, g = 1, b = 1, a = 1, type = "Frost" } --"frost" -- 128, 255, 255
|
||||
spellSchoolColors[32] = { r = 0.501, g = 0.501, b = 1, a = 1, type = "Shadow" } --"shadow" --128, 128, 255
|
||||
spellSchoolColors[64] = { r = 1, g = 0.501, b = 1, a = 1, type = "Arcane" } --"arcane" -- 255, 128, 255
|
||||
spellSchoolColors["unknown"] = { r = 0, g = 0, b = 0, a = 1, type = "Unknown" } --"unknown spell school"
|
||||
|
||||
function Gladdy:GetSpellSchoolColors()
|
||||
return spellSchoolColors
|
||||
end
|
||||
|
||||
---------------------
|
||||
-- TRINKET STUFF
|
||||
---------------------
|
||||
|
||||
local pvpTrinkets = { -- [itemID] = cd in ms
|
||||
--wotlk
|
||||
[59752] = 120000,
|
||||
[51377] = 120000,
|
||||
[51378] = 120000,
|
||||
[46083] = 120000,
|
||||
[46085] = 120000,
|
||||
[46081] = 120000,
|
||||
[46084] = 120000,
|
||||
[46082] = 120000,
|
||||
[42122] = 120000,
|
||||
[42123] = 120000,
|
||||
--tbc
|
||||
[37864] = 120000,
|
||||
[37865] = 120000,
|
||||
[28235] = 120000,
|
||||
[30348] = 120000,
|
||||
[28238] = 120000,
|
||||
[30351] = 120000,
|
||||
[28236] = 120000,
|
||||
[30349] = 120000,
|
||||
[28234] = 120000,
|
||||
[28237] = 120000,
|
||||
[30350] = 120000,
|
||||
[28240] = 120000,
|
||||
[28243] = 120000,
|
||||
[30345] = 120000,
|
||||
[28241] = 120000,
|
||||
[30343] = 120000,
|
||||
[28239] = 120000,
|
||||
[30346] = 120000,
|
||||
[28242] = 120000,
|
||||
[30344] = 120000,
|
||||
[29593] = 120000,
|
||||
[29593] = 300000,
|
||||
[18859] = 300000,
|
||||
[18857] = 300000,
|
||||
[18864] = 300000,
|
||||
[18854] = 300000,
|
||||
[18862] = 300000,
|
||||
[18858] = 300000,
|
||||
[18856] = 300000,
|
||||
[18863] = 300000,
|
||||
[18834] = 300000,
|
||||
[18851] = 300000,
|
||||
[18845] = 300000,
|
||||
[18852] = 300000,
|
||||
[29592] = 300000,
|
||||
[18850] = 300000,
|
||||
[18846] = 300000,
|
||||
[18853] = 300000,
|
||||
}
|
||||
|
||||
function Gladdy:GetPvpTrinkets()
|
||||
return pvpTrinkets
|
||||
end
|
||||
+161
-57
@@ -1,4 +1,4 @@
|
||||
local select, string_gsub, tostring, pairs = select, string.gsub, tostring, pairs
|
||||
local select, string_gsub, tostring, pairs, ipairs = select, string.gsub, tostring, pairs, ipairs
|
||||
|
||||
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
||||
local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
|
||||
@@ -11,10 +11,11 @@ local FindAuraByName = AuraUtil.FindAuraByName
|
||||
local GetTime = GetTime
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local Cooldowns = Gladdy.modules["Cooldowns"]
|
||||
local Diminishings = Gladdy.modules["Diminishings"]
|
||||
|
||||
local EventListener = Gladdy:NewModule("EventListener", nil, {
|
||||
local EventListener = Gladdy:NewModule("EventListener", 101, {
|
||||
test = true,
|
||||
})
|
||||
|
||||
@@ -51,47 +52,49 @@ function EventListener:Reset()
|
||||
self:SetScript("OnEvent", nil)
|
||||
end
|
||||
|
||||
function Gladdy:DetectSpec(unit, spec)
|
||||
if spec then
|
||||
self.modules["Cooldowns"]:DetectSpec(unit, spec)
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:SpotEnemy(unit, auraScan)
|
||||
local button = self.buttons[unit]
|
||||
if not unit or not button then
|
||||
return
|
||||
end
|
||||
button.raceLoc = UnitRace(unit)
|
||||
button.race = select(2, UnitRace(unit))
|
||||
button.classLoc = select(1, UnitClass(unit))
|
||||
button.class = select(2, UnitClass(unit))
|
||||
button.name = UnitName(unit)
|
||||
button.stealthed = false
|
||||
Gladdy.guids[UnitGUID(unit)] = unit
|
||||
if UnitExists(unit) then
|
||||
button.raceLoc = UnitRace(unit)
|
||||
button.race = select(2, UnitRace(unit))
|
||||
button.classLoc = select(1, UnitClass(unit))
|
||||
button.class = select(2, UnitClass(unit))
|
||||
button.name = UnitName(unit)
|
||||
Gladdy.guids[UnitGUID(unit)] = unit
|
||||
end
|
||||
if button.class and button.race then
|
||||
Gladdy:SendMessage("ENEMY_SPOTTED", unit)
|
||||
end
|
||||
if auraScan and not button.spec then
|
||||
Gladdy:SendMessage("AURA_FADE", unit, "HELPFUL")
|
||||
for n = 1, 30 do
|
||||
local spellName,_,_,_,_,expirationTime,unitCaster = UnitAura(unit, n, "HELPFUL")
|
||||
local spellName, texture, count, dispelType, duration, expirationTime, unitCaster, _, _, spellID = UnitAura(unit, n, "HELPFUL")
|
||||
if ( not spellName ) then
|
||||
Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, AURA_TYPE_BUFF, n - 1)
|
||||
break
|
||||
end
|
||||
if Gladdy.cooldownBuffs[spellName] then -- Check for auras that detect used CDs (like Fear Ward)
|
||||
if Gladdy.specBuffs[spellName] and unitCaster then -- Check for auras that detect a spec
|
||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
|
||||
EventListener:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||
end
|
||||
end
|
||||
if Gladdy.cooldownBuffs[spellName] and unitCaster then -- Check for auras that detect used CDs (like Fear Ward)
|
||||
for arenaUnit,v in pairs(self.buttons) do
|
||||
if (UnitIsUnit(arenaUnit, unitCaster)) then
|
||||
Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, expirationTime - GetTime())
|
||||
Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, Gladdy.cooldownBuffs[spellName].cd(expirationTime - GetTime()))
|
||||
-- /run LibStub("Gladdy").modules["Cooldowns"]:CooldownUsed("arena5", "PRIEST", 6346, 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
if Gladdy.specBuffs[spellName] then -- Check for auras that detect a spec
|
||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||
end
|
||||
if Gladdy.cooldownBuffs.racials[spellName] and Gladdy.cooldownBuffs.racials[spellName] then
|
||||
Gladdy:SendMessage("RACIAL_USED", unit, spellName, Gladdy.cooldownBuffs.racials[spellName].cd(expirationTime - GetTime()), spellName)
|
||||
end
|
||||
Gladdy:SendMessage("AURA_GAIN", unit, AURA_TYPE_BUFF, spellID, spellName, texture, duration, expirationTime, count, dispelType, n, unitCaster)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -106,13 +109,32 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
end
|
||||
|
||||
if destUnit then
|
||||
-- cooldown
|
||||
if (Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName]) then
|
||||
local spellId = Cooldowns.cooldownSpellIds[spellName] -- don't use spellId from combatlog, in case of different spellrank
|
||||
if spellID == 16188 or spellID == 17116 then -- Nature's Swiftness (same name for druid and shaman)
|
||||
spellId = spellID
|
||||
end
|
||||
Cooldowns:AURA_FADE(destUnit, spellID)
|
||||
end
|
||||
-- diminish tracker
|
||||
if Gladdy.buttons[destUnit] and (Gladdy.db.drEnabled and (eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH")) then
|
||||
Diminishings:AuraFade(destUnit, spellID)
|
||||
if Gladdy.buttons[destUnit] and Gladdy.db.drEnabled and extraSpellId == AURA_TYPE_DEBUFF then
|
||||
if (eventType == "SPELL_AURA_REMOVED") then
|
||||
Diminishings:AuraFade(destUnit, spellID)
|
||||
end
|
||||
if (eventType == "SPELL_AURA_REFRESH") then
|
||||
Diminishings:AuraGain(destUnit, spellID)
|
||||
--Diminishings:AuraFade(destUnit, spellID)
|
||||
end
|
||||
if (eventType == "SPELL_AURA_APPLIED") then
|
||||
Diminishings:AuraGain(destUnit, spellID)
|
||||
end
|
||||
end
|
||||
-- death detection
|
||||
if (Gladdy.buttons[destUnit] and eventType == "UNIT_DIED" or eventType == "PARTY_KILL" or eventType == "SPELL_INSTAKILL") then
|
||||
Gladdy:SendMessage("UNIT_DEATH", destUnit)
|
||||
if not Gladdy:isFeignDeath(destUnit) then
|
||||
Gladdy:SendMessage("UNIT_DEATH", destUnit)
|
||||
end
|
||||
end
|
||||
-- spec detection
|
||||
if Gladdy.buttons[destUnit] and (not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race) then
|
||||
@@ -128,33 +150,37 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
if (not UnitExists(srcUnit)) then
|
||||
return
|
||||
end
|
||||
if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED") then
|
||||
local unitRace = Gladdy.buttons[srcUnit].race
|
||||
if not Gladdy.buttons[srcUnit].class or not Gladdy.buttons[srcUnit].race then
|
||||
Gladdy:SpotEnemy(srcUnit, true)
|
||||
end
|
||||
if not Gladdy.buttons[srcUnit].spec then
|
||||
self:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
||||
end
|
||||
if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED" or eventType == "SPELL_MISSED") then
|
||||
self:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
||||
-- cooldown tracker
|
||||
if Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName] then
|
||||
local unitClass
|
||||
local spellId = Cooldowns.cooldownSpellIds[spellName] -- don't use spellId from combatlog, in case of different spellrank
|
||||
if spellID == 16188 or spellID == 17116 then -- Nature's Swiftness (same name for druid and shaman)
|
||||
spellId = spellID
|
||||
end
|
||||
if Gladdy.db.cooldownCooldowns[tostring(spellId)] then
|
||||
if (Gladdy:GetCooldownList()[Gladdy.buttons[srcUnit].class][spellId]) then
|
||||
unitClass = Gladdy.buttons[srcUnit].class
|
||||
else
|
||||
unitClass = Gladdy.buttons[srcUnit].race
|
||||
end
|
||||
Cooldowns:CooldownUsed(srcUnit, unitClass, spellId)
|
||||
Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
||||
if spellID ~= 16188 and spellID ~= 17116 then -- Nature's Swiftness CD starts when buff fades
|
||||
Gladdy:Debug("INFO", "SPELL_CAST_SUCCESS - CooldownUsed", srcUnit, "spellID:", spellID)
|
||||
Cooldowns:CooldownUsed(srcUnit, unitClass, spellId)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Gladdy.db.racialEnabled and Gladdy:Racials()[unitRace].spellName == spellName and Gladdy:Racials()[unitRace][spellID] then
|
||||
Gladdy:SendMessage("RACIAL_USED", srcUnit)
|
||||
end
|
||||
end
|
||||
|
||||
if not Gladdy.buttons[srcUnit].class or not Gladdy.buttons[srcUnit].race then
|
||||
Gladdy:SpotEnemy(srcUnit, true)
|
||||
end
|
||||
if not Gladdy.buttons[srcUnit].spec then
|
||||
Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
||||
if (eventType == "SPELL_AURA_REMOVED" and (spellID == 16188 or spellID == 17116) and Gladdy.buttons[srcUnit].class) then
|
||||
Gladdy:Debug("INFO", "SPELL_AURA_REMOVED - CooldownUsed", srcUnit, "spellID:", spellID)
|
||||
Cooldowns:CooldownUsed(srcUnit, Gladdy.buttons[srcUnit].class, spellID)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -162,8 +188,10 @@ end
|
||||
function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||
--[[ updateReason: seen, unseen, destroyed, cleared ]]
|
||||
|
||||
unit = Gladdy:GetArenaUnit(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
local pet = Gladdy.modules["Pets"].frames[unit]
|
||||
Gladdy:Debug("INFO", "ARENA_OPPONENT_UPDATE", unit, updateReason)
|
||||
if button or pet then
|
||||
if updateReason == "seen" then
|
||||
-- ENEMY_SPOTTED
|
||||
@@ -205,6 +233,8 @@ Gladdy.exceptionNames = { -- TODO MOVE ME TO CLASSBUFFS LIB
|
||||
[24134] = select(1, GetSpellInfo(19386)) .. " Dot",
|
||||
[24135] = select(1, GetSpellInfo(19386)) .. " Dot",
|
||||
[27069] = select(1, GetSpellInfo(19386)) .. " Dot",
|
||||
[49009] = select(1, GetSpellInfo(19386)) .. " Dot",
|
||||
[49010] = select(1, GetSpellInfo(19386)) .. " Dot",
|
||||
[19975] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)), -- Entangling Roots Nature's Grasp
|
||||
[19974] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
[19973] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
@@ -212,13 +242,35 @@ Gladdy.exceptionNames = { -- TODO MOVE ME TO CLASSBUFFS LIB
|
||||
[19971] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
[19971] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
[27010] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
[53312] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
}
|
||||
|
||||
Gladdy.cooldownBuffs = {
|
||||
[GetSpellInfo(6346)] = { cd = 180, spellId = 6346 }, -- Fear Ward
|
||||
[GetSpellInfo(6346)] = { cd = function(expTime) -- 180s uptime == cd
|
||||
return expTime
|
||||
end, spellId = 6346 }, -- Fear Ward
|
||||
[GetSpellInfo(11305)] = { cd = function(expTime) -- 15s uptime
|
||||
return 300 - (15 - expTime)
|
||||
end, spellId = 11305 }, -- Sprint
|
||||
[36554] = { cd = function(expTime) -- 3s uptime
|
||||
return 30 - (3 - expTime)
|
||||
end, spellId = 36554 }, -- Shadowstep speed buff
|
||||
[36563] = { cd = function(expTime) -- 10s uptime
|
||||
return 30 - (10 - expTime)
|
||||
end, spellId = 36554 }, -- Shadowstep dmg buff
|
||||
[GetSpellInfo(26889)] = { cd = function(expTime) -- 3s uptime
|
||||
return 180 - (10 - expTime)
|
||||
end, spellId = 26889 }, -- Vanish
|
||||
racials = {
|
||||
[GetSpellInfo(20600)] = { cd = function(expTime) -- 20s uptime
|
||||
return GetTime() - (20 - expTime)
|
||||
end, spellId = 20600 }, -- Perception
|
||||
}
|
||||
}
|
||||
|
||||
function EventListener:UNIT_AURA(unit)
|
||||
--[[
|
||||
/run local f,sn,dt for i=1,2 do f=(i==1 and "HELPFUL"or"HARMFUL")for n=1,30 do sn,_,_,dt=UnitAura("player",n,f) if(not sn)then break end print(sn,dt,dt and dt:len())end end
|
||||
--]]
|
||||
function EventListener:UNIT_AURA(unit, isFullUpdate, updatedAuras)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
@@ -231,29 +283,32 @@ function EventListener:UNIT_AURA(unit)
|
||||
local auraType = i == 1 and AURA_TYPE_BUFF or AURA_TYPE_DEBUFF
|
||||
Gladdy:SendMessage("AURA_FADE", unit, auraType)
|
||||
for n = 1, 30 do
|
||||
local spellName, texture, count, debuffType, duration, expirationTime, unitCaster, _, shouldConsolidate, spellID = UnitAura(unit, n, filter)
|
||||
local spellName, texture, count, dispelType, duration, expirationTime, unitCaster, _, shouldConsolidate, spellID = UnitAura(unit, n, filter)
|
||||
if ( not spellID ) then
|
||||
Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, auraType, n - 1)
|
||||
break
|
||||
end
|
||||
if Gladdy.cooldownBuffs[spellName] then -- Check for auras that hint used CDs (like Fear Ward)
|
||||
if not button.spec and Gladdy.specBuffs[spellName] and unitCaster then
|
||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||
if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then
|
||||
self:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||
end
|
||||
end
|
||||
if (Gladdy.cooldownBuffs[spellName] or Gladdy.cooldownBuffs[spellID]) and unitCaster then -- Check for auras that hint used CDs (like Fear Ward)
|
||||
local cooldownBuff = Gladdy.cooldownBuffs[spellID] or Gladdy.cooldownBuffs[spellName]
|
||||
for arenaUnit,v in pairs(Gladdy.buttons) do
|
||||
if (UnitIsUnit(arenaUnit, unitCaster)) then
|
||||
Cooldowns:CooldownUsed(arenaUnit, v.class, Gladdy.cooldownBuffs[spellName].spellId, expirationTime - GetTime())
|
||||
Cooldowns:CooldownUsed(arenaUnit, v.class, cooldownBuff.spellId, cooldownBuff.cd(expirationTime - GetTime()))
|
||||
end
|
||||
end
|
||||
end
|
||||
if not button.spec and Gladdy.specBuffs[spellName] then
|
||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||
if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||
end
|
||||
if Gladdy.cooldownBuffs.racials[spellName] then
|
||||
Gladdy:SendMessage("RACIAL_USED", unit, spellName, Gladdy.cooldownBuffs.racials[spellName].cd(expirationTime - GetTime()), spellName)
|
||||
end
|
||||
if Gladdy.exceptionNames[spellID] then
|
||||
spellName = Gladdy.exceptionNames[spellID]
|
||||
end
|
||||
Gladdy:SendMessage("AURA_GAIN", unit, auraType, spellID, spellName, texture, duration, expirationTime, count, debuffType, i)
|
||||
Gladdy:Call("Announcements", "CheckDrink", unit, spellName)
|
||||
Gladdy:SendMessage("AURA_GAIN", unit, auraType, spellID, spellName, texture, duration, expirationTime, count, dispelType, i, unitCaster)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -262,7 +317,7 @@ function EventListener:UNIT_SPELLCAST_START(unit)
|
||||
if Gladdy.buttons[unit] then
|
||||
local spellName = UnitCastingInfo(unit)
|
||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
self:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -271,16 +326,65 @@ function EventListener:UNIT_SPELLCAST_CHANNEL_START(unit)
|
||||
if Gladdy.buttons[unit] then
|
||||
local spellName = UnitChannelInfo(unit)
|
||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
self:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function EventListener:UNIT_SPELLCAST_SUCCEEDED(unit)
|
||||
function EventListener:UNIT_SPELLCAST_SUCCEEDED(...)
|
||||
local unit, castGUID, spellID = ...
|
||||
unit = Gladdy:GetArenaUnit(unit, true)
|
||||
if Gladdy.buttons[unit] then
|
||||
local spellName = UnitCastingInfo(unit)
|
||||
local unitRace = Gladdy.buttons[unit].race
|
||||
local spellName = GetSpellInfo(spellID)
|
||||
|
||||
-- spec detection
|
||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
self:DetectSpec(unit, Gladdy.specSpells[spellName])
|
||||
end
|
||||
|
||||
-- trinket
|
||||
if spellID == 42292 or spellID == 59752 then
|
||||
Gladdy:Debug("INFO", "UNIT_SPELLCAST_SUCCEEDED - TRINKET_USED", unit, spellID)
|
||||
Gladdy:SendMessage("TRINKET_USED", unit)
|
||||
end
|
||||
|
||||
-- racial
|
||||
if Gladdy:Racials()[unitRace].spellName == spellName and Gladdy:Racials()[unitRace][spellID] then
|
||||
Gladdy:Debug("INFO", "UNIT_SPELLCAST_SUCCEEDED - RACIAL_USED", unit, spellID)
|
||||
Gladdy:SendMessage("RACIAL_USED", unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function EventListener:DetectSpec(unit, spec)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button or not spec or button.spec) then
|
||||
return
|
||||
end
|
||||
if button.class == "PALADIN" and Gladdy:contains(spec, {L["Holy"], L["Retribution"], L["Protection"]})
|
||||
or button.class == "SHAMAN" and not Gladdy:contains(spec, {L["Restoration"], L["Enhancement"], L["Elemental"]})
|
||||
or button.class == "ROGUE" and not Gladdy:contains(spec, {L["Subtlety"], L["Assassination"], L["Combat"]})
|
||||
or button.class == "WARLOCK" and not Gladdy:contains(spec, {L["Demonology"], L["Destruction"], L["Affliction"]})
|
||||
or button.class == "PRIEST" and not Gladdy:contains(spec, {L["Shadow"], L["Discipline"], L["Holy"]})
|
||||
or button.class == "MAGE" and not Gladdy:contains(spec, {L["Frost"], L["Fire"], L["Arcane"]})
|
||||
or button.class == "DRUID" and not Gladdy:contains(spec, {L["Restoration"], L["Feral"], L["Balance"]})
|
||||
or button.class == "HUNTER" and not Gladdy:contains(spec, {L["Beast Mastery"], L["Marksmanship"], L["Survival"]})
|
||||
or button.class == "WARRIOR" and not Gladdy:contains(spec, {L["Arms"], L["Protection"], L["Fury"]})
|
||||
or button.class == "DEATHKNIGHT" and not Gladdy:contains(spec, {L["Unholy"], L["Blood"], L["Frost"]}) then
|
||||
return
|
||||
end
|
||||
if not button.spec then
|
||||
button.spec = spec
|
||||
Gladdy:SendMessage("UNIT_SPEC", unit, spec)
|
||||
end
|
||||
end
|
||||
|
||||
function EventListener:Test(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (button and Gladdy.testData[unit].testSpec) then
|
||||
button.spec = nil
|
||||
Gladdy:SpotEnemy(unit, false)
|
||||
self:DetectSpec(unit, button.testSpec)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -134,6 +134,8 @@ function Gladdy:UpdateFrame()
|
||||
local height = (self.db.healthBarHeight + powerBarHeight) * teamSize
|
||||
+ (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2 * teamSize)
|
||||
+ self.db.bottomMargin * (teamSize - 1)
|
||||
local singleFrameHeight = self.db.healthBarHeight + powerBarHeight +
|
||||
(self.db.highlightInset and 0 or self.db.highlightBorderSize * 2) + self.db.bottomMargin
|
||||
|
||||
-- Highlight
|
||||
margin = margin + highlightBorderSize
|
||||
@@ -155,10 +157,13 @@ function Gladdy:UpdateFrame()
|
||||
self.frame:SetPoint("CENTER")
|
||||
else
|
||||
local scale = self.frame:GetEffectiveScale()
|
||||
local growMiddle = self.db.growMiddle and teamSize > 0 and teamSize / 2 >= 1 and (teamSize - 1) * (singleFrameHeight / 2) or 0
|
||||
if (self.db.growDirection == "TOP") then
|
||||
self.frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, self.db.y / scale)
|
||||
self.frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, (self.db.y / scale) - growMiddle)
|
||||
elseif self.db.growDirection == "BOTTOM" then
|
||||
self.frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, (self.db.y / scale) + growMiddle)
|
||||
else
|
||||
self.frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, self.db.y / scale)
|
||||
self.frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, (self.db.y / scale))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -368,6 +373,10 @@ function Gladdy:SetPosition(frame, unit, xOffsetDB, yOffsetDB, newLayout, module
|
||||
if (not newLayout) then
|
||||
--Gladdy:Debug("INFO", name, "old X/Y:", frame:GetCenter())
|
||||
local xOffset, yOffset = frame:GetLeft(), frame:GetTop()
|
||||
if not xOffset or not yOffset then
|
||||
xOffset = frame:GetCenter()-- - frame:GetWidth()/2
|
||||
yOffset = select(2, frame:GetCenter())-- + frame:GetHeight()/2
|
||||
end
|
||||
local x,y = button.healthBar:GetLeft(), button.healthBar:GetTop()
|
||||
local newXOffset = math_abs(x - xOffset) * (x > xOffset and -1 or 1)
|
||||
local newYOffset = math_abs(y - yOffset) * (y > yOffset and -1 or 1)
|
||||
|
||||
+29
-13
@@ -17,7 +17,7 @@ local IsActiveBattlefieldArena = IsActiveBattlefieldArena
|
||||
local IsInInstance = IsInInstance
|
||||
local GetNumArenaOpponents = GetNumArenaOpponents
|
||||
local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"}
|
||||
local PREFIX = "TBC-Classic_v"
|
||||
local PREFIX = "Gladdy v"
|
||||
local VERSION_REGEX = PREFIX .. "(%d+%.%d+)%-(%a)"
|
||||
local LibStub = LibStub
|
||||
|
||||
@@ -27,14 +27,14 @@ local LibStub = LibStub
|
||||
|
||||
---------------------------
|
||||
|
||||
local MAJOR, MINOR = "Gladdy", 5
|
||||
local MAJOR, MINOR = "Gladdy", 8
|
||||
local Gladdy = LibStub:NewLibrary(MAJOR, MINOR)
|
||||
local L
|
||||
Gladdy.version_major_num = 2
|
||||
Gladdy.version_minor_num = 0.00
|
||||
Gladdy.version_minor_num = 0.20
|
||||
Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num
|
||||
Gladdy.version_releaseType = RELEASE_TYPES.release
|
||||
Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
||||
Gladdy.version_releaseType = RELEASE_TYPES.beta
|
||||
Gladdy.version = PREFIX .. string.format("%.2f", Gladdy.version_num) .. "-" .. Gladdy.version_releaseType
|
||||
Gladdy.VERSION_REGEX = VERSION_REGEX
|
||||
|
||||
Gladdy.debug = false
|
||||
@@ -84,11 +84,11 @@ end
|
||||
function Gladdy:Debug(lvl, ...)
|
||||
if Gladdy.debug then
|
||||
if lvl == "INFO" then
|
||||
Gladdy:Print(...)
|
||||
Gladdy:Print("[INFO]", ...)
|
||||
elseif lvl == "WARN" then
|
||||
Gladdy:Warn(...)
|
||||
Gladdy:Warn("[WARN]", ...)
|
||||
elseif lvl == "ERROR" then
|
||||
Gladdy:Error(...)
|
||||
Gladdy:Error("[ERROR]", ...)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -187,6 +187,12 @@ function Gladdy:NewModule(name, priority, defaults)
|
||||
module.defaults = defaults or {}
|
||||
module.messages = {}
|
||||
|
||||
module.RegisterMessages = function(self, ...)
|
||||
for _,message in pairs({...}) do
|
||||
self.messages[message] = message
|
||||
end
|
||||
end
|
||||
|
||||
module.RegisterMessage = function(self, message, func)
|
||||
self.messages[message] = func or message
|
||||
end
|
||||
@@ -195,6 +201,12 @@ function Gladdy:NewModule(name, priority, defaults)
|
||||
self.messages[message] = nil
|
||||
end
|
||||
|
||||
module.UnregisterMessages = function(self, ...)
|
||||
for _,message in pairs({...}) do
|
||||
self.messages[message] = nil
|
||||
end
|
||||
end
|
||||
|
||||
module.UnregisterAllMessages = function(self)
|
||||
for msg,_ in pairs(self.messages) do
|
||||
self.messages[msg] = nil
|
||||
@@ -268,6 +280,7 @@ function Gladdy:OnInitialize()
|
||||
self.LSM:Register("statusbar", "Smooth", "Interface\\AddOns\\Gladdy\\Images\\Smooth")
|
||||
self.LSM:Register("statusbar", "Minimalist", "Interface\\AddOns\\Gladdy\\Images\\Minimalist")
|
||||
self.LSM:Register("statusbar", "LiteStep", "Interface\\AddOns\\Gladdy\\Images\\LiteStep.tga")
|
||||
self.LSM:Register("statusbar", "Flat", "Interface\\AddOns\\Gladdy\\Images\\UI-StatusBar")
|
||||
self.LSM:Register("border", "Gladdy Tooltip round", "Interface\\AddOns\\Gladdy\\Images\\UI-Tooltip-Border_round_selfmade")
|
||||
self.LSM:Register("border", "Gladdy Tooltip squared", "Interface\\AddOns\\Gladdy\\Images\\UI-Tooltip-Border_square_selfmade")
|
||||
self.LSM:Register("font", "DorisPP", "Interface\\AddOns\\Gladdy\\Images\\DorisPP.TTF")
|
||||
@@ -276,11 +289,11 @@ function Gladdy:OnInitialize()
|
||||
L = self.L
|
||||
|
||||
self.testData = {
|
||||
["arena1"] = { name = "Swift", raceLoc = L["NightElf"], classLoc = L["Warrior"], class = "WARRIOR", health = 9635, healthMax = 14207, power = 76, powerMax = 100, powerType = 1, testSpec = L["Arms"], race = "NightElf" },
|
||||
["arena2"] = { name = "Vilden", raceLoc = L["Undead"], classLoc = L["Mage"], class = "MAGE", health = 10969, healthMax = 11023, power = 7833, powerMax = 10460, powerType = 0, testSpec = L["Frost"], race = "Scourge" },
|
||||
["arena3"] = { name = "Krymu", raceLoc = L["Human"], classLoc = L["Rogue"], class = "ROGUE", health = 1592, healthMax = 11740, power = 45, powerMax = 110, powerType = 3, testSpec = L["Subtlety"], race = "Human" },
|
||||
["arena4"] = { name = "Talmon", raceLoc = L["Human"], classLoc = L["Warlock"], class = "WARLOCK", health = 10221, healthMax = 14960, power = 9855, powerMax = 9855, powerType = 0, testSpec = L["Demonology"], race = "Human" },
|
||||
["arena5"] = { name = "Hydra", raceLoc = L["Undead"], classLoc = L["Priest"], class = "PRIEST", health = 11960, healthMax = 11960, power = 2515, powerMax = 10240, powerType = 0, testSpec = L["Discipline"], race = "Human" },
|
||||
["arena1"] = { name = "Swift", raceLoc = L["NightElf"], classLoc = L["Druid"], class = "DRUID", health = 67, healthMax = 100, power = 76, powerMax = 100, powerType = 1, testSpec = L["Restoration"], race = "NightElf" },
|
||||
["arena2"] = { name = "Vilden", raceLoc = L["Undead"], classLoc = L["Mage"], class = "MAGE", health = 99, healthMax = 100, power = 7833, powerMax = 10460, powerType = 0, testSpec = L["Frost"], race = "Scourge" },
|
||||
["arena3"] = { name = "Krymu", raceLoc = L["Human"], classLoc = L["Rogue"], class = "ROGUE", health = 10, healthMax = 100, power = 45, powerMax = 110, powerType = 3, testSpec = L["Subtlety"], race = "Human" },
|
||||
["arena4"] = { name = "Talmon", raceLoc = L["Human"], classLoc = L["Warlock"], class = "WARLOCK", health = 40, healthMax = 100, power = 9855, powerMax = 9855, powerType = 0, testSpec = L["Demonology"], race = "Human" },
|
||||
["arena5"] = { name = "Hydra", raceLoc = L["Undead"], classLoc = L["Priest"], class = "PRIEST", health = 70, healthMax = 100, power = 2515, powerMax = 10240, powerType = 0, testSpec = L["Discipline"], race = "Human" },
|
||||
}
|
||||
|
||||
self.cooldownSpellIds = {}
|
||||
@@ -394,6 +407,9 @@ function Gladdy:Test()
|
||||
|
||||
button:SetAlpha(1)
|
||||
end
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, "TestOnce")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
+6
-39
@@ -1,41 +1,8 @@
|
||||
## Interface: 20503
|
||||
## Title: Gladdy - TBC
|
||||
## Version: 2.00-Release
|
||||
## Notes: The most powerful arena AddOn for WoW 2.5.3
|
||||
## Title: Gladdy |cFFFF0000 game client not supported|r
|
||||
## Version: 2.2-Beta
|
||||
## Notes: The most powerful arena AddOn for WoW Classic TBC/WotLK
|
||||
## Author: XiconQoo, DnB_Junkee, Knall
|
||||
## X-Email: contact me on discord Knall#1751
|
||||
## SavedVariables: GladdyXZ
|
||||
## OptionalDeps: SharedMedia, Blizzard_CombatLog, Blizzard_ArenaUI, Blizzard_CombatText
|
||||
|
||||
embeds.xml
|
||||
|
||||
Gladdy.lua
|
||||
Lang.lua
|
||||
Frame.lua
|
||||
Options.lua
|
||||
Constants.lua
|
||||
ImportStrings.lua
|
||||
|
||||
Modules\Announcements.lua
|
||||
Modules\Healthbar.lua
|
||||
Modules\Powerbar.lua
|
||||
Modules\Auras.lua
|
||||
Modules\Castbar.lua
|
||||
Modules\Classicon.lua
|
||||
Modules\Clicks.lua
|
||||
Modules\Diminishings.lua
|
||||
Modules\Highlight.lua
|
||||
Modules\TotemPlates.lua
|
||||
Modules\Trinket.lua
|
||||
Modules\Racial.lua
|
||||
Modules\Cooldowns.lua
|
||||
Modules\ArenaCountDown.lua
|
||||
Modules\BuffsDebuffs.lua
|
||||
Modules\VersionCheck.lua
|
||||
Modules\XiconProfiles.lua
|
||||
Modules\Pets.lua
|
||||
Modules\ExportImport.lua
|
||||
Modules\CombatIndicator.lua
|
||||
Modules\RangeCheck.lua
|
||||
Modules\ShadowsightTimer.lua
|
||||
EventListener.lua
|
||||
## X-Curse-Project-ID: 482332
|
||||
## X-WoWI-ID: 26350
|
||||
## Notes: Gladdy only supports Classic TBC and Classic WotLK.
|
||||
@@ -0,0 +1,46 @@
|
||||
## Interface: 20504
|
||||
## Title: Gladdy - TBC
|
||||
## Version: 2.2-Beta
|
||||
## Notes: The most powerful arena AddOn for WoW 2.5.4
|
||||
## Author: XiconQoo, DnB_Junkee, Knall
|
||||
## X-Email: contact me on discord Knall#1751
|
||||
## X-Curse-Project-ID: 482332
|
||||
## X-WoWI-ID: 26350
|
||||
## SavedVariables: GladdyXZ
|
||||
## OptionalDeps: SharedMedia, Blizzard_CombatLog, Blizzard_ArenaUI, Blizzard_CombatText, Plater, Kui_Nameplates, NeatPlates, TidyPlates_ThreatPlates, Tukui, ElvUI
|
||||
|
||||
embeds.xml
|
||||
|
||||
Gladdy.lua
|
||||
Lang.lua
|
||||
Frame.lua
|
||||
Options.lua
|
||||
Constants_shared.lua
|
||||
Constants_BCC.lua
|
||||
ImportStrings.lua
|
||||
Util.lua
|
||||
|
||||
Modules\Announcements.lua
|
||||
Modules\Healthbar.lua
|
||||
Modules\Powerbar.lua
|
||||
Modules\Auras.lua
|
||||
Modules\Castbar.lua
|
||||
Modules\Classicon.lua
|
||||
Modules\Clicks.lua
|
||||
Modules\Diminishings.lua
|
||||
Modules\Highlight.lua
|
||||
Modules\TotemPlates.lua
|
||||
Modules\TotemPulse.lua
|
||||
Modules\Trinket.lua
|
||||
Modules\Racial.lua
|
||||
Modules\Cooldowns.lua
|
||||
Modules\ArenaCountDown.lua
|
||||
Modules\BuffsDebuffs.lua
|
||||
Modules\VersionCheck.lua
|
||||
Modules\XiconProfiles.lua
|
||||
Modules\Pets.lua
|
||||
Modules\ExportImport.lua
|
||||
Modules\CombatIndicator.lua
|
||||
Modules\RangeCheck.lua
|
||||
Modules\ShadowsightTimer.lua
|
||||
EventListener.lua
|
||||
@@ -0,0 +1,46 @@
|
||||
## Interface: 30400
|
||||
## Title: Gladdy - WotLK
|
||||
## Version: 2.2-Beta
|
||||
## Notes: The most powerful arena AddOn for WoW 3.4.0
|
||||
## Author: XiconQoo, DnB_Junkee, Knall
|
||||
## X-Email: contact me on discord Knall#1751
|
||||
## X-Curse-Project-ID: 482332
|
||||
## X-WoWI-ID: 26350
|
||||
## SavedVariables: GladdyXZ
|
||||
## OptionalDeps: SharedMedia, Blizzard_CombatLog, Blizzard_ArenaUI, Blizzard_CombatText, Plater, Kui_Nameplates, NeatPlates, TidyPlates_ThreatPlates, Tukui, ElvUI
|
||||
|
||||
embeds.xml
|
||||
|
||||
Gladdy.lua
|
||||
Lang.lua
|
||||
Frame.lua
|
||||
Options.lua
|
||||
Constants_shared.lua
|
||||
Constants_Wrath.lua
|
||||
ImportStrings.lua
|
||||
Util.lua
|
||||
|
||||
Modules\Announcements.lua
|
||||
Modules\Healthbar.lua
|
||||
Modules\Powerbar.lua
|
||||
Modules\Auras.lua
|
||||
Modules\Castbar.lua
|
||||
Modules\Classicon.lua
|
||||
Modules\Clicks.lua
|
||||
Modules\Diminishings.lua
|
||||
Modules\Highlight.lua
|
||||
Modules\TotemPlates.lua
|
||||
Modules\TotemPulse.lua
|
||||
Modules\Trinket.lua
|
||||
Modules\Racial.lua
|
||||
Modules\Cooldowns.lua
|
||||
Modules\ArenaCountDown.lua
|
||||
Modules\BuffsDebuffs.lua
|
||||
Modules\VersionCheck.lua
|
||||
Modules\XiconProfiles.lua
|
||||
Modules\Pets.lua
|
||||
Modules\ExportImport.lua
|
||||
Modules\CombatIndicator.lua
|
||||
Modules\RangeCheck.lua
|
||||
Modules\ShadowsightTimer.lua
|
||||
EventListener.lua
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
-2
File diff suppressed because one or more lines are too long
@@ -7,6 +7,7 @@ local L = {}
|
||||
|
||||
-- Classes
|
||||
L["Druid"] = C_CreatureInfo.GetClassInfo(11).className
|
||||
L["Deathknight"] = C_CreatureInfo.GetClassInfo(6) and C_CreatureInfo.GetClassInfo(6).className
|
||||
L["Hunter"] = C_CreatureInfo.GetClassInfo(3).className
|
||||
L["Mage"] = C_CreatureInfo.GetClassInfo(8).className
|
||||
L["Paladin"] = C_CreatureInfo.GetClassInfo(2).className
|
||||
@@ -28,6 +29,34 @@ L["Troll"] = C_CreatureInfo.GetRaceInfo(8).raceName
|
||||
L["Blood Elf"] = C_CreatureInfo.GetRaceInfo(10).raceName
|
||||
L["Draenei"] = C_CreatureInfo.GetRaceInfo(11).raceName
|
||||
|
||||
--Specs
|
||||
--[[
|
||||
L["Balance"] = BALANCE
|
||||
L["Combat"] = COMBAT_LABEL
|
||||
L["Fire"] = STRING_SCHOOL_FIRE
|
||||
L["Arcane"] = STRING_SCHOOL_ARCANE
|
||||
L["Shadow"] = STRING_SCHOOL_SHADOW
|
||||
L["Holy"] = STRING_SCHOOL_HOLY
|
||||
L["Elemental"] = STRING_SCHOOL_ELEMENTAL
|
||||
|
||||
|
||||
--Modules
|
||||
--L["Announcements"] = CHAT_ANNOUNCE
|
||||
L["Auras"] = COMBAT_TEXT_SHOW_AURAS_TEXT
|
||||
L["Cast Bar"] = SHOW_ENEMY_CAST
|
||||
L["Buffs and Debuffs"] = BUFFOPTIONS_LABEL
|
||||
--L["Class Icon"] = CLASS .. " " .. EMBLEM_SYMBOL
|
||||
--L["Clicks"] =
|
||||
L["Cooldowns"] = CAPACITANCE_SHIPMENT_COOLDOWN:gsub(": %%s", "")
|
||||
--L["Export Import"] =
|
||||
--L["Healthbar"]
|
||||
L["Highlight"] = HIGHLIGHTING:gsub(":", "")
|
||||
L["Pet"] = PET_TYPE_PET
|
||||
--L["Racial"] = RACE .. " " .. ABILITIES
|
||||
--L["Range Check"] =
|
||||
L["Trinket"] = TRINKET0SLOT
|
||||
--]]
|
||||
|
||||
if (GetLocale() == "ruRU") then
|
||||
-- Specs
|
||||
L["Balance"] = "Баланс"
|
||||
@@ -1413,6 +1442,359 @@ elseif GetLocale() == "zhCN" then
|
||||
L["Background Color of the frame"] = "框架的背景顏色"
|
||||
|
||||
L["Gladdy"] = "Gladdy框架" --Line 210, 709, 727
|
||||
elseif GetLocale() == "frFR" then
|
||||
-- Announcements.lua
|
||||
L["Announcements"] = "ANNONCE"
|
||||
L["RESURRECTING: %s (%s)"] = "EN TRAIN DE RESSUSCITER: %s (%s)"
|
||||
L["SPEC DETECTED: %s - %s (%s)"] = "SPEC DETECTÉ: %s - %s (%s)"
|
||||
L["LOW HEALTH: %s (%s)"] = "VIE BASSE: %s (%s)"
|
||||
L["TRINKET USED: %s (%s)"] = "TRINKET UTILISÉ: %s (%s)"
|
||||
L["TRINKET READY: %s (%s)"] = "TRINKET PRÊT: %s (%s)"
|
||||
L["DRINKING: %s (%s)"] = "EN TRAIN DE BOIRE: %s (%s)"
|
||||
L["Self"] = "Soi"
|
||||
L["Party"] = "Groupe"
|
||||
L["Raid Warning"] = "Avertissement de raid"
|
||||
L["Blizzard's Floating Combat Text"] = "Texte de combat flottant de Blizzard"
|
||||
L["Trinket used"] = "Trinket utilisé"
|
||||
L["Announce when an enemy's trinket is used"] = "Annonce quand un trinket ennemie est utilisé"
|
||||
L["Trinket ready"] = "Trinket prêt"
|
||||
L["Announce when an enemy's trinket is ready again"] = "Annonce quand un trinket ennemie est prêt de nouveau"
|
||||
L["Drinking"] = "En train de boire"
|
||||
L["Announces when enemies sit down to drink"] = "Annonce quand les ennemies s'assoient pour boire"
|
||||
L["Resurrection"] = "Resurrection"
|
||||
L["Announces when an enemy tries to resurrect a teammate"] = "Annonce quand un ennemie essaie de ressusciter un membre de son groupe"
|
||||
L["New enemies"] = "Nouveaux ennemis"
|
||||
L["Announces when new enemies are discovered"] = "Annonce quand les ennemies sont découverts"
|
||||
L["Spec Detection"] = "Détection des SPEC"
|
||||
L["Announces when the spec of an enemy was detected"] = "Annonce quand une spec d'un ennemie est détecté"
|
||||
L["Low health"] = "Vie Basse"
|
||||
L["Announces when an enemy drops below a certain health threshold"] = "Annonce quand un ennemie tombe en dessous d'un certain seuil de points de vie"
|
||||
L["Low health threshold"] = "Seuil de points de vie bas"
|
||||
L["Choose how low an enemy must be before low health is announced"] = "Choisissez à quel point un ennemi doit être bas avant d'annoncer une santé faible"
|
||||
L["Destination"] = "Destination"
|
||||
L["Choose how your announcements are displayed"] = "Choisissez comment vos annonces sont affichées"
|
||||
|
||||
-- ArenaCountDown.lua
|
||||
L["Arena Countdown"] = "Compte à rebours de l'arène"
|
||||
L["Turn on/off"] = "Activer / désactiver"
|
||||
L["Turns countdown before the start of an arena match on/off."] = "Active / désactive le compte à rebours avant le début d'un match d'arène"
|
||||
L["Size"] = "Taille"
|
||||
|
||||
-- Auras.lua
|
||||
L["Auras"] = "Auras"
|
||||
L["Frame"] = "Cadre"
|
||||
L["Cooldown"] = "Temps de recharge"
|
||||
L["No Cooldown Circle"] = "Pas de Balayage du temps de recharge"
|
||||
L["Cooldown circle alpha"] = "Alpha du Balayage du temps de recharge"
|
||||
L["Font"] = "Police de caractère"
|
||||
L["Font of the cooldown"] = "Police du temps de recharge"
|
||||
L["Font scale"] = "Échelle de police"
|
||||
L["Scale of the text"] = "Échelle du texte"
|
||||
L["Font color"] = "Couleur de la police"
|
||||
L["Color of the text"] = "Couleur du texte"
|
||||
L["Border"] = "Bordure"
|
||||
L["Border style"] = "Style de bordure"
|
||||
L["Buff color"] = "Couleur des buff"
|
||||
L["Debuff color"] = "Couleur des Debuff"
|
||||
L["Check All"] = "Vérifie tout"
|
||||
L["Uncheck All"] = "Décocher tout"
|
||||
L["Enabled"] = "Activé"
|
||||
L["Priority"] = "Priorité"
|
||||
|
||||
-- BuffsDebuffs.lua
|
||||
L["Buffs and Debuffs"] = "Buffs et Debuffs"
|
||||
L["Enable"] = "Activé"
|
||||
L["Enabled Buffs and Debuffs module"] = "Module de buffs et debuffs activés"
|
||||
L["Show CC"] = "Montrer les CC"
|
||||
L["Shows all debuffs, which are displayed on the ClassIcon as well"] = "Montrer tout les debuffs, qui sont affichés sur l'icone de classe aussi"
|
||||
L["Buffs"] = "Buffs"
|
||||
L["Size & Padding"] = "Taille et remplissage"
|
||||
L["Icon Size"] = "Taille de l'icône"
|
||||
L["Size of the DR Icons"] = "Taille des icones de DR"
|
||||
L["Icon Width Factor"] = "Facteur de largeur d'icône"
|
||||
L["Stretches the icon"] = "Étire l'icône"
|
||||
L["Icon Padding"] = "Remplissage d'icônes"
|
||||
L["Space between Icons"] = "Espace entre les icônes"
|
||||
L["Position"] = "Position"
|
||||
L["Aura Position"] = "Position de l'aura"
|
||||
L["Position of the aura icons"] = "Position de l'icône de l'aura"
|
||||
L["Top"] = "Haut"
|
||||
L["Bottom"] = "Bas"
|
||||
L["Left"] = "Gauche"
|
||||
L["Right"] = "Droite"
|
||||
L["Grow Direction"] = "Direction de croissance"
|
||||
L["Grow Direction of the aura icons"] = "Direction de croissance de l'icônr de l'aura"
|
||||
L["Horizontal offset"] = "Décalage horizontal"
|
||||
L["Vertical offset"] = "Décalage verticale"
|
||||
L["Alpha"] = "Alpha"
|
||||
L["Debuffs"] = "Debuffs"
|
||||
L["Dynamic Timer Color"] = "Couleur de la minuterie dynamique"
|
||||
L["Show dynamic color on cooldown numbers"] = "Afficher la couleur dynamique sur les numéros de recharge"
|
||||
L["Color of the cooldown timer and stacks"] = "Couleur du temps de recharge et des piles"
|
||||
L["Spell School Colors"] = "Couleurs de l'école de sorts"
|
||||
L["Spell School Colors Enabled"] = "Couleurs de l'école de sorts"
|
||||
L["Show border colors by spell school"] = "Afficher les couleurs des bordures par école de sorts"
|
||||
L["Curse"] = "Malédiction"
|
||||
L["Color of the border"] = "Couleur de la bordure"
|
||||
L["Magic"] = "Magique"
|
||||
L["Poison"] = "Poison"
|
||||
L["Physical"] = "Physique"
|
||||
L["Immune"] = "Immunisé"
|
||||
L["Disease"] = "Maladie"
|
||||
L["Aura"] = "Aura"
|
||||
L["Form"] = "Forme"
|
||||
|
||||
-- Castbar.lua
|
||||
L["Cast Bar"] = "Barre d'incantation"
|
||||
L["Bar"] = "Barre"
|
||||
L["Bar Size"] = "Taille de la barre"
|
||||
L["Bar height"] = "Hauteur de la barre"
|
||||
L["Height of the bar"] = "Hauteur de la barre"
|
||||
L["Bar width"] = "Largeur de la barre"
|
||||
L["Width of the bars"] = "Largeur de la barre"
|
||||
L["Texture"] = "Texture"
|
||||
L["Bar texture"] = "Texture de la barre"
|
||||
L["Texture of the bar"] = "Texture de la barre"
|
||||
L["Bar color"] = "Couleur de la barre"
|
||||
L["Color of the cast bar"] = "Couleur de la barre d'incantation"
|
||||
L["Background color"] = "Couleur de l'Arrière plan"
|
||||
L["Color of the cast bar background"] = "Couleur de l'Arrière plan de la barre d'incantation"
|
||||
L["Border size"] = "taille de la bordure"
|
||||
L["Status Bar border"] = "Bordure de la barre de statut"
|
||||
L["Status Bar border color"] = "Couleur de la bordure de la barre de statut"
|
||||
L["Icon"] = "Icone"
|
||||
L["Icon size"] = "Taille de l'icone"
|
||||
L["Icon border"] = "Bordure de l'icone"
|
||||
L["Icon border color"] = "Couleur de la bordure de l'icone"
|
||||
L["Spark"] = "Etincelle"
|
||||
L["Spark enabled"] = "Etincelle activé"
|
||||
L["Spark color"] = "Couleur de l'étincelle"
|
||||
L["Color of the cast bar spark"] = "Couleur de l'étincelle de la barre d'incantation"
|
||||
L["Font of the castbar"] = "Police de la barre d'incantation"
|
||||
L["Font size"] = "Taille de la police"
|
||||
L["Size of the text"] = "Taille du texte"
|
||||
L["Format"] = "Format"
|
||||
L["Timer Format"] = "Format du timer"
|
||||
L["Remaining"] = "Restant"
|
||||
L["Total"] = "Total"
|
||||
L["Both"] = "Les deux"
|
||||
L["Castbar position"] = "Position de la barre d'incantation"
|
||||
L["Icon position"] = "Position de l'icone"
|
||||
L["Offsets"] = "Décalage"
|
||||
|
||||
-- Classicon.lua
|
||||
L["Class Icon"] = "Icone de la classe"
|
||||
L["Balance"] = "Equilibre"
|
||||
L["Feral"] = "Combat farouche"
|
||||
L["Restoration"] = "Restauration"
|
||||
L["Beast Mastery"] = "Maîtrise des bêtes"
|
||||
L["Marksmanship"] = "Précision"
|
||||
L["Survival"] = "Survie"
|
||||
L["Arcane"] = "Arcane"
|
||||
L["Fire"] = "Feu"
|
||||
L["Frost"] = "Givre"
|
||||
L["Holy"] = "Sacré"
|
||||
L["Retribution"] = "Vindicte"
|
||||
L["Protection"] = "Protection"
|
||||
L["Discipline"] = "Discipline"
|
||||
L["Shadow"] = "Ombre"
|
||||
L["Assassination"] = "Assassinat"
|
||||
L["Combat"] = "Combat"
|
||||
L["Subtlety"] = "Finesse"
|
||||
L["Elemental"] = "Elementaire"
|
||||
L["Enhancement"] = "Amélioration"
|
||||
L["Affliction"] = "Affliction"
|
||||
L["Demonology"] = "Démonologie"
|
||||
L["Destruction"] = "Destruction"
|
||||
L["Arms"] = "Armes"
|
||||
L["Fury"] = "Fureur"
|
||||
L["Show Spec Icon"] = "Afficher l'icone des spécialisations"
|
||||
L["Shows Spec Icon once spec is detected"] = "Afficher l'icone des spécialisations une fois que les spé sont détectés"
|
||||
L["Icon width factor"] = "Facteur de largeur d'icône"
|
||||
L["This changes positions with trinket"] = "Cela change de position avec le trinket"
|
||||
L["Border color"] = "Couleur de la bordure"
|
||||
|
||||
--CombatIndicator.lua
|
||||
L["Combat Indicator"] = "Indicateur de combat"
|
||||
L["Enable Combat Indicator icon"] = "Activer l'icone de l'indicateur de combat"
|
||||
L["Anchor"] = "Ancre"
|
||||
L["This changes the anchor of the ci icon"] = "Cela change l'ancre de l'icône de l'indicateur de combat"
|
||||
L["This changes position relative to its anchor of the ci icon"] = "Cela change la position par rapport à son ancre de l'icône de l'indicateur de combat"
|
||||
|
||||
-- Cooldowns.lua
|
||||
L["Cooldowns"] = "Temps de recharge (CD)"
|
||||
L["COOLDOWN USED: %s (%s) used %s - %s sec. cooldown"] = "CD utilisé : %s (%s) utilisé %s - %s sec. cd"
|
||||
L["Enabled cooldown module"] = "Module du temps de recharge activé"
|
||||
L["Cooldown size"] = "Taille du temps de recharge"
|
||||
L["Size of each cd icon"] = "Taille de chaque icone de CD"
|
||||
L["Max Icons per row"] = "Nombre maximal d'icônes par ligne"
|
||||
L["Scale of the font"] = "Échelle de la police"
|
||||
L["Anchor of the cooldown icons"] = "Ancre de l'icone du temps de recharge"
|
||||
L["Grow Direction of the cooldown icons"] = "Direction de croissance des icônes de temps de recharge"
|
||||
L["Offset"] = "Décalage"
|
||||
|
||||
-- Diminishings.lua
|
||||
L["Diminishings"] = "Rendements décroissants (DR)"
|
||||
L["Enabled DR module"] = "Activer le module DR"
|
||||
L["DR Cooldown position"] = "Position du temps de recharge des DR"
|
||||
L["Position of the cooldown icons"] = "Position des icones de temps de recharge"
|
||||
L["DR Border Colors"] = "Couleur de la bordure des DR"
|
||||
L["Dr Border Colors Enabled"] = "Couleur de la bordure des DR activé"
|
||||
L["Colors borders of DRs in respective DR-color below"] = "Couleurs des bordures des DR dans la couleur DR respective ci-dessous"
|
||||
L["Half"] = "Demi"
|
||||
L["Quarter"] = "Quart"
|
||||
L["Categories"] = "Catégories"
|
||||
L["Force Icon"] = "Forcer les icones"
|
||||
L["Icon of the DR"] = "Icones des DR"
|
||||
|
||||
-- ExportImport.lua
|
||||
L["Export Import"] = "Exporter Importer"
|
||||
L["Profile Export Import"] = "Profile de l'Exporter Importer"
|
||||
|
||||
-- Healthbar.lua
|
||||
L["Health Bar"] = "Barre de vie"
|
||||
L["DEAD"] = "MORT"
|
||||
L["LEAVE"] = "QUITTER"
|
||||
L["General"] = "Général"
|
||||
L["Color of the status bar background"] = "Couleur de l'arrière-plan de la barre d'état"
|
||||
L["Font of the bar"] = "Police de la barre"
|
||||
L["Name font size"] = "Taille de la police du nom"
|
||||
L["Size of the name text"] = "Taille du texte du nom"
|
||||
L["Health font size"] = "Taille de la police de la santé"
|
||||
L["Size of the health text"] = "Taille du texte de la santé"
|
||||
L["Size of the border"] = "Taille de la bordure"
|
||||
L["Health Bar Text"] = "Texte de la barre de santé"
|
||||
L["Show name text"] = "Afficher le texte du nom"
|
||||
L["Show the units name"] = "Afficher le nom des unités"
|
||||
L["Show ArenaX"] = "Afficher ArenaX"
|
||||
L["Show Arena1-5 as name instead"] = "Afficher Arena1-5 comme nom à la place"
|
||||
L["Show the actual health"] = "Afficher la santé réelle"
|
||||
L["Show the actual health on the health bar"] = "Afficher la santé réelle sur la barre de santé"
|
||||
L["Show max health"] = "Afficher la santé maximale"
|
||||
L["Show max health on the health bar"] = "Afficher la santé maximale sur la barre de santé"
|
||||
L["Show health percentage"] = "Afficher le pourcentage de santé"
|
||||
L["Show health percentage on the health bar"] = "Afficher le pourcentage de santé sur la barre de santé"
|
||||
|
||||
-- Highlight.lua
|
||||
L["Highlight"] = "Surbrillance"
|
||||
L["Show Inside"] = "Afficher dedans"
|
||||
L["Show Highlight border inside of frame"] = "Afficher la bordure de surbrillance à l'intérieur du cadre"
|
||||
L["Colors"] = "Couleurs"
|
||||
L["Target border color"] = "Couleur de la bordure cible"
|
||||
L["Color of the selected targets border"] = "Couleur de la bordure des cibles sélectionnées"
|
||||
L["Focus border color"] = "Couleur de la bordure du Focus"
|
||||
L["Color of the focus border"] = "Couleur de la bordure du Focus"
|
||||
L["Highlight target"] = "Mettre la cible en surbrillance"
|
||||
L["Toggle if the selected target should be highlighted"] = "Basculer si la cible sélectionnée doit être mise en surbrillance"
|
||||
L["Show border around target"] = "Afficher la bordure autour de la cible"
|
||||
L["Toggle if a border should be shown around the selected target"] = "Basculer si une bordure doit être affichée autour de la cible sélectionnée"
|
||||
L["Show border around focus"] = "Afficher la bordure autour du focus"
|
||||
L["Toggle of a border should be shown around the current focus"] = "La bascule d'une bordure doit être affichée autour du focus actuel"
|
||||
|
||||
-- Pets.lua
|
||||
L["Pets"] = "Familier"
|
||||
L["Enables Pets module"] = "Activer le module familier (pet)"
|
||||
L["Width of the bar"] = "Largeur de la barre"
|
||||
L["Health color"] = "Couleur de la santé"
|
||||
L["Color of the status bar"] = "Couleur de la barre d'état"
|
||||
L["Portrait"] = "Portrait"
|
||||
L["Health Values"] = "Valeurs de santé"
|
||||
|
||||
-- Powerbar.lua
|
||||
L["Power Bar"] = "Barre de puissance"
|
||||
L["Power Bar Text"] = "Texte de la barre de puissance"
|
||||
L["Power Texts"] = "Textes de puissance"
|
||||
L["Show race"] = "Afficher la race"
|
||||
L["Show spec"] = "Afficher la spé"
|
||||
L["Show the actual power"] = "Afficher la puissance actuelle"
|
||||
L["Show the actual power on the power bar"] = "Afficher la puissance actuelle sur la barre de puissance"
|
||||
L["Show max power"] = "Afficher la puissance maximale"
|
||||
L["Show max power on the power bar"] = "Afficher la puissance maximale sur la barre de puissance"
|
||||
L["Show power percentage"] = "Afficher le pourcentage de puissance"
|
||||
L["Show power percentage on the power bar"] = "Afficher le pourcentage de puissance sur la barre de puissance"
|
||||
|
||||
-- Racial.lua
|
||||
L["Racial"] = "Raciale"
|
||||
L["Enable racial icon"] = "Activer l'icone du raciale"
|
||||
L["This changes the anchor of the racial icon"] = "Cela change l'ancre de l'icône du raciale"
|
||||
L["This changes position relative to its anchor of the racial icon"] = "Cela change de position par rapport à son ancre de l'icône du raciale"
|
||||
|
||||
-- TotemPlates.lua
|
||||
L["Totem Plates"] = "Totem Plates"
|
||||
L["Customize Totems"] = "Personnaliser les totems"
|
||||
L["Custom totem name"] = "Personnaliser le nom des totems"
|
||||
L["Totem General"] = "Totem Général"
|
||||
L["Turns totem icons instead of nameplates on or off. (Requires reload)"] = "Active ou désactive les icônes totem au lieu des nameplates. (Nécessite un rechargement)"
|
||||
L["Show friendly"] = "Montrer les amis"
|
||||
L["Show enemy"] = "Montrer les ennemies"
|
||||
L["Totem size"] = "Taille du totem"
|
||||
L["Size of totem icons"] = "Taille de l'icone du totem"
|
||||
L["Font of the custom totem name"] = "Police du nom du totem personnalisé"
|
||||
L["Apply alpha when no target"] = "Appliquer l'alpha en l'absence de cible"
|
||||
L["Always applies alpha, even when you don't have a target. Else it is 1."] = "Applique toujours l'alpha, même lorsque vous n'avez pas de cible. Sinon c'est 1."
|
||||
L["Apply alpha when targeted"] = "Appliquer l'alpha lorsque ciblé"
|
||||
L["Always applies alpha, even when you target the totem. Else it is 1."] = "Applique toujours l'alpha, même lorsque vous ciblez le totem. Sinon c'est 1."
|
||||
L["All totem border alphas (configurable per totem)"] = "Tous les alphas de bordure de totem (configurables par totem)"
|
||||
L["Totem icon border style"] = "Style de bordure d'icône totem"
|
||||
L["All totem border color"] = "Toutes les couleurs de bordure de totem"
|
||||
|
||||
-- Trinket.lua
|
||||
L["Trinket"] = "Trinket (Bijoux PvP)"
|
||||
L["Enable trinket icon"] = "Activer l'icone du trinket"
|
||||
L["This changes positions of the trinket"] = "Cela change les positions du trinket"
|
||||
|
||||
-- XiconProfiles.lua
|
||||
L["Profile"] = "Profile"
|
||||
|
||||
-- Frame.lua
|
||||
L["Gladdy - drag to move"] = "Gladdy - faites glisser pour déplacer"
|
||||
|
||||
-- Gladdy.lua
|
||||
L["Welcome to Gladdy!"] = "Bienvenue chez Gladdy !"
|
||||
L["First run has been detected, displaying test frame."] = "La première exécution a été détectée, affichant la trame de test."
|
||||
L["Valid slash commands are:"] = "Les commandes de slash valides sont :"
|
||||
L["If this is not your first run please lock or move the frame to prevent this from happening."] = "S'il ne s'agit pas de votre première utilisation, veuillez verrouiller ou déplacer le cadre pour éviter que cela ne se produise."
|
||||
|
||||
-- Options.lua
|
||||
L["settings"] = "paramètres"
|
||||
L["Reset module"] = "Réinitialiser le module"
|
||||
L["Reset module to defaults"] = "Réinitialiser le module"
|
||||
L["No settings"] = "Pas de paramètres"
|
||||
L["Module has no settings"] = "Le module n'a pas de paramètres"
|
||||
L["General settings"] = "Paramètres général"
|
||||
L["Lock frame"] = "Verouiller le cadre"
|
||||
L["Toggle if frame can be moved"] = "Cliquez si le cadre peut être bougé"
|
||||
L["Grow frame upwards"] = "Agrandir le cadre vers le haut"
|
||||
L["If enabled the frame will grow upwards instead of downwards"] = "Si activé, le cadre grandira vers le haut au lieu de vers le bas"
|
||||
L["Down"] = "Vers la bas"
|
||||
L["Up"] = "Vers le haut"
|
||||
L["Frame General"] = "Cadre général"
|
||||
L["Frame scale"] = "Taille du cadre"
|
||||
L["Scale of the frame"] = "Taille du cadre"
|
||||
L["Frame padding"] = "Remplissage du cadre"
|
||||
L["Padding of the frame"] = "Remplissage du cadre"
|
||||
L["Frame width"] = "Largeur du cadre"
|
||||
L["Margin"] = "Marge"
|
||||
L["Margin between each button"] = "Marge entre chaque bouton"
|
||||
L["Cooldown General"] = "Temps de recharge Général"
|
||||
L["Font General"] = "Police Général"
|
||||
L["General Font"] = "Police Général"
|
||||
L["Font color text"] = "Texte de la couleur de la police"
|
||||
L["Font color timer"] = "Texte de la couleur de la police"
|
||||
L["Color of the timers"] = "Couleur des minuteurs"
|
||||
L["Icons General"] = "Icônes Général"
|
||||
L["Icon border style"] = "Style de bordure d'icône"
|
||||
L["This changes the border style of all icons"] = "Cela change le style de bordure de toutes les icônes"
|
||||
L["This changes the border color of all icons"] = "Cela change la couleur de bordure de toutes les icônes"
|
||||
L["Statusbar General"] = "Barre d'état Général"
|
||||
L["Statusbar texture"] = "Texture de la Barre d'état"
|
||||
L["This changes the texture of all statusbar frames"] = "Cela change la texture de tous les cadres de la barre d'état"
|
||||
L["Statusbar border style"] = "Style de bordure de la barre d'état"
|
||||
L["This changes the border style of all statusbar frames"] = "Cela modifie le style de bordure de tous les cadres de la barre d'état"
|
||||
L["Statusbar border offset divider (smaller is higher offset)"] = "Diviseur de décalage de bordure de barre d'état (le plus petit est le décalage le plus élevé)"
|
||||
L["Offset of border to statusbar (in case statusbar shows beyond the border)"] = "Décalage de la bordure par rapport à la barre d'état (au cas où la barre d'état s'afficherait au-delà de la bordure)"
|
||||
L["Statusbar border color"] = "Couleur de la bordure de la barre d'état"
|
||||
L["This changes the border color of all statusbar frames"] = "Cela change la couleur de la bordure de tous les cadres de la barre d'état"
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -1,405 +0,0 @@
|
||||
local major = "DRData-1.0-BCC"
|
||||
local minor = tonumber(string.match("$Revision: 793$", "(%d+)") or 1)
|
||||
|
||||
assert(LibStub, string.format("%s requires LibStub.", major))
|
||||
|
||||
local Data = LibStub:NewLibrary(major, minor)
|
||||
if( not Data ) then return end
|
||||
|
||||
-- How long before DR resets
|
||||
Data.RESET_TIME = 18
|
||||
|
||||
-- List of spellID -> DR category
|
||||
Data.spells = {
|
||||
--[[ DISORIENTS ]]--
|
||||
-- Maim
|
||||
[22570] = "disorient",
|
||||
|
||||
-- Sap
|
||||
[6770] = "disorient",
|
||||
[2070] = "disorient",
|
||||
[11297] = "disorient",
|
||||
|
||||
-- Gouge (Remove all except 1776 come WoTLK)
|
||||
[1776] = "disorient",
|
||||
[1777] = "disorient",
|
||||
[8629] = "disorient",
|
||||
[11285] = "disorient",
|
||||
[11286] = "disorient",
|
||||
[38764] = "disorient",
|
||||
|
||||
-- Polymorph
|
||||
[118] = "disorient",
|
||||
[12824] = "disorient",
|
||||
[12825] = "disorient",
|
||||
[28272] = "disorient",
|
||||
[28271] = "disorient",
|
||||
[12826] = "disorient",
|
||||
|
||||
--[[ FEARS ]]--
|
||||
-- Fear (Warlock)
|
||||
[5782] = "fear",
|
||||
[6213] = "fear",
|
||||
[6215] = "fear",
|
||||
|
||||
-- Seduction (Pet)
|
||||
[6358] = "fear",
|
||||
|
||||
-- Howl of Terror
|
||||
[5484] = "fear",
|
||||
[17928] = "fear",
|
||||
|
||||
-- Psychic scream
|
||||
[8122] = "fear",
|
||||
[8124] = "fear",
|
||||
[10888] = "fear",
|
||||
[10890] = "fear",
|
||||
|
||||
-- Scare Beast
|
||||
[1513] = "fear",
|
||||
[14326] = "fear",
|
||||
[14327] = "fear",
|
||||
|
||||
-- Turn Evil
|
||||
[10326] = "fear",
|
||||
|
||||
-- Intimidating Shout
|
||||
[5246] = "fear",
|
||||
|
||||
--[[ CONTROL STUNS ]]--
|
||||
-- Hammer of Justice
|
||||
[853] = "ctrlstun",
|
||||
[5588] = "ctrlstun",
|
||||
[5589] = "ctrlstun",
|
||||
[10308] = "ctrlstun",
|
||||
|
||||
-- Bash
|
||||
[5211] = "ctrlstun",
|
||||
[6798] = "ctrlstun",
|
||||
[8983] = "ctrlstun",
|
||||
|
||||
-- Pounce
|
||||
[9005] = "ctrlstun",
|
||||
[9823] = "ctrlstun",
|
||||
[9827] = "ctrlstun",
|
||||
[27006] = "ctrlstun",
|
||||
|
||||
-- Intimidation
|
||||
[19577] = "ctrlstun",
|
||||
|
||||
-- Charge
|
||||
[7922] = "ctrlstun",
|
||||
|
||||
-- Cheap Shot
|
||||
[1833] = "ctrlstun",
|
||||
|
||||
-- War Stomp
|
||||
[20549] = "ctrlstun",
|
||||
|
||||
-- Intercept
|
||||
[20253] = "ctrlstun",
|
||||
[20614] = "ctrlstun",
|
||||
[20615] = "ctrlstun",
|
||||
[25273] = "ctrlstun",
|
||||
[25274] = "ctrlstun",
|
||||
|
||||
-- Concussion Blow
|
||||
[12809] = "ctrlstun",
|
||||
|
||||
-- Shadowfury
|
||||
[30283] = "ctrlstun",
|
||||
[30413] = "ctrlstun",
|
||||
[30414] = "ctrlstun",
|
||||
|
||||
-- Unstable Affliction (Silence)
|
||||
[43523] = "ua",
|
||||
[31117] = "ua",
|
||||
|
||||
-- Impact
|
||||
[12355] = "rndstun",
|
||||
|
||||
--[[ RANDOM STUNS ]]--
|
||||
-- Stoneclaw Stun
|
||||
[39796] = "rndstun",
|
||||
|
||||
-- Starfire Stun
|
||||
[16922] = "rndstun",
|
||||
|
||||
-- Mace Stun
|
||||
[5530] = "rndstun",
|
||||
|
||||
-- Stormherald/Deep Thunder
|
||||
[34510] = "rndstun",
|
||||
|
||||
-- Seal of Justice
|
||||
[20170] = "rndstun",
|
||||
|
||||
-- Blackout
|
||||
[15269] = "rndstun",
|
||||
|
||||
-- Revenge Stun
|
||||
[12798] = "rndstun",
|
||||
|
||||
-- Pyroclasm
|
||||
[18093] = "rndstun",
|
||||
|
||||
--[[ CYCLONE ]]--
|
||||
-- Blind
|
||||
[2094] = "cyclone",
|
||||
|
||||
-- Cyclone
|
||||
[33786] = "cyclone",
|
||||
|
||||
--[[ ROOTS ]]--
|
||||
-- Freeze (Water Elemental)
|
||||
[33395] = "root",
|
||||
|
||||
-- Frost Nova
|
||||
[122] = "root",
|
||||
[865] = "root",
|
||||
[6131] = "root",
|
||||
[10230] = "root",
|
||||
[27088] = "root",
|
||||
|
||||
-- Entangling Roots
|
||||
[339] = "root",
|
||||
[1062] = "root",
|
||||
[5195] = "root",
|
||||
[5196] = "root",
|
||||
[9852] = "root",
|
||||
[9853] = "root",
|
||||
[26989] = "root",
|
||||
|
||||
-- Nature's Grasp
|
||||
[19975] = "root",
|
||||
[19974] = "root",
|
||||
[19973] = "root",
|
||||
[19972] = "root",
|
||||
[19971] = "root",
|
||||
[19970] = "root",
|
||||
[27010] = "root",
|
||||
|
||||
--[[ RANDOM ROOTS ]]--
|
||||
-- Improved Hamstring
|
||||
[23694] = "rndroot",
|
||||
|
||||
-- Frostbite
|
||||
[12494] = "rndroot",
|
||||
|
||||
--[[ SLEEPS ]]--
|
||||
-- Hibernate
|
||||
[2637] = "disorient",
|
||||
[18657] = "disorient",
|
||||
[18658] = "disorient",
|
||||
|
||||
-- Wyvern Sting
|
||||
[19386] = "disorient",
|
||||
[24132] = "disorient",
|
||||
[24133] = "disorient",
|
||||
[27068] = "disorient",
|
||||
|
||||
--[[ MISC ]]--
|
||||
-- Chastise
|
||||
[44041] = "chastise",
|
||||
[44043] = "chastise",
|
||||
[44044] = "chastise",
|
||||
[44045] = "chastise",
|
||||
[44046] = "chastise",
|
||||
[44047] = "chastise",
|
||||
|
||||
-- Dragon's Breath
|
||||
[31661] = "scatters", -- Dragon's Breath
|
||||
[33041] = "scatters", -- Dragon's Breath
|
||||
[33042] = "scatters", -- Dragon's Breath
|
||||
[33043] = "scatters", -- Dragon's Breath
|
||||
-- Repentance
|
||||
[20066] = "disorient",
|
||||
|
||||
-- Scatter Shot
|
||||
[19503] = "scatters",
|
||||
|
||||
-- Freezing Trap
|
||||
[3355] = "disorient",
|
||||
[14308] = "disorient",
|
||||
[14309] = "disorient",
|
||||
|
||||
-- Improved Conc Shot
|
||||
[19410] = "rndstun",
|
||||
[22915] = "rndstun",
|
||||
[28445] = "rndstun",
|
||||
|
||||
-- Death Coil
|
||||
[6789] = "dc",
|
||||
[17925] = "dc",
|
||||
[17926] = "dc",
|
||||
[27223] = "dc",
|
||||
|
||||
-- Kidney Shot
|
||||
[408] = "ks",
|
||||
[8643] = "ks",
|
||||
|
||||
-- Mind Control
|
||||
[605] = "charm",
|
||||
[10911] = "charm",
|
||||
[10912] = "charm",
|
||||
|
||||
-- Counterattack
|
||||
[19306] = "counterattack"
|
||||
}
|
||||
|
||||
-- DR Category names
|
||||
Data.typeNames = {
|
||||
["disorient"] = "Disorients",
|
||||
["fear"] = "Fears",
|
||||
["ctrlstun"] = "Controlled Stuns",
|
||||
["rndstun"] = "Random Stuns",
|
||||
["cyclone"] = "Cyclone/Blind",
|
||||
["ks"] = "Kidney Shot",
|
||||
["chastise"] = "Chastise",
|
||||
["scatters"] = "Scatter Shot",
|
||||
["freezetrap"] = "Freeze Trap",
|
||||
["rndroot"] = "Random Roots",
|
||||
["dc"] = "Death Coil",
|
||||
["sleep"] = "Sleep",
|
||||
["root"] = "Controlled Roots",
|
||||
["impconc"] = "Imp Concussive Shot",
|
||||
["charm"] = "Charms",
|
||||
["repentance"] = "Repentance",
|
||||
["dragonsbreath"] = "Dragon's Breath",
|
||||
["ua"] = "Unstable Affliction Silence",
|
||||
["counterattack"] = "Counterattack Immobilize"
|
||||
}
|
||||
|
||||
-- Categories that have DR in PvE as well as PvP
|
||||
Data.pveDRs = {
|
||||
["ks"] = true,
|
||||
["ctrlstun"] = true,
|
||||
["rndstun"] = true,
|
||||
["cyclone"] = true,
|
||||
}
|
||||
|
||||
-- List of DRs
|
||||
Data.categories = {}
|
||||
for _, cat in pairs(Data.spells) do
|
||||
Data.categories[cat] = true
|
||||
end
|
||||
|
||||
-- Public APIs
|
||||
-- Category name in something usable
|
||||
function Data:GetCategoryName(cat)
|
||||
return cat and Data.typeNames[cat] or nil
|
||||
end
|
||||
|
||||
-- Spell list
|
||||
function Data:GetSpells()
|
||||
return Data.spells
|
||||
end
|
||||
|
||||
-- Seconds before DR resets
|
||||
function Data:GetResetTime()
|
||||
return Data.RESET_TIME
|
||||
end
|
||||
|
||||
-- Get the category of the spellID
|
||||
function Data:GetSpellCategory(spellID)
|
||||
return spellID and Data.spells[spellID] or nil
|
||||
end
|
||||
|
||||
-- Does this category DR in PvE?
|
||||
function Data:IsPVE(cat)
|
||||
return cat and Data.pveDRs[cat] or nil
|
||||
end
|
||||
|
||||
-- List of categories
|
||||
function Data:GetCategories()
|
||||
return Data.categories
|
||||
end
|
||||
|
||||
-- Next DR, if it's 1.0, next is 0.50, if it's 0.50 next is 0.25 and such
|
||||
function Data:NextDR(diminished)
|
||||
if( diminished == 1.0 ) then
|
||||
return 0.50
|
||||
elseif( diminished == 0.50 ) then
|
||||
return 0.25
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[ EXAMPLES ]]--
|
||||
--[[
|
||||
This is how you would track DR easily, you're welcome to do whatever you want with the below 4 functions.
|
||||
|
||||
Does not include tracking for PvE, you'd need to hack that in yourself but it's not (too) hard.
|
||||
]]
|
||||
|
||||
--[[
|
||||
local trackedPlayers = {}
|
||||
local function debuffGained(spellID, destName, destGUID, isEnemy)
|
||||
if( not trackedPlayers[destGUID] ) then
|
||||
trackedPlayers[destGUID] = {}
|
||||
end
|
||||
|
||||
-- See if we should reset it back to undiminished
|
||||
local drCat = DRData:GetSpellCae
|
||||
local tracked = trackedPlayers[destGUID][drCat]
|
||||
if( tracked and tracked.reset <= GetTime() ) then
|
||||
tracked.diminished = 1.0
|
||||
end
|
||||
end
|
||||
|
||||
local function debuffFaded(spellID, destName, destGUID, isEnemy)
|
||||
local drCat = DRData:GetSpellCategory(spellID)
|
||||
if( not trackedPlayers[destGUID] ) then
|
||||
trackedPlayers[destGUID] = {}
|
||||
end
|
||||
|
||||
if( not trackedPlayers[destGUID][drCat] ) then
|
||||
trackedPlayers[destGUID][drCat] = { reset = 0, diminished = 1.0 }
|
||||
end
|
||||
|
||||
local time = GetTime()
|
||||
local tracked = trackedPlayers[destGUID][drCat]
|
||||
|
||||
tracked.reset = time + DRData:GetResetTime()
|
||||
tracked.diminished = nextDR(tracked.diminished)
|
||||
end
|
||||
|
||||
local function resetDR(destGUID)
|
||||
-- Reset the tracked DRs for this person
|
||||
if( trackedPlayers[destGUID] ) then
|
||||
for cat in pairs(trackedPlayers[destGUID]) do
|
||||
trackedPlayers[destGUID][cat].reset = 0
|
||||
trackedPlayers[destGUID][cat].diminished = 1.0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local COMBATLOG_OBJECT_TYPE_PLAYER = COMBATLOG_OBJECT_TYPE_PLAYER
|
||||
local COMBATLOG_OBJECT_REACTION_HOSTILE = COMBATLOG_OBJECT_REACTION_HOSTILE
|
||||
local COMBATLOG_OBJECT_CONTROL_PLAYER = COMBATLOG_OBJECT_CONTROL_PLAYER
|
||||
|
||||
local eventRegistered = {["SPELL_AURA_APPLIED"] = true, ["SPELL_AURA_REMOVED"] = true, ["PARTY_KILL"] = true, ["UNIT_DIED"] = true}
|
||||
local function COMBAT_LOG_EVENT_UNFILTERED(self, event, timestamp, eventType, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, spellID, spellName, spellSchool, auraType)
|
||||
if( not eventRegistered[eventType] or ( bit.band(destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= COMBATLOG_OBJECT_TYPE_PLAYER and bit.band(destFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) ~= COMBATLOG_OBJECT_CONTROL_PLAYER ) ) then
|
||||
return
|
||||
end
|
||||
|
||||
-- Enemy gained a debuff
|
||||
if( eventType == "SPELL_AURA_APPLIED" ) then
|
||||
if( auraType == "DEBUFF" and Data.Spells[spellID] ) then
|
||||
debuffGained(spellID, destName, destGUID, (bit.band(destFlags, COMBATLOG_OBJECT_REACTION_HOSTILE) == COMBATLOG_OBJECT_REACTION_HOSTILE))
|
||||
end
|
||||
|
||||
-- Buff or debuff faded from an enemy
|
||||
elseif( eventType == "SPELL_AURA_REMOVED" ) then
|
||||
if( auraType == "DEBUFF" and Data.Spells[spellID] ) then
|
||||
debuffFaded(spellID, destName, destGUID, (bit.band(destFlags, COMBATLOG_OBJECT_REACTION_HOSTILE) == COMBATLOG_OBJECT_REACTION_HOSTILE))
|
||||
end
|
||||
|
||||
-- Don't use UNIT_DIED inside arenas due to accuracy issues, outside of arenas we don't care too much
|
||||
elseif( ( eventType == "UNIT_DIED" and select(2, IsInInstance()) ~= "arena" ) or eventType == "PARTY_KILL" ) then
|
||||
resetDR(destGUID)
|
||||
end
|
||||
end
|
||||
]]
|
||||
@@ -1,8 +0,0 @@
|
||||
## Interface: 20400
|
||||
## Title: Lib: Diminishing Returns Data-1.0
|
||||
## Notes: DB of spellIDs -> DR category
|
||||
## Author: Mayen
|
||||
|
||||
LibStub-1.0\LibStub-1.0.xml
|
||||
|
||||
DRData-1.0.xml
|
||||
@@ -0,0 +1,400 @@
|
||||
--[[
|
||||
Name: DRList-1.0
|
||||
Description: Diminishing returns categorization. Fork of outdated DRData-1.0.
|
||||
Website: https://github.com/wardz/DRList-1.0/
|
||||
Documentation: https://wardz.github.io/DRList-1.0/
|
||||
Dependencies: LibStub
|
||||
License: MIT
|
||||
]]
|
||||
|
||||
--- DRList-1.0
|
||||
-- @module DRList-1.0
|
||||
local MAJOR, MINOR = "DRList-1.0", 40 -- Don't forget to change this in Spells.lua aswell!
|
||||
local Lib = assert(LibStub, MAJOR .. " requires LibStub."):NewLibrary(MAJOR, MINOR)
|
||||
if not Lib then return end -- already loaded
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- *** LOCALIZATIONS ARE AUTOMATICALLY GENERATED ***
|
||||
-- Please see Curseforge localization page if you'd like to help translate.
|
||||
-- https://www.curseforge.com/wow/addons/drlist-1-0/localization
|
||||
local L = {}
|
||||
Lib.L = L
|
||||
L["DISARMS"] = "Disarms"
|
||||
L["DISORIENTS"] = "Disorients"
|
||||
L["INCAPACITATES"] = "Incapacitates"
|
||||
L["KNOCKBACKS"] = "Knockbacks"
|
||||
L["ROOTS"] = "Roots"
|
||||
L["SILENCES"] = "Silences"
|
||||
L["STUNS"] = "Stuns"
|
||||
L["TAUNTS"] = "Taunts"
|
||||
L["FEARS"] = "Fears"
|
||||
L["RANDOM_ROOTS"] = "Random roots"
|
||||
L["RANDOM_STUNS"] = "Random stuns"
|
||||
L["OPENER_STUN"] = "Opener Stuns"
|
||||
L["HORROR"] = "Horrors"
|
||||
L["SCATTERS"] = "Scatters"
|
||||
L["SLEEPS"] = GetSpellInfo(1090) or "Sleep"
|
||||
L["MIND_CONTROL"] = GetSpellInfo(605) or "Mind Control"
|
||||
L["FROST_SHOCK"] = GetSpellInfo(15089) or "Frost Shock"
|
||||
L["KIDNEY_SHOT"] = GetSpellInfo(408) or "Kidney Shot"
|
||||
L["DEATH_COIL"] = GetSpellInfo(28412) or "Death Coil"
|
||||
L["UNSTABLE_AFFLICTION"] = GetSpellInfo(31117) or "Unstable Affliction"
|
||||
L["CHASTISE"] = GetSpellInfo(44041) or "Chastise"
|
||||
L["COUNTERATTACK"] = GetSpellInfo(19306) or "Counterattack"
|
||||
L["CYCLONE"] = GetSpellInfo(33786) or "Cyclone"
|
||||
L["BANISH"] = GetSpellInfo(710) or "Banish"
|
||||
L["CHARGE"] = GetSpellInfo(100) or "Charge"
|
||||
|
||||
-- luacheck: push ignore 542
|
||||
local locale = GetLocale()
|
||||
if locale == "deDE" then
|
||||
L["FEARS"] = "Furchteffekte"
|
||||
L["KNOCKBACKS"] = "Rückstoßeffekte"
|
||||
L["ROOTS"] = "Bewegungsunfähigkeitseffekte"
|
||||
L["SILENCES"] = "Stilleeffekte"
|
||||
L["STUNS"] = "Betäubungseffekte"
|
||||
L["TAUNTS"] = "Spotteffekte"
|
||||
elseif locale == "frFR" then
|
||||
L["FEARS"] = "Peurs"
|
||||
L["KNOCKBACKS"] = "Projections"
|
||||
L["ROOTS"] = "Immobilisations"
|
||||
L["SILENCES"] = "Silences"
|
||||
L["STUNS"] = "Etourdissements"
|
||||
L["TAUNTS"] = "Provocations"
|
||||
elseif locale == "itIT" then
|
||||
--@localization(locale="itIT", namespace="Categories", format="lua_additive_table", handle-unlocalized="ignore")@
|
||||
elseif locale == "koKR" then
|
||||
L["DISORIENTS"] = "방향 감각 상실"
|
||||
L["INCAPACITATES"] = "행동 불가"
|
||||
L["KNOCKBACKS"] = "밀쳐내기"
|
||||
L["ROOTS"] = "이동 불가"
|
||||
L["SILENCES"] = "침묵"
|
||||
L["STUNS"] = "기절"
|
||||
elseif locale == "ptBR" then
|
||||
--@localization(locale="ptBR", namespace="Categories", format="lua_additive_table", handle-unlocalized="ignore")@
|
||||
elseif locale == "ruRU" then
|
||||
L["DISARMS"] = "Разоружение"
|
||||
L["DISORIENTS"] = "Дезориентация"
|
||||
L["FEARS"] = "Опасения"
|
||||
L["INCAPACITATES"] = "Паралич"
|
||||
L["KNOCKBACKS"] = "Отбрасывание"
|
||||
L["RANDOM_ROOTS"] = "Случайные корни"
|
||||
L["RANDOM_STUNS"] = "Случайные оглушения"
|
||||
L["ROOTS"] = "Сковывание"
|
||||
L["SILENCES"] = "Немота"
|
||||
L["STUNS"] = "Оглушение"
|
||||
L["TAUNTS"] = "Насмешки"
|
||||
elseif locale == "esES" or locale == "esMX" then
|
||||
L["DISARMS"] = "Desarmar"
|
||||
L["DISORIENTS"] = "Desorientar"
|
||||
L["FEARS"] = "Miedos"
|
||||
L["INCAPACITATES"] = "Incapacitar"
|
||||
L["KNOCKBACKS"] = "Derribos"
|
||||
L["RANDOM_ROOTS"] = "Raíces aleatorias"
|
||||
L["RANDOM_STUNS"] = "Aturdir aleatorio"
|
||||
L["ROOTS"] = "Raíces"
|
||||
L["SILENCES"] = "Silencios"
|
||||
L["STUNS"] = "Aturdimientos"
|
||||
L["TAUNTS"] = "Provocaciones"
|
||||
elseif locale == "zhCN" then
|
||||
L["DISARMS"] = "缴械"
|
||||
L["DISORIENTS"] = "迷惑"
|
||||
L["FEARS"] = "恐惧"
|
||||
L["INCAPACITATES"] = "瘫痪"
|
||||
L["KNOCKBACKS"] = "击退"
|
||||
L["RANDOM_ROOTS"] = "随机定身"
|
||||
L["RANDOM_STUNS"] = "随机眩晕"
|
||||
L["ROOTS"] = "定身"
|
||||
L["SILENCES"] = "沉默"
|
||||
L["STUNS"] = "昏迷"
|
||||
L["TAUNTS"] = "嘲讽"
|
||||
elseif locale == "zhTW" then
|
||||
L["DISARMS"] = "繳械"
|
||||
L["DISORIENTS"] = "迷惑"
|
||||
L["FEARS"] = "恐懼"
|
||||
L["INCAPACITATES"] = "癱瘓"
|
||||
L["KNOCKBACKS"] = "擊退"
|
||||
L["RANDOM_ROOTS"] = "隨機定身"
|
||||
L["RANDOM_STUNS"] = "隨機昏迷"
|
||||
L["ROOTS"] = "定身"
|
||||
L["SILENCES"] = "沉默"
|
||||
L["STUNS"] = "昏迷"
|
||||
L["TAUNTS"] = "嘲諷"
|
||||
end
|
||||
-- luacheck: pop
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-- Check what game version we're running
|
||||
Lib.gameExpansion = ({
|
||||
[WOW_PROJECT_MAINLINE] = "retail",
|
||||
[WOW_PROJECT_CLASSIC] = "classic",
|
||||
[WOW_PROJECT_BURNING_CRUSADE_CLASSIC or 5] = "tbc",
|
||||
})[WOW_PROJECT_ID]
|
||||
|
||||
local tocVersion = select(4, GetBuildInfo())
|
||||
if tocVersion >= 30400 and tocVersion < 40000 then
|
||||
Lib.gameExpansion = "wotlk" -- temporary check for wotlk build until new constant is added
|
||||
end
|
||||
|
||||
-- How long it takes for a DR to expire, in seconds.
|
||||
Lib.resetTimes = {
|
||||
retail = {
|
||||
["default"] = 18.5, -- 18 sec + 0.5 latency
|
||||
["npc"] = 23, -- Against mobs it seems to last slightly longer, depending on server load
|
||||
["knockback"] = 10, -- Knockbacks are immediately immune and only DRs for 10s
|
||||
},
|
||||
|
||||
classic = {
|
||||
["default"] = 19, -- dynamic between 15 and 20s
|
||||
["npc"] = 23,
|
||||
},
|
||||
|
||||
tbc = {
|
||||
["default"] = 19, -- dynamic between 15 and 20s
|
||||
["npc"] = 23,
|
||||
},
|
||||
|
||||
wotlk = {
|
||||
["default"] = 19, -- dynamic between 15 and 20s
|
||||
["npc"] = 23,
|
||||
},
|
||||
}
|
||||
|
||||
-- List of all DR categories, english -> localized.
|
||||
Lib.categoryNames = {
|
||||
retail = {
|
||||
["disorient"] = L.DISORIENTS,
|
||||
["incapacitate"] = L.INCAPACITATES,
|
||||
["silence"] = L.SILENCES,
|
||||
["stun"] = L.STUNS,
|
||||
["root"] = L.ROOTS,
|
||||
["disarm"] = L.DISARMS,
|
||||
["taunt"] = L.TAUNTS,
|
||||
["knockback"] = L.KNOCKBACKS,
|
||||
},
|
||||
|
||||
classic = {
|
||||
["incapacitate"] = L.INCAPACITATES,
|
||||
["stun"] = L.STUNS, -- controlled stun
|
||||
["root"] = L.ROOTS, -- controlled root
|
||||
["random_stun"] = L.RANDOM_STUNS, -- random proc stun, usually short (<3s)
|
||||
["random_root"] = L.RANDOM_ROOTS,
|
||||
["fear"] = L.FEARS,
|
||||
["mind_control"] = L.MIND_CONTROL,
|
||||
["frost_shock"] = L.FROST_SHOCK,
|
||||
["kidney_shot"] = L.KIDNEY_SHOT,
|
||||
},
|
||||
|
||||
tbc = {
|
||||
["disorient"] = L.DISORIENTS,
|
||||
["incapacitate"] = L.INCAPACITATES,
|
||||
["stun"] = L.STUNS,
|
||||
["random_stun"] = L.RANDOM_STUNS,
|
||||
["random_root"] = L.RANDOM_ROOTS,
|
||||
["root"] = L.ROOTS,
|
||||
["disarm"] = L.DISARMS,
|
||||
["fear"] = L.FEARS,
|
||||
["scatter"] = L.SCATTERS,
|
||||
["mind_control"] = L.MIND_CONTROL,
|
||||
["kidney_shot"] = L.KIDNEY_SHOT,
|
||||
["death_coil"] = L.DEATH_COIL,
|
||||
["unstable_affliction"] = L.UNSTABLE_AFFLICTION,
|
||||
["chastise"] = L.CHASTISE,
|
||||
["counterattack"] = L.COUNTERATTACK,
|
||||
},
|
||||
|
||||
wotlk = { -- WORK IN PROGRESS
|
||||
["incapacitate"] = L.INCAPACITATES,
|
||||
["stun"] = L.STUNS,
|
||||
["random_stun"] = L.RANDOM_STUNS,
|
||||
["random_root"] = L.RANDOM_ROOTS,
|
||||
["root"] = L.ROOTS,
|
||||
["disarm"] = L.DISARMS,
|
||||
["fear"] = L.FEARS,
|
||||
["scatter"] = L.SCATTERS,
|
||||
["silence"] = L.SILENCES,
|
||||
["horror"] = L.HORROR,
|
||||
["mind_control"] = L.MIND_CONTROL,
|
||||
["cyclone"] = L.CYCLONE,
|
||||
["charge"] = L.CHARGE,
|
||||
["opener_stun"] = L.OPENER_STUN,
|
||||
["counterattack"] = L.COUNTERATTACK,
|
||||
},
|
||||
}
|
||||
|
||||
-- Categories that have DR against normal mobs.
|
||||
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories,
|
||||
-- see UnitClassification() and UnitIsQuestBoss().
|
||||
Lib.categoriesPvE = {
|
||||
retail = {
|
||||
["taunt"] = L.TAUNTS, -- Lib.categoryNames.retail.taunt
|
||||
["stun"] = L.STUNS,
|
||||
["root"] = L.ROOTS,
|
||||
},
|
||||
|
||||
classic = {
|
||||
["stun"] = L.STUNS,
|
||||
["kidney_shot"] = L.KIDNEY_SHOT,
|
||||
},
|
||||
|
||||
tbc = {
|
||||
["stun"] = L.STUNS,
|
||||
["random_stun"] = L.RANDOM_STUNS,
|
||||
["kidney_shot"] = L.KIDNEY_SHOT,
|
||||
},
|
||||
|
||||
wotlk = {
|
||||
--["taunt"] = L.TAUNTS,
|
||||
["stun"] = L.STUNS,
|
||||
["random_stun"] = L.RANDOM_STUNS,
|
||||
["opener_stun"] = L.OPENER_STUN,
|
||||
},
|
||||
}
|
||||
|
||||
-- Successives diminished durations
|
||||
Lib.diminishedDurations = {
|
||||
retail = {
|
||||
-- Decreases by 50%, immune at the 4th application
|
||||
["default"] = { 0.50, 0.25 },
|
||||
-- Decreases by 35%, immune at the 5th application
|
||||
["taunt"] = { 0.65, 0.42, 0.27 },
|
||||
-- Immediately immune
|
||||
["knockback"] = {},
|
||||
},
|
||||
|
||||
classic = {
|
||||
["default"] = { 0.50, 0.25 },
|
||||
},
|
||||
|
||||
tbc = {
|
||||
["default"] = { 0.50, 0.25 },
|
||||
},
|
||||
|
||||
wotlk = {
|
||||
["default"] = { 0.50, 0.25 },
|
||||
},
|
||||
}
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Public API
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
--- Get table of all spells that DRs.
|
||||
-- Key is the spellID, and value is the unlocalized DR category.
|
||||
-- For Classic the key is the localized spell name instead, and value
|
||||
-- is a table containing both the DR category and spell ID. (Classic has no spellID payload in the combat log)
|
||||
-- @see IterateSpellsByCategory
|
||||
-- @treturn ?table {number=string}|table {string=table}
|
||||
function Lib:GetSpells()
|
||||
return Lib.spellList
|
||||
end
|
||||
|
||||
--- Get table of all DR categories.
|
||||
-- Key is unlocalized name used for API functions, value is localized name used for UI.
|
||||
-- @treturn table {string=string}
|
||||
function Lib:GetCategories()
|
||||
return Lib.categoryNames[Lib.gameExpansion]
|
||||
end
|
||||
|
||||
--- Get table of all categories that DRs in PvE only.
|
||||
-- Key is unlocalized name used for API functions, value is localized name used for UI.
|
||||
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories,
|
||||
-- see UnitClassification() and UnitIsQuestBoss().
|
||||
-- Tip: you can combine :GetPvECategories() and :IterateSpellsByCategory() to get spellIDs only for PvE aswell.
|
||||
-- @treturn table {string=string}
|
||||
function Lib:GetPvECategories()
|
||||
return Lib.categoriesPvE[Lib.gameExpansion]
|
||||
end
|
||||
|
||||
--- Get constant for how long a DR lasts for a given category.
|
||||
-- @tparam[opt="default"] string category Unlocalized category name, or "npc" for PvE timer.
|
||||
-- @treturn number
|
||||
function Lib:GetResetTime(category)
|
||||
return Lib.resetTimes[Lib.gameExpansion][category or "default"] or Lib.resetTimes[Lib.gameExpansion].default
|
||||
end
|
||||
|
||||
--- Get unlocalized DR category by spell ID.
|
||||
-- For Classic (vanilla) you should pass in the spell name instead of ID.
|
||||
-- For Classic you also get an optional second return value
|
||||
-- which is the hardcoded spell ID of the spell name you passed in.
|
||||
-- You should use this ID to query additional info from Blizzard API if needed, as
|
||||
-- spell names only works for the player if they have the spell in their current spellbook.
|
||||
-- @tparam number spellID
|
||||
-- @treturn[1] string|nil The category name.
|
||||
-- @treturn[2] number|nil The spell ID. (Classic only)
|
||||
function Lib:GetCategoryBySpellID(spellID)
|
||||
if Lib.gameExpansion == "classic" then
|
||||
-- special case for classic as CLEU doesn't provide spellIDs
|
||||
local data = Lib.spellList[spellID]
|
||||
if not data then return end
|
||||
return data.category, data.spellID
|
||||
end
|
||||
|
||||
return Lib.spellList[spellID]
|
||||
end
|
||||
|
||||
--- Get localized category from unlocalized category name, case sensitive.
|
||||
-- @tparam string category Unlocalized category name
|
||||
-- @treturn ?string|nil The localized category name.
|
||||
function Lib:GetCategoryLocalization(category)
|
||||
return Lib.categoryNames[Lib.gameExpansion][category]
|
||||
end
|
||||
|
||||
--- Check if a category has DR against mobs.
|
||||
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories,
|
||||
-- see UnitClassification() and UnitIsQuestBoss().
|
||||
-- @tparam string category Unlocalized category name
|
||||
-- @treturn bool
|
||||
function Lib:IsPvECategory(category)
|
||||
return Lib.categoriesPvE[Lib.gameExpansion][category] and true or false -- make sure bool is always returned here
|
||||
end
|
||||
|
||||
--- Get next successive diminished duration
|
||||
-- @tparam number diminished How many times the DR has been applied so far
|
||||
-- @tparam[opt="default"] string category Unlocalized category name
|
||||
-- @usage local reduction = DRList:GetNextDR(1) -- returns 0.50, half duration on debuff
|
||||
-- @treturn number DR percentage in decimals. Returns 0 if max DR is reached or arguments are invalid.
|
||||
function Lib:GetNextDR(diminished, category)
|
||||
local durations = Lib.diminishedDurations[Lib.gameExpansion][category or "default"]
|
||||
if not durations and Lib.categoryNames[Lib.gameExpansion][category] then
|
||||
-- Redirect to default when "stun", "root" etc is passed
|
||||
durations = Lib.diminishedDurations[Lib.gameExpansion]["default"]
|
||||
end
|
||||
|
||||
return durations and durations[diminished] or 0
|
||||
end
|
||||
|
||||
do
|
||||
local next = _G.next
|
||||
|
||||
local function CategoryIterator(category, index)
|
||||
local spellList, newCat = Lib.spellList
|
||||
repeat
|
||||
index, newCat = next(spellList, index)
|
||||
if index then
|
||||
if newCat == category or newCat.category == category then
|
||||
return index, category
|
||||
end
|
||||
end
|
||||
until not index
|
||||
end
|
||||
|
||||
--- Iterate through the spells of a given category.
|
||||
-- @tparam string category Unlocalized category name
|
||||
-- @usage for spellID in DRList:IterateSpellsByCategory("root") do print(spellID) end
|
||||
-- @warning Slow function, do not use for frequent combat related stuff unless you cache results.
|
||||
-- @return Iterator function
|
||||
function Lib:IterateSpellsByCategory(category)
|
||||
assert(Lib.categoryNames[Lib.gameExpansion][category], "invalid category")
|
||||
return CategoryIterator, category
|
||||
end
|
||||
end
|
||||
|
||||
-- keep same API as DRData-1.0 for easier transitions
|
||||
Lib.GetCategoryName = Lib.GetCategoryLocalization
|
||||
Lib.IsPVE = Lib.IsPvECategory
|
||||
Lib.NextDR = Lib.GetNextDR
|
||||
Lib.GetSpellCategory = Lib.GetCategoryBySpellID
|
||||
Lib.IterateSpells = Lib.IterateSpellsByCategory
|
||||
Lib.RESET_TIME = Lib.resetTimes[Lib.gameExpansion].default
|
||||
Lib.pveDR = Lib.categoriesPvE
|
||||
@@ -0,0 +1,23 @@
|
||||
## Interface: 90205
|
||||
## Interface-Classic: 11402
|
||||
## Interface-BCC: 20504
|
||||
## Interface-Wrath: 30400
|
||||
## Title: Lib: DRList-1.0
|
||||
## Version: @project-version@
|
||||
## X-Category: Library
|
||||
## X-License: MIT
|
||||
## X-Curse-Project-ID: 315757
|
||||
## X-Wago-ID: 9rN4BxKD
|
||||
|
||||
#@no-lib-strip@
|
||||
libs\LibStub\LibStub.lua
|
||||
#@end-no-lib-strip@
|
||||
|
||||
DRList-1.0.xml
|
||||
#@do-not-package@
|
||||
tests\engine.lua
|
||||
tests\test-retail.lua
|
||||
tests\test-classic.lua
|
||||
tests\test-tbc.lua
|
||||
tests\test-wotlk.lua
|
||||
#@end-do-not-package@
|
||||
@@ -0,0 +1,4 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
|
||||
<Script file="DRList-1.0.lua"/>
|
||||
<Script file="Spells.lua"/>
|
||||
</Ui>
|
||||
@@ -0,0 +1,695 @@
|
||||
local Lib, version = LibStub("DRList-1.0")
|
||||
if Lib.spellList and version >= 40 then return end
|
||||
|
||||
if Lib.gameExpansion == "retail" then
|
||||
|
||||
-- SpellID list for mainline aka retail WoW
|
||||
Lib.spellList = {
|
||||
[207167] = "disorient", -- Blinding Sleet
|
||||
[207685] = "disorient", -- Sigil of Misery
|
||||
[33786] = "disorient", -- Cyclone
|
||||
[1513] = "disorient", -- Scare Beast
|
||||
[31661] = "disorient", -- Dragon's Breath
|
||||
[198909] = "disorient", -- Song of Chi-ji
|
||||
[202274] = "disorient", -- Incendiary Brew
|
||||
[105421] = "disorient", -- Blinding Light
|
||||
[10326] = "disorient", -- Turn Evil
|
||||
[605] = "disorient", -- Mind Control
|
||||
[8122] = "disorient", -- Psychic Scream
|
||||
[226943] = "disorient", -- Mind Bomb
|
||||
[2094] = "disorient", -- Blind
|
||||
[118699] = "disorient", -- Fear
|
||||
[5484] = "disorient", -- Howl of Terror
|
||||
[261589] = "disorient", -- Seduction (Grimoire of Sacrifice)
|
||||
[6358] = "disorient", -- Seduction (Succubus)
|
||||
[5246] = "disorient", -- Intimidating Shout 1
|
||||
[316593] = "disorient", -- Intimidating Shout 2 (TODO: not sure which one is correct in 9.0.1)
|
||||
[316595] = "disorient", -- Intimidating Shout 3
|
||||
[331866] = "disorient", -- Agent of Chaos (Venthyr Covenant)
|
||||
|
||||
[217832] = "incapacitate", -- Imprison
|
||||
[221527] = "incapacitate", -- Imprison (Honor talent)
|
||||
[2637] = "incapacitate", -- Hibernate
|
||||
[99] = "incapacitate", -- Incapacitating Roar
|
||||
[3355] = "incapacitate", -- Freezing Trap
|
||||
[203337] = "incapacitate", -- Freezing Trap (Honor talent)
|
||||
[213691] = "incapacitate", -- Scatter Shot
|
||||
[118] = "incapacitate", -- Polymorph
|
||||
[28271] = "incapacitate", -- Polymorph (Turtle)
|
||||
[28272] = "incapacitate", -- Polymorph (Pig)
|
||||
[61025] = "incapacitate", -- Polymorph (Snake)
|
||||
[61305] = "incapacitate", -- Polymorph (Black Cat)
|
||||
[61780] = "incapacitate", -- Polymorph (Turkey)
|
||||
[61721] = "incapacitate", -- Polymorph (Rabbit)
|
||||
[126819] = "incapacitate", -- Polymorph (Porcupine)
|
||||
[161353] = "incapacitate", -- Polymorph (Polar Bear Cub)
|
||||
[161354] = "incapacitate", -- Polymorph (Monkey)
|
||||
[161355] = "incapacitate", -- Polymorph (Penguin)
|
||||
[161372] = "incapacitate", -- Polymorph (Peacock)
|
||||
[277787] = "incapacitate", -- Polymorph (Baby Direhorn)
|
||||
[277792] = "incapacitate", -- Polymorph (Bumblebee)
|
||||
[82691] = "incapacitate", -- Ring of Frost
|
||||
[115078] = "incapacitate", -- Paralysis
|
||||
[20066] = "incapacitate", -- Repentance
|
||||
[9484] = "incapacitate", -- Shackle Undead
|
||||
[200196] = "incapacitate", -- Holy Word: Chastise
|
||||
[1776] = "incapacitate", -- Gouge
|
||||
[6770] = "incapacitate", -- Sap
|
||||
[51514] = "incapacitate", -- Hex
|
||||
[196942] = "incapacitate", -- Hex (Voodoo Totem)
|
||||
[210873] = "incapacitate", -- Hex (Raptor)
|
||||
[211004] = "incapacitate", -- Hex (Spider)
|
||||
[211010] = "incapacitate", -- Hex (Snake)
|
||||
[211015] = "incapacitate", -- Hex (Cockroach)
|
||||
[269352] = "incapacitate", -- Hex (Skeletal Hatchling)
|
||||
[309328] = "incapacitate", -- Hex (Living Honey)
|
||||
[277778] = "incapacitate", -- Hex (Zandalari Tendonripper)
|
||||
[277784] = "incapacitate", -- Hex (Wicker Mongrel)
|
||||
[197214] = "incapacitate", -- Sundering
|
||||
[710] = "incapacitate", -- Banish
|
||||
[6789] = "incapacitate", -- Mortal Coil
|
||||
[107079] = "incapacitate", -- Quaking Palm (Pandaren racial)
|
||||
|
||||
[47476] = "silence", -- Strangulate
|
||||
[204490] = "silence", -- Sigil of Silence
|
||||
-- [78675] = "silence", -- Solar Beam (doesn't seem to DR)
|
||||
[202933] = "silence", -- Spider Sting
|
||||
[356727] = "silence", -- Spider Venom
|
||||
[217824] = "silence", -- Shield of Virtue
|
||||
[15487] = "silence", -- Silence
|
||||
[1330] = "silence", -- Garrote
|
||||
[196364] = "silence", -- Unstable Affliction Silence Effect
|
||||
|
||||
[210141] = "stun", -- Zombie Explosion
|
||||
[334693] = "stun", -- Absolute Zero (Breath of Sindragosa)
|
||||
[108194] = "stun", -- Asphyxiate (Unholy)
|
||||
[221562] = "stun", -- Asphyxiate (Blood)
|
||||
[91800] = "stun", -- Gnaw (Ghoul)
|
||||
[91797] = "stun", -- Monstrous Blow (Mutated Ghoul)
|
||||
[287254] = "stun", -- Dead of Winter
|
||||
[179057] = "stun", -- Chaos Nova
|
||||
[205630] = "stun", -- Illidan's Grasp (Primary effect)
|
||||
[208618] = "stun", -- Illidan's Grasp (Secondary effect)
|
||||
[211881] = "stun", -- Fel Eruption
|
||||
[200166] = "stun", -- Metamorphosis (PvE stun effect)
|
||||
[203123] = "stun", -- Maim
|
||||
[163505] = "stun", -- Rake (Prowl)
|
||||
[5211] = "stun", -- Mighty Bash
|
||||
[202244] = "stun", -- Overrun
|
||||
[325321] = "stun", -- Wild Hunt's Charge
|
||||
[357021] = "stun", -- Consecutive Concussion
|
||||
[24394] = "stun", -- Intimidation
|
||||
[119381] = "stun", -- Leg Sweep
|
||||
[202346] = "stun", -- Double Barrel
|
||||
[853] = "stun", -- Hammer of Justice
|
||||
[255941] = "stun", -- Wake of Ashes
|
||||
[64044] = "stun", -- Psychic Horror
|
||||
[200200] = "stun", -- Holy Word: Chastise Censure
|
||||
[1833] = "stun", -- Cheap Shot
|
||||
[408] = "stun", -- Kidney Shot
|
||||
[118905] = "stun", -- Static Charge (Capacitor Totem)
|
||||
[118345] = "stun", -- Pulverize (Primal Earth Elemental)
|
||||
[305485] = "stun", -- Lightning Lasso
|
||||
[89766] = "stun", -- Axe Toss
|
||||
[171017] = "stun", -- Meteor Strike (Infernal)
|
||||
[171018] = "stun", -- Meteor Strike (Abyssal)
|
||||
[30283] = "stun", -- Shadowfury
|
||||
[46968] = "stun", -- Shockwave
|
||||
[132168] = "stun", -- Shockwave (Protection)
|
||||
[145047] = "stun", -- Shockwave (Proving Grounds PvE)
|
||||
[132169] = "stun", -- Storm Bolt
|
||||
[199085] = "stun", -- Warpath
|
||||
[20549] = "stun", -- War Stomp (Tauren)
|
||||
[255723] = "stun", -- Bull Rush (Highmountain Tauren)
|
||||
[287712] = "stun", -- Haymaker (Kul Tiran)
|
||||
[332423] = "stun", -- Sparkling Driftglobe Core (Kyrian Covenant)
|
||||
|
||||
[204085] = "root", -- Deathchill (Chains of Ice)
|
||||
[233395] = "root", -- Deathchill (Remorseless Winter)
|
||||
[339] = "root", -- Entangling Roots
|
||||
[170855] = "root", -- Entangling Roots (Nature's Grasp)
|
||||
[102359] = "root", -- Mass Entanglement
|
||||
[117526] = "root", -- Binding Shot
|
||||
[162480] = "root", -- Steel Trap
|
||||
[273909] = "root", -- Steelclaw Trap
|
||||
-- [190927] = "root_harpoon", -- Harpoon (TODO: confirm)
|
||||
[212638] = "root", -- Tracker's Net
|
||||
[201158] = "root", -- Super Sticky Tar
|
||||
[122] = "root", -- Frost Nova
|
||||
[33395] = "root", -- Freeze
|
||||
[198121] = "root", -- Frostbite
|
||||
[342375] = "root", -- Tormenting Backlash (Torghast PvE)
|
||||
[233582] = "root", -- Entrenched in Flame
|
||||
[116706] = "root", -- Disable
|
||||
[324382] = "root", -- Clash
|
||||
[64695] = "root", -- Earthgrab (Totem effect)
|
||||
[285515] = "root", -- Surge of Power
|
||||
[39965] = "root", -- Frost Grenade (Item)
|
||||
[75148] = "root", -- Embersilk Net (Item)
|
||||
[55536] = "root", -- Frostweave Net (Item)
|
||||
[268966] = "root", -- Hooked Deep Sea Net (Item)
|
||||
|
||||
[209749] = "disarm", -- Faerie Swarm (Balance Honor Talent)
|
||||
[207777] = "disarm", -- Dismantle
|
||||
[233759] = "disarm", -- Grapple Weapon
|
||||
[236077] = "disarm", -- Disarm
|
||||
|
||||
[56222] = "taunt", -- Dark Command
|
||||
[51399] = "taunt", -- Death Grip (Taunt Effect)
|
||||
[185245] = "taunt", -- Torment
|
||||
[6795] = "taunt", -- Growl (Druid)
|
||||
[2649] = "taunt", -- Growl (Hunter Pet) (TODO: confirm)
|
||||
[20736] = "taunt", -- Distracting Shot
|
||||
[116189] = "taunt", -- Provoke
|
||||
[118635] = "taunt", -- Provoke (Black Ox Statue)
|
||||
[196727] = "taunt", -- Provoke (Niuzao)
|
||||
[204079] = "taunt", -- Final Stand
|
||||
[62124] = "taunt", -- Hand of Reckoning
|
||||
[17735] = "taunt", -- Suffering (Voidwalker) (TODO: confirm)
|
||||
[355] = "taunt", -- Taunt
|
||||
|
||||
-- Experimental
|
||||
[108199] = "knockback", -- Gorefiend's Grasp
|
||||
[202249] = "knockback", -- Overrun
|
||||
[61391] = "knockback", -- Typhoon
|
||||
[102793] = "knockback", -- Ursol's Vortex
|
||||
[186387] = "knockback", -- Bursting Shot
|
||||
[236777] = "knockback", -- Hi-Explosive Trap
|
||||
[157981] = "knockback", -- Blast Wave
|
||||
[237371] = "knockback", -- Ring of Peace
|
||||
[204263] = "knockback", -- Shining Force
|
||||
[51490] = "knockback", -- Thunderstorm
|
||||
-- [287712] = "knockback", -- Haywire (Kul'Tiran Racial)
|
||||
}
|
||||
|
||||
elseif Lib.gameExpansion == "tbc" then
|
||||
|
||||
-- SpellID list for The Burning Crusade
|
||||
-- spellID for every rank is used over spell name to avoid name collisions, and faster lookups
|
||||
Lib.spellList = {
|
||||
[2637] = "incapacitate", -- Hibernate (Rank 1)
|
||||
[18657] = "incapacitate", -- Hibernate (Rank 2)
|
||||
[18658] = "incapacitate", -- Hibernate (Rank 3)
|
||||
[22570] = "incapacitate", -- Maim
|
||||
[3355] = "incapacitate", -- Freezing Trap Effect (Rank 1)
|
||||
[14308] = "incapacitate", -- Freezing Trap Effect (Rank 2)
|
||||
[14309] = "incapacitate", -- Freezing Trap Effect (Rank 3)
|
||||
[19386] = "incapacitate", -- Wyvern Sting (Rank 1)
|
||||
[24132] = "incapacitate", -- Wyvern Sting (Rank 2)
|
||||
[24133] = "incapacitate", -- Wyvern Sting (Rank 3)
|
||||
[27068] = "incapacitate", -- Wyvern Sting (Rank 4)
|
||||
[118] = "incapacitate", -- Polymorph (Rank 1)
|
||||
[12824] = "incapacitate", -- Polymorph (Rank 2)
|
||||
[12825] = "incapacitate", -- Polymorph (Rank 3)
|
||||
[12826] = "incapacitate", -- Polymorph (Rank 4)
|
||||
[28271] = "incapacitate", -- Polymorph: Turtle
|
||||
[28272] = "incapacitate", -- Polymorph: Pig
|
||||
[20066] = "incapacitate", -- Repentance
|
||||
[6770] = "incapacitate", -- Sap (Rank 1)
|
||||
[2070] = "incapacitate", -- Sap (Rank 2)
|
||||
[11297] = "incapacitate", -- Sap (Rank 3)
|
||||
[1776] = "incapacitate", -- Gouge (Rank 1)
|
||||
[1777] = "incapacitate", -- Gouge (Rank 2)
|
||||
[8629] = "incapacitate", -- Gouge (Rank 3)
|
||||
[11285] = "incapacitate", -- Gouge (Rank 4)
|
||||
[11286] = "incapacitate", -- Gouge (Rank 5)
|
||||
[38764] = "incapacitate", -- Gouge (Rank 6)
|
||||
[13327] = "incapacitate", -- Reckless Charge (Rocket Helmet)
|
||||
[4064] = "incapacitate", -- Rough Copper Bomb
|
||||
[4065] = "incapacitate", -- Large Copper Bomb
|
||||
[4066] = "incapacitate", -- Small Bronze Bomb
|
||||
[4067] = "incapacitate", -- Big Bronze Bomb
|
||||
[4068] = "incapacitate", -- Iron Grenade
|
||||
[12421] = "incapacitate", -- Mithril Frag Bomb
|
||||
[4069] = "incapacitate", -- Big Iron Bomb
|
||||
[12562] = "incapacitate", -- The Big One
|
||||
[12543] = "incapacitate", -- Hi-Explosive Bomb
|
||||
[19769] = "incapacitate", -- Thorium Grenade
|
||||
[19784] = "incapacitate", -- Dark Iron Bomb
|
||||
[30216] = "incapacitate", -- Fel Iron Bomb
|
||||
[30461] = "incapacitate", -- The Bigger One
|
||||
[30217] = "incapacitate", -- Adamantite Grenade
|
||||
|
||||
[33786] = "disorient", -- Cyclone
|
||||
[2094] = "disorient", -- Blind
|
||||
|
||||
[5211] = "stun", -- Bash (Rank 1)
|
||||
[6798] = "stun", -- Bash (Rank 2)
|
||||
[8983] = "stun", -- Bash (Rank 3)
|
||||
[9005] = "stun", -- Pounce (Rank 1)
|
||||
[9823] = "stun", -- Pounce (Rank 2)
|
||||
[9827] = "stun", -- Pounce (Rank 3)
|
||||
[27006] = "stun", -- Pounce (Rank 4)
|
||||
[24394] = "stun", -- Intimidation
|
||||
[853] = "stun", -- Hammer of Justice (Rank 1)
|
||||
[5588] = "stun", -- Hammer of Justice (Rank 2)
|
||||
[5589] = "stun", -- Hammer of Justice (Rank 3)
|
||||
[10308] = "stun", -- Hammer of Justice (Rank 4)
|
||||
[1833] = "stun", -- Cheap Shot
|
||||
[30283] = "stun", -- Shadowfury (Rank 1)
|
||||
[30413] = "stun", -- Shadowfury (Rank 2)
|
||||
[30414] = "stun", -- Shadowfury (Rank 3)
|
||||
[12809] = "stun", -- Concussion Blow
|
||||
[7922] = "stun", -- Charge Stun
|
||||
[20253] = "stun", -- Intercept Stun (Rank 1)
|
||||
[20614] = "stun", -- Intercept Stun (Rank 2)
|
||||
[20615] = "stun", -- Intercept Stun (Rank 3)
|
||||
[25273] = "stun", -- Intercept Stun (Rank 4)
|
||||
[25274] = "stun", -- Intercept Stun (Rank 5)
|
||||
[20549] = "stun", -- War Stomp (Racial)
|
||||
[13237] = "stun", -- Goblin Mortar
|
||||
[835] = "stun", -- Tidal Charm
|
||||
|
||||
[16922] = "random_stun", -- Celestial Focus (Starfire Stun)
|
||||
[19410] = "random_stun", -- Improved Concussive Shot
|
||||
[12355] = "random_stun", -- Impact
|
||||
[20170] = "random_stun", -- Seal of Justice Stun
|
||||
[15269] = "random_stun", -- Blackout
|
||||
[18093] = "random_stun", -- Pyroclasm
|
||||
[39796] = "random_stun", -- Stoneclaw Stun
|
||||
[12798] = "random_stun", -- Revenge Stun
|
||||
[5530] = "random_stun", -- Mace Stun Effect (Mace Specialization)
|
||||
[15283] = "random_stun", -- Stunning Blow (Weapon Proc)
|
||||
[56] = "random_stun", -- Stun (Weapon Proc)
|
||||
[34510] = "random_stun", -- Stormherald/Deep Thunder (Weapon Proc)
|
||||
|
||||
[10326] = "fear", -- Turn Evil (Might be PvE only until wotlk, adding just incase)
|
||||
[8122] = "fear", -- Psychic Scream (Rank 1)
|
||||
[8124] = "fear", -- Psychic Scream (Rank 2)
|
||||
[10888] = "fear", -- Psychic Scream (Rank 3)
|
||||
[10890] = "fear", -- Psychic Scream (Rank 4)
|
||||
[5782] = "fear", -- Fear (Rank 1)
|
||||
[6213] = "fear", -- Fear (Rank 2)
|
||||
[6215] = "fear", -- Fear (Rank 3)
|
||||
[6358] = "fear", -- Seduction (Succubus)
|
||||
[5484] = "fear", -- Howl of Terror (Rank 1)
|
||||
[17928] = "fear", -- Howl of Terror (Rank 2)
|
||||
[1513] = "fear", -- Scare Beast (Rank 1)
|
||||
[14326] = "fear", -- Scare Beast (Rank 2)
|
||||
[14327] = "fear", -- Scare Beast (Rank 3)
|
||||
[5246] = "fear", -- Intimidating Shout
|
||||
[5134] = "fear", -- Flash Bomb Fear (Item)
|
||||
|
||||
[339] = "root", -- Entangling Roots (Rank 1)
|
||||
[1062] = "root", -- Entangling Roots (Rank 2)
|
||||
[5195] = "root", -- Entangling Roots (Rank 3)
|
||||
[5196] = "root", -- Entangling Roots (Rank 4)
|
||||
[9852] = "root", -- Entangling Roots (Rank 5)
|
||||
[9853] = "root", -- Entangling Roots (Rank 6)
|
||||
[26989] = "root", -- Entangling Roots (Rank 7)
|
||||
[19975] = "root", -- Nature's Grasp (Rank 1)
|
||||
[19974] = "root", -- Nature's Grasp (Rank 2)
|
||||
[19973] = "root", -- Nature's Grasp (Rank 3)
|
||||
[19972] = "root", -- Nature's Grasp (Rank 4)
|
||||
[19971] = "root", -- Nature's Grasp (Rank 5)
|
||||
[19970] = "root", -- Nature's Grasp (Rank 6)
|
||||
[27010] = "root", -- Nature's Grasp (Rank 7)
|
||||
[122] = "root", -- Frost Nova (Rank 1)
|
||||
[865] = "root", -- Frost Nova (Rank 2)
|
||||
[6131] = "root", -- Frost Nova (Rank 3)
|
||||
[10230] = "root", -- Frost Nova (Rank 4)
|
||||
[27088] = "root", -- Frost Nova (Rank 5)
|
||||
[33395] = "root", -- Freeze (Water Elemental)
|
||||
[39965] = "root", -- Frost Grenade (Item)
|
||||
|
||||
[605] = "mind_control", -- Mind Control (Rank 1)
|
||||
[10911] = "mind_control", -- Mind Control (Rank 2)
|
||||
[10912] = "mind_control", -- Mind Control (Rank 3)
|
||||
[13181] = "mind_control", -- Gnomish Mind Control Cap
|
||||
|
||||
[14251] = "disarm", -- Riposte
|
||||
[34097] = "disarm", -- Riposte 2 (TODO: Check which ID is the correct one)
|
||||
[676] = "disarm", -- Disarm
|
||||
|
||||
[12494] = "random_root", -- Frostbite
|
||||
[23694] = "random_root", -- Improved Hamstring
|
||||
[19229] = "random_root", -- Improved Wing Clip
|
||||
[19185] = "random_root", -- Entrapment
|
||||
|
||||
[19503] = "scatter", -- Scatter Shot
|
||||
[31661] = "scatter", -- Dragon's Breath (Rank 1)
|
||||
[33041] = "scatter", -- Dragon's Breath (Rank 2)
|
||||
[33042] = "scatter", -- Dragon's Breath (Rank 3)
|
||||
[33043] = "scatter", -- Dragon's Breath (Rank 4)
|
||||
|
||||
-- Spells that DR with itself only
|
||||
[408] = "kidney_shot", -- Kidney Shot (Rank 1)
|
||||
[8643] = "kidney_shot", -- Kidney Shot (Rank 2)
|
||||
[43523] = "unstable_affliction", -- Unstable Affliction 1
|
||||
[31117] = "unstable_affliction", -- Unstable Affliction 2
|
||||
[6789] = "death_coil", -- Death Coil (Rank 1)
|
||||
[17925] = "death_coil", -- Death Coil (Rank 2)
|
||||
[17926] = "death_coil", -- Death Coil (Rank 3)
|
||||
[27223] = "death_coil", -- Death Coil (Rank 4)
|
||||
[44041] = "chastise", -- Chastise (Rank 1)
|
||||
[44043] = "chastise", -- Chastise (Rank 2)
|
||||
[44044] = "chastise", -- Chastise (Rank 3)
|
||||
[44045] = "chastise", -- Chastise (Rank 4)
|
||||
[44046] = "chastise", -- Chastise (Rank 5)
|
||||
[44047] = "chastise", -- Chastise (Rank 6)
|
||||
[19306] = "counterattack", -- Counterattack (Rank 1)
|
||||
[20909] = "counterattack", -- Counterattack (Rank 2)
|
||||
[20910] = "counterattack", -- Counterattack (Rank 3)
|
||||
[27067] = "counterattack", -- Counterattack (Rank 4)
|
||||
}
|
||||
|
||||
elseif Lib.gameExpansion == "wotlk" then -- STILL WORK IN PROGRESS, I DON'T HAVE BETA ACCESS
|
||||
|
||||
-- SpellID list for Wrath of the Lich King.
|
||||
-- spellID for every rank is used over spell name to avoid name collisions, and faster lookups
|
||||
Lib.spellList = {
|
||||
[49203] = "incapacitate", -- Hungering Cold
|
||||
[2637] = "incapacitate", -- Hibernate (Rank 1)
|
||||
[18657] = "incapacitate", -- Hibernate (Rank 2)
|
||||
[18658] = "incapacitate", -- Hibernate (Rank 3)
|
||||
[60210] = "incapacitate", -- Freezing Arrow Effect (Rank 1)
|
||||
[3355] = "incapacitate", -- Freezing Trap Effect (Rank 1)
|
||||
[14308] = "incapacitate", -- Freezing Trap Effect (Rank 2)
|
||||
[14309] = "incapacitate", -- Freezing Trap Effect (Rank 3)
|
||||
[19386] = "incapacitate", -- Wyvern Sting (Rank 1)
|
||||
[24132] = "incapacitate", -- Wyvern Sting (Rank 2)
|
||||
[24133] = "incapacitate", -- Wyvern Sting (Rank 3)
|
||||
[27068] = "incapacitate", -- Wyvern Sting (Rank 4)
|
||||
[49011] = "incapacitate", -- Wyvern Sting (Rank 5)
|
||||
[49012] = "incapacitate", -- Wyvern Sting (Rank 6)
|
||||
[118] = "incapacitate", -- Polymorph (Rank 1)
|
||||
[12824] = "incapacitate", -- Polymorph (Rank 2)
|
||||
[12825] = "incapacitate", -- Polymorph (Rank 3)
|
||||
[12826] = "incapacitate", -- Polymorph (Rank 4)
|
||||
[28271] = "incapacitate", -- Polymorph: Turtle
|
||||
[28272] = "incapacitate", -- Polymorph: Pig
|
||||
[61721] = "incapacitate", -- Polymorph: Rabbit
|
||||
[61780] = "incapacitate", -- Polymorph: Turkey
|
||||
[61305] = "incapacitate", -- Polymorph: Black Cat
|
||||
[20066] = "incapacitate", -- Repentance
|
||||
[1776] = "incapacitate", -- Gouge
|
||||
[6770] = "incapacitate", -- Sap (Rank 1)
|
||||
[2070] = "incapacitate", -- Sap (Rank 2)
|
||||
[11297] = "incapacitate", -- Sap (Rank 3)
|
||||
[51724] = "incapacitate", -- Sap (Rank 4)
|
||||
[710] = "incapacitate", -- Banish (Rank 1)
|
||||
[18647] = "incapacitate", -- Banish (Rank 2)
|
||||
[9484] = "incapacitate", -- Shackle Undead (Rank 1)
|
||||
[9485] = "incapacitate", -- Shackle Undead (Rank 2)
|
||||
[10955] = "incapacitate", -- Shackle Undead (Rank 3)
|
||||
[51514] = "incapacitate", -- Hex
|
||||
[13327] = "incapacitate", -- Reckless Charge (Rocket Helmet)
|
||||
[4064] = "incapacitate", -- Rough Copper Bomb
|
||||
[4065] = "incapacitate", -- Large Copper Bomb
|
||||
[4066] = "incapacitate", -- Small Bronze Bomb
|
||||
[4067] = "incapacitate", -- Big Bronze Bomb
|
||||
[4068] = "incapacitate", -- Iron Grenade
|
||||
[12421] = "incapacitate", -- Mithril Frag Bomb
|
||||
[4069] = "incapacitate", -- Big Iron Bomb
|
||||
[12562] = "incapacitate", -- The Big One
|
||||
[12543] = "incapacitate", -- Hi-Explosive Bomb
|
||||
[19769] = "incapacitate", -- Thorium Grenade
|
||||
[19784] = "incapacitate", -- Dark Iron Bomb
|
||||
[30216] = "incapacitate", -- Fel Iron Bomb
|
||||
[30461] = "incapacitate", -- The Bigger One
|
||||
[30217] = "incapacitate", -- Adamantite Grenade
|
||||
|
||||
[47481] = "stun", -- Gnaw (Ghoul Pet)
|
||||
[5211] = "stun", -- Bash (Rank 1)
|
||||
[6798] = "stun", -- Bash (Rank 2)
|
||||
[8983] = "stun", -- Bash (Rank 3)
|
||||
[22570] = "stun", -- Maim (Rank 1)
|
||||
[49802] = "stun", -- Maim (Rank 2)
|
||||
[24394] = "stun", -- Intimidation
|
||||
[50519] = "stun", -- Sonic Blast (Pet Rank 1)
|
||||
[53564] = "stun", -- Sonic Blast (Pet Rank 2)
|
||||
[53565] = "stun", -- Sonic Blast (Pet Rank 3)
|
||||
[53566] = "stun", -- Sonic Blast (Pet Rank 4)
|
||||
[53567] = "stun", -- Sonic Blast (Pet Rank 5)
|
||||
[53568] = "stun", -- Sonic Blast (Pet Rank 6)
|
||||
[50518] = "stun", -- Ravage (Pet Rank 1)
|
||||
[53558] = "stun", -- Ravage (Pet Rank 2)
|
||||
[53559] = "stun", -- Ravage (Pet Rank 3)
|
||||
[53560] = "stun", -- Ravage (Pet Rank 4)
|
||||
[53561] = "stun", -- Ravage (Pet Rank 5)
|
||||
[53562] = "stun", -- Ravage (Pet Rank 6)
|
||||
[44572] = "stun", -- Deep Freeze
|
||||
[853] = "stun", -- Hammer of Justice (Rank 1)
|
||||
[5588] = "stun", -- Hammer of Justice (Rank 2)
|
||||
[5589] = "stun", -- Hammer of Justice (Rank 3)
|
||||
[10308] = "stun", -- Hammer of Justice (Rank 4)
|
||||
[2812] = "stun", -- Holy Wrath (Rank 1)
|
||||
[10318] = "stun", -- Holy Wrath (Rank 2)
|
||||
[27139] = "stun", -- Holy Wrath (Rank 3)
|
||||
[48816] = "stun", -- Holy Wrath (Rank 4)
|
||||
[48817] = "stun", -- Holy Wrath (Rank 5)
|
||||
[408] = "stun", -- Kidney Shot (Rank 1)
|
||||
[8643] = "stun", -- Kidney Shot (Rank 2)
|
||||
[58861] = "stun", -- Bash (Spirit Wolves)
|
||||
[30283] = "stun", -- Shadowfury (Rank 1)
|
||||
[30413] = "stun", -- Shadowfury (Rank 2)
|
||||
[30414] = "stun", -- Shadowfury (Rank 3)
|
||||
[47846] = "stun", -- Shadowfury (Rank 4)
|
||||
[47847] = "stun", -- Shadowfury (Rank 5)
|
||||
[12809] = "stun", -- Concussion Blow
|
||||
[60995] = "stun", -- Demon Charge
|
||||
[30153] = "stun", -- Intercept (Felguard Rank 1)
|
||||
[30195] = "stun", -- Intercept (Felguard Rank 2)
|
||||
[30197] = "stun", -- Intercept (Felguard Rank 3)
|
||||
[47995] = "stun", -- Intercept (Felguard Rank 4)
|
||||
[20253] = "stun", -- Intercept Stun (Rank 1)
|
||||
[20614] = "stun", -- Intercept Stun (Rank 2)
|
||||
[20615] = "stun", -- Intercept Stun (Rank 3)
|
||||
[25273] = "stun", -- Intercept Stun (Rank 4)
|
||||
[25274] = "stun", -- Intercept Stun (Rank 5)
|
||||
[46968] = "stun", -- Shockwave
|
||||
[20549] = "stun", -- War Stomp (Racial)
|
||||
|
||||
[16922] = "random_stun", -- Celestial Focus (Starfire Stun)
|
||||
[28445] = "random_stun", -- Improved Concussive Shot
|
||||
[12355] = "random_stun", -- Impact
|
||||
[20170] = "random_stun", -- Seal of Justice Stun
|
||||
[39796] = "random_stun", -- Stoneclaw Stun
|
||||
[12798] = "random_stun", -- Revenge Stun
|
||||
[5530] = "random_stun", -- Mace Stun Effect (Mace Specialization)
|
||||
[15283] = "random_stun", -- Stunning Blow (Weapon Proc)
|
||||
[56] = "random_stun", -- Stun (Weapon Proc)
|
||||
[34510] = "random_stun", -- Stormherald/Deep Thunder (Weapon Proc)
|
||||
|
||||
[1513] = "fear", -- Scare Beast (Rank 1)
|
||||
[14326] = "fear", -- Scare Beast (Rank 2)
|
||||
[14327] = "fear", -- Scare Beast (Rank 3)
|
||||
[10326] = "fear", -- Turn Evil
|
||||
[8122] = "fear", -- Psychic Scream (Rank 1)
|
||||
[8124] = "fear", -- Psychic Scream (Rank 2)
|
||||
[10888] = "fear", -- Psychic Scream (Rank 3)
|
||||
[10890] = "fear", -- Psychic Scream (Rank 4)
|
||||
[2094] = "fear", -- Blind
|
||||
[5782] = "fear", -- Fear (Rank 1)
|
||||
[6213] = "fear", -- Fear (Rank 2)
|
||||
[6215] = "fear", -- Fear (Rank 3)
|
||||
[6358] = "fear", -- Seduction (Succubus)
|
||||
[5484] = "fear", -- Howl of Terror (Rank 1)
|
||||
[17928] = "fear", -- Howl of Terror (Rank 2)
|
||||
[5246] = "fear", -- Intimidating Shout
|
||||
[5134] = "fear", -- Flash Bomb Fear (Item)
|
||||
|
||||
[339] = "root", -- Entangling Roots (Rank 1)
|
||||
[1062] = "root", -- Entangling Roots (Rank 2)
|
||||
[5195] = "root", -- Entangling Roots (Rank 3)
|
||||
[5196] = "root", -- Entangling Roots (Rank 4)
|
||||
[9852] = "root", -- Entangling Roots (Rank 5)
|
||||
[9853] = "root", -- Entangling Roots (Rank 6)
|
||||
[26989] = "root", -- Entangling Roots (Rank 7)
|
||||
[53308] = "root", -- Entangling Roots (Rank 8)
|
||||
[19975] = "root", -- Nature's Grasp (Rank 1)
|
||||
[19974] = "root", -- Nature's Grasp (Rank 2)
|
||||
[19973] = "root", -- Nature's Grasp (Rank 3)
|
||||
[19972] = "root", -- Nature's Grasp (Rank 4)
|
||||
[19971] = "root", -- Nature's Grasp (Rank 5)
|
||||
[19970] = "root", -- Nature's Grasp (Rank 6)
|
||||
[27010] = "root", -- Nature's Grasp (Rank 7)
|
||||
[53312] = "root", -- Nature's Grasp (Rank 8)
|
||||
[50245] = "root", -- Pin (Rank 1)
|
||||
[53544] = "root", -- Pin (Rank 2)
|
||||
[53545] = "root", -- Pin (Rank 3)
|
||||
[53546] = "root", -- Pin (Rank 4)
|
||||
[53547] = "root", -- Pin (Rank 5)
|
||||
[53548] = "root", -- Pin (Rank 6)
|
||||
[33395] = "root", -- Freeze (Water Elemental)
|
||||
[122] = "root", -- Frost Nova (Rank 1)
|
||||
[865] = "root", -- Frost Nova (Rank 2)
|
||||
[6131] = "root", -- Frost Nova (Rank 3)
|
||||
[10230] = "root", -- Frost Nova (Rank 4)
|
||||
[27088] = "root", -- Frost Nova (Rank 5)
|
||||
[42917] = "root", -- Frost Nova (Rank 6)
|
||||
[39965] = "root", -- Frost Grenade (Item)
|
||||
[63685] = "root", -- Freeze (Frost Shock)
|
||||
|
||||
[12494] = "random_root", -- Frostbite
|
||||
[55080] = "random_root", -- Shattered Barrier
|
||||
[58373] = "random_root", -- Glyph of Hamstring
|
||||
[23694] = "random_root", -- Improved Hamstring
|
||||
[47168] = "random_root", -- Improved Wing Clip
|
||||
[19185] = "random_root", -- Entrapment
|
||||
|
||||
[53359] = "disarm", -- Chimera Shot (Scorpid)
|
||||
[50541] = "disarm", -- Snatch (Rank 1)
|
||||
[53537] = "disarm", -- Snatch (Rank 2)
|
||||
[53538] = "disarm", -- Snatch (Rank 3)
|
||||
[53540] = "disarm", -- Snatch (Rank 4)
|
||||
[53542] = "disarm", -- Snatch (Rank 5)
|
||||
[53543] = "disarm", -- Snatch (Rank 6)
|
||||
[64058] = "disarm", -- Psychic Horror Disarm Effect
|
||||
[51722] = "disarm", -- Dismantle
|
||||
[676] = "disarm", -- Disarm
|
||||
|
||||
[47476] = "silence", -- Strangulate
|
||||
[34490] = "silence", -- Silencing Shot
|
||||
[35334] = "silence", -- Nether Shock 1 -- TODO: verify
|
||||
[44957] = "silence", -- Nether Shock 2 -- TODO: verify
|
||||
[18469] = "silence", -- Silenced - Improved Counterspell (Rank 1)
|
||||
[55021] = "silence", -- Silenced - Improved Counterspell (Rank 2)
|
||||
[63529] = "silence", -- Silenced - Shield of the Templar
|
||||
[15487] = "silence", -- Silence
|
||||
[1330] = "silence", -- Garrote - Silence
|
||||
[18425] = "silence", -- Silenced - Improved Kick
|
||||
[24259] = "silence", -- Spell Lock
|
||||
[43523] = "silence", -- Unstable Affliction 1
|
||||
[31117] = "silence", -- Unstable Affliction 2
|
||||
[18498] = "silence", -- Silenced - Gag Order 1
|
||||
[74347] = "silence", -- Silenced - Gag Order 1
|
||||
[50613] = "silence", -- Arcane Torrent (Racial, Runic Power)
|
||||
[28730] = "silence", -- Arcane Torrent (Racial, Mana)
|
||||
[25046] = "silence", -- Arcane Torrent (Racial, Energy)
|
||||
|
||||
[64044] = "horror", -- Psychic Horror
|
||||
[6789] = "horror", -- Death Coil (Rank 1)
|
||||
[17925] = "horror", -- Death Coil (Rank 2)
|
||||
[17926] = "horror", -- Death Coil (Rank 3)
|
||||
[27223] = "horror", -- Death Coil (Rank 4)
|
||||
[47859] = "horror", -- Death Coil (Rank 5)
|
||||
[47860] = "horror", -- Death Coil (Rank 6)
|
||||
|
||||
[1833] = "opener_stun", -- Cheap Shot
|
||||
[9005] = "opener_stun", -- Pounce (Rank 1)
|
||||
[9823] = "opener_stun", -- Pounce (Rank 2)
|
||||
[9827] = "opener_stun", -- Pounce (Rank 3)
|
||||
[27006] = "opener_stun", -- Pounce (Rank 4)
|
||||
[49803] = "opener_stun", -- Pounce (Rank 5)
|
||||
|
||||
[31661] = "scatter", -- Dragon's Breath (Rank 1)
|
||||
[33041] = "scatter", -- Dragon's Breath (Rank 2)
|
||||
[33042] = "scatter", -- Dragon's Breath (Rank 3)
|
||||
[33043] = "scatter", -- Dragon's Breath (Rank 4)
|
||||
[42949] = "scatter", -- Dragon's Breath (Rank 5)
|
||||
[42950] = "scatter", -- Dragon's Breath (Rank 6)
|
||||
[19503] = "scatter", -- Scatter Shot
|
||||
|
||||
-- Spells that DR with itself only
|
||||
[33786] = "cyclone", -- Cyclone
|
||||
[605] = "mind_control", -- Mind Control
|
||||
[13181] = "mind_control", -- Gnomish Mind Control Cap
|
||||
[7922] = "charge", -- Charge Stun
|
||||
[19306] = "counterattack", -- Counterattack 1
|
||||
[20909] = "counterattack", -- Counterattack 2
|
||||
[20910] = "counterattack", -- Counterattack 3
|
||||
[27067] = "counterattack", -- Counterattack 4
|
||||
[48998] = "counterattack", -- Counterattack 5
|
||||
[48999] = "counterattack", -- Counterattack 6
|
||||
--Storm, Earth and Fire has no DR
|
||||
|
||||
-- TODO: profession stuff
|
||||
}
|
||||
|
||||
elseif Lib.gameExpansion == "classic" then
|
||||
|
||||
-- SpellID list for Classic Era (vanilla)
|
||||
-- In Classic the spell ID payload is gone from the combat log, so we need the key here to be
|
||||
-- spell name instead. We also provide spell ID in the table value so it's possible to retrieve
|
||||
-- for example spell icon using GetSpellTexture(spellID) later on. (These functions only accept
|
||||
-- spell names if the player has the spell in their spell book)
|
||||
local GetSpellInfo = _G.GetSpellInfo -- upvalue
|
||||
Lib.spellList = {
|
||||
-- Controlled roots
|
||||
[GetSpellInfo(339)] = { category = "root", spellID = 339 }, -- Entangling Roots
|
||||
[GetSpellInfo(19306)] = { category = "root", spellID = 19306 }, -- Counterattack
|
||||
[GetSpellInfo(122)] = { category = "root", spellID = 122 }, -- Frost Nova
|
||||
-- [GetSpellInfo(13099)] = { category = "root", spellID = 13099 }, -- Net-o-Matic
|
||||
-- [GetSpellInfo(8312)] = { category = "root", spellID = 8312 }, -- Trap
|
||||
|
||||
-- Controlled stuns
|
||||
[GetSpellInfo(5211)] = { category = "stun", spellID = 5211 }, -- Bash
|
||||
[GetSpellInfo(24394)] = { category = "stun", spellID = 24394 }, -- Intimidation
|
||||
[GetSpellInfo(853)] = { category = "stun", spellID = 853 }, -- Hammer of Justice
|
||||
[GetSpellInfo(9005)] = { category = "stun", spellID = 9005 }, -- Pounce
|
||||
[GetSpellInfo(1833)] = { category = "stun", spellID = 1833 }, -- Cheap Shot
|
||||
[GetSpellInfo(12809)] = { category = "stun", spellID = 12809 }, -- Concussion Blow
|
||||
[GetSpellInfo(20253)] = { category = "stun", spellID = 20253 }, -- Intercept Stun
|
||||
[GetSpellInfo(7922)] = { category = "stun", spellID = 7922 }, -- Charge Stun
|
||||
[GetSpellInfo(20549)] = { category = "stun", spellID = 20549 }, -- War Stomp (Racial)
|
||||
[GetSpellInfo(4068)] = { category = "stun", spellID = 4068 }, -- Iron Grenade
|
||||
[GetSpellInfo(19769)] = { category = "stun", spellID = 19769 }, -- Thorium Grenade
|
||||
[GetSpellInfo(13808)] = { category = "stun", spellID = 13808 }, -- M73 Frag Grenade
|
||||
[GetSpellInfo(4069)] = { category = "stun", spellID = 4069 }, -- Big Iron Bomb
|
||||
[GetSpellInfo(12543)] = { category = "stun", spellID = 12543 }, -- Hi-Explosive Bomb
|
||||
[GetSpellInfo(4064)] = { category = "stun", spellID = 4064 }, -- Rough Copper Bomb
|
||||
[GetSpellInfo(12421)] = { category = "stun", spellID = 12421 }, -- Mithril Frag Bomb
|
||||
[GetSpellInfo(19784)] = { category = "stun", spellID = 19784 }, -- Dark Iron Bomb
|
||||
[GetSpellInfo(4067)] = { category = "stun", spellID = 4067 }, -- Big Bronze Bomb
|
||||
[GetSpellInfo(4066)] = { category = "stun", spellID = 4066 }, -- Small Bronze Bomb
|
||||
[GetSpellInfo(4065)] = { category = "stun", spellID = 4065 }, -- Large Copper Bomb
|
||||
[GetSpellInfo(13237)] = { category = "stun", spellID = 13237 }, -- Goblin Mortar
|
||||
[GetSpellInfo(835)] = { category = "stun", spellID = 835 }, -- Tidal Charm
|
||||
[GetSpellInfo(12562)] = { category = "stun", spellID = 12562 }, -- The Big One
|
||||
|
||||
-- Incapacitates
|
||||
[GetSpellInfo(2637)] = { category = "incapacitate", spellID = 2637 }, -- Hibernate
|
||||
[GetSpellInfo(3355)] = { category = "incapacitate", spellID = 3355 }, -- Freezing Trap
|
||||
[GetSpellInfo(19503)] = { category = "incapacitate", spellID = 19503 }, -- Scatter Shot
|
||||
[GetSpellInfo(19386)] = { category = "incapacitate", spellID = 19386 }, -- Wyvern Sting
|
||||
[GetSpellInfo(28271)] = { category = "incapacitate", spellID = 28271 }, -- Polymorph: Turtle
|
||||
[GetSpellInfo(28272)] = { category = "incapacitate", spellID = 28272 }, -- Polymorph: Pig
|
||||
[GetSpellInfo(118)] = { category = "incapacitate", spellID = 118 }, -- Polymorph
|
||||
[GetSpellInfo(20066)] = { category = "incapacitate", spellID = 20066 }, -- Repentance
|
||||
[GetSpellInfo(1776)] = { category = "incapacitate", spellID = 1776 }, -- Gouge
|
||||
[GetSpellInfo(6770)] = { category = "incapacitate", spellID = 6770 }, -- Sap
|
||||
[GetSpellInfo(1090)] = { category = "incapacitate", spellID = 1090 }, -- Sleep
|
||||
[GetSpellInfo(13327)] = { category = "incapacitate", spellID = 13327 }, -- Reckless Charge (Rocket Helmet)
|
||||
[GetSpellInfo(26108)] = { category = "incapacitate", spellID = 26108 }, -- Glimpse of Madness
|
||||
|
||||
-- Fears
|
||||
[GetSpellInfo(1513)] = { category = "fear", spellID = 1513 }, -- Scare Beast
|
||||
[GetSpellInfo(8122)] = { category = "fear", spellID = 8122 }, -- Psychic Scream
|
||||
[GetSpellInfo(5782)] = { category = "fear", spellID = 5782 }, -- Fear
|
||||
[GetSpellInfo(5484)] = { category = "fear", spellID = 5484 }, -- Howl of Terror
|
||||
[GetSpellInfo(6358)] = { category = "fear", spellID = 6358 }, -- Seduction
|
||||
[GetSpellInfo(5246)] = { category = "fear", spellID = 5246 }, -- Intimidating Shout
|
||||
[GetSpellInfo(5134)] = { category = "fear", spellID = 5134 }, -- Flash Bomb Fear
|
||||
|
||||
-- Random/short roots
|
||||
[GetSpellInfo(19229)] = { category = "random_root", spellID = 19229 }, -- Improved Wing Clip
|
||||
-- [GetSpellInfo(27868)] = { category = "random_root", spellID = 12494 }, -- Frostbite
|
||||
[GetSpellInfo(23694)] = { category = "random_root", spellID = 23694 }, -- Improved Hamstring
|
||||
[GetSpellInfo(27868)] = { category = "random_root", spellID = 27868 }, -- Freeze (Item proc and set bonus)
|
||||
|
||||
-- Random/short stuns
|
||||
[GetSpellInfo(16922)] = { category = "random_stun", spellID = 16922 }, -- Improved Starfire
|
||||
[GetSpellInfo(19410)] = { category = "random_stun", spellID = 19410 }, -- Improved Concussive Shot
|
||||
[GetSpellInfo(12355)] = { category = "random_stun", spellID = 12355 }, -- Impact
|
||||
[GetSpellInfo(20170)] = { category = "random_stun", spellID = 20170 }, -- Seal of Justice Stun
|
||||
[GetSpellInfo(15269)] = { category = "random_stun", spellID = 15269 }, -- Blackout
|
||||
[GetSpellInfo(18093)] = { category = "random_stun", spellID = 18093 }, -- Pyroclasm
|
||||
[GetSpellInfo(12798)] = { category = "random_stun", spellID = 12798 }, -- Revenge Stun
|
||||
[GetSpellInfo(5530)] = { category = "random_stun", spellID = 5530 }, -- Mace Stun Effect (Mace Specialization)
|
||||
[GetSpellInfo(15283)] = { category = "random_stun", spellID = 15283 }, -- Stunning Blow (Weapon Proc)
|
||||
[GetSpellInfo(56)] = { category = "random_stun", spellID = 56 }, -- Stun (Weapon Proc)
|
||||
[GetSpellInfo(21152)] = { category = "random_stun", spellID = 21152 }, -- Earthshaker (Weapon Proc)
|
||||
|
||||
-- Spells that DRs with itself only
|
||||
[GetSpellInfo(408)] = { category = "kidney_shot", spellID = 408 }, -- Kidney Shot
|
||||
[GetSpellInfo(605)] = { category = "mind_control", spellID = 605 }, -- Mind Control
|
||||
[GetSpellInfo(13181)] = { category = "mind_control", spellID = 13181 }, -- Gnomish Mind Control Cap
|
||||
[GetSpellInfo(8056)] = { category = "frost_shock", spellID = 8056 }, -- Frost Shock
|
||||
}
|
||||
else
|
||||
print("DRList-1.0: Unsupported game expansion loaded.") -- luacheck: ignore
|
||||
end
|
||||
|
||||
-- Alias for DRData-1.0
|
||||
Lib.spells = Lib.spellList
|
||||
@@ -6,24 +6,23 @@ local Buff = LibClassAuras.Buff
|
||||
-------------
|
||||
-- PRIEST
|
||||
-------------
|
||||
Buff({ 1243, 1244, 1245, 2791, 10937, 10938, 25389 }, { buffType = "magic" }, "PRIEST") -- Power Word: Fortitude
|
||||
Buff({ 21562, 21564, 25392 }, { buffType = "magic" }, "PRIEST") -- Prayer of Fortitude
|
||||
Buff({ 17, 592, 600, 3747, 6065, 6066, 10898, 10899, 10900, 10901, 25217, 25218 }, { buffType = "magic" }, "PRIEST") -- Power Word: Shield
|
||||
Buff({ 588, 7128, 602, 1006, 10951, 10952, 25431 }, { buffType = "magic" }, "PRIEST") -- Inner Fire
|
||||
Buff({ 1243, 1244, 1245, 2791, 10937, 10938, 25389, 48161 }, { buffType = "magic" }, "PRIEST") -- Power Word: Fortitude
|
||||
Buff({ 21562, 21564, 25392, 48162 }, { buffType = "magic" }, "PRIEST") -- Prayer of Fortitude
|
||||
Buff({ 17, 592, 600, 3747, 6065, 6066, 10898, 10899, 10900, 10901, 25217, 25218, 48065, 48066 }, { buffType = "magic" }, "PRIEST") -- Power Word: Shield
|
||||
Buff({ 588, 7128, 602, 1006, 10951, 10952, 25431, 48040, 48168 }, { buffType = "magic" }, "PRIEST") -- Inner Fire
|
||||
Buff({ 2651 }, { buffType = "magic" }, "PRIEST") -- Elune's Grace
|
||||
Buff({ 6346 }, { buffType = "magic" }, "PRIEST") -- Fear Ward
|
||||
Buff({ 14752, 14818, 14819, 27841, 25312 }, { buffType = "magic" }, "PRIEST") -- Divine Spirit
|
||||
Buff({ 27681, 32999 }, { buffType = "magic" }, "PRIEST") -- Prayer of Spirit
|
||||
Buff({ 14752, 14818, 14819, 27841, 25312, 48073 }, { buffType = "magic" }, "PRIEST") -- Divine Spirit
|
||||
Buff({ 27681, 32999, 48074 }, { buffType = "magic" }, "PRIEST") -- Prayer of Spirit
|
||||
Buff({ 1706 }, { buffType = "magic" }, "PRIEST") -- Levitate
|
||||
Buff({ 139, 6074, 6075, 6076, 6077, 6078, 10927, 10928, 10929, 25315, 25221, 25222 }, { buffType = "magic" }, "PRIEST") -- Renew
|
||||
Buff({ 139, 6074, 6075, 6076, 6077, 6078, 10927, 10928, 10929, 25315, 25221, 25222, 48067, 48068 }, { buffType = "magic" }, "PRIEST") -- Renew
|
||||
Buff({ 552 }, { buffType = "magic" }, "PRIEST") -- Abolish Disease
|
||||
Buff({ 33076 }, { buffType = "magic" }, "PRIEST") -- Prayer of Mending
|
||||
Buff({ 33076, 48112, 48113 }, { buffType = "magic" }, "PRIEST") -- Prayer of Mending
|
||||
Buff({ 586, 9578, 9579, 9592, 10941, 10942, 25429 }, { buffType = "magic" }, "PRIEST") -- Fade
|
||||
Buff({ 2652, 19261, 19262, 19264, 19265, 19266, 25461 }, { buffType = "magic" }, "PRIEST") -- Touch of Weakness
|
||||
Buff({ 18137, 19308, 19310, 19311, 19312, 25477 }, { buffType = "magic" }, "PRIEST") -- Shadowguard
|
||||
Buff({ 976, 10957, 10958, 16874, 25433 }, { buffType = "magic" }, "PRIEST") -- Shadow Protection
|
||||
Buff({ 27683, 39374 }, { buffType = "magic" }, "PRIEST") -- Prayer of Shadow Protection
|
||||
Buff({ 15473 }, { buffType = "form" }, "PRIEST") -- Shadowform
|
||||
--talents
|
||||
Buff({ 14893, 15357, 15359 }, { buffType = "magic" }, "PRIEST") -- Inspiration
|
||||
Buff({ 27813, 27817, 27818 }, { buffType = "magic" }, "PRIEST") -- Blessed Recovery
|
||||
@@ -32,51 +31,74 @@ Buff({ 14751 }, { buffType = "magic" }, "PRIEST") -- Inner Focus
|
||||
Buff({ 10060 }, { buffType = "magic" }, "PRIEST") -- Power Infusion
|
||||
Buff({ 33206 }, { buffType = "magic" }, "PRIEST") -- Pain Suppression
|
||||
Buff({ 34754 }, { buffType = "magic" }, "PRIEST") -- Clearcasting
|
||||
Buff({ 15473 }, { buffType = "form" }, "PRIEST") -- Shadowform
|
||||
Buff({ 47788 }, { buffType = "magic" }, "PRIEST") -- Guardian's Spirit
|
||||
Buff({ 47585 }, { buffType = "magic" }, "PRIEST") -- Dispersion
|
||||
Buff({ 65081 }, { buffType = "magic" }, "PRIEST") -- Body and Soul
|
||||
Buff({ 33151 }, { buffType = "magic" }, "PRIEST") -- Surge of Light
|
||||
Buff({ 47753 }, { buffType = "magic" }, "PRIEST") -- Divine Aegis
|
||||
Buff({ 47930 }, { buffType = "magic" }, "PRIEST") -- Grace
|
||||
Buff({ 63734 }, { buffType = "magic" }, "PRIEST") -- Serendipity
|
||||
|
||||
---------------
|
||||
-- DRUID
|
||||
---------------
|
||||
Buff({ 467, 782, 1075, 8914, 9756, 9910, 26992 }, { buffType = "magic"}, "DRUID") -- Thorns
|
||||
Buff({ 467, 782, 1075, 8914, 9756, 9910, 26992, 53307 }, { buffType = "magic"}, "DRUID") -- Thorns
|
||||
Buff({ 5487 }, { buffType = "form"}, "DRUID") -- Bear Form
|
||||
Buff({ 783 }, { buffType = "form"}, "DRUID") -- Travel Form
|
||||
Buff({ 9634 }, { buffType = "form"}, "DRUID") -- Dire Bear Form
|
||||
Buff({ 768 }, { buffType = "form"}, "DRUID") -- Cat Form
|
||||
Buff({ 22812 }, { buffType = "magic"}, "DRUID") -- Barkskin
|
||||
Buff({ 5229 }, { buffType = "physical"}, "DRUID") -- Enrage
|
||||
Buff({ 5217, 6793, 9845, 9846 }, { buffType = "physical"}, "DRUID") -- Tiger's Fury
|
||||
Buff({ 5229 }, { buffType = "enrage"}, "DRUID") -- Enrage
|
||||
Buff({ 5217, 6793, 9845, 9846, 50212, 50213 }, { buffType = "physical"}, "DRUID") -- Tiger's Fury
|
||||
Buff({ 1850, 9821, 33357 }, { buffType = "physical"}, "DRUID") -- Dash
|
||||
Buff({ 22842, 22895, 22896, 26999 }, { buffType = "physical"}, "DRUID") -- Frenzied Regeneration
|
||||
Buff({ 1126, 5232, 6756, 5234, 8907, 9884, 9885, 26990 }, { buffType = "magic"}, "DRUID") -- Mark of the Wild
|
||||
Buff({ 21849, 21850, 26991 }, { buffType = "magic"}, "DRUID") -- Gift of the Wild
|
||||
Buff({ 774, 1058, 1430, 2090, 2091, 3627, 8910, 9839, 9840, 9841, 25299, 26981, 26982 }, { buffType = "magic"}, "DRUID") -- Regrowth
|
||||
Buff({ 8936, 8938, 8939, 8940, 8941, 9750, 9856, 9857, 9858, 26980 }, { buffType = "magic"}, "DRUID") -- Rejuvenation
|
||||
Buff({ 22842 }, { buffType = "physical"}, "DRUID") -- Frenzied Regeneration
|
||||
Buff({ 1126, 5232, 6756, 5234, 8907, 9884, 9885, 26990, 48469 }, { buffType = "magic"}, "DRUID") -- Mark of the Wild
|
||||
Buff({ 21849, 21850, 26991, 48470 }, { buffType = "magic"}, "DRUID") -- Gift of the Wild
|
||||
Buff({ 774, 1058, 1430, 2090, 2091, 3627, 8910, 9839, 9840, 9841, 25299, 26981, 26982, 48442, 48443 }, { buffType = "magic"}, "DRUID") -- Regrowth
|
||||
Buff({ 8936, 8938, 8939, 8940, 8941, 9750, 9856, 9857, 9858, 26980, 48440, 48441 }, { buffType = "magic"}, "DRUID") -- Rejuvenation
|
||||
Buff({ 2893 }, { buffType = "magic"}, "DRUID") -- Abolish Poison
|
||||
Buff({ 33763 }, { buffType = "magic"}, "DRUID") -- Lifebloom
|
||||
Buff({ 33763, 48450, 48451}, { buffType = "magic"}, "DRUID") -- Lifebloom
|
||||
--Talents
|
||||
Buff({ 24858 }, { buffType = "form"}, "DRUID") -- Moonkin Form
|
||||
Buff({ 24907 }, { buffType = "aura"}, "DRUID") -- Moonkin Aura
|
||||
Buff({ 33891 }, { buffType = "form"}, "DRUID") -- Tree of Life
|
||||
Buff({ 16864 }, { buffType = "magic"}, "DRUID") -- Omen of Clarity
|
||||
Buff({ 16689, 16810, 16811, 16812, 16813, 17329, 27009 }, { buffType = "magic"}, "DRUID") -- Nature's Grasp
|
||||
Buff({ 16864, 16870 }, { buffType = "magic"}, "DRUID") -- Omen of Clarity
|
||||
Buff({ 16689, 16810, 16811, 16812, 16813, 17329, 27009, 53312 }, { buffType = "magic"}, "DRUID") -- Nature's Grasp
|
||||
Buff({ 45281, 45282, 45283 }, { buffType = "magic"}, "DRUID") -- Natural Perfection
|
||||
Buff({ 17116 }, { buffType = "magic"}, "DRUID") -- Nature's Swiftness
|
||||
Buff({ 17007 }, { buffType = "aura"}, "DRUID") -- Leader of the Pack
|
||||
Buff({ 48518 }, { buffType = "physical"}, "DRUID") -- Eclipse (Lunar)
|
||||
Buff({ 48517 }, { buffType = "physical"}, "DRUID") -- Eclipse (Solar)
|
||||
Buff({ 16886 }, { buffType = "magic"}, "DRUID") -- Nature's Grace
|
||||
Buff({ 48503, 48504 }, { buffType = "magic"}, "DRUID") -- Living Seed
|
||||
Buff({ 50334 }, { buffType = "physical"}, "DRUID") -- Berserk
|
||||
Buff({ 52610, 62071 }, { buffType = "enrage"}, "DRUID") -- Savage Roar
|
||||
Buff({ 48391 }, { buffType = "enrage"}, "DRUID") -- Owlkin Frenzy
|
||||
|
||||
|
||||
-------------
|
||||
-- WARRIOR -- TODO
|
||||
-------------
|
||||
Buff({ 29838 }, { buffType = "physical"}, "WARRIOR") -- Second Wind
|
||||
Buff({ 12292 }, { buffType = "physical"}, "WARRIOR") -- Death Wish
|
||||
Buff({ 12292 }, { buffType = "enrage"}, "WARRIOR") -- Death Wish
|
||||
Buff({ 6673 }, { buffType = "physical"}, "WARRIOR") -- Battle Shout
|
||||
Buff({ 469 }, { buffType = "physical"}, "WARRIOR") -- Commanding Shout
|
||||
Buff({ 12328 }, { buffType = "physical"}, "WARRIOR") -- Sweeping Strikes
|
||||
Buff({ 30032 }, { buffType = "physical"}, "WARRIOR") -- Rampage
|
||||
Buff({ 2687 }, { buffType = "physical"}, "WARRIOR") -- Blood Rage
|
||||
Buff({ 29801, 30032 }, { buffType = "aura"}, "WARRIOR") -- Rampage
|
||||
Buff({ 2687 }, { buffType = "enrage"}, "WARRIOR") -- Blood Rage
|
||||
Buff({ 20230 }, { buffType = "physical"}, "WARRIOR") -- Retaliation
|
||||
Buff({ 871 }, { buffType = "physical"}, "WARRIOR") -- Shield Wall
|
||||
Buff({ 18499 }, { buffType = "physical"}, "WARRIOR") -- Berserker Rage
|
||||
Buff({ 23885 }, { buffType = "physical"}, "WARRIOR") -- Bloodthirst
|
||||
Buff({ 18499 }, { buffType = "enrage"}, "WARRIOR") -- Berserker Rage
|
||||
Buff({ 23885 }, { buffType = "enrage"}, "WARRIOR") -- Bloodthirst
|
||||
Buff({ 3411 }, { buffType = "physical"}, "WARRIOR") -- Intervene
|
||||
Buff({ 50622 }, { buffType = "physical"}, "WARRIOR") -- Bladestorm (whirlwind)
|
||||
Buff({ 52437 }, { buffType = "physical"}, "WARRIOR") -- Sudden Death
|
||||
Buff({ 57522 }, { buffType = "physical"}, "WARRIOR") -- Wrecking Crew
|
||||
Buff({ 46916 }, { buffType = "physical"}, "WARRIOR") -- Slam!
|
||||
Buff({ 50720 }, { buffType = "physical"}, "WARRIOR") -- Vigilance
|
||||
Buff({ 55694 }, { buffType = "enrage"}, "WARRIOR") -- Enraged Regeneration
|
||||
Buff({ 1719 }, { buffType = "enrage"}, "WARRIOR") -- Recklessness
|
||||
|
||||
|
||||
--------------
|
||||
@@ -87,24 +109,35 @@ Buff({ 2983 }, { buffType = "physical" }, "ROGUE") -- Sprint
|
||||
Buff({ 5277 }, { buffType = "physical" }, "ROGUE") -- Evasion
|
||||
Buff({ 31224 }, { buffType = "physical" }, "ROGUE") -- Cloak of Shadows
|
||||
Buff({ 14278 }, { buffType = "physical" }, "ROGUE") -- Ghostly Strike
|
||||
Buff({ 51713 }, { buffType = "physical" }, "ROGUE") -- Shadow Dance
|
||||
Buff({ 31665 }, { buffType = "physical" }, "ROGUE") -- Master of Subtlety
|
||||
Buff({ 51690 }, { buffType = "physical" }, "ROGUE") -- Killing Spree
|
||||
Buff({ 63848 }, { buffType = "enrage" }, "ROGUE") -- Hunger For Blood
|
||||
Buff({ 57934 }, { buffType = "physical" }, "ROGUE") -- Tricks of the Trade
|
||||
|
||||
|
||||
------------
|
||||
-- WARLOCK --TODO
|
||||
------------
|
||||
Buff({ 19028 }, { buffType = "aura"}, "WARLOCK") -- Soul Link
|
||||
Buff({ 696 }, { buffType = "aura"}, "WARLOCK") -- Demon Skin
|
||||
Buff({ 706 }, { buffType = "aura"}, "WARLOCK") -- Demon Armor
|
||||
Buff({ 28176 }, { buffType = "aura"}, "WARLOCK") -- Fel Armor
|
||||
Buff({ 687, 696 }, { buffType = "aura"}, "WARLOCK") -- Demon Skin
|
||||
Buff({ 706, 1086, 11733, 11734, 11735, 27260, 47793, 47889 }, { buffType = "aura"}, "WARLOCK") -- Demon Armor
|
||||
Buff({ 28176, 28189, 47892, 47893 }, { buffType = "aura"}, "WARLOCK") -- Fel Armor
|
||||
Buff({ 23759 }, { buffType = "aura"}, "WARLOCK") -- Master Demonologist
|
||||
Buff({ 34936 }, { buffType = "magic"}, "WARLOCK") -- Backlash
|
||||
Buff({ 5697 }, { buffType = "magic"}, "WARLOCK") -- Unending Breath
|
||||
Buff({ 132 }, { buffType = "magic"}, "WARLOCK") -- Detect Invisibility
|
||||
Buff({ 1949 }, { buffType = "aura"}, "WARLOCK") -- Hellfire
|
||||
Buff({ 6229 }, { buffType = "magic"}, "WARLOCK") -- Shadow Ward
|
||||
Buff({ 19480 }, { buffType = "magic"}, "WARLOCK") -- Paranoia
|
||||
Buff({ 7812 }, { buffType = "magic"}, "WARLOCK") -- Sacrifice
|
||||
Buff({ 2947 }, { buffType = "magic"}, "WARLOCK") -- Fire Shield
|
||||
Buff({ 1949, 11683, 11684, 27213, 47823 }, { buffType = "aura"}, "WARLOCK") -- Hellfire
|
||||
Buff({ 6229, 11739, 11740, 28610, 47890, 47891 }, { buffType = "magic"}, "WARLOCK") -- Shadow Ward
|
||||
Buff({ 19480, 20435, 41002 }, { buffType = "aura"}, "WARLOCK") -- Paranoia
|
||||
Buff({ 7812, 19438, 19440, 19441, 19442, 19443, 27273, 47985, 47986 }, { buffType = "magic"}, "WARLOCK") -- Sacrifice
|
||||
Buff({ 2947, 8316, 8317, 11770, 11771, 27269, 47983 }, { buffType = "magic"}, "WARLOCK") -- Fire Shield
|
||||
Buff({ 48018 }, { buffType = "magic"}, "WARLOCK") -- Demonic Circle: Summon
|
||||
Buff({ 59672 }, { buffType = "physical"}, "WARLOCK") -- Metamorphosis
|
||||
Buff({ 54277 }, { buffType = "physical"}, "WARLOCK") -- Backdraft
|
||||
Buff({ 47283 }, { buffType = "magic"}, "WARLOCK") -- Empowered Imp
|
||||
Buff({ 64371 }, { buffType = "magic"}, "WARLOCK") -- Eradication
|
||||
Buff({ 18093, 63243, 63244 } ,{ buffType = "physical" }, "WARLOCK") -- Pyroclasm
|
||||
|
||||
|
||||
---------------
|
||||
@@ -115,35 +148,43 @@ Buff({ 8178 } ,{ buffType = "magic" }, "SHAMAN") -- Grounding Totem Effect
|
||||
Buff({ 30823 } ,{ buffType = "magic" }, "SHAMAN") -- Shamanistic Rage
|
||||
Buff({ 32182 } ,{ buffType = "magic" }, "SHAMAN") -- Heroism
|
||||
Buff({ 2825 } ,{ buffType = "magic" }, "SHAMAN") -- Bloodlust
|
||||
Buff({ 974 } ,{ buffType = "magic" }, "SHAMAN") -- Earth Shield
|
||||
Buff({ 24398 } ,{ buffType = "magic" }, "SHAMAN") -- Water Shield
|
||||
Buff({ 324 } ,{ buffType = "magic" }, "SHAMAN") -- Lightning Shield
|
||||
Buff({ 974, 32593, 32594, 49283, 49284 } ,{ buffType = "magic" }, "SHAMAN") -- Earth Shield
|
||||
Buff({ 24398, 33736, 57960 } ,{ buffType = "magic" }, "SHAMAN") -- Water Shield
|
||||
Buff({ 324, 25472, 49280, 49281 } ,{ buffType = "magic" }, "SHAMAN") -- Lightning Shield
|
||||
Buff({ 16188 } ,{ buffType = "magic" }, "SHAMAN") -- Nature's Swiftness
|
||||
Buff({ 16166 } ,{ buffType = "magic" }, "SHAMAN") -- Elemental Mastery
|
||||
Buff({ 51470 } ,{ buffType = "aura" }, "SHAMAN") -- Elemental Oath
|
||||
Buff({ 30809 } ,{ buffType = "aura" }, "SHAMAN") -- Unleashed Rage
|
||||
Buff({ 52179 } ,{ buffType = "magic" }, "SHAMAN") -- Astral Shift
|
||||
Buff({ 61295, 61299, 61300, 61301 } ,{ buffType = "magic" }, "SHAMAN") -- Riptide
|
||||
Buff({ 53390 } ,{ buffType = "magic" }, "SHAMAN") -- Tidal Waves
|
||||
Buff({ 52000, 51999, 51998, 51997, 51990, 51945 } ,{ buffType = "magic" }, "SHAMAN") -- Earthliving proc
|
||||
|
||||
|
||||
|
||||
--------------
|
||||
-- PALADIN --TODO
|
||||
--------------
|
||||
--Blessings
|
||||
Buff( { 1022, 5599, 10278 }, { buffType = "magic"}, "PALADIN") -- Blessing of Protection
|
||||
Buff( { 6940 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sacrifice
|
||||
Buff( { 1044 }, { buffType = "magic"}, "PALADIN") -- Blessing of Freedom
|
||||
Buff( { 19740, 19834, 19835, 19836, 19837, 19838, 25291, 27140 }, { buffType = "magic"}, "PALADIN") -- Blessing of Might
|
||||
Buff( { 19742 }, { buffType = "magic"}, "PALADIN") -- Blessing of Wisdom
|
||||
Buff( { 1022, 5599, 10278 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Protection
|
||||
Buff( { 6940 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Sacrifice
|
||||
Buff( { 1044, 66115 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Freedom
|
||||
Buff( { 19740, 19834, 19835, 19836, 19837, 19838, 25291, 27140, 48931, 48932 }, { buffType = "magic"}, "PALADIN") -- Blessing of Might
|
||||
Buff( { 19742, 19850, 19852, 19853, 19854, 25290, 27142, 48935, 48936 }, { buffType = "magic"}, "PALADIN") -- Blessing of Wisdom
|
||||
Buff( { 20217 }, { buffType = "magic"}, "PALADIN") -- Blessing of Kings
|
||||
Buff( { 19977 }, { buffType = "magic"}, "PALADIN") -- Blessing of Light
|
||||
Buff( { 1038 }, { buffType = "magic"}, "PALADIN") -- Blessing of Salvation
|
||||
Buff( { 1038 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Salvation
|
||||
Buff( { 20911 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sanctuary
|
||||
Buff( { 25898 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Kings
|
||||
Buff( { 25890 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Light
|
||||
Buff( { 25782 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
|
||||
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
|
||||
Buff( { 25782, 27141, 48933, 48934 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
|
||||
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
|
||||
Buff( { 25899 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Sanctuary
|
||||
Buff( { 25894 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Wisdom
|
||||
Buff( { 25894, 48937 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Wisdom
|
||||
Buff( { 642 }, { buffType = "immune"}, "PALADIN") -- Divine Shield
|
||||
Buff( { 31884 }, { buffType = "magic"}, "PALADIN") -- Avenging Wrath
|
||||
--Auras
|
||||
Buff( { 465, 10290, 643, 10291, 1032, 10292, 10293, 27149 }, { buffType = "aura"}, "PALADIN") -- Devotion Aura
|
||||
Buff( { 465, 10290, 643, 10291, 1032, 10292, 10293, 27149, 48941, 48942 }, { buffType = "aura"}, "PALADIN") -- Devotion Aura
|
||||
Buff( { 7294 }, { buffType = "aura"}, "PALADIN") -- Retribution Aura
|
||||
Buff( { 19746 }, { buffType = "aura"}, "PALADIN") -- Concentration Aura
|
||||
Buff( { 19876 }, { buffType = "aura"}, "PALADIN") -- Shadow Resistance Aura
|
||||
@@ -152,7 +193,7 @@ Buff( { 19888 }, { buffType = "aura"}, "PALADIN") -- Frost Resistance Aura
|
||||
Buff( { 19891 }, { buffType = "aura"}, "PALADIN") -- Fire Resistance Aura
|
||||
Buff( { 32223 }, { buffType = "aura"}, "PALADIN") -- Crusader Aura
|
||||
--Seals
|
||||
Buff( { 20154, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 27155 }, { buffType = "magic"}, "PALADIN") -- Seal of Righteousness
|
||||
Buff( { 20154, 21084, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 27155 }, { buffType = "magic"}, "PALADIN") -- Seal of Righteousness
|
||||
Buff( { 31892 }, { buffType = "magic"}, "PALADIN") -- Seal of Blood
|
||||
Buff( { 20375 }, { buffType = "magic"}, "PALADIN") -- Seal of Command
|
||||
Buff( { 20164 }, { buffType = "magic"}, "PALADIN") -- Seal of Justice
|
||||
@@ -161,6 +202,18 @@ Buff( { 15277 }, { buffType = "magic"}, "PALADIN") -- Seal of Reckoning
|
||||
Buff( { 31801 }, { buffType = "magic"}, "PALADIN") -- Seal of Vengeance
|
||||
Buff( { 20166 }, { buffType = "magic"}, "PALADIN") -- Seal of Wisdom
|
||||
Buff( { 21082 }, { buffType = "magic"}, "PALADIN") -- Seal of the Crusade
|
||||
Buff( { 53563 }, { buffType = "magic"}, "PALADIN") -- Beacon of Light
|
||||
Buff( { 54149 }, { buffType = "magic"}, "PALADIN") -- Infusion of Light
|
||||
Buff( { 59578 }, { buffType = "magic"}, "PALADIN") -- The Art of War
|
||||
Buff( { 20925, 20927, 20928, 27179, 48951, 48952 }, { buffType = "magic"}, "PALADIN") -- Holy Shield
|
||||
Buff( { 53601 }, { buffType = "magic"}, "PALADIN") -- Sacred Shield
|
||||
Buff( { 54428 }, { buffType = "magic"}, "PALADIN") -- Divine Plea
|
||||
Buff( { 31821 }, { buffType = "magic"}, "PALADIN") -- Aura Mastery
|
||||
Buff( { 31842 }, { buffType = "magic"}, "PALADIN") -- Divine Illumination
|
||||
Buff( { 20216 }, { buffType = "magic"}, "PALADIN") -- Divine Favor
|
||||
Buff( { 25780 }, { buffType = "magic"}, "PALADIN") -- Righteous Fury
|
||||
|
||||
|
||||
|
||||
|
||||
-------------
|
||||
@@ -170,7 +223,10 @@ Buff( { 21082 }, { buffType = "magic"}, "PALADIN") -- Seal of the Crusade
|
||||
Buff( { 5384 }, { buffType = "physical"}, "HUNTER") -- Feign Death
|
||||
Buff( { 19263 }, { buffType = "physical"}, "HUNTER") -- Deterrence
|
||||
Buff( { 3045 }, { buffType = "physical"}, "HUNTER") -- Rapid Fire
|
||||
--local FEIGN_DEATH = GetSpellInfo(5384) -- Localized name for Feign Death
|
||||
Buff( { 64420 }, { buffType = "physical"}, "HUNTER") -- Sniper Training
|
||||
Buff( { 34835 }, { buffType = "physical"}, "HUNTER") -- Master Tactician
|
||||
Buff( { 54216 }, { buffType = "physical"}, "HUNTER") -- Master's Call
|
||||
Buff( { 34471 }, { buffType = "physical"}, "HUNTER") -- The Beast Within
|
||||
|
||||
|
||||
-------------
|
||||
@@ -178,20 +234,50 @@ Buff( { 3045 }, { buffType = "physical"}, "HUNTER") -- Rapid Fire
|
||||
-------------
|
||||
|
||||
Buff({ 66 }, { buffType = "magic"}, "MAGE") -- Invisibility
|
||||
Buff({ 1459 }, { buffType = "magic"}, "MAGE") -- Arcane Intellect
|
||||
Buff({ 1459, 1460, 1461, 10156, 10157, 27126, 42995 }, { buffType = "magic"}, "MAGE") -- Arcane Intellect
|
||||
Buff({ 130 }, { buffType = "magic"}, "MAGE") -- Slow Fall
|
||||
Buff({ 604 }, { buffType = "magic"}, "MAGE") -- Dampen Magic
|
||||
Buff({ 1008 }, { buffType = "magic"}, "MAGE") -- Amplify Magic
|
||||
Buff({ 1463 }, { buffType = "magic"}, "MAGE") -- Mana Shield
|
||||
Buff({ 6117 }, { buffType = "form"}, "MAGE") -- Mage Armor
|
||||
Buff({ 604, 8450, 8451, 10173, 10174, 33944, 43015 }, { buffType = "magic"}, "MAGE") -- Dampen Magic
|
||||
Buff({ 1008, 8455, 10169, 10170, 27130, 33946, 43017, }, { buffType = "magic"}, "MAGE") -- Amplify Magic
|
||||
Buff({ 1463, 8494, 8495, 10191, 10192, 10193, 27131, 43019, 43020 }, { buffType = "magic"}, "MAGE") -- Mana Shield
|
||||
Buff({ 6117, 22782, 22783, 27125, 43023, 43024 }, { buffType = "form"}, "MAGE") -- Mage Armor
|
||||
Buff({ 31643 }, { buffType = "magic"}, "MAGE") -- Blazing Speed
|
||||
Buff({ 543 }, { buffType = "magic"}, "MAGE") -- Fire Ward
|
||||
Buff({ 543, 8457, 8458, 10223, 10225, 27128, 43010 }, { buffType = "magic"}, "MAGE") -- Fire Ward
|
||||
Buff({ 11129 }, { buffType = "magic"}, "MAGE") -- Combustion
|
||||
Buff({ 30482 }, { buffType = "form"}, "MAGE") -- Molten Armor
|
||||
Buff({ 168 }, { buffType = "form"}, "MAGE") -- Frost Armor
|
||||
Buff({ 7302 }, { buffType = "form"}, "MAGE") -- Ice Armor
|
||||
Buff({ 30482, 43045, 43046 }, { buffType = "form"}, "MAGE") -- Molten Armor
|
||||
Buff({ 168, 7300, 7301 }, { buffType = "form"}, "MAGE") -- Frost Armor
|
||||
Buff({ 7302, 7320, 10219, 10220, 27124, 43008 }, { buffType = "form"}, "MAGE") -- Ice Armor
|
||||
Buff({ 45438 }, { buffType = "immune"}, "MAGE") -- Ice Block
|
||||
Buff({ 6143 }, { buffType = "magic"}, "MAGE") -- Frost Ward
|
||||
Buff({ 6143, 32796, 8462, 28609, 10177, 43012, 8461 }, { buffType = "magic"}, "MAGE") -- Frost Ward
|
||||
--talents
|
||||
Buff({ 11426 }, { buffType = "magic"}, "MAGE") -- Ice Barrier
|
||||
Buff({ 12472 }, { buffType = "magic"}, "MAGE") -- Icy Veins
|
||||
Buff({ 11426, 13031, 13032, 13033, 27134, 33405, 43038, 43039 }, { buffType = "magic"}, "MAGE") -- Ice Barrier
|
||||
Buff({ 12472 }, { buffType = "magic"}, "MAGE") -- Icy Veins
|
||||
Buff({ 74396 }, { buffType = "magic"}, "MAGE") -- Fingers of Frost
|
||||
Buff({ 57761 }, { buffType = "magic"}, "MAGE") -- FireBall!
|
||||
Buff({ 44413 }, { buffType = "magic"}, "MAGE") -- Incanter's Absorption
|
||||
Buff({ 48108 }, { buffType = "magic"}, "MAGE") -- Hot Streak
|
||||
Buff({ 54741 }, { buffType = "magic"}, "MAGE") -- Hot Streak
|
||||
Buff({ 61316 }, { buffType = "magic"}, "MAGE") -- Dalaran Brilliance
|
||||
Buff({ 44401 }, { buffType = "magic"}, "MAGE") -- Missile Barrage
|
||||
|
||||
|
||||
|
||||
|
||||
-------------
|
||||
-- DEATHKNIGHT
|
||||
-------------
|
||||
|
||||
Buff({ 48707 }, { buffType = "physical"}, "DEATHKNIGHT") -- Anti-Magic Shell
|
||||
Buff({ 48792 }, { buffType = "physical"}, "DEATHKNIGHT") -- Icebound Fortitude
|
||||
Buff({ 49039 }, { buffType = "physical"}, "DEATHKNIGHT") -- Lichborne
|
||||
Buff({ 50461 }, { buffType = "physical"}, "DEATHKNIGHT") -- Anti-Magic Zone
|
||||
Buff({ 57330, 57623 }, { buffType = "physical"}, "DEATHKNIGHT") -- Horn of Winter
|
||||
Buff({ 49222 }, { buffType = "physical"}, "DEATHKNIGHT") -- Bone Shield
|
||||
Buff({ 49016 }, { buffType = "enrage"}, "DEATHKNIGHT") -- Unholy Frenzy
|
||||
Buff({ 59052 }, { buffType = "physical"}, "DEATHKNIGHT") -- Freezing Fog
|
||||
Buff({ 55233 }, { buffType = "physical"}, "DEATHKNIGHT") -- Vampiric Blood
|
||||
Buff({ 51271 }, { buffType = "physical"}, "DEATHKNIGHT") -- Unbreakable Armor
|
||||
Buff({ 49796 }, { buffType = "physical"}, "DEATHKNIGHT") -- Deathchill
|
||||
Buff({ 50485 }, { buffType = "physical"}, "DEATHKNIGHT") -- Acclimation
|
||||
Buff({ 66803 }, { buffType = "physical"}, "DEATHKNIGHT") -- Desolation
|
||||
Buff({ 55610 }, { buffType = "aura"}, "DEATHKNIGHT") -- Improved Icy Talons
|
||||
Buff({ 53138 }, { buffType = "aura"}, "DEATHKNIGHT") -- Abomination's Might
|
||||
@@ -11,129 +11,151 @@ Debuff({ 9035, 19281, 19282, 19283, 19284, 19285, 25470 }, { buffType = "curse"
|
||||
Debuff({ 6788 }, { }, "PRIEST") -- Weakened Soul
|
||||
Debuff({ 15487 }, { buffType = "magic" }, "PRIEST") -- Silence
|
||||
Debuff({ 10797, 19296, 19299, 19302, 19303, 19304, 19305, 25446 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "PRIEST") -- starshards
|
||||
Debuff({ 2944, 19276, 19277, 19278, 19279, 19280, 25467 }, { stacking = true , buffType = "disease", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") --devouring plague
|
||||
Debuff({ 2944, 19276, 19277, 19278, 19279, 19280, 25467, 48299, 48300 }, { stacking = true , buffType = "disease", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") --devouring plague
|
||||
Debuff({ 453, 8192, 10953, 25596 }, { }, "PRIEST") -- mind soothe
|
||||
Debuff({ 14914, 15261, 15262, 15263, 15264, 15265, 15266, 15267, 25384 }, { stacking = true, buffType = "magic", preEvent = "SPELL_DAMAGE"}, "PRIEST") -- Holy Fire, stacking?
|
||||
Debuff({ 589, 594, 970, 992, 2767, 10892, 10893, 10894, 25367, 25368 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") -- SW:P
|
||||
Debuff({ 14914, 15261, 15262, 15263, 15264, 15265, 15266, 15267, 25384, 48134, 48135 }, { stacking = true, buffType = "magic", preEvent = "SPELL_DAMAGE"}, "PRIEST") -- Holy Fire, stacking?
|
||||
Debuff({ 589, 594, 970, 992, 2767, 10892, 10893, 10894, 25367, 25368, 48124, 48125 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") -- SW:P
|
||||
Debuff({ 15258 } ,{ buffType = "magic" }, "PRIEST") -- Shadow Vulnerability (Shadow Weaving Talent Effect)
|
||||
Debuff({ 15286 } ,{ buffType = "magic" }, "PRIEST") -- Vampiric Embrace
|
||||
Debuff({ 15407, 17311, 17312, 17313, 17314, 18807, 25387 }, { buffType = "magic" }, "PRIEST") -- Mind Flay
|
||||
Debuff({ 34914, 34916, 34917, 48159, 48160 }, { buffType = "magic"}, "PRIEST") -- Vampiric Touch
|
||||
Debuff({ 15407, 17311, 17312, 17313, 17314, 18807, 25387, 48155, 48156 }, { buffType = "magic" }, "PRIEST") -- Mind Flay
|
||||
Debuff({ 605, 10911, 10912 }, { buffType = "magic" }, "PRIEST") -- Mind Control
|
||||
Debuff({ 8122, 8124, 10888, 10890 }, { buffType = "magic", }, "PRIEST") -- Psychic Scream
|
||||
Debuff({ 15269 }, { buffType = "magic"}, "PRIEST") -- Blackout
|
||||
Debuff({ 44041, 44043, 44044, 44045, 44046, 44047 }, { buffType = "magic"}, "PRIEST") -- Chastise
|
||||
Debuff({ 48045, 53023 }, {stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") -- Mind Sear
|
||||
Debuff({ 64044 }, { buffType = "magic" }, "PRIEST") -- Psychic Horror
|
||||
Debuff({ 64058 }, { buffType = "physical" }, "PRIEST") -- Psychic Horror Disarm
|
||||
|
||||
---------------
|
||||
-- DRUID
|
||||
---------------
|
||||
Debuff({ 33786 }, { buffType = "immune"}, "DRUID") -- Cyclone
|
||||
Debuff({ 19675 }, { }, "DRUID") -- Feral Charge
|
||||
Debuff( { 22570}, { buffType = "physical"}, "DRUID") -- Maim
|
||||
Debuff({ 19975, 19974, 19973, 19972, 19971, 19970, 27010 }, { buffType = "magic", altName = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)) }, "DRUID") -- Nature's Grasp root
|
||||
Debuff({ 22570, 49802}, { buffType = "physical"}, "DRUID") -- Maim
|
||||
Debuff({ 19975, 19974, 19973, 19972, 19971, 19970, 27010, 53313 }, { buffType = "magic", altName = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)) }, "DRUID") -- Nature's Grasp root
|
||||
Debuff({ 339, 1062, 5195, 5196, 9852, 9853, 26989 }, { buffType = "magic"}, "DRUID") -- Entangling Roots
|
||||
Debuff({ 770, 778, 9749, 9907, 26993 }, { buffType = "magic" }, "DRUID") -- Faerie Fire
|
||||
Debuff({ 16857, 17390, 17391, 17392, 27011 }, { buffType = "magic" }, "DRUID") -- Faerie Fire (Feral)
|
||||
Debuff({ 2637, 18657, 18658 }, { buffType = "magic"}, "DRUID") -- Hibernate
|
||||
Debuff({ 99, 1735, 9490, 9747, 9898, 26998 }, { buffType = "physical" }, "DRUID") -- Demoralizing Roar
|
||||
Debuff({ 99, 1735, 9490, 9747, 9898, 26998, 48559, 48560 }, { buffType = "physical" }, "DRUID") -- Demoralizing Roar
|
||||
Debuff({ 5209 }, { buffType = "physical" }, "DRUID") -- Challenging Roar
|
||||
Debuff({ 6795 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Taunt
|
||||
Debuff({ 16922 }, { buffType = "physical" }, "DRUID") -- Imp Starfire Stun
|
||||
Debuff({ 9005, 9823, 9827, 27006 }, { buffType = "physical" }, "DRUID") -- Pounce
|
||||
Debuff({ 9007, 9824, 9826, 27007 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Pounce Bleed
|
||||
Debuff({ 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835, 26987, 26988 }, { stacking = true, buffType = "magic"}, "DRUID") -- Moonfire
|
||||
Debuff({ 1822, 1823, 1824, 9904, 27003 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rake
|
||||
Debuff({ 1079, 9492, 9493, 9752, 9894, 9896, 27008 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rip
|
||||
Debuff({ 5570, 24974, 24975, 24976, 24977, 27013 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Insect Swarm
|
||||
Debuff({ 33745 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Lacerate
|
||||
Debuff({ 33878, 33986, 33987 }, { buffType = "physical" }, "DRUID") -- Mangle (Bear)
|
||||
Debuff({ 33876, 33982, 33983 }, { buffType = "physical" }, "DRUID") -- Mangle (Cat)
|
||||
Debuff({ 9005, 9823, 9827, 27006, 49803 }, { buffType = "physical" }, "DRUID") -- Pounce
|
||||
Debuff({ 9007, 9824, 9826, 27007, 49804 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Pounce Bleed
|
||||
Debuff({ 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835, 26987, 26988, 48462, 48463 }, { stacking = true, buffType = "magic"}, "DRUID") -- Moonfire
|
||||
Debuff({ 1822, 1823, 1824, 9904, 27003, 48573, 48574, 59886 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rake
|
||||
Debuff({ 1079, 9492, 9493, 9752, 9894, 9896, 27008, 49799, 49800 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rip
|
||||
Debuff({ 5570, 24974, 24975, 24976, 24977, 27013, 48468 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Insect Swarm
|
||||
Debuff({ 33745, 48567, 48568 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Lacerate
|
||||
Debuff({ 33878, 33986, 33987, 48563, 48564 }, { buffType = "physical" }, "DRUID") -- Mangle (Bear)
|
||||
Debuff({ 33876, 33982, 33983, 48565, 48566 }, { buffType = "physical" }, "DRUID") -- Mangle (Cat)
|
||||
Debuff({ 60433 }, { buffType = "magic" }, "DRUID") -- Earth and Moon
|
||||
Debuff({ 58181 }, { buffType = "physical" }, "DRUID") -- Infected Wounds
|
||||
|
||||
|
||||
-------------
|
||||
-- WARRIOR
|
||||
-------------
|
||||
Debuff({ 29703 }, { buffType = "physical"}, "WARRIOR") -- Dazed
|
||||
Debuff({ 12294, 21551, 21552, 21553, 25248, 30330 }, { buffType = "physical" }, "WARRIOR") -- Mortal Strike
|
||||
Debuff({ 72, 1671, 1672, 29704}, { buffType = "physical" }, "WARRIOR") -- Shield Bash
|
||||
Debuff({ 12294, 21551, 21552, 21553, 25248, 30330, 47485, 47486 }, { buffType = "physical" }, "WARRIOR") -- Mortal Strike
|
||||
Debuff({ 72, 1671, 1672, 29704 }, { buffType = "physical" }, "WARRIOR") -- Shield Bash
|
||||
Debuff({ 18498 }, { buffType = "physical" }, "WARRIOR") -- Improved Shield Bash
|
||||
Debuff({ 772, 6546, 6547, 6548, 11572, 11573, 11574, 25208 }, { stacking = true, buffType = "physical"}, "WARRIOR") -- Rend
|
||||
Debuff({ 12721, 43104 }, { stacking = true, buffType = "physical"}, "WARRIOR") -- Deep Wounds
|
||||
Debuff({ 772, 6546, 6547, 6548, 11572, 11573, 11574, 25208, 46845, 47465 }, { stacking = true, buffType = "physical"}, "WARRIOR") -- Rend
|
||||
Debuff({ 12721, 43104, }, { stacking = true, buffType = "physical"}, "WARRIOR") -- Deep Wounds
|
||||
Debuff({ 12323 }, { buffType = "physical"}, "WARRIOR") -- Piercing Howl
|
||||
Debuff({ 1715, 7372, 7373, 25212 }, { buffType = "physical" }, "WARRIOR") -- Hamstring
|
||||
Debuff({ 23694 } , { buffType = "physical" }, "WARRIOR") -- Improved Hamstring
|
||||
Debuff({ 6343, 8198, 8204, 8205, 11580, 11581, 25264 }, { buffType = "physical"}, "WARRIOR") -- Thunder Clap
|
||||
Debuff({ 6343, 8198, 8204, 8205, 11580, 11581, 25264, 47501, 47502 }, { buffType = "physical"}, "WARRIOR") -- Thunder Clap
|
||||
Debuff({ 694, 7400, 7402, 20559, 20560 }, { buffType = "physical", }, "WARRIOR") -- Mocking Blow
|
||||
Debuff({ 1161 } ,{ buffType = "physical", }, "WARRIOR") -- Challenging Shout
|
||||
Debuff({ 355 } ,{ stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "WARRIOR") -- Taunt
|
||||
Debuff({ 1160, 6190, 11554, 11555, 11556, 25202, 25203 }, { buffType = "physical" }, "WARRIOR") -- Demoralizing Shout, varies
|
||||
Debuff({ 1160, 6190, 11554, 11555, 11556, 25202, 25203, 47437 }, { buffType = "physical" }, "WARRIOR") -- Demoralizing Shout, varies
|
||||
Debuff({ 5246 }, { buffType = "physical" }, "WARRIOR") -- Intimidating Shout Fear
|
||||
Debuff({ 676 } ,{ buffType = "physical" }, "WARRIOR") -- Disarm
|
||||
Debuff({ 12798 } , { buffType = "physical" }, "WARRIOR") -- Imp Revenge Stun
|
||||
Debuff({ 7386, 7405, 8380, 11596, 11597, 25225, buffType = "physical" }, { }, "WARRIOR") -- Sunder Armor
|
||||
Debuff({ 7386, 7405, 8380, 11596, 11597, 25225 }, { buffType = "physical" }, { }, "WARRIOR") -- Sunder Armor
|
||||
Debuff({ 12809 } ,{ buffType = "physical" }, "WARRIOR") -- Concussion Blow
|
||||
Debuff({ 7922 }, { buffType = "physical" }, "WARRIOR") -- Charge Stun
|
||||
Debuff({ 20253, 20614, 20615, 25273, 25274 }, { buffType = "physical" }, "WARRIOR") -- Intercept Stun
|
||||
Debuff({ 20253, 20614, 20615, 25273, 25274, 47995 }, { buffType = "physical" }, "WARRIOR") -- Intercept Stun
|
||||
Debuff({ 5530 }, { buffType = "physical"}, "WARRIOR") -- Mace Stun Effect (Mace Specialization)
|
||||
Debuff({ 56112 }, { buffType = "physical"}, "WARRIOR") -- Furious Attacks
|
||||
Debuff({ 18498, 74347 }, { buffType = "physical"}, "WARRIOR") -- Gag Order
|
||||
Debuff({ 46857 }, { buffType = "physical"}, "WARRIOR") -- Trauma
|
||||
Debuff({ 46968 }, { buffType = "physical"}, "WARRIOR") -- Shockwave
|
||||
Debuff({ 64382 }, { buffType = "physical"}, "WARRIOR") -- Shattering Throw
|
||||
|
||||
|
||||
--------------
|
||||
-- ROGUE
|
||||
--------------
|
||||
|
||||
Debuff({ 16511, 17347, 17348, 26864 }, { buffType = "physical" }, "ROGUE") -- Hemorrhage
|
||||
Debuff({ 16511, 17347, 17348, 26864, 48660 }, { buffType = "physical" }, "ROGUE") -- Hemorrhage
|
||||
Debuff({ 3409, 11201 }, { buffType = "poison" }, "ROGUE") -- Crippling Poison
|
||||
Debuff({ 13218, 13222, 13223, 13224, 27189 }, { buffType = "poison" }, "ROGUE") -- Wound Poison
|
||||
Debuff({ 13218, 13222, 13223, 13224, 27189, 57975 }, { buffType = "poison" }, "ROGUE") -- Wound Poison
|
||||
Debuff({ 26679 }, { buffType = "physical"}, "ROGUE") -- Deadly Throw Slow
|
||||
Debuff({ 2818, 2819, 11353, 11354, 25349, 26968, 27187 }, { stacking = true, buffType = "poison", preEvent = { { event = "SPELL_DAMAGE", spellID = 5940}, "SWING_DAMAGE" }}, "ROGUE") -- Deadly Poison
|
||||
Debuff({ 2818, 2819, 11353, 11354, 25349, 26968, 27187, 57970 }, { stacking = true, buffType = "poison", preEvent = { { event = "SPELL_DAMAGE", spellID = 5940}, "SWING_DAMAGE" }}, "ROGUE") -- Deadly Poison
|
||||
Debuff({ 5760, 8692, 11398 }, { buffType = "poison" }, "ROGUE") -- Mind-numbing Poison
|
||||
Debuff({ 18425 }, { buffType = "physical" }, "ROGUE") -- Improved Kick Silence
|
||||
Debuff({ 1833 }, { buffType = "physical" }, "ROGUE") -- Cheap Shot
|
||||
Debuff({ 2070, 6770, 11297 }, { buffType = "physical" }, "ROGUE") -- Sap
|
||||
Debuff({ 2094 } , { buffType = "physical" }, "ROGUE") -- Blind
|
||||
Debuff({ 8647, 8649, 8650, 11197, 11198, 26866 }, { buffType = "physical" }, "ROGUE") -- Expose Armor
|
||||
Debuff({ 703, 8631, 8632, 8633, 11289, 11290, 26839, 26884 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "ROGUE") -- Garrote
|
||||
Debuff({ 703, 8631, 8632, 8633, 11289, 11290, 26839, 26884, 48676 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "ROGUE") -- Garrote
|
||||
Debuff({ 1330 }, { buffType = "physical"}, "ROGUE")-- Garrote - Silence
|
||||
Debuff({ 408, 8643 }, { buffType = "physical" }, "ROGUE") -- Kidney Shot
|
||||
Debuff({ 1943, 8639, 8640, 11273, 11274, 11275, 26867 }, { buffType = "physical", stacking = true}, "ROGUE") -- Rupture
|
||||
Debuff({ 1943, 8639, 8640, 11273, 11274, 11275, 26867, 48671, 48672 }, { buffType = "physical", stacking = true}, "ROGUE") -- Rupture
|
||||
Debuff({ 1776, 1777, 8629, 11285, 11286, 38764 }, { buffType = "physical", }, "ROGUE") -- Gouge
|
||||
Debuff({ 14251 } , { buffType = "physical", }, "ROGUE") -- Riposte (disarm)
|
||||
Debuff({ 51693 } , { buffType = "physical", }, "ROGUE") -- Waylay
|
||||
Debuff({ 51585 } , { buffType = "physical", }, "ROGUE") -- Blade Twisting
|
||||
|
||||
|
||||
------------
|
||||
-- WARLOCK
|
||||
------------
|
||||
Debuff({ 32386 }, { buffType = "magic"}, "WARLOCK") -- Shadow Embrace
|
||||
Debuff({ 710, 18647 } ,{ buffType = "immune"}, "WARLOCK") -- Banish
|
||||
Debuff( { 348, 707, 1094, 2941, 11665, 11667, 11668, 25309, 27215 }, { buffType = "magic", stacking = true, preEvent = "SPELL_DAMAGE"}, "WARLOCK") -- Immolate
|
||||
Debuff( { 348, 707, 1094, 2941, 11665, 11667, 11668, 25309, 27215, 47810, 47811 }, { buffType = "magic", stacking = true, preEvent = "SPELL_DAMAGE"}, "WARLOCK") -- Immolate
|
||||
Debuff({ 24259 } ,{ buffType = "magic" }, "WARLOCK") -- Spell Lock Silence
|
||||
Debuff({ 27243 } ,{ buffType = "magic", stacking = true, preEvent = "SPELL_CAST_START" }, "WARLOCK") -- Seed of Corruption
|
||||
Debuff( { 689, 699, 709, 7651, 11699, 11700, 27219, 27220 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Drain Life
|
||||
Debuff( { 689, 699, 709, 7651, 11699, 11700, 27219, 27220, 47857 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Drain Life
|
||||
Debuff( { 5138, 6226, 11703, 11704, 27221, 30908 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Drain Mana
|
||||
Debuff( { 1120, 8288, 8289, 11675, 27217 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Drain Soul
|
||||
Debuff( { 1120, 8288, 8289, 11675, 27217, 47855 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Drain Soul
|
||||
Debuff( { 18265, 18879, 18880, 18881, 27264, 30911}, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Siphon Life
|
||||
Debuff( { 172, 6222, 6223, 7648, 11671, 11672, 25311, 27216 }, { buffType = "magic", stacking = true }, "WARLOCK") -- Corruption
|
||||
Debuff( { 980, 1014, 6217, 11711, 11712, 11713, 27218 }, { buffType = "curse", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Curse of Agony
|
||||
Debuff( { 172, 6222, 6223, 7648, 11671, 11672, 25311, 27216, 47812, 47813 }, { buffType = "magic", stacking = true }, "WARLOCK") -- Corruption
|
||||
Debuff( { 980, 1014, 6217, 11711, 11712, 11713, 27218, 47863, 47864 }, { buffType = "curse", stacking = true, preEvent = "SPELL_CAST_SUCCESS"}, "WARLOCK") -- Curse of Agony
|
||||
Debuff({ 18223, 29539, 46434 }, { buffType = "curse"}, "WARLOCK") -- Curse of Exhaustion
|
||||
Debuff( { 704, 7658, 7659, 11717, 27226 }, { buffType = "curse"}, "WARLOCK") -- Curse of Recklessness
|
||||
Debuff( { 1490, 11721, 11722, 27228 }, { buffType = "curse"}, "WARLOCK") -- Curse of the Elements
|
||||
Debuff( { 16231, 704, 7658, 7659, 11717, 27226 }, { buffType = "curse"}, "WARLOCK") -- Curse of Recklessness
|
||||
Debuff( { 1490, 11721, 11722, 27228, 47865 }, { buffType = "curse"}, "WARLOCK") -- Curse of the Elements
|
||||
Debuff( { 1714, 11719 }, { buffType = "curse"}, "WARLOCK") -- Curse of Tongues
|
||||
Debuff( { 702, 1108, 6205, 7646, 11707, 11708, 27224, 30909 }, { buffType = "curse"}, "WARLOCK") -- Curse of Weakness
|
||||
Debuff( { 603, 30910 }, { buffType = "curse"}, "WARLOCK") -- Curse of Doom
|
||||
Debuff( { 6789, 17925, 17926, 27223 }, { buffType = "magic"}, "WARLOCK") -- Death Coil
|
||||
Debuff( { 702, 1108, 6205, 7646, 11707, 11708, 27224, 30909, 50511 }, { buffType = "curse"}, "WARLOCK") -- Curse of Weakness
|
||||
Debuff( { 603, 30910, 47867 }, { buffType = "curse"}, "WARLOCK") -- Curse of Doom
|
||||
Debuff( { 6789, 17925, 17926, 27223, 47859, 47860 }, { buffType = "magic"}, "WARLOCK") -- Death Coil
|
||||
Debuff( { 5782, 6213, 6215 }, { buffType = "magic"}, "WARLOCK") -- Fear
|
||||
Debuff( { 5484, 17928 }, { buffType = "magic"}, "WARLOCK") -- Howl of Terror
|
||||
Debuff({ 6358 }, { buffType = "magic" }, "WARLOCK") -- Seduction
|
||||
Debuff({ 30108, 30404, 30405 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_START" }, "WARLOCK") -- Unstable Affliction
|
||||
Debuff({ 31117, 43523 }, { buffType = "magic", altName = select(1, GetSpellInfo(30405)) .. " Silence" }, "WARLOCK") -- Unstable Affliction Silence
|
||||
Debuff({ 30108, 30404, 30405, 47841, 47843 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_START" }, "WARLOCK") -- Unstable Affliction
|
||||
Debuff({ 31117, 43523, 65813 }, { buffType = "magic", altName = select(1, GetSpellInfo(30405)) .. " Silence" }, "WARLOCK") -- Unstable Affliction Silence
|
||||
Debuff({ 18093 } ,{ buffType = "physical" }, "WARLOCK") -- Pyroclasm
|
||||
Debuff({ 17877, 18867, 18868, 18869, 18870, 18871, 27263, 30546 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS" }, "WARLOCK") -- Shadowburn Debuff
|
||||
Debuff({ 17877, 18867, 18868, 18869, 18870, 18871, 27263, 30546, 47826, 47827 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS" }, "WARLOCK") -- Shadowburn Debuff
|
||||
Debuff({ 47960, 61291 } ,{ buffType = "magic" }, "WARLOCK") -- Shadowflame dot
|
||||
Debuff({ 63311 } ,{ buffType = "physical" }, "WARLOCK") -- Shadowflame slow
|
||||
Debuff({ 48181, 59161, 59163, 59164 }, { buffType = "magic" }, "WARLOCK") -- Haunt
|
||||
|
||||
|
||||
---------------
|
||||
-- SHAMAN
|
||||
---------------
|
||||
|
||||
Debuff({ 17364 } ,{ buffType = "magic" }, "SHAMAN") -- Stormstrike
|
||||
Debuff({ 8056, 8058, 10472, 10473, 25464 }, { buffType = "magic" }, "SHAMAN") -- Frost Shock
|
||||
Debuff({ 8050, 8052, 8053, 10447, 10448, 29228, 25457 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "SHAMAN") -- Flame Shock
|
||||
Debuff({ 8034, 8037, 10458, 16352, 16353, 25501 }, { buffType = "magic" }, "SHAMAN") -- Frostbrand Attack
|
||||
Debuff({ 8056, 8058, 10472, 10473, 25464, 49235, 49236 }, { buffType = "magic" }, "SHAMAN") -- Frost Shock
|
||||
Debuff({ 8050, 8052, 8053, 10447, 10448, 29228, 25457, 49232, 49233 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "SHAMAN") -- Flame Shock
|
||||
Debuff({ 8034, 8037, 10458, 16352, 16353, 25501, 58797, 58798, 58799 }, { buffType = "magic" }, "SHAMAN") -- Frostbrand Attack
|
||||
Debuff({ 3600 } ,{ buffType = "magic" }, "SHAMAN") -- Earthbind Totem
|
||||
Debuff({ 63685 } ,{ buffType = "magic" }, "SHAMAN") -- Frozen Power
|
||||
|
||||
|
||||
--------------
|
||||
-- PALADIN
|
||||
@@ -143,59 +165,94 @@ Debuff( { 25771 }, { buffType = "immune"}, "PALADIN") -- Forbearance
|
||||
Debuff({ 20066 }, { buffType = "magic" }, "PALADIN") -- Repentance
|
||||
Debuff({ 2878, 5627, 5627 }, { buffType = "magic"}, "PALADIN") -- Turn Undead
|
||||
Debuff({ 21183, 20188, 20300, 20301, 20302, 20303, 27159 }, { }, "PALADIN") -- Judgement of the Crusader
|
||||
Debuff({ 20185, 20344, 20345, 20346 }, { buffType = "magic"}, "PALADIN") -- Judgement of Light
|
||||
Debuff({ 20186, 20354, 20355 }, { buffType = "magic"}, "PALADIN") -- Judgement of Wisdom
|
||||
Debuff({ 20184, 31896}, { buffType = "magic", }, "PALADIN") -- Judgement of Justice
|
||||
Debuff({ 20271, 20185, 20344, 20345, 20346 }, { buffType = "magic"}, "PALADIN") -- Judgement of Light
|
||||
Debuff({ 20186, 20354, 20355, 53408 }, { buffType = "magic"}, "PALADIN") -- Judgement of Wisdom
|
||||
Debuff({ 20184, 31896, 53407}, { buffType = "magic", }, "PALADIN") -- Judgement of Justice
|
||||
Debuff({ 853, 5588, 5589, 10308 }, { buffType = "magic" }, "PALADIN") -- Hammer of Justice
|
||||
Debuff({ 20170 } ,{ buffType = "physical", }, "PALADIN") -- Seal of Justice stun
|
||||
Debuff({ 63529 } ,{ buffType = "magic", }, "PALADIN") -- Shield of the Templar
|
||||
Debuff({ 61840 } ,{ buffType = "magic", }, "PALADIN") -- Righteous Vengeance
|
||||
Debuff({ 10326 }, { buffType = "magic"}, "PALADIN") -- Turn Evil
|
||||
|
||||
|
||||
-------------
|
||||
-- HUNTER
|
||||
-------------
|
||||
|
||||
Debuff( { 19434, 20900, 20901, 20902, 20903, 20904}, { buffType = "physical"}, "HUNTER") -- Aimed Shot
|
||||
Debuff({ 1130, 14323, 14324, 14325 }, { buffType = "magic", }, "HUNTER") -- Hunter's Mark
|
||||
Debuff({ 1978, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 25295, 27016 }, { stacking = true, buffType = "poison", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Serpent Sting
|
||||
Debuff( { 19434, 20900, 20901, 20902, 20903, 20904, 27065, 49049, 49050}, { buffType = "physical"}, "HUNTER") -- Aimed Shot
|
||||
Debuff({ 1130, 14323, 14324, 14325, 53338 }, { buffType = "magic", }, "HUNTER") -- Hunter's Mark
|
||||
Debuff({ 1978, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 25295, 27016, 49000, 49001 }, { stacking = true, buffType = "poison", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Serpent Sting
|
||||
Debuff({ 34490 }, { buffType = "magic" }, "HUNTER") -- Silencing Shot
|
||||
Debuff({ 3043 }, { buffType = "poison", }, "HUNTER") -- Scorpid Sting
|
||||
Debuff({ 3034, 14279, 14280, 27018 }, { buffType = "poison", }, "HUNTER") -- Viper Sting
|
||||
Debuff({ 19386, 24132, 24133, 27068 }, { buffType = "poison", }, "HUNTER") -- Wyvern Sting
|
||||
Debuff({ 24131, 24134, 24135, 27069 }, { buffType = "poison", altName = select(1, GetSpellInfo(19386)) .. " Dot" }, "HUNTER") -- Wyvern Sting Dot
|
||||
Debuff({ 19386, 24132, 24133, 27068, 49011, 49012 }, { buffType = "poison", }, "HUNTER") -- Wyvern Sting
|
||||
Debuff({ 24131, 24134, 24135, 27069, 49009, 49010 }, { buffType = "poison", altName = select(1, GetSpellInfo(19386)) .. " Dot" }, "HUNTER") -- Wyvern Sting Dot
|
||||
Debuff({ 1513, 14326, 14327 }, { buffType = "magic"}, "HUNTER") -- Scare Beast
|
||||
Debuff({ 19229 }, { buffType = "physical", }, "HUNTER") -- Wing Clip Root
|
||||
Debuff({ 19306, 20909, 20910 }, { buffType = "physical"}, "HUNTER") -- Counterattack
|
||||
Debuff({ 13812, 14314, 14315, 27026 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Explosive Trap
|
||||
Debuff({ 19229, 47168 }, { buffType = "physical", }, "HUNTER") -- Wing Clip Root
|
||||
Debuff({ 19306, 20909, 20910, 27067, 48998, 48999 }, { buffType = "physical"}, "HUNTER") -- Counterattack
|
||||
Debuff({ 13812, 14314, 14315, 27026, 49064, 49065 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Explosive Trap
|
||||
Debuff({ 13797, 14298, 14299, 14300, 14301, 27024 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Immolation Trap
|
||||
Debuff({ 3355, 14308, 14309 }, { buffType = "magic" }, "HUNTER") -- Freezing Trap
|
||||
Debuff({ 19503 }, { buffType = "physical" }, "HUNTER") -- Scatter Shot
|
||||
Debuff({ 2974, 14267, 14268 }, { buffType = "physical" }, "HUNTER") -- Wing Clip
|
||||
Debuff({ 2974 }, { buffType = "physical" }, "HUNTER") -- Wing Clip
|
||||
Debuff({ 19229, 47168 }, { buffType = "physical" }, "HUNTER") -- Improved Wing Clip
|
||||
Debuff({ 5116 }, { buffType = "physical" }, "HUNTER") -- Concussive Shot
|
||||
Debuff({ 19410 }, { buffType = "physical" }, "HUNTER") -- Conc Stun
|
||||
Debuff({ 24394 }, { buffType = "physical" }, "HUNTER") -- Intimidation
|
||||
Debuff({ 15571 }, { buffType = "physical" }, "HUNTER") -- Daze from Aspect
|
||||
Debuff({ 19185 }, { buffType = "physical" }, "HUNTER") -- Entrapment
|
||||
Debuff({ 25999 }, { buffType = "physical" }, "HUNTER") -- Boar Charge
|
||||
Debuff({ 24640, 24583, 24586, 24587, 27060 }, { buffType = "poison" }, "HUNTER") -- Scorpid Poison
|
||||
Debuff({ 24640, 24583, 24586, 24587, 27060, 55728 }, { buffType = "poison" }, "HUNTER") -- Scorpid Poison
|
||||
Debuff({ 60053 }, { buffType = "magic" }, "HUNTER") -- Explosive Shot
|
||||
Debuff({ 63468 }, { buffType = "physical" }, "HUNTER") -- Piercing Shots
|
||||
Debuff({ 3674 }, { buffType = "magic" }, "HUNTER") -- Black Arrow
|
||||
Debuff({ 60210 }, { buffType = "magic" }, "HUNTER") -- Freezing Arrow effect
|
||||
|
||||
-------------
|
||||
-- MAGE
|
||||
-------------
|
||||
|
||||
Debuff({ 133, 143, 145, 3140, 8400, 8401, 8402, 10148, 10149, 10150, 10151, 25306, 27070 }, { buffType = "magic"}, "MAGE") -- Fireball
|
||||
Debuff({ 11366, 12505, 12522, 12523, 12524, 12525, 12526, 18809, 27132, 33938 }, { buffType = "magic" }, "MAGE") -- Pyroblast
|
||||
Debuff({ 133, 143, 145, 3140, 8400, 8401, 8402, 10148, 10149, 10150, 10151, 25306, 27070, 38692, 42832, 42833 }, { buffType = "magic"}, "MAGE") -- Fireball
|
||||
Debuff({ 11366, 12505, 12522, 12523, 12524, 12525, 12526, 18809, 27132, 33938, 42890, 42891 }, { buffType = "magic" }, "MAGE") -- Pyroblast
|
||||
Debuff({ 18469 }, { buffType = "magic" }, "MAGE") -- Imp CS Silence
|
||||
Debuff({ 118, 12824, 12825, 12826 }, { buffType = "magic" }, "MAGE") -- Polymorph
|
||||
Debuff({ 118, 12824, 12825, 12826, 61721, 61305, 61780 }, { buffType = "magic" }, "MAGE") -- Polymorph
|
||||
Debuff({ 12355 } , { buffType = "physical" }, "MAGE") -- Impact
|
||||
Debuff({ 12654 }, { buffType = "magic" }, "MAGE") -- Ignite
|
||||
Debuff({ 22959 }, { buffType = "magic" }, "MAGE") -- Fire Vulnerability
|
||||
Debuff({ 12579 }, { buffType = "magic" }, "MAGE") -- Winter's Chill
|
||||
Debuff({ 11113, 13018, 13019, 13020, 13021, 27133, 33933 }, { buffType = "physical" }, "MAGE") -- Blast Wave
|
||||
Debuff({ 11113, 13018, 13019, 13020, 13021, 27133, 33933, 42944, 42945 }, { buffType = "physical" }, "MAGE") -- Blast Wave
|
||||
--Spell({ 2120, 2121, 8422, 8423, 10215, 10216, 27086 }, { stacking = true, buffType = "physical" }) -- Flamestrike
|
||||
Debuff({ 120, 8492, 10159, 10160, 10161, 27087 }, { buffType = "magic" }, "MAGE") -- Cone of Cold
|
||||
Debuff({ 120, 8492, 10159, 10160, 10161, 27087, 42930, 42931 }, { buffType = "magic" }, "MAGE") -- Cone of Cold
|
||||
Debuff({ 12484, 12485, 12486 }, { .5 }) -- Improved Blizzard (Chilled)
|
||||
Debuff({ 6136, 7321, 18101, 20005, 16927, 15850, 31257}, { buffType = "magic" }, "MAGE") -- Frost/Ice Armor (Chilled)
|
||||
Debuff({ 116, 205, 837, 7322, 8406, 8407, 8408, 10179, 10180, 10181, 25304, 27071, 27072, 38697 }, { buffType = "magic" }, "MAGE") -- Frostbolt
|
||||
Debuff({ 116, 205, 837, 7322, 8406, 8407, 8408, 10179, 10180, 10181, 25304, 27071, 27072, 38697, 42841, 42842 }, { buffType = "magic" }, "MAGE") -- Frostbolt
|
||||
Debuff({ 12494 }, { buffType = "magic" }, "MAGE") -- Frostbite
|
||||
Debuff({ 122, 865, 6131, 10230 }, { buffType = "magic" }, "MAGE") -- Frost Nova
|
||||
Debuff({ 122, 865, 6131, 10230, 27088, 42917 }, { buffType = "magic" }, "MAGE") -- Frost Nova
|
||||
Debuff({ 31589 }, { buffType = "magic" }, "MAGE") -- Slow
|
||||
Debuff({ 41425 }, { buffType = "immune" }, "MAGE") -- Hypothermia
|
||||
Debuff({ 41425 }, { buffType = "immune" }, "MAGE") -- Hypothermia
|
||||
Debuff({ 44572 }, { buffType = "magic" }, "MAGE") -- Deep Freeze
|
||||
Debuff({ 55360 }, { buffType = "magic" }, "MAGE") -- Living Bomb
|
||||
Debuff({ 64346 }, { buffType = "magic" }, "MAGE") -- Fiery Payback
|
||||
Debuff({ 44614, 47610 }, { buffType = "magic" }, "MAGE") -- Frostfire Bolt
|
||||
Debuff({ 31661, 33041, 33042, 33043, 42949, 42950 }, { buffType = "magic" }, "MAGE") -- Dragon's Breath
|
||||
Debuff({ 36032 }, { }, "MAGE") -- Arcane Blast
|
||||
Debuff({ 55080 }, { buffType = "magic" }, "MAGE") -- Shattered Barrier
|
||||
|
||||
|
||||
-------------
|
||||
-- Death Knight
|
||||
-------------
|
||||
Debuff({ 55095 }, { buffType = "disease" }, "DEATHKNIGHT") -- Frost Fever
|
||||
Debuff({ 55078 }, { buffType = "disease" }, "DEATHKNIGHT") -- Blood Plague
|
||||
Debuff({ 50510 }, { buffType = "disease" }, "DEATHKNIGHT") -- Crypt Fever
|
||||
Debuff({ 51735 }, { buffType = "disease" }, "DEATHKNIGHT") -- Ebon Plague
|
||||
Debuff({ 50536 }, { buffType = "physical" }, "DEATHKNIGHT") -- Unholy Blight
|
||||
Debuff({ 51209 }, { buffType = "magic" }, "DEATHKNIGHT") -- Hungering Cold
|
||||
Debuff({ 47476 }, { buffType = "magic" }, "DEATHKNIGHT") -- Strangulate
|
||||
Debuff({ 43265, 49936, 49937, 49938 }, { buffType = "physical" }, "DEATHKNIGHT") -- Death and decay
|
||||
Debuff({ 45524 }, { buffType = "magic" }, "DEATHKNIGHT") -- Chains of Ice
|
||||
Debuff({ 66803 }, { buffType = "physical" }, "DEATHKNIGHT") -- Desecration
|
||||
Debuff({ 50436 }, { buffType = "physical" }, "DEATHKNIGHT") -- Icy Clutch
|
||||
Debuff({ 49005 }, { buffType = "physical" }, "DEATHKNIGHT") -- Mark of Blood
|
||||
|
||||
|
||||
|
||||
@@ -9,20 +9,31 @@ LibClassAuras.buffs = {}
|
||||
LibClassAuras.buffToId = {}
|
||||
LibClassAuras.altNames = {}
|
||||
|
||||
LibClassAuras.gameExpansion = ({
|
||||
[WOW_PROJECT_MAINLINE] = "retail",
|
||||
[WOW_PROJECT_CLASSIC] = "classic",
|
||||
[WOW_PROJECT_BURNING_CRUSADE_CLASSIC or 5] = "tbc"
|
||||
})[WOW_PROJECT_ID]
|
||||
|
||||
local function Spell(id, opts, class, spellTable, idTable)
|
||||
if not opts or not class then
|
||||
return
|
||||
end
|
||||
|
||||
local lastRankID
|
||||
local spellName
|
||||
if type(id) == "table" then
|
||||
local clones = id
|
||||
lastRankID = clones[#clones]
|
||||
local realIds = {}
|
||||
for i = 1, #id do
|
||||
if GetSpellInfo(id[i]) then
|
||||
tinsert(realIds, id[i])
|
||||
spellName = GetSpellInfo(id[i])
|
||||
end
|
||||
end
|
||||
id = realIds
|
||||
else
|
||||
lastRankID = id
|
||||
spellName = GetSpellInfo(id)
|
||||
end
|
||||
|
||||
local spellName = GetSpellInfo(lastRankID)
|
||||
|
||||
if not spellName then
|
||||
return
|
||||
end
|
||||
|
||||
@@ -0,0 +1,711 @@
|
||||
--[[
|
||||
This library contains work of Hendrick "nevcairiel" Leppkes
|
||||
https://www.wowace.com/projects/libbuttonglow-1-0
|
||||
]]
|
||||
|
||||
-- luacheck: globals CreateFromMixins ObjectPoolMixin CreateTexturePool CreateFramePool
|
||||
|
||||
local MAJOR_VERSION = "LibCustomGlow-1.0"
|
||||
local MINOR_VERSION = 16
|
||||
if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
|
||||
local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
|
||||
if not lib then return end
|
||||
local Masque = LibStub("Masque", true)
|
||||
|
||||
local isRetail = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
|
||||
local textureList = {
|
||||
empty = [[Interface\AdventureMap\BrokenIsles\AM_29]],
|
||||
white = [[Interface\BUTTONS\WHITE8X8]],
|
||||
shine = [[Interface\ItemSocketingFrame\UI-ItemSockets]]
|
||||
}
|
||||
|
||||
local shineCoords = {0.3984375, 0.4453125, 0.40234375, 0.44921875}
|
||||
if isRetail then
|
||||
textureList.shine = [[Interface\Artifacts\Artifacts]]
|
||||
shineCoords = {0.8115234375,0.9169921875,0.8798828125,0.9853515625}
|
||||
end
|
||||
|
||||
function lib.RegisterTextures(texture,id)
|
||||
textureList[id] = texture
|
||||
end
|
||||
|
||||
lib.glowList = {}
|
||||
lib.startList = {}
|
||||
lib.stopList = {}
|
||||
|
||||
local GlowParent = UIParent
|
||||
|
||||
local GlowMaskPool = CreateFromMixins(ObjectPoolMixin)
|
||||
lib.GlowMaskPool = GlowMaskPool
|
||||
local function MaskPoolFactory(maskPool)
|
||||
return maskPool.parent:CreateMaskTexture()
|
||||
end
|
||||
|
||||
local MaskPoolResetter = function(maskPool,mask)
|
||||
mask:Hide()
|
||||
mask:ClearAllPoints()
|
||||
end
|
||||
|
||||
ObjectPoolMixin.OnLoad(GlowMaskPool,MaskPoolFactory,MaskPoolResetter)
|
||||
GlowMaskPool.parent = GlowParent
|
||||
|
||||
local TexPoolResetter = function(pool,tex)
|
||||
local maskNum = tex:GetNumMaskTextures()
|
||||
for i = maskNum,1 do
|
||||
tex:RemoveMaskTexture(tex:GetMaskTexture(i))
|
||||
end
|
||||
tex:Hide()
|
||||
tex:ClearAllPoints()
|
||||
end
|
||||
local GlowTexPool = CreateTexturePool(GlowParent ,"ARTWORK",7,nil,TexPoolResetter)
|
||||
lib.GlowTexPool = GlowTexPool
|
||||
|
||||
local FramePoolResetter = function(framePool,frame)
|
||||
frame:SetScript("OnUpdate",nil)
|
||||
local parent = frame:GetParent()
|
||||
if parent[frame.name] then
|
||||
parent[frame.name] = nil
|
||||
end
|
||||
if frame.textures then
|
||||
for _, texture in pairs(frame.textures) do
|
||||
GlowTexPool:Release(texture)
|
||||
end
|
||||
end
|
||||
if frame.bg then
|
||||
GlowTexPool:Release(frame.bg)
|
||||
frame.bg = nil
|
||||
end
|
||||
if frame.masks then
|
||||
for _,mask in pairs(frame.masks) do
|
||||
GlowMaskPool:Release(mask)
|
||||
end
|
||||
frame.masks = nil
|
||||
end
|
||||
frame.textures = {}
|
||||
frame.info = {}
|
||||
frame.name = nil
|
||||
frame.timer = nil
|
||||
frame:Hide()
|
||||
frame:ClearAllPoints()
|
||||
end
|
||||
local GlowFramePool = CreateFramePool("Frame",GlowParent,nil,FramePoolResetter)
|
||||
lib.GlowFramePool = GlowFramePool
|
||||
|
||||
local function addFrameAndTex(r,color,name,key,N,xOffset,yOffset,texture,texCoord,desaturated,frameLevel)
|
||||
key = key or ""
|
||||
frameLevel = frameLevel or 8
|
||||
if not r[name..key] then
|
||||
r[name..key] = GlowFramePool:Acquire()
|
||||
r[name..key]:SetParent(r)
|
||||
r[name..key].name = name..key
|
||||
end
|
||||
local f = r[name..key]
|
||||
f:SetFrameLevel(r:GetFrameLevel()+frameLevel)
|
||||
f:SetPoint("TOPLEFT",r,"TOPLEFT",-xOffset+0.05,yOffset+0.05)
|
||||
f:SetPoint("BOTTOMRIGHT",r,"BOTTOMRIGHT",xOffset,-yOffset+0.05)
|
||||
f:Show()
|
||||
|
||||
if not f.textures then
|
||||
f.textures = {}
|
||||
end
|
||||
|
||||
for i=1,N do
|
||||
if not f.textures[i] then
|
||||
f.textures[i] = GlowTexPool:Acquire()
|
||||
f.textures[i]:SetTexture(texture)
|
||||
f.textures[i]:SetTexCoord(texCoord[1],texCoord[2],texCoord[3],texCoord[4])
|
||||
f.textures[i]:SetDesaturated(desaturated)
|
||||
f.textures[i]:SetParent(f)
|
||||
f.textures[i]:SetDrawLayer("ARTWORK",7)
|
||||
if not isRetail and name == "_AutoCastGlow" then
|
||||
f.textures[i]:SetBlendMode("ADD")
|
||||
end
|
||||
end
|
||||
f.textures[i]:SetVertexColor(color[1],color[2],color[3],color[4])
|
||||
f.textures[i]:Show()
|
||||
end
|
||||
while #f.textures>N do
|
||||
GlowTexPool:Release(f.textures[#f.textures])
|
||||
table.remove(f.textures)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Pixel Glow Functions--
|
||||
local pCalc1 = function(progress,s,th,p)
|
||||
local c
|
||||
if progress>p[3] or progress<p[0] then
|
||||
c = 0
|
||||
elseif progress>p[2] then
|
||||
c =s-th-(progress-p[2])/(p[3]-p[2])*(s-th)
|
||||
elseif progress>p[1] then
|
||||
c =s-th
|
||||
else
|
||||
c = (progress-p[0])/(p[1]-p[0])*(s-th)
|
||||
end
|
||||
return math.floor(c+0.5)
|
||||
end
|
||||
|
||||
local pCalc2 = function(progress,s,th,p)
|
||||
local c
|
||||
if progress>p[3] then
|
||||
c = s-th-(progress-p[3])/(p[0]+1-p[3])*(s-th)
|
||||
elseif progress>p[2] then
|
||||
c = s-th
|
||||
elseif progress>p[1] then
|
||||
c = (progress-p[1])/(p[2]-p[1])*(s-th)
|
||||
elseif progress>p[0] then
|
||||
c = 0
|
||||
else
|
||||
c = s-th-(progress+1-p[3])/(p[0]+1-p[3])*(s-th)
|
||||
end
|
||||
return math.floor(c+0.5)
|
||||
end
|
||||
|
||||
local pUpdate = function(self,elapsed)
|
||||
self.timer = self.timer+elapsed/self.info.period
|
||||
if self.timer>1 or self.timer <-1 then
|
||||
self.timer = self.timer%1
|
||||
end
|
||||
local progress = self.timer
|
||||
local width,height = self:GetSize()
|
||||
if width ~= self.info.width or height ~= self.info.height then
|
||||
local perimeter = 2*(width+height)
|
||||
if not (perimeter>0) then
|
||||
return
|
||||
end
|
||||
self.info.width = width
|
||||
self.info.height = height
|
||||
self.info.pTLx = {
|
||||
[0] = (height+self.info.length/2)/perimeter,
|
||||
[1] = (height+width+self.info.length/2)/perimeter,
|
||||
[2] = (2*height+width-self.info.length/2)/perimeter,
|
||||
[3] = 1-self.info.length/2/perimeter
|
||||
}
|
||||
self.info.pTLy ={
|
||||
[0] = (height-self.info.length/2)/perimeter,
|
||||
[1] = (height+width+self.info.length/2)/perimeter,
|
||||
[2] = (height*2+width+self.info.length/2)/perimeter,
|
||||
[3] = 1-self.info.length/2/perimeter
|
||||
}
|
||||
self.info.pBRx ={
|
||||
[0] = self.info.length/2/perimeter,
|
||||
[1] = (height-self.info.length/2)/perimeter,
|
||||
[2] = (height+width-self.info.length/2)/perimeter,
|
||||
[3] = (height*2+width+self.info.length/2)/perimeter
|
||||
}
|
||||
self.info.pBRy ={
|
||||
[0] = self.info.length/2/perimeter,
|
||||
[1] = (height+self.info.length/2)/perimeter,
|
||||
[2] = (height+width-self.info.length/2)/perimeter,
|
||||
[3] = (height*2+width-self.info.length/2)/perimeter
|
||||
}
|
||||
end
|
||||
if self:IsShown() then
|
||||
if not (self.masks[1]:IsShown()) then
|
||||
self.masks[1]:Show()
|
||||
self.masks[1]:SetPoint("TOPLEFT",self,"TOPLEFT",self.info.th,-self.info.th)
|
||||
self.masks[1]:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",-self.info.th,self.info.th)
|
||||
end
|
||||
if self.masks[2] and not(self.masks[2]:IsShown()) then
|
||||
self.masks[2]:Show()
|
||||
self.masks[2]:SetPoint("TOPLEFT",self,"TOPLEFT",self.info.th+1,-self.info.th-1)
|
||||
self.masks[2]:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",-self.info.th-1,self.info.th+1)
|
||||
end
|
||||
if self.bg and not(self.bg:IsShown()) then
|
||||
self.bg:Show()
|
||||
end
|
||||
for k,line in pairs(self.textures) do
|
||||
line:SetPoint("TOPLEFT",self,"TOPLEFT",pCalc1((progress+self.info.step*(k-1))%1,width,self.info.th,self.info.pTLx),-pCalc2((progress+self.info.step*(k-1))%1,height,self.info.th,self.info.pTLy))
|
||||
line:SetPoint("BOTTOMRIGHT",self,"TOPLEFT",self.info.th+pCalc2((progress+self.info.step*(k-1))%1,width,self.info.th,self.info.pBRx),-height+pCalc1((progress+self.info.step*(k-1))%1,height,self.info.th,self.info.pBRy))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lib.PixelGlow_Start(r,color,N,frequency,length,th,xOffset,yOffset,border,key,frameLevel)
|
||||
if not r then
|
||||
return
|
||||
end
|
||||
if not color then
|
||||
color = {0.95,0.95,0.32,1}
|
||||
end
|
||||
|
||||
if not(N and N>0) then
|
||||
N = 8
|
||||
end
|
||||
|
||||
local period
|
||||
if frequency then
|
||||
if not(frequency>0 or frequency<0) then
|
||||
period = 4
|
||||
else
|
||||
period = 1/frequency
|
||||
end
|
||||
else
|
||||
period = 4
|
||||
end
|
||||
local width,height = r:GetSize()
|
||||
length = length or math.floor((width+height)*(2/N-0.1))
|
||||
length = min(length,min(width,height))
|
||||
th = th or 1
|
||||
xOffset = xOffset or 0
|
||||
yOffset = yOffset or 0
|
||||
key = key or ""
|
||||
|
||||
addFrameAndTex(r,color,"_PixelGlow",key,N,xOffset,yOffset,textureList.white,{0,1,0,1},nil,frameLevel)
|
||||
local f = r["_PixelGlow"..key]
|
||||
if not f.masks then
|
||||
f.masks = {}
|
||||
end
|
||||
if not f.masks[1] then
|
||||
f.masks[1] = GlowMaskPool:Acquire()
|
||||
f.masks[1]:SetTexture(textureList.empty, "CLAMPTOWHITE","CLAMPTOWHITE")
|
||||
f.masks[1]:Show()
|
||||
end
|
||||
f.masks[1]:SetPoint("TOPLEFT",f,"TOPLEFT",th,-th)
|
||||
f.masks[1]:SetPoint("BOTTOMRIGHT",f,"BOTTOMRIGHT",-th,th)
|
||||
|
||||
if not(border==false) then
|
||||
if not f.masks[2] then
|
||||
f.masks[2] = GlowMaskPool:Acquire()
|
||||
f.masks[2]:SetTexture(textureList.empty, "CLAMPTOWHITE","CLAMPTOWHITE")
|
||||
end
|
||||
f.masks[2]:SetPoint("TOPLEFT",f,"TOPLEFT",th+1,-th-1)
|
||||
f.masks[2]:SetPoint("BOTTOMRIGHT",f,"BOTTOMRIGHT",-th-1,th+1)
|
||||
|
||||
if not f.bg then
|
||||
f.bg = GlowTexPool:Acquire()
|
||||
f.bg:SetColorTexture(0.1,0.1,0.1,0.8)
|
||||
f.bg:SetParent(f)
|
||||
f.bg:SetAllPoints(f)
|
||||
f.bg:SetDrawLayer("ARTWORK",6)
|
||||
f.bg:AddMaskTexture(f.masks[2])
|
||||
end
|
||||
else
|
||||
if f.bg then
|
||||
GlowTexPool:Release(f.bg)
|
||||
f.bg = nil
|
||||
end
|
||||
if f.masks[2] then
|
||||
GlowMaskPool:Release(f.masks[2])
|
||||
f.masks[2] = nil
|
||||
end
|
||||
end
|
||||
for _,tex in pairs(f.textures) do
|
||||
if tex:GetNumMaskTextures() < 1 then
|
||||
tex:AddMaskTexture(f.masks[1])
|
||||
end
|
||||
end
|
||||
f.timer = f.timer or 0
|
||||
f.info = f.info or {}
|
||||
f.info.step = 1/N
|
||||
f.info.period = period
|
||||
f.info.th = th
|
||||
if f.info.length ~= length then
|
||||
f.info.width = nil
|
||||
f.info.length = length
|
||||
end
|
||||
pUpdate(f, 0)
|
||||
f:SetScript("OnUpdate",pUpdate)
|
||||
end
|
||||
|
||||
function lib.PixelGlow_Stop(r,key)
|
||||
if not r then
|
||||
return
|
||||
end
|
||||
key = key or ""
|
||||
if not r["_PixelGlow"..key] then
|
||||
return false
|
||||
else
|
||||
GlowFramePool:Release(r["_PixelGlow"..key])
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(lib.glowList, "Pixel Glow")
|
||||
lib.startList["Pixel Glow"] = lib.PixelGlow_Start
|
||||
lib.stopList["Pixel Glow"] = lib.PixelGlow_Stop
|
||||
|
||||
|
||||
--Autocast Glow Funcitons--
|
||||
local function acUpdate(self,elapsed)
|
||||
local width,height = self:GetSize()
|
||||
if width ~= self.info.width or height ~= self.info.height then
|
||||
if width*height == 0 then return end -- Avoid division by zero
|
||||
self.info.width = width
|
||||
self.info.height = height
|
||||
self.info.perimeter = 2*(width+height)
|
||||
self.info.bottomlim = height*2+width
|
||||
self.info.rightlim = height+width
|
||||
self.info.space = self.info.perimeter/self.info.N
|
||||
end
|
||||
|
||||
local texIndex = 0;
|
||||
for k=1,4 do
|
||||
self.timer[k] = self.timer[k]+elapsed/(self.info.period*k)
|
||||
if self.timer[k] > 1 or self.timer[k] <-1 then
|
||||
self.timer[k] = self.timer[k]%1
|
||||
end
|
||||
for i = 1,self.info.N do
|
||||
texIndex = texIndex+1
|
||||
local position = (self.info.space*i+self.info.perimeter*self.timer[k])%self.info.perimeter
|
||||
if position>self.info.bottomlim then
|
||||
self.textures[texIndex]: SetPoint("CENTER",self,"BOTTOMRIGHT",-position+self.info.bottomlim,0)
|
||||
elseif position>self.info.rightlim then
|
||||
self.textures[texIndex]: SetPoint("CENTER",self,"TOPRIGHT",0,-position+self.info.rightlim)
|
||||
elseif position>self.info.height then
|
||||
self.textures[texIndex]: SetPoint("CENTER",self,"TOPLEFT",position-self.info.height,0)
|
||||
else
|
||||
self.textures[texIndex]: SetPoint("CENTER",self,"BOTTOMLEFT",0,position)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lib.AutoCastGlow_Start(r,color,N,frequency,scale,xOffset,yOffset,key,frameLevel)
|
||||
if not r then
|
||||
return
|
||||
end
|
||||
|
||||
if not color then
|
||||
color = {0.95,0.95,0.32,1}
|
||||
end
|
||||
|
||||
if not(N and N>0) then
|
||||
N = 4
|
||||
end
|
||||
|
||||
local period
|
||||
if frequency then
|
||||
if not(frequency>0 or frequency<0) then
|
||||
period = 8
|
||||
else
|
||||
period = 1/frequency
|
||||
end
|
||||
else
|
||||
period = 8
|
||||
end
|
||||
scale = scale or 1
|
||||
xOffset = xOffset or 0
|
||||
yOffset = yOffset or 0
|
||||
key = key or ""
|
||||
|
||||
addFrameAndTex(r,color,"_AutoCastGlow",key,N*4,xOffset,yOffset,textureList.shine,shineCoords, true, frameLevel)
|
||||
local f = r["_AutoCastGlow"..key]
|
||||
local sizes = {7,6,5,4}
|
||||
for k,size in pairs(sizes) do
|
||||
for i = 1,N do
|
||||
f.textures[i+N*(k-1)]:SetSize(size*scale,size*scale)
|
||||
end
|
||||
end
|
||||
f.timer = f.timer or {0,0,0,0}
|
||||
f.info = f.info or {}
|
||||
f.info.N = N
|
||||
f.info.period = period
|
||||
f:SetScript("OnUpdate",acUpdate)
|
||||
end
|
||||
|
||||
function lib.AutoCastGlow_Stop(r,key)
|
||||
if not r then
|
||||
return
|
||||
end
|
||||
|
||||
key = key or ""
|
||||
if not r["_AutoCastGlow"..key] then
|
||||
return false
|
||||
else
|
||||
GlowFramePool:Release(r["_AutoCastGlow"..key])
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(lib.glowList, "Autocast Shine")
|
||||
lib.startList["Autocast Shine"] = lib.AutoCastGlow_Start
|
||||
lib.stopList["Autocast Shine"] = lib.AutoCastGlow_Stop
|
||||
|
||||
--Action Button Glow--
|
||||
local function ButtonGlowResetter(framePool,frame)
|
||||
frame:SetScript("OnUpdate",nil)
|
||||
local parent = frame:GetParent()
|
||||
if parent._ButtonGlow then
|
||||
parent._ButtonGlow = nil
|
||||
end
|
||||
frame:Hide()
|
||||
frame:ClearAllPoints()
|
||||
end
|
||||
local ButtonGlowPool = CreateFramePool("Frame",GlowParent,nil,ButtonGlowResetter)
|
||||
lib.ButtonGlowPool = ButtonGlowPool
|
||||
|
||||
local function CreateScaleAnim(group, target, order, duration, x, y, delay)
|
||||
local scale = group:CreateAnimation("Scale")
|
||||
scale:SetChildKey(target)
|
||||
scale:SetOrder(order)
|
||||
scale:SetDuration(duration)
|
||||
scale:SetScale(x, y)
|
||||
|
||||
if delay then
|
||||
scale:SetStartDelay(delay)
|
||||
end
|
||||
end
|
||||
|
||||
local function CreateAlphaAnim(group, target, order, duration, fromAlpha, toAlpha, delay, appear)
|
||||
local alpha = group:CreateAnimation("Alpha")
|
||||
alpha:SetChildKey(target)
|
||||
alpha:SetOrder(order)
|
||||
alpha:SetDuration(duration)
|
||||
alpha:SetFromAlpha(fromAlpha)
|
||||
alpha:SetToAlpha(toAlpha)
|
||||
if delay then
|
||||
alpha:SetStartDelay(delay)
|
||||
end
|
||||
if appear then
|
||||
table.insert(group.appear, alpha)
|
||||
else
|
||||
table.insert(group.fade, alpha)
|
||||
end
|
||||
end
|
||||
|
||||
local function AnimIn_OnPlay(group)
|
||||
local frame = group:GetParent()
|
||||
local frameWidth, frameHeight = frame:GetSize()
|
||||
frame.spark:SetSize(frameWidth, frameHeight)
|
||||
frame.spark:SetAlpha(not(frame.color) and 1.0 or 0.3*frame.color[4])
|
||||
frame.innerGlow:SetSize(frameWidth / 2, frameHeight / 2)
|
||||
frame.innerGlow:SetAlpha(not(frame.color) and 1.0 or frame.color[4])
|
||||
frame.innerGlowOver:SetAlpha(not(frame.color) and 1.0 or frame.color[4])
|
||||
frame.outerGlow:SetSize(frameWidth * 2, frameHeight * 2)
|
||||
frame.outerGlow:SetAlpha(not(frame.color) and 1.0 or frame.color[4])
|
||||
frame.outerGlowOver:SetAlpha(not(frame.color) and 1.0 or frame.color[4])
|
||||
frame.ants:SetSize(frameWidth * 0.85, frameHeight * 0.85)
|
||||
frame.ants:SetAlpha(0)
|
||||
frame:Show()
|
||||
end
|
||||
|
||||
local function AnimIn_OnFinished(group)
|
||||
local frame = group:GetParent()
|
||||
local frameWidth, frameHeight = frame:GetSize()
|
||||
frame.spark:SetAlpha(0)
|
||||
frame.innerGlow:SetAlpha(0)
|
||||
frame.innerGlow:SetSize(frameWidth, frameHeight)
|
||||
frame.innerGlowOver:SetAlpha(0.0)
|
||||
frame.outerGlow:SetSize(frameWidth, frameHeight)
|
||||
frame.outerGlowOver:SetAlpha(0.0)
|
||||
frame.outerGlowOver:SetSize(frameWidth, frameHeight)
|
||||
frame.ants:SetAlpha(not(frame.color) and 1.0 or frame.color[4])
|
||||
end
|
||||
|
||||
local function AnimIn_OnStop(group)
|
||||
local frame = group:GetParent()
|
||||
local frameWidth, frameHeight = frame:GetSize()
|
||||
frame.spark:SetAlpha(0)
|
||||
frame.innerGlow:SetAlpha(0)
|
||||
frame.innerGlowOver:SetAlpha(0.0)
|
||||
frame.outerGlowOver:SetAlpha(0.0)
|
||||
end
|
||||
|
||||
local function bgHide(self)
|
||||
if self.animOut:IsPlaying() then
|
||||
self.animOut:Stop()
|
||||
ButtonGlowPool:Release(self)
|
||||
end
|
||||
end
|
||||
|
||||
local function bgUpdate(self, elapsed)
|
||||
AnimateTexCoords(self.ants, 256, 256, 48, 48, 22, elapsed, self.throttle);
|
||||
local cooldown = self:GetParent().cooldown;
|
||||
if(cooldown and cooldown:IsShown() and cooldown:GetCooldownDuration() > 3000) then
|
||||
self:SetAlpha(0.5);
|
||||
else
|
||||
self:SetAlpha(1.0);
|
||||
end
|
||||
end
|
||||
|
||||
local function configureButtonGlow(f,alpha)
|
||||
f.spark = f:CreateTexture(nil, "BACKGROUND")
|
||||
f.spark:SetPoint("CENTER")
|
||||
f.spark:SetAlpha(0)
|
||||
f.spark:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
|
||||
f.spark:SetTexCoord(0.00781250, 0.61718750, 0.00390625, 0.26953125)
|
||||
|
||||
-- inner glow
|
||||
f.innerGlow = f:CreateTexture(nil, "ARTWORK")
|
||||
f.innerGlow:SetPoint("CENTER")
|
||||
f.innerGlow:SetAlpha(0)
|
||||
f.innerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
|
||||
f.innerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375)
|
||||
|
||||
-- inner glow over
|
||||
f.innerGlowOver = f:CreateTexture(nil, "ARTWORK")
|
||||
f.innerGlowOver:SetPoint("TOPLEFT", f.innerGlow, "TOPLEFT")
|
||||
f.innerGlowOver:SetPoint("BOTTOMRIGHT", f.innerGlow, "BOTTOMRIGHT")
|
||||
f.innerGlowOver:SetAlpha(0)
|
||||
f.innerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
|
||||
f.innerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625)
|
||||
|
||||
-- outer glow
|
||||
f.outerGlow = f:CreateTexture(nil, "ARTWORK")
|
||||
f.outerGlow:SetPoint("CENTER")
|
||||
f.outerGlow:SetAlpha(0)
|
||||
f.outerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
|
||||
f.outerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375)
|
||||
|
||||
-- outer glow over
|
||||
f.outerGlowOver = f:CreateTexture(nil, "ARTWORK")
|
||||
f.outerGlowOver:SetPoint("TOPLEFT", f.outerGlow, "TOPLEFT")
|
||||
f.outerGlowOver:SetPoint("BOTTOMRIGHT", f.outerGlow, "BOTTOMRIGHT")
|
||||
f.outerGlowOver:SetAlpha(0)
|
||||
f.outerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
|
||||
f.outerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625)
|
||||
|
||||
-- ants
|
||||
f.ants = f:CreateTexture(nil, "OVERLAY")
|
||||
f.ants:SetPoint("CENTER")
|
||||
f.ants:SetAlpha(0)
|
||||
f.ants:SetTexture([[Interface\SpellActivationOverlay\IconAlertAnts]])
|
||||
|
||||
f.animIn = f:CreateAnimationGroup()
|
||||
f.animIn.appear = {}
|
||||
f.animIn.fade = {}
|
||||
CreateScaleAnim(f.animIn, "spark", 1, 0.2, 1.5, 1.5)
|
||||
CreateAlphaAnim(f.animIn, "spark", 1, 0.2, 0, alpha, nil, true)
|
||||
CreateScaleAnim(f.animIn, "innerGlow", 1, 0.3, 2, 2)
|
||||
CreateScaleAnim(f.animIn, "innerGlowOver", 1, 0.3, 2, 2)
|
||||
CreateAlphaAnim(f.animIn, "innerGlowOver", 1, 0.3, alpha, 0, nil, false)
|
||||
CreateScaleAnim(f.animIn, "outerGlow", 1, 0.3, 0.5, 0.5)
|
||||
CreateScaleAnim(f.animIn, "outerGlowOver", 1, 0.3, 0.5, 0.5)
|
||||
CreateAlphaAnim(f.animIn, "outerGlowOver", 1, 0.3, alpha, 0, nil, false)
|
||||
CreateScaleAnim(f.animIn, "spark", 1, 0.2, 2/3, 2/3, 0.2)
|
||||
CreateAlphaAnim(f.animIn, "spark", 1, 0.2, alpha, 0, 0.2, false)
|
||||
CreateAlphaAnim(f.animIn, "innerGlow", 1, 0.2, alpha, 0, 0.3, false)
|
||||
CreateAlphaAnim(f.animIn, "ants", 1, 0.2, 0, alpha, 0.3, true)
|
||||
f.animIn:SetScript("OnPlay", AnimIn_OnPlay)
|
||||
f.animIn:SetScript("OnStop", AnimIn_OnStop)
|
||||
f.animIn:SetScript("OnFinished", AnimIn_OnFinished)
|
||||
|
||||
f.animOut = f:CreateAnimationGroup()
|
||||
f.animOut.appear = {}
|
||||
f.animOut.fade = {}
|
||||
CreateAlphaAnim(f.animOut, "outerGlowOver", 1, 0.2, 0, alpha, nil, true)
|
||||
CreateAlphaAnim(f.animOut, "ants", 1, 0.2, alpha, 0, nil, false)
|
||||
CreateAlphaAnim(f.animOut, "outerGlowOver", 2, 0.2, alpha, 0, nil, false)
|
||||
CreateAlphaAnim(f.animOut, "outerGlow", 2, 0.2, alpha, 0, nil, false)
|
||||
f.animOut:SetScript("OnFinished", function(self) ButtonGlowPool:Release(self:GetParent()) end)
|
||||
|
||||
f:SetScript("OnHide", bgHide)
|
||||
end
|
||||
|
||||
local function updateAlphaAnim(f,alpha)
|
||||
for _,anim in pairs(f.animIn.appear) do
|
||||
anim:SetToAlpha(alpha)
|
||||
end
|
||||
for _,anim in pairs(f.animIn.fade) do
|
||||
anim:SetFromAlpha(alpha)
|
||||
end
|
||||
for _,anim in pairs(f.animOut.appear) do
|
||||
anim:SetToAlpha(alpha)
|
||||
end
|
||||
for _,anim in pairs(f.animOut.fade) do
|
||||
anim:SetFromAlpha(alpha)
|
||||
end
|
||||
end
|
||||
|
||||
local ButtonGlowTextures = {["spark"] = true,["innerGlow"] = true,["innerGlowOver"] = true,["outerGlow"] = true,["outerGlowOver"] = true,["ants"] = true}
|
||||
|
||||
function lib.ButtonGlow_Start(r,color,frequency,frameLevel)
|
||||
if not r then
|
||||
return
|
||||
end
|
||||
frameLevel = frameLevel or 8;
|
||||
local throttle
|
||||
if frequency and frequency > 0 then
|
||||
throttle = 0.25/frequency*0.01
|
||||
else
|
||||
throttle = 0.01
|
||||
end
|
||||
if r._ButtonGlow then
|
||||
local f = r._ButtonGlow
|
||||
local width,height = r:GetSize()
|
||||
f:SetFrameLevel(r:GetFrameLevel()+frameLevel)
|
||||
f:SetSize(width*1.4 , height*1.4)
|
||||
f:SetPoint("TOPLEFT", r, "TOPLEFT", -width * 0.2, height * 0.2)
|
||||
f:SetPoint("BOTTOMRIGHT", r, "BOTTOMRIGHT", width * 0.2, -height * 0.2)
|
||||
f.ants:SetSize(width*1.4*0.85, height*1.4*0.85)
|
||||
AnimIn_OnFinished(f.animIn)
|
||||
if f.animOut:IsPlaying() then
|
||||
f.animOut:Stop()
|
||||
f.animIn:Play()
|
||||
end
|
||||
|
||||
if not(color) then
|
||||
for texture in pairs(ButtonGlowTextures) do
|
||||
f[texture]:SetDesaturated(nil)
|
||||
f[texture]:SetVertexColor(1,1,1)
|
||||
f[texture]:SetAlpha(f[texture]:GetAlpha()/(f.color and f.color[4] or 1))
|
||||
updateAlphaAnim(f, 1)
|
||||
end
|
||||
f.color = false
|
||||
else
|
||||
for texture in pairs(ButtonGlowTextures) do
|
||||
f[texture]:SetDesaturated(1)
|
||||
f[texture]:SetVertexColor(color[1],color[2],color[3])
|
||||
f[texture]:SetAlpha(f[texture]:GetAlpha()/(f.color and f.color[4] or 1)*color[4])
|
||||
updateAlphaAnim(f,color and color[4] or 1)
|
||||
end
|
||||
f.color = color
|
||||
end
|
||||
f.throttle = throttle
|
||||
else
|
||||
local f, new = ButtonGlowPool:Acquire()
|
||||
if new then
|
||||
configureButtonGlow(f,color and color[4] or 1)
|
||||
else
|
||||
updateAlphaAnim(f,color and color[4] or 1)
|
||||
end
|
||||
r._ButtonGlow = f
|
||||
local width,height = r:GetSize()
|
||||
f:SetParent(r)
|
||||
f:SetFrameLevel(r:GetFrameLevel()+frameLevel)
|
||||
f:SetSize(width * 1.4, height * 1.4)
|
||||
f:SetPoint("TOPLEFT", r, "TOPLEFT", -width * 0.2, height * 0.2)
|
||||
f:SetPoint("BOTTOMRIGHT", r, "BOTTOMRIGHT", width * 0.2, -height * 0.2)
|
||||
if not(color) then
|
||||
f.color = false
|
||||
for texture in pairs(ButtonGlowTextures) do
|
||||
f[texture]:SetDesaturated(nil)
|
||||
f[texture]:SetVertexColor(1,1,1)
|
||||
end
|
||||
else
|
||||
f.color = color
|
||||
for texture in pairs(ButtonGlowTextures) do
|
||||
f[texture]:SetDesaturated(1)
|
||||
f[texture]:SetVertexColor(color[1],color[2],color[3])
|
||||
end
|
||||
end
|
||||
f.throttle = throttle
|
||||
f:SetScript("OnUpdate", bgUpdate)
|
||||
|
||||
f.animIn:Play()
|
||||
|
||||
if Masque and Masque.UpdateSpellAlert and (not r.overlay or not issecurevariable(r, "overlay")) then
|
||||
local old_overlay = r.overlay
|
||||
r.overlay = f
|
||||
Masque:UpdateSpellAlert(r)
|
||||
r.overlay = old_overlay
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lib.ButtonGlow_Stop(r)
|
||||
if r._ButtonGlow then
|
||||
if r._ButtonGlow.animIn:IsPlaying() then
|
||||
r._ButtonGlow.animIn:Stop()
|
||||
ButtonGlowPool:Release(r._ButtonGlow)
|
||||
elseif r:IsVisible() then
|
||||
r._ButtonGlow.animOut:Play()
|
||||
else
|
||||
ButtonGlowPool:Release(r._ButtonGlow)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(lib.glowList, "Action Button Glow")
|
||||
lib.startList["Action Button Glow"] = lib.ButtonGlow_Start
|
||||
lib.stopList["Action Button Glow"] = lib.ButtonGlow_Stop
|
||||
@@ -0,0 +1,12 @@
|
||||
## Interface: 80200
|
||||
## Title: Lib: CustomGlow
|
||||
## Notes: Creates custom glow functions
|
||||
## Author: deezo
|
||||
## X-Category: Library
|
||||
## X-License: BSD
|
||||
## Version: f15e6de
|
||||
## OptionalDeps: Masque
|
||||
|
||||
LibStub\LibStub.lua
|
||||
|
||||
LibCustomGlow-1.0.xml
|
||||
@@ -1,4 +1,4 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
<Script file="DRData-1.0.lua"/>
|
||||
<Script file = "LibCustomGlow-1.0.lua"/>
|
||||
</Ui>
|
||||
@@ -0,0 +1,51 @@
|
||||
Adds functions:
|
||||
|
||||
`PixelGlow_Start(frame[, color[, N[, frequency[, length[, th[, xOffset[, yOffset[, border[ ,key]]]]]]]])`
|
||||
|
||||
Starts glow over target frame with set parameters:
|
||||
|
||||
- frame - target frame to set glowing;
|
||||
- color - {r,g,b,a}, color of lines and opacity, from 0 to 1. Defaul value is {0.95, 0.95, 0.32, 1};
|
||||
- N - number of lines. Defaul value is 8;
|
||||
- frequency - frequency, set to negative to inverse direction of rotation. Default value is 0.25;
|
||||
- length - length of lines. Default value depends on region size and number of lines;
|
||||
- th - thickness of lines. Default value is 2;
|
||||
- xOffset,yOffset - offset of glow relative to region border;
|
||||
- border - set to true to create border under lines;
|
||||
- key - key of glow, allows for multiple glows on one frame;
|
||||
|
||||
`PixelGlow_Stop(frame[, key])`
|
||||
|
||||
Stops glow with set key over target frame
|
||||
|
||||
`AutoCastGlow_Start(frame[, color[, N[, frequency[, scale[, xOffset[, yOffset[, key]]]]]]])`
|
||||
|
||||
Starts glow over target frame with set parameters:
|
||||
|
||||
- frame - target frame to set glowing;
|
||||
- color - {r,g,b,a}, color of particles and opacity, from 0 to 1. Defaul value is {0.95, 0.95, 0.32, 1};
|
||||
- N - number of particle groups. Each group contains 4 particles. Defaul value is 4;
|
||||
- frequency - frequency, set to negative to inverse direction of rotation. Default value is 0.125;
|
||||
- scale - scale of particles;
|
||||
- xOffset,yOffset - offset of glow relative to region border;
|
||||
- key - key of glow, allows for multiple glows on one frame;
|
||||
|
||||
`AutoCastGlow_Stop(frame[, key])`
|
||||
|
||||
Stops glow with set key over target frame
|
||||
|
||||
|
||||
Blizzard glow is based heavily on https://www.wowace.com/projects/libbuttonglow-1-0
|
||||
|
||||
`ButtonGlow_Start(frame[, color[, frequency]]])`
|
||||
|
||||
Starts glow over target frame with set parameters:
|
||||
|
||||
- frame - target frame to set glowing;
|
||||
- color - {r,g,b,a}, color of particles and opacity, from 0 to 1. Defaul value is {0.95, 0.95, 0.32, 1};
|
||||
- frequency - frequency. Default value is 0.125;
|
||||
- frameLevel - frameLevel. Default value is 8;
|
||||
|
||||
`ButtonGlow_Stop(frame)`
|
||||
|
||||
Stops glow over target frame
|
||||
+49
-38
@@ -16,7 +16,7 @@ local UnitName = UnitName
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local Announcements = Gladdy:NewModule("Announcements", nil, {
|
||||
local Announcements = Gladdy:NewModule("Announcements", 101, {
|
||||
announcements = {
|
||||
drinks = true,
|
||||
resurrections = true,
|
||||
@@ -42,18 +42,20 @@ function Announcements:Initialize()
|
||||
[GetSpellInfo(20777)] = true,
|
||||
}
|
||||
|
||||
self:RegisterMessage("CAST_START")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self:RegisterMessage("UNIT_HEALTH")
|
||||
self:RegisterMessage("TRINKET_USED")
|
||||
self:RegisterMessage("TRINKET_READY")
|
||||
self:RegisterMessage("SHADOWSIGHT")
|
||||
self:RegisterMessage("SPELL_INTERRUPT")
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
end
|
||||
|
||||
function Announcements:Reset()
|
||||
self:UnregisterAllMessages()
|
||||
self:UnregisterMessages(
|
||||
"CAST_START",
|
||||
"ENEMY_SPOTTED",
|
||||
"UNIT_SPEC",
|
||||
"AURA_GAIN",
|
||||
"UNIT_HEALTH",
|
||||
"TRINKET_USED",
|
||||
"TRINKET_READY",
|
||||
"SHADOWSIGHT",
|
||||
"SPELL_INTERRUPT")
|
||||
self.enemy = {}
|
||||
self.throttled = {}
|
||||
end
|
||||
@@ -63,17 +65,25 @@ function Announcements:Test(unit)
|
||||
if (not button) then
|
||||
return
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
self:UNIT_SPEC(unit, button.testSpec)
|
||||
elseif (unit == "arena2") then
|
||||
self:CheckDrink(unit, self.DRINK_AURA)
|
||||
elseif (unit == "arena3") then
|
||||
self:UNIT_HEALTH(unit, button.health, button.healthMax)
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
self:JOINED_ARENA()
|
||||
if unit == "arena1" then
|
||||
self:AURA_GAIN(unit, nil, nil, self.DRINK_AURA)
|
||||
end
|
||||
end
|
||||
|
||||
function Announcements:JOINED_ARENA()
|
||||
self:RegisterMessages(
|
||||
"CAST_START",
|
||||
"ENEMY_SPOTTED",
|
||||
"UNIT_SPEC",
|
||||
"AURA_GAIN",
|
||||
"UNIT_HEALTH",
|
||||
"TRINKET_USED",
|
||||
"TRINKET_READY",
|
||||
"SHADOWSIGHT",
|
||||
"SPELL_INTERRUPT")
|
||||
end
|
||||
|
||||
function Announcements:CAST_START(unit, spell)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button or not Gladdy.db.announcements.resurrections) then
|
||||
@@ -81,7 +91,7 @@ function Announcements:CAST_START(unit, spell)
|
||||
end
|
||||
|
||||
if (self.RES_SPELLS[spell]) then
|
||||
self:Send(L["RESURRECTING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["RESURRECTING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -95,7 +105,7 @@ function Announcements:ENEMY_SPOTTED(unit)
|
||||
if button.name == "Unknown" then
|
||||
button.name = UnitName(unit)
|
||||
end
|
||||
self:Send("ENEMY SPOTTED:" .. ("%s (%s)"):format(button.name, button.classLoc), 0, RAID_CLASS_COLORS[button.class])
|
||||
self:Send("ENEMY SPOTTED:" .. ("%s (%s)"):format(button.name, button.classLoc), 0, RAID_CLASS_COLORS[button.class], unit)
|
||||
self.enemy[unit] = true
|
||||
end
|
||||
end
|
||||
@@ -108,7 +118,7 @@ function Announcements:UNIT_SPEC(unit, spec)
|
||||
if button.name == "Unknown" then
|
||||
button.name = UnitName(unit)
|
||||
end
|
||||
self:Send(L["SPEC DETECTED: %s - %s (%s)"]:format(button.name, spec, button.classLoc), 0, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["SPEC DETECTED: %s - %s (%s)"]:format(button.name, spec, button.classLoc), 1, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
|
||||
function Announcements:UNIT_HEALTH(unit, health, healthMax)
|
||||
@@ -119,7 +129,7 @@ function Announcements:UNIT_HEALTH(unit, health, healthMax)
|
||||
|
||||
local healthPercent = floor(health * 100 / healthMax)
|
||||
if (healthPercent < Gladdy.db.announcements.healthThreshold) then
|
||||
self:Send(L["LOW HEALTH: %s (%s)"]:format(button.name, button.classLoc), 10, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["LOW HEALTH: %s (%s)"]:format(button.name, button.classLoc), 10, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -129,7 +139,7 @@ function Announcements:TRINKET_USED(unit)
|
||||
return
|
||||
end
|
||||
|
||||
self:Send(L["TRINKET USED: %s (%s)"]:format(button.name, button.classLoc), 0, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["TRINKET USED: %s (%s)"]:format(button.name, button.classLoc), 1, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
|
||||
function Announcements:TRINKET_READY(unit)
|
||||
@@ -138,25 +148,25 @@ function Announcements:TRINKET_READY(unit)
|
||||
return
|
||||
end
|
||||
|
||||
self:Send(L["TRINKET READY: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["TRINKET READY: %s (%s)"]:format(button.name, button.classLoc), 1, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
|
||||
function Announcements:SPELL_INTERRUPT(destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||
local button = Gladdy.buttons[destUnit]
|
||||
function Announcements:SPELL_INTERRUPT(unit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button or not Gladdy.db.announcements.spellInterrupt) then
|
||||
return
|
||||
end
|
||||
self:Send(L["INTERRUPTED: %s (%s)"]:format(extraSpellName, button.name or ""), nil, RAID_CLASS_COLORS[button.class])
|
||||
self:Send(L["INTERRUPTED: %s (%s)"]:format(extraSpellName, button.name or ""), nil, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
|
||||
function Announcements:CheckDrink(unit, aura)
|
||||
function Announcements:AURA_GAIN(unit, auraType, spellID, spellName)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button or not Gladdy.db.announcements.drinks) then
|
||||
return
|
||||
end
|
||||
|
||||
if (aura == self.DRINK_AURA) then
|
||||
self:Send(L["DRINKING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class])
|
||||
if (spellName == self.DRINK_AURA) then
|
||||
self:Send(L["DRINKING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class], unit)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -164,16 +174,17 @@ function Announcements:SHADOWSIGHT(msg)
|
||||
self:Send(msg, 2)
|
||||
end
|
||||
|
||||
function Announcements:Send(msg, throttle, color)
|
||||
function Announcements:Send(msg, throttle, color, unit)
|
||||
if (throttle and throttle > 0) then
|
||||
if (not self.throttled[msg]) then
|
||||
self.throttled[msg] = GetTime() + throttle
|
||||
Gladdy:Debug("INFO", msg, "- NOT THROTTLED -", self.throttled[msg])
|
||||
elseif (self.throttled[msg] < GetTime()) then
|
||||
Gladdy:Debug("INFO", msg, "- THROTTLED OVER -", self.throttled[msg])
|
||||
self.throttled[msg] = GetTime() + throttle
|
||||
local throttledMsg = unit and msg .. unit or msg
|
||||
if (not self.throttled[throttledMsg]) then
|
||||
self.throttled[throttledMsg] = GetTime() + throttle
|
||||
Gladdy:Debug("INFO", throttledMsg, "- NOT THROTTLED -", self.throttled[throttledMsg])
|
||||
elseif (self.throttled[throttledMsg] < GetTime()) then
|
||||
Gladdy:Debug("INFO", throttledMsg, "- THROTTLED OVER -", self.throttled[throttledMsg])
|
||||
self.throttled[throttledMsg] = GetTime() + throttle
|
||||
else
|
||||
Gladdy:Debug("INFO", msg, "- THROTTLED -", self.throttled[msg])
|
||||
Gladdy:Debug("INFO", throttledMsg, "- THROTTLED -", self.throttled[throttledMsg])
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
+118
-106
@@ -1,6 +1,5 @@
|
||||
local floor, str_len, tostring, str_sub, str_find, pairs = math.floor, string.len, tostring, string.sub, string.find, pairs
|
||||
local str_find, pairs = string.find, pairs
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
@@ -17,121 +16,55 @@ end
|
||||
|
||||
function ACDFrame:Initialize()
|
||||
self.locale = Gladdy:GetArenaTimer()
|
||||
self.hidden = false
|
||||
self.countdown = -1
|
||||
self.texturePath = "Interface\\AddOns\\Gladdy\\Images\\Countdown\\";
|
||||
|
||||
local ACDNumFrame = CreateFrame("Frame", "ACDNumFrame", UIParent)
|
||||
ACDNumFrame:EnableMouse(false)
|
||||
ACDNumFrame:SetHeight(512)
|
||||
ACDNumFrame:SetWidth(512)
|
||||
ACDNumFrame:SetPoint("CENTER", 0, 256)
|
||||
ACDNumFrame:Show()
|
||||
self.ACDNumFrame = ACDNumFrame
|
||||
self.ACDNumFrame:EnableMouse(false)
|
||||
self.ACDNumFrame:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
|
||||
self.ACDNumFrame:Hide()
|
||||
|
||||
local ACDNumTens = ACDNumFrame:CreateTexture("ACDNumTens", "HIGH")
|
||||
ACDNumTens:SetWidth(256)
|
||||
ACDNumTens:SetHeight(256)
|
||||
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -50, 0)
|
||||
self.ACDNumTens = ACDNumTens
|
||||
self.ACDNumTens:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumTens:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumTens:SetPoint("CENTER", self.ACDNumFrame, "CENTER", -(Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
|
||||
|
||||
local ACDNumOnes = ACDNumFrame:CreateTexture("ACDNumOnes", "HIGH")
|
||||
ACDNumOnes:SetWidth(256)
|
||||
ACDNumOnes:SetHeight(256)
|
||||
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 50, 0)
|
||||
self.ACDNumOnes = ACDNumOnes
|
||||
self.ACDNumOnes:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOnes:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOnes:SetPoint("CENTER", self.ACDNumFrame, "CENTER", (Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
|
||||
|
||||
local ACDNumOne = ACDNumFrame:CreateTexture("ACDNumOne", "HIGH")
|
||||
ACDNumOne:SetWidth(256)
|
||||
ACDNumOne:SetHeight(256)
|
||||
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
|
||||
self.ACDNumOne = ACDNumOne
|
||||
self.ACDNumOne:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOne:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
|
||||
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
if Gladdy.db.countdown then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
end
|
||||
self.faction = UnitFactionGroup("player")
|
||||
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
||||
end
|
||||
|
||||
function ACDFrame:UpdateFrameOnce()
|
||||
if Gladdy.db.countdown then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
self.ACDNumFrame:SetFrameStrata(Gladdy.db.arenaCountdownFrameStrata)
|
||||
self.ACDNumFrame:SetFrameLevel(Gladdy.db.arenaCountdownFrameLevel)
|
||||
end
|
||||
|
||||
function ACDFrame.OnUpdate(self, elapse)
|
||||
if (self.countdown > 0 and Gladdy.db.countdown) then
|
||||
self.hidden = false;
|
||||
|
||||
if ((floor(self.countdown) ~= floor(self.countdown - elapse)) and (floor(self.countdown - elapse) >= 0)) then
|
||||
local str = tostring(floor(self.countdown - elapse));
|
||||
|
||||
if (str_len(str) == 2) then
|
||||
-- Display has 2 digits
|
||||
self.ACDNumOne:Hide();
|
||||
self.ACDNumTens:Show();
|
||||
self.ACDNumOnes:Show();
|
||||
|
||||
self.ACDNumTens:SetTexture(self.texturePath .. str_sub(str, 0, 1));
|
||||
self.ACDNumOnes:SetTexture(self.texturePath .. str_sub(str, 2, 2));
|
||||
self.ACDNumFrame:SetScale(0.7)
|
||||
elseif (str_len(str) == 1) then
|
||||
-- Display has 1 digit
|
||||
local numStr = str_sub(str, 0, 1)
|
||||
local path = numStr == "0" and self.faction or numStr
|
||||
self.ACDNumOne:Show();
|
||||
self.ACDNumOne:SetTexture(self.texturePath .. path);
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumTens:Hide();
|
||||
self.ACDNumFrame:SetScale(1.0)
|
||||
end
|
||||
end
|
||||
self.countdown = self.countdown - elapse;
|
||||
else
|
||||
self.hidden = true;
|
||||
self.ACDNumTens:Hide();
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumOne:Hide();
|
||||
end
|
||||
if (GetTime() > self.endTime) then
|
||||
self:SetScript("OnUpdate", nil)
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:JOINED_ARENA()
|
||||
if Gladdy.db.countdown then
|
||||
self.ACDNumFrame:Show()
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
||||
self.endTime = GetTime() + 70
|
||||
self:SetScript("OnUpdate", ACDFrame.OnUpdate)
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:ENEMY_SPOTTED()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:UNIT_SPEC()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)
|
||||
for k,v in pairs(self.locale) do
|
||||
if str_find(msg, v) then
|
||||
if k == 0 then
|
||||
ACDFrame:Reset()
|
||||
else
|
||||
self.countdown = k
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:UpdateFrame()
|
||||
self.ACDNumFrame:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
|
||||
@@ -149,21 +82,97 @@ function ACDFrame:UpdateFrame()
|
||||
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
|
||||
end
|
||||
|
||||
function ACDFrame:Test()
|
||||
self.countdown = 30
|
||||
self:JOINED_ARENA()
|
||||
function ACDFrame:HideAll()
|
||||
self.ACDNumFrame:Hide()
|
||||
self.ACDNumTens:Hide()
|
||||
self.ACDNumOnes:Hide()
|
||||
self.ACDNumOne:Hide()
|
||||
end
|
||||
|
||||
function ACDFrame:CreateTicker(countdown)
|
||||
self.countdown = countdown
|
||||
if self.ticker and not self.ticker:IsCancelled() then
|
||||
self.ticker:Cancel()
|
||||
end
|
||||
self.ticker = C_Timer.NewTicker(1, ACDFrame.Ticker)
|
||||
end
|
||||
|
||||
function ACDFrame.Ticker()
|
||||
local self = ACDFrame
|
||||
if (Gladdy.db.countdown) then
|
||||
self.ACDNumFrame:Show()
|
||||
if (self.countdown and self.countdown >= 10 and self.countdown <= 60) then
|
||||
-- Display has 2 digits
|
||||
local ones = self.countdown % 10
|
||||
local tens = (self.countdown / 10) % 10
|
||||
self.ACDNumOne:Hide()
|
||||
self.ACDNumTens:Show()
|
||||
self.ACDNumOnes:Show()
|
||||
|
||||
self.ACDNumTens:SetTexture(self.texturePath .. tens)
|
||||
self.ACDNumOnes:SetTexture(self.texturePath .. ones)
|
||||
self.ACDNumFrame:SetScale(0.7)
|
||||
elseif (self.countdown and self.countdown < 10 and self.countdown > -1) then
|
||||
-- Display has 1 digit
|
||||
local path = self.countdown <= 0 and self.faction or self.countdown
|
||||
self.ACDNumOne:Show()
|
||||
self.ACDNumOne:SetTexture(self.texturePath .. path)
|
||||
self.ACDNumOnes:Hide()
|
||||
self.ACDNumTens:Hide()
|
||||
self.ACDNumFrame:SetScale(1.0)
|
||||
else
|
||||
ACDFrame:HideAll()
|
||||
if (self.countdown and self.countdown < -1) then
|
||||
self.ticker:Cancel()
|
||||
end
|
||||
end
|
||||
self.countdown = self.countdown and self.countdown - 1
|
||||
else
|
||||
ACDFrame:HideAll()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:JOINED_ARENA()
|
||||
if Gladdy.db.countdown then
|
||||
self:CreateTicker(nil)
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:Reset()
|
||||
self.endTime = 0
|
||||
self.countdown = 0
|
||||
if self.ticker and not self.ticker:IsCancelled() then
|
||||
self.ticker:Cancel()
|
||||
end
|
||||
self.countdown = nil
|
||||
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnUpdate", nil)
|
||||
self.hidden = true;
|
||||
self.ACDNumFrame:Hide()
|
||||
self.ACDNumTens:Hide();
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumOne:Hide();
|
||||
ACDFrame:HideAll()
|
||||
end
|
||||
|
||||
function ACDFrame:ENEMY_SPOTTED()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:UNIT_SPEC()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)
|
||||
for k,v in pairs(self.locale) do
|
||||
if str_find(msg, v) then
|
||||
if self.countdown and self.countdown == 0 then
|
||||
return
|
||||
end
|
||||
self.countdown = k
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:TestOnce()
|
||||
self:CreateTicker(30)
|
||||
end
|
||||
|
||||
function ACDFrame:GetOptions()
|
||||
@@ -188,6 +197,7 @@ function ACDFrame:GetOptions()
|
||||
max = 512,
|
||||
step = 16,
|
||||
width = "full",
|
||||
disabled = function() return not Gladdy.db.countdown end,
|
||||
}),
|
||||
headerAuraLevel = {
|
||||
type = "header",
|
||||
@@ -200,6 +210,7 @@ function ACDFrame:GetOptions()
|
||||
order = 6,
|
||||
values = Gladdy.frameStrata,
|
||||
sorting = Gladdy.frameStrataSorting,
|
||||
disabled = function() return not Gladdy.db.countdown end,
|
||||
}),
|
||||
arenaCountdownFrameLevel = Gladdy:option({
|
||||
type = "range",
|
||||
@@ -209,6 +220,7 @@ function ACDFrame:GetOptions()
|
||||
step = 1,
|
||||
order = 7,
|
||||
width = "full",
|
||||
disabled = function() return not Gladdy.db.countdown end,
|
||||
}),
|
||||
}
|
||||
end
|
||||
|
||||
+220
-15
@@ -1,5 +1,5 @@
|
||||
local pairs, ipairs, select, tinsert, tbl_sort, tostring, tonumber, rand = pairs, ipairs, select, tinsert, table.sort, tostring, tonumber, math.random
|
||||
|
||||
local str_gsub = string.gsub
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local GetSpellDescription = GetSpellDescription
|
||||
local CreateFrame, GetTime = CreateFrame, GetTime
|
||||
@@ -47,15 +47,21 @@ local Auras = Gladdy:NewModule("Auras", nil, {
|
||||
auraYOffset = 0,
|
||||
auraSize = 60 + 20 + 1,
|
||||
auraWidthFactor = 0.9,
|
||||
auraIconZoomed = false,
|
||||
auraInterruptDetached = false,
|
||||
auraInterruptXOffset = 0,
|
||||
auraInterruptYOffset = 0,
|
||||
auraInterruptSize = 60 + 20 + 1,
|
||||
auraInterruptWidthFactor = 0.9,
|
||||
auraInterruptIconZoomed = false,
|
||||
auraFrameStrata = "MEDIUM",
|
||||
auraFrameLevel = 5,
|
||||
auraInterruptFrameStrata = "MEDIUM",
|
||||
auraInterruptFrameLevel = 5,
|
||||
auraGroup = false,
|
||||
auraGroupDirection = "DOWN",
|
||||
auraInterruptGroup = false,
|
||||
auraInterruptGroupDirection = "DOWN",
|
||||
})
|
||||
|
||||
function Auras:Initialize()
|
||||
@@ -97,6 +103,7 @@ function Auras:CreateFrame(unit)
|
||||
auraFrame.icon = auraFrame.frame:CreateTexture(nil, "BACKGROUND")
|
||||
auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
auraFrame.icon:SetAllPoints(auraFrame)
|
||||
auraFrame.icon.masked = true
|
||||
|
||||
auraFrame.icon.overlay = auraFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
||||
auraFrame.icon.overlay:SetAllPoints(auraFrame)
|
||||
@@ -170,6 +177,7 @@ function Auras:CreateInterrupt(unit)
|
||||
interruptFrame.icon = interruptFrame.frame:CreateTexture(nil, "BACKGROUND")
|
||||
interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
interruptFrame.icon:SetAllPoints(interruptFrame.frame)
|
||||
interruptFrame.icon.masked = true
|
||||
|
||||
interruptFrame.icon.overlay = interruptFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
||||
interruptFrame.icon.overlay:SetAllPoints(interruptFrame.frame)
|
||||
@@ -239,6 +247,23 @@ function Auras:UpdateFrame(unit)
|
||||
|
||||
auraFrame:ClearAllPoints()
|
||||
Gladdy:SetPosition(auraFrame, unit, "auraXOffset", "auraYOffset", true, Auras)
|
||||
|
||||
if (Gladdy.db.auraGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit]:ClearAllPoints()
|
||||
if Gladdy.db.auraGroupDirection == "RIGHT" then
|
||||
self.frames[unit]:SetPoint("LEFT", self.frames[previousUnit], "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.auraGroupDirection == "LEFT" then
|
||||
self.frames[unit]:SetPoint("RIGHT", self.frames[previousUnit], "LEFT", 0, 0)
|
||||
elseif Gladdy.db.auraGroupDirection == "UP" then
|
||||
self.frames[unit]:SetPoint("BOTTOM", self.frames[previousUnit], "TOP", 0, 0)
|
||||
elseif Gladdy.db.auraGroupDirection == "DOWN" then
|
||||
self.frames[unit]:SetPoint("TOP", self.frames[previousUnit], "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(auraFrame, "auraXOffset", "auraYOffset", L["Auras"],
|
||||
{"TOPLEFT", "TOPLEFT"},
|
||||
@@ -266,6 +291,8 @@ function Auras:UpdateFrame(unit)
|
||||
end
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
|
||||
auraFrame:SetWidth(width)
|
||||
auraFrame:SetHeight(height)
|
||||
auraFrame.frame:SetWidth(height)
|
||||
@@ -275,8 +302,13 @@ function Auras:UpdateFrame(unit)
|
||||
|
||||
auraFrame.cooldown:ClearAllPoints()
|
||||
auraFrame.cooldown:SetPoint("CENTER", auraFrame, "CENTER")
|
||||
auraFrame.cooldown:SetWidth(width - width/16)
|
||||
auraFrame.cooldown:SetHeight(height - height/16)
|
||||
if Gladdy.db.auraIconZoomed then
|
||||
auraFrame.cooldown:SetWidth(width)
|
||||
auraFrame.cooldown:SetHeight(height)
|
||||
else
|
||||
auraFrame.cooldown:SetWidth(width - width/16)
|
||||
auraFrame.cooldown:SetHeight(height - height/16)
|
||||
end
|
||||
auraFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||
|
||||
auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
||||
@@ -296,7 +328,31 @@ function Auras:UpdateFrame(unit)
|
||||
if Gladdy.db.auraDisableCircle then
|
||||
auraFrame.cooldown:SetAlpha(0)
|
||||
end
|
||||
self:UpdateInterruptFrame(unit)
|
||||
|
||||
if Gladdy.db.auraIconZoomed then
|
||||
if auraFrame.icon.masked then
|
||||
auraFrame.icon:SetMask(nil)
|
||||
auraFrame.icon:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
auraFrame.icon.masked = nil
|
||||
end
|
||||
else
|
||||
if not auraFrame.icon.masked then
|
||||
auraFrame.icon:SetMask(nil)
|
||||
auraFrame.icon:SetTexCoord(0,1,0,1)
|
||||
auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
auraFrame.icon.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
testAgain = testAgain or self:UpdateInterruptFrame(unit)
|
||||
|
||||
if testAgain then
|
||||
Auras:ResetUnit(unit)
|
||||
Auras:Test(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function Auras:UpdateInterruptFrame(unit)
|
||||
@@ -321,6 +377,23 @@ function Auras:UpdateInterruptFrame(unit)
|
||||
|
||||
interruptFrame:ClearAllPoints()
|
||||
Gladdy:SetPosition(interruptFrame, unit, "auraInterruptXOffset", "auraInterruptYOffset", true, Auras)
|
||||
|
||||
if (Gladdy.db.auraInterruptGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit].interruptFrame:ClearAllPoints()
|
||||
if Gladdy.db.auraInterruptGroupDirection == "RIGHT" then
|
||||
self.frames[unit].interruptFrame:SetPoint("LEFT", self.frames[previousUnit].interruptFrame, "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.auraInterruptGroupDirection == "LEFT" then
|
||||
self.frames[unit].interruptFrame:SetPoint("RIGHT", self.frames[previousUnit].interruptFrame, "LEFT", 0, 0)
|
||||
elseif Gladdy.db.auraInterruptGroupDirection == "UP" then
|
||||
self.frames[unit].interruptFrame:SetPoint("BOTTOM", self.frames[previousUnit].interruptFrame, "TOP", 0, 0)
|
||||
elseif Gladdy.db.auraInterruptGroupDirection == "DOWN" then
|
||||
self.frames[unit].interruptFrame:SetPoint("TOP", self.frames[previousUnit].interruptFrame, "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(interruptFrame, "auraInterruptXOffset", "auraInterruptYOffset", L["Interrupts"],
|
||||
{"TOPLEFT", "TOPLEFT"},
|
||||
@@ -367,6 +440,8 @@ function Auras:UpdateInterruptFrame(unit)
|
||||
end
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
|
||||
interruptFrame:SetWidth(width)
|
||||
interruptFrame:SetHeight(height)
|
||||
interruptFrame.frame:SetWidth(width)
|
||||
@@ -376,8 +451,14 @@ function Auras:UpdateInterruptFrame(unit)
|
||||
|
||||
interruptFrame.cooldown:ClearAllPoints()
|
||||
interruptFrame.cooldown:SetPoint("CENTER", interruptFrame, "CENTER")
|
||||
interruptFrame.cooldown:SetWidth(width - width/16)
|
||||
interruptFrame.cooldown:SetHeight(height - height/16)
|
||||
if Gladdy.db.auraInterruptIconZoomed then
|
||||
interruptFrame.cooldown:SetWidth(width)
|
||||
interruptFrame.cooldown:SetHeight(height)
|
||||
|
||||
else
|
||||
interruptFrame.cooldown:SetWidth(width - width/16)
|
||||
interruptFrame.cooldown:SetHeight(height - height/16)
|
||||
end
|
||||
interruptFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||
|
||||
interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
||||
@@ -395,6 +476,25 @@ function Auras:UpdateInterruptFrame(unit)
|
||||
if Gladdy.db.auraDisableCircle then
|
||||
interruptFrame.cooldown:SetAlpha(0)
|
||||
end
|
||||
|
||||
if Gladdy.db.auraInterruptIconZoomed then
|
||||
if interruptFrame.icon.masked then
|
||||
interruptFrame.icon:SetMask(nil)
|
||||
interruptFrame.icon:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
interruptFrame.icon.masked = nil
|
||||
end
|
||||
else
|
||||
if not interruptFrame.icon.masked then
|
||||
interruptFrame.icon:SetMask(nil)
|
||||
interruptFrame.icon:SetTexCoord(0,1,0,1)
|
||||
interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
interruptFrame.icon.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
return testAgain
|
||||
end
|
||||
|
||||
function Auras:ResetUnit(unit)
|
||||
@@ -445,12 +545,13 @@ function Auras:Test(unit)
|
||||
if Gladdy.exceptionNames[spellid] then
|
||||
spellName = Gladdy.exceptionNames[spellid]
|
||||
end
|
||||
local duration = math.random(2,10)
|
||||
if (unit == "arena2") then
|
||||
if (v.value.track == AURA_TYPE_BUFF) then
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, duration, GetTime() + duration)
|
||||
end
|
||||
else
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, duration, GetTime() + duration)
|
||||
end
|
||||
end
|
||||
-- /run LibStub("Gladdy").modules["Auras"]:Test("arena1")
|
||||
@@ -472,7 +573,7 @@ function Auras:Test(unit)
|
||||
local extraSpellSchool = spellSchools[rand(1, #spellSchools)]
|
||||
spellid = tonumber(enabledInterrupts[rand(1, #enabledInterrupts)])
|
||||
spellName = select(1, GetSpellInfo(spellid))
|
||||
self:SPELL_INTERRUPT(unit,spellid, spellName, "physical", spellid, spellName, extraSpellSchool)
|
||||
Gladdy:SendMessage("SPELL_INTERRUPT", unit,spellid, spellName, "physical", spellid, spellName, extraSpellSchool)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -503,7 +604,9 @@ function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, exp
|
||||
return
|
||||
end
|
||||
-- don't use spellId from combatlog, in case of different spellrank
|
||||
if not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)] or not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].enabled then
|
||||
if not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)]
|
||||
or not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].enabled
|
||||
or Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].track ~= auraType then
|
||||
return
|
||||
end
|
||||
|
||||
@@ -682,10 +785,63 @@ function Auras:GetOptions()
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
args = {
|
||||
groupOptions = {
|
||||
type = "group",
|
||||
name = L["Group"],
|
||||
order = 4,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Auras"],
|
||||
order = 1,
|
||||
},
|
||||
auraGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group"] .. " " .. L["Auras"],
|
||||
order = 2,
|
||||
disabled = function() return not Gladdy.db.auraDetached end,
|
||||
}),
|
||||
auraGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 3,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function() return not Gladdy.db.auraGroup or not Gladdy.db.auraDetached end,
|
||||
}),
|
||||
headerInterrupts = {
|
||||
type = "header",
|
||||
name = L["Interrupts"],
|
||||
order = 4,
|
||||
},
|
||||
auraInterruptGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group"] .. " " .. L["Interrupts"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.auraInterruptDetached end,
|
||||
}),
|
||||
auraInterruptGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 6,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function() return not Gladdy.db.auraInterruptGroup or not Gladdy.db.auraInterruptDetached end,
|
||||
}),
|
||||
}
|
||||
},
|
||||
detachedAuraMode = {
|
||||
type = "group",
|
||||
name = L["Detached Aura"],
|
||||
order = 4,
|
||||
order = 5,
|
||||
args = {
|
||||
headerDetachedMode = {
|
||||
type = "header",
|
||||
@@ -698,6 +854,21 @@ function Auras:GetOptions()
|
||||
order = 2,
|
||||
width = "full"
|
||||
}),
|
||||
headerIcon = {
|
||||
type = "header",
|
||||
name = L["Icon"],
|
||||
order = 5,
|
||||
},
|
||||
auraIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
disabled = function()
|
||||
return not Gladdy.db.auraDetached
|
||||
end,
|
||||
order = 6,
|
||||
width = "full",
|
||||
}),
|
||||
headerAuraSize = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
@@ -789,7 +960,7 @@ function Auras:GetOptions()
|
||||
detachedInterruptMode = {
|
||||
type = "group",
|
||||
name = L["Detached Interrupt"],
|
||||
order = 5,
|
||||
order = 6,
|
||||
args = {
|
||||
headerDetachedMode = {
|
||||
type = "header",
|
||||
@@ -802,6 +973,21 @@ function Auras:GetOptions()
|
||||
order = 2,
|
||||
width = "full"
|
||||
}),
|
||||
headerIcon = {
|
||||
type = "header",
|
||||
name = L["Icon"],
|
||||
order = 5,
|
||||
},
|
||||
auraInterruptIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
disabled = function()
|
||||
return not Gladdy.db.auraInterruptDetached
|
||||
end,
|
||||
order = 6,
|
||||
width = "full",
|
||||
}),
|
||||
headerAuraSize = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
@@ -890,10 +1076,29 @@ function Auras:GetOptions()
|
||||
}),
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
type = "group",
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
headerIcon = {
|
||||
type = "header",
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
auraIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
cooldown = {
|
||||
type = "group",
|
||||
name = L["Cooldown"],
|
||||
order = 1,
|
||||
order = 2,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
@@ -936,7 +1141,7 @@ function Auras:GetOptions()
|
||||
font = {
|
||||
type = "group",
|
||||
name = L["Font"],
|
||||
order = 2,
|
||||
order = 3,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
@@ -973,7 +1178,7 @@ function Auras:GetOptions()
|
||||
border = {
|
||||
type = "group",
|
||||
name = L["Border"],
|
||||
order = 3,
|
||||
order = 4,
|
||||
args = borderArgs
|
||||
}
|
||||
}
|
||||
|
||||
+135
-44
@@ -20,10 +20,12 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
||||
buffsAlpha = 1,
|
||||
buffsIconSize = 30,
|
||||
buffsWidthFactor = 1,
|
||||
buffsIconZoomed = false,
|
||||
buffsIconPadding = 1,
|
||||
buffsBuffsAlpha = 1,
|
||||
buffsBuffsIconSize = 30,
|
||||
buffsBuffsWidthFactor = 1,
|
||||
buffsBuffsIconZoomed = false,
|
||||
buffsBuffsIconPadding = 1,
|
||||
buffsDisableCircle = false,
|
||||
buffsCooldownAlpha = 1,
|
||||
@@ -42,25 +44,30 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
||||
buffsBorderColorsEnabled = true,
|
||||
trackedDebuffs = defaultTrackedDebuffs,
|
||||
trackedBuffs = defaultTrackedBuffs,
|
||||
buffsBorderColorCurse = Gladdy:GetAuraTypeColor()["curse"],
|
||||
buffsBorderColorMagic = Gladdy:GetAuraTypeColor()["magic"],
|
||||
buffsBorderColorPoison = Gladdy:GetAuraTypeColor()["poison"],
|
||||
buffsBorderColorPhysical = Gladdy:GetAuraTypeColor()["none"],
|
||||
buffsBorderColorImmune = Gladdy:GetAuraTypeColor()["immune"],
|
||||
buffsBorderColorDisease = Gladdy:GetAuraTypeColor()["disease"],
|
||||
buffsBorderColorForm = Gladdy:GetAuraTypeColor()["form"],
|
||||
buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"],
|
||||
buffsBorderColorEnrage = Gladdy:GetDispelTypeColors()["enrage"],
|
||||
buffsBorderColorCurse = Gladdy:GetDispelTypeColors()["curse"],
|
||||
buffsBorderColorMagic = Gladdy:GetDispelTypeColors()["magic"],
|
||||
buffsBorderColorPoison = Gladdy:GetDispelTypeColors()["poison"],
|
||||
buffsBorderColorPhysical = Gladdy:GetDispelTypeColors()["none"],
|
||||
buffsBorderColorImmune = Gladdy:GetDispelTypeColors()["immune"],
|
||||
buffsBorderColorDisease = Gladdy:GetDispelTypeColors()["disease"],
|
||||
buffsBorderColorForm = Gladdy:GetDispelTypeColors()["form"],
|
||||
buffsBorderColorAura = Gladdy:GetDispelTypeColors()["aura"],
|
||||
buffFrameStrata = "MEDIUM",
|
||||
buffsFrameLevel = 9,
|
||||
})
|
||||
|
||||
local spellSchoolToOptionValueTable
|
||||
local function spellSchoolToOptionValue(spellSchool)
|
||||
if Gladdy.db.buffsBorderColorsEnabled and spellSchool then
|
||||
return spellSchoolToOptionValueTable[spellSchool].r,
|
||||
spellSchoolToOptionValueTable[spellSchool].g,
|
||||
spellSchoolToOptionValueTable[spellSchool].b,
|
||||
spellSchoolToOptionValueTable[spellSchool].a
|
||||
local dispelTypeToOptionValueTable
|
||||
local function dispelTypeToOptionValue(dispelType)
|
||||
if Gladdy.db.buffsBorderColorsEnabled then
|
||||
dispelType = dispelType and lower(dispelType) or "physical"
|
||||
if not dispelTypeToOptionValueTable[dispelType] then
|
||||
dispelType = "physical"
|
||||
end
|
||||
return dispelTypeToOptionValueTable[dispelType].r,
|
||||
dispelTypeToOptionValueTable[dispelType].g,
|
||||
dispelTypeToOptionValueTable[dispelType].b,
|
||||
dispelTypeToOptionValueTable[dispelType].a
|
||||
else
|
||||
return Gladdy:SetColor(Gladdy.db.buffsBorderColor)
|
||||
end
|
||||
@@ -76,21 +83,28 @@ function BuffsDebuffs:Initialize()
|
||||
self.icons = {}
|
||||
self.trackedCC = {}
|
||||
self.framePool = {}
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("AURA_FADE")
|
||||
self:RegisterMessage("AURA_GAIN")
|
||||
self:RegisterMessage("AURA_GAIN_LIMIT")
|
||||
self:SetScript("OnEvent", BuffsDebuffs.OnEvent)
|
||||
spellSchoolToOptionValueTable = {
|
||||
curse = Gladdy.db.buffsBorderColorCurse,
|
||||
if Gladdy.db.buffsEnabled then
|
||||
self:RegisterMessages(
|
||||
"JOINED_ARENA",
|
||||
"UNIT_DESTROYED",
|
||||
"UNIT_DEATH",
|
||||
"AURA_FADE",
|
||||
"AURA_GAIN",
|
||||
"AURA_GAIN_LIMIT")
|
||||
self:SetScript("OnEvent", BuffsDebuffs.OnEvent)
|
||||
end
|
||||
dispelTypeToOptionValueTable = {
|
||||
none = Gladdy.db.buffsBorderColorPhysical,
|
||||
magic = Gladdy.db.buffsBorderColorMagic,
|
||||
curse = Gladdy.db.buffsBorderColorCurse,
|
||||
disease = Gladdy.db.buffsBorderColorDisease,
|
||||
poison = Gladdy.db.buffsBorderColorPoison,
|
||||
stealth = Gladdy.db.buffsBorderColorPhysical,
|
||||
invisibility = Gladdy.db.buffsBorderColorPhysical,
|
||||
physical = Gladdy.db.buffsBorderColorPhysical,
|
||||
immune = Gladdy.db.buffsBorderColorImmune,
|
||||
disease = Gladdy.db.buffsBorderColorDisease,
|
||||
form = Gladdy.db.buffsBorderColorForm,
|
||||
enrage = Gladdy.db.buffsBorderColorEnrage,
|
||||
}
|
||||
|
||||
end
|
||||
@@ -134,7 +148,7 @@ end
|
||||
|
||||
function BuffsDebuffs:Test(unit)
|
||||
if Gladdy.db.buffsEnabled then
|
||||
local spellSchools = { "physical", "magic", "curse", "poison", "disease", "immune" }
|
||||
local dispelTypes = { "physical", "magic", "curse", "poison", "disease", "immune", "enrage"}
|
||||
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
@@ -146,7 +160,7 @@ function BuffsDebuffs:Test(unit)
|
||||
break
|
||||
end
|
||||
if enabled then
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_DEBUFF, 15, 15, random(1,5), spellSchools[random(1,6)], select(3, GetSpellInfo(spellID)), i)
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_DEBUFF, 15, 15, random(1,5), dispelTypes[random(1,#dispelTypes)], select(3, GetSpellInfo(spellID)), i)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
@@ -156,7 +170,7 @@ function BuffsDebuffs:Test(unit)
|
||||
break
|
||||
end
|
||||
if enabled then
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_BUFF, 15, 15, random(1,5), spellSchools[random(1,6)], select(3, GetSpellInfo(spellID)), i)
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_BUFF, 15, 15, random(1,5), dispelTypes[random(1,#dispelTypes)], select(3, GetSpellInfo(spellID)), i)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
@@ -193,7 +207,7 @@ function BuffsDebuffs:AURA_GAIN_LIMIT(unit, auraType, limit)
|
||||
end
|
||||
end
|
||||
|
||||
function BuffsDebuffs:AURA_GAIN(unit, auraType, spellID, spellName, texture, duration, expirationTime, count, spellSchool)
|
||||
function BuffsDebuffs:AURA_GAIN(unit, auraType, spellID, spellName, texture, duration, expirationTime, count, dispelType)
|
||||
if (not self.frames[unit] or not Gladdy.db.buffsEnabled) then
|
||||
return
|
||||
end
|
||||
@@ -224,7 +238,7 @@ function BuffsDebuffs:AURA_GAIN(unit, auraType, spellID, spellName, texture, dur
|
||||
auraFrame.numBuffs = auraFrame.numBuffs + 1
|
||||
index = auraFrame.numBuffs
|
||||
end
|
||||
BuffsDebuffs:AddOrRefreshAura(unit,spellID, auraType, duration, expirationTime - GetTime(), count, spellSchool and lower(spellSchool) or "physical", texture, index)
|
||||
BuffsDebuffs:AddOrRefreshAura(unit,spellID, auraType, duration, expirationTime - GetTime(), count, dispelType, texture, index)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -277,17 +291,60 @@ local function styleIcon(aura, auraType)
|
||||
aura.cooldowncircle:SetAlpha(Gladdy.db.buffsCooldownAlpha)
|
||||
end
|
||||
|
||||
local zoomedOption, testAgain
|
||||
if auraType == AURA_TYPE_BUFF then
|
||||
zoomedOption = Gladdy.db.buffsBuffsIconZoomed
|
||||
else
|
||||
zoomedOption = Gladdy.db.buffsIconZoomed
|
||||
end
|
||||
|
||||
if zoomedOption then
|
||||
if aura.texture.masked then
|
||||
aura.texture:SetMask(nil)
|
||||
aura.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
aura.texture.masked = nil
|
||||
end
|
||||
else
|
||||
if not aura.texture.masked then
|
||||
aura.texture:SetMask(nil)
|
||||
aura.texture:SetTexCoord(0,1,0,1)
|
||||
aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
aura.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
aura:SetFrameStrata(Gladdy.db.buffFrameStrata)
|
||||
aura:SetFrameLevel(Gladdy.db.buffsFrameLevel)
|
||||
aura.cooldowncircle:SetFrameLevel(Gladdy.db.buffsFrameLevel + 1)
|
||||
aura.overlay:SetFrameLevel(Gladdy.db.buffsFrameLevel + 2)
|
||||
|
||||
aura.border:SetTexture(Gladdy.db.buffsBorderStyle)
|
||||
aura.border:SetVertexColor(spellSchoolToOptionValue(aura.spellSchool))
|
||||
aura.border:SetVertexColor(dispelTypeToOptionValue(aura.dispelType))
|
||||
aura.cooldown:SetFont(Gladdy:SMFetch("font", "buffsFont"), (Gladdy.db.buffsIconSize/2 - 1) * Gladdy.db.buffsFontScale, "OUTLINE")
|
||||
aura.cooldown:SetTextColor(Gladdy.db.buffsFontColor.r, Gladdy.db.buffsFontColor.g, Gladdy.db.buffsFontColor.b, Gladdy.db.buffsFontColor.a)
|
||||
aura.stacks:SetFont(Gladdy:SMFetch("font", "buffsFont"), (Gladdy.db.buffsIconSize/3 - 1) * Gladdy.db.buffsFontScale, "OUTLINE")
|
||||
aura.stacks:SetTextColor(Gladdy.db.buffsFontColor.r, Gladdy.db.buffsFontColor.g, Gladdy.db.buffsFontColor.b, 1)
|
||||
|
||||
return testAgain
|
||||
end
|
||||
|
||||
function BuffsDebuffs:UpdateFrameOnce()
|
||||
if Gladdy.db.buffsEnabled then
|
||||
self:RegisterMessages(
|
||||
"JOINED_ARENA",
|
||||
"UNIT_DESTROYED",
|
||||
"UNIT_DEATH",
|
||||
"AURA_FADE",
|
||||
"AURA_GAIN",
|
||||
"AURA_GAIN_LIMIT")
|
||||
self:SetScript("OnEvent", BuffsDebuffs.OnEvent)
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
self:SetScript("OnEvent", nil)
|
||||
end
|
||||
end
|
||||
|
||||
function BuffsDebuffs:UpdateFrame(unit)
|
||||
@@ -311,16 +368,23 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
0, 0, "buffsEnabled")
|
||||
end
|
||||
|
||||
local testBuffsAgain, testDebuffsAgain
|
||||
|
||||
for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do
|
||||
styleIcon(self.frames[unit].auras[AURA_TYPE_BUFF][i], AURA_TYPE_BUFF)
|
||||
testBuffsAgain = styleIcon(self.frames[unit].auras[AURA_TYPE_BUFF][i], AURA_TYPE_BUFF)
|
||||
end
|
||||
for i=1, #self.frames[unit].auras[AURA_TYPE_DEBUFF] do
|
||||
styleIcon(self.frames[unit].auras[AURA_TYPE_DEBUFF][i], AURA_TYPE_DEBUFF)
|
||||
testDebuffsAgain = styleIcon(self.frames[unit].auras[AURA_TYPE_DEBUFF][i], AURA_TYPE_DEBUFF)
|
||||
end
|
||||
for i=1, #self.framePool do
|
||||
styleIcon(self.framePool[i])
|
||||
end
|
||||
self:UpdateAurasOnUnit(unit)
|
||||
|
||||
if Gladdy.frame.testing and (testBuffsAgain or testDebuffsAgain) then
|
||||
self:ResetUnit(unit)
|
||||
self:Test(unit)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
@@ -385,11 +449,12 @@ local function iconTimer(auraFrame, elapsed)
|
||||
end
|
||||
end
|
||||
|
||||
function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stacks, spellSchool, icon, index)
|
||||
function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stacks, dispelType, icon, index)
|
||||
local aura
|
||||
if not self.frames[unit].auras[auraType][index] then
|
||||
if #self.framePool > 0 then
|
||||
aura = tremove(self.framePool, #self.framePool)
|
||||
styleIcon(aura)
|
||||
else
|
||||
aura = CreateFrame("Frame")
|
||||
aura:EnableMouse(false)
|
||||
@@ -397,6 +462,7 @@ function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stack
|
||||
aura:SetFrameLevel(Gladdy.db.buffsFrameLevel)
|
||||
aura.texture = aura:CreateTexture(nil, "BACKGROUND")
|
||||
aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
aura.texture.masked = true
|
||||
aura.texture:SetAllPoints(aura)
|
||||
aura.cooldowncircle = CreateFrame("Cooldown", nil, aura, "CooldownFrameTemplate")
|
||||
aura.cooldowncircle:SetFrameLevel(Gladdy.db.buffsFrameLevel + 1)
|
||||
@@ -438,12 +504,12 @@ function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stack
|
||||
aura.spellID = spellID
|
||||
aura.type = auraType
|
||||
aura.unit = unit
|
||||
aura.spellSchool = spellSchool
|
||||
aura.border:SetVertexColor(spellSchoolToOptionValue(spellSchool))
|
||||
aura.dispelType = dispelType
|
||||
aura.border:SetVertexColor(dispelTypeToOptionValue(dispelType))
|
||||
aura:Show()
|
||||
end
|
||||
|
||||
function BuffsDebuffs:AddOrRefreshAura(unit, spellID, auraType, duration, timeLeft, stacks, spellSchool, icon, index)
|
||||
function BuffsDebuffs:AddOrRefreshAura(unit, spellID, auraType, duration, timeLeft, stacks, dispelType, icon, index)
|
||||
if self.frames[unit].auras[auraType][index] and self.frames[unit].auras[auraType][index].spellID == spellID then -- refresh
|
||||
if duration == 0 then
|
||||
self.frames[unit].auras[auraType][index].endtime = "undefined"
|
||||
@@ -459,7 +525,7 @@ function BuffsDebuffs:AddOrRefreshAura(unit, spellID, auraType, duration, timeLe
|
||||
return
|
||||
end
|
||||
--add
|
||||
self:AddAura(unit, spellID, auraType, duration, timeLeft, stacks, spellSchool, icon, index)
|
||||
self:AddAura(unit, spellID, auraType, duration, timeLeft, stacks, dispelType, icon, index)
|
||||
self:UpdateAurasOnUnit(unit)
|
||||
end
|
||||
|
||||
@@ -485,12 +551,14 @@ function BuffsDebuffs:GetOptions()
|
||||
name = L["Show CC"],
|
||||
desc = L["Shows all debuffs, which are displayed on the ClassIcon as well"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||
args = {
|
||||
buffs = {
|
||||
type = "group",
|
||||
@@ -499,14 +567,21 @@ function BuffsDebuffs:GetOptions()
|
||||
args = {
|
||||
size = {
|
||||
type = "group",
|
||||
name = L["Size & Padding"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size & Padding"],
|
||||
order = 5,
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
buffsBuffsIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
buffsBuffsIconSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon Size"],
|
||||
@@ -609,14 +684,21 @@ function BuffsDebuffs:GetOptions()
|
||||
args = {
|
||||
size = {
|
||||
type = "group",
|
||||
name = L["Size & Padding"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size & Padding"],
|
||||
order = 5,
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
buffsIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
buffsIconSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon Size"],
|
||||
@@ -882,6 +964,13 @@ function BuffsDebuffs:GetOptions()
|
||||
order = 49,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
buffsBorderColorEnrage = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Enrage"],
|
||||
desc = L["Color of the border"],
|
||||
order = 50,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
frameStrata = {
|
||||
@@ -919,6 +1008,7 @@ function BuffsDebuffs:GetOptions()
|
||||
name = L["Debuff Lists"],
|
||||
type = "group",
|
||||
order = 11,
|
||||
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||
childGroups = "tree",
|
||||
args = select(1, Gladdy:GetAuras(AURA_TYPE_DEBUFF)),
|
||||
set = function(info, state)
|
||||
@@ -934,6 +1024,7 @@ function BuffsDebuffs:GetOptions()
|
||||
name = L["Buff Lists"],
|
||||
type = "group",
|
||||
order = 12,
|
||||
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||
childGroups = "tree",
|
||||
args = select(1, Gladdy:GetAuras(AURA_TYPE_BUFF)),
|
||||
set = function(info, state)
|
||||
|
||||
+96
-17
@@ -23,8 +23,10 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
||||
castBarHeight = 20,
|
||||
castBarWidth = 160,
|
||||
castBarIconSize = 22,
|
||||
castBarIconZoomed = false,
|
||||
castBarBorderSize = 8,
|
||||
castBarFontSize = 12,
|
||||
castBarFontOutline = false,
|
||||
castBarTexture = "Smooth",
|
||||
castBarIconStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||
castBarBorderStyle = "Gladdy Tooltip round",
|
||||
@@ -48,8 +50,10 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
||||
|
||||
function Castbar:Initialize()
|
||||
self.frames = {}
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
if Gladdy.db.castBarEnabled then
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
@@ -101,10 +105,17 @@ function Castbar:CreateFrame(unit)
|
||||
castBar.icon.texture = castBar.icon:CreateTexture(nil, "BACKGROUND")
|
||||
castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
castBar.icon.texture:SetAllPoints(castBar.icon)
|
||||
castBar.icon.texture.masked = true
|
||||
castBar.icon.texture.overlay = castBar.icon:CreateTexture(nil, "BORDER")
|
||||
castBar.icon.texture.overlay:SetAllPoints(castBar.icon.texture)
|
||||
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
||||
|
||||
castBar.shield = castBar.icon:CreateTexture(nil, "OVERLAY")
|
||||
castBar.shield:SetTexture("Interface\\AddOns\\Gladdy\\Images\\castbar-shield")
|
||||
castBar.shield:SetHeight(80)
|
||||
castBar.shield:SetWidth(80)
|
||||
castBar.shield:SetPoint("CENTER", castBar.icon, "CENTER", 0, -1.5)
|
||||
|
||||
castBar.icon:ClearAllPoints()
|
||||
if (Gladdy.db.castBarIconPos == "LEFT") then
|
||||
castBar.icon:SetPoint("RIGHT", castBar, "LEFT", -3, 0) -- Icon of castbar
|
||||
@@ -113,15 +124,15 @@ function Castbar:CreateFrame(unit)
|
||||
end
|
||||
|
||||
castBar.spellText = castBar:CreateFontString(nil, "LOW")
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize, Gladdy.db.castBarFontOutline and "OUTLINE")
|
||||
castBar.spellText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||
castBar.spellText:SetShadowOffset(1, -1)
|
||||
castBar.spellText:SetShadowColor(0, 0, 0, 1)
|
||||
castBar.spellText:SetJustifyH("CENTER")
|
||||
castBar.spellText:SetPoint("LEFT", 7, 0) -- Text of the spell
|
||||
castBar.spellText:SetPoint("LEFT", 10, 0) -- Text of the spell
|
||||
|
||||
castBar.timeText = castBar:CreateFontString(nil, "LOW")
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize, Gladdy.db.castBarFontOutline and "OUTLINE")
|
||||
castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||
castBar.timeText:SetShadowOffset(1, -1)
|
||||
castBar.timeText:SetShadowColor(0, 0, 0, 1)
|
||||
@@ -133,12 +144,23 @@ function Castbar:CreateFrame(unit)
|
||||
self:ResetUnit(unit)
|
||||
end
|
||||
|
||||
function Castbar:UpdateFrameOnce()
|
||||
if Gladdy.db.castBarEnabled then
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function Castbar:UpdateFrame(unit)
|
||||
local castBar = self.frames[unit]
|
||||
if (not castBar) then
|
||||
return
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
|
||||
castBar:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||
castBar:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||
castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||
@@ -173,12 +195,27 @@ function Castbar:UpdateFrame(unit)
|
||||
castBar.icon:SetWidth(Gladdy.db.castBarIconSize)
|
||||
castBar.icon:SetHeight(Gladdy.db.castBarIconSize)
|
||||
castBar.icon.texture:SetAllPoints(castBar.icon)
|
||||
castBar.icon:ClearAllPoints()
|
||||
if Gladdy.db.castBarIconEnabled then
|
||||
castBar.icon:Show()
|
||||
if Gladdy.db.castBarIconZoomed then
|
||||
if castBar.icon.texture.masked then
|
||||
castBar.icon.texture:SetMask(nil)
|
||||
castBar.icon.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
castBar.icon.texture.masked = nil
|
||||
end
|
||||
else
|
||||
castBar.icon:Hide()
|
||||
if not castBar.icon.texture.masked then
|
||||
castBar.icon.texture:SetMask(nil)
|
||||
castBar.icon.texture:SetTexCoord(0,1,0,1)
|
||||
castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
castBar.icon.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
castBar.icon:ClearAllPoints()
|
||||
|
||||
castBar.shield:SetWidth(Gladdy.db.castBarIconSize * 3.2)
|
||||
castBar.shield:SetHeight(Gladdy.db.castBarIconSize * 3.2)
|
||||
|
||||
local rightMargin = 0
|
||||
local leftMargin = 0
|
||||
@@ -192,10 +229,10 @@ function Castbar:UpdateFrame(unit)
|
||||
|
||||
Gladdy:SetPosition(castBar, unit, "castBarXOffset", "castBarYOffset", Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin), Castbar)
|
||||
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize, Gladdy.db.castBarFontOutline and "OUTLINE")
|
||||
castBar.spellText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize, Gladdy.db.castBarFontOutline and "OUTLINE")
|
||||
castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||
|
||||
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
||||
@@ -209,6 +246,16 @@ function Castbar:UpdateFrame(unit)
|
||||
if not Gladdy.db.castBarEnabled then
|
||||
self:CAST_STOP(unit)
|
||||
end
|
||||
|
||||
if Gladdy.db.castBarIconEnabled then
|
||||
castBar.icon:Show()
|
||||
if testAgain then
|
||||
self:ResetUnit(unit)
|
||||
self:Test(unit)
|
||||
end
|
||||
else
|
||||
castBar.icon:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
@@ -268,7 +315,7 @@ end
|
||||
|
||||
Castbar.CastEventsFunc = {}
|
||||
Castbar.CastEventsFunc["UNIT_SPELLCAST_START"] = function(castBar, event, ...)
|
||||
local name, text, texture, startTime, endTime, isTradeSkill, castID = UnitCastingInfo(castBar.unit)
|
||||
local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellId = UnitCastingInfo(castBar.unit)
|
||||
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||
castBar:SetAlpha(0)
|
||||
return
|
||||
@@ -364,7 +411,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_DELAYED"] = function(castBar, event, ...)
|
||||
end
|
||||
end
|
||||
Castbar.CastEventsFunc["UNIT_SPELLCAST_CHANNEL_START"] = function(castBar, event, ...)
|
||||
local name, text, texture, startTime, endTime, isTradeSkill, spellID = UnitChannelInfo(castBar.unit)
|
||||
local name, text, texture, startTime, endTime, isTradeSkill, notInterruptible, spellId = UnitChannelInfo(castBar.unit)
|
||||
|
||||
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||
castBar:SetAlpha(0)
|
||||
@@ -402,7 +449,7 @@ function Castbar.OnEvent(self, event, ...)
|
||||
Castbar.CastEventsFunc[event](self, event, ...)
|
||||
end
|
||||
|
||||
function Castbar:CAST_START(unit, spell, icon, value, maxValue, test)
|
||||
function Castbar:CAST_START(unit, spell, icon, value, maxValue, notInterruptible, test)
|
||||
local castBar = self.frames[unit]
|
||||
if (not castBar) then
|
||||
return
|
||||
@@ -414,7 +461,12 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test)
|
||||
castBar.channeling = test == "channel"
|
||||
end
|
||||
|
||||
castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor))
|
||||
if notInterruptible then
|
||||
castBar.bar:SetStatusBarColor(.8,.8,.8,1)
|
||||
else
|
||||
castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor))
|
||||
end
|
||||
|
||||
castBar.value = value
|
||||
castBar.maxValue = maxValue
|
||||
castBar.bar:SetMinMaxValues(0, maxValue)
|
||||
@@ -428,6 +480,11 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test)
|
||||
if Gladdy.db.castBarSparkEnabled then
|
||||
castBar.spark:Show()
|
||||
end
|
||||
if notInterruptible then
|
||||
castBar.shield:Show()
|
||||
else
|
||||
castBar.shield:Hide()
|
||||
end
|
||||
castBar:SetAlpha(1)
|
||||
if Gladdy.db.castBarIconEnabled then
|
||||
castBar.icon:Show()
|
||||
@@ -455,6 +512,7 @@ function Castbar:CAST_STOP(unit, ...)
|
||||
castBar.backdrop:Hide()
|
||||
castBar.spark:Hide()
|
||||
castBar.icon:Hide()
|
||||
castBar.shield:Hide()
|
||||
else
|
||||
castBar.bar:SetStatusBarColor(...)
|
||||
end
|
||||
@@ -529,7 +587,8 @@ function Castbar:Test(unit)
|
||||
end
|
||||
|
||||
if (spell) then
|
||||
self:CAST_START(unit, spell, icon, value, maxValue, event)
|
||||
local nonInterruptable = unit == "arena1" and Gladdy.expansion == "Wrath"
|
||||
self:CAST_START(unit, spell, icon, value, maxValue, nonInterruptable, event)
|
||||
end
|
||||
else
|
||||
self:CAST_STOP(unit)
|
||||
@@ -584,6 +643,7 @@ function Castbar:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.castBarEnabled end,
|
||||
args = {
|
||||
barFrame = {
|
||||
type = "group",
|
||||
@@ -678,7 +738,7 @@ function Castbar:GetOptions()
|
||||
args = {
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Icon Size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
castBarIconEnabled = option({
|
||||
@@ -687,6 +747,13 @@ function Castbar:GetOptions()
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
castBarIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
castBarIconSize = option({
|
||||
type = "range",
|
||||
name = L["Icon size"],
|
||||
@@ -773,6 +840,12 @@ function Castbar:GetOptions()
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
castBarFontOutline = option({
|
||||
type = "toggle",
|
||||
name = L["Outline"],
|
||||
order = 5,
|
||||
width = "full",
|
||||
}),
|
||||
headerFormat = {
|
||||
type = "header",
|
||||
name = L["Format"],
|
||||
@@ -879,6 +952,12 @@ function Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin)
|
||||
return Gladdy.db.newLayout
|
||||
end
|
||||
castBar:ClearAllPoints()
|
||||
if Gladdy.db.castBarWidth <= 0 then
|
||||
castBar:SetWidth(0.1)
|
||||
end
|
||||
if Gladdy.db.castBarHeight <= 0 then
|
||||
castBar:SetHeight(0.1)
|
||||
end
|
||||
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
||||
if (Gladdy.db.castBarPos == "LEFT") then
|
||||
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
||||
|
||||
+99
-12
@@ -1,4 +1,4 @@
|
||||
local select = select
|
||||
local select, str_gsub = select, string.gsub
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local CreateFrame = CreateFrame
|
||||
@@ -8,6 +8,7 @@ local Classicon = Gladdy:NewModule("Class Icon", 81, {
|
||||
classIconEnabled = true,
|
||||
classIconSize = 60 + 20 + 1,
|
||||
classIconWidthFactor = 0.9,
|
||||
classIconZoomed = false,
|
||||
classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||
classIconBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
classIconSpecIcon = false,
|
||||
@@ -15,11 +16,14 @@ local Classicon = Gladdy:NewModule("Class Icon", 81, {
|
||||
classIconYOffset = 0,
|
||||
classIconFrameStrata = "MEDIUM",
|
||||
classIconFrameLevel = 5,
|
||||
classIconGroup = false,
|
||||
classIconGroupDirection = "DOWN"
|
||||
})
|
||||
|
||||
local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\"
|
||||
local classIcons = {
|
||||
["DRUID"] = classIconPath .. "inv_misc_monsterclaw_04",
|
||||
["DEATHKNIGHT"] = select(3, GetSpellInfo(49023)), --Might of Mograine
|
||||
["HUNTER"] = classIconPath .. "inv_weapon_bow_07",
|
||||
["MAGE"] = classIconPath .. "inv_staff_13",
|
||||
["PALADIN"] = classIconPath .. "inv_hammer_01",
|
||||
@@ -37,6 +41,11 @@ local specIcons = {
|
||||
[L["Feral"]] = select(3, GetSpellInfo(27545)), -- Cat Form
|
||||
[L["Restoration"]] = select(3, GetSpellInfo(5185)), -- Healing Touch
|
||||
},
|
||||
["DEATHKNIGHT"] = {
|
||||
[L["Unholy"]] = select(3, GetSpellInfo(48265)), -- Unholy Presence
|
||||
[L["Blood"]] = select(3, GetSpellInfo(48266)), -- Blood Presence
|
||||
[L["Frost"]] = select(3, GetSpellInfo(48263)), -- Frost Presence
|
||||
},
|
||||
["HUNTER"] = {
|
||||
[L["Beast Mastery"]] = select(3, GetSpellInfo(1515)), -- Tame Beast
|
||||
[L["Marksmanship"]] = select(3, GetSpellInfo(42243)), -- Volley
|
||||
@@ -82,9 +91,21 @@ local specIcons = {
|
||||
function Classicon:Initialize()
|
||||
self.frames = {}
|
||||
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
if Gladdy.db.classIconEnabled then
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
end
|
||||
end
|
||||
|
||||
function Classicon:UpdateFrameOnce()
|
||||
if Gladdy.db.classIconEnabled then
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function Classicon:CreateFrame(unit)
|
||||
@@ -95,6 +116,7 @@ function Classicon:CreateFrame(unit)
|
||||
classIcon.texture = classIcon:CreateTexture(nil, "BACKGROUND")
|
||||
classIcon.texture:SetAllPoints(classIcon)
|
||||
classIcon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
classIcon.texture.masked = true
|
||||
|
||||
classIcon.texture.overlay = classIcon:CreateTexture(nil, "BORDER")
|
||||
classIcon.texture.overlay:SetAllPoints(classIcon)
|
||||
@@ -113,14 +135,50 @@ function Classicon:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
|
||||
classIcon:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||
classIcon:SetFrameLevel(Gladdy.db.classIconFrameLevel)
|
||||
|
||||
classIcon:SetWidth(Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor)
|
||||
classIcon:SetHeight(Gladdy.db.classIconSize)
|
||||
|
||||
if Gladdy.db.classIconZoomed then
|
||||
if classIcon.texture.masked then
|
||||
classIcon.texture:SetMask(nil)
|
||||
classIcon.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
classIcon.texture.masked = nil
|
||||
end
|
||||
else
|
||||
if not classIcon.texture.masked then
|
||||
classIcon.texture:SetMask(nil)
|
||||
classIcon.texture:SetTexCoord(0,1,0,1)
|
||||
classIcon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
classIcon.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Gladdy:SetPosition(classIcon, unit, "classIconXOffset", "classIconYOffset", Classicon:LegacySetPosition(classIcon, unit), Classicon)
|
||||
|
||||
if (Gladdy.db.classIconGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit]:ClearAllPoints()
|
||||
if Gladdy.db.classIconGroupDirection == "RIGHT" then
|
||||
self.frames[unit]:SetPoint("LEFT", self.frames[previousUnit], "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "LEFT" then
|
||||
self.frames[unit]:SetPoint("RIGHT", self.frames[previousUnit], "LEFT", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "UP" then
|
||||
self.frames[unit]:SetPoint("BOTTOM", self.frames[previousUnit], "TOP", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "DOWN" then
|
||||
self.frames[unit]:SetPoint("TOP", self.frames[previousUnit], "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(classIcon, "classIconXOffset", "classIconYOffset", L["Class Icon"],
|
||||
{"TOPLEFT", "TOPLEFT"},
|
||||
@@ -137,6 +195,10 @@ function Classicon:UpdateFrame(unit)
|
||||
classIcon.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.classIconBorderColor))
|
||||
if Gladdy.db.classIconEnabled then
|
||||
classIcon:Show()
|
||||
if testAgain then
|
||||
Classicon:ResetUnit(unit)
|
||||
Classicon:ENEMY_SPOTTED(unit)
|
||||
end
|
||||
else
|
||||
classIcon:Hide()
|
||||
end
|
||||
@@ -161,10 +223,6 @@ function Classicon:UNIT_SPEC(unit, spec)
|
||||
classIcon.texture:SetTexture(specIcons[Gladdy.buttons[unit].class][spec])
|
||||
end
|
||||
|
||||
function Classicon:Test(unit)
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
end
|
||||
|
||||
function Classicon:ResetUnit(unit)
|
||||
local classIcon = self.frames[unit]
|
||||
if (not classIcon) then
|
||||
@@ -191,6 +249,7 @@ function Classicon:GetOptions()
|
||||
name = L["Show Spec Icon"],
|
||||
desc = L["Shows Spec Icon once spec is detected"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.classIconEnabled end,
|
||||
get = function() return Gladdy.db.classIconSpecIcon end,
|
||||
set = function(_, value)
|
||||
Gladdy.db.classIconSpecIcon = value
|
||||
@@ -205,25 +264,53 @@ function Classicon:GetOptions()
|
||||
end
|
||||
end
|
||||
},
|
||||
classIconGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group"] .. " " .. L["Class Icon"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.classIconEnabled end,
|
||||
}),
|
||||
classIconGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 6,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function()
|
||||
return not Gladdy.db.classIconGroup or not Gladdy.db.classIconEnabled
|
||||
end,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
order = 7,
|
||||
disabled = function() return not Gladdy.db.classIconEnabled end,
|
||||
args = {
|
||||
size = {
|
||||
type = "group",
|
||||
name = L["Icon size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Icon size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
classIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
classIconSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon size"],
|
||||
name = L["Size"],
|
||||
min = 3,
|
||||
max = 100,
|
||||
step = .1,
|
||||
|
||||
@@ -20,7 +20,9 @@ local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, {
|
||||
|
||||
function CombatIndicator:Initialize()
|
||||
self.frames = {}
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
if Gladdy.db.ciEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
end
|
||||
self.updateInterval = 0.05
|
||||
self.combatIndicatorIcon = select(3, GetSpellInfo(674))
|
||||
end
|
||||
@@ -57,6 +59,14 @@ function CombatIndicator:CreateFrame(unit)
|
||||
button.ciFrame = ciFrame
|
||||
end
|
||||
|
||||
function CombatIndicator:UpdateFrameOnce()
|
||||
if Gladdy.db.ciEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function CombatIndicator:UpdateFrame(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
local ciFrame = self.frames[unit]
|
||||
@@ -133,6 +143,7 @@ function CombatIndicator:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.ciEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
|
||||
+616
-391
File diff suppressed because it is too large
Load Diff
+209
-55
@@ -1,12 +1,14 @@
|
||||
local select = select
|
||||
local pairs,ipairs,tbl_sort,tinsert,format,rand = pairs,ipairs,table.sort,tinsert,format,math.random
|
||||
local str_gsub = string.gsub
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local DRData = LibStub("DRData-1.0-BCC")
|
||||
--local DRData = LibStub("DRData-1.0-BCC")
|
||||
local DRData = LibStub("DRList-1.0")
|
||||
local L = Gladdy.L
|
||||
local function defaultCategories()
|
||||
local categories = {}
|
||||
@@ -35,6 +37,7 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
||||
drXOffset = 0,
|
||||
drYOffset = 0,
|
||||
drIconSize = 36,
|
||||
drIconZoomed = false,
|
||||
drEnabled = true,
|
||||
drBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_Gloss",
|
||||
drBorderColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
@@ -55,6 +58,8 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
||||
drDuration = 18,
|
||||
drFrameStrata = "MEDIUM",
|
||||
drFrameLevel = 3,
|
||||
drGroup = false,
|
||||
drGroupDirection = "DOWN"
|
||||
})
|
||||
|
||||
local function getDiminishColor(dr)
|
||||
@@ -79,7 +84,7 @@ end
|
||||
|
||||
function Diminishings:Initialize()
|
||||
self.frames = {}
|
||||
self:RegisterMessage("UNIT_DEATH", "ResetUnit", "AURA_FADE", "UNIT_DESTROYED")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
end
|
||||
|
||||
function Diminishings:CreateFrame(unit)
|
||||
@@ -91,21 +96,21 @@ function Diminishings:CreateFrame(unit)
|
||||
|
||||
for i = 1, 16 do
|
||||
local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame)
|
||||
icon.drFrame = drFrame
|
||||
icon:Hide()
|
||||
icon:EnableMouse(false)
|
||||
icon:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||
icon:SetFrameLevel(Gladdy.db.drFrameLevel)
|
||||
icon.texture = icon:CreateTexture(nil, "BACKGROUND")
|
||||
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
icon.texture.masked = true
|
||||
icon.texture:SetAllPoints(icon)
|
||||
icon:SetScript("OnUpdate", function(self, elapsed)
|
||||
if (self.active) then
|
||||
if (self.running) then
|
||||
if (self.timeLeft <= 0) then
|
||||
if (self.factor == drFrame.tracked[self.dr]) then
|
||||
drFrame.tracked[self.dr] = 0
|
||||
end
|
||||
|
||||
self.drFrame.tracked[self.dr] = nil
|
||||
self.active = false
|
||||
self.running = false
|
||||
self.dr = nil
|
||||
self.diminishing = 1.0
|
||||
self.texture:SetTexture("")
|
||||
@@ -187,6 +192,22 @@ function Diminishings:UpdateFrame(unit)
|
||||
|
||||
Gladdy:SetPosition(drFrame, unit, "drXOffset", "drYOffset", Diminishings:LegacySetPosition(drFrame, unit), Diminishings)
|
||||
|
||||
if (Gladdy.db.drGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit]:ClearAllPoints()
|
||||
if Gladdy.db.classIconGroupDirection == "RIGHT" then
|
||||
self.frames[unit]:SetPoint("LEFT", self.frames[previousUnit], "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "LEFT" then
|
||||
self.frames[unit]:SetPoint("RIGHT", self.frames[previousUnit], "LEFT", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "UP" then
|
||||
self.frames[unit]:SetPoint("BOTTOM", self.frames[previousUnit], "TOP", 0, 0)
|
||||
elseif Gladdy.db.classIconGroupDirection == "DOWN" then
|
||||
self.frames[unit]:SetPoint("TOP", self.frames[previousUnit], "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(drFrame,"drXOffset", "drYOffset", L["Diminishings"],
|
||||
Gladdy.db.drGrowDirection == "RIGHT" and {"TOPLEFT", "TOPLEFT"} or {"TOPRIGHT", "TOPRIGHT"},
|
||||
@@ -196,6 +217,7 @@ function Diminishings:UpdateFrame(unit)
|
||||
0, "drEnabled")
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
for i = 1, 16 do
|
||||
local icon = drFrame["icon" .. i]
|
||||
|
||||
@@ -223,8 +245,13 @@ function Diminishings:UpdateFrame(unit)
|
||||
icon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor))
|
||||
end
|
||||
|
||||
icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16)
|
||||
icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16)
|
||||
if Gladdy.db.drIconZoomed then
|
||||
icon.cooldown:SetWidth(icon:GetWidth())
|
||||
icon.cooldown:SetHeight(icon:GetHeight())
|
||||
else
|
||||
icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16)
|
||||
icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16)
|
||||
end
|
||||
icon.cooldown:ClearAllPoints()
|
||||
icon.cooldown:SetPoint("CENTER", icon, "CENTER")
|
||||
if Gladdy.db.drDisableCircle then
|
||||
@@ -266,9 +293,27 @@ function Diminishings:UpdateFrame(unit)
|
||||
icon.border:SetTexture(Gladdy.db.drBorderStyle)
|
||||
end
|
||||
|
||||
--icon.texture:SetTexCoord(.1, .9, .1, .9)
|
||||
--icon.texture:SetPoint("TOPLEFT", icon, "TOPLEFT", 2, -2)
|
||||
--icon.texture:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT", -2, 2)
|
||||
if Gladdy.db.drIconZoomed then
|
||||
if icon.texture.masked then
|
||||
icon.texture:SetMask(nil)
|
||||
icon.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
icon.texture.masked = nil
|
||||
end
|
||||
else
|
||||
if not icon.texture.masked then
|
||||
icon.texture:SetMask(nil)
|
||||
icon.texture:SetTexCoord(0,1,0,1)
|
||||
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
icon.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if testAgain then
|
||||
Diminishings:ResetUnit(unit)
|
||||
Diminishings:Test(unit)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -283,6 +328,7 @@ function Diminishings:ResetUnit(unit)
|
||||
for i = 1, 16 do
|
||||
local icon = drFrame["icon" .. i]
|
||||
icon.active = false
|
||||
icon.running = false
|
||||
icon.timeLeft = 0
|
||||
icon.texture:SetTexture("")
|
||||
icon.timeText:SetText("")
|
||||
@@ -321,12 +367,123 @@ function Diminishings:Test(unit)
|
||||
amount = rand(1,3)
|
||||
index = rand(1, #enabledCategories[i].spellIDs)
|
||||
for _=1, amount do
|
||||
self:AuraGain(unit, enabledCategories[i].spellIDs[index])
|
||||
self:AuraFade(unit, enabledCategories[i].spellIDs[index])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[ testcases for show icon with icon.active = true and icon.running = false and no cooldown. Only when AuraFade start set icon.running = true and start cooldown
|
||||
SPELL_AURA_APPLIED
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890)
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 2637)
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890) a:AuraGain("arena1", 2637)
|
||||
expected: stale icon AND 1/2 dr
|
||||
SPELL_AURA_REMOVED
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraFade("arena1", 10890)
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraFade("arena1", 2637)
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraFade("arena1", 2637) a:AuraFade("arena1", 10890)
|
||||
expected: icon 1/2 AND 1/2 dr
|
||||
SPELL_AURA_REFRESH
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890) a:AuraGain("arena1", 10890)
|
||||
expected: icon 1/4 AND 1/4 dr
|
||||
two different spells with same DR applied and one fades
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890) a:AuraGain("arena1", 2094) a:AuraFade("arena1", 10890)
|
||||
expected: icon 1/4 AND 1/4 dr
|
||||
two different spells with same DR applied and both fade
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890) a:AuraGain("arena1", 2094) a:AuraFade("arena1", 10890) a:AuraFade("arena1", 2094)
|
||||
expected: icon 1/4 AND 1/4 dr
|
||||
three different spells with same DR applied and two fade
|
||||
Script: /run local a=LibStub("Gladdy").modules["Diminishings"] a:AuraGain("arena1", 10890) a:AuraGain("arena1", 2094) a:AuraGain("arena1", 5484) a:AuraFade("arena1", 10890) a:AuraFade("arena1", 2094)
|
||||
expected: icon 0 AND 0 dr
|
||||
--]]
|
||||
|
||||
function Diminishings:FindLastIcon(unit, drCat)
|
||||
local drFrame = self.frames[unit]
|
||||
if (not drFrame or not drCat) then
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.drCategories[drCat].enabled then
|
||||
return
|
||||
end
|
||||
local lastIcon
|
||||
for i = 1, 16 do
|
||||
local icon = drFrame["icon" .. i]
|
||||
if ((icon.active) and icon.dr and icon.dr == drCat) then
|
||||
lastIcon = icon
|
||||
break
|
||||
elseif not icon.active and not lastIcon then
|
||||
lastIcon = icon
|
||||
end
|
||||
end
|
||||
return lastIcon
|
||||
end
|
||||
|
||||
function Diminishings:PrepareIcon(unit, lastIcon, drCat, spellID)
|
||||
local drFrame = self.frames[unit]
|
||||
|
||||
lastIcon.dr = drCat
|
||||
lastIcon.diminishing = drFrame.tracked[drCat]
|
||||
if Gladdy.db.drBorderColorsEnabled then
|
||||
lastIcon.border:SetVertexColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.drBorderColor))
|
||||
end
|
||||
|
||||
if Gladdy.db.drCategories[drCat].forceIcon then
|
||||
lastIcon.texture:SetTexture(Gladdy.db.drCategories[drCat].icon)
|
||||
else
|
||||
lastIcon.texture:SetTexture(select(3, GetSpellInfo(spellID)))
|
||||
end
|
||||
|
||||
if Gladdy.db.drFontColorsEnabled then
|
||||
lastIcon.timeText:SetTextColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor))
|
||||
end
|
||||
lastIcon.drLevelText:SetText("")
|
||||
if Gladdy.db.drLevelTextColorsEnabled then
|
||||
lastIcon.drLevelText:SetTextColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor))
|
||||
end
|
||||
lastIcon.drLevelText:SetText(getDiminishText(lastIcon.diminishing))
|
||||
lastIcon.active = true
|
||||
self:Positionate(unit)
|
||||
lastIcon:Show()
|
||||
end
|
||||
|
||||
function Diminishings:AuraGain(unit, spellID)
|
||||
local drFrame = self.frames[unit]
|
||||
local drCat = DRData:GetSpellCategory(spellID)
|
||||
if (not drFrame or not drCat) then
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.drCategories[drCat].enabled then
|
||||
return
|
||||
end
|
||||
|
||||
-- due to dynamic DR we reset the DR here if dr == 0
|
||||
if not drFrame.tracked[drCat] or drFrame.tracked[drCat] == 0 then
|
||||
drFrame.tracked[drCat] = DRData:NextDR(1)
|
||||
else
|
||||
drFrame.tracked[drCat] = DRData:NextDR(drFrame.tracked[drCat] == 1.0 and 1 or drFrame.tracked[drCat] == 0.5 and 2 or 3)
|
||||
end
|
||||
|
||||
-- add icon with no timer
|
||||
local lastIcon = Diminishings:FindLastIcon(unit, drCat)
|
||||
if not lastIcon then return end
|
||||
|
||||
Diminishings:PrepareIcon(unit, lastIcon, drCat, spellID)
|
||||
|
||||
|
||||
lastIcon.running = false
|
||||
lastIcon.cooldown:Hide()
|
||||
lastIcon.cooldown:SetCooldown(0, 0)
|
||||
lastIcon.timeText:SetText("")
|
||||
end
|
||||
|
||||
function Diminishings:AuraFade(unit, spellID)
|
||||
local drFrame = self.frames[unit]
|
||||
local drCat = DRData:GetSpellCategory(spellID)
|
||||
@@ -337,49 +494,16 @@ function Diminishings:AuraFade(unit, spellID)
|
||||
return
|
||||
end
|
||||
|
||||
local lastIcon
|
||||
for i = 1, 16 do
|
||||
local icon = drFrame["icon" .. i]
|
||||
if (icon.active and icon.dr and icon.dr == drCat) then
|
||||
lastIcon = icon
|
||||
break
|
||||
elseif not icon.active and not lastIcon then
|
||||
lastIcon = icon
|
||||
lastIcon.diminishing = 1.0
|
||||
end
|
||||
end
|
||||
-- find icon and start timer
|
||||
local lastIcon = Diminishings:FindLastIcon(unit, drCat)
|
||||
if not lastIcon then return end
|
||||
lastIcon.dr = drCat
|
||||
|
||||
Diminishings:PrepareIcon(unit, lastIcon, drCat, spellID)
|
||||
|
||||
lastIcon.timeLeft = Gladdy.db.drDuration
|
||||
lastIcon.diminishing = DRData:NextDR(lastIcon.diminishing)
|
||||
if Gladdy.db.drBorderColorsEnabled then
|
||||
lastIcon.border:SetVertexColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.drBorderColor))
|
||||
end
|
||||
lastIcon.cooldown:Show()
|
||||
lastIcon.cooldown:SetCooldown(GetTime(), Gladdy.db.drDuration)
|
||||
if Gladdy.db.drCategories[drCat].forceIcon then
|
||||
lastIcon.texture:SetTexture(Gladdy.db.drCategories[drCat].icon)
|
||||
else
|
||||
lastIcon.texture:SetTexture(select(3, GetSpellInfo(spellID)))
|
||||
end
|
||||
|
||||
if Gladdy.db.drFontColorsEnabled then
|
||||
lastIcon.timeText:SetTextColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor))
|
||||
end
|
||||
|
||||
lastIcon.drLevelText:SetText(getDiminishText(lastIcon.diminishing))
|
||||
if Gladdy.db.drLevelTextColorsEnabled then
|
||||
lastIcon.drLevelText:SetTextColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor))
|
||||
end
|
||||
|
||||
lastIcon.active = true
|
||||
self:Positionate(unit)
|
||||
lastIcon:Show()
|
||||
lastIcon.running = true
|
||||
end
|
||||
|
||||
function Diminishings:Positionate(unit)
|
||||
@@ -434,15 +558,37 @@ function Diminishings:GetOptions()
|
||||
name = L["DR Duration"],
|
||||
desc = L["Change the DR Duration in seconds (DR is dynamic between 15-20s)"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.drEnabled end,
|
||||
min = 15,
|
||||
max = 20,
|
||||
step = .1,
|
||||
}),
|
||||
drGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group"] .. " " .. L["Class Icon"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.drEnabled end,
|
||||
}),
|
||||
drGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 6,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function()
|
||||
return not Gladdy.db.drGroup or not Gladdy.db.drEnabled
|
||||
end,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.drEnabled end,
|
||||
args = {
|
||||
icon = {
|
||||
type = "group",
|
||||
@@ -454,11 +600,18 @@ function Diminishings:GetOptions()
|
||||
name = L["Icon"],
|
||||
order = 4,
|
||||
},
|
||||
drIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 5,
|
||||
width = "full",
|
||||
}),
|
||||
drIconSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon Size"],
|
||||
desc = L["Size of the DR Icons"],
|
||||
order = 5,
|
||||
order = 6,
|
||||
min = 5,
|
||||
max = 80,
|
||||
step = 1,
|
||||
@@ -468,7 +621,7 @@ function Diminishings:GetOptions()
|
||||
type = "range",
|
||||
name = L["Icon Width Factor"],
|
||||
desc = L["Stretches the icon"],
|
||||
order = 6,
|
||||
order = 7,
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
@@ -478,7 +631,7 @@ function Diminishings:GetOptions()
|
||||
type = "range",
|
||||
name = L["Icon Padding"],
|
||||
desc = L["Space between Icons"],
|
||||
order = 7,
|
||||
order = 8,
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
@@ -781,6 +934,7 @@ function Diminishings:GetOptions()
|
||||
type = "group",
|
||||
name = L["Categories"],
|
||||
order = 6,
|
||||
disabled = function() return not Gladdy.db.drEnabled end,
|
||||
args = Diminishings:CategoryOptions(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ local function table_copy(t, str)
|
||||
end
|
||||
|
||||
local ExportImport = Gladdy:NewModule("Export Import", nil, {
|
||||
expansion = Gladdy.expansion,
|
||||
})
|
||||
|
||||
local export = AceGUI:Create("Frame")
|
||||
@@ -111,6 +112,19 @@ local deletedOptions = { -- backwards compatibility
|
||||
trinketPos = true,
|
||||
padding = true,
|
||||
growUp = true,
|
||||
powerBarFontSize = true,
|
||||
["38373"] = true, -- The Beast Within (Auras)
|
||||
["34692"] = true, -- The Beast Within (Cooldowns)
|
||||
}
|
||||
|
||||
local expansionSpecific = {
|
||||
"drCategories",
|
||||
"auraListDefault",
|
||||
"auraListInterrupts",
|
||||
"trackedDebuffs",
|
||||
"trackedBuffs",
|
||||
"cooldownCooldowns",
|
||||
"cooldownCooldownsOrder",
|
||||
}
|
||||
|
||||
local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg)
|
||||
@@ -161,7 +175,7 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
||||
end
|
||||
|
||||
if errorFound then
|
||||
return false, errorMsg
|
||||
--return false, errorMsg
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -226,17 +240,29 @@ function ExportImport:ApplyImport(t, table, str)
|
||||
if (not t.newLayout) then
|
||||
table.newLayout = false
|
||||
end
|
||||
if not t.expansion then
|
||||
t.expansion = "BCC"
|
||||
end
|
||||
end
|
||||
for k,v in pairs(t) do
|
||||
if type(v) == "table" then
|
||||
if (table[k] ~= nil) then
|
||||
ExportImport:ApplyImport(v, table[k], str .. "." .. k)
|
||||
else
|
||||
Gladdy:Debug("ERROR", "ApplyImport failed for", str .. "." .. k)
|
||||
local skip = k == "expansion"
|
||||
if t.expansion and t.expansion ~= table.expansion then
|
||||
if Gladdy:contains(k, expansionSpecific) then
|
||||
Gladdy:Debug("WARN", "ExportImport:ApplyImport", "skipped", k, "- import string expansion is", t.expansion, "- current expansion is", table.expansion)
|
||||
skip = true
|
||||
end
|
||||
end
|
||||
if not skip then
|
||||
if type(v) == "table" then
|
||||
if (table[k] ~= nil) then
|
||||
ExportImport:ApplyImport(v, table[k], str .. "." .. k)
|
||||
else
|
||||
Gladdy:Debug("ERROR", "ExportImport:ApplyImport", "failed for", str .. "." .. k)
|
||||
end
|
||||
|
||||
else
|
||||
table[k] = v
|
||||
else
|
||||
table[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+304
-77
@@ -1,5 +1,6 @@
|
||||
local pairs = pairs
|
||||
local floor = math.floor
|
||||
local pairs, ipairs = pairs, ipairs
|
||||
local floor, abs = math.floor, math.abs
|
||||
local str_find, str_gsub, str_sub, tinsert = string.find, string.gsub, string.sub, table.insert
|
||||
local UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost = UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
@@ -16,6 +17,15 @@ local Healthbar = Gladdy:NewModule("Health Bar", 100, {
|
||||
healthBarBorderSize = 9,
|
||||
healthBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
healthBarBgColor = { r = 0, g = 0, b = 0, a = 0.4 },
|
||||
healthBarClassColored = true,
|
||||
healthBarColoredByCurrentHp = false,
|
||||
healthBarStatusBarColorMax = { r = 0, g = 1, b = 0, a = 1 },
|
||||
healthBarStatusBarColorMid = { r = 1, g = 1, b = 0, a = 1 },
|
||||
healthBarStatusBarColorMin = { r = 1, g = 0, b = 0, a = 1 },
|
||||
healthFrameStrata = "MEDIUM",
|
||||
healthFrameLevel = 1,
|
||||
healthBarStealthColor = { r = 0.66, g = 0.66, b = 0.66, a = 1 },
|
||||
--font
|
||||
healthBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
healthBarNameFontSize = 12,
|
||||
healthBarHealthFontSize = 12,
|
||||
@@ -24,14 +34,23 @@ local Healthbar = Gladdy:NewModule("Health Bar", 100, {
|
||||
healthActual = false,
|
||||
healthMax = true,
|
||||
healthPercentage = true,
|
||||
healthFrameStrata = "MEDIUM",
|
||||
healthFrameLevel = 1,
|
||||
healthCustomTagsEnabled = false,
|
||||
healthTextLeft = "[name]",
|
||||
healthTextRight = "[percent|status]",
|
||||
healthTextLeftOutline = false,
|
||||
healthTextRightOutline = false,
|
||||
healthTextLeftVOffset = 0,
|
||||
healthTextLeftHOffset = 5,
|
||||
healthTextRightVOffset = 0,
|
||||
healthTextRightHOffset = -5,
|
||||
})
|
||||
|
||||
function Healthbar:Initialize()
|
||||
self.frames = {}
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("ENEMY_STEALTH")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
end
|
||||
@@ -65,52 +84,42 @@ function Healthbar:CreateFrame(unit)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize, Gladdy.db.healthTextLeftOutline and "OUTLINE")
|
||||
healthBar.nameText:Show()
|
||||
end
|
||||
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||
healthBar.nameText:SetShadowOffset(1, -1)
|
||||
healthBar.nameText:SetShadowColor(0, 0, 0, 1)
|
||||
healthBar.nameText:SetJustifyH("CENTER")
|
||||
healthBar.nameText:SetPoint("LEFT", 5, 0)
|
||||
healthBar.nameText:SetPoint("LEFT", Gladdy.db.healthTextLeftHOffset, Gladdy.db.healthTextLeftVOffset)
|
||||
|
||||
healthBar.healthText = healthBar:CreateFontString(nil, "LOW")
|
||||
if (Gladdy.db.healthBarHealthFontSize < 1) then
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize, Gladdy.db.healthTextRightOutline and "OUTLINE")
|
||||
healthBar.healthText:Hide()
|
||||
end
|
||||
healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||
healthBar.healthText:SetShadowOffset(1, -1)
|
||||
healthBar.healthText:SetShadowColor(0, 0, 0, 1)
|
||||
healthBar.healthText:SetJustifyH("CENTER")
|
||||
healthBar.healthText:SetPoint("RIGHT", -5, 0)
|
||||
healthBar.healthText:SetPoint("RIGHT", Gladdy.db.healthTextRightHOffset, Gladdy.db.healthTextRightVOffset)
|
||||
|
||||
healthBar.unit = unit
|
||||
self.frames[unit] = healthBar
|
||||
button.healthBar = healthBar
|
||||
self:ResetUnit(unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_HEALTH", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
||||
healthBar:SetScript("OnEvent", Healthbar.OnEvent)
|
||||
end
|
||||
|
||||
function Healthbar.OnEvent(self, event, unit)
|
||||
local isDead = UnitExists(unit) and UnitIsDeadOrGhost(unit)
|
||||
if event == "UNIT_HEALTH" then
|
||||
if isDead then
|
||||
Gladdy:SendMessage("UNIT_DEATH", unit)
|
||||
return
|
||||
end
|
||||
local health = UnitHealth(unit)
|
||||
local healthMax = UnitHealthMax(unit)
|
||||
self.hp:SetMinMaxValues(0, healthMax)
|
||||
self.hp:SetValue(UnitHealth(unit))
|
||||
Healthbar:SetHealthText(self, health, healthMax)
|
||||
elseif event == "UNIT_MAXHEALTH" then
|
||||
local isDead = UnitExists(unit) and UnitIsDeadOrGhost(unit) and not Gladdy:isFeignDeath(unit)
|
||||
if event == "UNIT_HEALTH_FREQUENT" or event == "UNIT_MAXHEALTH" then
|
||||
if isDead then
|
||||
Gladdy:SendMessage("UNIT_DEATH", unit)
|
||||
return
|
||||
@@ -119,35 +128,119 @@ function Healthbar.OnEvent(self, event, unit)
|
||||
local healthMax = UnitHealthMax(unit)
|
||||
self.hp:SetMinMaxValues(0, healthMax)
|
||||
self.hp:SetValue(health)
|
||||
Healthbar:SetHealthText(self, health, healthMax)
|
||||
self.hp.current = health
|
||||
self.hp.max = healthMax
|
||||
Healthbar:SetText(unit, health, healthMax)
|
||||
Healthbar:SetHealthStatusBarColor(unit, self.hp.current, self.hp.max)
|
||||
elseif event == "UNIT_NAME_UPDATE" then
|
||||
local name = UnitName(unit)
|
||||
Gladdy.buttons[unit].name = name
|
||||
if Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then
|
||||
self.nameText:SetText(name)
|
||||
end
|
||||
Healthbar:SetText(unit, self.hp.current, self.hp.max)
|
||||
end
|
||||
if not Gladdy.buttons[unit].class then
|
||||
Gladdy:SpotEnemy(unit, true)
|
||||
end
|
||||
end
|
||||
|
||||
function Healthbar:SetHealthText(healthBar, health, healthMax)
|
||||
local healthText = ""
|
||||
local healthPercentage = floor(health * 100 / healthMax)
|
||||
local function getGradient(start, ending, percentage, factor)
|
||||
return start * abs(-2 * percentage + 1) + ending * factor
|
||||
end
|
||||
|
||||
if health == 0 and UnitExists(healthBar.unit) and UnitIsDeadOrGhost(healthBar.unit) then
|
||||
self:UNIT_DEATH(healthBar.unit)
|
||||
-- /run LibStub("Gladdy").modules["Health Bar"]:SetHealthStatusBarColor("arena1", 51, 100)
|
||||
local rMax, gMax, bMax, rMid, gMid, bMid, rMin, gMin, bMin, rNow, gNow, bNow, percentage, factor, stealthAlpha
|
||||
function Healthbar:SetHealthStatusBarColor(unit, health, healthMax)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button or not health or not healthMax then
|
||||
return
|
||||
end
|
||||
|
||||
if (Gladdy.db.healthPercentage) then
|
||||
healthText = ("%d%%"):format(healthPercentage)
|
||||
local healthBar = Gladdy.buttons[unit].healthBar
|
||||
if not healthBar.hp.oorFactor then
|
||||
healthBar.hp.oorFactor = 1
|
||||
end
|
||||
|
||||
healthBar.hp:SetMinMaxValues(0, healthMax)
|
||||
healthBar.hp:SetValue(health)
|
||||
|
||||
if healthBar.hp.stealth then
|
||||
stealthAlpha = Gladdy.db.healthBarStealthColor.a < Gladdy.db.healthBarBgColor.a and Gladdy.db.healthBarStealthColor.a or Gladdy.db.healthBarBgColor.a
|
||||
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor, nil, stealthAlpha))
|
||||
healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.healthBarStealthColor))
|
||||
return
|
||||
else
|
||||
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor))
|
||||
end
|
||||
|
||||
if not Gladdy.db.healthBarClassColored then
|
||||
if Gladdy.db.healthBarColoredByCurrentHp then
|
||||
rMax, gMax, bMax = Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMax)
|
||||
rMid, gMid, bMid = Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMid)
|
||||
rMin, gMin, bMin = Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMin)
|
||||
percentage = health / healthMax
|
||||
if percentage == 0.5 then
|
||||
rNow, gNow, bNow = Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMid, healthBar.hp.oorFactor)
|
||||
elseif percentage < 0.5 then
|
||||
factor = percentage * 2
|
||||
rNow = getGradient(rMin, rMid, percentage, factor)
|
||||
gNow = getGradient(gMin, gMid, percentage, factor)
|
||||
bNow = getGradient(bMin, bMid, percentage, factor)
|
||||
elseif percentage > 0.5 then
|
||||
factor = ((healthMax - health) / healthMax) * 2
|
||||
rNow = getGradient(rMax, rMid, percentage, factor)
|
||||
gNow = getGradient(gMax, gMid, percentage, factor)
|
||||
bNow = getGradient(bMax, bMid, percentage, factor)
|
||||
end
|
||||
healthBar.hp:SetStatusBarColor(rNow / healthBar.hp.oorFactor, gNow / healthBar.hp.oorFactor, bNow / healthBar.hp.oorFactor, 1)
|
||||
else
|
||||
healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMax, healthBar.hp.oorFactor))
|
||||
end
|
||||
end
|
||||
if button.class and Gladdy.db.healthBarClassColored then
|
||||
healthBar.hp:SetStatusBarColor(
|
||||
RAID_CLASS_COLORS[button.class].r / healthBar.hp.oorFactor,
|
||||
RAID_CLASS_COLORS[button.class].g / healthBar.hp.oorFactor,
|
||||
RAID_CLASS_COLORS[button.class].b / healthBar.hp.oorFactor, 1)
|
||||
end
|
||||
end
|
||||
|
||||
function Healthbar:SetHealthText(healthBar, health, healthMax)
|
||||
local healthText = ""
|
||||
local healthPercentage = health and healthMax and floor(health * 100 / healthMax)
|
||||
|
||||
if health == 0 and UnitExists(healthBar.unit) and UnitIsDeadOrGhost(healthBar.unit) and not Gladdy:isFeignDeath(healthBar.unit) then
|
||||
self:UNIT_DEATH(healthBar.unit)
|
||||
return
|
||||
end
|
||||
if (Gladdy.db.healthPercentage and healthPercentage) then
|
||||
healthText = ("%d%%"):format(healthPercentage)
|
||||
end
|
||||
healthBar.healthText:SetText(healthText)
|
||||
end
|
||||
|
||||
function Healthbar:SetText(unit, health, healthMax, status)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not Gladdy.buttons[unit] then
|
||||
return
|
||||
end
|
||||
if Gladdy.db.healthCustomTagsEnabled then
|
||||
button.healthBar.nameText:SetText(Gladdy:SetTag(unit, Gladdy.db.healthTextLeft, health, healthMax, status))
|
||||
button.healthBar.healthText:SetText(Gladdy:SetTag(unit, Gladdy.db.healthTextRight, health, healthMax, status))
|
||||
else
|
||||
if Gladdy.db.healthName then
|
||||
if Gladdy.db.healthNameToArenaId then
|
||||
button.healthBar.nameText:SetText(str_gsub(unit, "arena", ""))
|
||||
else
|
||||
button.healthBar.nameText:SetText(Gladdy.buttons[unit].name)
|
||||
end
|
||||
end
|
||||
if status then
|
||||
button.healthBar.healthText:SetText(status)
|
||||
else
|
||||
Healthbar:SetHealthText(button.healthBar, health, healthMax)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Healthbar:UpdateFrame(unit)
|
||||
local healthBar = self.frames[unit]
|
||||
if (not healthBar) then
|
||||
@@ -178,15 +271,15 @@ function Healthbar:UpdateFrame(unit)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize, Gladdy.db.healthTextRightOutline and "OUTLINE")
|
||||
healthBar.healthText:Show()
|
||||
end
|
||||
if (Gladdy.db.healthBarNameFontSize < 1) then
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize)
|
||||
if Gladdy.db.healthName then
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize, Gladdy.db.healthTextLeftOutline and "OUTLINE")
|
||||
if Gladdy.db.healthName or Gladdy.db.healthCustomTagsEnabled then
|
||||
healthBar.nameText:Show()
|
||||
else
|
||||
healthBar.nameText:Hide()
|
||||
@@ -194,6 +287,10 @@ function Healthbar:UpdateFrame(unit)
|
||||
end
|
||||
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||
healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||
healthBar.nameText:SetPoint("LEFT", Gladdy.db.healthTextLeftHOffset, Gladdy.db.healthTextLeftVOffset)
|
||||
healthBar.healthText:SetPoint("RIGHT", Gladdy.db.healthTextRightHOffset, Gladdy.db.healthTextRightVOffset)
|
||||
|
||||
Healthbar:SetHealthStatusBarColor(unit, healthBar.hp.current, healthBar.hp.max)
|
||||
end
|
||||
|
||||
function Healthbar:ResetUnit(unit)
|
||||
@@ -206,6 +303,8 @@ function Healthbar:ResetUnit(unit)
|
||||
healthBar.nameText:SetText("")
|
||||
healthBar.healthText:SetText("")
|
||||
healthBar.hp:SetValue(0)
|
||||
healthBar.hp.current = nil
|
||||
healthBar.hp.max = nil
|
||||
end
|
||||
|
||||
function Healthbar:Test(unit)
|
||||
@@ -215,17 +314,30 @@ function Healthbar:Test(unit)
|
||||
return
|
||||
end
|
||||
|
||||
self:JOINED_ARENA()
|
||||
Gladdy:SendMessage("UNIT_HEALTH", unit, button.health, button.healthMax)
|
||||
healthBar.hp.current = button.health
|
||||
healthBar.hp.max = button.healthMax
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
self:UNIT_HEALTH(unit, button.health, button.healthMax)
|
||||
self:SetText(unit, button.health, button.healthMax)
|
||||
healthBar.hp:SetValue(button.health)
|
||||
if unit == "arena1" then
|
||||
self:UNIT_DEATH(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function Healthbar:UNIT_SPEC(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
self:SetText(unit, button.healthBar.hp.current, button.healthBar.hp.max)
|
||||
--button.healthBar.nameText:SetText(Gladdy:SetTag(unit, Gladdy.db.healthTextLeft, button.health, button.healthMax))
|
||||
end
|
||||
|
||||
function Healthbar:JOINED_ARENA()
|
||||
if Gladdy.db.healthNameToArenaId and Gladdy.db.healthName then
|
||||
for i=1,Gladdy.curBracket do
|
||||
local healthBar = self.frames["arena" .. i]
|
||||
healthBar.nameText:SetText(i)
|
||||
end
|
||||
for i=1,Gladdy.curBracket do
|
||||
local unit = "arena" .. i
|
||||
self:SetText(unit, self.frames[unit].hp.current, self.frames[unit].hp.max)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -241,36 +353,23 @@ function Healthbar:ENEMY_SPOTTED(unit)
|
||||
local healthMax = UnitHealthMax(unit)
|
||||
healthBar.hp:SetMinMaxValues(0, healthMax)
|
||||
healthBar.hp:SetValue(health)
|
||||
Healthbar:SetHealthText(healthBar, health, healthMax)
|
||||
end
|
||||
if button.name and Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then
|
||||
healthBar.nameText:SetText(button.name)
|
||||
end
|
||||
|
||||
if button.class then
|
||||
healthBar.hp:SetStatusBarColor(RAID_CLASS_COLORS[button.class].r, RAID_CLASS_COLORS[button.class].g, RAID_CLASS_COLORS[button.class].b, 1)
|
||||
healthBar.hp.current = health
|
||||
healthBar.hp.max = healthMax
|
||||
end
|
||||
Healthbar:SetText(unit, healthBar.hp.current, healthBar.hp.max)
|
||||
Healthbar:SetHealthStatusBarColor(unit, healthBar.hp.current, healthBar.hp.max)
|
||||
end
|
||||
|
||||
function Healthbar:UNIT_HEALTH(unit, health, healthMax)
|
||||
function Healthbar:ENEMY_STEALTH(unit, stealth)
|
||||
local healthBar = self.frames[unit]
|
||||
if (not healthBar) then
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not healthBar or not button) then
|
||||
return
|
||||
end
|
||||
if not Gladdy.buttons[unit].class then
|
||||
Gladdy:SpotEnemy(unit, true)
|
||||
end
|
||||
Gladdy:SendMessage("UNIT_HEALTH", unit, health, healthMax)
|
||||
|
||||
local healthPercentage = floor(health * 100 / healthMax)
|
||||
local healthText = ""
|
||||
healthBar.hp.stealth = stealth
|
||||
|
||||
if (Gladdy.db.healthPercentage) then
|
||||
healthText = ("%d%%"):format(healthPercentage)
|
||||
end
|
||||
|
||||
healthBar.healthText:SetText(healthText)
|
||||
healthBar.hp:SetValue(healthPercentage)
|
||||
Healthbar:SetHealthStatusBarColor(unit, healthBar.hp.current, healthBar.hp.max)
|
||||
end
|
||||
|
||||
function Healthbar:UNIT_DEATH(unit)
|
||||
@@ -280,7 +379,8 @@ function Healthbar:UNIT_DEATH(unit)
|
||||
end
|
||||
|
||||
healthBar.hp:SetValue(0)
|
||||
healthBar.healthText:SetText(L["DEAD"])
|
||||
healthBar.hp.current = 0
|
||||
Healthbar:SetText(unit, 0, 100, L["DEAD"])
|
||||
end
|
||||
|
||||
function Healthbar:UNIT_DESTROYED(unit)
|
||||
@@ -290,8 +390,8 @@ function Healthbar:UNIT_DESTROYED(unit)
|
||||
end
|
||||
|
||||
healthBar.hp:SetValue(0)
|
||||
healthBar.healthText:SetText(L["LEAVE"])
|
||||
healthBar.nameText:SetText("")
|
||||
healthBar.hp.current = 0
|
||||
Healthbar:SetText(unit, 0, 100, L["LEAVE"])
|
||||
end
|
||||
|
||||
local function option(params)
|
||||
@@ -307,8 +407,10 @@ local function option(params)
|
||||
if Gladdy.db.healthBarBorderSize > Gladdy.db.healthBarHeight/2 then
|
||||
Gladdy.db.healthBarBorderSize = Gladdy.db.healthBarHeight/2
|
||||
end
|
||||
for i=1,Gladdy.curBracket do
|
||||
Healthbar:Test("arena" .. i)
|
||||
if Gladdy.frame.testing then
|
||||
for i=1,Gladdy.curBracket do
|
||||
Healthbar:Test("arena" .. i)
|
||||
end
|
||||
end
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
@@ -362,19 +464,76 @@ function Healthbar:GetOptions()
|
||||
dialogControl = "LSM30_Statusbar",
|
||||
values = AceGUIWidgetLSMlists.statusbar,
|
||||
}),
|
||||
},
|
||||
},
|
||||
barColor = {
|
||||
type = "group",
|
||||
name = L["Bar Color"],
|
||||
order = 2,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Color"],
|
||||
order = 1,
|
||||
},
|
||||
healthBarClassColored = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Class colored"] .. " " .. L["Health Bar"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
healthBarStealthColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Stealth Color"],
|
||||
order = 3,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
healthBarBgColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Background color"],
|
||||
desc = L["Color of the status bar background"],
|
||||
order = 5,
|
||||
order = 4,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Custom Colors"],
|
||||
order = 10,
|
||||
},
|
||||
healthBarColoredByCurrentHp = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable Custom Colors"],
|
||||
order = 11,
|
||||
width = "full",
|
||||
disabled = function() return Gladdy.db.healthBarClassColored end,
|
||||
}),
|
||||
healthBarStatusBarColorMax = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["100%"],
|
||||
order = 12,
|
||||
hasAlpha = false,
|
||||
disabled = function() return Gladdy.db.healthBarClassColored end,
|
||||
}),
|
||||
healthBarStatusBarColorMid = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["50%"],
|
||||
order = 13,
|
||||
hasAlpha = false,
|
||||
disabled = function() return Gladdy.db.healthBarClassColored end,
|
||||
}),
|
||||
healthBarStatusBarColorMin = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["0%"],
|
||||
order = 14,
|
||||
hasAlpha = false,
|
||||
disabled = function() return Gladdy.db.healthBarClassColored end,
|
||||
}),
|
||||
},
|
||||
},
|
||||
font = {
|
||||
type = "group",
|
||||
name = L["Font"],
|
||||
order = 2,
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
@@ -396,11 +555,28 @@ function Healthbar:GetOptions()
|
||||
order = 12,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
healthTextLeftOutline = option({
|
||||
type = "toggle",
|
||||
name = L["Left Font Outline"],
|
||||
order = 13,
|
||||
width = "full",
|
||||
}),
|
||||
healthTextRightOutline = option({
|
||||
type = "toggle",
|
||||
name = L["Right Font Outline"],
|
||||
order = 14,
|
||||
width = "full",
|
||||
}),
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 20,
|
||||
},
|
||||
healthBarNameFontSize = option({
|
||||
type = "range",
|
||||
name = L["Name font size"],
|
||||
desc = L["Size of the name text"],
|
||||
order = 13,
|
||||
order = 21,
|
||||
step = 0.1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
@@ -410,18 +586,59 @@ function Healthbar:GetOptions()
|
||||
type = "range",
|
||||
name = L["Health font size"],
|
||||
desc = L["Size of the health text"],
|
||||
order = 14,
|
||||
order = 22,
|
||||
step = 0.1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
headerOffsets = {
|
||||
type = "header",
|
||||
name = L["Offsets"],
|
||||
order = 30,
|
||||
},
|
||||
healthTextLeftVOffset = option({
|
||||
type = "range",
|
||||
name = L["Left Text Vertical Offset"],
|
||||
order = 31,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
healthTextLeftHOffset = option({
|
||||
type = "range",
|
||||
name = L["Left Text Horizontal Offset"],
|
||||
order = 32,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
healthTextRightVOffset = option({
|
||||
type = "range",
|
||||
name = L["Right Text Vertical Offset"],
|
||||
order = 33,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
healthTextRightHOffset = option({
|
||||
type = "range",
|
||||
name = L["Right Text Horizontal Offset"],
|
||||
order = 34,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
border = {
|
||||
type = "group",
|
||||
name = L["Border"],
|
||||
order = 3,
|
||||
order = 4,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
@@ -457,7 +674,7 @@ function Healthbar:GetOptions()
|
||||
frameStrata = {
|
||||
type = "group",
|
||||
name = L["Frame Strata and Level"],
|
||||
order = 4,
|
||||
order = 5,
|
||||
args = {
|
||||
headerAuraLevel = {
|
||||
type = "header",
|
||||
@@ -486,7 +703,7 @@ function Healthbar:GetOptions()
|
||||
healthValues = {
|
||||
type = "group",
|
||||
name = L["Health Bar Text"],
|
||||
order = 5,
|
||||
order = 6,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
@@ -499,6 +716,7 @@ function Healthbar:GetOptions()
|
||||
desc = L["Show the units name"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
disabled = function() return Gladdy.db.healthCustomTagsEnabled end,
|
||||
}),
|
||||
healthNameToArenaId = option({
|
||||
type = "toggle",
|
||||
@@ -506,7 +724,7 @@ function Healthbar:GetOptions()
|
||||
desc = L["Show 1-5 as name instead"],
|
||||
order = 3,
|
||||
width = "full",
|
||||
disabled = function() return not Gladdy.db.healthName end
|
||||
disabled = function() return not Gladdy.db.healthName or Gladdy.db.healthCustomTagsEnabled end,
|
||||
}),
|
||||
healthPercentage = option({
|
||||
type = "toggle",
|
||||
@@ -514,7 +732,16 @@ function Healthbar:GetOptions()
|
||||
desc = L["Show health percentage on the health bar"],
|
||||
order = 6,
|
||||
width = "full",
|
||||
disabled = function() return Gladdy.db.healthCustomTagsEnabled end,
|
||||
}),
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Custom Tags"],
|
||||
order = 10,
|
||||
},
|
||||
healthCustomTagsEnabled = Gladdy:GetTagOption(L["Custom Tags Enabled"], 11, nil, option, true),
|
||||
healthTextLeft = Gladdy:GetTagOption(L["Left Text"], 12, "healthCustomTagsEnabled", option),
|
||||
healthTextRight = Gladdy:GetTagOption(L["Right Text"], 13, "healthCustomTagsEnabled", option),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
+26
-11
@@ -31,11 +31,25 @@ local Pets = Gladdy:NewModule("Pets", nil, {
|
||||
|
||||
function Pets:Initialize()
|
||||
self.frames = {}
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("PET_SPOTTED")
|
||||
self:RegisterMessage("PET_DESTROYED")
|
||||
self:RegisterMessage("PET_STEALTH")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
if Gladdy.db.petEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("PET_SPOTTED")
|
||||
self:RegisterMessage("PET_DESTROYED")
|
||||
self:RegisterMessage("PET_STEALTH")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
end
|
||||
end
|
||||
|
||||
function Pets:UpdateFrameOnce()
|
||||
if Gladdy.db.petEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("PET_SPOTTED")
|
||||
self:RegisterMessage("PET_DESTROYED")
|
||||
self:RegisterMessage("PET_STEALTH")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function Pets:JOINED_ARENA()
|
||||
@@ -219,7 +233,7 @@ function Pets:CreateFrame(unitId)
|
||||
healthBar.unit = unit
|
||||
button.healthBar = healthBar
|
||||
|
||||
healthBar:RegisterUnitEvent("UNIT_HEALTH", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_PORTRAIT_UPDATE", unit)
|
||||
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
||||
@@ -375,11 +389,17 @@ function Pets:GetOptions()
|
||||
desc = L["Enables Pets module"],
|
||||
order = 3,
|
||||
}),
|
||||
petGroup = option({
|
||||
type = "toggle",
|
||||
name = L["Group Pets"],
|
||||
order = 4,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
disabled = function() return not Gladdy.db.petEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
@@ -411,11 +431,6 @@ function Pets:GetOptions()
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
petGroup = option({
|
||||
type = "toggle",
|
||||
name = L["Group Pets"],
|
||||
order = 5,
|
||||
}),
|
||||
petMargin = option({
|
||||
type = "range",
|
||||
name = L["Margin"],
|
||||
|
||||
+243
-148
@@ -16,7 +16,8 @@ local Powerbar = Gladdy:NewModule("Power Bar", 90, {
|
||||
powerBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
powerBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
powerBarBgColor = { r = 0.3, g = 0.3, b = 0.3, a = 0.7 },
|
||||
powerBarFontSize = 10,
|
||||
powerBarRaceFontSize = 10,
|
||||
powerBarPowerFontSize = 10,
|
||||
powerShowSpec = true,
|
||||
powerShowRace = true,
|
||||
powerActual = true,
|
||||
@@ -24,15 +25,37 @@ local Powerbar = Gladdy:NewModule("Power Bar", 90, {
|
||||
powerPercentage = false,
|
||||
powerFrameStrata = "MEDIUM",
|
||||
powerFrameLevel = 1,
|
||||
powerCustomTagsEnabled = false,
|
||||
powerTextLeft = "[spec] [race]",
|
||||
powerTextRight = "[current]/[max]",
|
||||
powerTextLeftOutline = false,
|
||||
powerTextRightOutline = false,
|
||||
powerTextLeftVOffset = 1,
|
||||
powerTextLeftHOffset = 5,
|
||||
powerTextRightVOffset = 1,
|
||||
powerTextRightHOffset = -5,
|
||||
})
|
||||
|
||||
function Powerbar:Initialize()
|
||||
self.frames = {}
|
||||
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
if Gladdy.db.powerBarEnabled then
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
end
|
||||
end
|
||||
|
||||
function Powerbar:UpdateFrameOnce()
|
||||
if Gladdy.db.powerBarEnabled then
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("UNIT_DESTROYED")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function Powerbar:CreateFrame(unit)
|
||||
@@ -59,64 +82,137 @@ function Powerbar:CreateFrame(unit)
|
||||
powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor))
|
||||
|
||||
powerBar.raceText = powerBar:CreateFontString(nil, "LOW")
|
||||
powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize)
|
||||
powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarRaceFontSize, Gladdy.db.powerTextLeftOutline and "OUTLINE")
|
||||
powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
powerBar.raceText:SetShadowOffset(1, -1)
|
||||
powerBar.raceText:SetShadowColor(0, 0, 0, 1)
|
||||
powerBar.raceText:SetJustifyH("CENTER")
|
||||
powerBar.raceText:SetPoint("LEFT", 5, 1)
|
||||
powerBar.raceText:SetPoint("LEFT", Gladdy.db.powerTextLeftHOffset, Gladdy.db.powerTextLeftVOffset)
|
||||
|
||||
powerBar.powerText = powerBar:CreateFontString(nil, "LOW")
|
||||
powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize)
|
||||
powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarPowerFontSize, Gladdy.db.powerTextRightOutline and "OUTLINE")
|
||||
powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
powerBar.powerText:SetShadowOffset(1, -1)
|
||||
powerBar.powerText:SetShadowColor(0, 0, 0, 1)
|
||||
powerBar.powerText:SetJustifyH("CENTER")
|
||||
powerBar.powerText:SetPoint("RIGHT", -5, 1)
|
||||
powerBar.powerText:SetPoint("RIGHT", Gladdy.db.powerTextRightHOffset, Gladdy.db.powerTextRightVOffset)
|
||||
|
||||
button.powerBar = powerBar
|
||||
self.frames[unit] = powerBar
|
||||
self:ResetUnit(unit)
|
||||
powerBar.unit = unit
|
||||
powerBar:RegisterUnitEvent("UNIT_POWER_UPDATE", unit)
|
||||
powerBar:RegisterUnitEvent("UNIT_MAXPOWER", unit)
|
||||
powerBar:RegisterUnitEvent("UNIT_DISPLAYPOWER", unit)
|
||||
powerBar:SetScript("OnEvent", Powerbar.OnEvent)
|
||||
end
|
||||
|
||||
function Powerbar:UpdateFrame(unit)
|
||||
local powerBar = self.frames[unit]
|
||||
if (not powerBar) then
|
||||
return
|
||||
end
|
||||
local healthBar = Gladdy.modules["Health Bar"].frames[unit]
|
||||
|
||||
if not Gladdy.db.powerBarEnabled then
|
||||
powerBar:Hide()
|
||||
powerBar:UnregisterEvent("UNIT_POWER_UPDATE")
|
||||
powerBar:UnregisterEvent("UNIT_MAXPOWER")
|
||||
powerBar:UnregisterEvent("UNIT_DISPLAYPOWER")
|
||||
powerBar:SetScript("OnEvent", nil)
|
||||
return
|
||||
else
|
||||
powerBar:RegisterUnitEvent("UNIT_POWER_UPDATE", unit)
|
||||
powerBar:RegisterUnitEvent("UNIT_MAXPOWER", unit)
|
||||
powerBar:RegisterUnitEvent("UNIT_DISPLAYPOWER", unit)
|
||||
powerBar:SetScript("OnEvent", Powerbar.OnEvent)
|
||||
powerBar:Show()
|
||||
end
|
||||
powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor))
|
||||
|
||||
powerBar:SetWidth(healthBar:GetWidth())
|
||||
powerBar:SetHeight(Gladdy.db.powerBarHeight)
|
||||
|
||||
powerBar:ClearAllPoints()
|
||||
powerBar:SetPoint("TOPLEFT", healthBar, "BOTTOMLEFT", 0, -1)
|
||||
|
||||
powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.powerBarBorderSize })
|
||||
powerBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.powerBarBorderColor))
|
||||
|
||||
powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.energy:ClearAllPoints()
|
||||
powerBar.energy:SetPoint("TOPLEFT", powerBar, "TOPLEFT", (Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
powerBar.energy:SetPoint("BOTTOMRIGHT", powerBar, "BOTTOMRIGHT", -(Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
|
||||
powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarRaceFontSize, Gladdy.db.powerTextLeftOutline and "OUTLINE")
|
||||
powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
powerBar.raceText:SetPoint("LEFT", Gladdy.db.powerTextLeftHOffset, Gladdy.db.powerTextLeftVOffset)
|
||||
|
||||
powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarPowerFontSize, Gladdy.db.powerTextRightOutline and "OUTLINE")
|
||||
powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
powerBar.powerText:SetPoint("RIGHT", Gladdy.db.powerTextRightHOffset, Gladdy.db.powerTextRightVOffset)
|
||||
|
||||
powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||
powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel)
|
||||
powerBar.energy:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||
powerBar.energy:SetFrameLevel(Gladdy.db.powerFrameLevel - 1)
|
||||
end
|
||||
|
||||
function Powerbar.OnEvent(powerBar, event, unit)
|
||||
if event == "UNIT_POWER_UPDATE" then
|
||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
||||
elseif event == "UNIT_MAXPOWER" then
|
||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
||||
elseif event == "UNIT_DISPLAYPOWER" then
|
||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
||||
powerBar.energy.powerType = select(1, UnitPowerType(unit))
|
||||
powerBar.energy.current, powerBar.energy.max = UnitPower(unit, powerBar.energy.powerType, true), UnitPowerMax(unit, powerBar.energy.powerType, true)
|
||||
Powerbar:SetPower(powerBar, unit, powerBar.energy.current, powerBar.energy.max, powerBar.energy.powerType)
|
||||
end
|
||||
|
||||
function Powerbar:SetText(unit, power, powerMax, status)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not Gladdy.buttons[unit] then
|
||||
return
|
||||
end
|
||||
local powerBar = button.powerBar
|
||||
if Gladdy.db.powerCustomTagsEnabled then
|
||||
powerBar.powerText:SetText(Gladdy:SetTag(unit, Gladdy.db.powerTextRight, power, powerMax, status))
|
||||
powerBar.raceText:SetText(Gladdy:SetTag(unit, Gladdy.db.powerTextLeft, power, powerMax, status))
|
||||
else
|
||||
if power then
|
||||
local powerPercentage = floor(power * 100 / powerMax)
|
||||
local powerText
|
||||
if (Gladdy.db.powerActual) then
|
||||
powerText = powerMax > 999 and ("%.1fk"):format(power / 1000) or power
|
||||
end
|
||||
if (Gladdy.db.powerMax) then
|
||||
local text = powerMax > 999 and ("%.1fk"):format(powerMax / 1000) or powerMax
|
||||
if (powerText) then
|
||||
powerText = ("%s/%s"):format(powerText, text)
|
||||
else
|
||||
powerText = text
|
||||
end
|
||||
end
|
||||
if (Gladdy.db.powerPercentage) then
|
||||
if (powerText) then
|
||||
powerText = ("%s (%d%%)"):format(powerText, powerPercentage)
|
||||
else
|
||||
powerText = ("%d%%"):format(powerPercentage)
|
||||
end
|
||||
end
|
||||
powerBar.powerText:SetText(powerText)
|
||||
end
|
||||
|
||||
local raceText = Gladdy.db.powerShowRace and button.raceLoc or ""
|
||||
if (button.spec and Gladdy.db.powerShowSpec) then
|
||||
raceText = button.spec .. " " .. raceText
|
||||
end
|
||||
powerBar.raceText:SetText(raceText)
|
||||
end
|
||||
end
|
||||
|
||||
function Powerbar:SetPower(powerBar, power, powerMax, powerType)
|
||||
local powerPercentage = floor(power * 100 / powerMax)
|
||||
local powerText
|
||||
|
||||
if (Gladdy.db.powerActual) then
|
||||
powerText = powerMax > 999 and ("%.1fk"):format(power / 1000) or power
|
||||
end
|
||||
|
||||
if (Gladdy.db.powerMax) then
|
||||
local text = powerMax > 999 and ("%.1fk"):format(powerMax / 1000) or powerMax
|
||||
if (powerText) then
|
||||
powerText = ("%s/%s"):format(powerText, text)
|
||||
else
|
||||
powerText = text
|
||||
end
|
||||
end
|
||||
|
||||
if (Gladdy.db.powerPercentage) then
|
||||
if (powerText) then
|
||||
powerText = ("%s (%d%%)"):format(powerText, powerPercentage)
|
||||
else
|
||||
powerText = ("%d%%"):format(powerPercentage)
|
||||
end
|
||||
end
|
||||
function Powerbar:SetPower(powerBar, unit, power, powerMax, powerType, status)
|
||||
Powerbar:SetText(unit, power, powerMax, status)
|
||||
powerBar.energy.current = power
|
||||
powerBar.energy.max = powerMax
|
||||
powerBar.energy.powerType = powerType
|
||||
|
||||
if (powerType == 1 and powerBar.powerType ~= powerType) then
|
||||
powerBar.energy:SetStatusBarColor(1, 0, 0, 1)
|
||||
@@ -132,54 +228,11 @@ function Powerbar:SetPower(powerBar, power, powerMax, powerType)
|
||||
powerBar.powerType = powerType
|
||||
end
|
||||
|
||||
powerBar.powerText:SetText(powerText)
|
||||
powerBar.energy:SetMinMaxValues(0, powerMax)
|
||||
powerBar.energy:SetValue(power)
|
||||
|
||||
end
|
||||
|
||||
function Powerbar:UpdateFrame(unit)
|
||||
local powerBar = self.frames[unit]
|
||||
if (not powerBar) then
|
||||
return
|
||||
end
|
||||
local healthBar = Gladdy.modules["Health Bar"].frames[unit]
|
||||
|
||||
if not Gladdy.db.powerBarEnabled then
|
||||
powerBar:Hide()
|
||||
return
|
||||
else
|
||||
powerBar:Show()
|
||||
end
|
||||
powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor))
|
||||
|
||||
powerBar:SetWidth(healthBar:GetWidth())
|
||||
powerBar:SetHeight(Gladdy.db.powerBarHeight)
|
||||
|
||||
powerBar:ClearAllPoints()
|
||||
powerBar:SetPoint("TOPLEFT", healthBar, "BOTTOMLEFT", 0, -1)
|
||||
|
||||
powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.powerBarBorderSize })
|
||||
powerBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.powerBarBorderColor))
|
||||
|
||||
powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.energy:ClearAllPoints()
|
||||
powerBar.energy:SetPoint("TOPLEFT", powerBar, "TOPLEFT", (Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
powerBar.energy:SetPoint("BOTTOMRIGHT", powerBar, "BOTTOMRIGHT", -(Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.powerBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
|
||||
powerBar.raceText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize)
|
||||
powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize)
|
||||
powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||
|
||||
powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||
powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel)
|
||||
powerBar.energy:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||
powerBar.energy:SetFrameLevel(Gladdy.db.powerFrameLevel - 1)
|
||||
end
|
||||
|
||||
function Powerbar:ResetUnit(unit)
|
||||
local powerBar = self.frames[unit]
|
||||
if (not powerBar) then
|
||||
@@ -201,8 +254,14 @@ function Powerbar:Test(unit)
|
||||
return
|
||||
end
|
||||
|
||||
powerBar.energy.current = button.power
|
||||
powerBar.energy.max = button.powerMax
|
||||
powerBar.energy.powerType = button.powerType
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
self:UNIT_POWER(unit, button.power, button.powerMax, button.powerType)
|
||||
if unit == "arena1" then
|
||||
self:UNIT_DEATH(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function Powerbar:ENEMY_SPOTTED(unit)
|
||||
@@ -212,15 +271,10 @@ function Powerbar:ENEMY_SPOTTED(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local raceText = Gladdy.db.powerShowRace and button.raceLoc or ""
|
||||
|
||||
if (button.spec and Gladdy.db.powerShowSpec) then
|
||||
raceText = button.spec .. " " .. raceText
|
||||
end
|
||||
|
||||
powerBar.raceText:SetText(raceText)
|
||||
if UnitExists(unit) then
|
||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
||||
powerBar.energy.powerType = select(1, UnitPowerType(unit))
|
||||
powerBar.energy.current, powerBar.energy.max = UnitPower(unit, powerBar.energy.powerType, true), UnitPowerMax(unit, powerBar.energy.powerType, true)
|
||||
Powerbar:SetPower(powerBar, unit, powerBar.energy.current, powerBar.energy.max, powerBar.energy.powerType)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -230,13 +284,10 @@ function Powerbar:UNIT_SPEC(unit, spec)
|
||||
if (not powerBar or not button) then
|
||||
return
|
||||
end
|
||||
local raceText = Gladdy.db.powerShowRace and button.raceLoc or ""
|
||||
|
||||
if (button.spec and Gladdy.db.powerShowSpec) then
|
||||
raceText = spec .. " " .. raceText
|
||||
if UnitExists(unit) then
|
||||
Powerbar:SetPower(powerBar, unit, powerBar.energy.current, powerBar.energy.max, powerBar.energy.powerType)
|
||||
end
|
||||
|
||||
powerBar.raceText:SetText(raceText)
|
||||
end
|
||||
|
||||
function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
||||
@@ -248,44 +299,7 @@ function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
||||
if not Gladdy.buttons[unit].class then
|
||||
Gladdy:SpotEnemy(unit, true)
|
||||
end
|
||||
|
||||
local powerPercentage = floor(power * 100 / powerMax)
|
||||
local powerText
|
||||
|
||||
if (Gladdy.db.powerActual) then
|
||||
powerText = powerMax > 999 and ("%.1fk"):format(power / 1000) or power
|
||||
end
|
||||
|
||||
if (Gladdy.db.powerMax) then
|
||||
local text = powerMax > 999 and ("%.1fk"):format(powerMax / 1000) or powerMax
|
||||
if (powerText) then
|
||||
powerText = ("%s/%s"):format(powerText, text)
|
||||
else
|
||||
powerText = text
|
||||
end
|
||||
end
|
||||
|
||||
if (Gladdy.db.powerPercentage) then
|
||||
if (powerText) then
|
||||
powerText = ("%s (%d%%)"):format(powerText, powerPercentage)
|
||||
else
|
||||
powerText = ("%d%%"):format(powerPercentage)
|
||||
end
|
||||
end
|
||||
|
||||
if (powerType == 1) then
|
||||
powerBar.energy:SetStatusBarColor(1, 0, 0, 1)
|
||||
powerBar.powerColor = {r = 1, g = 0, b = 0}
|
||||
elseif (powerType == 3) then
|
||||
powerBar.energy:SetStatusBarColor(1, 1, 0, 1)
|
||||
powerBar.powerColor = {r = 1, g = 1, b = 0}
|
||||
else
|
||||
powerBar.energy:SetStatusBarColor(.18, .44, .75, 1)
|
||||
powerBar.powerColor = {r = .18, g = .44, b = .75}
|
||||
end
|
||||
|
||||
powerBar.powerText:SetText(powerText)
|
||||
powerBar.energy:SetValue(powerPercentage)
|
||||
Powerbar:SetPower(powerBar, unit, power, powerMax, powerType)
|
||||
end
|
||||
|
||||
function Powerbar:UNIT_DEATH(unit)
|
||||
@@ -293,9 +307,7 @@ function Powerbar:UNIT_DEATH(unit)
|
||||
if (not powerBar) then
|
||||
return
|
||||
end
|
||||
|
||||
powerBar.energy:SetValue(0)
|
||||
powerBar.powerText:SetText("0%")
|
||||
Powerbar:SetPower(powerBar, unit, 0, powerBar.energy.max, powerBar.energy.powerType, L["DEAD"])
|
||||
end
|
||||
|
||||
function Powerbar:UNIT_DESTROYED(unit)
|
||||
@@ -303,8 +315,7 @@ function Powerbar:UNIT_DESTROYED(unit)
|
||||
if (not powerBar) then
|
||||
return
|
||||
end
|
||||
powerBar.energy:SetValue(0)
|
||||
powerBar.powerText:SetText("0%")
|
||||
Powerbar:SetPower(powerBar, unit, 0, powerBar.energy.max, powerBar.energy.powerType, L["LEAVE"])
|
||||
end
|
||||
|
||||
local function option(params)
|
||||
@@ -320,8 +331,10 @@ local function option(params)
|
||||
if Gladdy.db.powerBarBorderSize > Gladdy.db.powerBarHeight/2 then
|
||||
Gladdy.db.powerBarBorderSize = Gladdy.db.powerBarHeight/2
|
||||
end
|
||||
for i=1,Gladdy.curBracket do
|
||||
Powerbar:Test("arena" .. i)
|
||||
if Gladdy.frame.testing then
|
||||
for i=1,Gladdy.curBracket do
|
||||
Powerbar:Test("arena" .. i)
|
||||
end
|
||||
end
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
@@ -351,6 +364,7 @@ function Powerbar:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.powerBarEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
@@ -414,16 +428,84 @@ function Powerbar:GetOptions()
|
||||
order = 12,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
powerBarFontSize = option({
|
||||
type = "range",
|
||||
name = L["Font size"],
|
||||
desc = L["Size of the text"],
|
||||
powerTextLeftOutline = option({
|
||||
type = "toggle",
|
||||
name = L["Left Font Outline"],
|
||||
order = 13,
|
||||
width = "full",
|
||||
}),
|
||||
powerTextRightOutline = option({
|
||||
type = "toggle",
|
||||
name = L["Right Font Outline"],
|
||||
order = 14,
|
||||
width = "full",
|
||||
}),
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 20,
|
||||
},
|
||||
powerBarRaceFontSize = option({
|
||||
type = "range",
|
||||
name = L["Race font size"],
|
||||
desc = L["Size of the race text"],
|
||||
order = 21,
|
||||
step = 0.1,
|
||||
min = 1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
powerBarPowerFontSize = option({
|
||||
type = "range",
|
||||
name = L["Power font size"],
|
||||
desc = L["Size of the power text"],
|
||||
order = 22,
|
||||
step = 0.1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
headerOffsets = {
|
||||
type = "header",
|
||||
name = L["Offsets"],
|
||||
order = 30,
|
||||
},
|
||||
powerTextLeftVOffset = option({
|
||||
type = "range",
|
||||
name = L["Left Text Vertical Offset"],
|
||||
order = 31,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
powerTextLeftHOffset = option({
|
||||
type = "range",
|
||||
name = L["Left Text Horizontal Offset"],
|
||||
order = 32,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
powerTextRightVOffset = option({
|
||||
type = "range",
|
||||
name = L["Right Text Vertical Offset"],
|
||||
order = 33,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
powerTextRightHOffset = option({
|
||||
type = "range",
|
||||
name = L["Right Text Horizontal Offset"],
|
||||
order = 34,
|
||||
step = 0.1,
|
||||
min = -200,
|
||||
max = 200,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
border = {
|
||||
@@ -506,31 +588,44 @@ function Powerbar:GetOptions()
|
||||
name = L["Show race"],
|
||||
desc = L["Show race"],
|
||||
order = 2,
|
||||
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||
}),
|
||||
powerShowSpec= option({
|
||||
type = "toggle",
|
||||
name = L["Show spec"],
|
||||
desc = L["Show spec"],
|
||||
order = 3,
|
||||
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||
}),
|
||||
powerActual = option({
|
||||
type = "toggle",
|
||||
name = L["Show the actual power"],
|
||||
desc = L["Show the actual power on the power bar"],
|
||||
order = 31,
|
||||
order = 4,
|
||||
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||
}),
|
||||
powerMax = option({
|
||||
type = "toggle",
|
||||
name = L["Show max power"],
|
||||
desc = L["Show max power on the power bar"],
|
||||
order = 32,
|
||||
order = 5,
|
||||
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||
}),
|
||||
powerPercentage = option({
|
||||
type = "toggle",
|
||||
name = L["Show power percentage"],
|
||||
desc = L["Show power percentage on the power bar"],
|
||||
order = 33,
|
||||
order = 6,
|
||||
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||
}),
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Custom Tags"],
|
||||
order = 10,
|
||||
},
|
||||
powerCustomTagsEnabled = Gladdy:GetTagOption(L["Custom Tags Enabled"], 11, nil, option, true),
|
||||
powerTextLeft = Gladdy:GetTagOption(L["Left Text"], 12, "powerCustomTagsEnabled", option),
|
||||
powerTextRight = Gladdy:GetTagOption(L["Right Text"], 13, "powerCustomTagsEnabled", option),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
+130
-16
@@ -1,4 +1,4 @@
|
||||
local ceil = ceil
|
||||
local ceil, str_gsub = ceil, string.gsub
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
@@ -11,6 +11,7 @@ local Racial = Gladdy:NewModule("Racial", 79, {
|
||||
racialEnabled = true,
|
||||
racialSize = 60 + 20 + 1,
|
||||
racialWidthFactor = 0.9,
|
||||
racialIconZoomed = false,
|
||||
racialXOffset = 0,
|
||||
racialYOffset = 0,
|
||||
racialBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||
@@ -20,15 +21,35 @@ local Racial = Gladdy:NewModule("Racial", 79, {
|
||||
racialCooldownNumberAlpha = 1,
|
||||
racialFrameStrata = "MEDIUM",
|
||||
racialFrameLevel = 5,
|
||||
racialGroup = false,
|
||||
racialGroupDirection = "DOWN",
|
||||
})
|
||||
|
||||
|
||||
function Racial:Initialize()
|
||||
self.frames = {}
|
||||
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("RACIAL_USED")
|
||||
if Gladdy.db.racialEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("RACIAL_USED")
|
||||
if Gladdy.expansion == "Wrath" then
|
||||
self:RegisterMessage("TRINKET_USED")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Racial:UpdateFrameOnce()
|
||||
if Gladdy.db.racialEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("RACIAL_USED")
|
||||
if Gladdy.expansion == "Wrath" then
|
||||
self:RegisterMessage("TRINKET_USED")
|
||||
end
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
local function iconTimer(self,elapsed)
|
||||
@@ -71,6 +92,7 @@ function Racial:CreateFrame(unit)
|
||||
racial.texture = racial:CreateTexture(nil, "BACKGROUND")
|
||||
racial.texture:SetAllPoints(racial)
|
||||
racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
racial.texture.masked = true
|
||||
--racial.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||
|
||||
racial.cooldown = CreateFrame("Cooldown", nil, racial, "CooldownFrameTemplate")
|
||||
@@ -113,6 +135,7 @@ function Racial:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local testAgain = false
|
||||
local width, height = Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, Gladdy.db.racialSize
|
||||
|
||||
racial:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||
@@ -126,8 +149,13 @@ function Racial:UpdateFrame(unit)
|
||||
|
||||
racial:SetWidth(width)
|
||||
racial:SetHeight(height)
|
||||
racial.cooldown:SetWidth(width - width/16)
|
||||
racial.cooldown:SetHeight(height - height/16)
|
||||
if Gladdy.db.racialIconZoomed then
|
||||
racial.cooldown:SetWidth(width)
|
||||
racial.cooldown:SetHeight(height)
|
||||
else
|
||||
racial.cooldown:SetWidth(width - width/16)
|
||||
racial.cooldown:SetHeight(height - height/16)
|
||||
end
|
||||
racial.cooldown:ClearAllPoints()
|
||||
racial.cooldown:SetPoint("CENTER", racial, "CENTER")
|
||||
racial.cooldown.noCooldownCount = true -- Gladdy.db.racialDisableOmniCC
|
||||
@@ -139,8 +167,42 @@ function Racial:UpdateFrame(unit)
|
||||
racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle)
|
||||
racial.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.racialBorderColor))
|
||||
|
||||
if Gladdy.db.racialIconZoomed then
|
||||
if racial.texture.masked then
|
||||
racial.texture:SetMask(nil)
|
||||
racial.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
racial.texture.masked = nil
|
||||
end
|
||||
else
|
||||
if not racial.texture.masked then
|
||||
racial.texture:SetMask(nil)
|
||||
racial.texture:SetTexCoord(0,1,0,1)
|
||||
racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
racial.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Gladdy:SetPosition(racial, unit, "racialXOffset", "racialYOffset", Racial:LegacySetPosition(racial, unit), Racial)
|
||||
|
||||
if (Gladdy.db.racialGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit]:ClearAllPoints()
|
||||
if Gladdy.db.racialGroupDirection == "RIGHT" then
|
||||
self.frames[unit]:SetPoint("LEFT", self.frames[previousUnit], "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.racialGroupDirection == "LEFT" then
|
||||
self.frames[unit]:SetPoint("RIGHT", self.frames[previousUnit], "LEFT", 0, 0)
|
||||
elseif Gladdy.db.racialGroupDirection == "UP" then
|
||||
self.frames[unit]:SetPoint("BOTTOM", self.frames[previousUnit], "TOP", 0, 0)
|
||||
elseif Gladdy.db.racialGroupDirection == "DOWN" then
|
||||
self.frames[unit]:SetPoint("TOP", self.frames[previousUnit], "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(racial,"racialXOffset", "racialYOffset", L["Racial"],
|
||||
{"TOPLEFT", "TOPLEFT"},
|
||||
@@ -153,11 +215,14 @@ function Racial:UpdateFrame(unit)
|
||||
racial:Hide()
|
||||
else
|
||||
racial:Show()
|
||||
if testAgain then
|
||||
Racial:ResetUnit(unit)
|
||||
Racial:Test(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Racial:JOINED_ARENA()
|
||||
self:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
|
||||
self:SetScript("OnEvent", function(self, event, ...)
|
||||
if self[event] then
|
||||
self[event](self, ...)
|
||||
@@ -165,13 +230,34 @@ function Racial:JOINED_ARENA()
|
||||
end)
|
||||
end
|
||||
|
||||
function Racial:RACIAL_USED(unit)
|
||||
function Racial:RACIAL_USED(unit, expirationTime, spellName)
|
||||
local racial = self.frames[unit]
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not racial or not button or not button.race or not Gladdy.db.racialEnabled) then
|
||||
return
|
||||
end
|
||||
if expirationTime and Gladdy:Racials()[button.race].spellName ~= spellName then
|
||||
return
|
||||
end
|
||||
local startTime = expirationTime or GetTime()
|
||||
Racial:Used(unit, startTime, Gladdy:Racials()[button.race].duration)
|
||||
end
|
||||
|
||||
function Racial:TRINKET_USED(unit) -- Wrath only
|
||||
local racial = self.frames[unit]
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not racial or not button or not button.race) then
|
||||
return
|
||||
end
|
||||
Racial:Used(unit, GetTime(), Gladdy:Racials()[button.race].duration)
|
||||
if button.race == "Scourge" then
|
||||
if racial.active and racial.timeLeft >= 45 then
|
||||
-- do nothing
|
||||
else
|
||||
self:Used(unit, GetTime(), 45)
|
||||
end
|
||||
elseif button.race == "Human" then
|
||||
self:Used(unit, GetTime(), 120)
|
||||
end
|
||||
end
|
||||
|
||||
function Racial:Used(unit, startTime, duration)
|
||||
@@ -208,8 +294,8 @@ end
|
||||
|
||||
function Racial:Test(unit)
|
||||
Racial:ENEMY_SPOTTED(unit)
|
||||
if (unit == "arena1" or unit == "arena3") then
|
||||
Racial:Used(unit, GetTime(), Gladdy:Racials()[Gladdy.buttons[unit].race].duration)
|
||||
if (unit == "arena2" or unit == "arena3") then
|
||||
Gladdy:SendMessage("RACIAL_USED", unit)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -226,29 +312,57 @@ function Racial:GetOptions()
|
||||
desc = L["Enable racial icon"],
|
||||
order = 3,
|
||||
}),
|
||||
racialGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group"] .. " " .. L["Racial"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.racialEnabled end,
|
||||
}),
|
||||
racialGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 5,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function()
|
||||
return not Gladdy.db.racialGroup or not Gladdy.db.racialEnabled
|
||||
end,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
order = 6,
|
||||
disabled = function() return not Gladdy.db.racialEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
name = L["Size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
racialIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
racialSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon size"],
|
||||
min = 5,
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 2,
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
racialWidthFactor = Gladdy:option({
|
||||
@@ -257,7 +371,7 @@ function Racial:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 3,
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
|
||||
+19
-45
@@ -17,6 +17,7 @@ local LibStub = LibStub
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local LSR = LibStub("SpellRange-1.0")
|
||||
local L = Gladdy.L
|
||||
local HealthBar = Gladdy.modules["Health Bar"]
|
||||
|
||||
local classSpells = {
|
||||
["MAGE"] = 118,
|
||||
@@ -52,12 +53,20 @@ local RangeCheck = Gladdy:NewModule("Range Check", nil, {
|
||||
})
|
||||
|
||||
function RangeCheck:Initialize()
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_STEALTH")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
if Gladdy.db.rangeCheckEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
end
|
||||
self.playerClass = select(2, UnitClass("player"))
|
||||
end
|
||||
|
||||
function RangeCheck:UpdateFrameOnce()
|
||||
if Gladdy.db.rangeCheckEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:Reset()
|
||||
self.test = nil
|
||||
end
|
||||
@@ -66,7 +75,6 @@ function RangeCheck:ResetUnit(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
self:CancelTimer(button)
|
||||
self:SetColor(button, 1)
|
||||
button.classColors = {}
|
||||
end
|
||||
|
||||
function RangeCheck:Test(unit)
|
||||
@@ -74,11 +82,10 @@ function RangeCheck:Test(unit)
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
self.test = true
|
||||
button.lastState = 0
|
||||
if Gladdy.db.rangeCheckEnabled then
|
||||
if unit == "arena1" then
|
||||
if unit == "arena2" or unit == "arena4" then
|
||||
--button.unit = "target"
|
||||
--self:CreateTimer(button)
|
||||
self:SetRangeAlpha(button, nil)
|
||||
@@ -101,18 +108,12 @@ function RangeCheck:SetColor(button, oorFac)
|
||||
return
|
||||
end
|
||||
|
||||
if not button.classColors.r then
|
||||
if button.class then
|
||||
button.classColors = { r = RAID_CLASS_COLORS[button.class].r, g = RAID_CLASS_COLORS[button.class].g, b = RAID_CLASS_COLORS[button.class].b }
|
||||
else
|
||||
button.classColors = { r = 0.66, g = 0.66, b = 0.66 }
|
||||
end
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckHealthBar then
|
||||
button.healthBar.hp:SetStatusBarColor(button.classColors.r/oorFac, button.classColors.g/oorFac, button.classColors.b/oorFac, 1)
|
||||
button.healthBar.hp.oorFactor = oorFac
|
||||
HealthBar:SetHealthStatusBarColor(button.unit, button.healthBar.hp.current, button.healthBar.hp.max)
|
||||
else
|
||||
button.healthBar.hp:SetStatusBarColor(button.classColors.r, button.classColors.g, button.classColors.b, 1)
|
||||
button.healthBar.hp.oorFactor = 1
|
||||
HealthBar:SetHealthStatusBarColor(button.unit, button.healthBar.hp.current, button.healthBar.hp.max)
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckHealthBarText then
|
||||
@@ -177,35 +178,6 @@ function RangeCheck:JOINED_ARENA()
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:ENEMY_STEALTH(unit, stealth)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
button.lastState = 0
|
||||
if stealth then
|
||||
button.classColors = { r = 0.66, g = 0.66, b = 0.66 }
|
||||
if not Gladdy.db.rangeCheckEnabled then
|
||||
button.healthBar.hp:SetStatusBarColor(0.66, 0.66, 0.66, 1)
|
||||
end
|
||||
else
|
||||
if button.class then
|
||||
button.classColors = { r = RAID_CLASS_COLORS[button.class].r, g = RAID_CLASS_COLORS[button.class].g, b = RAID_CLASS_COLORS[button.class].b }
|
||||
if not Gladdy.db.rangeCheckEnabled then
|
||||
button.healthBar.hp:SetStatusBarColor(RAID_CLASS_COLORS[button.class].r, RAID_CLASS_COLORS[button.class].g, RAID_CLASS_COLORS[button.class].b, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:ENEMY_SPOTTED(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button) then
|
||||
return
|
||||
end
|
||||
button.classColors = { r = RAID_CLASS_COLORS[button.class].r, g = RAID_CLASS_COLORS[button.class].g, b = RAID_CLASS_COLORS[button.class].b }
|
||||
end
|
||||
|
||||
function RangeCheck.CheckRange(self)
|
||||
local button = self.parent
|
||||
|
||||
@@ -268,6 +240,7 @@ function RangeCheck:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["General"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.rangeCheckEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
@@ -340,6 +313,7 @@ function RangeCheck:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["Spells"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.rangeCheckEnabled end,
|
||||
args = RangeCheck:GetSpells(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -34,8 +34,10 @@ end
|
||||
|
||||
function ShadowsightTimer:Initialize()
|
||||
self.locale = Gladdy:GetArenaTimer()
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:CreateAnchor()
|
||||
if Gladdy.db.shadowsightTimerEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
end
|
||||
end
|
||||
|
||||
function ShadowsightTimer:Reset()
|
||||
@@ -106,6 +108,12 @@ function ShadowsightTimer:CreateAnchor()
|
||||
end
|
||||
|
||||
function ShadowsightTimer:UpdateFrameOnce()
|
||||
if Gladdy.db.shadowsightTimerEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
|
||||
self.anchor:EnableMouse(not Gladdy.db.shadowsightTimerLocked)
|
||||
|
||||
self.anchor:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata)
|
||||
@@ -148,13 +156,15 @@ end
|
||||
---------------------------
|
||||
|
||||
function ShadowsightTimer:JOINED_ARENA()
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ShadowsightTimer.OnEvent)
|
||||
for i=1,2 do
|
||||
self["timerFrame" .. i].font:SetText("1:30")
|
||||
self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0)
|
||||
if Gladdy.db.shadowsightTimerEnabled then
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ShadowsightTimer.OnEvent)
|
||||
for i=1,2 do
|
||||
self["timerFrame" .. i].font:SetText("1:30")
|
||||
self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0)
|
||||
end
|
||||
self.anchor:Show()
|
||||
end
|
||||
self.anchor:Show()
|
||||
end
|
||||
|
||||
function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID)
|
||||
@@ -297,23 +307,27 @@ function ShadowsightTimer:GetOptions()
|
||||
name = L["Locked"],
|
||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||
}),
|
||||
shadowsightTimerShowTwoTimer = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Show two timers"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||
}),
|
||||
shadowsightAnnounce = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Announce"],
|
||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||
order = 6,
|
||||
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 7,
|
||||
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
|
||||
+181
-139
@@ -1,103 +1,41 @@
|
||||
local select, pairs, string_lower, tremove, tinsert, format, string_gsub, ipairs = select, pairs, string.lower, tremove, tinsert, format, string.gsub, ipairs
|
||||
local UnitExists, UnitIsUnit, UnitName, UnitIsEnemy = UnitExists, UnitIsUnit, UnitName, UnitIsEnemy
|
||||
local select, pairs, tremove, tinsert, format, strsplit, tonumber, ipairs = select, pairs, tremove, tinsert, format, strsplit, tonumber, ipairs
|
||||
local UnitExists, UnitIsUnit, UnitIsEnemy, UnitGUID = UnitExists, UnitIsUnit, UnitIsEnemy, UnitGUID
|
||||
local C_NamePlate = C_NamePlate
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local GetSpellInfo, CreateFrame = GetSpellInfo, CreateFrame
|
||||
local totemData, npcIdToTotemData = Gladdy:GetTotemData()
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Constants
|
||||
-- Option Helpers
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
local totemData = {
|
||||
-- Fire
|
||||
[string_lower("Searing Totem")] = {id = 3599,texture = select(3, GetSpellInfo(3599)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Searing Totem
|
||||
[string_lower("Flametongue Totem")] = {id = 8227,texture = select(3, GetSpellInfo(8227)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Flametongue Totem
|
||||
[string_lower("Magma Totem")] = {id = 8190,texture = select(3, GetSpellInfo(8190)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Magma Totem
|
||||
[string_lower("Fire Nova Totem")] = {id = 1535,texture = select(3, GetSpellInfo(1535)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Fire Nova Totem
|
||||
[string_lower("Totem of Wrath")] = {id = 30706,texture = select(3, GetSpellInfo(30706)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 1}, -- Totem of Wrath
|
||||
[string_lower("Fire Elemental Totem")] = {id = 32982,texture = select(3, GetSpellInfo(32982)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Fire Elemental Totem
|
||||
[string_lower("Frost Resistance Totem")] = {id = 8181,texture = select(3, GetSpellInfo(8181)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Frost Resistance Totem
|
||||
-- Water
|
||||
[string_lower("Fire Resistance Totem")] = {id = 8184,texture = select(3, GetSpellInfo(8184)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Fire Resistance Totem
|
||||
[string_lower("Poison Cleansing Totem")] = {id = 8166,texture = select(3, GetSpellInfo(8166)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Poison Cleansing Totem
|
||||
[string_lower("Disease Cleansing Totem")] = {id = 8170,texture = select(3, GetSpellInfo(8170)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Disease Cleansing Totem
|
||||
[string_lower("Healing Stream Totem")] = {id = 5394,texture = select(3, GetSpellInfo(5394)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Healing Stream Totem
|
||||
[string_lower("Mana Tide Totem")] = {id = 16190,texture = select(3, GetSpellInfo(16190)), color = {r = 0.078, g = 0.9, b = 0.16, a = 1}, enabled = true, priority = 3}, -- Mana Tide Totem
|
||||
[string_lower("Mana Spring Totem")] = {id = 5675,texture = select(3, GetSpellInfo(5675)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 1}, -- Mana Spring Totem
|
||||
-- Earth
|
||||
[string_lower("Earthbind Totem")] = {id = 2484,texture = select(3, GetSpellInfo(2484)), color = {r = 0.5, g = 0.5, b = 0.5, a = 1}, enabled = true, priority = 1}, -- Earthbind Totem
|
||||
[string_lower("Stoneclaw Totem")] = {id = 5730,texture = select(3, GetSpellInfo(5730)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Stoneclaw Totem
|
||||
[string_lower("Stoneskin Totem")] = {id = 8071,texture = select(3, GetSpellInfo(8071)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Stoneskin Totem
|
||||
[string_lower("Strength of Earth Totem")] = {id = 8075,texture = select(3, GetSpellInfo(8075)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Strength of Earth Totem
|
||||
[string_lower("Earth Elemental Totem")] = {id = 33663,texture = select(3, GetSpellInfo(33663)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Earth Elemental Totem
|
||||
[string_lower("Tremor Totem")] = {id = 8143,texture = select(3, GetSpellInfo(8143)), color = {r = 1, g = 0.9, b = 0.1, a = 1}, enabled = true, priority = 3}, -- Tremor Totem
|
||||
-- Air
|
||||
[string_lower("Grounding Totem")] = {id = 8177,texture = select(3, GetSpellInfo(8177)), color = {r = 0, g = 0.53, b = 0.92, a = 1}, enabled = true, priority = 3}, -- Grounding Totem
|
||||
[string_lower("Grace of Air Totem")] = {id = 8835,texture = select(3, GetSpellInfo(8835)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Grace of Air Totem
|
||||
[string_lower("Nature Resistance Totem")] = {id = 10595,texture = select(3, GetSpellInfo(10595)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Nature Resistance Totem
|
||||
[string_lower("Windfury Totem")] = {id = 8512,texture = select(3, GetSpellInfo(8512)), color = {r = 0.96, g = 0, b = 0.07, a = 1}, enabled = true, priority = 2}, -- Windfury Totem
|
||||
[string_lower("Sentry Totem")] = {id = 6495, texture = select(3, GetSpellInfo(6495)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Sentry Totem
|
||||
[string_lower("Windwall Totem")] = {id = 15107,texture = select(3, GetSpellInfo(15107)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Windwall Totem
|
||||
[string_lower("Wrath of Air Totem")] = {id = 3738,texture = select(3, GetSpellInfo(3738)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Wrath of Air Totem
|
||||
[string_lower("Tranquil Air Totem")] = {id = 25908,texture = select(3, GetSpellInfo(25908)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Tranquil Air Totem
|
||||
}
|
||||
local localizedTotemData = {
|
||||
["default"] = {
|
||||
[string_lower(select(1, GetSpellInfo(3599)))] = totemData[string_lower("Searing Totem")], -- Searing Totem
|
||||
[string_lower(select(1, GetSpellInfo(8227)))] = totemData[string_lower("Flametongue Totem")], -- Flametongue Totem
|
||||
[string_lower(select(1, GetSpellInfo(8190)))] = totemData[string_lower("Magma Totem")], -- Magma Totem
|
||||
[string_lower(select(1, GetSpellInfo(1535)))] = totemData[string_lower("Fire Nova Totem")], -- Fire Nova Totem
|
||||
[string_lower(select(1, GetSpellInfo(30706)))] = totemData[string_lower("Totem of Wrath")], -- Totem of Wrath
|
||||
[string_lower(select(1, GetSpellInfo(32982)))] = totemData[string_lower("Fire Elemental Totem")], -- Fire Elemental Totem
|
||||
[string_lower(select(1, GetSpellInfo(8181)))] = totemData[string_lower("Frost Resistance Totem")], -- Frost Resistance Totem
|
||||
-- Water
|
||||
[string_lower(select(1, GetSpellInfo(8184)))] = totemData[string_lower("Fire Resistance Totem")], -- Fire Resistance Totem
|
||||
[string_lower(select(1, GetSpellInfo(8166)))] = totemData[string_lower("Poison Cleansing Totem")], -- Poison Cleansing Totem
|
||||
[string_lower(select(1, GetSpellInfo(8170)))] = totemData[string_lower("Disease Cleansing Totem")], -- Disease Cleansing Totem
|
||||
[string_lower(select(1, GetSpellInfo(5394)))] = totemData[string_lower("Healing Stream Totem")], -- Healing Stream Totem
|
||||
[string_lower(select(1, GetSpellInfo(16190)))] = totemData[string_lower("Mana Tide Totem")], -- Mana Tide Totem
|
||||
[string_lower(select(1, GetSpellInfo(5675)))] = totemData[string_lower("Mana Spring Totem")], -- Mana Spring Totem
|
||||
-- Earth
|
||||
[string_lower(select(1, GetSpellInfo(2484)))] = totemData[string_lower("Earthbind Totem")], -- Earthbind Totem
|
||||
[string_lower(select(1, GetSpellInfo(5730)))] = totemData[string_lower("Stoneclaw Totem")], -- Stoneclaw Totem
|
||||
[string_lower(select(1, GetSpellInfo(8071)))] = totemData[string_lower("Stoneskin Totem")], -- Stoneskin Totem
|
||||
[string_lower(select(1, GetSpellInfo(8075)))] = totemData[string_lower("Strength of Earth Totem")], -- Strength of Earth Totem
|
||||
[string_lower(select(1, GetSpellInfo(33663)))] = totemData[string_lower("Earth Elemental Totem")], -- Earth Elemental Totem
|
||||
[string_lower(select(1, GetSpellInfo(8143)))] = totemData[string_lower("Tremor Totem")], -- Tremor Totem
|
||||
-- Air
|
||||
[string_lower(select(1, GetSpellInfo(8177)))] = totemData[string_lower("Grounding Totem")], -- Grounding Totem
|
||||
[string_lower(select(1, GetSpellInfo(8835)))] = totemData[string_lower("Grace of Air Totem")], -- Grace of Air Totem
|
||||
[string_lower(select(1, GetSpellInfo(10595)))] = totemData[string_lower("Nature Resistance Totem")], -- Nature Resistance Totem
|
||||
[string_lower(select(1, GetSpellInfo(8512)))] = totemData[string_lower("Windfury Totem")], -- Windfury Totem
|
||||
[string_lower(select(1, GetSpellInfo(6495)))] = totemData[string_lower("Sentry Totem")], -- Sentry Totem
|
||||
[string_lower(select(1, GetSpellInfo(15107)))] = totemData[string_lower("Windwall Totem")], -- Windwall Totem
|
||||
[string_lower(select(1, GetSpellInfo(3738)))] = totemData[string_lower("Wrath of Air Totem")], -- Wrath of Air Totem
|
||||
[string_lower(select(1, GetSpellInfo(25908)))] = totemData[string_lower("Tranquil Air Totem")], -- Tranquil Air Totem
|
||||
},
|
||||
["frFR"] = {
|
||||
[string_lower("Totem d'\195\169lementaire de terre")] = totemData[string_lower("Earth Elemental Totem")], -- Earth Elemental Totem
|
||||
[string_lower("Totem d'\195\169lementaire de feu")] = totemData[string_lower("Fire Elemental Totem")], -- Fire Elemental Totem
|
||||
},
|
||||
["ruRU"] = {
|
||||
[string_lower("")] = totemData[string_lower("Sentry Totem")], -- Sentry Totem
|
||||
}
|
||||
}
|
||||
|
||||
local function GetTotemColorDefaultOptions()
|
||||
local defaultDB = {}
|
||||
local options = {}
|
||||
local indexedList = {}
|
||||
for k,v in pairs(totemData) do
|
||||
tinsert(indexedList, {name = k, id = v.id, color = v.color, texture = v.texture, enabled = v.enabled})
|
||||
tinsert(indexedList, {name = k, id = v.id, color = v.color, texture = v.texture})
|
||||
end
|
||||
table.sort(indexedList, function (a, b)
|
||||
return a.name < b.name
|
||||
end)
|
||||
for i=1,#indexedList do
|
||||
defaultDB["totem" .. indexedList[i].id] = {color = indexedList[i].color, enabled = indexedList[i].enabled, alpha = 0.6, customText = ""}
|
||||
defaultDB["totem" .. indexedList[i].id] = {color = indexedList[i].color, enabled = true, alpha = 0.6, customText = ""}
|
||||
options["npTotemsHideDisabledTotems"] = {
|
||||
order = 1,
|
||||
name = L["Hide Disabled Totem Plates"],
|
||||
desc = L["Hide Disabled Totem Plates"],
|
||||
type = "toggle",
|
||||
width = "full",
|
||||
get = function() return Gladdy.dbi.profile.npTotemsHideDisabledTotems end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.npTotemsHideDisabledTotems = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
}
|
||||
options["totem" .. indexedList[i].id] = {
|
||||
order = i+1,
|
||||
name = select(1, GetSpellInfo(indexedList[i].id)),
|
||||
@@ -174,17 +112,13 @@ local function GetTotemColorDefaultOptions()
|
||||
return defaultDB, options, indexedList
|
||||
end
|
||||
|
||||
function Gladdy:GetTotemColors()
|
||||
return GetTotemColorDefaultOptions()
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Core
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
|
||||
local TotemPlates = Gladdy:NewModule("Totem Plates", 2, {
|
||||
npTotems = true,
|
||||
npTotemsShowFriendly = true,
|
||||
npTotemsShowEnemy = true,
|
||||
@@ -198,12 +132,10 @@ local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
|
||||
npTotemPlatesAlpha = 0.6,
|
||||
npTotemPlatesAlphaAlways = false,
|
||||
npTotemPlatesAlphaAlwaysTargeted = false,
|
||||
npTotemColors = select(1, GetTotemColorDefaultOptions())
|
||||
npTotemColors = select(1, GetTotemColorDefaultOptions()),
|
||||
npTotemsHideDisabledTotems = false,
|
||||
})
|
||||
|
||||
LibStub("AceHook-3.0"):Embed(TotemPlates)
|
||||
LibStub("AceTimer-3.0"):Embed(TotemPlates)
|
||||
|
||||
function TotemPlates.OnEvent(self, event, ...)
|
||||
TotemPlates[event](self, ...)
|
||||
end
|
||||
@@ -212,19 +144,18 @@ function TotemPlates:Initialize()
|
||||
self.numChildren = 0
|
||||
self.activeTotemNameplates = {}
|
||||
self.totemPlateCache = {}
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
self:RegisterEvent("UNIT_NAME_UPDATE")
|
||||
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
||||
if Gladdy.db.npTotems then
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy then
|
||||
--GetCVar("nameplateShowEnemyTotems")
|
||||
--SetCVar("nameplateShowEnemyTotems", true);
|
||||
SetCVar("nameplateShowEnemyTotems", true);
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly then
|
||||
--GetCVar("nameplateShowFriendlyTotems")
|
||||
--SetCVar("nameplateShowFriendlyTotems", true);
|
||||
SetCVar("nameplateShowFriendlyTotems", true);
|
||||
end
|
||||
self.addon = "Blizzard"
|
||||
if (IsAddOnLoaded("Plater")) then
|
||||
@@ -248,17 +179,67 @@ function TotemPlates:Initialize()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Events
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPlates:PLAYER_ENTERING_WORLD()
|
||||
self.numChildren = 0
|
||||
self.activeTotemNameplates = {}
|
||||
end
|
||||
|
||||
function TotemPlates:Reset()
|
||||
--self:CancelAllTimers()
|
||||
--self:UnhookAll()
|
||||
function TotemPlates:PLAYER_TARGET_CHANGED()
|
||||
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, k)
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_ADDED(unitID)
|
||||
self:OnUnitEvent(unitID)
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_REMOVED(unitID)
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitID)
|
||||
self.activeTotemNameplates[unitID] = nil
|
||||
--self:ToggleAddon(nameplate, true)
|
||||
if nameplate.gladdyTotemFrame then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
nameplate.gladdyTotemFrame:SetParent(nil)
|
||||
tinsert(self.totemPlateCache, nameplate.gladdyTotemFrame)
|
||||
nameplate.gladdyTotemFrame = nil
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Gladdy Call
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPlates:UpdateFrameOnce()
|
||||
if Gladdy.db.npTotems then
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
||||
else
|
||||
self:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
||||
self:UnregisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:UnregisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:UnregisterEvent("PLAYER_TARGET_CHANGED")
|
||||
self:SetScript("OnEvent", nil)
|
||||
end
|
||||
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy then
|
||||
SetCVar("nameplateShowEnemyTotems", true);
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly then
|
||||
SetCVar("nameplateShowFriendlyTotems", true);
|
||||
end
|
||||
|
||||
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||
local totemDataEntry = nameplate.gladdyTotemFrame.totemDataEntry
|
||||
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||
@@ -295,6 +276,18 @@ function TotemPlates:UpdateFrameOnce()
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then
|
||||
nameplate.gladdyTotemFrame:Show()
|
||||
self:ToggleAddon(nameplate)
|
||||
end
|
||||
if Gladdy.db.npTotems and not Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
if Gladdy.db.npTotems and not Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled and Gladdy.db.npTotemsHideDisabledTotems then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate)
|
||||
end
|
||||
end
|
||||
for _,gladdyTotemFrame in ipairs(self.totemPlateCache) do
|
||||
gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||
@@ -313,6 +306,7 @@ end
|
||||
|
||||
function TotemPlates:CreateTotemFrame(nameplate)
|
||||
nameplate.gladdyTotemFrame = CreateFrame("Frame")
|
||||
nameplate.gladdyTotemFrame:SetFrameLevel(1)
|
||||
nameplate.gladdyTotemFrame:SetIgnoreParentAlpha(true)
|
||||
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||
nameplate.gladdyTotemFrame:SetHeight(Gladdy.db.npTotemPlatesSize)
|
||||
@@ -373,11 +367,7 @@ function TotemPlates:GetAddonFrame(nameplate)
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:PLAYER_TARGET_CHANGED()
|
||||
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, k)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function TotemPlates:ToggleAddon(nameplate, show)
|
||||
local addonFrames = { self:GetAddonFrame(nameplate) }
|
||||
@@ -395,7 +385,7 @@ function TotemPlates:ToggleAddon(nameplate, show)
|
||||
end
|
||||
|
||||
function TotemPlates.OnUpdate(self)
|
||||
if (UnitIsUnit("mouseover", self.unitID) or UnitIsUnit("target", self.unitID)) then
|
||||
if (UnitIsUnit("mouseover", self.unitID) or UnitIsUnit("target", self.unitID)) and Gladdy.db.npTotemColors["totem" .. self.totemDataEntry.id].alpha > 0 then
|
||||
self.selectionHighlight:SetAlpha(.25)
|
||||
else
|
||||
self.selectionHighlight:SetAlpha(0)
|
||||
@@ -423,12 +413,14 @@ function TotemPlates:OnUnitEvent(unitID)
|
||||
self:ToggleAddon(nameplate, true)
|
||||
return
|
||||
end
|
||||
local nameplateName = UnitName(unitID)
|
||||
local totemName = string_gsub(nameplateName, "^%s+", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+$", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+[I,V,X]+$", "") --trim rank
|
||||
totemName = string_lower(totemName)
|
||||
local totemDataEntry = localizedTotemData["default"][totemName] or localizedTotemData["frFR"][totemName] or localizedTotemData["ruRU"][totemName]
|
||||
local npcType, _, _, _, _, npcId = strsplit("-", UnitGUID(unitID))
|
||||
if npcType ~= "Creature" then
|
||||
return
|
||||
end
|
||||
local totemDataEntry = npcIdToTotemData[tonumber(npcId)]
|
||||
if not totemDataEntry then
|
||||
return
|
||||
end
|
||||
if totemDataEntry and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then-- modify this nameplates
|
||||
if #self.totemPlateCache > 0 then
|
||||
nameplate.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
||||
@@ -452,32 +444,19 @@ function TotemPlates:OnUnitEvent(unitID)
|
||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, unitID)
|
||||
self:ToggleAddon(nameplate)
|
||||
self.activeTotemNameplates[unitID] = nameplate
|
||||
elseif totemDataEntry and not Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled and Gladdy.db.npTotemsHideDisabledTotems then
|
||||
if nameplate.gladdyTotemFrame then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
nameplate.gladdyTotemFrame:SetParent(nil)
|
||||
tinsert(self.totemPlateCache, nameplate.gladdyTotemFrame)
|
||||
nameplate.gladdyTotemFrame = nil
|
||||
end
|
||||
self:ToggleAddon(nameplate)
|
||||
else
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
self:OnUnitEvent(...)
|
||||
end
|
||||
|
||||
function TotemPlates:UNIT_NAME_UPDATE(...)
|
||||
self:OnUnitEvent(...)
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_REMOVED(...)
|
||||
local unitID = ...
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitID)
|
||||
self.activeTotemNameplates[unitID] = nil
|
||||
--self:ToggleAddon(nameplate, true)
|
||||
if nameplate.gladdyTotemFrame then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
nameplate.gladdyTotemFrame:SetParent(nil)
|
||||
tinsert(self.totemPlateCache, nameplate.gladdyTotemFrame)
|
||||
nameplate.gladdyTotemFrame = nil
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:SetTotemAlpha(gladdyTotemFrame, unitID)
|
||||
local targetExists = UnitExists("target")
|
||||
local totemDataEntry = gladdyTotemFrame.totemDataEntry
|
||||
@@ -502,6 +481,65 @@ end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Test
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPlates:TestOnce()
|
||||
if not self.testFrame then
|
||||
self.testFrame = CreateFrame("Frame", nil, UIParent)
|
||||
self.testFrame:SetWidth(1)
|
||||
self.testFrame:SetHeight(32)
|
||||
self.testFrame:SetPoint("CENTER", UIParent, "CENTER", 0, -140)
|
||||
self.testFrame:SetIgnoreParentScale(true)
|
||||
end
|
||||
local totemDataEntry = npcIdToTotemData[5913]
|
||||
self.testFrame:Show()
|
||||
if not self.testFrame.gladdyTotemFrame then
|
||||
if #self.totemPlateCache > 0 then
|
||||
self.testFrame.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
||||
else
|
||||
self:CreateTotemFrame(self.testFrame)
|
||||
self.testFrame.gladdyTotemFrame:SetScript("OnHide", nil)
|
||||
self.testFrame.gladdyTotemFrame:SetScript("OnUpdate", nil)
|
||||
end
|
||||
end
|
||||
if Gladdy.db.npTotems then
|
||||
self.testFrame.gladdyTotemFrame.unitID = "player"
|
||||
self.testFrame.gladdyTotemFrame.totemDataEntry = totemDataEntry
|
||||
self.testFrame.gladdyTotemFrame.parent = self.testFrame
|
||||
self.testFrame.gladdyTotemFrame:SetParent(self.testFrame)
|
||||
self.testFrame.gladdyTotemFrame:ClearAllPoints()
|
||||
self.testFrame.gladdyTotemFrame:SetPoint("CENTER", self.testFrame, "CENTER", 0, 0)
|
||||
self.testFrame.gladdyTotemFrame.totemIcon:SetTexture(totemDataEntry.texture)
|
||||
self.testFrame.gladdyTotemFrame.totemBorder:SetVertexColor(Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.r,
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.g,
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.b,
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.a)
|
||||
self.testFrame.gladdyTotemFrame.totemName:SetText(Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].customText or "")
|
||||
self.testFrame.gladdyTotemFrame.parent = self.testFrame
|
||||
self.testFrame.gladdyTotemFrame:Show()
|
||||
self.activeTotemNameplates["player"] = self.testFrame
|
||||
else
|
||||
self.testFrame.gladdyTotemFrame:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:Reset()
|
||||
if self.testFrame then
|
||||
if self.testFrame.gladdyTotemFrame then
|
||||
self.testFrame.gladdyTotemFrame:Hide()
|
||||
self.testFrame.gladdyTotemFrame:SetParent(nil)
|
||||
tinsert(self.totemPlateCache, self.testFrame.gladdyTotemFrame)
|
||||
self.testFrame.gladdyTotemFrame = nil
|
||||
end
|
||||
self.testFrame:Hide()
|
||||
self.activeTotemNameplates["player"] = nil
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Interface options
|
||||
|
||||
---------------------------------------------------
|
||||
@@ -516,21 +554,23 @@ function TotemPlates:GetOptions()
|
||||
npTotems = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off. (Requires reload)"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off."],
|
||||
order = 3,
|
||||
width = 0.9,
|
||||
}),
|
||||
npTotemsShowFriendly = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Show friendly"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off. (Requires reload)"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off."],
|
||||
disabled = function() return not Gladdy.db.npTotems end,
|
||||
order = 4,
|
||||
width = 0.65,
|
||||
}),
|
||||
npTotemsShowEnemy = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Show enemy"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off. (Requires reload)"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off."],
|
||||
disabled = function() return not Gladdy.db.npTotems end,
|
||||
order = 5,
|
||||
width = 0.6,
|
||||
}),
|
||||
@@ -538,6 +578,7 @@ function TotemPlates:GetOptions()
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
disabled = function() return not Gladdy.db.npTotems end,
|
||||
order = 4,
|
||||
args = {
|
||||
icon = {
|
||||
@@ -732,7 +773,8 @@ function TotemPlates:GetOptions()
|
||||
name = L["Customize Totems"],
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
args = select(2, Gladdy:GetTotemColors())
|
||||
disabled = function() return not Gladdy.db.npTotems end,
|
||||
args = select(2, GetTotemColorDefaultOptions())
|
||||
},
|
||||
}
|
||||
end
|
||||
@@ -0,0 +1,782 @@
|
||||
local select, pairs, tremove, tinsert, format, strsplit, tonumber = select, pairs, tremove, tinsert, format, strsplit, tonumber
|
||||
local type = type
|
||||
local C_NamePlate = C_NamePlate
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local GetSpellInfo, CreateFrame = GetSpellInfo, CreateFrame
|
||||
local GetTime, UnitIsEnemy, UnitGUID = GetTime, UnitIsEnemy, UnitGUID
|
||||
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
||||
local UIParent = UIParent
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Helper
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
local totemData, npcIdToTotemData, cooldowns = Gladdy:GetTotemData()
|
||||
local ninetyDegreeInRad = 90 * math.pi / 180
|
||||
|
||||
local function TotemOptions()
|
||||
local defaultDB = {}
|
||||
local options = {}
|
||||
local indexedList = {}
|
||||
for k,v in pairs(totemData) do
|
||||
if v.pulse then
|
||||
tinsert(indexedList, {name = k, id = v.id, color = v.color, texture = v.texture})
|
||||
end
|
||||
end
|
||||
table.sort(indexedList, function (a, b)
|
||||
return a.name < b.name
|
||||
end)
|
||||
for i=1,#indexedList do
|
||||
defaultDB["totem" .. indexedList[i].id] = {enabled = true, attachToGladdyTotemFrame = true, style = "COOLDOWN", reverse = false}
|
||||
options["totem" .. indexedList[i].id] = {
|
||||
order = i+1,
|
||||
name = select(1, GetSpellInfo(indexedList[i].id)),
|
||||
--inline = true,
|
||||
width = "3.0",
|
||||
type = "group",
|
||||
icon = indexedList[i].texture,
|
||||
args = {
|
||||
headerTotemConfig = {
|
||||
type = "header",
|
||||
name = format("|T%s:20|t %s", indexedList[i].texture, select(1, GetSpellInfo(indexedList[i].id))),
|
||||
order = 1,
|
||||
},
|
||||
enabled = {
|
||||
order = 2,
|
||||
name = L["Enabled"],
|
||||
desc = "Enable " .. format("|T%s:20|t %s", indexedList[i].texture, select(1, GetSpellInfo(indexedList[i].id))),
|
||||
type = "toggle",
|
||||
width = "full",
|
||||
get = function() return Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].enabled end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].enabled = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
},
|
||||
attachToGladdyTotemFrame = {
|
||||
order = 3,
|
||||
disabled = function() return not Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].enabled end,
|
||||
name = L["Attach To TotemPlate"],
|
||||
desc = "Attach " .. format("|T%s:20|t %s", indexedList[i].texture, select(1, GetSpellInfo(indexedList[i].id))) .. " To TotemPlate",
|
||||
type = "toggle",
|
||||
width = "full",
|
||||
get = function() return Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].attachToGladdyTotemFrame end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].attachToGladdyTotemFrame = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
},
|
||||
style = {
|
||||
type = "select",
|
||||
name = L["Style"],
|
||||
order = 4,
|
||||
values = {
|
||||
COOLDOWN = L["Cooldown"],
|
||||
Vertical = L["Bar vertical"],
|
||||
Horizontal = L["Bar horizontal"]
|
||||
},
|
||||
get = function() return Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].style end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].style = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
},
|
||||
reverse = {
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].enabled end,
|
||||
name = L["Reverse"],
|
||||
type = "toggle",
|
||||
width = "full",
|
||||
get = function() return Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].reverse end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.totemPulseTotems["totem" .. indexedList[i].id].reverse = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
},
|
||||
}
|
||||
}
|
||||
end
|
||||
return options,defaultDB
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Core
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
local TotemPulse = Gladdy:NewModule("Totem Pulse", 1, {
|
||||
totemPulseEnabled = true,
|
||||
totemPulseEnabledShowFriendly = true,
|
||||
totemPulseEnabledShowEnemy = true,
|
||||
totemPulseStyle = "", -- "COOLDOWN", "COOLDOWNREVERSE", "BARVERTICAL", "BARHORIZONTAL"
|
||||
--text
|
||||
totemPulseTextColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
totemPulseTextSize = 14,
|
||||
totemPulseTextFont = "DorisPP",
|
||||
--bar
|
||||
totemPulseBarWidth = 40,
|
||||
totemPulseBarHeight = 20,
|
||||
totemPulseBarColor = { r = 1, g = 0, b = 0, a = .5 },
|
||||
totemPulseBarBgColor = { r = 0, g = 1, b = 0, a = .5 },
|
||||
totemPulseBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
totemPulseBarBorderSize = 4,
|
||||
totemPulseBarBorderStyle = "Gladdy Tooltip squared",
|
||||
totemPulseBarTexture = "Flat",
|
||||
totemPulseBarReverse = false,
|
||||
--cooldown
|
||||
totemPulseCooldownWidth = 40,
|
||||
totemPulseCooldownHeight = 20,
|
||||
totemPulseCooldownAlpha = 1,
|
||||
totemPulseCooldownReverse = true,
|
||||
--totems
|
||||
totemPulseTotems = select(2, TotemOptions())
|
||||
})
|
||||
|
||||
function TotemPulse.OnEvent(self, event, ...)
|
||||
TotemPulse[event](self, ...)
|
||||
end
|
||||
|
||||
function TotemPulse:Initialize()
|
||||
self.timeStamps = {}
|
||||
self.cooldownCache = {}
|
||||
self.barCache = {}
|
||||
self.activeFrames = { bars = {}, cooldowns = {} }
|
||||
if Gladdy.db.totemPulseEnabled then
|
||||
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("UNIT_NAME_UPDATE")
|
||||
self:SetScript("OnEvent", self.OnEvent)
|
||||
end
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- EVENTS
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPulse:PLAYER_ENTERING_WORLD()
|
||||
self.timeStamps = {}
|
||||
end
|
||||
|
||||
function TotemPulse:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName = CombatLogGetCurrentEventInfo()
|
||||
local pulse = cooldowns[spellID] or cooldowns[spellName]
|
||||
local npcId = tonumber(select(6, strsplit("-", destGUID)), 10)
|
||||
if eventType == "UNIT_DESTROYED" and self.timeStamps[destGUID] then
|
||||
self.timeStamps[destGUID] = nil
|
||||
end
|
||||
if (eventType == "SWING_DAMAGE" or eventType == "SPELL_DAMAGE") and self.timeStamps[destGUID] and npcIdToTotemData[npcId] then
|
||||
self.timeStamps[destGUID] = nil
|
||||
end
|
||||
if not pulse then
|
||||
return
|
||||
end
|
||||
if eventType == "SPELL_CAST_SUCCESS" then
|
||||
self.timeStamps[sourceGUID] = { timeStamp = GetTime(), pulse = pulse }
|
||||
end
|
||||
if eventType == "SPELL_SUMMON" then
|
||||
if not npcIdToTotemData[npcId] then
|
||||
return
|
||||
end
|
||||
if not Gladdy.dbi.profile.totemPulseTotems["totem" .. npcIdToTotemData[npcId].id].enabled then
|
||||
return
|
||||
end
|
||||
if self.timeStamps[sourceGUID] then
|
||||
self.timeStamps[destGUID] = self.timeStamps[sourceGUID]
|
||||
self.timeStamps[destGUID].id = npcIdToTotemData[npcId].id
|
||||
self.timeStamps[sourceGUID] = nil
|
||||
else
|
||||
self.timeStamps[destGUID] = { timeStamp = GetTime(), pulse = pulse, id = npcIdToTotemData[npcId].id }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPulse:NAME_PLATE_UNIT_REMOVED(unitId)
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitId)
|
||||
if nameplate.totemTick then
|
||||
nameplate.totemTick:SetScript("OnUpdate", nil)
|
||||
nameplate.totemTick:Hide()
|
||||
nameplate.totemTick:SetParent(nil)
|
||||
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
||||
self.activeFrames.bars[nameplate.totemTick] = nil
|
||||
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
||||
nameplate.totemTick = nil
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPulse:NAME_PLATE_UNIT_ADDED(unitId)
|
||||
self:OnUnitAdded(unitId, "NAME_PLATE_UNIT_ADDED")
|
||||
end
|
||||
|
||||
function TotemPulse:UNIT_NAME_UPDATE(unitId)
|
||||
self:OnUnitAdded(unitId, "UNIT_NAME_UPDATE")
|
||||
end
|
||||
|
||||
function TotemPulse:OnUnitAdded(unitId)
|
||||
local isEnemy = UnitIsEnemy("player", unitId)
|
||||
local guid = UnitGUID(unitId)
|
||||
if strsplit("-", guid) ~= "Creature" then
|
||||
return
|
||||
end
|
||||
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitId)
|
||||
|
||||
if nameplate and (isEnemy and Gladdy.db.totemPulseEnabledShowEnemy or not isEnemy and Gladdy.db.totemPulseEnabledShowFriendly) then
|
||||
if self.timeStamps[guid] and strsplit("-", guid) then
|
||||
self:AddTimerFrame(nameplate, self.timeStamps[guid])
|
||||
else
|
||||
if nameplate.totemTick then
|
||||
nameplate.totemTick:SetScript("OnUpdate", nil)
|
||||
nameplate.totemTick:Hide()
|
||||
nameplate.totemTick:SetParent(nil)
|
||||
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
||||
self.activeFrames.bars[nameplate.totemTick] = nil
|
||||
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
||||
nameplate.totemTick = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- FRAMES
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPulse:CreateCooldownFrame(style)
|
||||
local totemTick
|
||||
|
||||
if style == "COOLDOWN" then
|
||||
if #self.cooldownCache > 0 then
|
||||
totemTick = tremove(self.cooldownCache, #self.cooldownCache)
|
||||
else
|
||||
totemTick = CreateFrame("Frame")
|
||||
totemTick:SetWidth(Gladdy.db.totemPulseCooldownWidth)
|
||||
totemTick:SetHeight(Gladdy.db.totemPulseCooldownHeight)
|
||||
totemTick.cd = CreateFrame("Cooldown", nil, totemTick, "CooldownFrameTemplate")
|
||||
totemTick.cd:SetAllPoints(totemTick)
|
||||
totemTick.cd.noCooldownCount = true
|
||||
totemTick:SetFrameStrata("MEDIUM")
|
||||
totemTick:SetFrameLevel(4)
|
||||
totemTick.cd:SetReverse(Gladdy.db.totemPulseCooldownReverse)
|
||||
totemTick.cd:SetHideCountdownNumbers(true)
|
||||
totemTick.cd:SetAlpha(Gladdy.db.totemPulseCooldownAlpha)
|
||||
|
||||
totemTick.textFrame = CreateFrame("Frame", nil, totemTick)
|
||||
totemTick.textFrame:SetAllPoints(totemTick)
|
||||
totemTick.text = totemTick.textFrame:CreateFontString(nil, "OVERLAY")
|
||||
totemTick.text:SetPoint("CENTER", totemTick.textFrame, "CENTER")
|
||||
totemTick.text:SetFont(Gladdy:SMFetch("font", "totemPulseTextFont"), Gladdy.db.totemPulseTextSize, "OUTLINE")
|
||||
totemTick.text:SetJustifyH("CENTER")
|
||||
totemTick.text:SetShadowOffset(1, -1)
|
||||
totemTick.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
||||
end
|
||||
else
|
||||
if #self.barCache > 0 then
|
||||
totemTick = tremove(self.barCache, #self.barCache)
|
||||
totemTick.bar:SetOrientation(style)
|
||||
totemTick.spark:SetRotation(style == "Vertical" and ninetyDegreeInRad or 0)
|
||||
totemTick.spark:SetHeight(style == "Vertical" and Gladdy.db.totemPulseBarWidth or Gladdy.db.totemPulseBarHeight)
|
||||
else
|
||||
totemTick = CreateFrame("Frame", nil)
|
||||
|
||||
totemTick:SetWidth(Gladdy.db.totemPulseBarWidth)
|
||||
totemTick:SetHeight(Gladdy.db.totemPulseBarHeight)
|
||||
|
||||
totemTick.backdrop = CreateFrame("Frame", nil, totemTick, BackdropTemplateMixin and "BackdropTemplate")
|
||||
totemTick.backdrop:SetAllPoints(totemTick)
|
||||
totemTick.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "totemPulseBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.totemPulseBarBorderSize })
|
||||
totemTick.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBorderColor))
|
||||
totemTick.backdrop:SetFrameLevel(1)
|
||||
|
||||
totemTick.bar = CreateFrame("StatusBar", nil, totemTick)
|
||||
totemTick.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
||||
totemTick.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.totemPulseBarColor))
|
||||
totemTick.bar:SetOrientation(style)
|
||||
totemTick.bar:SetFrameLevel(0)
|
||||
totemTick.bar:SetAllPoints(totemTick)
|
||||
|
||||
totemTick.spark = totemTick.bar:CreateTexture(nil, "OVERLAY")
|
||||
totemTick.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark")
|
||||
totemTick.spark:SetBlendMode("ADD")
|
||||
totemTick.spark:SetWidth(8)
|
||||
totemTick.spark:SetHeight(style == "Vertical" and Gladdy.db.totemPulseBarWidth or Gladdy.db.totemPulseBarHeight)
|
||||
totemTick.spark.position = 0
|
||||
totemTick.spark:SetRotation(style == "Vertical" and ninetyDegreeInRad or 0)
|
||||
|
||||
totemTick.bg = totemTick:CreateTexture(nil, "ARTWORK")
|
||||
totemTick.bg:SetTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
||||
totemTick.bg:SetAllPoints(totemTick.bar)
|
||||
totemTick.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBgColor))
|
||||
|
||||
totemTick.text = totemTick.bar:CreateFontString(nil, "OVERLAY")
|
||||
totemTick.text:SetPoint("CENTER", totemTick, "CENTER", 0, 0)
|
||||
totemTick.text:SetFont(Gladdy:SMFetch("font", "totemPulseTextFont"), Gladdy.db.totemPulseTextSize, "OUTLINE")
|
||||
totemTick.text:SetJustifyH("CENTER")
|
||||
totemTick.text:SetShadowOffset(1, -1)
|
||||
totemTick.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
||||
end
|
||||
end
|
||||
return totemTick
|
||||
end
|
||||
|
||||
function TotemPulse:AddTimerFrame(nameplate, timestamp, test)
|
||||
if (nameplate:IsShown() or test) and timestamp and timestamp.id then
|
||||
if not nameplate.totemTick then
|
||||
nameplate.totemTick = TotemPulse:CreateCooldownFrame(Gladdy.db.totemPulseTotems["totem" .. timestamp.id].style)
|
||||
end
|
||||
nameplate.totemTick:SetParent(nameplate)
|
||||
|
||||
local cd = type(timestamp.pulse) == "table" and timestamp.pulse.cd or timestamp.pulse
|
||||
local once = type(timestamp.pulse) == "table"
|
||||
local cooldown = (timestamp.timeStamp - GetTime()) % cd
|
||||
|
||||
nameplate.totemTick.timestamp = timestamp.timeStamp
|
||||
nameplate.totemTick.maxValue = cd
|
||||
nameplate.totemTick.value = cooldown
|
||||
nameplate.totemTick.once = once
|
||||
nameplate.totemTick.id = timestamp.id
|
||||
|
||||
if nameplate.totemTick.bar then
|
||||
self:UpdateBarPartial(nameplate.totemTick)
|
||||
nameplate.totemTick.bar:SetMinMaxValues(0, cd)
|
||||
nameplate.totemTick.bar:SetValue(cooldown)
|
||||
self.activeFrames.bars[nameplate.totemTick] = nameplate.totemTick
|
||||
else
|
||||
self:UpdateCooldown(nameplate.totemTick)
|
||||
self.activeFrames.cooldowns[nameplate.totemTick] = nameplate.totemTick
|
||||
end
|
||||
|
||||
if once and GetTime() - timestamp.timeStamp > cd then
|
||||
nameplate.totemTick:SetScript("OnUpdate", nil)
|
||||
nameplate.totemTick:Hide()
|
||||
else
|
||||
nameplate.totemTick:SetScript("OnUpdate", TotemPulse.TotemPulseOnUpdate)
|
||||
nameplate.totemTick:Show()
|
||||
end
|
||||
else
|
||||
if nameplate.totemTick then
|
||||
nameplate.totemTick:SetScript("OnUpdate", nil)
|
||||
nameplate.totemTick:Hide()
|
||||
nameplate.totemTick:SetParent(nil)
|
||||
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
||||
self.activeFrames.bars[nameplate.totemTick] = nil
|
||||
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
||||
nameplate.totemTick = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPulse:SetSparkPosition(totemTick, referenceSize, vertical)
|
||||
if not Gladdy.db.totemPulseTotems["totem" .. totemTick.id].reverse then
|
||||
totemTick.bar:SetValue(totemTick.maxValue - totemTick.value)
|
||||
totemTick.spark.position = referenceSize / 2 - (totemTick.value / totemTick.maxValue) * referenceSize
|
||||
if ( totemTick.spark.position < -referenceSize / 2 ) then
|
||||
totemTick.spark.position = -referenceSize / 2
|
||||
end
|
||||
else
|
||||
totemTick.bar:SetValue(totemTick.value)
|
||||
totemTick.spark.position = referenceSize / 2 - ((totemTick.maxValue - totemTick.value) / totemTick.maxValue) * referenceSize
|
||||
if ( totemTick.spark.position > referenceSize / 2 ) then
|
||||
totemTick.spark.position = referenceSize / 2
|
||||
end
|
||||
end
|
||||
totemTick.spark:SetPoint("CENTER", totemTick.bar, "CENTER", vertical and 0 or totemTick.spark.position, vertical and totemTick.spark.position or 0)
|
||||
end
|
||||
|
||||
function TotemPulse.TotemPulseOnUpdate(totemTick)
|
||||
totemTick.now = GetTime()
|
||||
totemTick.value = (totemTick.timestamp - totemTick.now) % totemTick.maxValue
|
||||
if totemTick.once and totemTick.now - totemTick.timestamp >= totemTick.maxValue then
|
||||
totemTick:SetScript("OnUpdate", nil)
|
||||
totemTick:Hide()
|
||||
end
|
||||
if not totemTick.bar and not (totemTick.once and totemTick.now - totemTick.timestamp >= totemTick.maxValue) then
|
||||
if Gladdy.db.totemPulseTotems["totem" .. totemTick.id].reverse then
|
||||
totemTick.cd:SetCooldown(totemTick.now - totemTick.value, totemTick.maxValue)
|
||||
else
|
||||
totemTick.cd:SetCooldown(totemTick.now - (totemTick.maxValue - totemTick.value), totemTick.maxValue)
|
||||
end
|
||||
elseif totemTick.bar then
|
||||
if Gladdy.db.totemPulseTotems["totem" .. totemTick.id].style == "Vertical" then
|
||||
TotemPulse:SetSparkPosition(totemTick, totemTick.bar:GetHeight(), true)
|
||||
else
|
||||
TotemPulse:SetSparkPosition(totemTick, totemTick.bar:GetWidth(), false)
|
||||
end
|
||||
end
|
||||
totemTick.text:SetFormattedText("%.1f", totemTick.value)
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Update Styles
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPulse:UpdateBarPartial(bar)
|
||||
local style = bar.id and Gladdy.db.totemPulseTotems["totem" .. bar.id].style
|
||||
|
||||
bar:SetWidth(Gladdy.db.totemPulseBarWidth)
|
||||
bar:SetHeight(Gladdy.db.totemPulseBarHeight)
|
||||
|
||||
bar.spark:SetWidth(8)
|
||||
bar.spark:SetHeight(style == "Vertical" and Gladdy.db.totemPulseBarWidth or Gladdy.db.totemPulseBarHeight)
|
||||
bar.spark:SetRotation(style == "Vertical" and ninetyDegreeInRad or 0)
|
||||
|
||||
|
||||
if bar:GetParent() and bar:GetParent() ~= UIParent then
|
||||
local gladdyTotemFrame = bar:GetParent().gladdyTotemFrame and bar:GetParent().gladdyTotemFrame
|
||||
local nameplate = bar:GetParent()
|
||||
bar:ClearAllPoints()
|
||||
if bar.id and gladdyTotemFrame and gladdyTotemFrame:IsShown() and Gladdy.db.totemPulseTotems["totem" .. bar.id].attachToGladdyTotemFrame then
|
||||
bar:SetPoint("TOPLEFT", gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
||||
bar:SetPoint("BOTTOMRIGHT", gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
||||
if style then
|
||||
bar.spark:SetHeight(style == "Vertical" and gladdyTotemFrame:GetWidth() or gladdyTotemFrame:GetHeight())
|
||||
end
|
||||
elseif bar.id and gladdyTotemFrame and gladdyTotemFrame:IsShown() and not Gladdy.db.totemPulseTotems["totem" .. bar.id].attachToGladdyTotemFrame then
|
||||
bar:SetPoint("TOP", gladdyTotemFrame, "BOTTOM", 0, -0.5)
|
||||
else
|
||||
bar:SetPoint("TOP", nameplate, "BOTTOM", 0, -0.5)
|
||||
end
|
||||
end
|
||||
bar.bar:SetOrientation(style ~= "COOLDOWN" and style or bar.bar:GetOrientation())
|
||||
end
|
||||
|
||||
function TotemPulse:UpdateBar(bar)
|
||||
self:UpdateBarPartial(bar)
|
||||
|
||||
bar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "totemPulseBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.totemPulseBarBorderSize })
|
||||
bar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBorderColor))
|
||||
|
||||
bar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
||||
bar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.totemPulseBarColor))
|
||||
|
||||
bar.bg:SetTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
||||
bar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBgColor))
|
||||
|
||||
bar.text:SetFont(Gladdy:SMFetch("font", "totemPulseTextFont"), Gladdy.db.totemPulseTextSize, "OUTLINE")
|
||||
bar.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
||||
end
|
||||
|
||||
function TotemPulse:UpdateCooldown(cooldown)
|
||||
cooldown:SetWidth(Gladdy.db.totemPulseCooldownWidth)
|
||||
cooldown:SetHeight(Gladdy.db.totemPulseCooldownHeight)
|
||||
|
||||
cooldown.cd:SetCooldown(0,0)
|
||||
cooldown.cd:SetReverse(Gladdy.db.totemPulseCooldownReverse)
|
||||
cooldown.cd:SetAlpha(Gladdy.db.totemPulseCooldownAlpha)
|
||||
|
||||
cooldown.text:SetFont(Gladdy:SMFetch("font", "totemPulseTextFont"), Gladdy.db.totemPulseTextSize, "OUTLINE")
|
||||
cooldown.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
||||
|
||||
if cooldown:GetParent() and cooldown:GetParent() ~= UIParent then
|
||||
local gladdyTotemFrame = cooldown:GetParent().gladdyTotemFrame and cooldown:GetParent().gladdyTotemFrame
|
||||
local nameplate = cooldown:GetParent()
|
||||
cooldown:ClearAllPoints()
|
||||
if cooldown.id and gladdyTotemFrame and gladdyTotemFrame:IsShown() and Gladdy.db.totemPulseTotems["totem" .. cooldown.id].attachToGladdyTotemFrame then
|
||||
cooldown:SetPoint("TOPLEFT", gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
||||
cooldown:SetPoint("BOTTOMRIGHT", gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
||||
elseif cooldown.id and gladdyTotemFrame and gladdyTotemFrame:IsShown() and not Gladdy.db.totemPulseTotems["totem" .. cooldown.id].attachToGladdyTotemFrame then
|
||||
cooldown:SetPoint("TOP", gladdyTotemFrame, "BOTTOM", 0, -0.5)
|
||||
else
|
||||
cooldown:SetPoint("TOP", nameplate, "BOTTOM", 0, -0.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPulse:UpdateFrameOnce()
|
||||
if Gladdy.frame.testing then
|
||||
TotemPulse:TestOnce()
|
||||
end
|
||||
if Gladdy.db.totemPulseEnabled then
|
||||
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("UNIT_NAME_UPDATE")
|
||||
self:SetScript("OnEvent", self.OnEvent)
|
||||
else
|
||||
for _,bar in pairs(self.activeFrames.bars) do
|
||||
bar:SetScript("OnUpdate", nil)
|
||||
bar:Hide()
|
||||
bar:SetParent(nil)
|
||||
tinsert(self.barCache, bar)
|
||||
self.activeFrames.bars[bar] = nil
|
||||
end
|
||||
for _,cooldown in pairs(self.activeFrames.cooldowns) do
|
||||
cooldown:SetScript("OnUpdate", nil)
|
||||
cooldown:Hide()
|
||||
cooldown:SetParent(nil)
|
||||
tinsert(self.cooldownCache, cooldown)
|
||||
self.activeFrames.cooldowns[cooldown] = nil
|
||||
end
|
||||
self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
||||
self:UnregisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:UnregisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:UnregisterEvent("UNIT_NAME_UPDATE")
|
||||
self:SetScript("OnEvent", nil)
|
||||
end
|
||||
for _,bar in pairs(self.activeFrames.bars) do
|
||||
self:UpdateBar(bar)
|
||||
end
|
||||
for _,cooldown in pairs(self.activeFrames.cooldowns) do
|
||||
self:UpdateCooldown(cooldown)
|
||||
end
|
||||
for _,bar in pairs(self.barCache) do
|
||||
self:UpdateBar(bar)
|
||||
end
|
||||
for _,cooldown in pairs(self.cooldownCache) do
|
||||
self:UpdateCooldown(cooldown)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- TEST
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPulse:TestOnce()
|
||||
local totemPlatesTestFrame = Gladdy.modules["Totem Plates"].testFrame
|
||||
if totemPlatesTestFrame then
|
||||
if totemPlatesTestFrame.totemTick
|
||||
and (Gladdy.db.totemPulseTotems["totem" .. npcIdToTotemData[5913].id].style == "COOLDOWN" and totemPlatesTestFrame.totemTick.bar
|
||||
or Gladdy.db.totemPulseTotems["totem" .. npcIdToTotemData[5913].id].style ~= "COOLDOWN" and not totemPlatesTestFrame.totemTick.bar) then
|
||||
totemPlatesTestFrame.totemTick:SetScript("OnUpdate", nil)
|
||||
totemPlatesTestFrame.totemTick:Hide()
|
||||
totemPlatesTestFrame.totemTick:SetParent(nil)
|
||||
totemPlatesTestFrame.totemTick.id = nil
|
||||
tinsert(totemPlatesTestFrame.totemTick.bar and self.barCache or self.cooldownCache, totemPlatesTestFrame.totemTick)
|
||||
self.activeFrames.bars[totemPlatesTestFrame.totemTick] = nil
|
||||
self.activeFrames.cooldowns[totemPlatesTestFrame.totemTick] = nil
|
||||
totemPlatesTestFrame.totemTick = nil
|
||||
end
|
||||
|
||||
local timestamp = { timeStamp = GetTime(), pulse = npcIdToTotemData[5913].pulse, id = npcIdToTotemData[5913].id }
|
||||
TotemPulse:AddTimerFrame(totemPlatesTestFrame, timestamp, true)
|
||||
self.testFrame = totemPlatesTestFrame.totemTick
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPulse:Reset()
|
||||
if self.testFrame then
|
||||
self.testFrame:SetScript("OnUpdate", nil)
|
||||
self.testFrame:Hide()
|
||||
self.testFrame:SetParent(nil)
|
||||
tinsert(self.testFrame.bar and self.barCache or self.cooldownCache, self.testFrame)
|
||||
self.activeFrames.bars[self.testFrame] = nil
|
||||
self.activeFrames.cooldowns[self.testFrame] = nil
|
||||
self.testFrame = nil
|
||||
Gladdy.modules["Totem Plates"].testFrame.totemTick = nil
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- OPTIONS
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPulse:GetOptions()
|
||||
return {
|
||||
headerClassicon = {
|
||||
type = "header",
|
||||
name = L["Totem Pulse"],
|
||||
order = 2,
|
||||
},
|
||||
totemPulseEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Totem Pulse Enabled"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.totemPulseEnabled end,
|
||||
args = {
|
||||
barFrame = {
|
||||
type = "group",
|
||||
name = L["Bar"],
|
||||
order = 2,
|
||||
args = {
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 10,
|
||||
},
|
||||
totemPulseBarHeight = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Bar height"],
|
||||
desc = L["Height of the bar"],
|
||||
order = 11,
|
||||
min = 0.1,
|
||||
max = 200,
|
||||
step = .1,
|
||||
width = "full",
|
||||
}),
|
||||
totemPulseBarWidth = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Bar width"],
|
||||
desc = L["Width of the bar"],
|
||||
order = 12,
|
||||
min = 0.1,
|
||||
max = 600,
|
||||
step = .1,
|
||||
width = "full",
|
||||
}),
|
||||
headerTexture = {
|
||||
type = "header",
|
||||
name = L["Texture"],
|
||||
order = 20,
|
||||
},
|
||||
totemPulseBarTexture = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Bar texture"],
|
||||
desc = L["Texture of the bar"],
|
||||
order = 21,
|
||||
dialogControl = "LSM30_Statusbar",
|
||||
values = AceGUIWidgetLSMlists.statusbar,
|
||||
}),
|
||||
totemPulseBarColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Bar color"],
|
||||
desc = L["Color of the cast bar"],
|
||||
order = 22,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
totemPulseBarBgColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Background color"],
|
||||
desc = L["Color of the cast bar background"],
|
||||
order = 23,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
headerBorder = {
|
||||
type = "header",
|
||||
name = L["Border"],
|
||||
order = 30,
|
||||
},
|
||||
totemPulseBarBorderSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Border size"],
|
||||
order = 31,
|
||||
min = 0.5,
|
||||
max = Gladdy.db.castBarHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
totemPulseBarBorderStyle = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Status Bar border"],
|
||||
order = 32,
|
||||
dialogControl = "LSM30_Border",
|
||||
values = AceGUIWidgetLSMlists.border,
|
||||
}),
|
||||
totemPulseBarBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Status Bar border color"],
|
||||
order = 33,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
cooldownFrame = {
|
||||
type = "group",
|
||||
name = L["Cooldown"],
|
||||
order = 3,
|
||||
args = {
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Frame"],
|
||||
order = 10,
|
||||
},
|
||||
totemPulseCooldownHeight = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Height"],
|
||||
order = 11,
|
||||
min = 0.1,
|
||||
max = 200,
|
||||
step = .1,
|
||||
width = "full",
|
||||
}),
|
||||
totemPulseCooldownWidth = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Width"],
|
||||
order = 12,
|
||||
min = 0.1,
|
||||
max = 600,
|
||||
step = .1,
|
||||
width = "full",
|
||||
}),
|
||||
totemPulseCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Alpha"],
|
||||
order = 21,
|
||||
min = 0.1,
|
||||
max = 1,
|
||||
step = .1,
|
||||
width = "full",
|
||||
}),
|
||||
|
||||
},
|
||||
},
|
||||
text = {
|
||||
type = "group",
|
||||
name = L["Text"],
|
||||
order = 4,
|
||||
args = {
|
||||
headerSize = {
|
||||
type = "header",
|
||||
name = L["Text"],
|
||||
order = 10,
|
||||
},
|
||||
totemPulseTextSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Size"],
|
||||
order = 11,
|
||||
min = 0.5,
|
||||
max = 30,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
totemPulseTextFont = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Font"],
|
||||
desc = L["Font of the bar"],
|
||||
order = 12,
|
||||
dialogControl = "LSM30_Font",
|
||||
values = AceGUIWidgetLSMlists.font,
|
||||
}),
|
||||
totemPulseTextColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Font color"],
|
||||
desc = L["Color of the text"],
|
||||
order = 13,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
customizeTotems = {
|
||||
order = 50,
|
||||
name = L["Customize Totems"],
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
disabled = function() return not Gladdy.db.totemPulseEnabled end,
|
||||
args = select(1, TotemOptions())
|
||||
},
|
||||
}
|
||||
end
|
||||
+161
-30
@@ -1,4 +1,4 @@
|
||||
local ceil = ceil
|
||||
local ceil, str_gsub = ceil, string.gsub
|
||||
local C_PvP = C_PvP
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
@@ -13,6 +13,7 @@ local Trinket = Gladdy:NewModule("Trinket", 80, {
|
||||
trinketEnabled = true,
|
||||
trinketSize = 60 + 20 + 1,
|
||||
trinketWidthFactor = 0.9,
|
||||
trinketIconZoomed = false,
|
||||
trinketBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||
trinketBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
trinketDisableCircle = false,
|
||||
@@ -25,12 +26,30 @@ local Trinket = Gladdy:NewModule("Trinket", 80, {
|
||||
trinketColored = false,
|
||||
trinketColoredCd = { r = 1, g = 0, b = 0, a = 1 },
|
||||
trinketColoredNoCd = { r = 0, g = 1, b = 0, a = 1 },
|
||||
trinketGroup = false,
|
||||
trinketGroupDirection = "DOWN",
|
||||
})
|
||||
|
||||
function Trinket:Initialize()
|
||||
self.frames = {}
|
||||
if Gladdy.db.trinketEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("TRINKET_USED")
|
||||
if Gladdy.expansion == "Wrath" then
|
||||
self:RegisterMessage("RACIAL_USED")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
function Trinket:UpdateFrameOnce()
|
||||
if Gladdy.db.trinketEnabled then
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
if Gladdy.expansion == "Wrath" then
|
||||
self:RegisterMessage("RACIAL_USED")
|
||||
end
|
||||
else
|
||||
self:UnregisterAllMessages()
|
||||
end
|
||||
end
|
||||
|
||||
local function iconTimer(self, elapsed)
|
||||
@@ -83,6 +102,7 @@ function Trinket:CreateFrame(unit)
|
||||
trinket.texture:SetAllPoints(trinket)
|
||||
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
trinket.texture.masked = true
|
||||
|
||||
trinket.cooldown = CreateFrame("Cooldown", nil, trinket, "CooldownFrameTemplate")
|
||||
trinket.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
|
||||
@@ -126,17 +146,7 @@ function Trinket:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
if Gladdy.db.trinketColored then
|
||||
if trinket.active then
|
||||
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd))
|
||||
else
|
||||
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd))
|
||||
end
|
||||
trinket.texture:SetTexture()
|
||||
else
|
||||
trinket:SetBackdropColor(0,0,0,0)
|
||||
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||
end
|
||||
local testAgain = false
|
||||
|
||||
local width, height = Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize
|
||||
|
||||
@@ -151,8 +161,14 @@ function Trinket:UpdateFrame(unit)
|
||||
|
||||
trinket:SetWidth(width)
|
||||
trinket:SetHeight(height)
|
||||
trinket.cooldown:SetWidth(width - width/16)
|
||||
trinket.cooldown:SetHeight(height - height/16)
|
||||
if Gladdy.db.trinketIconZoomed then
|
||||
trinket.cooldown:SetWidth(width)
|
||||
trinket.cooldown:SetHeight(height)
|
||||
|
||||
else
|
||||
trinket.cooldown:SetWidth(width - width/16)
|
||||
trinket.cooldown:SetHeight(height - height/16)
|
||||
end
|
||||
trinket.cooldown:ClearAllPoints()
|
||||
trinket.cooldown:SetPoint("CENTER", trinket, "CENTER")
|
||||
trinket.cooldown.noCooldownCount = true -- Gladdy.db.trinketDisableOmniCC
|
||||
@@ -164,8 +180,54 @@ function Trinket:UpdateFrame(unit)
|
||||
trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle)
|
||||
trinket.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.trinketBorderColor))
|
||||
|
||||
if Gladdy.db.trinketIconZoomed then
|
||||
if trinket.texture.masked then
|
||||
trinket.texture:SetMask(nil)
|
||||
trinket.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||
trinket.texture.masked = nil
|
||||
end
|
||||
else
|
||||
if not trinket.texture.masked then
|
||||
trinket.texture:SetMask(nil)
|
||||
trinket.texture:SetTexCoord(0,1,0,1)
|
||||
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
trinket.texture.masked = true
|
||||
if Gladdy.frame.testing then
|
||||
testAgain = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Gladdy.db.trinketColored then
|
||||
if trinket.active then
|
||||
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd))
|
||||
else
|
||||
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd))
|
||||
end
|
||||
trinket.texture:SetTexture()
|
||||
else
|
||||
trinket:SetBackdropColor(0,0,0,0)
|
||||
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||
end
|
||||
|
||||
Gladdy:SetPosition(trinket, unit, "trinketXOffset", "trinketYOffset", Trinket:LegacySetPosition(trinket, unit), Trinket)
|
||||
|
||||
if (Gladdy.db.trinketGroup) then
|
||||
if (unit ~= "arena1") then
|
||||
local previousUnit = "arena" .. str_gsub(unit, "arena", "") - 1
|
||||
self.frames[unit]:ClearAllPoints()
|
||||
if Gladdy.db.trinketGroupDirection == "RIGHT" then
|
||||
self.frames[unit]:SetPoint("LEFT", self.frames[previousUnit], "RIGHT", 0, 0)
|
||||
elseif Gladdy.db.trinketGroupDirection == "LEFT" then
|
||||
self.frames[unit]:SetPoint("RIGHT", self.frames[previousUnit], "LEFT", 0, 0)
|
||||
elseif Gladdy.db.trinketGroupDirection == "UP" then
|
||||
self.frames[unit]:SetPoint("BOTTOM", self.frames[previousUnit], "TOP", 0, 0)
|
||||
elseif Gladdy.db.trinketGroupDirection == "DOWN" then
|
||||
self.frames[unit]:SetPoint("TOP", self.frames[previousUnit], "BOTTOM", 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (unit == "arena1") then
|
||||
Gladdy:CreateMover(trinket,"trinketXOffset", "trinketYOffset", L["Trinket"],
|
||||
{"TOPLEFT", "TOPLEFT"},
|
||||
@@ -187,6 +249,10 @@ function Trinket:UpdateFrame(unit)
|
||||
trinket:Hide()
|
||||
else
|
||||
trinket:Show()
|
||||
if testAgain then
|
||||
Trinket:ResetUnit(unit)
|
||||
Trinket:Test(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -201,6 +267,7 @@ function Trinket:ResetUnit(unit)
|
||||
return
|
||||
end
|
||||
|
||||
trinket.itemID = nil
|
||||
trinket.timeLeft = nil
|
||||
trinket.active = false
|
||||
trinket.cooldown:Clear()
|
||||
@@ -212,13 +279,14 @@ function Trinket:Test(unit)
|
||||
if (not trinket) then
|
||||
return
|
||||
end
|
||||
if (unit == "arena2" or unit == "arena3") then
|
||||
self:Used(unit, GetTime() * 1000, 120000)
|
||||
if (unit == "arena1" or unit == "arena2") then
|
||||
Gladdy:SendMessage("TRINKET_USED", unit)
|
||||
end
|
||||
end
|
||||
|
||||
function Trinket:JOINED_ARENA()
|
||||
self:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
|
||||
self:RegisterEvent("ARENA_CROWD_CONTROL_SPELL_UPDATE")
|
||||
self:SetScript("OnEvent", function(self, event, ...)
|
||||
if self[event] then
|
||||
self[event](self, ...)
|
||||
@@ -226,13 +294,52 @@ function Trinket:JOINED_ARENA()
|
||||
end)
|
||||
end
|
||||
|
||||
function Trinket:ARENA_CROWD_CONTROL_SPELL_UPDATE(...)
|
||||
local unitID, spellID, itemID = ...
|
||||
Gladdy:Debug("INFO", "Trinket:ARENA_CROWD_CONTROL_SPELL_UPDATE", unitID, spellID, itemID)
|
||||
if Gladdy.buttons[unitID] and Gladdy:GetPvpTrinkets()[itemID] then
|
||||
Gladdy.buttons[unitID].trinket.itemID = itemID
|
||||
if not Gladdy.db.trinketColored then
|
||||
self.frames[unitID].texture:SetTexture(GetItemIcon(itemID))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Trinket:TRINKET_USED(unit)
|
||||
if Gladdy.buttons[unit] then
|
||||
self:Used(unit, GetTime() * 1000,
|
||||
Gladdy.buttons[unit].trinket.itemID and Gladdy:GetPvpTrinkets()[Gladdy.buttons[unit].trinket.itemID]
|
||||
or 120000)
|
||||
end
|
||||
end
|
||||
|
||||
function Trinket:RACIAL_USED(unit) -- Wrath only
|
||||
local trinket = self.frames[unit]
|
||||
if (not trinket) then
|
||||
return
|
||||
end
|
||||
if Gladdy.buttons[unit].race == "Scourge" then
|
||||
if trinket.active and trinket.timeLeft >= 45 then
|
||||
-- do nothing
|
||||
else
|
||||
self:Used(unit, GetTime() * 1000, 45000)
|
||||
end
|
||||
elseif Gladdy.buttons[unit].race == "Human" then
|
||||
self:Used(unit, GetTime() * 1000, 120000)
|
||||
end
|
||||
end
|
||||
|
||||
function Trinket:ARENA_COOLDOWNS_UPDATE()
|
||||
for i=1, Gladdy.curBracket do
|
||||
local unit = "arena" .. i
|
||||
local spellID, itemID, startTime, duration = C_PvP.GetArenaCrowdControlInfo(unit);
|
||||
local unitID = "arena" .. i
|
||||
local spellID, itemID, startTime, duration = C_PvP.GetArenaCrowdControlInfo(unitID)
|
||||
if (spellID) then
|
||||
Gladdy:Debug("INFO", "Trinket:ARENA_COOLDOWNS_UPDATE", spellID, itemID, startTime, duration)
|
||||
if not Gladdy.db.trinketColored and Gladdy:GetPvpTrinkets()[itemID] then
|
||||
self.frames[unitID].texture:SetTexture(GetItemIcon(itemID))
|
||||
end
|
||||
if (startTime ~= 0 and duration ~= 0) then
|
||||
self:Used(unit, startTime, duration)
|
||||
self:Used(unitID, startTime, duration)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -240,18 +347,17 @@ end
|
||||
|
||||
function Trinket:Used(unit, startTime, duration)
|
||||
local trinket = self.frames[unit]
|
||||
if (not trinket) then
|
||||
if (not trinket or not Gladdy.db.trinketEnabled) then
|
||||
return
|
||||
end
|
||||
if not trinket.active then
|
||||
--if not trinket.active then
|
||||
trinket.timeLeft = (startTime/1000.0 + duration/1000.0) - GetTime()
|
||||
if not Gladdy.db.trinketDisableCircle then trinket.cooldown:SetCooldown(startTime/1000.0, duration/1000.0) end
|
||||
trinket.active = true
|
||||
if Gladdy.db.trinketColored then
|
||||
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd))
|
||||
end
|
||||
Gladdy:SendMessage("TRINKET_USED", unit)
|
||||
end
|
||||
--end
|
||||
end
|
||||
|
||||
function Trinket:GetOptions()
|
||||
@@ -272,6 +378,7 @@ function Trinket:GetOptions()
|
||||
name = L["Colored trinket"],
|
||||
desc = L["Shows a solid colored icon when off/off CD."],
|
||||
order = 4,
|
||||
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||
}),
|
||||
trinketColoredCd = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@@ -279,9 +386,7 @@ function Trinket:GetOptions()
|
||||
desc = L["Color of the border"],
|
||||
order = 5,
|
||||
hasAlpha = true,
|
||||
disabled = function()
|
||||
return not Gladdy.db.trinketColored
|
||||
end,
|
||||
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||
}),
|
||||
trinketColoredNoCd = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@@ -289,8 +394,26 @@ function Trinket:GetOptions()
|
||||
desc = L["Color of the border"],
|
||||
order = 6,
|
||||
hasAlpha = true,
|
||||
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||
}),
|
||||
trinketGroup = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Group Class Icons"],
|
||||
order = 7,
|
||||
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||
}),
|
||||
trinketGroupDirection = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Group direction"],
|
||||
order = 8,
|
||||
values = {
|
||||
["RIGHT"] = L["Right"],
|
||||
["LEFT"] = L["Left"],
|
||||
["UP"] = L["Up"],
|
||||
["DOWN"] = L["Down"],
|
||||
},
|
||||
disabled = function()
|
||||
return not Gladdy.db.trinketColored
|
||||
return not Gladdy.db.trinketGroup or not Gladdy.db.trinketEnabled
|
||||
end,
|
||||
}),
|
||||
group = {
|
||||
@@ -298,17 +421,25 @@ function Trinket:GetOptions()
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 5,
|
||||
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
name = L["Size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
name = L["Icon"],
|
||||
order = 1,
|
||||
},
|
||||
trinketIconZoomed = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Zoomed Icon"],
|
||||
desc = L["Zoomes the icon to remove borders"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
trinketSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Size"],
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
local tonumber, tostring = tonumber, tostring
|
||||
local tonumber, tostring, str_format = tonumber, tostring, string.format
|
||||
|
||||
local UnitName = UnitName
|
||||
local IsInGroup, IsInRaid = IsInGroup, IsInRaid
|
||||
@@ -24,11 +24,11 @@ end
|
||||
function VersionCheck:JOINED_ARENA()
|
||||
self:RegisterComm("GladdyVCheck", VersionCheck.OnCommReceived)
|
||||
if IsInRaid(LE_PARTY_CATEGORY_HOME) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "RAID", self.playerName)
|
||||
self:SendCommMessage("GladdyVCheck", str_format("%.2f", Gladdy.version_num), "RAID", self.playerName)
|
||||
elseif IsInGroup(LE_PARTY_CATEGORY_INSTANCE) or IsInRaid(LE_PARTY_CATEGORY_INSTANCE) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "INSTANCE_CHAT", self.playerName)
|
||||
self:SendCommMessage("GladdyVCheck", str_format("%.2f", Gladdy.version_num), "INSTANCE_CHAT", self.playerName)
|
||||
elseif IsInGroup(LE_PARTY_CATEGORY_HOME) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "PARTY", self.playerName)
|
||||
self:SendCommMessage("GladdyVCheck", str_format("%.2f", Gladdy.version_num), "PARTY", self.playerName)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -41,9 +41,9 @@ end
|
||||
|
||||
function VersionCheck.OnCommReceived(prefix, message, distribution, sender)
|
||||
if sender ~= VersionCheck.playerName then
|
||||
local addonVersion = Gladdy.version_num
|
||||
message = tonumber(message)
|
||||
if message and message <= Gladdy.version_num then
|
||||
local addonVersion = str_format("%.2f", Gladdy.version_num)
|
||||
local message_num = tonumber(message) or 0
|
||||
if message and message_num <= Gladdy.version_num then
|
||||
--Gladdy:Print("Version", "\"".. addonVersion.."\"", "is up to date")
|
||||
else
|
||||
Gladdy:Warn("Current version", "\"".. addonVersion.."\"", "is outdated. Most recent version is", "\"".. message.."\"")
|
||||
|
||||
+28
-8
@@ -1,9 +1,8 @@
|
||||
local type, pairs, tinsert, tsort = type, pairs, table.insert, table.sort
|
||||
local tostring, str_match, tonumber, string_format = tostring, string.match, tonumber, string.format
|
||||
local tostring, str_match, tonumber, str_format = tostring, string.match, tonumber, string.format
|
||||
local ceil, floor = ceil, floor
|
||||
local ReloadUI = ReloadUI
|
||||
|
||||
local InterfaceOptionsFrame_OpenToFrame = InterfaceOptionsFrame_OpenToFrame
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
|
||||
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
||||
@@ -31,7 +30,7 @@ function Gladdy:FormatTimer(fontString, timeLeft, milibreakpoint, showSeconds)
|
||||
else
|
||||
if time >= 60 then
|
||||
if showSeconds then
|
||||
fontString:SetText(floor(timeLeft / 60) .. ":" .. string_format("%02.f", floor(timeLeft - floor(timeLeft / 60) * 60)))
|
||||
fontString:SetText(floor(timeLeft / 60) .. ":" .. str_format("%02.f", floor(timeLeft - floor(timeLeft / 60) * 60)))
|
||||
else
|
||||
fontString:SetText(ceil(ceil(time / 60)) .. "m")
|
||||
end
|
||||
@@ -48,6 +47,7 @@ Gladdy.defaults = {
|
||||
x = 0,
|
||||
y = 0,
|
||||
growDirection = "BOTTOM",
|
||||
growMiddle = false,
|
||||
frameScale = 1,
|
||||
pixelPerfect = false,
|
||||
barWidth = 180,
|
||||
@@ -104,8 +104,11 @@ function Gladdy:option(params)
|
||||
return defaults
|
||||
end
|
||||
|
||||
function Gladdy:SetColor(option)
|
||||
return option.r, option.g, option.b, option.a
|
||||
function Gladdy:SetColor(option, factor, altAlpha)
|
||||
if not factor then
|
||||
factor = 1
|
||||
end
|
||||
return option.r / factor, option.g / factor, option.b / factor, altAlpha or option.a
|
||||
end
|
||||
|
||||
function Gladdy:colorOption(params)
|
||||
@@ -278,7 +281,7 @@ function Gladdy:SetupOptions()
|
||||
order = 5,
|
||||
width = 1,
|
||||
type = "description",
|
||||
name = " Gladdy v" .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
||||
name = " " .. Gladdy.version
|
||||
},
|
||||
general = {
|
||||
type = "group",
|
||||
@@ -311,7 +314,7 @@ function Gladdy:SetupOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
name = L["General"],
|
||||
order = 5,
|
||||
order = 6,
|
||||
childGroups = "tree",
|
||||
args = {
|
||||
frameGeneral = {
|
||||
@@ -322,6 +325,12 @@ function Gladdy:SetupOptions()
|
||||
headerFrame = {
|
||||
type = "header",
|
||||
name = L["Frame General"],
|
||||
order = 2,
|
||||
},
|
||||
growMiddle = {
|
||||
type = "toggle",
|
||||
name = L["Grow Middle"],
|
||||
desc = L["Frames expand along a centric anchor"],
|
||||
order = 3,
|
||||
},
|
||||
pixelPerfect = {
|
||||
@@ -789,7 +798,7 @@ function Gladdy:SetupOptions()
|
||||
end
|
||||
|
||||
function Gladdy:ShowOptions()
|
||||
InterfaceOptionsFrame_OpenToFrame("Gladdy")
|
||||
LibStub("AceConfigDialog-3.0"):Open("Gladdy")
|
||||
end
|
||||
|
||||
function Gladdy:GetAuras(auraType)
|
||||
@@ -925,6 +934,17 @@ function Gladdy:GetAuras(auraType)
|
||||
end
|
||||
return args
|
||||
end
|
||||
if Gladdy.expansion == "Wrath" then
|
||||
spells.deathknight = {
|
||||
order = 3,
|
||||
type = "group",
|
||||
name = LOCALIZED_CLASS_NAMES_MALE["DEATHKNIGHT"],
|
||||
icon = "Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes",
|
||||
iconCoords = CLASS_ICON_TCOORDS["DEATHKNIGHT"],
|
||||
args = {},
|
||||
}
|
||||
spells.deathknight.args = assignForClass("DEATHKNIGHT")
|
||||
end
|
||||
spells.druid.args = assignForClass("DRUID")
|
||||
spells.hunter.args = assignForClass("HUNTER")
|
||||
spells.mage.args = assignForClass("MAGE")
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Gladdy - TBC
|
||||
# Gladdy - Classic
|
||||
|
||||
### The most powerful arena addon for WoW TBC 2.5.1
|
||||
### The most powerful arena addon for WoW TBC 2.5.4 & WotLK 3.4.0
|
||||
|
||||
---
|
||||
|
||||
## [v2.00-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.00-Release/Gladdy_TBC-Classic_v2.00-Release.zip)
|
||||
## [v2.20-Beta Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.20-Release/Gladdy_Classic_v2.20-Beta.zip)
|
||||
|
||||
###### <a target="_blank" rel="noopener noreferrer" href="https://www.paypal.me/xiconqoo/10"><img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/Paypal-Donate.png" height="30" style="margin-top:-30px;position:relative;top:20px;"></a> Please consider donating if you like my work
|
||||
|
||||
@@ -34,6 +34,7 @@ The goal is to make Gladdy highly configurable in it's appearance. Everything ca
|
||||
- **Range Check** (checks the range to a unit by a configurable spell)
|
||||
- **Shadowsight Timer** (shows a little movable frame with time left until Shadow Eyes spawn)
|
||||
- **TotemPlates** (show totem icons instead of normal nameplates, compatible with **Plater, NeatPlates, KUI, ThreatPlates, ElvUI, TukUI**)
|
||||
- **TotemPulse** (shows pulse on TotemPlate icon or beneath nameplate)
|
||||
- **Trinket** (tracks trinket usage)
|
||||
- **VersionCheck** (checks if you use an older version that your teammate)
|
||||
- **XiconProfiles** (predefined profiles to start your configuration from)
|
||||
@@ -72,12 +73,82 @@ Thank you!
|
||||
- **Klimp** (thanks for all the suggestions and active feedback)
|
||||
- **the whole TBC addons 2.4.3 discord** (thanks for the support and great community, especially the MVPs)
|
||||
- **Hydra** (thanks for constructive feedback and suggestions)
|
||||
- **Xyz** (thanks for suggestions)
|
||||
- **Xyz** (thanks for suggestions and extensive testing <3)
|
||||
|
||||
---
|
||||
|
||||
### Changes
|
||||
|
||||
### v2.20-Beta
|
||||
- **Wrath** & **BCC** support
|
||||
- different auras/DRs/Cooldowns/Buffs per expansion
|
||||
- **Zoomed Icon** options added for all modules
|
||||
- **Cooldowns**
|
||||
- desaturate icon on cd added
|
||||
- alpha on cd added
|
||||
- glow on CD active added
|
||||
- **Diminishing**
|
||||
- replaced DRData with DRList (your dr-categories options will be reset like "force icon" and what is enabled)
|
||||
- zoomed icons
|
||||
- changed DR-tracking behaviour (DR will show once aura is applied and start CD once aura fades)
|
||||
- **Trinket & Racial**
|
||||
- in Wrath racials like wotf share CD with Trinket and vice versa
|
||||
- fixed some potential API bug in Trinket use detection
|
||||
- **ArenaCountdown**
|
||||
- uses C_Timer now
|
||||
- **Import/Export of Profiles**
|
||||
- profiles should now be able to import/export between BCC and Wrath
|
||||
- auras, cooldowns, DRs and buffs/debuffs are ignored
|
||||
- positioning, style etc will be transferred between expansions
|
||||
- proper Feign Death detection
|
||||
- fix detect pet abilities CD like Spell Lock
|
||||
- minor bugfixes
|
||||
|
||||
### v2.11-Release
|
||||
- **Cooldowns**
|
||||
- fixed cooldowns not showing properly for detected spec
|
||||
- Nature's Swiftness (Druid/Shaman) now properly tracked
|
||||
- improved cd out of stealth detection
|
||||
- **HealthBar**
|
||||
- added options class colored or custom colors
|
||||
- custom colors for 100%, 50% 0% hp values added
|
||||
- custom stealth color added
|
||||
- add group option for DRs
|
||||
- intercept cd adjusted (-5s for 4pc set bonus)
|
||||
- totempulse minor adjustments
|
||||
|
||||
### v2.10-Release
|
||||
|
||||
- **Totems**:
|
||||
- added new module **TotemPulse** (sorry Shamans)
|
||||
- displays pulse ticks on all totems that have a pulse mechanic (e.g. tremor totem)
|
||||
- either cooldown or bar style
|
||||
- attaches to TotemPlates if enabled (con be configured individually by totem)
|
||||
- completely hide totem nameplate option added
|
||||
- added a dummy totemplate in config mode
|
||||
- totem detection is completely localization independent now
|
||||
- **Cooldowns**:
|
||||
- completely refactored to fix general bugs
|
||||
- can now be ordered individually
|
||||
- some cooldown tracking improved for units coming out of stealth (e.g. perception, sprint, shadowstep)
|
||||
- **Custom Text Tags**
|
||||
- PowerBar and HealthBar can now have custom tags. Check it out
|
||||
- also the texts can be moved to achieve a Blizzlike style with names above HealthBar
|
||||
- general improvements to spec detection
|
||||
- no more restoration warlocks :D
|
||||
- tree of life spec detection should work now
|
||||
- fix Announcements
|
||||
- added grouping option for Auras (+ Interrupts) in detached mode, ClassIcon, Cooldowns, Trinket, Racial
|
||||
- added a "Grow Middle" option, which aligns the gladdy frames on a centric point
|
||||
- added frFR localization by Macumba
|
||||
- added Flat statusbar texture
|
||||
- added some auras (e.g. disarm)
|
||||
- added disarm DRs
|
||||
- improved some class icons
|
||||
- added font OUTLINE option for Health-/Power-/CastBar texts
|
||||
- fixed health bug since 2.5.4
|
||||
- updated Mir Profile
|
||||
|
||||
### v2.00-Release
|
||||
|
||||
This is a packed release with new features and bugfixes. Most importantly, positioning of all elements has been redone with movable frames.
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
local pairs, ipairs = pairs, ipairs
|
||||
local floor = math.floor
|
||||
local str_find, str_gsub, str_sub, tinsert = string.find, string.gsub, string.sub, table.insert
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AuraUtil = AuraUtil
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local UnitIsUnit = UnitIsUnit
|
||||
|
||||
---------------------------
|
||||
|
||||
-- TAGS
|
||||
|
||||
---------------------------
|
||||
|
||||
local tags = {
|
||||
["current"] = true,
|
||||
["max"] = true,
|
||||
["percent"] = true,
|
||||
["race"] = "race",
|
||||
["class"] = "class",
|
||||
["arena"] = true,
|
||||
["name"] = "name",
|
||||
["status"] = true,
|
||||
["spec"] = "spec",
|
||||
}
|
||||
|
||||
local function str_extract(s, pattern)
|
||||
local t = {} -- table to store the indices
|
||||
local i, j = 0,0
|
||||
while true do
|
||||
i, j = str_find(s, pattern, i+1) -- find 'next' occurrence
|
||||
if i == nil then break end
|
||||
tinsert(t, str_sub(s, i, j))
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
--TODO optimize this function as it's being called often!
|
||||
local function getTagText(unit, tag, current, max, status)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
|
||||
if str_find(tag, "percent") then
|
||||
return current and max and floor(current * 100 / max) .. "%%" or ""
|
||||
elseif str_find(tag, "current") then
|
||||
return current and max > 999 and ("%.1fk"):format(current / 1000) or current or ""
|
||||
elseif str_find(tag, "max") then
|
||||
return max and max > 999 and ("%.1fk"):format(max / 1000) or max or ""
|
||||
elseif str_find(tag, "status") then
|
||||
if str_find(tag, "%|") and status == nil then
|
||||
return nil
|
||||
else
|
||||
return status or ""
|
||||
end
|
||||
elseif str_find(tag, "name") then
|
||||
return button.name or ""
|
||||
elseif str_find(tag, "class") then
|
||||
return button.classLoc or ""
|
||||
elseif str_find(tag, "race") then
|
||||
return button.raceLoc or ""
|
||||
elseif str_find(tag, "arena") then
|
||||
local str,found = str_gsub(unit, "arena", "")
|
||||
return found == 1 and str or ""
|
||||
elseif str_find(tag, "spec") then
|
||||
if str_find(tag, "%|") and button.spec == nil then
|
||||
return nil
|
||||
else
|
||||
return button.spec or ""
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:SetTag(unit, tagOption, current, max, status)
|
||||
local button = self.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
|
||||
local returnStr = tagOption
|
||||
|
||||
local t = str_extract(returnStr, "%[[^%[].-%]")
|
||||
for _, tag in ipairs(t) do
|
||||
local replace
|
||||
if str_find(tag, "|") then -- or operator
|
||||
local indicators = str_extract(tag, "[%[|%|]%a+[%||%]]")
|
||||
local replaces = {}
|
||||
for _, indicator in ipairs(indicators) do
|
||||
tinsert(replaces, getTagText(unit, indicator, current, max, status))
|
||||
end
|
||||
replace = replaces[#replaces]
|
||||
else
|
||||
replace = getTagText(unit, tag, current, max, status)
|
||||
end
|
||||
|
||||
if replace then
|
||||
local find = str_gsub(tag, "%[", "%%[")
|
||||
find = str_gsub(find, "%]", "%%]")
|
||||
find = str_gsub(find, "%|", "%%|")
|
||||
returnStr = str_gsub(returnStr, find, replace)
|
||||
end
|
||||
end
|
||||
return returnStr
|
||||
end
|
||||
|
||||
function Gladdy:GetTagOption(name, order, enabledOption, func, toggle)
|
||||
if toggle then
|
||||
return func({
|
||||
type = "toggle",
|
||||
name = name,
|
||||
order = order,
|
||||
width = "full",
|
||||
desc = L["Custom Tags:\n"..
|
||||
"\n|cff1ac742[current]|r - Shows current\n" ..
|
||||
"\n|cff1ac742[max]|r - Shows max\n" ..
|
||||
"\n|cff1ac742[percent]|r - Shows percent\n" ..
|
||||
"\n|cff1ac742[name]|r - Shows name\n" ..
|
||||
"\n|cff1ac742[arena]|r - Shows arena number\n" ..
|
||||
"\n|cff1ac742[status]|r - Shows status (eg DEATH)\n" ..
|
||||
"\n|cff1ac742[race]|r - Shows race\n" ..
|
||||
"\n|cff1ac742[class]|r - Shows class\n" ..
|
||||
"\n|cff1ac742[spec]|r - Shows spec\n\n" ..
|
||||
"Can be combined with OR operator like |cff1ac742[percent|status]|r. The last valid option will be used.\n"],
|
||||
})
|
||||
else
|
||||
return func({
|
||||
type = "input",
|
||||
name = name,
|
||||
order = order,
|
||||
width = "full",
|
||||
disabled = function() return not Gladdy.db[enabledOption] end,
|
||||
desc = L["Custom Tags:\n"..
|
||||
"\n|cff1ac742[current]|r - Shows current\n" ..
|
||||
"\n|cff1ac742[max]|r - Shows max\n" ..
|
||||
"\n|cff1ac742[percent]|r - Shows percent\n" ..
|
||||
"\n|cff1ac742[name]|r - Shows name\n" ..
|
||||
"\n|cff1ac742[arena]|r - Shows arena number\n" ..
|
||||
"\n|cff1ac742[status]|r - Shows status (eg DEATH)\n" ..
|
||||
"\n|cff1ac742[race]|r - Shows race\n" ..
|
||||
"\n|cff1ac742[class]|r - Shows class\n" ..
|
||||
"\n|cff1ac742[spec]|r - Shows spec\n\n" ..
|
||||
"Can be combined with OR operator like |cff1ac742[percent|status]|r. The last valid option will be used.\n"],
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:contains(entry, list)
|
||||
for _,v in pairs(list) do
|
||||
if entry == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local feignDeath = GetSpellInfo(5384)
|
||||
function Gladdy:isFeignDeath(unit)
|
||||
return AuraUtil.FindAuraByName(feignDeath, unit)
|
||||
end
|
||||
|
||||
function Gladdy:GetArenaUnit(unitCaster, unify)
|
||||
if unitCaster then
|
||||
for i=1,5 do
|
||||
local arenaUnit = "arena" .. i
|
||||
local arenaUnitPet = "arenapet" .. i
|
||||
if unify then
|
||||
if unitCaster and (UnitIsUnit(arenaUnit, unitCaster) or UnitIsUnit(arenaUnitPet, unitCaster)) then
|
||||
return arenaUnit
|
||||
end
|
||||
else
|
||||
if unitCaster and UnitIsUnit(arenaUnit, unitCaster) then
|
||||
return arenaUnit
|
||||
end
|
||||
if unitCaster and UnitIsUnit(arenaUnitPet, unitCaster) then
|
||||
return arenaUnitPet
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
+2
-1
@@ -12,7 +12,8 @@
|
||||
<Include file="libs\LibDeflate\lib.xml"/>
|
||||
<Include file="libs\LibSharedMedia-3.0\lib.xml"/>
|
||||
<Include file="libs\AceGUI-3.0-SharedMediaWidgets\widget.xml"/>
|
||||
<Include file="libs\DRData-1.0\DRData-1.0.xml"/>
|
||||
<Include file="libs\DRList-1.0\DRList-1.0.xml"/>
|
||||
<Include file="libs\LibClassAuras-1.0\lib.xml"/>
|
||||
<Include file="libs\LibSpellRange-1.0\lib.xml"/>
|
||||
<Include file="libs\LibCustomGlow-1.0\LibCustomGlow-1.0.lua"/>
|
||||
</Ui>
|
||||
Reference in New Issue
Block a user