Compare commits
239 Commits
v1.22-Rele
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
ff619e7228 | ||
|
8bd027c614 | ||
|
393af7875d | ||
|
468cbf24f3 | ||
|
50987addb5 | ||
|
7930335294 | ||
|
535fedab1a | ||
|
6be69bc51c | ||
|
5f8807a879 | ||
|
c122e24054 | ||
|
47bc4d46f4 | ||
|
cacd83479c | ||
|
117888cdb0 | ||
|
8f4f153011 | ||
|
b72b2a3c3a | ||
|
387f12a97e | ||
|
892b5e8a59 | ||
|
ab51106301 | ||
|
6f5ab94ecb | ||
|
86fcff8ea8 | ||
|
0759357e72 | ||
|
ff703a0bc8 | ||
|
16d5541ad9 | ||
|
b8f004033b | ||
|
3b285efa9e | ||
|
e4cc5568ce | ||
|
fc7042ca87 | ||
|
261dc8b755 | ||
|
971016e249 | ||
|
8b766c23d2 | ||
|
afd5647807 | ||
|
ed0b601467 | ||
|
a4ee8219a6 | ||
|
8e97bb32c6 | ||
|
d385692cdc | ||
|
9c4eed673f | ||
|
4b5ec6767f | ||
|
88959d988c | ||
|
fe1b613aac | ||
|
39d730116f | ||
|
342be5dcd0 | ||
|
045d734945 | ||
|
f29985a06e | ||
|
70acab71e9 | ||
|
048fbb55e7 | ||
|
e45118484b | ||
|
709cc7fd86 | ||
|
b714c065f6 | ||
|
6161fcc7e3 | ||
|
51143988be | ||
|
8442bfd1df | ||
|
5f5b0841fc | ||
|
9d03fa5ff3 | ||
|
bc40bbce0a | ||
|
391e149b6d | ||
|
128f32f57f | ||
|
9ce0bbc32a | ||
|
657e38f835 | ||
|
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 | ||
|
7c145752f7 | ||
|
47a15bd2a1 | ||
|
cd64e8b481 | ||
|
7ce6cdd5e0 | ||
|
5f94e971f0 | ||
|
fd37f588ac | ||
|
038688bd5b | ||
|
cf485a91a1 | ||
|
9dbab9939f | ||
|
0d9e9735da | ||
|
83763aa016 | ||
|
b22756b6ab | ||
|
5f4bf034e5 | ||
|
042a8f7812 | ||
|
ea10481c13 | ||
|
99fa6c0664 | ||
|
61c50b3e32 | ||
|
e5151f1605 | ||
|
d24b330411 | ||
|
298ce642fc | ||
|
061bc5859c | ||
|
12abedfd0f | ||
|
22526c0386 | ||
|
1e926024ce | ||
|
1dd411fed7 | ||
|
242c45b8c4 | ||
|
2edca9b11e | ||
|
55860fc157 | ||
|
6954fb05d0 | ||
|
114a7b14e4 | ||
|
978ba56f85 | ||
|
61e49ffb8c | ||
|
b351bd9c23 | ||
|
2c4308712d | ||
|
91f7fcb998 | ||
|
5766484f92 | ||
|
035942abbe | ||
|
2e3fb06269 | ||
|
b5f67d066f | ||
|
c3a7c6cbc8 | ||
|
65daef4cd4 | ||
|
6b94fdc32f | ||
|
2571df3052 | ||
|
1c42523a2f | ||
|
114c0ac96d | ||
|
59da6f34c6 | ||
|
adb06d0c7f | ||
|
be292401cc | ||
|
8df7aae3b6 | ||
|
1b2311fea2 | ||
|
0a5176aaed | ||
|
f923f471d8 | ||
|
2dcdc9c978 | ||
|
7db32cceef | ||
|
e2a78c717b | ||
|
b2c8ed9c44 | ||
|
fed5d1c341 | ||
|
92322a4d9b | ||
|
91c25edcfe | ||
|
41f74f5896 | ||
|
69c1eca49b | ||
|
09a47e81f1 | ||
|
ebb56c4127 | ||
|
fabd9ae048 | ||
|
3f28947b05 | ||
|
1010d59bd3 | ||
|
069ca47210 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -6,4 +6,6 @@ BuffLib
|
|||||||
Ace-Libs
|
Ace-Libs
|
||||||
Images_Raw
|
Images_Raw
|
||||||
Gladdy_old
|
Gladdy_old
|
||||||
|
DoNotCommit
|
||||||
|
untracked
|
||||||
Gladdy_TW
|
Gladdy_TW
|
@ -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 GetSpellInfo = GetSpellInfo
|
||||||
local GetItemInfo = GetItemInfo
|
local GetItemInfo = GetItemInfo
|
||||||
local GetLocale = GetLocale
|
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
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"}
|
Gladdy.CLASSES = {"MAGE", "PRIEST", "DRUID", "SHAMAN", "PALADIN", "WARLOCK", "WARRIOR", "HUNTER", "ROGUE"}
|
||||||
tbl_sort(Gladdy.CLASSES)
|
tbl_sort(Gladdy.CLASSES)
|
||||||
Gladdy.RACES = {"Scourge", "BloodElf", "Tauren", "Orc", "Troll", "NightElf", "Draenei", "Human", "Gnome", "Dwarf"}
|
|
||||||
tbl_sort(Gladdy.RACES)
|
|
||||||
|
|
||||||
local specBuffs = {
|
local specBuffs = {
|
||||||
-- DRUID
|
-- DRUID
|
||||||
@ -20,19 +18,23 @@ local specBuffs = {
|
|||||||
[GetSpellInfo(24858)] = L["Restoration"], -- Moonkin Form; Dreamstate spec in TBC equals Restoration
|
[GetSpellInfo(24858)] = L["Restoration"], -- Moonkin Form; Dreamstate spec in TBC equals Restoration
|
||||||
[GetSpellInfo(17007)] = L["Feral"], -- Leader of the Pack
|
[GetSpellInfo(17007)] = L["Feral"], -- Leader of the Pack
|
||||||
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||||
|
[GetSpellInfo(33891)] = L["Restoration"], -- Tree of Life
|
||||||
|
|
||||||
-- HUNTER
|
-- 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(20895)] = L["Beast Mastery"], -- Spirit Bond
|
||||||
[GetSpellInfo(34455)] = L["Beast Mastery"], -- Ferocious Inspiration
|
[GetSpellInfo(34455)] = L["Beast Mastery"], -- Ferocious Inspiration
|
||||||
[GetSpellInfo(27066)] = L["Marksmanship"], -- Trueshot Aura
|
[GetSpellInfo(27066)] = L["Marksmanship"], -- Trueshot Aura
|
||||||
|
[GetSpellInfo(34501)] = L["Survival"], -- Expose Weakness
|
||||||
|
|
||||||
-- MAGE
|
-- MAGE
|
||||||
[GetSpellInfo(33405)] = L["Frost"], -- Ice Barrier
|
[GetSpellInfo(33405)] = L["Frost"], -- Ice Barrier
|
||||||
[GetSpellInfo(11129)] = L["Fire"], -- Combustion
|
[GetSpellInfo(11129)] = L["Fire"], -- Combustion
|
||||||
[GetSpellInfo(12042)] = L["Arcane"], -- Arcane Power
|
[GetSpellInfo(12042)] = L["Arcane"], -- Arcane Power
|
||||||
[GetSpellInfo(12043)] = L["Arcane"], -- Presence of Mind
|
[GetSpellInfo(12043)] = L["Arcane"], -- Presence of Mind
|
||||||
|
[GetSpellInfo(31589)] = L["Arcane"], -- Slow
|
||||||
[GetSpellInfo(12472)] = L["Frost"], -- Icy Veins
|
[GetSpellInfo(12472)] = L["Frost"], -- Icy Veins
|
||||||
|
[GetSpellInfo(46989)] = L["Arcane"], -- Improved Blink
|
||||||
|
|
||||||
-- PALADIN
|
-- PALADIN
|
||||||
[GetSpellInfo(31836)] = L["Holy"], -- Light's Grace
|
[GetSpellInfo(31836)] = L["Holy"], -- Light's Grace
|
||||||
@ -41,9 +43,12 @@ local specBuffs = {
|
|||||||
[GetSpellInfo(20375)] = L["Retribution"], -- Seal of Command
|
[GetSpellInfo(20375)] = L["Retribution"], -- Seal of Command
|
||||||
[GetSpellInfo(20049)] = L["Retribution"], -- Vengeance
|
[GetSpellInfo(20049)] = L["Retribution"], -- Vengeance
|
||||||
[GetSpellInfo(20218)] = L["Retribution"], -- Sanctity Aura
|
[GetSpellInfo(20218)] = L["Retribution"], -- Sanctity Aura
|
||||||
|
[GetSpellInfo(26018)] = L["Retribution"], -- Vindication
|
||||||
|
[GetSpellInfo(27179)] = L["Protection"], -- Holy Shield
|
||||||
|
|
||||||
-- PRIEST
|
-- PRIEST
|
||||||
[GetSpellInfo(15473)] = L["Shadow"], -- Shadowform
|
[GetSpellInfo(15473)] = L["Shadow"], -- Shadowform
|
||||||
|
[GetSpellInfo(15286)] = L["Shadow"], -- Vampiric Embrace
|
||||||
[GetSpellInfo(45234)] = L["Discipline"], -- Focused Will
|
[GetSpellInfo(45234)] = L["Discipline"], -- Focused Will
|
||||||
[GetSpellInfo(27811)] = L["Discipline"], -- Blessed Recovery
|
[GetSpellInfo(27811)] = L["Discipline"], -- Blessed Recovery
|
||||||
[GetSpellInfo(33142)] = L["Holy"], -- Blessed Resilience
|
[GetSpellInfo(33142)] = L["Holy"], -- Blessed Resilience
|
||||||
@ -59,17 +64,22 @@ local specBuffs = {
|
|||||||
[GetSpellInfo(36563)] = L["Subtlety"], -- Shadowstep DMG
|
[GetSpellInfo(36563)] = L["Subtlety"], -- Shadowstep DMG
|
||||||
[GetSpellInfo(14278)] = L["Subtlety"], -- Ghostly Strike
|
[GetSpellInfo(14278)] = L["Subtlety"], -- Ghostly Strike
|
||||||
[GetSpellInfo(31233)] = L["Assassination"], -- Find Weakness
|
[GetSpellInfo(31233)] = L["Assassination"], -- Find Weakness
|
||||||
|
[GetSpellInfo(13877)] = L["Combat"], -- Blade Flurry
|
||||||
|
|
||||||
--Shaman
|
--Shaman
|
||||||
|
[GetSpellInfo(30807)] = L["Enhancement"], -- Unleashed Rage
|
||||||
|
[GetSpellInfo(16280)] = L["Enhancement"], -- Flurry
|
||||||
|
[GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage
|
||||||
[GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem
|
[GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem
|
||||||
[GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield
|
[GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield
|
||||||
[GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage
|
[GetSpellInfo(29202)] = L["Restoration"], -- Healing Way
|
||||||
|
|
||||||
-- WARLOCK
|
-- WARLOCK
|
||||||
[GetSpellInfo(19028)] = L["Demonology"], -- Soul Link
|
[GetSpellInfo(19028)] = L["Demonology"], -- Soul Link
|
||||||
[GetSpellInfo(23759)] = L["Demonology"], -- Master Demonologist
|
[GetSpellInfo(23759)] = L["Demonology"], -- Master Demonologist
|
||||||
[GetSpellInfo(30302)] = L["Destruction"], -- Nether Protection
|
[GetSpellInfo(35696)] = L["Demonology"], -- Demonic Knowledge
|
||||||
[GetSpellInfo(34935)] = L["Destruction"], -- Backlash
|
[GetSpellInfo(30300)] = L["Destruction"], -- Nether Protection
|
||||||
|
[GetSpellInfo(34936)] = L["Destruction"], -- Backlash
|
||||||
|
|
||||||
-- WARRIOR
|
-- WARRIOR
|
||||||
[GetSpellInfo(29838)] = L["Arms"], -- Second Wind
|
[GetSpellInfo(29838)] = L["Arms"], -- Second Wind
|
||||||
@ -86,7 +96,8 @@ local specSpells = {
|
|||||||
[GetSpellInfo(33983)] = L["Feral"], -- Mangle (Cat)
|
[GetSpellInfo(33983)] = L["Feral"], -- Mangle (Cat)
|
||||||
[GetSpellInfo(33987)] = L["Feral"], -- Mangle (Bear)
|
[GetSpellInfo(33987)] = L["Feral"], -- Mangle (Bear)
|
||||||
[GetSpellInfo(18562)] = L["Restoration"], -- Swiftmend
|
[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
|
-- HUNTER
|
||||||
[GetSpellInfo(19577)] = L["Beast Mastery"], -- Intimidation
|
[GetSpellInfo(19577)] = L["Beast Mastery"], -- Intimidation
|
||||||
@ -122,11 +133,13 @@ local specSpells = {
|
|||||||
[GetSpellInfo(34861)] = L["Holy"], -- Circle of Healing
|
[GetSpellInfo(34861)] = L["Holy"], -- Circle of Healing
|
||||||
[GetSpellInfo(15473)] = L["Shadow"], -- Shadowform
|
[GetSpellInfo(15473)] = L["Shadow"], -- Shadowform
|
||||||
[GetSpellInfo(34917)] = L["Shadow"], -- Vampiric Touch
|
[GetSpellInfo(34917)] = L["Shadow"], -- Vampiric Touch
|
||||||
|
[GetSpellInfo(15286)] = L["Shadow"], -- Vampiric Embrace
|
||||||
|
|
||||||
-- ROGUE
|
-- ROGUE
|
||||||
[GetSpellInfo(34413)] = L["Assassination"], -- Mutilate
|
[GetSpellInfo(34413)] = L["Assassination"], -- Mutilate
|
||||||
[GetSpellInfo(14177)] = L["Assassination"], -- Cold Blood
|
[GetSpellInfo(14177)] = L["Assassination"], -- Cold Blood
|
||||||
[GetSpellInfo(13750)] = L["Combat"], -- Adrenaline Rush
|
[GetSpellInfo(13750)] = L["Combat"], -- Adrenaline Rush
|
||||||
|
[GetSpellInfo(13877)] = L["Combat"], -- Blade Flurry
|
||||||
[GetSpellInfo(14185)] = L["Subtlety"], -- Preparation
|
[GetSpellInfo(14185)] = L["Subtlety"], -- Preparation
|
||||||
[GetSpellInfo(16511)] = L["Subtlety"], -- Hemorrhage
|
[GetSpellInfo(16511)] = L["Subtlety"], -- Hemorrhage
|
||||||
[GetSpellInfo(36554)] = L["Subtlety"], -- Shadowstep
|
[GetSpellInfo(36554)] = L["Subtlety"], -- Shadowstep
|
||||||
@ -135,16 +148,20 @@ local specSpells = {
|
|||||||
|
|
||||||
-- SHAMAN
|
-- SHAMAN
|
||||||
[GetSpellInfo(16166)] = L["Elemental"], -- Elemental Mastery
|
[GetSpellInfo(16166)] = L["Elemental"], -- Elemental Mastery
|
||||||
|
[GetSpellInfo(30706)] = L["Elemental"], -- Totem of Wrath
|
||||||
[GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage
|
[GetSpellInfo(30823)] = L["Enhancement"], -- Shamanistic Rage
|
||||||
[GetSpellInfo(17364)] = L["Enhancement"], -- Stormstrike
|
[GetSpellInfo(17364)] = L["Enhancement"], -- Stormstrike
|
||||||
[GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem
|
[GetSpellInfo(16190)] = L["Restoration"], -- Mana Tide Totem
|
||||||
[GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield
|
[GetSpellInfo(32594)] = L["Restoration"], -- Earth Shield
|
||||||
--[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
[GetSpellInfo(16188)] = L["Restoration"], -- Nature's Swiftness
|
||||||
|
|
||||||
-- WARLOCK
|
-- WARLOCK
|
||||||
[GetSpellInfo(30405)] = L["Affliction"], -- Unstable Affliction
|
[GetSpellInfo(30405)] = L["Affliction"], -- Unstable Affliction
|
||||||
|
[GetSpellInfo(18220)] = L["Affliction"], -- Dark Pact
|
||||||
--[GetSpellInfo(30911)] = L["Affliction"], -- Siphon Life
|
--[GetSpellInfo(30911)] = L["Affliction"], -- Siphon Life
|
||||||
[GetSpellInfo(30414)] = L["Destruction"], -- Shadowfury
|
[GetSpellInfo(30414)] = L["Destruction"], -- Shadowfury
|
||||||
|
[GetSpellInfo(30912)] = L["Destruction"], -- Conflagrate
|
||||||
|
[GetSpellInfo(18708)] = L["Demonology"], -- Fel Domination
|
||||||
|
|
||||||
-- WARRIOR
|
-- WARRIOR
|
||||||
[GetSpellInfo(30330)] = L["Arms"], -- Mortal Strike
|
[GetSpellInfo(30330)] = L["Arms"], -- Mortal Strike
|
||||||
@ -152,6 +169,7 @@ local specSpells = {
|
|||||||
[GetSpellInfo(30335)] = L["Fury"], -- Bloodthirst
|
[GetSpellInfo(30335)] = L["Fury"], -- Bloodthirst
|
||||||
[GetSpellInfo(12809)] = L["Protection"], -- Concussion Blow
|
[GetSpellInfo(12809)] = L["Protection"], -- Concussion Blow
|
||||||
[GetSpellInfo(30022)] = L["Protection"], -- Devastation
|
[GetSpellInfo(30022)] = L["Protection"], -- Devastation
|
||||||
|
[GetSpellInfo(30356)] = L["Protection"], -- Shield Slam
|
||||||
}
|
}
|
||||||
function Gladdy:GetSpecSpells()
|
function Gladdy:GetSpecSpells()
|
||||||
return specSpells
|
return specSpells
|
||||||
@ -264,6 +282,16 @@ local importantAuras = {
|
|||||||
onDamage = true,
|
onDamage = true,
|
||||||
spellID = 19503,
|
spellID = 19503,
|
||||||
},
|
},
|
||||||
|
-- Scare Beast
|
||||||
|
[GetSpellInfo(14327)] = {
|
||||||
|
track = AURA_TYPE_DEBUFF,
|
||||||
|
duration = 8,
|
||||||
|
priority = 40,
|
||||||
|
onDamage = true,
|
||||||
|
fear = true,
|
||||||
|
magic = true,
|
||||||
|
spellID = 14327,
|
||||||
|
},
|
||||||
-- Silencing Shot
|
-- Silencing Shot
|
||||||
[GetSpellInfo(34490)] = {
|
[GetSpellInfo(34490)] = {
|
||||||
track = AURA_TYPE_DEBUFF,
|
track = AURA_TYPE_DEBUFF,
|
||||||
@ -280,11 +308,11 @@ local importantAuras = {
|
|||||||
spellID = 19577,
|
spellID = 19577,
|
||||||
},
|
},
|
||||||
-- The Beast Within
|
-- The Beast Within
|
||||||
[GetSpellInfo(34692)] = {
|
[GetSpellInfo(34471)] = {
|
||||||
track = AURA_TYPE_BUFF,
|
track = AURA_TYPE_BUFF,
|
||||||
duration = 18,
|
duration = 18,
|
||||||
priority = 20,
|
priority = 20,
|
||||||
spellID = 34692,
|
spellID = 34471,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@ -341,6 +369,11 @@ local importantAuras = {
|
|||||||
priority = 20,
|
priority = 20,
|
||||||
spellID = 45438,
|
spellID = 45438,
|
||||||
},
|
},
|
||||||
|
[GetSpellInfo(41425)] = { -- Hypothermia (Ice Block Immune
|
||||||
|
track = AURA_TYPE_DEBUFF,
|
||||||
|
priority = 8,
|
||||||
|
spellID = 41425,
|
||||||
|
},
|
||||||
-- Impact
|
-- Impact
|
||||||
[GetSpellInfo(12355)] = {
|
[GetSpellInfo(12355)] = {
|
||||||
track = AURA_TYPE_DEBUFF,
|
track = AURA_TYPE_DEBUFF,
|
||||||
@ -446,6 +479,13 @@ local importantAuras = {
|
|||||||
priority = 10,
|
priority = 10,
|
||||||
spellID = 33206,
|
spellID = 33206,
|
||||||
},
|
},
|
||||||
|
-- Fear Ward
|
||||||
|
[GetSpellInfo(6346)] = {
|
||||||
|
track = AURA_TYPE_BUFF,
|
||||||
|
duration = 180,
|
||||||
|
priority = 9,
|
||||||
|
spellID = 6346,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
-- Sap
|
-- Sap
|
||||||
@ -516,7 +556,13 @@ local importantAuras = {
|
|||||||
priority = 10,
|
priority = 10,
|
||||||
spellID = 26669,
|
spellID = 26669,
|
||||||
},
|
},
|
||||||
|
-- Riposte
|
||||||
|
[GetSpellInfo(14251)] = {
|
||||||
|
track = AURA_TYPE_DEBUFF,
|
||||||
|
duration = 6,
|
||||||
|
priority = 20,
|
||||||
|
spellID = 14251,
|
||||||
|
},
|
||||||
|
|
||||||
-- Fear
|
-- Fear
|
||||||
[GetSpellInfo(5782)] = {
|
[GetSpellInfo(5782)] = {
|
||||||
@ -580,7 +626,7 @@ local importantAuras = {
|
|||||||
spellID = 24259,
|
spellID = 24259,
|
||||||
},
|
},
|
||||||
-- Unstable Affliction Silence
|
-- Unstable Affliction Silence
|
||||||
["Unstable Affliction Silence"] = { -- GetSpellInfo returns "Unstable Affliction"
|
[select(1, GetSpellInfo(31117)) .. " Silence"] = { -- GetSpellInfo returns "Unstable Affliction"
|
||||||
track = AURA_TYPE_DEBUFF,
|
track = AURA_TYPE_DEBUFF,
|
||||||
altName = select(1, GetSpellInfo(31117)) .. " Silence",
|
altName = select(1, GetSpellInfo(31117)) .. " Silence",
|
||||||
duration = 5,
|
duration = 5,
|
||||||
@ -645,6 +691,13 @@ local importantAuras = {
|
|||||||
spellSchool = "magic",
|
spellSchool = "magic",
|
||||||
spellID = 12292,
|
spellID = 12292,
|
||||||
},
|
},
|
||||||
|
--Disarm
|
||||||
|
[GetSpellInfo(676)] = {
|
||||||
|
track = AURA_TYPE_DEBUFF,
|
||||||
|
duration = 10,
|
||||||
|
priority = 20,
|
||||||
|
spellID = 676,
|
||||||
|
},
|
||||||
|
|
||||||
-- Grounding Totem Effect
|
-- Grounding Totem Effect
|
||||||
[GetSpellInfo(8178)] = {
|
[GetSpellInfo(8178)] = {
|
||||||
@ -706,9 +759,9 @@ local importantAuras = {
|
|||||||
},
|
},
|
||||||
-- Shadowsight Buff
|
-- Shadowsight Buff
|
||||||
[GetSpellInfo(34709)] = {
|
[GetSpellInfo(34709)] = {
|
||||||
track = AURA_TYPE_BUFF,
|
track = AURA_TYPE_DEBUFF,
|
||||||
duration = 15,
|
duration = 15,
|
||||||
priority = 15,
|
priority = 9,
|
||||||
magic = true,
|
magic = true,
|
||||||
spellID = 34709,
|
spellID = 34709,
|
||||||
},
|
},
|
||||||
@ -742,6 +795,13 @@ local importantAuras = {
|
|||||||
spellID = 5024,
|
spellID = 5024,
|
||||||
altName = select(1, GetSpellInfo(5024)) .. " - " .. (select(1, GetItemInfo(4984)) or "Skull of Impending Doom"),
|
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()
|
function Gladdy:GetImportantAuras()
|
||||||
return importantAuras
|
return importantAuras
|
||||||
@ -761,42 +821,13 @@ function Gladdy:GetInterrupts()
|
|||||||
return interrupts
|
return interrupts
|
||||||
end
|
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 = {
|
local cooldownList = {
|
||||||
-- Spell Name Cooldown[, Spec]
|
-- Spell Name Cooldown[, Spec]
|
||||||
-- Mage
|
-- Mage
|
||||||
["MAGE"] = {
|
["MAGE"] = {
|
||||||
[1953] = 15, -- Blink
|
[1953] = 15, -- Blink
|
||||||
--[122] = 22, -- Frost Nova
|
--[122] = 22, -- Frost Nova
|
||||||
--[12051] = 480, --Evocation
|
[12051] = 480, --Evocation
|
||||||
[2139] = 24, -- Counterspell
|
[2139] = 24, -- Counterspell
|
||||||
[45438] = { cd = 300, [L["Frost"]] = 240, }, -- Ice Block
|
[45438] = { cd = 300, [L["Frost"]] = 240, }, -- Ice Block
|
||||||
[12472] = { cd = 180, spec = L["Frost"], }, -- Icy Veins
|
[12472] = { cd = 180, spec = L["Frost"], }, -- Icy Veins
|
||||||
@ -828,6 +859,8 @@ local cooldownList = {
|
|||||||
[10060] = { cd = 180, spec = L["Discipline"], }, -- Power Infusion
|
[10060] = { cd = 180, spec = L["Discipline"], }, -- Power Infusion
|
||||||
[33206] = { cd = 120, spec = L["Discipline"], }, -- Pain Suppression
|
[33206] = { cd = 120, spec = L["Discipline"], }, -- Pain Suppression
|
||||||
[34433] = 300, -- Shadowfiend
|
[34433] = 300, -- Shadowfiend
|
||||||
|
[32379] = 12, -- Shadow Word: Death
|
||||||
|
[6346] = 180, -- Fear Ward
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Druid
|
-- Druid
|
||||||
@ -853,6 +886,7 @@ local cooldownList = {
|
|||||||
[16166] = { cd = 180, spec = L["Elemental"], }, -- Elemental Mastery
|
[16166] = { cd = 180, spec = L["Elemental"], }, -- Elemental Mastery
|
||||||
[16188] = { cd = 180, spec = L["Restoration"], }, -- Natures Swiftness
|
[16188] = { cd = 180, spec = L["Restoration"], }, -- Natures Swiftness
|
||||||
[16190] = { cd = 300, spec = L["Restoration"], }, -- Mana Tide Totem
|
[16190] = { cd = 300, spec = L["Restoration"], }, -- Mana Tide Totem
|
||||||
|
[8177] = 15, -- Grounding Totem
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Paladin
|
-- Paladin
|
||||||
@ -882,9 +916,11 @@ local cooldownList = {
|
|||||||
["WARLOCK"] = {
|
["WARLOCK"] = {
|
||||||
[17928] = 40, -- Howl of Terror
|
[17928] = 40, -- Howl of Terror
|
||||||
[27223] = 120, -- Death Coil
|
[27223] = 120, -- Death Coil
|
||||||
--[19647] = { cd = 24 }, -- Spell Lock; how will I handle pet spells?
|
[19647] = 24, -- Spell Lock
|
||||||
|
[27277] = 8, -- Devour Magic
|
||||||
[30414] = { cd = 20, spec = L["Destruction"], }, -- Shadowfury
|
[30414] = { cd = 20, spec = L["Destruction"], }, -- Shadowfury
|
||||||
[17877] = { cd = 15, spec = L["Destruction"], }, -- Shadowburn
|
[17877] = { cd = 15, spec = L["Destruction"], }, -- Shadowburn
|
||||||
|
[30912] = { cd = 10, spec = L["Destruction"], }, -- Conflagrate
|
||||||
[18708] = { cd = 900, spec = L["Demonology"], }, -- Feldom
|
[18708] = { cd = 900, spec = L["Demonology"], }, -- Feldom
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -907,6 +943,7 @@ local cooldownList = {
|
|||||||
[18499] = 30, -- Berserker Rage
|
[18499] = 30, -- Berserker Rage
|
||||||
--[2565] = 60, -- Shield Block
|
--[2565] = 60, -- Shield Block
|
||||||
[12292] = { cd = 180, spec = L["Arms"], }, -- Death Wish
|
[12292] = { cd = 180, spec = L["Arms"], }, -- Death Wish
|
||||||
|
[20252] = { cd = 25, [L["Arms"]] = 15 }, -- Intercept
|
||||||
[12975] = { cd = 180, spec = L["Protection"], }, -- Last Stand
|
[12975] = { cd = 180, spec = L["Protection"], }, -- Last Stand
|
||||||
[12809] = { cd = 30, spec = L["Protection"], }, -- Concussion Blow
|
[12809] = { cd = 30, spec = L["Protection"], }, -- Concussion Blow
|
||||||
|
|
||||||
@ -915,29 +952,38 @@ local cooldownList = {
|
|||||||
-- Hunter
|
-- Hunter
|
||||||
["HUNTER"] = {
|
["HUNTER"] = {
|
||||||
[19503] = 30, -- Scatter Shot
|
[19503] = 30, -- Scatter Shot
|
||||||
|
[14327] = 30, -- Scare Beast
|
||||||
[19263] = 300, -- Deterrence; not on BM but can't do 2 specs
|
[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
|
[13809] = { cd = 30, -- Frost Trap
|
||||||
sharedCD = {
|
sharedCD = {
|
||||||
[14311] = true, -- Freezing Trap
|
[14311] = true, -- Freezing Trap
|
||||||
[34600] = true, -- Snake 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
|
[34600] = { cd = 30, -- Snake Trap
|
||||||
sharedCD = {
|
sharedCD = {
|
||||||
[14311] = true, -- Freezing Trap
|
[14311] = true, -- Freezing Trap
|
||||||
[13809] = true, -- Frost Trap
|
[13809] = true, -- Frost Trap
|
||||||
},
|
},
|
||||||
|
icon = select(3, GetSpellInfo(14311)),
|
||||||
},
|
},
|
||||||
[34490] = { cd = 20, spec = L["Marksmanship"], }, -- Silencing Shot
|
[34490] = { cd = 20, spec = L["Marksmanship"], }, -- Silencing Shot
|
||||||
[19386] = { cd = 60, spec = L["Survival"], }, -- Wyvern Sting
|
[19386] = { cd = 120, spec = L["Survival"], }, -- Wyvern Sting
|
||||||
[19577] = { cd = 60, spec = L["Beast Mastery"], }, -- Intimidation
|
[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
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Rogue
|
-- Rogue
|
||||||
@ -979,19 +1025,19 @@ local cooldownList = {
|
|||||||
|
|
||||||
},
|
},
|
||||||
["NightElf"] = {
|
["NightElf"] = {
|
||||||
[2651] = { cd = 180, spec = L["Discipline"], }, -- Elune's Grace
|
[2651] = { cd = 180, spec = L["Discipline"], class = "PRIEST"}, -- Elune's Grace
|
||||||
[10797] = { cd = 30, spec = L["Discipline"], }, -- Star Shards
|
[10797] = { cd = 30, spec = L["Discipline"], class = "PRIEST"}, -- Star Shards
|
||||||
},
|
},
|
||||||
["Draenei"] = {
|
["Draenei"] = {
|
||||||
[32548] = { cd = 300, spec = L["Discipline"], }, -- Hymn of Hope
|
[32548] = { cd = 300, spec = L["Discipline"], class = "PRIEST"}, -- Hymn of Hope
|
||||||
},
|
},
|
||||||
["Human"] = {
|
["Human"] = {
|
||||||
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
|
[13908] = { cd = 600, spec = L["Discipline"], class = "PRIEST"}, -- Desperate Prayer
|
||||||
},
|
},
|
||||||
["Gnome"] = {
|
["Gnome"] = {
|
||||||
},
|
},
|
||||||
["Dwarf"] = {
|
["Dwarf"] = {
|
||||||
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
|
[13908] = { cd = 600, spec = L["Discipline"], class = "PRIEST"}, -- Desperate Prayer
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
function Gladdy:GetCooldownList()
|
function Gladdy:GetCooldownList()
|
||||||
@ -1068,73 +1114,62 @@ function Gladdy:Racials()
|
|||||||
return racials
|
return racials
|
||||||
end
|
end
|
||||||
|
|
||||||
local arenaTimer = {
|
|
||||||
["default"] = {
|
---------------------
|
||||||
[61] = "One minute until the Arena battle begins!",
|
-- TOTEM STUFF
|
||||||
[31] = "Thirty seconds until the Arena battle begins!",
|
---------------------
|
||||||
[16] = "Fifteen seconds until the Arena battle begins!",
|
|
||||||
[0] = "The Arena battle has begun!",
|
local totemData = {
|
||||||
},
|
-- Fire
|
||||||
["esES"] = {
|
-- Water
|
||||||
[61] = "¡Un minuto hasta que dé comienzo la batalla en arena!",
|
[string_lower("Poison Cleansing Totem")] = {id = 8166,texture = select(3, GetSpellInfo(8166)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 5},
|
||||||
[31] = "¡Treinta segundos hasta que comience la batalla en arena!",
|
[string_lower("Mana Spring Totem")] = {id = 5675,texture = select(3, GetSpellInfo(5675)), color = {r = 0, g = 0, b = 0, a = 1}, pulse = 2},
|
||||||
[16] = "¡Quince segundos hasta que comience la batalla en arena!",
|
-- Earth
|
||||||
[0] = "¡La batalla en arena ha comenzado!",
|
-- Air
|
||||||
},
|
[string_lower("Grace of Air Totem")] = {id = 8835,texture = select(3, GetSpellInfo(8835)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||||
["ptBR"] = {
|
[string_lower("Windwall Totem")] = {id = 15107,texture = select(3, GetSpellInfo(15107)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||||
[61] = "Um minuto até a batalha na Arena começar!",
|
[string_lower("Tranquil Air Totem")] = {id = 25908,texture = select(3, GetSpellInfo(25908)), color = {r = 0, g = 0, b = 0, a = 1}},
|
||||||
[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()
|
local totemSpellIdToPulse = {
|
||||||
if arenaTimer[GetLocale()] then
|
[GetSpellInfo(totemData[string_lower("Poison Cleansing Totem")].id)] = totemData[string_lower("Poison Cleansing Totem")].pulse,
|
||||||
return arenaTimer[GetLocale()]
|
[8166] = totemData[string_lower("Poison Cleansing Totem")].pulse,
|
||||||
else
|
[GetSpellInfo(totemData[string_lower("Mana Spring Totem")].id)] = totemData[string_lower("Mana Spring Totem")].pulse,
|
||||||
return arenaTimer["default"]
|
[5675] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 1
|
||||||
end
|
[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
|
||||||
|
[58771] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 6
|
||||||
|
[58773] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 7
|
||||||
|
[58774] = totemData[string_lower("Mana Spring Totem")].pulse, -- Rank 8
|
||||||
|
}
|
||||||
|
|
||||||
|
local totemNpcIdsToTotemData = {
|
||||||
|
--fire
|
||||||
|
-- Water
|
||||||
|
[5923] = totemData[string_lower("Poison Cleansing Totem")],
|
||||||
|
[22487] = totemData[string_lower("Poison Cleansing Totem")],
|
||||||
|
|
||||||
|
-- Earth
|
||||||
|
-- Air
|
||||||
|
[7486] = totemData[string_lower("Grace of Air Totem")],
|
||||||
|
[7487] = totemData[string_lower("Grace of Air Totem")],
|
||||||
|
[15463] = totemData[string_lower("Grace of Air 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")],
|
||||||
|
|
||||||
|
[15803] = totemData[string_lower("Tranquil Air Totem")],
|
||||||
|
}
|
||||||
|
|
||||||
|
local totemDataShared, totemNpcIdsToTotemDataShared, totemSpellIdToPulseShared = Gladdy:GetSharedTotemData()
|
||||||
|
Gladdy:AddEntriesToTable(totemData, totemDataShared)
|
||||||
|
Gladdy:AddEntriesToTable(totemNpcIdsToTotemData, totemNpcIdsToTotemDataShared)
|
||||||
|
Gladdy:AddEntriesToTable(totemSpellIdToPulse, totemSpellIdToPulseShared)
|
||||||
|
|
||||||
|
function Gladdy:GetTotemData()
|
||||||
|
return totemData, totemNpcIdsToTotemData, totemSpellIdToPulse
|
||||||
end
|
end
|
||||||
|
|
1125
Constants_Wrath.lua
Normal file
1125
Constants_Wrath.lua
Normal file
File diff suppressed because it is too large
Load Diff
641
Constants_shared.lua
Normal file
641
Constants_shared.lua
Normal file
@ -0,0 +1,641 @@
|
|||||||
|
local tbl_sort, select, string_lower = table.sort, select, string.lower
|
||||||
|
local GetLocale = GetLocale
|
||||||
|
local GetSpellInfo = GetSpellInfo
|
||||||
|
|
||||||
|
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",
|
||||||
|
}
|
||||||
|
|
||||||
|
Gladdy.exceptionNames = {
|
||||||
|
[50334] = (GetSpellInfo(50334) or "...") .. " Feral", -- Berserk
|
||||||
|
[30151] = select(1, GetSpellInfo(30151)) .. " Felguard", -- Intercept
|
||||||
|
[30194] = select(1, GetSpellInfo(30151)) .. " Felguard", -- Intercept
|
||||||
|
[30198] = select(1, GetSpellInfo(30151)) .. " Felguard", -- Intercept
|
||||||
|
[47996] = select(1, GetSpellInfo(30151)) .. " Felguard", -- Intercept
|
||||||
|
[31117] = select(1, GetSpellInfo(30405)) .. " Silence", -- Unstable Affliction Silence
|
||||||
|
[43523] = select(1, GetSpellInfo(30405)) .. " Silence",
|
||||||
|
[24131] = select(1, GetSpellInfo(19386)) .. " Dot", -- Wyvern Sting Dot
|
||||||
|
[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)),
|
||||||
|
[19972] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||||
|
[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)),
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
-- 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("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}, pulse = 3 },
|
||||||
|
[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("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("Wrath of Air Totem")] = {id = 3738,texture = select(3, GetSpellInfo(3738)), 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("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
|
||||||
|
[58731] = totemData[string_lower("Magma Totem")].pulse, -- Rank 6
|
||||||
|
[58734] = totemData[string_lower("Magma Totem")].pulse, -- Rank 7
|
||||||
|
[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
|
||||||
|
[58755] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 7
|
||||||
|
[58756] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 8
|
||||||
|
[58757] = totemData[string_lower("Healing Stream Totem")].pulse, -- Rank 9
|
||||||
|
[GetSpellInfo(totemData[string_lower("Mana Tide Totem")].id)] = totemData[string_lower("Mana Tide Totem")].pulse,
|
||||||
|
[16190] = totemData[string_lower("Mana Tide Totem")].pulse, -- Rank 1
|
||||||
|
[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
|
||||||
|
[58580] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 8
|
||||||
|
[58581] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 9
|
||||||
|
[58582] = totemData[string_lower("Stoneclaw Totem")].pulse, -- Rank 10
|
||||||
|
}
|
||||||
|
|
||||||
|
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")],
|
||||||
|
|
||||||
|
[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")],
|
||||||
|
|
||||||
|
[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")],
|
||||||
|
|
||||||
|
[15447] = totemData[string_lower("Wrath of Air Totem")],
|
||||||
|
[36556] = totemData[string_lower("Wrath of Air Totem")],
|
||||||
|
}
|
||||||
|
|
||||||
|
function Gladdy:GetSharedTotemData()
|
||||||
|
return totemData, totemNpcIdsToTotemData, totemSpellIdToPulse
|
||||||
|
end
|
@ -1,19 +1,23 @@
|
|||||||
local select, string_gsub, tostring = select, string.gsub, tostring
|
local select, string_gsub, tostring, pairs, ipairs = select, string.gsub, tostring, pairs, ipairs
|
||||||
|
local wipe = wipe
|
||||||
|
local unpack = unpack
|
||||||
|
|
||||||
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
||||||
local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
|
local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
|
||||||
local AURA_TYPE_BUFF = AURA_TYPE_BUFF
|
local AURA_TYPE_BUFF = AURA_TYPE_BUFF
|
||||||
|
|
||||||
local UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit = UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit
|
local UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit, UnitExists = UnitName, UnitAura, UnitRace, UnitClass, UnitGUID, UnitIsUnit, UnitExists
|
||||||
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
||||||
local GetSpellInfo = GetSpellInfo
|
local GetSpellInfo = GetSpellInfo
|
||||||
local FindAuraByName = AuraUtil.FindAuraByName
|
local FindAuraByName = AuraUtil.FindAuraByName
|
||||||
|
local GetTime = GetTime
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
|
local L = Gladdy.L
|
||||||
local Cooldowns = Gladdy.modules["Cooldowns"]
|
local Cooldowns = Gladdy.modules["Cooldowns"]
|
||||||
local Diminishings = Gladdy.modules["Diminishings"]
|
local Diminishings = Gladdy.modules["Diminishings"]
|
||||||
|
|
||||||
local EventListener = Gladdy:NewModule("EventListener", nil, {
|
local EventListener = Gladdy:NewModule("EventListener", 101, {
|
||||||
test = true,
|
test = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -32,6 +36,18 @@ function EventListener:JOINED_ARENA()
|
|||||||
self:RegisterEvent("UNIT_SPELLCAST_START")
|
self:RegisterEvent("UNIT_SPELLCAST_START")
|
||||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START")
|
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START")
|
||||||
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
|
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
|
||||||
|
-- in case arena has started already we check for units
|
||||||
|
for i=1,Gladdy.curBracket do
|
||||||
|
if Gladdy.buttons["arena"..i].lastAuras then
|
||||||
|
wipe(Gladdy.buttons["arena"..i].lastAuras)
|
||||||
|
end
|
||||||
|
if UnitExists("arena" .. i) then
|
||||||
|
Gladdy:SpotEnemy("arena" .. i, true)
|
||||||
|
end
|
||||||
|
if UnitExists("arenapet" .. i) then
|
||||||
|
Gladdy:SendMessage("PET_SPOTTED", "arenapet" .. i)
|
||||||
|
end
|
||||||
|
end
|
||||||
self:SetScript("OnEvent", EventListener.OnEvent)
|
self:SetScript("OnEvent", EventListener.OnEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -40,39 +56,53 @@ function EventListener:Reset()
|
|||||||
self:SetScript("OnEvent", nil)
|
self:SetScript("OnEvent", nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:DetectSpec(unit, specSpell)
|
|
||||||
if specSpell then
|
|
||||||
self.modules["Cooldowns"]:DetectSpec(unit, specSpell)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function Gladdy:SpotEnemy(unit, auraScan)
|
function Gladdy:SpotEnemy(unit, auraScan)
|
||||||
local button = self.buttons[unit]
|
local button = self.buttons[unit]
|
||||||
if not unit or not button then
|
if not unit or not button then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
button.raceLoc = UnitRace(unit)
|
if UnitExists(unit) then
|
||||||
button.race = select(2, UnitRace(unit))
|
button.raceLoc = UnitRace(unit)
|
||||||
button.classLoc = select(1, UnitClass(unit))
|
button.race = select(2, UnitRace(unit))
|
||||||
button.class = select(2, UnitClass(unit))
|
button.classLoc = select(1, UnitClass(unit))
|
||||||
button.name = UnitName(unit)
|
button.class = select(2, UnitClass(unit))
|
||||||
button.stealthed = false
|
button.name = UnitName(unit)
|
||||||
Gladdy.guids[UnitGUID(unit)] = unit
|
Gladdy.guids[UnitGUID(unit)] = unit
|
||||||
|
end
|
||||||
if button.class and button.race then
|
if button.class and button.race then
|
||||||
Gladdy:SendMessage("ENEMY_SPOTTED", unit)
|
Gladdy:SendMessage("ENEMY_SPOTTED", unit)
|
||||||
end
|
end
|
||||||
if auraScan and not button.spec then
|
if auraScan and not button.spec then
|
||||||
|
Gladdy:SendMessage("AURA_FADE", unit, "HELPFUL")
|
||||||
for n = 1, 30 do
|
for n = 1, 30 do
|
||||||
local spellName,_,_,_,_,_,unitCaster = UnitAura(unit, n, "HELPFUL")
|
local spellName, texture, count, dispelType, duration, expirationTime, unitCaster, _, _, spellID = UnitAura(unit, n, "HELPFUL")
|
||||||
if ( not spellName ) then
|
if ( not spellName ) then
|
||||||
|
Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, AURA_TYPE_BUFF, n - 1)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
if Gladdy.specBuffs[spellName] then
|
|
||||||
|
if Gladdy.exceptionNames[spellID] then
|
||||||
|
spellName = Gladdy.exceptionNames[spellID]
|
||||||
|
end
|
||||||
|
|
||||||
|
if Gladdy.specBuffs[spellName] and unitCaster then -- Check for auras that detect a spec
|
||||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||||
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
|
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
|
||||||
Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
EventListener:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||||
end
|
end
|
||||||
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, Gladdy.cooldownBuffs[spellName].cd(expirationTime - GetTime()))
|
||||||
|
-- /run LibStub("Gladdy").modules["Cooldowns"]:CooldownUsed("arena5", "PRIEST", 6346, 10)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
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
|
end
|
||||||
end
|
end
|
||||||
@ -80,55 +110,90 @@ end
|
|||||||
function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||||
-- timestamp,eventType,hideCaster,sourceGUID,sourceName,sourceFlags,sourceRaidFlags,destGUID,destName,destFlags,destRaidFlags,spellId,spellName,spellSchool
|
-- timestamp,eventType,hideCaster,sourceGUID,sourceName,sourceFlags,sourceRaidFlags,destGUID,destName,destFlags,destRaidFlags,spellId,spellName,spellSchool
|
||||||
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool = CombatLogGetCurrentEventInfo()
|
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool = CombatLogGetCurrentEventInfo()
|
||||||
local srcUnit = Gladdy.guids[sourceGUID]
|
local srcUnit = Gladdy.guids[sourceGUID] -- can be a PET
|
||||||
local destUnit = Gladdy.guids[destGUID]
|
local destUnit = Gladdy.guids[destGUID] -- can be a PET
|
||||||
|
if (Gladdy.db.shadowsightTimerEnabled and eventType == "SPELL_AURA_APPLIED" and spellID == 34709) then
|
||||||
|
Gladdy.modules["Shadowsight Timer"]:AURA_GAIN(nil, nil, 34709)
|
||||||
|
end
|
||||||
|
|
||||||
|
if Gladdy.exceptionNames[spellID] then
|
||||||
|
spellName = Gladdy.exceptionNames[spellID]
|
||||||
|
end
|
||||||
if destUnit then
|
if destUnit then
|
||||||
-- diminish tracker
|
-- diminish tracker
|
||||||
if (Gladdy.db.drEnabled and (eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH")) then
|
if Gladdy.buttons[destUnit] and Gladdy.db.drEnabled and extraSpellId == AURA_TYPE_DEBUFF then
|
||||||
Diminishings:AuraFade(destUnit, spellID)
|
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
|
end
|
||||||
-- death detection
|
-- death detection
|
||||||
if (eventType == "UNIT_DIED" or eventType == "PARTY_KILL" or eventType == "SPELL_INSTAKILL") then
|
if (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
|
end
|
||||||
-- spec detection
|
-- spec detection
|
||||||
if not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race then
|
if Gladdy.buttons[destUnit] and (not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race) then
|
||||||
Gladdy:SpotEnemy(destUnit, true)
|
Gladdy:SpotEnemy(destUnit, true)
|
||||||
end
|
end
|
||||||
--interrupt detection
|
--interrupt detection
|
||||||
if eventType == "SPELL_INTERRUPT" then
|
if Gladdy.buttons[destUnit] and eventType == "SPELL_INTERRUPT" then
|
||||||
Gladdy:SendMessage("SPELL_INTERRUPT", destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
Gladdy:SendMessage("SPELL_INTERRUPT", destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if srcUnit then
|
if srcUnit then
|
||||||
if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED") then
|
srcUnit = string_gsub(srcUnit, "pet", "")
|
||||||
local unitRace = Gladdy.buttons[srcUnit].race
|
if (not UnitExists(srcUnit)) then
|
||||||
|
return
|
||||||
|
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
|
||||||
|
self:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
||||||
|
end
|
||||||
|
if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_MISSED") then
|
||||||
-- cooldown tracker
|
-- cooldown tracker
|
||||||
if Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName] then
|
if Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName] then
|
||||||
local unitClass
|
local unitClass
|
||||||
local spellId = Cooldowns.cooldownSpellIds[spellName] -- don't use spellId from combatlog, in case of different spellrank
|
local spellId = Cooldowns.cooldownSpellIds[spellName] -- don't use spellId from combatlog, in case of different spellrank
|
||||||
if Gladdy.db.cooldownCooldowns[tostring(spellId)] then
|
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)] and (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_MISSED" or eventType == "SPELL_DODGED") then
|
||||||
if (Gladdy:GetCooldownList()[Gladdy.buttons[srcUnit].class][spellId]) then
|
if (Gladdy:GetCooldownList()[Gladdy.buttons[srcUnit].class][spellId]) then
|
||||||
unitClass = Gladdy.buttons[srcUnit].class
|
unitClass = Gladdy.buttons[srcUnit].class
|
||||||
else
|
else
|
||||||
unitClass = Gladdy.buttons[srcUnit].race
|
unitClass = Gladdy.buttons[srcUnit].race
|
||||||
end
|
end
|
||||||
Cooldowns:CooldownUsed(srcUnit, unitClass, spellId, spellName)
|
if spellID ~= 16188 and spellID ~= 17116 and spellID ~= 16166 and spellID ~= 12043 and spellID ~= 5384 then -- Nature's Swiftness CD starts when buff fades
|
||||||
Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
|
Gladdy:Debug("INFO", eventType, "- CooldownUsed", srcUnit, "spellID:", spellID)
|
||||||
|
Cooldowns:CooldownUsed(srcUnit, unitClass, spellId)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
if Gladdy.db.racialEnabled and Gladdy:Racials()[unitRace].spellName == spellName and Gladdy:Racials()[unitRace][spellID] then
|
if (eventType == "SPELL_AURA_REMOVED" and (spellID == 16188 or spellID == 17116 or spellID == 16166 or spellID == 12043) and Gladdy.buttons[srcUnit].class) then
|
||||||
Gladdy:SendMessage("RACIAL_USED", srcUnit)
|
Gladdy:Debug("INFO", "SPELL_AURA_REMOVED - CooldownUsed", srcUnit, "spellID:", spellID)
|
||||||
|
Cooldowns:CooldownUsed(srcUnit, Gladdy.buttons[srcUnit].class, spellID)
|
||||||
|
end
|
||||||
|
if (eventType == "SPELL_AURA_REMOVED" and Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName]) then
|
||||||
|
local unit = Gladdy:GetArenaUnit(srcUnit, true)
|
||||||
|
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 unit then
|
||||||
|
--Gladdy:Debug("INFO", "EL:CL:SPELL_AURA_REMOVED (srcUnit)", "Cooldowns:AURA_FADE", unit, spellId)
|
||||||
|
Cooldowns:AURA_FADE(unit, spellId)
|
||||||
end
|
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])
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -136,12 +201,15 @@ end
|
|||||||
function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||||
--[[ updateReason: seen, unseen, destroyed, cleared ]]
|
--[[ updateReason: seen, unseen, destroyed, cleared ]]
|
||||||
|
|
||||||
|
unit = Gladdy:GetArenaUnit(unit)
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
local pet = Gladdy.modules["Pets"].frames[unit]
|
local pet = Gladdy.modules["Pets"].frames[unit]
|
||||||
|
Gladdy:Debug("INFO", "ARENA_OPPONENT_UPDATE", unit, updateReason)
|
||||||
if button or pet then
|
if button or pet then
|
||||||
if updateReason == "seen" then
|
if updateReason == "seen" then
|
||||||
-- ENEMY_SPOTTED
|
-- ENEMY_SPOTTED
|
||||||
if button then
|
if button then
|
||||||
|
button.stealthed = false
|
||||||
Gladdy:SendMessage("ENEMY_STEALTH", unit, false)
|
Gladdy:SendMessage("ENEMY_STEALTH", unit, false)
|
||||||
if not button.class or not button.race then
|
if not button.class or not button.race then
|
||||||
Gladdy:SpotEnemy(unit, true)
|
Gladdy:SpotEnemy(unit, true)
|
||||||
@ -153,6 +221,7 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
|||||||
elseif updateReason == "unseen" then
|
elseif updateReason == "unseen" then
|
||||||
-- STEALTH
|
-- STEALTH
|
||||||
if button then
|
if button then
|
||||||
|
button.stealthed = true
|
||||||
Gladdy:SendMessage("ENEMY_STEALTH", unit, true)
|
Gladdy:SendMessage("ENEMY_STEALTH", unit, true)
|
||||||
end
|
end
|
||||||
if pet then
|
if pet then
|
||||||
@ -172,60 +241,118 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Gladdy.exceptionNames = { -- TODO MOVE ME TO CLASSBUFFS LIB
|
Gladdy.cooldownBuffs = {
|
||||||
[31117] = GetSpellInfo(30405) .. " Silence", -- Unstable Affliction Silence
|
[GetSpellInfo(6346)] = { cd = function(expTime) -- 180s uptime == cd
|
||||||
[43523] = GetSpellInfo(30405) .. " Silence",
|
return expTime
|
||||||
[24131] = select(1, GetSpellInfo(19386)) .. " Dot", -- Wyvern Sting Dot
|
end, spellId = 6346 }, -- Fear Ward
|
||||||
[24134] = select(1, GetSpellInfo(19386)) .. " Dot",
|
[GetSpellInfo(11305)] = { cd = function(expTime) -- 15s uptime
|
||||||
[24135] = select(1, GetSpellInfo(19386)) .. " Dot",
|
return 300 - (15 - expTime)
|
||||||
[27069] = select(1, GetSpellInfo(19386)) .. " Dot",
|
end, spellId = 11305 }, -- Sprint
|
||||||
[19975] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)), -- Entangling Roots Nature's Grasp
|
[36554] = { cd = function(expTime) -- 3s uptime
|
||||||
[19974] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
return 30 - (3 - expTime)
|
||||||
[19973] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
end, spellId = 36554 }, -- Shadowstep speed buff
|
||||||
[19972] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
[36563] = { cd = function(expTime) -- 10s uptime
|
||||||
[19971] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
return 30 - (10 - expTime)
|
||||||
[19971] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
end, spellId = 36554 }, -- Shadowstep dmg buff
|
||||||
[27010] = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
[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]
|
local button = Gladdy.buttons[unit]
|
||||||
if not button then
|
if not button then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if not button.auras then
|
||||||
|
button.auras = {}
|
||||||
|
end
|
||||||
|
wipe(button.auras)
|
||||||
|
if not button.lastAuras then
|
||||||
|
button.lastAuras = {}
|
||||||
|
end
|
||||||
|
Gladdy:Debug("INFO", "AURA_FADE", unit, AURA_TYPE_BUFF, AURA_TYPE_DEBUFF)
|
||||||
|
Gladdy:SendMessage("AURA_FADE", unit, AURA_TYPE_BUFF)
|
||||||
|
Gladdy:SendMessage("AURA_FADE", unit, AURA_TYPE_DEBUFF)
|
||||||
for i = 1, 2 do
|
for i = 1, 2 do
|
||||||
if not Gladdy.buttons[unit].class or not Gladdy.buttons[unit].race then
|
if not Gladdy.buttons[unit].class or not Gladdy.buttons[unit].race then
|
||||||
Gladdy:SpotEnemy(unit, false)
|
Gladdy:SpotEnemy(unit, false)
|
||||||
end
|
end
|
||||||
local filter = (i == 1 and "HELPFUL" or "HARMFUL")
|
local filter = (i == 1 and "HELPFUL" or "HARMFUL")
|
||||||
local auraType = i == 1 and AURA_TYPE_BUFF or AURA_TYPE_DEBUFF
|
local auraType = i == 1 and AURA_TYPE_BUFF or AURA_TYPE_DEBUFF
|
||||||
Gladdy:SendMessage("AURA_FADE", unit, auraType)
|
|
||||||
for n = 1, 30 do
|
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
|
if ( not spellID ) then
|
||||||
Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, auraType, n - 1)
|
Gladdy:SendMessage("AURA_GAIN_LIMIT", unit, auraType, n - 1)
|
||||||
break
|
break
|
||||||
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
|
|
||||||
end
|
|
||||||
if Gladdy.exceptionNames[spellID] then
|
if Gladdy.exceptionNames[spellID] then
|
||||||
spellName = Gladdy.exceptionNames[spellID]
|
spellName = Gladdy.exceptionNames[spellID]
|
||||||
end
|
end
|
||||||
Gladdy:SendMessage("AURA_GAIN", unit, auraType, spellID, spellName, texture, duration, expirationTime, count, debuffType, i)
|
button.auras[spellID] = { auraType, spellID, spellName, texture, duration, expirationTime, count, dispelType }
|
||||||
Gladdy:Call("Announcements", "CheckDrink", unit, spellName)
|
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, cooldownBuff.spellId, cooldownBuff.cd(expirationTime - GetTime()))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if Gladdy.cooldownBuffs.racials[spellName] then
|
||||||
|
Gladdy:SendMessage("RACIAL_USED", unit, spellName, Gladdy.cooldownBuffs.racials[spellName].cd(expirationTime - GetTime()), spellName)
|
||||||
|
end
|
||||||
|
Gladdy:Debug("INFO", "AURA_GAIN", unit, auraType, spellName)
|
||||||
|
Gladdy:SendMessage("AURA_GAIN", unit, auraType, spellID, spellName, texture, duration, expirationTime, count, dispelType, i, unitCaster)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- check auras
|
||||||
|
for spellID,v in pairs(button.lastAuras) do
|
||||||
|
if not button.auras[spellID] then
|
||||||
|
if Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[v[3]] then
|
||||||
|
local spellId = Cooldowns.cooldownSpellIds[v[3]] -- 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
|
||||||
|
--Gladdy:Debug("INFO", "EL:UNIT_AURA Cooldowns:AURA_FADE", unit, spellId)
|
||||||
|
Cooldowns:AURA_FADE(unit, spellId)
|
||||||
|
if spellID == 5384 then -- Feign Death CD Detection needs this
|
||||||
|
Cooldowns:CooldownUsed(unit, Gladdy.buttons[unit].class, 5384)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
wipe(button.lastAuras)
|
||||||
|
button.lastAuras = Gladdy:DeepCopy(button.auras)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EventListener:UpdateAuras(unit)
|
||||||
|
local button = Gladdy.buttons[unit]
|
||||||
|
if not button or button.lastAuras then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
for i=1, #button.lastAuras do
|
||||||
|
Gladdy.modules["Auras"]:AURA_GAIN(unit, unpack(button.lastAuras[i]))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function EventListener:UNIT_SPELLCAST_START(unit)
|
function EventListener:UNIT_SPELLCAST_START(unit)
|
||||||
if Gladdy.buttons[unit] then
|
if Gladdy.buttons[unit] then
|
||||||
local spellName = UnitCastingInfo(unit)
|
local spellName = UnitCastingInfo(unit)
|
||||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
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
|
end
|
||||||
end
|
end
|
||||||
@ -234,16 +361,81 @@ function EventListener:UNIT_SPELLCAST_CHANNEL_START(unit)
|
|||||||
if Gladdy.buttons[unit] then
|
if Gladdy.buttons[unit] then
|
||||||
local spellName = UnitChannelInfo(unit)
|
local spellName = UnitChannelInfo(unit)
|
||||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
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
|
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
|
if Gladdy.buttons[unit] then
|
||||||
local spellName = UnitCastingInfo(unit)
|
local unitRace = Gladdy.buttons[unit].race
|
||||||
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
local spellName = GetSpellInfo(spellID)
|
||||||
Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName])
|
|
||||||
|
if Gladdy.exceptionNames[spellID] then
|
||||||
|
spellName = Gladdy.exceptionNames[spellID]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- spec detection
|
||||||
|
if spellName and Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then
|
||||||
|
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 unitRace and 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
|
||||||
|
|
||||||
|
--cooldown
|
||||||
|
local unitClass
|
||||||
|
if (Gladdy:GetCooldownList()[Gladdy.buttons[unit].class][unit]) then
|
||||||
|
unitClass = Gladdy.buttons[unit].class
|
||||||
|
else
|
||||||
|
unitClass = Gladdy.buttons[unit].race
|
||||||
|
end
|
||||||
|
if spellID ~= 16188 and spellID ~= 17116 and spellID ~= 16166 and spellID ~= 12043 and spellID ~= 5384 then -- Nature's Swiftness CD starts when buff fades
|
||||||
|
Gladdy:Debug("INFO", "UNIT_SPELLCAST_SUCCEEDED", "- CooldownUsed", unit, "spellID:", spellID)
|
||||||
|
Cooldowns:CooldownUsed(unit, unitClass, spellID)
|
||||||
end
|
end
|
||||||
end
|
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 not 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
|
||||||
|
304
Frame.lua
304
Frame.lua
@ -1,6 +1,9 @@
|
|||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local UIParent = UIParent
|
local UIParent = UIParent
|
||||||
local InCombatLockdown = InCombatLockdown
|
local InCombatLockdown = InCombatLockdown
|
||||||
|
local math_abs = math.abs
|
||||||
|
local pairs = pairs
|
||||||
|
local LibStub = LibStub
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
@ -28,6 +31,8 @@ Gladdy.BUTTON_DEFAULTS = {
|
|||||||
stealthed = false,
|
stealthed = false,
|
||||||
classColors = {},
|
classColors = {},
|
||||||
lastState = 0,
|
lastState = 0,
|
||||||
|
auras = {},
|
||||||
|
lastAuras = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Gladdy:CreateFrame()
|
function Gladdy:CreateFrame()
|
||||||
@ -36,7 +41,7 @@ function Gladdy:CreateFrame()
|
|||||||
self.frame.background = CreateFrame("Frame", nil, self.frame, BackdropTemplateMixin and "BackdropTemplate")
|
self.frame.background = CreateFrame("Frame", nil, self.frame, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
self.frame.background:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = false, tileSize = 16})
|
self.frame.background:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = false, tileSize = 16})
|
||||||
self.frame.background:SetFrameStrata("BACKGROUND")
|
self.frame.background:SetFrameStrata("BACKGROUND")
|
||||||
self.frame.background:SetBackdropColor(self.db.backgroundColor.r, self.db.backgroundColor.g, self.db.backgroundColor.b, self.db.backgroundColor.a)
|
self.frame.background:SetBackdropColor(Gladdy:SetColor(self.db.backgroundColor))
|
||||||
self.frame.background:SetAllPoints(self.frame)
|
self.frame.background:SetAllPoints(self.frame)
|
||||||
--self.frame.texture = self.frame:CreateTexture(nil, "OVERLAY")
|
--self.frame.texture = self.frame:CreateTexture(nil, "OVERLAY")
|
||||||
--self.frame.texture:SetAllPoints(self.frame)
|
--self.frame.texture:SetAllPoints(self.frame)
|
||||||
@ -45,7 +50,7 @@ function Gladdy:CreateFrame()
|
|||||||
self.frame:SetClampedToScreen(true)
|
self.frame:SetClampedToScreen(true)
|
||||||
self.frame:EnableMouse(false)
|
self.frame:EnableMouse(false)
|
||||||
self.frame:SetMovable(true)
|
self.frame:SetMovable(true)
|
||||||
self.frame:RegisterForDrag("LeftButton")
|
--self.frame:RegisterForDrag("LeftButton")
|
||||||
|
|
||||||
self.frame:SetScript("OnDragStart", function(f)
|
self.frame:SetScript("OnDragStart", function(f)
|
||||||
if (not InCombatLockdown() and not self.db.locked) then
|
if (not InCombatLockdown() and not self.db.locked) then
|
||||||
@ -58,7 +63,7 @@ function Gladdy:CreateFrame()
|
|||||||
|
|
||||||
local scale = f:GetEffectiveScale()
|
local scale = f:GetEffectiveScale()
|
||||||
self.db.x = f:GetLeft() * scale
|
self.db.x = f:GetLeft() * scale
|
||||||
self.db.y = (self.db.growUp and f:GetBottom() or f:GetTop()) * scale
|
self.db.y = (self.db.growDirection == "TOP" and f:GetBottom() or f:GetTop()) * scale
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -82,7 +87,7 @@ function Gladdy:CreateFrame()
|
|||||||
|
|
||||||
local scale = self.frame:GetEffectiveScale()
|
local scale = self.frame:GetEffectiveScale()
|
||||||
self.db.x = self.frame:GetLeft() * scale
|
self.db.x = self.frame:GetLeft() * scale
|
||||||
self.db.y = (self.db.growUp and self.frame:GetBottom() or self.frame:GetTop()) * scale
|
self.db.y = (self.db.growDirection == "TOP" and self.frame:GetBottom() or self.frame:GetTop()) * scale
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
self.anchor:SetScript("OnClick", function()
|
self.anchor:SetScript("OnClick", function()
|
||||||
@ -126,96 +131,53 @@ function Gladdy:UpdateFrame()
|
|||||||
|
|
||||||
local highlightBorderSize = (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2)
|
local highlightBorderSize = (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2)
|
||||||
local powerBarHeight = self.db.powerBarEnabled and (self.db.powerBarHeight + 1) or 0
|
local powerBarHeight = self.db.powerBarEnabled and (self.db.powerBarHeight + 1) or 0
|
||||||
local leftSize = 0
|
|
||||||
local rightSize = 0
|
|
||||||
--Trinket + Racial
|
|
||||||
if self.db.trinketEnabled and self.db.trinketPos == "LEFT" then
|
|
||||||
leftSize = leftSize + self.db.trinketSize * self.db.trinketWidthFactor + self.db.padding
|
|
||||||
if self.db.racialEnabled and self.db.racialAnchor == "trinket" and self.db.racialPos == "LEFT" then
|
|
||||||
leftSize = leftSize + self.db.racialSize * self.db.racialWidthFactor + self.db.padding
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if self.db.trinketEnabled and self.db.trinketPos == "RIGHT" then
|
|
||||||
rightSize = rightSize + self.db.trinketSize * self.db.trinketWidthFactor + self.db.padding
|
|
||||||
if self.db.racialEnabled and self.db.racialAnchor == "trinket" and self.db.racialPos == "RIGHT" then
|
|
||||||
rightSize = rightSize + self.db.racialSize * self.db.racialWidthFactor + self.db.padding
|
|
||||||
end
|
|
||||||
end
|
|
||||||
--ClassIcon
|
|
||||||
if self.db.classIconPos == "LEFT" then
|
|
||||||
leftSize = leftSize + self.db.classIconSize * self.db.classIconWidthFactor + self.db.padding
|
|
||||||
else
|
|
||||||
rightSize = rightSize + self.db.classIconSize * self.db.classIconWidthFactor + self.db.padding
|
|
||||||
end
|
|
||||||
--Highlight
|
|
||||||
if not self.db.highlightInset then
|
|
||||||
leftSize = leftSize + self.db.highlightBorderSize
|
|
||||||
rightSize = rightSize + self.db.highlightBorderSize
|
|
||||||
end
|
|
||||||
|
|
||||||
local margin = powerBarHeight
|
local margin = powerBarHeight
|
||||||
local width = self.db.barWidth + leftSize + rightSize
|
|
||||||
local height = (self.db.healthBarHeight + powerBarHeight) * teamSize
|
local height = (self.db.healthBarHeight + powerBarHeight) * teamSize
|
||||||
+ (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2 * teamSize)
|
+ (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2 * teamSize)
|
||||||
+ self.db.bottomMargin * (teamSize - 1)
|
+ 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
|
-- Highlight
|
||||||
margin = margin + highlightBorderSize
|
margin = margin + highlightBorderSize
|
||||||
|
margin, height = Gladdy:LegacyPositioning(margin, height, teamSize)
|
||||||
if (self.db.cooldownYPos == "TOP" or self.db.cooldownYPos == "BOTTOM") and self.db.cooldown then
|
|
||||||
margin = margin + self.db.cooldownSize
|
|
||||||
height = height + self.db.cooldownSize * (teamSize - 1)
|
|
||||||
end
|
|
||||||
if (self.db.buffsCooldownPos == "TOP" or self.db.buffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then
|
|
||||||
margin = margin + self.db.buffsIconSize
|
|
||||||
height = height + self.db.buffsIconSize * (teamSize - 1)
|
|
||||||
end
|
|
||||||
if (self.db.buffsBuffsCooldownPos == "TOP" or self.db.buffsBuffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then
|
|
||||||
margin = margin + self.db.buffsBuffsIconSize
|
|
||||||
height = height + self.db.buffsBuffsIconSize * (teamSize - 1)
|
|
||||||
end
|
|
||||||
if self.db.buffsCooldownPos == "TOP" and self.db.cooldownYPos == "TOP" and self.db.cooldown and self.db.buffsEnabled then
|
|
||||||
margin = margin + 1
|
|
||||||
height = height + (teamSize - 1)
|
|
||||||
end
|
|
||||||
if self.db.buffsCooldownPos == "BOTTOM" and self.db.cooldownYPos == "BOTTOM" and self.db.cooldown and self.db.buffsEnabled then
|
|
||||||
margin = margin + 1
|
|
||||||
height = height + (teamSize - 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- GrowDirection
|
-- GrowDirection
|
||||||
if (self.db.growDirection == "LEFT" or self.db.growDirection == "RIGHT") then
|
if (self.db.growDirection == "LEFT" or self.db.growDirection == "RIGHT") then
|
||||||
width = self.db.barWidth * teamSize + (leftSize + rightSize) * teamSize + self.db.bottomMargin * (teamSize - 1)
|
|
||||||
height = self.db.healthBarHeight + powerBarHeight
|
height = self.db.healthBarHeight + powerBarHeight
|
||||||
end
|
end
|
||||||
|
|
||||||
self.frame:SetScale(self.db.frameScale)
|
self.frame:SetScale(self.db.frameScale)
|
||||||
self.frame:SetWidth(width)
|
self:PixelPerfectScale(false)
|
||||||
|
self.frame:SetWidth(self.db.barWidth + highlightBorderSize)
|
||||||
self.frame:SetHeight(height)
|
self.frame:SetHeight(height)
|
||||||
self.frame:ClearAllPoints()
|
self.frame:ClearAllPoints()
|
||||||
self.frame.background:SetBackdropColor(self.db.backgroundColor.r, self.db.backgroundColor.g, self.db.backgroundColor.b, self.db.backgroundColor.a)
|
self.frame.background:SetBackdropColor(Gladdy:SetColor(self.db.backgroundColor))
|
||||||
--self.frame:SetBackdropColor(self.db.frameColor.r, self.db.frameColor.g, self.db.frameColor.b, self.db.frameColor.a)
|
|
||||||
self.frame:ClearAllPoints()
|
self.frame:ClearAllPoints()
|
||||||
if (self.db.x == 0 and self.db.y == 0) then
|
if (self.db.x == 0 and self.db.y == 0) then
|
||||||
self.frame:SetPoint("CENTER")
|
self.frame:SetPoint("CENTER")
|
||||||
else
|
else
|
||||||
local scale = self.frame:GetEffectiveScale()
|
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
|
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
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
--Anchor
|
--Anchor
|
||||||
self.anchor:SetWidth(width)
|
self.anchor:SetWidth(self.db.barWidth * 2 + highlightBorderSize)
|
||||||
self.anchor:ClearAllPoints()
|
self.anchor:ClearAllPoints()
|
||||||
if (self.db.growDirection == "TOP") then
|
if (self.db.growDirection == "TOP") then
|
||||||
self.anchor:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
|
self.anchor:SetPoint("TOP", self.frame, "BOTTOM")
|
||||||
elseif self.growDirection == "BOTTOM" or self.growDirection == "RIGHT" then
|
elseif self.growDirection == "BOTTOM" or self.growDirection == "RIGHT" then
|
||||||
self.anchor:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT")
|
self.anchor:SetPoint("BOTTOM", self.frame, "TOP")
|
||||||
else
|
else
|
||||||
self.anchor:SetPoint("BOTTOMRIGHT", self.frame, "TOPRIGHT")
|
self.anchor:SetPoint("BOTTOM", self.frame, "TOP")
|
||||||
end
|
end
|
||||||
|
|
||||||
if (self.db.locked) then
|
if (self.db.locked) then
|
||||||
@ -235,7 +197,7 @@ function Gladdy:UpdateFrame()
|
|||||||
button.secure:ClearAllPoints()
|
button.secure:ClearAllPoints()
|
||||||
if (self.db.growDirection == "TOP") then
|
if (self.db.growDirection == "TOP") then
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", leftSize, powerBarHeight)
|
button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 0, powerBarHeight)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
else
|
else
|
||||||
button:SetPoint("BOTTOMLEFT", self.buttons["arena" .. (i - 1)], "TOPLEFT", 0, margin + self.db.bottomMargin)
|
button:SetPoint("BOTTOMLEFT", self.buttons["arena" .. (i - 1)], "TOPLEFT", 0, margin + self.db.bottomMargin)
|
||||||
@ -243,7 +205,7 @@ function Gladdy:UpdateFrame()
|
|||||||
end
|
end
|
||||||
elseif (self.db.growDirection == "BOTTOM") then
|
elseif (self.db.growDirection == "BOTTOM") then
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0)
|
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", 0, 0)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
else
|
else
|
||||||
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "BOTTOMLEFT", 0, -margin - self.db.bottomMargin)
|
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "BOTTOMLEFT", 0, -margin - self.db.bottomMargin)
|
||||||
@ -251,18 +213,18 @@ function Gladdy:UpdateFrame()
|
|||||||
end
|
end
|
||||||
elseif (self.db.growDirection == "LEFT") then
|
elseif (self.db.growDirection == "LEFT") then
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -rightSize, 0)
|
button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -0, 0)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
else
|
else
|
||||||
button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", -rightSize - leftSize - self.db.bottomMargin, 0)
|
button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", - self.db.bottomMargin, 0)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
end
|
end
|
||||||
elseif (self.db.growDirection == "RIGHT") then
|
elseif (self.db.growDirection == "RIGHT") then
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0)
|
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", 0, 0)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
else
|
else
|
||||||
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", leftSize + rightSize + self.db.bottomMargin, 0)
|
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", self.db.bottomMargin, 0)
|
||||||
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -286,6 +248,27 @@ function Gladdy:UpdateFrame()
|
|||||||
elseif Gladdy.db.hideBlizzard == "never" then
|
elseif Gladdy.db.hideBlizzard == "never" then
|
||||||
Gladdy:BlizzArenaSetAlpha(1)
|
Gladdy:BlizzArenaSetAlpha(1)
|
||||||
end
|
end
|
||||||
|
if (not Gladdy.db.newLayout) then
|
||||||
|
Gladdy.db.newLayout = true
|
||||||
|
--get margin
|
||||||
|
local arena1Bottom
|
||||||
|
local arena2Top
|
||||||
|
if (self.db.growDirection == "BOTTOM") then
|
||||||
|
arena1Bottom = self.buttons["arena1"].secure:GetBottom()
|
||||||
|
arena2Top = self.buttons["arena2"].secure:GetTop()
|
||||||
|
elseif (self.db.growDirection == "TOP") then
|
||||||
|
arena1Bottom = self.buttons["arena1"].secure:GetTop()
|
||||||
|
arena2Top = self.buttons["arena2"].secure:GetBottom()
|
||||||
|
elseif (self.db.growDirection == "LEFT") then
|
||||||
|
arena1Bottom = self.buttons["arena1"].secure:GetLeft()
|
||||||
|
arena2Top = self.buttons["arena2"].secure:GetRight()
|
||||||
|
elseif (self.db.growDirection == "RIGHT") then
|
||||||
|
arena1Bottom = self.buttons["arena1"].secure:GetRight()
|
||||||
|
arena2Top = self.buttons["arena2"].secure:GetLeft()
|
||||||
|
end
|
||||||
|
Gladdy.db.bottomMargin = math_abs(arena1Bottom - arena2Top)
|
||||||
|
Gladdy:UpdateFrame()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:HideFrame()
|
function Gladdy:HideFrame()
|
||||||
@ -294,6 +277,7 @@ function Gladdy:HideFrame()
|
|||||||
self.startTest = nil
|
self.startTest = nil
|
||||||
self.hideFrame = true
|
self.hideFrame = true
|
||||||
else
|
else
|
||||||
|
self:Reset()
|
||||||
self.frame:Hide()
|
self.frame:Hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -304,6 +288,7 @@ end
|
|||||||
function Gladdy:ToggleFrame(i)
|
function Gladdy:ToggleFrame(i)
|
||||||
self:Reset()
|
self:Reset()
|
||||||
if (self.frame and self.frame:IsShown() and i == self.curBracket) then
|
if (self.frame and self.frame:IsShown() and i == self.curBracket) then
|
||||||
|
self.frame.testing = nil
|
||||||
self:HideFrame()
|
self:HideFrame()
|
||||||
else
|
else
|
||||||
self.curBracket = i
|
self.curBracket = i
|
||||||
@ -311,6 +296,7 @@ function Gladdy:ToggleFrame(i)
|
|||||||
if (not self.frame) then
|
if (not self.frame) then
|
||||||
self:CreateFrame()
|
self:CreateFrame()
|
||||||
end
|
end
|
||||||
|
self.frame.testing = true
|
||||||
|
|
||||||
for o = 1, self.curBracket do
|
for o = 1, self.curBracket do
|
||||||
local unit = "arena" .. o
|
local unit = "arena" .. o
|
||||||
@ -378,6 +364,188 @@ function Gladdy:CreateButton(i)
|
|||||||
self:ResetButton("arena" .. i)
|
self:ResetButton("arena" .. i)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function Gladdy:SetPosition(frame, unit, xOffsetDB, yOffsetDB, newLayout, module)
|
||||||
|
local button = self.buttons[unit]
|
||||||
|
if not button or not frame or not xOffsetDB or not yOffsetDB then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
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)
|
||||||
|
frame:ClearAllPoints()
|
||||||
|
frame:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", newXOffset, newYOffset)
|
||||||
|
--Gladdy:Debug("INFO", name, "new X/Y:", frame:GetCenter())
|
||||||
|
if unit == "arena1" then
|
||||||
|
Gladdy.db[xOffsetDB] = newXOffset
|
||||||
|
Gladdy.db[yOffsetDB] = newYOffset
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
frame:ClearAllPoints()
|
||||||
|
frame:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", Gladdy.db[xOffsetDB], Gladdy.db[yOffsetDB])
|
||||||
|
end
|
||||||
|
if (self.newDefaults[module.name]) then
|
||||||
|
for k,v in pairs(self.newDefaults[module.name]) do
|
||||||
|
module.defaults[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:CreateMover(frame, xConfig, yConfig, name, points, width, height, xOffset, yOffset, activated)
|
||||||
|
if not frame.mover then
|
||||||
|
frame:EnableMouse(false)
|
||||||
|
frame:SetMovable(true)
|
||||||
|
frame.mover = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
|
frame.mover:SetFrameStrata("TOOLTIP")
|
||||||
|
frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0)
|
||||||
|
frame.mover:SetHeight(height or frame:GetHeight())
|
||||||
|
frame.mover:SetWidth(width or frame:GetWidth())
|
||||||
|
|
||||||
|
local backdrop = {
|
||||||
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
||||||
|
edgeFile = "",
|
||||||
|
tile = true, tileSize = 16, edgeSize = 10,
|
||||||
|
insets = {left = 0, right = 0, top = 0, bottom = 0}
|
||||||
|
}
|
||||||
|
frame.mover:SetBackdrop(backdrop)
|
||||||
|
frame.mover:SetBackdropColor(0,1,0,0.5)
|
||||||
|
frame.mover.border = CreateFrame("Frame", nil, frame.mover, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
|
frame.mover.border:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = 2 })
|
||||||
|
frame.mover.border:SetAllPoints(frame.mover)
|
||||||
|
frame.mover.border:SetBackdropBorderColor(0,1,0,1)
|
||||||
|
frame.mover.border:SetFrameStrata("TOOLTIP")
|
||||||
|
|
||||||
|
frame.mover.text = frame.mover.border:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
||||||
|
frame.mover.text:SetText(name)
|
||||||
|
frame.mover.text:SetPoint("CENTER")
|
||||||
|
|
||||||
|
frame.mover:SetMovable(true)
|
||||||
|
frame.mover:EnableMouse(true)
|
||||||
|
|
||||||
|
frame.mover:SetScript("OnMouseDown", function(self)
|
||||||
|
self.point = { frame:GetPoint() }
|
||||||
|
self.start = { frame:GetCenter() }
|
||||||
|
frame:StartMoving()
|
||||||
|
self:StartMoving()
|
||||||
|
end)
|
||||||
|
frame.mover:SetScript("OnMouseUp", function(self)
|
||||||
|
frame:StopMovingOrSizing()
|
||||||
|
self:StopMovingOrSizing()
|
||||||
|
self.stop = { frame:GetCenter() }
|
||||||
|
local diffX = math_abs(self.start[1] - self.stop[1])
|
||||||
|
diffX = self.start[1] > self.stop[1] and -diffX or diffX
|
||||||
|
local diffY = math_abs(self.start[2] - self.stop[2])
|
||||||
|
diffY = self.start[2] > self.stop[2] and -diffY or diffY
|
||||||
|
frame:ClearAllPoints()
|
||||||
|
frame:SetPoint(self.point[1], self.point[2], self.point[3], self.point[4] + diffX, self.point[5] + diffY)
|
||||||
|
Gladdy.db[xConfig] = self.point[4] + diffX
|
||||||
|
Gladdy.db[yConfig] = self.point[5] + diffY
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
|
Gladdy:UpdateFrame()
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
frame.mover:ClearAllPoints()
|
||||||
|
frame.mover:SetPoint(points[1], frame, points[2], xOffset or 0, yOffset or 0)
|
||||||
|
frame.mover:SetHeight(height or frame:GetHeight())
|
||||||
|
frame.mover:SetWidth(width or frame:GetWidth())
|
||||||
|
end
|
||||||
|
if self.frame and self.frame.testing and self.db.showMover then
|
||||||
|
if (activated ~= nil and not Gladdy.db[activated]) then
|
||||||
|
frame.mover:Hide()
|
||||||
|
else
|
||||||
|
frame.mover:Show()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
frame.mover:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY SUPPORT
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Gladdy:LegacyPositioning(margin, height, teamSize)
|
||||||
|
if not Gladdy.db.newLayout then
|
||||||
|
for k,v in pairs(Gladdy.legacy) do
|
||||||
|
if Gladdy.db[k] == nil then
|
||||||
|
Gladdy:Debug("INFO", "Gladdy:LegacyPositioning write", k,v)
|
||||||
|
Gladdy.db[k] = v
|
||||||
|
else
|
||||||
|
Gladdy:Debug("INFO", "Gladdy:LegacyPositioning found", k,v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (self.db.cooldownYPos == "TOP" or self.db.cooldownYPos == "BOTTOM") and self.db.cooldown then
|
||||||
|
margin = margin + self.db.cooldownSize
|
||||||
|
height = height + self.db.cooldownSize * (teamSize - 1)
|
||||||
|
end
|
||||||
|
if (self.db.buffsCooldownPos == "TOP" or self.db.buffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then
|
||||||
|
margin = margin + self.db.buffsIconSize
|
||||||
|
height = height + self.db.buffsIconSize * (teamSize - 1)
|
||||||
|
end
|
||||||
|
if (self.db.buffsBuffsCooldownPos == "TOP" or self.db.buffsBuffsCooldownPos == "BOTTOM") and self.db.buffsEnabled then
|
||||||
|
margin = margin + self.db.buffsBuffsIconSize
|
||||||
|
height = height + self.db.buffsBuffsIconSize * (teamSize - 1)
|
||||||
|
end
|
||||||
|
if self.db.buffsCooldownPos == "TOP" and self.db.cooldownYPos == "TOP" and self.db.cooldown and self.db.buffsEnabled then
|
||||||
|
margin = margin + 1
|
||||||
|
height = height + (teamSize - 1)
|
||||||
|
end
|
||||||
|
if self.db.buffsCooldownPos == "BOTTOM" and self.db.cooldownYPos == "BOTTOM" and self.db.cooldown and self.db.buffsEnabled then
|
||||||
|
margin = margin + 1
|
||||||
|
height = height + (teamSize - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return margin, height
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:PositionButton(button, i, leftSize, rightSize, powerBarHeight, margin)
|
||||||
|
if (self.db.growDirection == "TOP") then
|
||||||
|
if (i == 1) then
|
||||||
|
button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", leftSize, powerBarHeight)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
else
|
||||||
|
button:SetPoint("BOTTOMLEFT", self.buttons["arena" .. (i - 1)], "TOPLEFT", 0, margin + self.db.bottomMargin)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
end
|
||||||
|
elseif (self.db.growDirection == "BOTTOM") then
|
||||||
|
if (i == 1) then
|
||||||
|
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
else
|
||||||
|
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "BOTTOMLEFT", 0, -margin - self.db.bottomMargin)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
end
|
||||||
|
elseif (self.db.growDirection == "LEFT") then
|
||||||
|
if (i == 1) then
|
||||||
|
button:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -rightSize, 0)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
else
|
||||||
|
button:SetPoint("TOPRIGHT", self.buttons["arena" .. (i - 1)], "TOPLEFT", -rightSize - leftSize - self.db.bottomMargin, 0)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
end
|
||||||
|
elseif (self.db.growDirection == "RIGHT") then
|
||||||
|
if (i == 1) then
|
||||||
|
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", leftSize, 0)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
else
|
||||||
|
button:SetPoint("TOPLEFT", self.buttons["arena" .. (i - 1)], "TOPRIGHT", leftSize + rightSize + self.db.bottomMargin, 0)
|
||||||
|
button.secure:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Gladdy:GetAnchor(unit, position)
|
function Gladdy:GetAnchor(unit, position)
|
||||||
local anchor = "healthBar"
|
local anchor = "healthBar"
|
||||||
if Gladdy.db.classIconPos == position then
|
if Gladdy.db.classIconPos == position then
|
||||||
|
196
Gladdy.lua
196
Gladdy.lua
@ -5,16 +5,20 @@ local select = select
|
|||||||
local pairs = pairs
|
local pairs = pairs
|
||||||
local tinsert = table.insert
|
local tinsert = table.insert
|
||||||
local tsort = table.sort
|
local tsort = table.sort
|
||||||
|
local str_lower = string.lower
|
||||||
local GetTime = GetTime
|
local GetTime = GetTime
|
||||||
|
local GetPhysicalScreenSize = GetPhysicalScreenSize
|
||||||
|
local InCombatLockdown = InCombatLockdown
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
|
local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
|
||||||
local IsAddOnLoaded = IsAddOnLoaded
|
local IsAddOnLoaded = IsAddOnLoaded
|
||||||
local IsInInstance = IsInInstance
|
|
||||||
local GetBattlefieldStatus = GetBattlefieldStatus
|
local GetBattlefieldStatus = GetBattlefieldStatus
|
||||||
local IsActiveBattlefieldArena = IsActiveBattlefieldArena
|
local IsInInstance = IsInInstance
|
||||||
|
local GetNumArenaOpponents = GetNumArenaOpponents
|
||||||
local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"}
|
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 VERSION_REGEX = PREFIX .. "(%d+%.%d+)%-(%a)"
|
||||||
|
local LibStub = LibStub
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
@ -22,16 +26,18 @@ local VERSION_REGEX = PREFIX .. "(%d+%.%d+)%-(%a)"
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
local MAJOR, MINOR = "Gladdy", 4
|
local MAJOR, MINOR = "Gladdy", 15
|
||||||
local Gladdy = LibStub:NewLibrary(MAJOR, MINOR)
|
local Gladdy = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
local L
|
local L
|
||||||
Gladdy.version_major_num = 1
|
Gladdy.version_major_num = 2
|
||||||
Gladdy.version_minor_num = 0.22
|
Gladdy.version_minor_num = 0.27
|
||||||
Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num
|
Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num
|
||||||
Gladdy.version_releaseType = RELEASE_TYPES.release
|
Gladdy.version_releaseType = RELEASE_TYPES.release
|
||||||
Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
Gladdy.version = PREFIX .. string.format("%.2f", Gladdy.version_num) .. "-" .. Gladdy.version_releaseType
|
||||||
Gladdy.VERSION_REGEX = VERSION_REGEX
|
Gladdy.VERSION_REGEX = VERSION_REGEX
|
||||||
|
|
||||||
|
Gladdy.debug = false
|
||||||
|
|
||||||
LibStub("AceTimer-3.0"):Embed(Gladdy)
|
LibStub("AceTimer-3.0"):Embed(Gladdy)
|
||||||
LibStub("AceComm-3.0"):Embed(Gladdy)
|
LibStub("AceComm-3.0"):Embed(Gladdy)
|
||||||
Gladdy.modules = {}
|
Gladdy.modules = {}
|
||||||
@ -53,6 +59,17 @@ function Gladdy:Print(...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:Warn(...)
|
function Gladdy:Warn(...)
|
||||||
|
local text = "|cfff29f05Gladdy|r:"
|
||||||
|
local val
|
||||||
|
for i = 1, select("#", ...) do
|
||||||
|
val = select(i, ...)
|
||||||
|
if (type(val) == 'boolean') then val = val and "true" or false end
|
||||||
|
text = text .. " " .. tostring(val)
|
||||||
|
end
|
||||||
|
DEFAULT_CHAT_FRAME:AddMessage(text)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:Error(...)
|
||||||
local text = "|cfffc0303Gladdy|r:"
|
local text = "|cfffc0303Gladdy|r:"
|
||||||
local val
|
local val
|
||||||
for i = 1, select("#", ...) do
|
for i = 1, select("#", ...) do
|
||||||
@ -63,13 +80,38 @@ function Gladdy:Warn(...)
|
|||||||
DEFAULT_CHAT_FRAME:AddMessage(text)
|
DEFAULT_CHAT_FRAME:AddMessage(text)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Gladdy:Debug(lvl, ...)
|
||||||
|
if Gladdy.debug then
|
||||||
|
if lvl == "INFO" then
|
||||||
|
Gladdy:Print("[INFO]", ...)
|
||||||
|
elseif lvl == "WARN" then
|
||||||
|
Gladdy:Warn("[WARN]", ...)
|
||||||
|
elseif lvl == "ERROR" then
|
||||||
|
Gladdy:Error("[ERROR]", ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Gladdy.events = CreateFrame("Frame")
|
Gladdy.events = CreateFrame("Frame")
|
||||||
Gladdy.events.registered = {}
|
Gladdy.events.registered = {}
|
||||||
Gladdy.events:RegisterEvent("PLAYER_LOGIN")
|
Gladdy.events:RegisterEvent("PLAYER_LOGIN")
|
||||||
|
Gladdy.events:RegisterEvent("PLAYER_LOGOUT")
|
||||||
|
Gladdy.events:RegisterEvent("CVAR_UPDATE")
|
||||||
|
hooksecurefunc("VideoOptionsFrameOkay_OnClick", function(self, button, down, apply)
|
||||||
|
if (self:GetName() == "VideoOptionsFrameApply") then
|
||||||
|
Gladdy:PixelPerfectScale(true)
|
||||||
|
end
|
||||||
|
end)
|
||||||
Gladdy.events:SetScript("OnEvent", function(self, event, ...)
|
Gladdy.events:SetScript("OnEvent", function(self, event, ...)
|
||||||
if (event == "PLAYER_LOGIN") then
|
if (event == "PLAYER_LOGIN") then
|
||||||
Gladdy:OnInitialize()
|
Gladdy:OnInitialize()
|
||||||
Gladdy:OnEnable()
|
Gladdy:OnEnable()
|
||||||
|
elseif (event == "CVAR_UPDATE") then
|
||||||
|
if (str_lower(select(1, ...)) == "uiscale") then
|
||||||
|
Gladdy:PixelPerfectScale(true)
|
||||||
|
end
|
||||||
|
elseif (event == "PLAYER_LOGOUT") then
|
||||||
|
Gladdy:DeleteUnknownOptions(Gladdy.db, Gladdy.defaults.profile)
|
||||||
else
|
else
|
||||||
local func = self.registered[event]
|
local func = self.registered[event]
|
||||||
|
|
||||||
@ -144,10 +186,32 @@ function Gladdy:NewModule(name, priority, defaults)
|
|||||||
module.defaults = defaults or {}
|
module.defaults = defaults or {}
|
||||||
module.messages = {}
|
module.messages = {}
|
||||||
|
|
||||||
|
module.RegisterMessages = function(self, ...)
|
||||||
|
for _,message in pairs({...}) do
|
||||||
|
self.messages[message] = message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module.RegisterMessage = function(self, message, func)
|
module.RegisterMessage = function(self, message, func)
|
||||||
self.messages[message] = func or message
|
self.messages[message] = func or message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module.UnregisterMessage = function(self, message)
|
||||||
|
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
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module.GetOptions = function()
|
module.GetOptions = function()
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -173,11 +237,11 @@ function Gladdy:DeleteUnknownOptions(tbl, refTbl, str)
|
|||||||
end
|
end
|
||||||
for k,v in pairs(tbl) do
|
for k,v in pairs(tbl) do
|
||||||
if refTbl[k] == nil then
|
if refTbl[k] == nil then
|
||||||
--Gladdy:Print("SavedVariable deleted:", str .. "." .. k, "not found!")
|
Gladdy:Debug("INFO", "SavedVariable deleted:", str .. "." .. k, "not found!")
|
||||||
tbl[k] = nil
|
tbl[k] = nil
|
||||||
else
|
else
|
||||||
if type(v) ~= type(refTbl[k]) then
|
if type(v) ~= type(refTbl[k]) then
|
||||||
--Gladdy:Print("SavedVariable deleted:", str .. "." .. k, "type error!", "Expected", type(refTbl[k]), "but found", type(v))
|
Gladdy:Debug("INFO", "SavedVariable deleted:", str .. "." .. k, "type error!", "Expected", type(refTbl[k]), "but found", type(v))
|
||||||
tbl[k] = nil
|
tbl[k] = nil
|
||||||
elseif type(v) == "table" then
|
elseif type(v) == "table" then
|
||||||
Gladdy:DeleteUnknownOptions(v, refTbl[k], str .. "." .. k)
|
Gladdy:DeleteUnknownOptions(v, refTbl[k], str .. "." .. k)
|
||||||
@ -186,11 +250,28 @@ function Gladdy:DeleteUnknownOptions(tbl, refTbl, str)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Gladdy:PixelPerfectScale(update)
|
||||||
|
local physicalWidth, physicalHeight = GetPhysicalScreenSize()
|
||||||
|
local perfectUIScale = 768.0/physicalHeight--768/select(2, strsplit("x",({ GetScreenResolutions()})[GetCurrentResolution()]))
|
||||||
|
if self.db and self.db.pixelPerfect and self.frame then
|
||||||
|
self.frame:SetIgnoreParentScale(true)
|
||||||
|
self.frame:SetScale(perfectUIScale)
|
||||||
|
--local adaptiveScale = (GetCVar("useUiScale") == "1" and 1.0 + perfectUIScale - GetCVar("UIScale") or perfectUIScale)
|
||||||
|
--self.frame:SetScale(adaptiveScale)
|
||||||
|
if update then
|
||||||
|
self:UpdateFrame()
|
||||||
|
end
|
||||||
|
elseif self.frame then
|
||||||
|
self.frame:SetScale(self.db.frameScale)
|
||||||
|
self.frame:SetIgnoreParentScale(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Gladdy:OnInitialize()
|
function Gladdy:OnInitialize()
|
||||||
self.dbi = LibStub("AceDB-3.0"):New("GladdyXZ", self.defaults)
|
self.dbi = LibStub("AceDB-3.0"):New("GladdyXZ", self.defaults)
|
||||||
self.dbi.RegisterCallback(self, "OnProfileChanged", "OnProfileChanged")
|
self.dbi.RegisterCallback(self, "OnProfileChanged", "OnProfileChanged")
|
||||||
self.dbi.RegisterCallback(self, "OnProfileCopied", "OnProfileChanged")
|
self.dbi.RegisterCallback(self, "OnProfileCopied", "OnProfileChanged")
|
||||||
self.dbi.RegisterCallback(self, "OnProfileReset", "OnProfileChanged")
|
self.dbi.RegisterCallback(self, "OnProfileReset", "OnProfileReset")
|
||||||
self.db = self.dbi.profile
|
self.db = self.dbi.profile
|
||||||
|
|
||||||
self.LSM = LibStub("LibSharedMedia-3.0")
|
self.LSM = LibStub("LibSharedMedia-3.0")
|
||||||
@ -198,6 +279,7 @@ function Gladdy:OnInitialize()
|
|||||||
self.LSM:Register("statusbar", "Smooth", "Interface\\AddOns\\Gladdy\\Images\\Smooth")
|
self.LSM:Register("statusbar", "Smooth", "Interface\\AddOns\\Gladdy\\Images\\Smooth")
|
||||||
self.LSM:Register("statusbar", "Minimalist", "Interface\\AddOns\\Gladdy\\Images\\Minimalist")
|
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", "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 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("border", "Gladdy Tooltip squared", "Interface\\AddOns\\Gladdy\\Images\\UI-Tooltip-Border_square_selfmade")
|
||||||
self.LSM:Register("font", "DorisPP", "Interface\\AddOns\\Gladdy\\Images\\DorisPP.TTF")
|
self.LSM:Register("font", "DorisPP", "Interface\\AddOns\\Gladdy\\Images\\DorisPP.TTF")
|
||||||
@ -206,11 +288,11 @@ function Gladdy:OnInitialize()
|
|||||||
L = self.L
|
L = self.L
|
||||||
|
|
||||||
self.testData = {
|
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" },
|
["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 = 10969, healthMax = 11023, power = 7833, powerMax = 10460, powerType = 0, testSpec = L["Frost"], race = "Scourge" },
|
["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 = 1592, healthMax = 11740, power = 45, powerMax = 110, powerType = 3, testSpec = L["Subtlety"], race = "Human" },
|
["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 = 10221, healthMax = 14960, power = 9855, powerMax = 9855, powerType = 0, testSpec = L["Demonology"], 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 = 11960, healthMax = 11960, power = 2515, powerMax = 10240, powerType = 0, testSpec = L["Discipline"], 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 = {}
|
self.cooldownSpellIds = {}
|
||||||
@ -221,25 +303,38 @@ function Gladdy:OnInitialize()
|
|||||||
self.guids = {}
|
self.guids = {}
|
||||||
self.curBracket = nil
|
self.curBracket = nil
|
||||||
self.curUnit = 1
|
self.curUnit = 1
|
||||||
self.lastInstance = nil
|
|
||||||
|
|
||||||
self:SetupOptions()
|
self:SetupOptions()
|
||||||
|
|
||||||
for _, module in self:IterModules() do
|
for _, module in self:IterModules() do
|
||||||
self:Call(module, "Initialize") -- B.E > A.E :D
|
self:Call(module, "Initialize") -- B.E > A.E :D
|
||||||
end
|
end
|
||||||
self:DeleteUnknownOptions(self.db, self.defaults.profile)
|
|
||||||
if Gladdy.db.hideBlizzard == "always" then
|
if Gladdy.db.hideBlizzard == "always" then
|
||||||
Gladdy:BlizzArenaSetAlpha(0)
|
Gladdy:BlizzArenaSetAlpha(0)
|
||||||
end
|
end
|
||||||
|
if not self.db.newLayout then
|
||||||
|
self:ToggleFrame(3)
|
||||||
|
self:HideFrame()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:OnProfileReset()
|
||||||
|
self.db = self.dbi.profile
|
||||||
|
Gladdy:Debug("INFO", "OnProfileReset")
|
||||||
|
self:HideFrame()
|
||||||
|
self:ToggleFrame(3)
|
||||||
|
Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"]
|
||||||
|
Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"]
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:OnProfileChanged()
|
function Gladdy:OnProfileChanged()
|
||||||
self.db = self.dbi.profile
|
self.db = self.dbi.profile
|
||||||
self:DeleteUnknownOptions(self.db, self.defaults.profile)
|
|
||||||
|
|
||||||
self:HideFrame()
|
self:HideFrame()
|
||||||
self:ToggleFrame(3)
|
self:ToggleFrame(3)
|
||||||
|
Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"]
|
||||||
|
Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"]
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:OnEnable()
|
function Gladdy:OnEnable()
|
||||||
@ -311,6 +406,9 @@ function Gladdy:Test()
|
|||||||
|
|
||||||
button:SetAlpha(1)
|
button:SetAlpha(1)
|
||||||
end
|
end
|
||||||
|
for _, module in self:IterModules() do
|
||||||
|
self:Call(module, "TestOnce")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -325,35 +423,31 @@ function Gladdy:PLAYER_ENTERING_WORLD()
|
|||||||
LibStub("AceConfigDialog-3.0"):Open("Gladdy", nil, LibStub("AceConfigDialog-3.0"):SelectGroup("Gladdy", "XiconProfiles"))
|
LibStub("AceConfigDialog-3.0"):Open("Gladdy", nil, LibStub("AceConfigDialog-3.0"):SelectGroup("Gladdy", "XiconProfiles"))
|
||||||
self.showConfig = nil
|
self.showConfig = nil
|
||||||
end
|
end
|
||||||
local instance = select(2, IsInInstance())
|
if (self.frame and self.frame:IsVisible()) then
|
||||||
if (instance ~= "arena" and self.frame and self.frame:IsVisible() and not self.frame.testing) then
|
|
||||||
self:Reset()
|
self:Reset()
|
||||||
self:HideFrame()
|
self:HideFrame()
|
||||||
end
|
end
|
||||||
if (instance == "arena") then
|
|
||||||
self:Reset()
|
|
||||||
self:HideFrame()
|
|
||||||
end
|
|
||||||
self.lastInstance = instance
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index)
|
function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index)
|
||||||
local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, isRankedArena, suspendedQueue, bool, queueType = GetBattlefieldStatus(index)
|
local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, isRankedArena, suspendedQueue, bool, queueType = GetBattlefieldStatus(index)
|
||||||
if (status == "active" and teamSize > 0 and IsActiveBattlefieldArena()) then
|
local instanceType = select(2, IsInInstance())
|
||||||
|
self:Debug("INFO", "UPDATE_BATTLEFIELD_STATUS", instanceType, status, teamSize)
|
||||||
|
if ((instanceType == "arena" or GetNumArenaOpponents() > 0) and status == "active" and teamSize > 0) then
|
||||||
self.curBracket = teamSize
|
self.curBracket = teamSize
|
||||||
self:JoinedArena()
|
self:JoinedArena()
|
||||||
|
elseif status == "active" then
|
||||||
|
if self.db.hideBlizzard == "always" then
|
||||||
|
self:BlizzArenaSetAlpha(0)
|
||||||
|
else
|
||||||
|
self:BlizzArenaSetAlpha(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:PLAYER_REGEN_ENABLED()
|
function Gladdy:PLAYER_REGEN_ENABLED()
|
||||||
if self.showFrame then
|
if self.showFrame then
|
||||||
self:UpdateFrame()
|
self:InitFrames()
|
||||||
if self.startTest then
|
|
||||||
self:Test()
|
|
||||||
self.startTest = nil
|
|
||||||
end
|
|
||||||
self.frame:Show()
|
|
||||||
self.showFrame = nil
|
|
||||||
end
|
end
|
||||||
if self.hideFrame then
|
if self.hideFrame then
|
||||||
self:Reset()
|
self:Reset()
|
||||||
@ -385,8 +479,8 @@ function Gladdy:Reset()
|
|||||||
for unit in pairs(self.buttons) do
|
for unit in pairs(self.buttons) do
|
||||||
self:ResetUnit(unit)
|
self:ResetUnit(unit)
|
||||||
end
|
end
|
||||||
if Gladdy.db.hideBlizzard == "never" or Gladdy.db.hideBlizzard == "arena" then
|
if self.db.hideBlizzard == "never" or self.db.hideBlizzard == "arena" then
|
||||||
Gladdy:BlizzArenaSetAlpha(1)
|
self:BlizzArenaSetAlpha(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -429,6 +523,16 @@ end
|
|||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
function Gladdy:JoinedArena()
|
function Gladdy:JoinedArena()
|
||||||
|
if InCombatLockdown() then
|
||||||
|
self:Print("Gladdy frames show as soon as you leave combat")
|
||||||
|
self.showFrame = true
|
||||||
|
else
|
||||||
|
self:InitFrames()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:InitFrames()
|
||||||
|
self.showFrame = nil
|
||||||
if not self.curBracket then
|
if not self.curBracket then
|
||||||
self.curBracket = 2
|
self.curBracket = 2
|
||||||
end
|
end
|
||||||
@ -439,19 +543,21 @@ function Gladdy:JoinedArena()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self:SendMessage("JOINED_ARENA")
|
self:UpdateFrame()
|
||||||
if InCombatLockdown() then
|
if self.startTest then
|
||||||
Gladdy:Print("Gladdy frames show as soon as you leave combat")
|
self:Test()
|
||||||
self.showFrame = true
|
self.startTest = nil
|
||||||
else
|
|
||||||
self:UpdateFrame()
|
|
||||||
self.frame:Show()
|
|
||||||
end
|
end
|
||||||
|
self.frame:Show()
|
||||||
|
self:SendMessage("JOINED_ARENA")
|
||||||
|
|
||||||
for i=1, self.curBracket do
|
for i=1, self.curBracket do
|
||||||
self.buttons["arena" .. i]:SetAlpha(1)
|
self.buttons["arena" .. i]:SetAlpha(1)
|
||||||
end
|
end
|
||||||
if Gladdy.db.hideBlizzard == "arena" or Gladdy.db.hideBlizzard == "always" then
|
if self.db.hideBlizzard == "arena" or self.db.hideBlizzard == "always" then
|
||||||
Gladdy:BlizzArenaSetAlpha(0)
|
self:BlizzArenaSetAlpha(0)
|
||||||
|
else
|
||||||
|
self:BlizzArenaSetAlpha(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
45
Gladdy.toc
45
Gladdy.toc
@ -1,41 +1,8 @@
|
|||||||
## Interface: 20502
|
## Title: Gladdy |cFFFF0000 game client not supported|r
|
||||||
## Title: Gladdy - TBC
|
## Version: 2.27-Release
|
||||||
## Version: 1.22-Release
|
## Notes: The most powerful arena AddOn for WoW Classic TBC/WotLK
|
||||||
## Notes: The most powerful arena AddOn for WoW 2.5.1
|
|
||||||
## Author: XiconQoo, DnB_Junkee, Knall
|
## Author: XiconQoo, DnB_Junkee, Knall
|
||||||
## X-Email: contact me on discord Knall#1751
|
## X-Email: contact me on discord Knall#1751
|
||||||
## SavedVariables: GladdyXZ
|
## X-Curse-Project-ID: 482332
|
||||||
## OptionalDeps: SharedMedia, Blizzard_CombatLog, Blizzard_ArenaUI, Blizzard_CombatText
|
## X-WoWI-ID: 26350
|
||||||
|
## Notes: Gladdy only supports Classic TBC and Classic WotLK.
|
||||||
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
|
|
46
Gladdy_BCC.toc
Normal file
46
Gladdy_BCC.toc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
## Interface: 20504
|
||||||
|
## Title: Gladdy - TBC
|
||||||
|
## Version: 2.27-Release
|
||||||
|
## 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
|
||||||
|
Util.lua
|
||||||
|
Frame.lua
|
||||||
|
Options.lua
|
||||||
|
Constants_shared.lua
|
||||||
|
Constants_BCC.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\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
|
46
Gladdy_Wrath.toc
Normal file
46
Gladdy_Wrath.toc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
## Interface: 30402
|
||||||
|
## Title: Gladdy - WotLK
|
||||||
|
## Version: 2.27-Release
|
||||||
|
## Notes: The most powerful arena AddOn for WoW 3.4.2
|
||||||
|
## 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
|
||||||
|
Util.lua
|
||||||
|
Frame.lua
|
||||||
|
Options.lua
|
||||||
|
Constants_shared.lua
|
||||||
|
Constants_Wrath.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\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
|
BIN
Images/BasicProfiles/Mir1_edited.blp
Normal file
BIN
Images/BasicProfiles/Mir1_edited.blp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Images/UI-StatusBar.blp
Normal file
BIN
Images/UI-StatusBar.blp
Normal file
Binary file not shown.
BIN
Images/castbar-shield.blp
Normal file
BIN
Images/castbar-shield.blp
Normal file
Binary file not shown.
BIN
Images/downarrow.blp
Normal file
BIN
Images/downarrow.blp
Normal file
Binary file not shown.
BIN
Images/trinket.blp
Normal file
BIN
Images/trinket.blp
Normal file
Binary file not shown.
BIN
Images/uparrow.blp
Normal file
BIN
Images/uparrow.blp
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
810
Lang.lua
810
Lang.lua
@ -7,6 +7,7 @@ local L = {}
|
|||||||
|
|
||||||
-- Classes
|
-- Classes
|
||||||
L["Druid"] = C_CreatureInfo.GetClassInfo(11).className
|
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["Hunter"] = C_CreatureInfo.GetClassInfo(3).className
|
||||||
L["Mage"] = C_CreatureInfo.GetClassInfo(8).className
|
L["Mage"] = C_CreatureInfo.GetClassInfo(8).className
|
||||||
L["Paladin"] = C_CreatureInfo.GetClassInfo(2).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["Blood Elf"] = C_CreatureInfo.GetRaceInfo(10).raceName
|
||||||
L["Draenei"] = C_CreatureInfo.GetRaceInfo(11).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
|
if (GetLocale() == "ruRU") then
|
||||||
-- Specs
|
-- Specs
|
||||||
L["Balance"] = "Баланс"
|
L["Balance"] = "Баланс"
|
||||||
@ -985,6 +1014,787 @@ elseif GetLocale() == "zhTW" then
|
|||||||
L["Background Color of the frame"] = "框架的背景顏色"
|
L["Background Color of the frame"] = "框架的背景顏色"
|
||||||
|
|
||||||
L["Gladdy"] = "Gladdy目標框架" --Line 210, 709, 727
|
L["Gladdy"] = "Gladdy目標框架" --Line 210, 709, 727
|
||||||
|
elseif GetLocale() == "zhCN" then
|
||||||
|
-- Announcements.lua
|
||||||
|
L["Announcements"] = "通知"
|
||||||
|
L["RESURRECTING: %s (%s)"] = "复活: %s (%s) "
|
||||||
|
L["SPEC DETECTED: %s - %s (%s)"] = "敌方天赋: %s - %s (%s)"
|
||||||
|
L["LOW HEALTH: %s (%s)"] = "低生命值: %s (%s)"
|
||||||
|
L["TRINKET USED: %s (%s)"] = "饰品已使用: %s (%s)"
|
||||||
|
L["TRINKET READY: %s (%s)"] = "饰品就绪: %s (%s)"
|
||||||
|
L["DRINKING: %s (%s)"] = "正在喝水: %s (%s)"
|
||||||
|
L["Self"] = "玩家"
|
||||||
|
L["Party"] = "队伍"
|
||||||
|
L["Raid Warning"] = "团队警告"
|
||||||
|
L["Blizzard's Floating Combat Text"] = "Blizzard 战斗浮动文字"
|
||||||
|
L["Trinket used"] = "饰品已使用"
|
||||||
|
L["Announce when an enemy's trinket is used"] = "当敌方使用饰品时发出通知"
|
||||||
|
L["Trinket ready"] = "饰品就緒"
|
||||||
|
L["Announce when an enemy's trinket is ready again"] = "当敌方饰品就绪时发出通报"
|
||||||
|
L["Drinking"] = "正在喝水"
|
||||||
|
L["Announces when enemies sit down to drink"] = "当敌方喝水时发出通报"
|
||||||
|
L["Resurrection"] = "复活"
|
||||||
|
L["Announces when an enemy tries to resurrect a teammate"] = "当敌方尝试复活队友时发出通报"
|
||||||
|
L["New enemies"] = "新的敌人"
|
||||||
|
L["Announces when new enemies are discovered"] = "当发现新的敌人时发出通报"
|
||||||
|
L["Spec Detection"] = "天赋侦测"
|
||||||
|
L["Announces when the spec of an enemy was detected"] = "当侦测到敌方天赋时发出通报"
|
||||||
|
L["Low health"] = "低生命值"
|
||||||
|
L["Announces when an enemy drops below a certain health threshold"] = "当敌方生命值低于一定条件时发出通报"
|
||||||
|
L["Low health threshold"] = "低生命值门槛"
|
||||||
|
L["Choose how low an enemy must be before low health is announced"] = "设定低生命值通报门槛"
|
||||||
|
L["Destination"] = "发送通报至"
|
||||||
|
L["Choose how your announcements are displayed"] = "选择通报发送至哪个频道"
|
||||||
|
|
||||||
|
-- ArenaCountDown.lua
|
||||||
|
L["Arena Countdown"] = "竞技场计时"
|
||||||
|
L["Turns countdown before the start of an arena match on/off."] = "在竞技场开始前倒数剩余秒数"
|
||||||
|
L["Size"] = "大小"
|
||||||
|
|
||||||
|
-- Auras.lua
|
||||||
|
L["Auras"] = "光环"
|
||||||
|
L["Frame"] = "框架"
|
||||||
|
L["Cooldown"] = "冷却时间"
|
||||||
|
L["No Cooldown Circle"] = "取消图示冷却倒数阴影"
|
||||||
|
L["Cooldown circle alpha"] = "冷却倒数阴影alpha值"
|
||||||
|
L["Font"] = "字体"
|
||||||
|
L["Font of the cooldown"] = "設定冷卻時間字型"
|
||||||
|
L["Font scale"] = "字体大小"
|
||||||
|
L["Scale of the text"] = "设定字体大小"
|
||||||
|
L["Font color"] = "字体颜色"
|
||||||
|
L["Color of the text"] = "设定字体颜色"
|
||||||
|
L["Border"] = "边框"
|
||||||
|
L["Border style"] = "边框样式"
|
||||||
|
L["Buff color"] = "增益顏色"
|
||||||
|
L["Debuff color"] = "减益顏色"
|
||||||
|
L["Check All"] = "全选"
|
||||||
|
L["Uncheck All"] = "取消全选"
|
||||||
|
L["Enabled"] = "启用"
|
||||||
|
L["Priority"] = "优先"
|
||||||
|
L["Interrupt Spells School Colors"] = "打断法术分类颜色"
|
||||||
|
L["Enable Interrupt Spell School Colors"] = "启用"
|
||||||
|
L["Will use Debuff Color if disabled"] = "若未启用则使用一般减益颜色"
|
||||||
|
L["Buffs"] = "增益" --Line 573
|
||||||
|
L["Debuffs"] = "減益" --Line 566
|
||||||
|
L["Interrupts"] = "打断" --Line 580
|
||||||
|
|
||||||
|
-- BuffsDebuffs.lua
|
||||||
|
L["Buffs and Debuffs"] = "增益与减益"
|
||||||
|
L["Enabled Buffs and Debuffs module"] = "启用增益与减益模块"
|
||||||
|
L["Show CC"] = "显示控场"
|
||||||
|
L["Shows all debuffs, which are displayed on the ClassIcon as well"] = "显示所有减益效果,这些减益效果也显示在职业图标上"
|
||||||
|
L["Buffs"] = "增益"
|
||||||
|
L["Size & Padding"] = "大小与內距"
|
||||||
|
L["Icon Size"] = "图标大小"
|
||||||
|
L["Size of the DR Icons"] = "递减图标大小"
|
||||||
|
L["Icon Width Factor"] = "图标宽度比例"
|
||||||
|
L["Stretches the icon"] = "图标宽度"
|
||||||
|
L["Icon Padding"] = "图标內距"
|
||||||
|
L["Space between Icons"] = "图标间距"
|
||||||
|
L["Position"] = "位置"
|
||||||
|
L["Aura Position"] = "光环位置"
|
||||||
|
L["Position of the aura icons"] = "光环图标位置"
|
||||||
|
L["Top"] = "顶部"
|
||||||
|
L["Bottom"] = "底部"
|
||||||
|
L["Left"] = "左"
|
||||||
|
L["Right"] = "右"
|
||||||
|
--L["Grow Direction"] = ""
|
||||||
|
L["Grow Direction of the aura icons"] = "光环图标的延伸方向"
|
||||||
|
L["Horizontal offset"] = "水平偏移"
|
||||||
|
L["Vertical offset"] = "垂直偏移"
|
||||||
|
L["Alpha"] = "Alpha值"
|
||||||
|
L["Debuffs"] = "减益"
|
||||||
|
L["Dynamic Timer Color"] = "动态计时条颜色"
|
||||||
|
L["Show dynamic color on cooldown numbers"] = "冷却时间数字以动态颜色显示"
|
||||||
|
L["Color of the cooldown timer and stacks"] = "Farbe der Abklingzeit und Stapel"
|
||||||
|
L["Spell School Colors"] = "法术种类颜色"
|
||||||
|
L["Spell School Colors Enabled"] = "启用"
|
||||||
|
L["Show border colors by spell school"] = "根据不同法术显示不同边框颜色"
|
||||||
|
L["Curse"] = "诅咒"
|
||||||
|
L["Color of the border"] = "边框颜色"
|
||||||
|
L["Magic"] = "魔法"
|
||||||
|
L["Poison"] = "中毒"
|
||||||
|
L["Physical"] = "物理"
|
||||||
|
L["Immune"] = "免疫"
|
||||||
|
L["Disease"] = "疾病"
|
||||||
|
L["Aura"] = "光环"
|
||||||
|
L["Form"] = "形态"
|
||||||
|
L["Font"] = "字体" --Line 906
|
||||||
|
L["Border"] = "边框" --Line 949
|
||||||
|
L["Debuff Lists"] = "减益列表" --Line 1036
|
||||||
|
L["Buff Lists"] = "增益列表" --Line 1051
|
||||||
|
|
||||||
|
-- Castbar.lua
|
||||||
|
L["Cast Bar"] = "施法条"
|
||||||
|
L["Bar"] = "施法条"
|
||||||
|
L["Bar Size"] = "施法条大小"
|
||||||
|
L["Bar height"] = "高度"
|
||||||
|
L["Height of the bar"] = "计量条高度"
|
||||||
|
L["Bar width"] = "宽度"
|
||||||
|
L["Width of the bars"] = "计量条宽度"
|
||||||
|
L["Texture"] = "材质"
|
||||||
|
L["Bar texture"] = "施法条材质"
|
||||||
|
L["Texture of the bar"] = "计量条材质"
|
||||||
|
L["Bar color"] = "施法条颜色"
|
||||||
|
L["Color of the cast bar"] = "计量条颜色"
|
||||||
|
L["Background color"] = "背景颜色"
|
||||||
|
L["Color of the cast bar background"] = "施法条背景顏色"
|
||||||
|
L["Border size"] = "边框大小"
|
||||||
|
L["Status Bar border"] = "状态条边框"
|
||||||
|
L["Status Bar border color"] = "状态条边框颜色"
|
||||||
|
L["Icon"] = "图标"
|
||||||
|
L["Icon size"] = "图标大小"
|
||||||
|
L["Icon border"] = "图标边框"
|
||||||
|
L["Icon border color"] = "图标边框颜色"
|
||||||
|
L["If test is running, type \"/gladdy test\" again"] = "如果测试已经开始,调整此选项后请输入/gladdy test以重新开始测试"
|
||||||
|
L["Spark"] = "尾部发亮"
|
||||||
|
L["Spark enabled"] = "启用"
|
||||||
|
L["Spark color"] = "颜色"
|
||||||
|
L["Color of the cast bar spark"] = "计时条进度的尾部颜色"
|
||||||
|
L["Font of the castbar"] = "施法条字体"
|
||||||
|
L["Font size"] = "字体大小"
|
||||||
|
L["Size of the text"] = "施法条字体大小"
|
||||||
|
L["Format"] = "格式"
|
||||||
|
L["Timer Format"] = "时间格式"
|
||||||
|
L["Remaining"] = "剩余时间"
|
||||||
|
L["Total"] = "总时间"
|
||||||
|
L["Both"] = "两者"
|
||||||
|
L["Castbar position"] = "施法条位置"
|
||||||
|
L["Icon position"] = "图标位置"
|
||||||
|
L["Offsets"] = "偏移"
|
||||||
|
|
||||||
|
-- Classicon.lua
|
||||||
|
L["Class Icon"] = "职业图标"
|
||||||
|
L["Balance"] = "平衡"
|
||||||
|
L["Feral"] = "野性"
|
||||||
|
L["Restoration"] = "恢复"
|
||||||
|
L["Beast Mastery"] = "兽王"
|
||||||
|
L["Marksmanship"] = "射击"
|
||||||
|
L["Survival"] = "生存"
|
||||||
|
L["Arcane"] = "奥术"
|
||||||
|
L["Fire"] = "火焰"
|
||||||
|
L["Frost"] = "冰霜"
|
||||||
|
L["Holy"] = "神圣"
|
||||||
|
L["Protection"] = "防护"
|
||||||
|
L["Retribution"] = "惩戒"
|
||||||
|
L["Discipline"] = "戒律"
|
||||||
|
L["Shadow"] = "暗影"
|
||||||
|
L["Assassination"] = "刺杀"
|
||||||
|
L["Combat"] = "战斗"
|
||||||
|
L["Subtlety"] = "敏锐"
|
||||||
|
L["Elemental"] = "元素"
|
||||||
|
L["Enhancement"] = "增强"
|
||||||
|
L["Affliction"] = "痛苦"
|
||||||
|
L["Demonology"] = "恶魔"
|
||||||
|
L["Destruction"] = "毁灭"
|
||||||
|
L["Arms"] = "武器"
|
||||||
|
L["Fury"] = "狂怒"
|
||||||
|
L["Show Spec Icon"] = "显示天赋图标"
|
||||||
|
L["Shows Spec Icon once spec is detected"] = "若侦测到天赋则显示天赋图标"
|
||||||
|
L["Icon width factor"] = "图标宽度比例"
|
||||||
|
L["This changes positions with trinket"] = "调整职业图标位置"
|
||||||
|
L["Border color"] = "边框颜色"
|
||||||
|
|
||||||
|
--CombatIndicator.lua
|
||||||
|
L["Combat Indicator"] = "战斗指示器"
|
||||||
|
L["Enable Combat Indicator icon"] = "显示是否进入战斗"
|
||||||
|
L["Anchor"] = "锚点"
|
||||||
|
L["This changes the anchor of the ci icon"] = "调整战斗指示器显示锚点"
|
||||||
|
L["This changes position relative to its anchor of the ci icon"] = "调整战斗指示器位置"
|
||||||
|
|
||||||
|
-- Constants.lua
|
||||||
|
L["Physical"] = "物理" --Line 749
|
||||||
|
L["Holy"] = "神圣" --Line 750
|
||||||
|
L["Fire"] = "火焰" --Line 751
|
||||||
|
L["Nature"] = "自然" --Line 752
|
||||||
|
L["Frost"] = "冰霜" --Line 753
|
||||||
|
L["Shadow"] = "暗影" --Line 754
|
||||||
|
L["Arcane"] = "奥术" --Line 755
|
||||||
|
L["Unknown"] = "未知" --Line 756
|
||||||
|
|
||||||
|
-- Cooldowns.lua
|
||||||
|
L["Cooldowns"] = "技能冷却监控"
|
||||||
|
L["Enabled cooldown module"] = "启用冷却时间监控模块"
|
||||||
|
L["Cooldown size"] = "大小"
|
||||||
|
L["Size of each cd icon"] = "冷却时间图标"
|
||||||
|
L["Icon Width Factor"] = "宽度"
|
||||||
|
L["Max Icons per row"] = "每行图标数量"
|
||||||
|
L["Scale of the font"] = "字体大小"
|
||||||
|
L["Anchor of the cooldown icons"] = "冷却图标锚点"
|
||||||
|
L["Grow Direction of the cooldown icons"] = "冷却图标延伸方向"
|
||||||
|
L["Offset"] = "偏移"
|
||||||
|
L["BloodElf"] = "血精灵"
|
||||||
|
L["NightElf"] = "暗夜精灵"
|
||||||
|
L["Scourge"] = "亡灵"
|
||||||
|
|
||||||
|
-- Diminishings.lua
|
||||||
|
L["Diminishings"] = "控场递减"
|
||||||
|
L["Enabled DR module"] = "启用递减模块"
|
||||||
|
L["DR Cooldown position"] = "递减冷却时间位置"
|
||||||
|
L["Position of the cooldown icons"] = "递减冷却时间图标位置"
|
||||||
|
L["DR Border Colors"] = "DR边框颜色"
|
||||||
|
L["Dr Border Colors Enabled"] = "启用"
|
||||||
|
L["Colors borders of DRs in respective DR-color below"] = "边框颜色依递减设定为以下颜色"
|
||||||
|
L["Half"] = "二分之一"
|
||||||
|
L["Quarter"] = "四分之一"
|
||||||
|
L["Categories"] = "法术列表"
|
||||||
|
L["Force Icon"] = "使用自定义图标"
|
||||||
|
L["Icon of the DR"] = "选择此图标取代原始技能图标"
|
||||||
|
|
||||||
|
-- ExportImport.lua
|
||||||
|
L["Export Import"] = "导出/导入"
|
||||||
|
L["Profile Export Import"] = "设置导出/导入"
|
||||||
|
L["Export"] = "导出" --Line 138
|
||||||
|
L["Export your current profile to share with others or your various accounts."] = "导出您目前的设置" --Line 139
|
||||||
|
L["Import"] = "导入" --Line 162
|
||||||
|
L["This will overwrite your current profile!"] = "这将会覆盖您目前的设置" --Line 163
|
||||||
|
|
||||||
|
-- Healthbar.lua
|
||||||
|
L["Health Bar"] = "血量条"
|
||||||
|
L["DEAD"] = "死亡"
|
||||||
|
L["LEAVE"] = "暂离"
|
||||||
|
L["General"] = "一般"
|
||||||
|
L["Color of the status bar background"] = "状态条背景颜色"
|
||||||
|
L["Font of the bar"] = "字体"
|
||||||
|
L["Name font size"] = "名称字体大小"
|
||||||
|
L["Size of the name text"] = "设定名称字体大小"
|
||||||
|
L["Health font size"] = "生命值字体大小"
|
||||||
|
L["Size of the health text"] = "设定生命值字体大小"
|
||||||
|
L["Size of the border"] = "边框大小"
|
||||||
|
L["Health Bar Text"] = "血量条文字"
|
||||||
|
L["Show name text"] = "显示名字"
|
||||||
|
L["Show the units name"] = "显示单位名称"
|
||||||
|
L["Show ArenaX"] = "显示编号"
|
||||||
|
L["Show 1-5 as name instead"] = "使用编号1-5代替角色名字"
|
||||||
|
L["Show the actual health"] = "显示目前生命值"
|
||||||
|
L["Show the actual health on the health bar"] = "在血量条上显示目前生命值"
|
||||||
|
L["Show max health"] = "显示最大生命值"
|
||||||
|
L["Show max health on the health bar"] = "在血量条上显示最大生命值"
|
||||||
|
L["Show health percentage"] = "显示百分比"
|
||||||
|
L["Show health percentage on the health bar"] = "在血量条上显示生命值百分比"
|
||||||
|
|
||||||
|
-- Highlight.lua
|
||||||
|
L["Highlight"] = "高亮提示"
|
||||||
|
L["Show Inside"] = "显示在框架內"
|
||||||
|
L["Show Highlight border inside of frame"] = "將高亮边框显示于框架內侧"
|
||||||
|
L["Colors"] = "边框颜色"
|
||||||
|
L["Target border color"] = "目标"
|
||||||
|
L["Color of the selected targets border"] = "目标的边框顏色"
|
||||||
|
L["Focus border color"] = "焦点"
|
||||||
|
L["Color of the focus border"] = "焦点目标边框顏色"
|
||||||
|
L["Highlight target"] = "高亮目标"
|
||||||
|
L["Toggle if the selected target should be highlighted"] = "是否高亮当前目标"
|
||||||
|
L["Show border around target"] = "显示目标边框"
|
||||||
|
L["Toggle if a border should be shown around the selected target"] = "是否显示当前目标的边框"
|
||||||
|
L["Show border around focus"] = "显示焦点边框"
|
||||||
|
L["Toggle of a border should be shown around the current focus"] = "是否显示当前焦点目标的边框"
|
||||||
|
|
||||||
|
-- Pets.lua
|
||||||
|
L["Pets"] = "宠物"
|
||||||
|
L["Enables Pets module"] = "启用宠物模块"
|
||||||
|
L["Width of the bar"] = "宠物条宽度"
|
||||||
|
L["Health color"] = "生命值顏色"
|
||||||
|
L["Color of the status bar"] = "状态条顏色"
|
||||||
|
L["Portrait"] = "头像"
|
||||||
|
L["Health Values"] = "生命值"
|
||||||
|
|
||||||
|
-- Powerbar.lua
|
||||||
|
L["Power Bar"] = "法力/能量条"
|
||||||
|
L["Power Bar Text"] = "法力/能量条文字"
|
||||||
|
L["Power Texts"] = "法力/能量条文字"
|
||||||
|
L["Show race"] = "显示种族"
|
||||||
|
L["Show spec"] = "显示天赋"
|
||||||
|
L["Show the actual power"] = "显示目前法力/能量"
|
||||||
|
L["Show the actual power on the power bar"] = "在计量条中显示目前法力/能量值"
|
||||||
|
L["Show max power"] = "显示最大法力/能量值"
|
||||||
|
L["Show max power on the power bar"] = "在计量条中显示最大法力/能量值"
|
||||||
|
L["Show power percentage"] = "显示法力/能量百分比"
|
||||||
|
L["Show power percentage on the power bar"] = "在计量条中显示目前法力/能量百分比"
|
||||||
|
|
||||||
|
-- Racial.lua
|
||||||
|
L["Racial"] = "种族"
|
||||||
|
L["Enable racial icon"] = "启用种族图标"
|
||||||
|
L["This changes the anchor of the racial icon"] = "调整种族图标锚点"
|
||||||
|
L["This changes position relative to its anchor of the racial icon"] = "调整种族图标位置"
|
||||||
|
|
||||||
|
-- TotemPlates.lua
|
||||||
|
L["Totem Plates"] = "图腾栏"
|
||||||
|
L["Customize Totems"] = "自定义图腾"
|
||||||
|
L["Custom totem name"] = "自定义图腾名字"
|
||||||
|
L["Totem General"] = "图腾通用设置"
|
||||||
|
L["Turns totem icons instead of nameplates on or off. (Requires reload)"] = "是否显示图腾名字(需重新加载)"
|
||||||
|
L["Show friendly"] = "显示右方图腾"
|
||||||
|
L["Show enemy"] = "显示敌方图腾"
|
||||||
|
L["Totem size"] = "图腾大小"
|
||||||
|
L["Size of totem icons"] = "图腾图标大小"
|
||||||
|
L["Font of the custom totem name"] = "自定义图腾字体"
|
||||||
|
L["Apply alpha when no target"] = "图腾非目标时使用alpha值"
|
||||||
|
L["Always applies alpha, even when you don't have a target. Else it is 1."] = "若图腾未被选为目标,其图标使用alpha值設定"
|
||||||
|
L["Apply alpha when targeted"] = "图腾为目标时使用alpha值"
|
||||||
|
L["Always applies alpha, even when you target the totem. Else it is 1."] = "图腾被选为目标时,其图标使用alpha值設定"
|
||||||
|
L["All totem border alphas (configurable per totem)"] = "图腾 Alpha值 "
|
||||||
|
L["Totem icon border style"] = "图腾边框样式"
|
||||||
|
L["All totem border color"] = "图腾边框顏色"
|
||||||
|
|
||||||
|
-- Trinket.lua
|
||||||
|
L["Trinket"] = "饰品"
|
||||||
|
L["Enable trinket icon"] = "启用饰品图标"
|
||||||
|
L["This changes positions of the trinket"] = "调整饰品图标位置"
|
||||||
|
|
||||||
|
-- XiconProfiles.lua
|
||||||
|
L["Profile"] = "样式"
|
||||||
|
L["XiconProfiles"] = "框架外观" --Line 4
|
||||||
|
L[" No Pet"] = "(无宠物)" --Line 109, 119
|
||||||
|
|
||||||
|
-- Frame.lua
|
||||||
|
L["Gladdy - drag to move"] = "Gladdy - 拖拽移动"
|
||||||
|
|
||||||
|
-- Gladdy.lua
|
||||||
|
L["Welcome to Gladdy!"] = "欢迎使用 Gladdy!"
|
||||||
|
L["First run has been detected, displaying test frame."] = "第一次使用时,显示此测试框架。"
|
||||||
|
L["Valid slash commands are:"] = "可用的指令为:"
|
||||||
|
L["If this is not your first run please lock or move the frame to prevent this from happening."] = "若非第一次使用,请移动或锁定框架以免此提示再次出现。"
|
||||||
|
|
||||||
|
-- Clicks.lua
|
||||||
|
L["Action #%d"] = "动作 #%d"
|
||||||
|
L["Target"] = "目标" --Line 15
|
||||||
|
L["Focus"] = "焦点" --Line 16
|
||||||
|
L["Clicks"] = "点击动作"
|
||||||
|
L["Left button"] = "左键"
|
||||||
|
L["Right button"] = "右键"
|
||||||
|
L["Middle button"] = "中键"
|
||||||
|
L["Button 4"] = "鼠标按键4"
|
||||||
|
L["Button 5"] = "鼠标按键5"
|
||||||
|
L["Select what action this mouse button does"] = "设置输入按键后欲执行的动作"
|
||||||
|
L["Modifier"] = "修饰键"
|
||||||
|
L["Select which modifier to use"] = "设置欲使用的修饰键"
|
||||||
|
L["Button"] = "按键"
|
||||||
|
L["Select which mouse button to use"] = "设置欲使用的鼠标按键"
|
||||||
|
L["Name"] = "名称"
|
||||||
|
L["Select the name of the click option"] = "设置动作名称"
|
||||||
|
L["Action"] = "动作"
|
||||||
|
L["Cast Spell / Macro"] = "施放法术/宏"
|
||||||
|
|
||||||
|
--RangeCheck.lua
|
||||||
|
L["Range Check"] = "距离检测"
|
||||||
|
L["Spells"] = "法术"
|
||||||
|
L["Fade"] = "变暗"
|
||||||
|
L["Out of Range Darkening Level"] = "超出距离时变暗程度"
|
||||||
|
L["Higher is darker"] = "数值越高越暗"
|
||||||
|
L["yds"] = " 码" --Line 366, 388
|
||||||
|
L["Changing the spellID only applies to your player class!\n\nExample: If you are a Paladin and wish to change your range check spell to Repentance, edit the Paladin spellID to 20066."] = "对应您的职业修改欲使用监控距离的技能。\n\n例:若您为圣骑士且想以忏悔技能用于距离监控,请将圣骑士的法术ID改为20066。" --Line 352
|
||||||
|
|
||||||
|
--ShadowsightTimer.lua
|
||||||
|
L["Shadowsight Timer"] = "暗影视界计时"
|
||||||
|
L["Locked"] = "锁定"
|
||||||
|
L["Announce"] = "通报"
|
||||||
|
L["Scale"] = "大小"
|
||||||
|
L["Shadowsight up in %ds"] = "暗影视界於%d秒后就绪"
|
||||||
|
L["Shadowsight up!"] = "暗影视界已就绪"
|
||||||
|
|
||||||
|
-- Options.lua
|
||||||
|
L["settings"] = "设置"
|
||||||
|
L["Reset module"] = "重置模块"
|
||||||
|
L["Reset module to defaults"] = "将模块重置为初始值"
|
||||||
|
L["No settings"] = "无设置"
|
||||||
|
L["Module has no settings"] = "模块没有设置"
|
||||||
|
L["General settings"] = "通用设置"
|
||||||
|
L["Lock frame"] = "锁定框架"
|
||||||
|
L["Toggle if frame can be moved"] = "调整框架是否可移动"
|
||||||
|
L["Grow frame upwards"] = "框架向上延伸"
|
||||||
|
L["If enabled the frame will grow upwards instead of downwards"] = "开启次选项时框架向上延伸"
|
||||||
|
L["Down"] = "下"
|
||||||
|
L["Up"] = "上"
|
||||||
|
L["Frame General"] = "框架"
|
||||||
|
L["Frame scale"] = "框架大小"
|
||||||
|
L["Scale of the frame"] = "框架的尺寸"
|
||||||
|
L["Frame padding"] = "框架內距"
|
||||||
|
L["Padding of the frame"] = "框架的內距"
|
||||||
|
L["Frame width"] = "框架宽度"
|
||||||
|
L["Margin"] = "框架间距"
|
||||||
|
L["Margin between each button"] = "框架的间距"
|
||||||
|
L["Cooldown General"] = "冷却"
|
||||||
|
L["Font General"] = "字体"
|
||||||
|
L["General Font"] = "通用字体"
|
||||||
|
L["Font color text"] = "文字顏色"
|
||||||
|
L["Font color timer"] = "计时器文字顏色"
|
||||||
|
L["Color of the timers"] = "计时器顏色"
|
||||||
|
L["Icons General"] = "图标"
|
||||||
|
L["Icon border style"] = "图标边框样式"
|
||||||
|
L["This changes the border style of all icons"] = "调整所有图标的边框样式"
|
||||||
|
L["This changes the border color of all icons"] = "调整所有图标的边框顏色"
|
||||||
|
L["Statusbar General"] = "状态条"
|
||||||
|
L["Statusbar texture"] = "状态条材质"
|
||||||
|
L["This changes the texture of all statusbar frames"] = "调整所有状态条的材质"
|
||||||
|
L["Statusbar border style"] = "状态条边框样式"
|
||||||
|
L["This changes the border style of all statusbar frames"] = "调整所有状态条的边框样式"
|
||||||
|
L["Statusbar border offset divider (smaller is higher offset)"] = "状态条边框距离"
|
||||||
|
L["Offset of border to statusbar (in case statusbar shows beyond the border)"] = "调整状态条边框距离"
|
||||||
|
L["Statusbar border color"] = "状态条边框顏色"
|
||||||
|
L["This changes the border color of all statusbar frames"] = "调整所有状态条的边框颜色"
|
||||||
|
L["Hide Blizzard"] = "隐藏暴雪框架"
|
||||||
|
L["Grow Direction"] = "框架延伸方向"
|
||||||
|
L["Arena only"] = "只在竞技场中"
|
||||||
|
L["Never"] = "从不"
|
||||||
|
L["Always"] = "一直"
|
||||||
|
L["Load configuration"] = "设置选项" --Line 713
|
||||||
|
L["Load configuration options"] = "加载设置选项" --Line 714
|
||||||
|
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
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
-- make into AceComm.
|
-- make into AceComm.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceComm-3.0
|
-- @name AceComm-3.0
|
||||||
-- @release $Id: AceComm-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceComm-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $
|
||||||
|
|
||||||
--[[ AceComm-3.0
|
--[[ AceComm-3.0
|
||||||
|
|
||||||
@ -35,10 +35,6 @@ local error, assert = error, assert
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local Ambiguate = Ambiguate
|
local Ambiguate = Ambiguate
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: LibStub, DEFAULT_CHAT_FRAME, geterrorhandler, RegisterAddonMessagePrefix
|
|
||||||
|
|
||||||
AceComm.embeds = AceComm.embeds or {}
|
AceComm.embeds = AceComm.embeds or {}
|
||||||
|
|
||||||
-- for my sanity and yours, let's give the message type bytes some names
|
-- for my sanity and yours, let's give the message type bytes some names
|
||||||
|
@ -75,7 +75,7 @@ local next = next
|
|||||||
local strlen = string.len
|
local strlen = string.len
|
||||||
local GetFramerate = GetFramerate
|
local GetFramerate = GetFramerate
|
||||||
local strlower = string.lower
|
local strlower = string.lower
|
||||||
local unpack,type,pairs,wipe = unpack,type,pairs,wipe
|
local unpack,type,pairs,wipe = unpack,type,pairs,table.wipe
|
||||||
local UnitInRaid,UnitInParty = UnitInRaid,UnitInParty
|
local UnitInRaid,UnitInParty = UnitInRaid,UnitInParty
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames.
|
--- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigCmd-3.0
|
-- @name AceConfigCmd-3.0
|
||||||
-- @release $Id: AceConfigCmd-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceConfigCmd-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
AceConfigCmd-3.0
|
AceConfigCmd-3.0
|
||||||
@ -37,17 +37,10 @@ local error, assert = error, assert
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: LibStub, SELECTED_CHAT_FRAME, DEFAULT_CHAT_FRAME
|
|
||||||
|
|
||||||
|
|
||||||
local L = setmetatable({}, { -- TODO: replace with proper locale
|
local L = setmetatable({}, { -- TODO: replace with proper locale
|
||||||
__index = function(self,k) return k end
|
__index = function(self,k) return k end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local function print(msg)
|
local function print(msg)
|
||||||
(SELECTED_CHAT_FRAME or DEFAULT_CHAT_FRAME):AddMessage(msg)
|
(SELECTED_CHAT_FRAME or DEFAULT_CHAT_FRAME):AddMessage(msg)
|
||||||
end
|
end
|
||||||
@ -401,7 +394,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local str = strsub(info.input,inputpos);
|
local strInput = strsub(info.input,inputpos);
|
||||||
|
|
||||||
if tab.type=="execute" then
|
if tab.type=="execute" then
|
||||||
------------ execute --------------------------------------------
|
------------ execute --------------------------------------------
|
||||||
@ -414,21 +407,21 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
local res = true
|
local res = true
|
||||||
if tab.pattern then
|
if tab.pattern then
|
||||||
if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end
|
if type(tab.pattern)~="string" then err(info, inputpos, "'pattern' - expected a string") end
|
||||||
if not strmatch(str, tab.pattern) then
|
if not strmatch(strInput, tab.pattern) then
|
||||||
usererr(info, inputpos, "'"..str.."' - " .. L["invalid input"])
|
usererr(info, inputpos, "'"..strInput.."' - " .. L["invalid input"])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", str)
|
do_final(info, inputpos, tab, "set", strInput)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="toggle" then
|
elseif tab.type=="toggle" then
|
||||||
------------ toggle --------------------------------------------
|
------------ toggle --------------------------------------------
|
||||||
local b
|
local b
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(strInput))
|
||||||
if str=="" then
|
if str=="" then
|
||||||
b = callmethod(info, inputpos, tab, "get")
|
b = callmethod(info, inputpos, tab, "get")
|
||||||
|
|
||||||
@ -465,9 +458,9 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
elseif tab.type=="range" then
|
elseif tab.type=="range" then
|
||||||
------------ range --------------------------------------------
|
------------ range --------------------------------------------
|
||||||
local val = tonumber(str)
|
local val = tonumber(strInput)
|
||||||
if not val then
|
if not val then
|
||||||
usererr(info, inputpos, "'"..str.."' - "..L["expected number"])
|
usererr(info, inputpos, "'"..strInput.."' - "..L["expected number"])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if type(info.step)=="number" then
|
if type(info.step)=="number" then
|
||||||
@ -487,7 +480,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
elseif tab.type=="select" then
|
elseif tab.type=="select" then
|
||||||
------------ select ------------------------------------
|
------------ select ------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(strInput))
|
||||||
|
|
||||||
local values = tab.values
|
local values = tab.values
|
||||||
if type(values) == "function" or type(values) == "string" then
|
if type(values) == "function" or type(values) == "string" then
|
||||||
@ -528,7 +521,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
elseif tab.type=="multiselect" then
|
elseif tab.type=="multiselect" then
|
||||||
------------ multiselect -------------------------------------------
|
------------ multiselect -------------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(strInput))
|
||||||
|
|
||||||
local values = tab.values
|
local values = tab.values
|
||||||
if type(values) == "function" or type(values) == "string" then
|
if type(values) == "function" or type(values) == "string" then
|
||||||
@ -565,7 +558,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
--check that the opt is valid
|
--check that the opt is valid
|
||||||
local ok
|
local ok
|
||||||
for k,v in pairs(values) do
|
for k in pairs(values) do
|
||||||
if strlower(k)==opt then
|
if strlower(k)==opt then
|
||||||
opt = k -- overwrite with key (in case of case mismatches)
|
opt = k -- overwrite with key (in case of case mismatches)
|
||||||
ok = true
|
ok = true
|
||||||
@ -634,7 +627,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
elseif tab.type=="color" then
|
elseif tab.type=="color" then
|
||||||
------------ color --------------------------------------------
|
------------ color --------------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(strInput))
|
||||||
if str == "" then
|
if str == "" then
|
||||||
--TODO: Show current value
|
--TODO: Show current value
|
||||||
return
|
return
|
||||||
@ -706,7 +699,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
|
|
||||||
elseif tab.type=="keybinding" then
|
elseif tab.type=="keybinding" then
|
||||||
------------ keybinding --------------------------------------------
|
------------ keybinding --------------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(strInput))
|
||||||
if str == "" then
|
if str == "" then
|
||||||
--TODO: Show current value
|
--TODO: Show current value
|
||||||
return
|
return
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
|
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigDialog-3.0
|
-- @name AceConfigDialog-3.0
|
||||||
-- @release $Id: AceConfigDialog-3.0.lua 1232 2020-04-14 22:21:22Z nevcairiel $
|
-- @release $Id: AceConfigDialog-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $
|
||||||
|
|
||||||
local LibStub = LibStub
|
local LibStub = LibStub
|
||||||
local gui = LibStub("AceGUI-3.0")
|
local gui = LibStub("AceGUI-3.0")
|
||||||
local reg = LibStub("AceConfigRegistry-3.0")
|
local reg = LibStub("AceConfigRegistry-3.0")
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceConfigDialog-3.0", 79
|
local MAJOR, MINOR = "AceConfigDialog-3.0", 86
|
||||||
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not AceConfigDialog then return end
|
if not AceConfigDialog then return end
|
||||||
@ -22,19 +22,13 @@ AceConfigDialog.frame.closing = AceConfigDialog.frame.closing or {}
|
|||||||
AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {}
|
AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {}
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local tinsert, tsort, tremove = table.insert, table.sort, table.remove
|
local tinsert, tsort, tremove, wipe = table.insert, table.sort, table.remove, table.wipe
|
||||||
local strmatch, format = string.match, string.format
|
local strmatch, format = string.match, string.format
|
||||||
local error = error
|
local error = error
|
||||||
local pairs, next, select, type, unpack, wipe, ipairs = pairs, next, select, type, unpack, wipe, ipairs
|
local pairs, next, select, type, unpack, ipairs = pairs, next, select, type, unpack, ipairs
|
||||||
local tostring, tonumber = tostring, tonumber
|
local tostring, tonumber = tostring, tonumber
|
||||||
local math_min, math_max, math_floor = math.min, math.max, math.floor
|
local math_min, math_max, math_floor = math.min, math.max, math.floor
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: NORMAL_FONT_COLOR, ACCEPT, CANCEL
|
|
||||||
-- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge
|
|
||||||
-- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler
|
|
||||||
|
|
||||||
local emptyTbl = {}
|
local emptyTbl = {}
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
@ -153,6 +147,7 @@ local stringIsLiteral = {
|
|||||||
width = true,
|
width = true,
|
||||||
image = true,
|
image = true,
|
||||||
fontSize = true,
|
fontSize = true,
|
||||||
|
tooltipHyperlink = true
|
||||||
}
|
}
|
||||||
|
|
||||||
--Is Never a function or method
|
--Is Never a function or method
|
||||||
@ -194,9 +189,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
|
|||||||
--We have a function to call
|
--We have a function to call
|
||||||
local info = new()
|
local info = new()
|
||||||
--traverse the options table, picking up the handler and filling the info with the path
|
--traverse the options table, picking up the handler and filling the info with the path
|
||||||
local handler
|
|
||||||
local group = options
|
local group = options
|
||||||
handler = group.handler or handler
|
local handler = group.handler
|
||||||
|
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
group = GetSubOption(group, path[i])
|
group = GetSubOption(group, path[i])
|
||||||
@ -508,6 +502,14 @@ local function OptionOnMouseOver(widget, event)
|
|||||||
local tooltip = AceConfigDialog.tooltip
|
local tooltip = AceConfigDialog.tooltip
|
||||||
|
|
||||||
tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT")
|
tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT")
|
||||||
|
|
||||||
|
local tooltipHyperlink = GetOptionsMemberValue("tooltipHyperlink", opt, options, path, appName)
|
||||||
|
if tooltipHyperlink then
|
||||||
|
tooltip:SetHyperlink(tooltipHyperlink)
|
||||||
|
tooltip:Show()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local name = GetOptionsMemberValue("name", opt, options, path, appName)
|
local name = GetOptionsMemberValue("name", opt, options, path, appName)
|
||||||
local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
|
local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
|
||||||
local usage = GetOptionsMemberValue("usage", opt, options, path, appName)
|
local usage = GetOptionsMemberValue("usage", opt, options, path, appName)
|
||||||
@ -535,8 +537,7 @@ local function OptionOnMouseLeave(widget, event)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function GetFuncName(option)
|
local function GetFuncName(option)
|
||||||
local type = option.type
|
if option.type == "execute" then
|
||||||
if type == "execute" then
|
|
||||||
return "func"
|
return "func"
|
||||||
else
|
else
|
||||||
return "set"
|
return "set"
|
||||||
@ -544,13 +545,15 @@ local function GetFuncName(option)
|
|||||||
end
|
end
|
||||||
do
|
do
|
||||||
local frame = AceConfigDialog.popup
|
local frame = AceConfigDialog.popup
|
||||||
if not frame then
|
if not frame or oldminor < 81 then
|
||||||
frame = CreateFrame("Frame", nil, UIParent)
|
frame = CreateFrame("Frame", nil, UIParent)
|
||||||
AceConfigDialog.popup = frame
|
AceConfigDialog.popup = frame
|
||||||
frame:Hide()
|
frame:Hide()
|
||||||
frame:SetPoint("CENTER", UIParent, "CENTER")
|
frame:SetPoint("CENTER", UIParent, "CENTER")
|
||||||
frame:SetSize(320, 72)
|
frame:SetSize(320, 72)
|
||||||
|
frame:EnableMouse(true) -- Do not allow click-through on the frame
|
||||||
frame:SetFrameStrata("TOOLTIP")
|
frame:SetFrameStrata("TOOLTIP")
|
||||||
|
frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
frame:SetScript("OnKeyDown", function(self, key)
|
frame:SetScript("OnKeyDown", function(self, key)
|
||||||
if key == "ESCAPE" then
|
if key == "ESCAPE" then
|
||||||
self:SetPropagateKeyboardInput(false)
|
self:SetPropagateKeyboardInput(false)
|
||||||
@ -564,26 +567,17 @@ do
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC then
|
local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate")
|
||||||
frame:SetBackdrop({
|
border:SetAllPoints(frame)
|
||||||
bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]],
|
frame:SetFixedFrameStrata(true)
|
||||||
edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]],
|
frame:SetFixedFrameLevel(true)
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 32,
|
|
||||||
insets = { left = 11, right = 11, top = 11, bottom = 11 },
|
|
||||||
})
|
|
||||||
else
|
|
||||||
local border = CreateFrame("Frame", nil, frame, "DialogBorderDarkTemplate")
|
|
||||||
border:SetAllPoints(frame)
|
|
||||||
end
|
|
||||||
|
|
||||||
local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
|
local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
|
||||||
text:SetSize(290, 0)
|
text:SetSize(290, 0)
|
||||||
text:SetPoint("TOP", 0, -16)
|
text:SetPoint("TOP", 0, -16)
|
||||||
frame.text = text
|
frame.text = text
|
||||||
|
|
||||||
local function newButton(text)
|
local function newButton(newText)
|
||||||
local button = CreateFrame("Button", nil, frame)
|
local button = CreateFrame("Button", nil, frame)
|
||||||
button:SetSize(128, 21)
|
button:SetSize(128, 21)
|
||||||
button:SetNormalFontObject(GameFontNormal)
|
button:SetNormalFontObject(GameFontNormal)
|
||||||
@ -594,7 +588,7 @@ do
|
|||||||
button:GetPushedTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
button:GetPushedTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
||||||
button:SetHighlightTexture(130762) -- "Interface\\Buttons\\UI-DialogBox-Button-Highlight"
|
button:SetHighlightTexture(130762) -- "Interface\\Buttons\\UI-DialogBox-Button-Highlight"
|
||||||
button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
||||||
button:SetText(text)
|
button:SetText(newText)
|
||||||
return button
|
return button
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -681,7 +675,7 @@ local function ActivateControl(widget, event, ...)
|
|||||||
if group[funcname] ~= nil then
|
if group[funcname] ~= nil then
|
||||||
func = group[funcname]
|
func = group[funcname]
|
||||||
end
|
end
|
||||||
handler = group.handler or handler
|
handler = group.handler
|
||||||
confirm = group.confirm
|
confirm = group.confirm
|
||||||
validate = group.validate
|
validate = group.validate
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
@ -745,7 +739,6 @@ local function ActivateControl(widget, event, ...)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local rootframe = user.rootframe
|
|
||||||
if not validated or type(validated) == "string" then
|
if not validated or type(validated) == "string" then
|
||||||
if not validated then
|
if not validated then
|
||||||
if usage then
|
if usage then
|
||||||
@ -760,8 +753,8 @@ local function ActivateControl(widget, event, ...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- show validate message
|
-- show validate message
|
||||||
if rootframe.SetStatusText then
|
if user.rootframe.SetStatusText then
|
||||||
rootframe:SetStatusText(validated)
|
user.rootframe:SetStatusText(validated)
|
||||||
else
|
else
|
||||||
validationErrorPopup(validated)
|
validationErrorPopup(validated)
|
||||||
end
|
end
|
||||||
@ -798,14 +791,14 @@ local function ActivateControl(widget, event, ...)
|
|||||||
if type(confirm) == "boolean" then
|
if type(confirm) == "boolean" then
|
||||||
if confirm then
|
if confirm then
|
||||||
if not confirmText then
|
if not confirmText then
|
||||||
local name, desc = option.name, option.desc
|
local option_name, desc = option.name, option.desc
|
||||||
if type(name) == "function" then
|
if type(option_name) == "function" then
|
||||||
name = name(info)
|
option_name = option_name(info)
|
||||||
end
|
end
|
||||||
if type(desc) == "function" then
|
if type(desc) == "function" then
|
||||||
desc = desc(info)
|
desc = desc(info)
|
||||||
end
|
end
|
||||||
confirmText = name
|
confirmText = option_name
|
||||||
if desc then
|
if desc then
|
||||||
confirmText = confirmText.." - "..desc
|
confirmText = confirmText.." - "..desc
|
||||||
end
|
end
|
||||||
@ -1147,8 +1140,6 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
--Control to feed
|
--Control to feed
|
||||||
local control
|
local control
|
||||||
|
|
||||||
local name = GetOptionsMemberValue("name", v, options, path, appName)
|
|
||||||
|
|
||||||
if v.type == "execute" then
|
if v.type == "execute" then
|
||||||
|
|
||||||
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
||||||
@ -1251,7 +1242,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
end
|
end
|
||||||
tsort(sorting, sortTblAsStrings)
|
tsort(sorting, sortTblAsStrings)
|
||||||
end
|
end
|
||||||
for k, value in ipairs(sorting) do
|
for _, value in ipairs(sorting) do
|
||||||
local text = values[value]
|
local text = values[value]
|
||||||
local radio = gui:Create("CheckBox")
|
local radio = gui:Create("CheckBox")
|
||||||
radio:SetLabel(text)
|
radio:SetLabel(text)
|
||||||
@ -1333,8 +1324,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:SetWidth(width_multiplier)
|
control:SetWidth(width_multiplier)
|
||||||
end
|
end
|
||||||
--check:SetTriState(v.tristate)
|
--check:SetTriState(v.tristate)
|
||||||
for i = 1, #valuesort do
|
for s = 1, #valuesort do
|
||||||
local key = valuesort[i]
|
local key = valuesort[s]
|
||||||
local value = GetOptionsMemberValue("get",v, options, path, appName, key)
|
local value = GetOptionsMemberValue("get",v, options, path, appName, key)
|
||||||
control:SetItemValue(key,value)
|
control:SetItemValue(key,value)
|
||||||
end
|
end
|
||||||
@ -1346,8 +1337,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
|
|
||||||
control:PauseLayout()
|
control:PauseLayout()
|
||||||
local width = GetOptionsMemberValue("width",v,options,path,appName)
|
local width = GetOptionsMemberValue("width",v,options,path,appName)
|
||||||
for i = 1, #valuesort do
|
for s = 1, #valuesort do
|
||||||
local value = valuesort[i]
|
local value = valuesort[s]
|
||||||
local text = values[value]
|
local text = values[value]
|
||||||
local check = gui:Create("CheckBox")
|
local check = gui:Create("CheckBox")
|
||||||
check:SetLabel(text)
|
check:SetLabel(text)
|
||||||
@ -1364,7 +1355,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
elseif width == "half" then
|
elseif width == "half" then
|
||||||
check:SetWidth(width_multiplier / 2)
|
check:SetWidth(width_multiplier / 2)
|
||||||
elseif (type(width) == "number") then
|
elseif (type(width) == "number") then
|
||||||
control:SetWidth(width_multiplier * width)
|
check:SetWidth(width_multiplier * width)
|
||||||
elseif width == "full" then
|
elseif width == "full" then
|
||||||
check.width = "fill"
|
check.width = "fill"
|
||||||
else
|
else
|
||||||
@ -1434,8 +1425,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
end
|
end
|
||||||
control:SetImageSize(width, height)
|
control:SetImageSize(width, height)
|
||||||
end
|
end
|
||||||
local width = GetOptionsMemberValue("width",v,options,path,appName)
|
local controlWidth = GetOptionsMemberValue("width",v,options,path,appName)
|
||||||
control.width = not width and "fill"
|
control.width = not controlWidth and "fill"
|
||||||
end
|
end
|
||||||
|
|
||||||
--Common Init
|
--Common Init
|
||||||
@ -1690,29 +1681,29 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
|
|||||||
|
|
||||||
elseif grouptype == "select" then
|
elseif grouptype == "select" then
|
||||||
|
|
||||||
local select = gui:Create("DropdownGroup")
|
local selectGroup = gui:Create("DropdownGroup")
|
||||||
select:SetTitle(name)
|
selectGroup:SetTitle(name)
|
||||||
InjectInfo(select, options, group, path, rootframe, appName)
|
InjectInfo(selectGroup, options, group, path, rootframe, appName)
|
||||||
select:SetCallback("OnGroupSelected", GroupSelected)
|
selectGroup:SetCallback("OnGroupSelected", GroupSelected)
|
||||||
local status = AceConfigDialog:GetStatusTable(appName, path)
|
local status = AceConfigDialog:GetStatusTable(appName, path)
|
||||||
if not status.groups then
|
if not status.groups then
|
||||||
status.groups = {}
|
status.groups = {}
|
||||||
end
|
end
|
||||||
select:SetStatusTable(status.groups)
|
selectGroup:SetStatusTable(status.groups)
|
||||||
local grouplist, orderlist = BuildSelect(group, options, path, appName)
|
local grouplist, orderlist = BuildSelect(group, options, path, appName)
|
||||||
select:SetGroupList(grouplist, orderlist)
|
selectGroup:SetGroupList(grouplist, orderlist)
|
||||||
select:SetUserData("grouplist", grouplist)
|
selectGroup:SetUserData("grouplist", grouplist)
|
||||||
select:SetUserData("orderlist", orderlist)
|
selectGroup:SetUserData("orderlist", orderlist)
|
||||||
|
|
||||||
local firstgroup = orderlist[1]
|
local firstgroup = orderlist[1]
|
||||||
if firstgroup then
|
if firstgroup then
|
||||||
select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup)
|
selectGroup:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup)
|
||||||
end
|
end
|
||||||
|
|
||||||
select.width = "fill"
|
selectGroup.width = "fill"
|
||||||
select.height = "fill"
|
selectGroup.height = "fill"
|
||||||
|
|
||||||
container:AddChild(select)
|
container:AddChild(selectGroup)
|
||||||
|
|
||||||
--assume tree group by default
|
--assume tree group by default
|
||||||
--if parenttype is tree then this group is already a node on that tree
|
--if parenttype is tree then this group is already a node on that tree
|
||||||
@ -1940,13 +1931,13 @@ end
|
|||||||
-- convert pre-39 BlizOptions structure to the new format
|
-- convert pre-39 BlizOptions structure to the new format
|
||||||
if oldminor and oldminor < 39 and AceConfigDialog.BlizOptions then
|
if oldminor and oldminor < 39 and AceConfigDialog.BlizOptions then
|
||||||
local old = AceConfigDialog.BlizOptions
|
local old = AceConfigDialog.BlizOptions
|
||||||
local new = {}
|
local newOpt = {}
|
||||||
for key, widget in pairs(old) do
|
for key, widget in pairs(old) do
|
||||||
local appName = widget:GetUserData("appName")
|
local appName = widget:GetUserData("appName")
|
||||||
if not new[appName] then new[appName] = {} end
|
if not newOpt[appName] then newOpt[appName] = {} end
|
||||||
new[appName][key] = widget
|
newOpt[appName][key] = widget
|
||||||
end
|
end
|
||||||
AceConfigDialog.BlizOptions = new
|
AceConfigDialog.BlizOptions = newOpt
|
||||||
else
|
else
|
||||||
AceConfigDialog.BlizOptions = AceConfigDialog.BlizOptions or {}
|
AceConfigDialog.BlizOptions = AceConfigDialog.BlizOptions or {}
|
||||||
end
|
end
|
||||||
@ -1979,6 +1970,7 @@ end
|
|||||||
-- @param parent The parent to use in the interface options tree.
|
-- @param parent The parent to use in the interface options tree.
|
||||||
-- @param ... The path in the options table to feed into the interface options panel.
|
-- @param ... The path in the options table to feed into the interface options panel.
|
||||||
-- @return The reference to the frame registered into the Interface Options.
|
-- @return The reference to the frame registered into the Interface Options.
|
||||||
|
-- @return The category ID to pass to Settings.OpenToCategory (or InterfaceOptionsFrame_OpenToCategory)
|
||||||
function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
||||||
local BlizOptions = AceConfigDialog.BlizOptions
|
local BlizOptions = AceConfigDialog.BlizOptions
|
||||||
|
|
||||||
@ -1994,7 +1986,6 @@ function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
|||||||
if not BlizOptions[appName][key] then
|
if not BlizOptions[appName][key] then
|
||||||
local group = gui:Create("BlizOptionsGroup")
|
local group = gui:Create("BlizOptionsGroup")
|
||||||
BlizOptions[appName][key] = group
|
BlizOptions[appName][key] = group
|
||||||
group:SetName(name or appName, parent)
|
|
||||||
|
|
||||||
group:SetTitle(name or appName)
|
group:SetTitle(name or appName)
|
||||||
group:SetUserData("appName", appName)
|
group:SetUserData("appName", appName)
|
||||||
@ -2007,8 +1998,30 @@ function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
|||||||
end
|
end
|
||||||
group:SetCallback("OnShow", FeedToBlizPanel)
|
group:SetCallback("OnShow", FeedToBlizPanel)
|
||||||
group:SetCallback("OnHide", ClearBlizPanel)
|
group:SetCallback("OnHide", ClearBlizPanel)
|
||||||
InterfaceOptions_AddCategory(group.frame)
|
if Settings and Settings.RegisterCanvasLayoutCategory then
|
||||||
return group.frame
|
local categoryName = name or appName
|
||||||
|
if parent then
|
||||||
|
local category = Settings.GetCategory(parent)
|
||||||
|
if not category then
|
||||||
|
error(("The parent category '%s' was not found"):format(parent), 2)
|
||||||
|
end
|
||||||
|
local subcategory = Settings.RegisterCanvasLayoutSubcategory(category, group.frame, categoryName)
|
||||||
|
|
||||||
|
-- force the generated ID to be used for subcategories, as these can have very simple names like "Profiles"
|
||||||
|
group:SetName(subcategory.ID, parent)
|
||||||
|
else
|
||||||
|
local category = Settings.RegisterCanvasLayoutCategory(group.frame, categoryName)
|
||||||
|
-- using appName here would be cleaner, but would not be 100% compatible
|
||||||
|
-- but for top-level categories it should be fine, as these are typically addon names
|
||||||
|
category.ID = categoryName
|
||||||
|
group:SetName(categoryName, parent)
|
||||||
|
Settings.RegisterAddOnCategory(category)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
group:SetName(name or appName, parent)
|
||||||
|
InterfaceOptions_AddCategory(group.frame)
|
||||||
|
end
|
||||||
|
return group.frame, group.frame.name
|
||||||
else
|
else
|
||||||
error(("%s has already been added to the Blizzard Options Window with the given path"):format(appName), 2)
|
error(("%s has already been added to the Blizzard Options Window with the given path"):format(appName), 2)
|
||||||
end
|
end
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
|
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigRegistry-3.0
|
-- @name AceConfigRegistry-3.0
|
||||||
-- @release $Id: AceConfigRegistry-3.0.lua 1207 2019-06-23 12:08:33Z nevcairiel $
|
-- @release $Id: AceConfigRegistry-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $
|
||||||
local CallbackHandler = LibStub("CallbackHandler-1.0")
|
local CallbackHandler = LibStub("CallbackHandler-1.0")
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceConfigRegistry-3.0", 20
|
local MAJOR, MINOR = "AceConfigRegistry-3.0", 21
|
||||||
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not AceConfigRegistry then return end
|
if not AceConfigRegistry then return end
|
||||||
@ -83,6 +83,7 @@ local basekeys={
|
|||||||
dialogHidden=optmethodbool,
|
dialogHidden=optmethodbool,
|
||||||
dropdownHidden=optmethodbool,
|
dropdownHidden=optmethodbool,
|
||||||
cmdHidden=optmethodbool,
|
cmdHidden=optmethodbool,
|
||||||
|
tooltipHyperlink=optstringfunc,
|
||||||
icon=optstringnumberfunc,
|
icon=optstringnumberfunc,
|
||||||
iconCoords=optmethodtable,
|
iconCoords=optmethodtable,
|
||||||
handler=opttable,
|
handler=opttable,
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
-- end
|
-- end
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceDB-3.0.lua
|
-- @name AceDB-3.0.lua
|
||||||
-- @release $Id: AceDB-3.0.lua 1217 2019-07-11 03:06:18Z funkydude $
|
-- @release $Id: AceDB-3.0.lua 1306 2023-06-23 14:55:09Z nevcairiel $
|
||||||
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 27
|
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 28
|
||||||
local AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)
|
local AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)
|
||||||
|
|
||||||
if not AceDB then return end -- No upgrade needed
|
if not AceDB then return end -- No upgrade needed
|
||||||
@ -53,10 +53,6 @@ local setmetatable, rawset, rawget = setmetatable, rawset, rawget
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: LibStub
|
|
||||||
|
|
||||||
AceDB.db_registry = AceDB.db_registry or {}
|
AceDB.db_registry = AceDB.db_registry or {}
|
||||||
AceDB.frame = AceDB.frame or CreateFrame("Frame")
|
AceDB.frame = AceDB.frame or CreateFrame("Frame")
|
||||||
|
|
||||||
@ -98,11 +94,11 @@ local function copyDefaults(dest, src)
|
|||||||
-- This is a metatable used for table defaults
|
-- This is a metatable used for table defaults
|
||||||
local mt = {
|
local mt = {
|
||||||
-- This handles the lookup and creation of new subtables
|
-- This handles the lookup and creation of new subtables
|
||||||
__index = function(t,k)
|
__index = function(t,k2)
|
||||||
if k == nil then return nil end
|
if k2 == nil then return nil end
|
||||||
local tbl = {}
|
local tbl = {}
|
||||||
copyDefaults(tbl, v)
|
copyDefaults(tbl, v)
|
||||||
rawset(t, k, tbl)
|
rawset(t, k2, tbl)
|
||||||
return tbl
|
return tbl
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@ -115,7 +111,7 @@ local function copyDefaults(dest, src)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- Values are not tables, so this is just a simple return
|
-- Values are not tables, so this is just a simple return
|
||||||
local mt = {__index = function(t,k) return k~=nil and v or nil end}
|
local mt = {__index = function(t,k2) return k2~=nil and v or nil end}
|
||||||
setmetatable(dest, mt)
|
setmetatable(dest, mt)
|
||||||
end
|
end
|
||||||
elseif type(v) == "table" then
|
elseif type(v) == "table" then
|
||||||
@ -264,7 +260,7 @@ local factionrealmKey = factionKey .. " - " .. realmKey
|
|||||||
local localeKey = GetLocale():lower()
|
local localeKey = GetLocale():lower()
|
||||||
|
|
||||||
local regionTable = { "US", "KR", "EU", "TW", "CN" }
|
local regionTable = { "US", "KR", "EU", "TW", "CN" }
|
||||||
local regionKey = regionTable[GetCurrentRegion()]
|
local regionKey = regionTable[GetCurrentRegion()] or GetCurrentRegionName() or "TR"
|
||||||
local factionrealmregionKey = factionrealmKey .. " - " .. regionKey
|
local factionrealmregionKey = factionrealmKey .. " - " .. regionKey
|
||||||
|
|
||||||
-- Actual database initialization function
|
-- Actual database initialization function
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles.
|
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceDBOptions-3.0
|
-- @name AceDBOptions-3.0
|
||||||
-- @release $Id: AceDBOptions-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceDBOptions-3.0.lua 1304 2023-05-19 19:50:10Z nevcairiel $
|
||||||
local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15
|
local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15
|
||||||
local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR)
|
local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR)
|
||||||
|
|
||||||
@ -13,10 +13,6 @@ local pairs, next = pairs, next
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local UnitClass = UnitClass
|
local UnitClass = UnitClass
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: NORMAL_FONT_COLOR_CODE, FONT_COLOR_CODE_CLOSE
|
|
||||||
|
|
||||||
AceDBOptions.optionTables = AceDBOptions.optionTables or {}
|
AceDBOptions.optionTables = AceDBOptions.optionTables or {}
|
||||||
AceDBOptions.handlers = AceDBOptions.handlers or {}
|
AceDBOptions.handlers = AceDBOptions.handlers or {}
|
||||||
|
|
||||||
@ -88,25 +84,25 @@ elseif LOCALE == "frFR" then
|
|||||||
L["reset_desc"] = "Réinitialise le profil actuel au cas où votre configuration est corrompue ou si vous voulez tout simplement faire table rase."
|
L["reset_desc"] = "Réinitialise le profil actuel au cas où votre configuration est corrompue ou si vous voulez tout simplement faire table rase."
|
||||||
L["reset_sub"] = "Réinitialise le profil actuel avec les paramètres par défaut."
|
L["reset_sub"] = "Réinitialise le profil actuel avec les paramètres par défaut."
|
||||||
elseif LOCALE == "koKR" then
|
elseif LOCALE == "koKR" then
|
||||||
L["choose"] = "저장 중인 프로필"
|
L["choose"] = "기존 프로필"
|
||||||
L["choose_desc"] = "입력창에 새로운 이름을 입력하거나 저장 중인 프로필 중 하나를 선택하여 새로운 프로필을 만들 수 있습니다."
|
L["choose_desc"] = "편집 상자에 이름을 입력하여 새로운 프로필을 만들거나 이미 존재하는 프로필 중 하나를 선택할 수 있습니다."
|
||||||
L["choose_sub"] = "현재 이용할 수 있는 프로필 중 하나를 선택합니다."
|
L["choose_sub"] = "현재 이용할 수 있는 프로필 중 하나를 선택합니다."
|
||||||
L["copy"] = "복사해오기"
|
L["copy"] = "복사해 올 프로필"
|
||||||
L["copy_desc"] = "현재 사용 중인 프로필에 선택한 프로필의 설정을 복사합니다."
|
L["copy_desc"] = "기존 프로필의 설정을 현재 활성화된 프로필로 복사합니다."
|
||||||
L["current"] = "현재 프로필:"
|
L["current"] = "현재 프로필:"
|
||||||
L["default"] = "기본값"
|
L["default"] = "기본값"
|
||||||
L["delete"] = "프로필 삭제"
|
L["delete"] = "프로필 삭제"
|
||||||
L["delete_confirm"] = "정말로 선택한 프로필을 삭제할까요?"
|
L["delete_confirm"] = "선택한 프로필을 삭제하시겠습니까?"
|
||||||
L["delete_desc"] = "저장 공간 절약과 SavedVariables 파일의 정리를 위해 데이터베이스에서 사용하지 않는 프로필을 삭제하세요."
|
L["delete_desc"] = "데이터베이스에서 기존 프로필과 사용하지 않는 프로필을 삭제하여 공간을 절약하고 SavedVariables 파일을 정리합니다."
|
||||||
L["delete_sub"] = "데이터베이스의 프로필을 삭제합니다."
|
L["delete_sub"] = "데이터베이스에서 프로필을 삭제합니다."
|
||||||
L["intro"] = "활성 데이터베이스 프로필을 변경할 수 있고, 각 캐릭터 별로 다른 설정을 할 수 있습니다."
|
L["intro"] = "활성 데이터베이스 프로필을 변경할 수 있으며, 모든 캐릭터마다 서로 다른 설정을 지정할 수 있습니다."
|
||||||
L["new"] = "새로운 프로필"
|
L["new"] = "새로운 프로필"
|
||||||
L["new_sub"] = "새로운 프로필을 만듭니다."
|
L["new_sub"] = "비어 있는 프로필을 새로 만듭니다."
|
||||||
L["profiles"] = "프로필"
|
L["profiles"] = "프로필"
|
||||||
L["profiles_sub"] = "프로필 관리"
|
L["profiles_sub"] = "프로필 관리"
|
||||||
L["reset"] = "프로필 초기화"
|
L["reset"] = "프로필 재설정"
|
||||||
L["reset_desc"] = "설정이 깨졌거나 처음부터 다시 설정을 원하는 경우, 현재 프로필을 기본값으로 초기화하세요."
|
L["reset_desc"] = "구성이 손상되었거나 처음부터 다시 시작하고 싶은 경우 현재 프로필을 기본값으로 재설정하세요."
|
||||||
L["reset_sub"] = "현재 프로필을 기본값으로 초기화합니다"
|
L["reset_sub"] = "현재 프로필을 기본값으로 재설정합니다"
|
||||||
elseif LOCALE == "esES" or LOCALE == "esMX" then
|
elseif LOCALE == "esES" or LOCALE == "esMX" then
|
||||||
L["choose"] = "Perfiles existentes"
|
L["choose"] = "Perfiles existentes"
|
||||||
L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes."
|
L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes."
|
||||||
@ -170,31 +166,31 @@ elseif LOCALE == "zhCN" then
|
|||||||
elseif LOCALE == "ruRU" then
|
elseif LOCALE == "ruRU" then
|
||||||
L["choose"] = "Существующие профили"
|
L["choose"] = "Существующие профили"
|
||||||
L["choose_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей."
|
L["choose_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей."
|
||||||
L["choose_sub"] = "Выбор одиного из уже доступных профилей"
|
L["choose_sub"] = "Выбор одного из уже доступных профилей."
|
||||||
L["copy"] = "Скопировать из"
|
L["copy"] = "Скопировать из"
|
||||||
L["copy_desc"] = "Скопировать настройки из выбранного профиля в активный."
|
L["copy_desc"] = "Копирование настроек из выбранного профиля в активный."
|
||||||
L["current"] = "Текущий профиль:"
|
L["current"] = "Текущий профиль:"
|
||||||
L["default"] = "По умолчанию"
|
L["default"] = "По умолчанию"
|
||||||
L["delete"] = "Удалить профиль"
|
L["delete"] = "Удалить профиль"
|
||||||
L["delete_confirm"] = "Вы уверены, что вы хотите удалить выбранный профиль?"
|
L["delete_confirm"] = "Вы уверены, что хотите удалить выбранный профиль?"
|
||||||
L["delete_desc"] = "Удалить существующий и неиспользуемый профиль из БД для сохранения места, и очистить SavedVariables файл."
|
L["delete_desc"] = "Удаление существующего и неиспользуемого профиля из базы данных для сохранения места, и очистка файла SavedVariables."
|
||||||
L["delete_sub"] = "Удаление профиля из БД"
|
L["delete_sub"] = "Удаление профиля из базы данных."
|
||||||
L["intro"] = "Изменяя активный профиль, вы можете задать различные настройки модификаций для каждого персонажа."
|
L["intro"] = "Изменяя активный профиль, Вы можете задать разные настройки для каждого персонажа."
|
||||||
L["new"] = "Новый"
|
L["new"] = "Новый"
|
||||||
L["new_sub"] = "Создать новый чистый профиль"
|
L["new_sub"] = "Создание нового чистого профиля."
|
||||||
L["profiles"] = "Профили"
|
L["profiles"] = "Профили"
|
||||||
L["profiles_sub"] = "Управление профилями"
|
L["profiles_sub"] = "Управление профилями"
|
||||||
L["reset"] = "Сброс профиля"
|
L["reset"] = "Сбросить профиль"
|
||||||
L["reset_desc"] = "Сбросить текущий профиль к стандартным настройкам, если ваша конфигурация испорчена или вы хотите настроить всё заново."
|
L["reset_desc"] = "Сброс текущего профиля к стандартным настройкам, если Ваша конфигурация испорчена или Вы хотите настроить все заново."
|
||||||
L["reset_sub"] = "Сброс текущего профиля на стандартный"
|
L["reset_sub"] = "Сброс текущего профиля на стандартный"
|
||||||
elseif LOCALE == "itIT" then
|
elseif LOCALE == "itIT" then
|
||||||
L["choose"] = "Profili Esistenti"
|
L["choose"] = "Profili Esistenti"
|
||||||
L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili già esistenti."
|
L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili già esistenti."
|
||||||
L["choose_sub"] = "Seleziona uno dei profili attualmente disponibili."
|
L["choose_sub"] = "Seleziona uno dei profili attualmente disponibili."
|
||||||
L["copy"] = "Copia Da"
|
L["copy"] = "Copia Da"
|
||||||
L["copy_desc"] = "Copia le impostazioni da un profilo esistente, nel profilo attivo in questo momento."
|
L["copy_desc"] = "Copia le impostazioni da un profilo esistente nel profilo attivo in questo momento."
|
||||||
L["current"] = "Profilo Attivo:"
|
L["current"] = "Profilo Attivo:"
|
||||||
L["default"] = "Standard"
|
L["default"] = "Predefinito"
|
||||||
L["delete"] = "Cancella un Profilo"
|
L["delete"] = "Cancella un Profilo"
|
||||||
L["delete_confirm"] = "Sei sicuro di voler cancellare il profilo selezionato?"
|
L["delete_confirm"] = "Sei sicuro di voler cancellare il profilo selezionato?"
|
||||||
L["delete_desc"] = "Cancella i profili non utilizzati dal database per risparmiare spazio e mantenere puliti i file di configurazione SavedVariables."
|
L["delete_desc"] = "Cancella i profili non utilizzati dal database per risparmiare spazio e mantenere puliti i file di configurazione SavedVariables."
|
||||||
|
@ -24,28 +24,22 @@
|
|||||||
-- f:AddChild(btn)
|
-- f:AddChild(btn)
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceGUI-3.0
|
-- @name AceGUI-3.0
|
||||||
-- @release $Id: AceGUI-3.0.lua 1231 2020-04-14 22:20:36Z nevcairiel $
|
-- @release $Id: AceGUI-3.0.lua 1288 2022-09-25 14:19:00Z funkehdude $
|
||||||
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41
|
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41
|
||||||
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
|
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
|
||||||
|
|
||||||
if not AceGUI then return end -- No upgrade needed
|
if not AceGUI then return end -- No upgrade needed
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local tinsert = table.insert
|
local tinsert, wipe = table.insert, table.wipe
|
||||||
local select, pairs, next, type = select, pairs, next, type
|
local select, pairs, next, type = select, pairs, next, type
|
||||||
local error, assert = error, assert
|
local error, assert = error, assert
|
||||||
local setmetatable, rawget = setmetatable, rawget
|
local setmetatable, rawget = setmetatable, rawget
|
||||||
local math_max = math.max
|
local math_max, math_min, math_ceil = math.max, math.min, math.ceil
|
||||||
|
|
||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local UIParent = UIParent
|
local UIParent = UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: geterrorhandler, LibStub
|
|
||||||
|
|
||||||
--local con = LibStub("AceConsole-3.0",true)
|
|
||||||
|
|
||||||
AceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {}
|
AceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {}
|
||||||
AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {}
|
AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {}
|
||||||
AceGUI.WidgetBase = AceGUI.WidgetBase or {}
|
AceGUI.WidgetBase = AceGUI.WidgetBase or {}
|
||||||
@ -94,38 +88,38 @@ do
|
|||||||
AceGUI.objPools = AceGUI.objPools or {}
|
AceGUI.objPools = AceGUI.objPools or {}
|
||||||
local objPools = AceGUI.objPools
|
local objPools = AceGUI.objPools
|
||||||
--Returns a new instance, if none are available either returns a new table or calls the given contructor
|
--Returns a new instance, if none are available either returns a new table or calls the given contructor
|
||||||
function newWidget(type)
|
function newWidget(widgetType)
|
||||||
if not WidgetRegistry[type] then
|
if not WidgetRegistry[widgetType] then
|
||||||
error("Attempt to instantiate unknown widget type", 2)
|
error("Attempt to instantiate unknown widget type", 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not objPools[type] then
|
if not objPools[widgetType] then
|
||||||
objPools[type] = {}
|
objPools[widgetType] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
local newObj = next(objPools[type])
|
local newObj = next(objPools[widgetType])
|
||||||
if not newObj then
|
if not newObj then
|
||||||
newObj = WidgetRegistry[type]()
|
newObj = WidgetRegistry[widgetType]()
|
||||||
newObj.AceGUIWidgetVersion = WidgetVersions[type]
|
newObj.AceGUIWidgetVersion = WidgetVersions[widgetType]
|
||||||
else
|
else
|
||||||
objPools[type][newObj] = nil
|
objPools[widgetType][newObj] = nil
|
||||||
-- if the widget is older then the latest, don't even try to reuse it
|
-- if the widget is older then the latest, don't even try to reuse it
|
||||||
-- just forget about it, and grab a new one.
|
-- just forget about it, and grab a new one.
|
||||||
if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[type] then
|
if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[widgetType] then
|
||||||
return newWidget(type)
|
return newWidget(widgetType)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return newObj
|
return newObj
|
||||||
end
|
end
|
||||||
-- Releases an instance to the Pool
|
-- Releases an instance to the Pool
|
||||||
function delWidget(obj,type)
|
function delWidget(obj,widgetType)
|
||||||
if not objPools[type] then
|
if not objPools[widgetType] then
|
||||||
objPools[type] = {}
|
objPools[widgetType] = {}
|
||||||
end
|
end
|
||||||
if objPools[type][obj] then
|
if objPools[widgetType][obj] then
|
||||||
error("Attempt to Release Widget that is already released", 2)
|
error("Attempt to Release Widget that is already released", 2)
|
||||||
end
|
end
|
||||||
objPools[type][obj] = true
|
objPools[widgetType][obj] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -141,9 +135,9 @@ end
|
|||||||
-- OnAcquire function on it, before returning.
|
-- OnAcquire function on it, before returning.
|
||||||
-- @param type The type of the widget.
|
-- @param type The type of the widget.
|
||||||
-- @return The newly created widget.
|
-- @return The newly created widget.
|
||||||
function AceGUI:Create(type)
|
function AceGUI:Create(widgetType)
|
||||||
if WidgetRegistry[type] then
|
if WidgetRegistry[widgetType] then
|
||||||
local widget = newWidget(type)
|
local widget = newWidget(widgetType)
|
||||||
|
|
||||||
if rawget(widget, "Acquire") then
|
if rawget(widget, "Acquire") then
|
||||||
widget.OnAcquire = widget.Acquire
|
widget.OnAcquire = widget.Acquire
|
||||||
@ -161,7 +155,7 @@ function AceGUI:Create(type)
|
|||||||
if widget.OnAcquire then
|
if widget.OnAcquire then
|
||||||
widget:OnAcquire()
|
widget:OnAcquire()
|
||||||
else
|
else
|
||||||
error(("Widget type %s doesn't supply an OnAcquire Function"):format(type))
|
error(("Widget type %s doesn't supply an OnAcquire Function"):format(widgetType))
|
||||||
end
|
end
|
||||||
-- Set the default Layout ("List")
|
-- Set the default Layout ("List")
|
||||||
safecall(widget.SetLayout, widget, "List")
|
safecall(widget.SetLayout, widget, "List")
|
||||||
@ -589,25 +583,25 @@ AceGUI.counts = AceGUI.counts or {}
|
|||||||
-- This is used by widgets that require a named frame, e.g. when a Blizzard
|
-- This is used by widgets that require a named frame, e.g. when a Blizzard
|
||||||
-- Template requires it.
|
-- Template requires it.
|
||||||
-- @param type The widget type
|
-- @param type The widget type
|
||||||
function AceGUI:GetNextWidgetNum(type)
|
function AceGUI:GetNextWidgetNum(widgetType)
|
||||||
if not self.counts[type] then
|
if not self.counts[widgetType] then
|
||||||
self.counts[type] = 0
|
self.counts[widgetType] = 0
|
||||||
end
|
end
|
||||||
self.counts[type] = self.counts[type] + 1
|
self.counts[widgetType] = self.counts[widgetType] + 1
|
||||||
return self.counts[type]
|
return self.counts[widgetType]
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Return the number of created widgets for this type.
|
--- Return the number of created widgets for this type.
|
||||||
-- In contrast to GetNextWidgetNum, the number is not incremented.
|
-- In contrast to GetNextWidgetNum, the number is not incremented.
|
||||||
-- @param type The widget type
|
-- @param widgetType The widget type
|
||||||
function AceGUI:GetWidgetCount(type)
|
function AceGUI:GetWidgetCount(widgetType)
|
||||||
return self.counts[type] or 0
|
return self.counts[widgetType] or 0
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Return the version of the currently registered widget type.
|
--- Return the version of the currently registered widget type.
|
||||||
-- @param type The widget type
|
-- @param widgetType The widget type
|
||||||
function AceGUI:GetWidgetVersion(type)
|
function AceGUI:GetWidgetVersion(widgetType)
|
||||||
return WidgetVersions[type]
|
return WidgetVersions[widgetType]
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
@ -770,7 +764,6 @@ AceGUI:RegisterLayout("Flow",
|
|||||||
|
|
||||||
usedwidth = 0
|
usedwidth = 0
|
||||||
rowstart = frame
|
rowstart = frame
|
||||||
rowstartoffset = frameoffset
|
|
||||||
|
|
||||||
if child.DoLayout then
|
if child.DoLayout then
|
||||||
child:DoLayout()
|
child:DoLayout()
|
||||||
@ -813,7 +806,8 @@ local GetCellAlign = function (dir, tableObj, colObj, cellObj, cell, child)
|
|||||||
or colObj and (colObj["align" .. dir] or colObj.align)
|
or colObj and (colObj["align" .. dir] or colObj.align)
|
||||||
or tableObj["align" .. dir] or tableObj.align
|
or tableObj["align" .. dir] or tableObj.align
|
||||||
or "CENTERLEFT"
|
or "CENTERLEFT"
|
||||||
local child, cell, val = child or 0, cell or 0, nil
|
local val
|
||||||
|
child, cell = child or 0, cell or 0
|
||||||
|
|
||||||
if type(fn) == "string" then
|
if type(fn) == "string" then
|
||||||
fn = fn:lower()
|
fn = fn:lower()
|
||||||
@ -827,7 +821,7 @@ local GetCellAlign = function (dir, tableObj, colObj, cellObj, cell, child)
|
|||||||
val = fn
|
val = fn
|
||||||
end
|
end
|
||||||
|
|
||||||
return fn, max(0, min(val, cell))
|
return fn, math_max(0, math_min(val, cell))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Get width or height for multiple cells combined
|
-- Get width or height for multiple cells combined
|
||||||
@ -836,7 +830,7 @@ local GetCellDimension = function (dir, laneDim, from, to, space)
|
|||||||
for cell=from,to do
|
for cell=from,to do
|
||||||
dim = dim + (laneDim[cell] or 0)
|
dim = dim + (laneDim[cell] or 0)
|
||||||
end
|
end
|
||||||
return dim + max(0, to - from) * (space or 0)
|
return dim + math_max(0, to - from) * (space or 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[ Options
|
--[[ Options
|
||||||
@ -882,7 +876,7 @@ AceGUI:RegisterLayout("Table",
|
|||||||
repeat
|
repeat
|
||||||
n = n + 1
|
n = n + 1
|
||||||
local col = (n - 1) % #cols + 1
|
local col = (n - 1) % #cols + 1
|
||||||
local row = ceil(n / #cols)
|
local row = math_ceil(n / #cols)
|
||||||
local rowspan = rowspans[col]
|
local rowspan = rowspans[col]
|
||||||
local cell = rowspan and rowspan.child or child
|
local cell = rowspan and rowspan.child or child
|
||||||
local cellObj = cell:GetUserData("cell")
|
local cellObj = cell:GetUserData("cell")
|
||||||
@ -898,7 +892,7 @@ AceGUI:RegisterLayout("Table",
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Colspan
|
-- Colspan
|
||||||
local colspan = max(0, min((cellObj and cellObj.colspan or 1) - 1, #cols - col))
|
local colspan = math_max(0, math_min((cellObj and cellObj.colspan or 1) - 1, #cols - col))
|
||||||
n = n + colspan
|
n = n + colspan
|
||||||
|
|
||||||
-- Place the cell
|
-- Place the cell
|
||||||
@ -915,7 +909,7 @@ AceGUI:RegisterLayout("Table",
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local rows = ceil(n / #cols)
|
local rows = math_ceil(n / #cols)
|
||||||
|
|
||||||
-- Determine fixed size cols and collect weights
|
-- Determine fixed size cols and collect weights
|
||||||
local extantH, totalWeight = totalH, 0
|
local extantH, totalWeight = totalH, 0
|
||||||
@ -940,16 +934,16 @@ AceGUI:RegisterLayout("Table",
|
|||||||
f:ClearAllPoints()
|
f:ClearAllPoints()
|
||||||
local childH = f:GetWidth() or 0
|
local childH = f:GetWidth() or 0
|
||||||
|
|
||||||
laneH[col] = max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH))
|
laneH[col] = math_max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
laneH[col] = max(colObj.min or colObj[1] or 0, min(laneH[col], colObj.max or colObj[2] or laneH[col]))
|
laneH[col] = math_max(colObj.min or colObj[1] or 0, math_min(laneH[col], colObj.max or colObj[2] or laneH[col]))
|
||||||
else
|
else
|
||||||
-- Rel./Abs. width
|
-- Rel./Abs. width
|
||||||
laneH[col] = colObj.width < 1 and colObj.width * totalH or colObj.width
|
laneH[col] = colObj.width < 1 and colObj.width * totalH or colObj.width
|
||||||
end
|
end
|
||||||
extantH = max(0, extantH - laneH[col])
|
extantH = math_max(0, extantH - laneH[col])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -988,7 +982,7 @@ AceGUI:RegisterLayout("Table",
|
|||||||
child:DoLayout()
|
child:DoLayout()
|
||||||
end
|
end
|
||||||
|
|
||||||
rowV = max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV))
|
rowV = math_max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
BlizOptionsGroup Container
|
BlizOptionsGroup Container
|
||||||
Simple container widget for the integration of AceGUI into the Blizzard Interface Options
|
Simple container widget for the integration of AceGUI into the Blizzard Interface Options
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "BlizOptionsGroup", 21
|
local Type, Version = "BlizOptionsGroup", 26
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ local methods = {
|
|||||||
Constructor
|
Constructor
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local frame = CreateFrame("Frame")
|
local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer)
|
||||||
frame:Hide()
|
frame:Hide()
|
||||||
|
|
||||||
-- support functions for the Blizzard Interface Options
|
-- support functions for the Blizzard Interface Options
|
||||||
@ -108,6 +108,11 @@ local function Constructor()
|
|||||||
frame.default = default
|
frame.default = default
|
||||||
frame.refresh = refresh
|
frame.refresh = refresh
|
||||||
|
|
||||||
|
-- 10.0 support function aliases (cancel has been removed)
|
||||||
|
frame.OnCommit = okay
|
||||||
|
frame.OnDefault = default
|
||||||
|
frame.OnRefresh = refresh
|
||||||
|
|
||||||
frame:SetScript("OnHide", OnHide)
|
frame:SetScript("OnHide", OnHide)
|
||||||
frame:SetScript("OnShow", OnShow)
|
frame:SetScript("OnShow", OnShow)
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ local function Constructor()
|
|||||||
dropdown.frame:Show()
|
dropdown.frame:Show()
|
||||||
dropdown:SetLabel("")
|
dropdown:SetLabel("")
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
border:SetPoint("TOPLEFT", 0, -26)
|
border:SetPoint("TOPLEFT", 0, -26)
|
||||||
border:SetPoint("BOTTOMRIGHT", 0, 3)
|
border:SetPoint("BOTTOMRIGHT", 0, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Frame Container
|
Frame Container
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Frame", 27
|
local Type, Version = "Frame", 30
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -13,10 +13,6 @@ local wipe = table.wipe
|
|||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: CLOSE
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Scripts
|
Scripts
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -83,6 +79,7 @@ local methods = {
|
|||||||
["OnAcquire"] = function(self)
|
["OnAcquire"] = function(self)
|
||||||
self.frame:SetParent(UIParent)
|
self.frame:SetParent(UIParent)
|
||||||
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||||
|
self.frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
self:SetTitle()
|
self:SetTitle()
|
||||||
self:SetStatusText()
|
self:SetStatusText()
|
||||||
self:ApplyStatus()
|
self:ApplyStatus()
|
||||||
@ -179,16 +176,21 @@ local PaneBackdrop = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local frame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local frame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate")
|
||||||
frame:Hide()
|
frame:Hide()
|
||||||
|
|
||||||
frame:EnableMouse(true)
|
frame:EnableMouse(true)
|
||||||
frame:SetMovable(true)
|
frame:SetMovable(true)
|
||||||
frame:SetResizable(true)
|
frame:SetResizable(true)
|
||||||
frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||||
|
frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
frame:SetBackdrop(FrameBackdrop)
|
frame:SetBackdrop(FrameBackdrop)
|
||||||
frame:SetBackdropColor(0, 0, 0, 1)
|
frame:SetBackdropColor(0, 0, 0, 1)
|
||||||
frame:SetMinResize(400, 200)
|
if frame.SetResizeBounds then -- WoW 10.0
|
||||||
|
frame:SetResizeBounds(400, 200)
|
||||||
|
else
|
||||||
|
frame:SetMinResize(400, 200)
|
||||||
|
end
|
||||||
frame:SetToplevel(true)
|
frame:SetToplevel(true)
|
||||||
frame:SetScript("OnShow", Frame_OnShow)
|
frame:SetScript("OnShow", Frame_OnShow)
|
||||||
frame:SetScript("OnHide", Frame_OnClose)
|
frame:SetScript("OnHide", Frame_OnClose)
|
||||||
@ -201,7 +203,7 @@ local function Constructor()
|
|||||||
closebutton:SetWidth(100)
|
closebutton:SetWidth(100)
|
||||||
closebutton:SetText(CLOSE)
|
closebutton:SetText(CLOSE)
|
||||||
|
|
||||||
local statusbg = CreateFrame("Button", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local statusbg = CreateFrame("Button", nil, frame, "BackdropTemplate")
|
||||||
statusbg:SetPoint("BOTTOMLEFT", 15, 15)
|
statusbg:SetPoint("BOTTOMLEFT", 15, 15)
|
||||||
statusbg:SetPoint("BOTTOMRIGHT", -132, 15)
|
statusbg:SetPoint("BOTTOMRIGHT", -132, 15)
|
||||||
statusbg:SetHeight(24)
|
statusbg:SetHeight(24)
|
||||||
@ -269,7 +271,7 @@ local function Constructor()
|
|||||||
line2:SetHeight(8)
|
line2:SetHeight(8)
|
||||||
line2:SetPoint("BOTTOMRIGHT", -8, 8)
|
line2:SetPoint("BOTTOMRIGHT", -8, 8)
|
||||||
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border
|
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border
|
||||||
local x = 0.1 * 8/17
|
x = 0.1 * 8/17
|
||||||
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
||||||
|
|
||||||
local sizer_s = CreateFrame("Frame", nil, frame)
|
local sizer_s = CreateFrame("Frame", nil, frame)
|
||||||
|
@ -75,7 +75,7 @@ local function Constructor()
|
|||||||
titletext:SetJustifyH("LEFT")
|
titletext:SetJustifyH("LEFT")
|
||||||
titletext:SetHeight(18)
|
titletext:SetHeight(18)
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
border:SetPoint("TOPLEFT", 0, -17)
|
border:SetPoint("TOPLEFT", 0, -17)
|
||||||
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -2,22 +2,18 @@
|
|||||||
TabGroup Container
|
TabGroup Container
|
||||||
Container that uses tabs on top to switch between groups.
|
Container that uses tabs on top to switch between groups.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "TabGroup", 37
|
local Type, Version = "TabGroup", 38
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, wipe
|
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, table.wipe
|
||||||
|
|
||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: PanelTemplates_TabResize, PanelTemplates_SetDisabledTabState, PanelTemplates_SelectTab, PanelTemplates_DeselectTab
|
|
||||||
|
|
||||||
-- local upvalue storage used by BuildTabs
|
-- local upvalue storage used by BuildTabs
|
||||||
local widths = {}
|
local widths = {}
|
||||||
local rowwidths = {}
|
local rowwidths = {}
|
||||||
@ -26,6 +22,143 @@ local rowends = {}
|
|||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
|
|
||||||
|
local function PanelTemplates_TabResize(tab, padding, absoluteSize, minWidth, maxWidth, absoluteTextSize)
|
||||||
|
local tabName = tab:GetName();
|
||||||
|
|
||||||
|
local buttonMiddle = tab.Middle or tab.middleTexture or _G[tabName.."Middle"];
|
||||||
|
local buttonMiddleDisabled = tab.MiddleDisabled or (tabName and _G[tabName.."MiddleDisabled"]);
|
||||||
|
local left = tab.Left or tab.leftTexture or _G[tabName.."Left"];
|
||||||
|
local sideWidths = 2 * left:GetWidth();
|
||||||
|
local tabText = tab.Text or _G[tab:GetName().."Text"];
|
||||||
|
local highlightTexture = tab.HighlightTexture or (tabName and _G[tabName.."HighlightTexture"]);
|
||||||
|
|
||||||
|
local width, tabWidth;
|
||||||
|
local textWidth;
|
||||||
|
if ( absoluteTextSize ) then
|
||||||
|
textWidth = absoluteTextSize;
|
||||||
|
else
|
||||||
|
tabText:SetWidth(0);
|
||||||
|
textWidth = tabText:GetWidth();
|
||||||
|
end
|
||||||
|
-- If there's an absolute size specified then use it
|
||||||
|
if ( absoluteSize ) then
|
||||||
|
if ( absoluteSize < sideWidths) then
|
||||||
|
width = 1;
|
||||||
|
tabWidth = sideWidths
|
||||||
|
else
|
||||||
|
width = absoluteSize - sideWidths;
|
||||||
|
tabWidth = absoluteSize
|
||||||
|
end
|
||||||
|
tabText:SetWidth(width);
|
||||||
|
else
|
||||||
|
-- Otherwise try to use padding
|
||||||
|
if ( padding ) then
|
||||||
|
width = textWidth + padding;
|
||||||
|
else
|
||||||
|
width = textWidth + 24;
|
||||||
|
end
|
||||||
|
-- If greater than the maxWidth then cap it
|
||||||
|
if ( maxWidth and width > maxWidth ) then
|
||||||
|
if ( padding ) then
|
||||||
|
width = maxWidth + padding;
|
||||||
|
else
|
||||||
|
width = maxWidth + 24;
|
||||||
|
end
|
||||||
|
tabText:SetWidth(width);
|
||||||
|
else
|
||||||
|
tabText:SetWidth(0);
|
||||||
|
end
|
||||||
|
if (minWidth and width < minWidth) then
|
||||||
|
width = minWidth;
|
||||||
|
end
|
||||||
|
tabWidth = width + sideWidths;
|
||||||
|
end
|
||||||
|
|
||||||
|
if ( buttonMiddle ) then
|
||||||
|
buttonMiddle:SetWidth(width);
|
||||||
|
end
|
||||||
|
if ( buttonMiddleDisabled ) then
|
||||||
|
buttonMiddleDisabled:SetWidth(width);
|
||||||
|
end
|
||||||
|
|
||||||
|
tab:SetWidth(tabWidth);
|
||||||
|
|
||||||
|
if ( highlightTexture ) then
|
||||||
|
highlightTexture:SetWidth(tabWidth);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function PanelTemplates_DeselectTab(tab)
|
||||||
|
local name = tab:GetName();
|
||||||
|
|
||||||
|
local left = tab.Left or _G[name.."Left"];
|
||||||
|
local middle = tab.Middle or _G[name.."Middle"];
|
||||||
|
local right = tab.Right or _G[name.."Right"];
|
||||||
|
left:Show();
|
||||||
|
middle:Show();
|
||||||
|
right:Show();
|
||||||
|
--tab:UnlockHighlight();
|
||||||
|
tab:Enable();
|
||||||
|
local text = tab.Text or _G[name.."Text"];
|
||||||
|
text:SetPoint("CENTER", tab, "CENTER", (tab.deselectedTextX or 0), (tab.deselectedTextY or 2));
|
||||||
|
|
||||||
|
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"];
|
||||||
|
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"];
|
||||||
|
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"];
|
||||||
|
leftDisabled:Hide();
|
||||||
|
middleDisabled:Hide();
|
||||||
|
rightDisabled:Hide();
|
||||||
|
end
|
||||||
|
|
||||||
|
local function PanelTemplates_SelectTab(tab)
|
||||||
|
local name = tab:GetName();
|
||||||
|
|
||||||
|
local left = tab.Left or _G[name.."Left"];
|
||||||
|
local middle = tab.Middle or _G[name.."Middle"];
|
||||||
|
local right = tab.Right or _G[name.."Right"];
|
||||||
|
left:Hide();
|
||||||
|
middle:Hide();
|
||||||
|
right:Hide();
|
||||||
|
--tab:LockHighlight();
|
||||||
|
tab:Disable();
|
||||||
|
tab:SetDisabledFontObject(GameFontHighlightSmall);
|
||||||
|
local text = tab.Text or _G[name.."Text"];
|
||||||
|
text:SetPoint("CENTER", tab, "CENTER", (tab.selectedTextX or 0), (tab.selectedTextY or -3));
|
||||||
|
|
||||||
|
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"];
|
||||||
|
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"];
|
||||||
|
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"];
|
||||||
|
leftDisabled:Show();
|
||||||
|
middleDisabled:Show();
|
||||||
|
rightDisabled:Show();
|
||||||
|
|
||||||
|
if GameTooltip:IsOwned(tab) then
|
||||||
|
GameTooltip:Hide();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function PanelTemplates_SetDisabledTabState(tab)
|
||||||
|
local name = tab:GetName();
|
||||||
|
local left = tab.Left or _G[name.."Left"];
|
||||||
|
local middle = tab.Middle or _G[name.."Middle"];
|
||||||
|
local right = tab.Right or _G[name.."Right"];
|
||||||
|
left:Show();
|
||||||
|
middle:Show();
|
||||||
|
right:Show();
|
||||||
|
--tab:UnlockHighlight();
|
||||||
|
tab:Disable();
|
||||||
|
tab.text = tab:GetText();
|
||||||
|
-- Gray out text
|
||||||
|
tab:SetDisabledFontObject(GameFontDisableSmall);
|
||||||
|
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"];
|
||||||
|
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"];
|
||||||
|
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"];
|
||||||
|
leftDisabled:Hide();
|
||||||
|
middleDisabled:Hide();
|
||||||
|
rightDisabled:Hide();
|
||||||
|
end
|
||||||
|
|
||||||
local function UpdateTabLook(frame)
|
local function UpdateTabLook(frame)
|
||||||
if frame.disabled then
|
if frame.disabled then
|
||||||
PanelTemplates_SetDisabledTabState(frame)
|
PanelTemplates_SetDisabledTabState(frame)
|
||||||
@ -103,11 +236,64 @@ local methods = {
|
|||||||
|
|
||||||
["CreateTab"] = function(self, id)
|
["CreateTab"] = function(self, id)
|
||||||
local tabname = ("AceGUITabGroup%dTab%d"):format(self.num, id)
|
local tabname = ("AceGUITabGroup%dTab%d"):format(self.num, id)
|
||||||
local tab = CreateFrame("Button", tabname, self.border, "OptionsFrameTabButtonTemplate")
|
local tab = CreateFrame("Button", tabname, self.border)
|
||||||
|
tab:SetSize(115, 24)
|
||||||
|
tab.deselectedTextY = -3
|
||||||
|
tab.selectedTextY = -2
|
||||||
|
|
||||||
|
tab.LeftDisabled = tab:CreateTexture(tabname .. "LeftDisabled", "BORDER")
|
||||||
|
tab.LeftDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab")
|
||||||
|
tab.LeftDisabled:SetSize(20, 24)
|
||||||
|
tab.LeftDisabled:SetPoint("BOTTOMLEFT", 0, -3)
|
||||||
|
tab.LeftDisabled:SetTexCoord(0, 0.15625, 0, 1.0)
|
||||||
|
|
||||||
|
tab.MiddleDisabled = tab:CreateTexture(tabname .. "MiddleDisabled", "BORDER")
|
||||||
|
tab.MiddleDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab")
|
||||||
|
tab.MiddleDisabled:SetSize(88, 24)
|
||||||
|
tab.MiddleDisabled:SetPoint("LEFT", tab.LeftDisabled, "RIGHT")
|
||||||
|
tab.MiddleDisabled:SetTexCoord(0.15625, 0.84375, 0, 1.0)
|
||||||
|
|
||||||
|
tab.RightDisabled = tab:CreateTexture(tabname .. "RightDisabled", "BORDER")
|
||||||
|
tab.RightDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab")
|
||||||
|
tab.RightDisabled:SetSize(20, 24)
|
||||||
|
tab.RightDisabled:SetPoint("LEFT", tab.MiddleDisabled, "RIGHT")
|
||||||
|
tab.RightDisabled:SetTexCoord(0.84375, 1.0, 0, 1.0)
|
||||||
|
|
||||||
|
tab.Left = tab:CreateTexture(tabname .. "Left", "BORDER")
|
||||||
|
tab.Left:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab")
|
||||||
|
tab.Left:SetSize(20, 24)
|
||||||
|
tab.Left:SetPoint("TOPLEFT")
|
||||||
|
tab.Left:SetTexCoord(0, 0.15625, 0, 1.0)
|
||||||
|
|
||||||
|
tab.Middle = tab:CreateTexture(tabname .. "Middle", "BORDER")
|
||||||
|
tab.Middle:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab")
|
||||||
|
tab.Middle:SetSize(88, 24)
|
||||||
|
tab.Middle:SetPoint("LEFT", tab.Left, "RIGHT")
|
||||||
|
tab.Middle:SetTexCoord(0.15625, 0.84375, 0, 1.0)
|
||||||
|
|
||||||
|
tab.Right = tab:CreateTexture(tabname .. "Right", "BORDER")
|
||||||
|
tab.Right:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab")
|
||||||
|
tab.Right:SetSize(20, 24)
|
||||||
|
tab.Right:SetPoint("LEFT", tab.Middle, "RIGHT")
|
||||||
|
tab.Right:SetTexCoord(0.84375, 1.0, 0, 1.0)
|
||||||
|
|
||||||
|
tab.Text = tab:CreateFontString(tabname .. "Text")
|
||||||
|
tab:SetFontString(tab.Text)
|
||||||
|
|
||||||
|
tab:SetNormalFontObject(GameFontNormalSmall)
|
||||||
|
tab:SetHighlightFontObject(GameFontHighlightSmall)
|
||||||
|
tab:SetDisabledFontObject(GameFontHighlightSmall)
|
||||||
|
tab:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD")
|
||||||
|
tab.HighlightTexture = tab:GetHighlightTexture()
|
||||||
|
tab.HighlightTexture:ClearAllPoints()
|
||||||
|
tab.HighlightTexture:SetPoint("LEFT", tab, "LEFT", 10, -4)
|
||||||
|
tab.HighlightTexture:SetPoint("RIGHT", tab, "RIGHT", -10, -4)
|
||||||
|
_G[tabname .. "HighlightTexture"] = tab.HighlightTexture
|
||||||
|
|
||||||
tab.obj = self
|
tab.obj = self
|
||||||
tab.id = id
|
tab.id = id
|
||||||
|
|
||||||
tab.text = _G[tabname .. "Text"]
|
tab.text = tab.Text -- compat
|
||||||
tab.text:ClearAllPoints()
|
tab.text:ClearAllPoints()
|
||||||
tab.text:SetPoint("LEFT", 14, -3)
|
tab.text:SetPoint("LEFT", 14, -3)
|
||||||
tab.text:SetPoint("RIGHT", -12, -3)
|
tab.text:SetPoint("RIGHT", -12, -3)
|
||||||
@ -316,7 +502,7 @@ local function Constructor()
|
|||||||
titletext:SetHeight(18)
|
titletext:SetHeight(18)
|
||||||
titletext:SetText("")
|
titletext:SetText("")
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
border:SetPoint("TOPLEFT", 1, -27)
|
border:SetPoint("TOPLEFT", 1, -27)
|
||||||
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -2,22 +2,18 @@
|
|||||||
TreeGroup Container
|
TreeGroup Container
|
||||||
Container that uses a tree control to switch between groups.
|
Container that uses a tree control to switch between groups.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "TreeGroup", 45
|
local Type, Version = "TreeGroup", 47
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type
|
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type
|
||||||
local math_min, math_max, floor = math.min, math.max, floor
|
local math_min, math_max, floor = math.min, math.max, math.floor
|
||||||
local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat
|
local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat
|
||||||
|
|
||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: FONT_COLOR_CODE_CLOSE
|
|
||||||
|
|
||||||
-- Recycling functions
|
-- Recycling functions
|
||||||
local new, del
|
local new, del
|
||||||
do
|
do
|
||||||
@ -567,7 +563,11 @@ local methods = {
|
|||||||
if maxtreewidth > 100 and status.treewidth > maxtreewidth then
|
if maxtreewidth > 100 and status.treewidth > maxtreewidth then
|
||||||
self:SetTreeWidth(maxtreewidth, status.treesizable)
|
self:SetTreeWidth(maxtreewidth, status.treesizable)
|
||||||
end
|
end
|
||||||
treeframe:SetMaxResize(maxtreewidth, 1600)
|
if treeframe.SetResizeBounds then
|
||||||
|
treeframe:SetResizeBounds(100, 1, maxtreewidth, 1600)
|
||||||
|
else
|
||||||
|
treeframe:SetMaxResize(maxtreewidth, 1600)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["OnHeightSet"] = function(self, height)
|
["OnHeightSet"] = function(self, height)
|
||||||
@ -637,7 +637,7 @@ local function Constructor()
|
|||||||
local num = AceGUI:GetNextWidgetNum(Type)
|
local num = AceGUI:GetNextWidgetNum(Type)
|
||||||
local frame = CreateFrame("Frame", nil, UIParent)
|
local frame = CreateFrame("Frame", nil, UIParent)
|
||||||
|
|
||||||
local treeframe = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local treeframe = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
treeframe:SetPoint("TOPLEFT")
|
treeframe:SetPoint("TOPLEFT")
|
||||||
treeframe:SetPoint("BOTTOMLEFT")
|
treeframe:SetPoint("BOTTOMLEFT")
|
||||||
treeframe:SetWidth(DEFAULT_TREE_WIDTH)
|
treeframe:SetWidth(DEFAULT_TREE_WIDTH)
|
||||||
@ -646,13 +646,17 @@ local function Constructor()
|
|||||||
treeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
|
treeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
|
||||||
treeframe:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
treeframe:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
||||||
treeframe:SetResizable(true)
|
treeframe:SetResizable(true)
|
||||||
treeframe:SetMinResize(100, 1)
|
if treeframe.SetResizeBounds then -- WoW 10.0
|
||||||
treeframe:SetMaxResize(400, 1600)
|
treeframe:SetResizeBounds(100, 1, 400, 1600)
|
||||||
|
else
|
||||||
|
treeframe:SetMinResize(100, 1)
|
||||||
|
treeframe:SetMaxResize(400, 1600)
|
||||||
|
end
|
||||||
treeframe:SetScript("OnUpdate", FirstFrameUpdate)
|
treeframe:SetScript("OnUpdate", FirstFrameUpdate)
|
||||||
treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged)
|
treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged)
|
||||||
treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel)
|
treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel)
|
||||||
|
|
||||||
local dragger = CreateFrame("Frame", nil, treeframe, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local dragger = CreateFrame("Frame", nil, treeframe, "BackdropTemplate")
|
||||||
dragger:SetWidth(8)
|
dragger:SetWidth(8)
|
||||||
dragger:SetPoint("TOP", treeframe, "TOPRIGHT")
|
dragger:SetPoint("TOP", treeframe, "TOPRIGHT")
|
||||||
dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT")
|
dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT")
|
||||||
@ -677,7 +681,7 @@ local function Constructor()
|
|||||||
scrollbg:SetAllPoints(scrollbar)
|
scrollbg:SetAllPoints(scrollbar)
|
||||||
scrollbg:SetColorTexture(0,0,0,0.4)
|
scrollbg:SetColorTexture(0,0,0,0.4)
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT")
|
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT")
|
||||||
border:SetPoint("BOTTOMRIGHT")
|
border:SetPoint("BOTTOMRIGHT")
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -7,10 +7,6 @@ local pairs, assert, type = pairs, assert, type
|
|||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: GameFontNormal
|
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
-- Main Frame --
|
-- Main Frame --
|
||||||
----------------
|
----------------
|
||||||
@ -21,7 +17,7 @@ local CreateFrame, UIParent = CreateFrame, UIParent
|
|||||||
]]
|
]]
|
||||||
do
|
do
|
||||||
local Type = "Window"
|
local Type = "Window"
|
||||||
local Version = 6
|
local Version = 8
|
||||||
|
|
||||||
local function frameOnShow(this)
|
local function frameOnShow(this)
|
||||||
this.obj:Fire("OnShow")
|
this.obj:Fire("OnShow")
|
||||||
@ -186,7 +182,11 @@ do
|
|||||||
|
|
||||||
frame:SetScript("OnShow",frameOnShow)
|
frame:SetScript("OnShow",frameOnShow)
|
||||||
frame:SetScript("OnHide",frameOnClose)
|
frame:SetScript("OnHide",frameOnClose)
|
||||||
frame:SetMinResize(240,240)
|
if frame.SetResizeBounds then -- WoW 10.0
|
||||||
|
frame:SetResizeBounds(240,240)
|
||||||
|
else
|
||||||
|
frame:SetMinResize(240,240)
|
||||||
|
end
|
||||||
frame:SetToplevel(true)
|
frame:SetToplevel(true)
|
||||||
|
|
||||||
local titlebg = frame:CreateTexture(nil, "BACKGROUND")
|
local titlebg = frame:CreateTexture(nil, "BACKGROUND")
|
||||||
@ -300,7 +300,7 @@ do
|
|||||||
line2:SetHeight(8)
|
line2:SetHeight(8)
|
||||||
line2:SetPoint("BOTTOMRIGHT", -8, 8)
|
line2:SetPoint("BOTTOMRIGHT", -8, 8)
|
||||||
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border
|
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border
|
||||||
local x = 0.1 * 8/17
|
x = 0.1 * 8/17
|
||||||
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
||||||
|
|
||||||
local sizer_s = CreateFrame("Frame",nil,frame)
|
local sizer_s = CreateFrame("Frame",nil,frame)
|
||||||
|
@ -12,10 +12,6 @@ local select, pairs = select, pairs
|
|||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: SetDesaturation, GameFontHighlight
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -199,14 +195,14 @@ local methods = {
|
|||||||
["SetDescription"] = function(self, desc)
|
["SetDescription"] = function(self, desc)
|
||||||
if desc then
|
if desc then
|
||||||
if not self.desc then
|
if not self.desc then
|
||||||
local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
|
local f = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
|
||||||
desc:ClearAllPoints()
|
f:ClearAllPoints()
|
||||||
desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21)
|
f:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21)
|
||||||
desc:SetWidth(self.frame.width - 30)
|
f:SetWidth(self.frame.width - 30)
|
||||||
desc:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0)
|
f:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0)
|
||||||
desc:SetJustifyH("LEFT")
|
f:SetJustifyH("LEFT")
|
||||||
desc:SetJustifyV("TOP")
|
f:SetJustifyV("TOP")
|
||||||
self.desc = desc
|
self.desc = f
|
||||||
end
|
end
|
||||||
self.desc:Show()
|
self.desc:Show()
|
||||||
--self.text:SetFontObject(GameFontNormal)
|
--self.text:SetFontObject(GameFontNormal)
|
||||||
|
@ -11,10 +11,6 @@ local pairs = pairs
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: ColorPickerFrame, OpacitySliderFrame
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1202 2019-05-15 23:11:22Z nevcairiel $ ]]--
|
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1272 2022-08-29 15:56:35Z nevcairiel $ ]]--
|
||||||
|
|
||||||
local AceGUI = LibStub("AceGUI-3.0")
|
local AceGUI = LibStub("AceGUI-3.0")
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ local ItemBase = {
|
|||||||
-- NOTE: The ItemBase version is added to each item's version number
|
-- NOTE: The ItemBase version is added to each item's version number
|
||||||
-- to ensure proper updates on ItemBase changes.
|
-- to ensure proper updates on ItemBase changes.
|
||||||
-- Use at least 1000er steps.
|
-- Use at least 1000er steps.
|
||||||
version = 1000,
|
version = 2000,
|
||||||
counter = 0,
|
counter = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ function ItemBase.Create(type)
|
|||||||
highlight:Hide()
|
highlight:Hide()
|
||||||
self.highlight = highlight
|
self.highlight = highlight
|
||||||
|
|
||||||
local check = frame:CreateTexture("OVERLAY")
|
local check = frame:CreateTexture(nil, "OVERLAY")
|
||||||
check:SetWidth(16)
|
check:SetWidth(16)
|
||||||
check:SetHeight(16)
|
check:SetHeight(16)
|
||||||
check:SetPoint("LEFT",frame,"LEFT",3,-1)
|
check:SetPoint("LEFT",frame,"LEFT",3,-1)
|
||||||
@ -186,7 +186,7 @@ function ItemBase.Create(type)
|
|||||||
check:Hide()
|
check:Hide()
|
||||||
self.check = check
|
self.check = check
|
||||||
|
|
||||||
local sub = frame:CreateTexture("OVERLAY")
|
local sub = frame:CreateTexture(nil, "OVERLAY")
|
||||||
sub:SetWidth(16)
|
sub:SetWidth(16)
|
||||||
sub:SetHeight(16)
|
sub:SetHeight(16)
|
||||||
sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1)
|
sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--[[ $Id: AceGUIWidget-DropDown.lua 1239 2020-09-20 10:22:02Z nevcairiel $ ]]--
|
--[[ $Id: AceGUIWidget-DropDown.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]]--
|
||||||
local AceGUI = LibStub("AceGUI-3.0")
|
local AceGUI = LibStub("AceGUI-3.0")
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
@ -11,10 +11,6 @@ local PlaySound = PlaySound
|
|||||||
local UIParent, CreateFrame = UIParent, CreateFrame
|
local UIParent, CreateFrame = UIParent, CreateFrame
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: CLOSE
|
|
||||||
|
|
||||||
local function fixlevels(parent,...)
|
local function fixlevels(parent,...)
|
||||||
local i = 1
|
local i = 1
|
||||||
local child = select(i, ...)
|
local child = select(i, ...)
|
||||||
@ -253,7 +249,7 @@ do
|
|||||||
|
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local count = AceGUI:GetNextWidgetNum(widgetType)
|
local count = AceGUI:GetNextWidgetNum(widgetType)
|
||||||
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, "BackdropTemplate")
|
||||||
local self = {}
|
local self = {}
|
||||||
self.count = count
|
self.count = count
|
||||||
self.type = widgetType
|
self.type = widgetType
|
||||||
@ -304,7 +300,7 @@ do
|
|||||||
scrollFrame.obj = self
|
scrollFrame.obj = self
|
||||||
itemFrame.obj = self
|
itemFrame.obj = self
|
||||||
|
|
||||||
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, "BackdropTemplate")
|
||||||
slider:SetOrientation("VERTICAL")
|
slider:SetOrientation("VERTICAL")
|
||||||
slider:SetHitRectInsets(0, 0, -10, 0)
|
slider:SetHitRectInsets(0, 0, -10, 0)
|
||||||
slider:SetBackdrop(sliderBackdrop)
|
slider:SetBackdrop(sliderBackdrop)
|
||||||
@ -351,7 +347,7 @@ end
|
|||||||
|
|
||||||
do
|
do
|
||||||
local widgetType = "Dropdown"
|
local widgetType = "Dropdown"
|
||||||
local widgetVersion = 35
|
local widgetVersion = 36
|
||||||
|
|
||||||
--[[ Static data ]]--
|
--[[ Static data ]]--
|
||||||
|
|
||||||
@ -376,7 +372,6 @@ do
|
|||||||
|
|
||||||
local function Dropdown_TogglePullout(this)
|
local function Dropdown_TogglePullout(this)
|
||||||
local self = this.obj
|
local self = this.obj
|
||||||
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
|
|
||||||
if self.open then
|
if self.open then
|
||||||
self.open = nil
|
self.open = nil
|
||||||
self.pullout:Close()
|
self.pullout:Close()
|
||||||
|
@ -14,10 +14,6 @@ local GetCursorInfo, ClearCursor, GetSpellInfo = GetCursorInfo, ClearCursor, Get
|
|||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
|
@ -13,10 +13,6 @@ local pairs = pairs
|
|||||||
local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown
|
local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: NOT_BOUND
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Scripts
|
Scripts
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -214,7 +210,7 @@ local function Constructor()
|
|||||||
label:SetJustifyH("CENTER")
|
label:SetJustifyH("CENTER")
|
||||||
label:SetHeight(18)
|
label:SetHeight(18)
|
||||||
|
|
||||||
local msgframe = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local msgframe = CreateFrame("Frame", nil, UIParent, "BackdropTemplate")
|
||||||
msgframe:SetHeight(30)
|
msgframe:SetHeight(30)
|
||||||
msgframe:SetBackdrop(ControlBackdrop)
|
msgframe:SetBackdrop(ControlBackdrop)
|
||||||
msgframe:SetBackdropColor(0,0,0)
|
msgframe:SetBackdropColor(0,0,0)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Label Widget
|
Label Widget
|
||||||
Displays text and optionally an icon.
|
Displays text and optionally an icon.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Label", 27
|
local Type, Version = "Label", 28
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -12,10 +12,6 @@ local max, select, pairs = math.max, select, pairs
|
|||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: GameFontHighlightSmall
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -129,12 +125,16 @@ local methods = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
["SetFont"] = function(self, font, height, flags)
|
["SetFont"] = function(self, font, height, flags)
|
||||||
self.label:SetFont(font, height, flags)
|
if not self.fontObject then
|
||||||
UpdateImageAnchor(self)
|
self.fontObject = CreateFont("AceGUI30LabelFont" .. AceGUI:GetNextWidgetNum(Type))
|
||||||
|
end
|
||||||
|
self.fontObject:SetFont(font, height, flags)
|
||||||
|
self:SetFontObject(self.fontObject)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetFontObject"] = function(self, font)
|
["SetFontObject"] = function(self, font)
|
||||||
self:SetFont((font or GameFontHighlightSmall):GetFont())
|
self.label:SetFontObject(font or GameFontHighlightSmall)
|
||||||
|
UpdateImageAnchor(self)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetImageSize"] = function(self, width, height)
|
["SetImageSize"] = function(self, width, height)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
local Type, Version = "MultiLineEditBox", 29
|
local Type, Version = "MultiLineEditBox", 32
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -10,10 +10,6 @@ local GetCursorInfo, GetSpellInfo, ClearCursor = GetCursorInfo, GetSpellInfo, Cl
|
|||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
local _G = _G
|
local _G = _G
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: ACCEPT, ChatFontNormal
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -145,6 +141,14 @@ local function OnVerticalScroll(self, offset)
|
|||||||
editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight())
|
editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function OnScrollRangeChanged(self, xrange, yrange)
|
||||||
|
if yrange == 0 then
|
||||||
|
self.obj.editBox:SetHitRectInsets(0, 0, 0, 0)
|
||||||
|
else
|
||||||
|
OnVerticalScroll(self, self:GetVerticalScroll())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function OnShowFocus(frame)
|
local function OnShowFocus(frame)
|
||||||
frame.obj.editBox:SetFocus()
|
frame.obj.editBox:SetFocus()
|
||||||
frame:SetScript("OnShow", nil)
|
frame:SetScript("OnShow", nil)
|
||||||
@ -257,8 +261,6 @@ local methods = {
|
|||||||
["SetCursorPosition"] = function(self, ...)
|
["SetCursorPosition"] = function(self, ...)
|
||||||
return self.editBox:SetCursorPosition(...)
|
return self.editBox:SetCursorPosition(...)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
@ -297,7 +299,7 @@ local function Constructor()
|
|||||||
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1)
|
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1)
|
||||||
text:SetJustifyV("MIDDLE")
|
text:SetJustifyV("MIDDLE")
|
||||||
|
|
||||||
local scrollBG = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local scrollBG = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
||||||
scrollBG:SetBackdrop(backdrop)
|
scrollBG:SetBackdrop(backdrop)
|
||||||
scrollBG:SetBackdropColor(0, 0, 0)
|
scrollBG:SetBackdropColor(0, 0, 0)
|
||||||
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
||||||
@ -321,6 +323,7 @@ local function Constructor()
|
|||||||
scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag)
|
scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag)
|
||||||
scrollFrame:SetScript("OnSizeChanged", OnSizeChanged)
|
scrollFrame:SetScript("OnSizeChanged", OnSizeChanged)
|
||||||
scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll)
|
scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll)
|
||||||
|
scrollFrame:HookScript("OnScrollRangeChanged", OnScrollRangeChanged)
|
||||||
|
|
||||||
local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame)
|
local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame)
|
||||||
editBox:SetAllPoints()
|
editBox:SetAllPoints()
|
||||||
|
@ -14,10 +14,6 @@ local tonumber, pairs = tonumber, pairs
|
|||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
local CreateFrame, UIParent = CreateFrame, UIParent
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
|
||||||
-- List them here for Mikk's FindGlobals script
|
|
||||||
-- GLOBALS: GameFontHighlightSmall
|
|
||||||
|
|
||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Support functions
|
Support functions
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
@ -31,13 +27,13 @@ local function UpdateText(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function UpdateLabels(self)
|
local function UpdateLabels(self)
|
||||||
local min, max = (self.min or 0), (self.max or 100)
|
local min_value, max_value = (self.min or 0), (self.max or 100)
|
||||||
if self.ispercent then
|
if self.ispercent then
|
||||||
self.lowtext:SetFormattedText("%s%%", (min * 100))
|
self.lowtext:SetFormattedText("%s%%", (min_value * 100))
|
||||||
self.hightext:SetFormattedText("%s%%", (max * 100))
|
self.hightext:SetFormattedText("%s%%", (max_value * 100))
|
||||||
else
|
else
|
||||||
self.lowtext:SetText(min)
|
self.lowtext:SetText(min_value)
|
||||||
self.hightext:SetText(max)
|
self.hightext:SetText(max_value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -175,13 +171,13 @@ local methods = {
|
|||||||
self.label:SetText(text)
|
self.label:SetText(text)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetSliderValues"] = function(self, min, max, step)
|
["SetSliderValues"] = function(self, min_value, max_value, step)
|
||||||
local frame = self.slider
|
local frame = self.slider
|
||||||
frame.setup = true
|
frame.setup = true
|
||||||
self.min = min
|
self.min = min_value
|
||||||
self.max = max
|
self.max = max_value
|
||||||
self.step = step
|
self.step = step
|
||||||
frame:SetMinMaxValues(min or 0,max or 100)
|
frame:SetMinMaxValues(min_value or 0,max_value or 100)
|
||||||
UpdateLabels(self)
|
UpdateLabels(self)
|
||||||
frame:SetValueStep(step or 1)
|
frame:SetValueStep(step or 1)
|
||||||
if self.value then
|
if self.value then
|
||||||
@ -225,7 +221,7 @@ local function Constructor()
|
|||||||
label:SetJustifyH("CENTER")
|
label:SetJustifyH("CENTER")
|
||||||
label:SetHeight(15)
|
label:SetHeight(15)
|
||||||
|
|
||||||
local slider = CreateFrame("Slider", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local slider = CreateFrame("Slider", nil, frame, "BackdropTemplate")
|
||||||
slider:SetOrientation("HORIZONTAL")
|
slider:SetOrientation("HORIZONTAL")
|
||||||
slider:SetHeight(15)
|
slider:SetHeight(15)
|
||||||
slider:SetHitRectInsets(0, 0, -10, 0)
|
slider:SetHitRectInsets(0, 0, -10, 0)
|
||||||
@ -247,7 +243,7 @@ local function Constructor()
|
|||||||
local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
||||||
hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3)
|
hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3)
|
||||||
|
|
||||||
local editbox = CreateFrame("EditBox", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
local editbox = CreateFrame("EditBox", nil, frame, "BackdropTemplate")
|
||||||
editbox:SetAutoFocus(false)
|
editbox:SetAutoFocus(false)
|
||||||
editbox:SetFontObject(GameFontHighlightSmall)
|
editbox:SetFontObject(GameFontHighlightSmall)
|
||||||
editbox:SetPoint("TOP", slider, "BOTTOM")
|
editbox:SetPoint("TOP", slider, "BOTTOM")
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
-- make into AceHook.
|
-- make into AceHook.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceHook-3.0
|
-- @name AceHook-3.0
|
||||||
-- @release $Id: AceHook-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceHook-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $
|
||||||
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8
|
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 9
|
||||||
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)
|
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)
|
||||||
|
|
||||||
if not AceHook then return end -- No upgrade needed
|
if not AceHook then return end -- No upgrade needed
|
||||||
@ -195,7 +195,6 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag
|
|||||||
registry[self][method] = nil
|
registry[self][method] = nil
|
||||||
end
|
end
|
||||||
handlers[uid], actives[uid], scripts[uid] = nil, nil, nil
|
handlers[uid], actives[uid], scripts[uid] = nil, nil, nil
|
||||||
uid = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local orig
|
local orig
|
||||||
@ -478,10 +477,10 @@ function AceHook:UnhookAll()
|
|||||||
for key, value in pairs(registry[self]) do
|
for key, value in pairs(registry[self]) do
|
||||||
if type(key) == "table" then
|
if type(key) == "table" then
|
||||||
for method in pairs(value) do
|
for method in pairs(value) do
|
||||||
self:Unhook(key, method)
|
AceHook.Unhook(self, key, method)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:Unhook(key)
|
AceHook.Unhook(self, key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
-- make into AceSerializer.
|
-- make into AceSerializer.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceSerializer-3.0
|
-- @name AceSerializer-3.0
|
||||||
-- @release $Id: AceSerializer-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceSerializer-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $
|
||||||
local MAJOR,MINOR = "AceSerializer-3.0", 5
|
local MAJOR,MINOR = "AceSerializer-3.0", 5
|
||||||
local AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
@ -83,9 +83,9 @@ local function SerializeValue(v, res, nres)
|
|||||||
elseif t=="table" then -- ^T...^t = table (list of key,value pairs)
|
elseif t=="table" then -- ^T...^t = table (list of key,value pairs)
|
||||||
nres=nres+1
|
nres=nres+1
|
||||||
res[nres] = "^T"
|
res[nres] = "^T"
|
||||||
for k,v in pairs(v) do
|
for key,value in pairs(v) do
|
||||||
nres = SerializeValue(k, res, nres)
|
nres = SerializeValue(key, res, nres)
|
||||||
nres = SerializeValue(v, res, nres)
|
nres = SerializeValue(value, res, nres)
|
||||||
end
|
end
|
||||||
nres=nres+1
|
nres=nres+1
|
||||||
res[nres] = "^t"
|
res[nres] = "^t"
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
-- make into AceTimer.
|
-- make into AceTimer.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceTimer-3.0
|
-- @name AceTimer-3.0
|
||||||
-- @release $Id: AceTimer-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceTimer-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes
|
local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes
|
||||||
local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
@ -61,11 +61,11 @@ local function new(self, loop, func, delay, ...)
|
|||||||
-- Compensate delay to get a perfect average delay, even if individual times don't match up perfectly
|
-- Compensate delay to get a perfect average delay, even if individual times don't match up perfectly
|
||||||
-- due to fps differences
|
-- due to fps differences
|
||||||
local time = GetTime()
|
local time = GetTime()
|
||||||
local delay = timer.delay - (time - timer.ends)
|
local ndelay = timer.delay - (time - timer.ends)
|
||||||
-- Ensure the delay doesn't go below the threshold
|
-- Ensure the delay doesn't go below the threshold
|
||||||
if delay < 0.01 then delay = 0.01 end
|
if ndelay < 0.01 then ndelay = 0.01 end
|
||||||
C_TimerAfter(delay, timer.callback)
|
C_TimerAfter(ndelay, timer.callback)
|
||||||
timer.ends = time + delay
|
timer.ends = time + ndelay
|
||||||
else
|
else
|
||||||
activeTimers[timer.handle or timer] = nil
|
activeTimers[timer.handle or timer] = nil
|
||||||
end
|
end
|
||||||
|
@ -1,61 +1,26 @@
|
|||||||
--[[ $Id: CallbackHandler-1.0.lua 3 2008-09-29 16:54:20Z nevcairiel $ ]]
|
--[[ $Id: CallbackHandler-1.0.lua 1298 2022-12-12 15:10:10Z nevcairiel $ ]]
|
||||||
local MAJOR, MINOR = "CallbackHandler-1.0", 3
|
local MAJOR, MINOR = "CallbackHandler-1.0", 8
|
||||||
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
|
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not CallbackHandler then return end -- No upgrade needed
|
if not CallbackHandler then return end -- No upgrade needed
|
||||||
|
|
||||||
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
|
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
|
||||||
|
|
||||||
local type = type
|
-- Lua APIs
|
||||||
local pcall = pcall
|
local securecallfunction, error = securecallfunction, error
|
||||||
local pairs = pairs
|
local setmetatable, rawget = setmetatable, rawget
|
||||||
local assert = assert
|
local next, select, pairs, type, tostring = next, select, pairs, type, tostring
|
||||||
local concat = table.concat
|
|
||||||
local loadstring = loadstring
|
|
||||||
local next = next
|
|
||||||
local select = select
|
|
||||||
local type = type
|
|
||||||
local xpcall = xpcall
|
|
||||||
|
|
||||||
local function errorhandler(err)
|
|
||||||
return geterrorhandler()(err)
|
local function Dispatch(handlers, ...)
|
||||||
|
local index, method = next(handlers)
|
||||||
|
if not method then return end
|
||||||
|
repeat
|
||||||
|
securecallfunction(method, ...)
|
||||||
|
index, method = next(handlers, index)
|
||||||
|
until not method
|
||||||
end
|
end
|
||||||
|
|
||||||
local function CreateDispatcher(argCount)
|
|
||||||
local code = [[
|
|
||||||
local next, xpcall, eh = ...
|
|
||||||
|
|
||||||
local method, ARGS
|
|
||||||
local function call() method(ARGS) end
|
|
||||||
|
|
||||||
local function dispatch(handlers, ...)
|
|
||||||
local index
|
|
||||||
index, method = next(handlers)
|
|
||||||
if not method then return end
|
|
||||||
local OLD_ARGS = ARGS
|
|
||||||
ARGS = ...
|
|
||||||
repeat
|
|
||||||
xpcall(call, eh)
|
|
||||||
index, method = next(handlers, index)
|
|
||||||
until not method
|
|
||||||
ARGS = OLD_ARGS
|
|
||||||
end
|
|
||||||
|
|
||||||
return dispatch
|
|
||||||
]]
|
|
||||||
|
|
||||||
local ARGS, OLD_ARGS = {}, {}
|
|
||||||
for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end
|
|
||||||
code = code:gsub("OLD_ARGS", concat(OLD_ARGS, ", ")):gsub("ARGS", concat(ARGS, ", "))
|
|
||||||
return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler)
|
|
||||||
end
|
|
||||||
|
|
||||||
local Dispatchers = setmetatable({}, {__index=function(self, argCount)
|
|
||||||
local dispatcher = CreateDispatcher(argCount)
|
|
||||||
rawset(self, argCount, dispatcher)
|
|
||||||
return dispatcher
|
|
||||||
end})
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------
|
--------------------------------------------------------------------------
|
||||||
-- CallbackHandler:New
|
-- CallbackHandler:New
|
||||||
--
|
--
|
||||||
@ -64,9 +29,7 @@ end})
|
|||||||
-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback"
|
-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback"
|
||||||
-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
|
-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
|
||||||
|
|
||||||
function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused)
|
function CallbackHandler.New(_self, target, RegisterName, UnregisterName, UnregisterAllName)
|
||||||
-- TODO: Remove this after beta has gone out
|
|
||||||
assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused")
|
|
||||||
|
|
||||||
RegisterName = RegisterName or "RegisterCallback"
|
RegisterName = RegisterName or "RegisterCallback"
|
||||||
UnregisterName = UnregisterName or "UnregisterCallback"
|
UnregisterName = UnregisterName or "UnregisterCallback"
|
||||||
@ -88,19 +51,19 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll
|
|||||||
local oldrecurse = registry.recurse
|
local oldrecurse = registry.recurse
|
||||||
registry.recurse = oldrecurse + 1
|
registry.recurse = oldrecurse + 1
|
||||||
|
|
||||||
Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...)
|
Dispatch(events[eventname], eventname, ...)
|
||||||
|
|
||||||
registry.recurse = oldrecurse
|
registry.recurse = oldrecurse
|
||||||
|
|
||||||
if registry.insertQueue and oldrecurse==0 then
|
if registry.insertQueue and oldrecurse==0 then
|
||||||
-- Something in one of our callbacks wanted to register more callbacks; they got queued
|
-- Something in one of our callbacks wanted to register more callbacks; they got queued
|
||||||
for eventname,callbacks in pairs(registry.insertQueue) do
|
for event,callbacks in pairs(registry.insertQueue) do
|
||||||
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten.
|
local first = not rawget(events, event) or not next(events[event]) -- test for empty before. not test for one member after. that one member may have been overwritten.
|
||||||
for self,func in pairs(callbacks) do
|
for object,func in pairs(callbacks) do
|
||||||
events[eventname][self] = func
|
events[event][object] = func
|
||||||
-- fire OnUsed callback?
|
-- fire OnUsed callback?
|
||||||
if first and registry.OnUsed then
|
if first and registry.OnUsed then
|
||||||
registry.OnUsed(registry, target, eventname)
|
registry.OnUsed(registry, target, event)
|
||||||
first = nil
|
first = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -146,9 +109,9 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll
|
|||||||
regfunc = function(...) self[method](self,...) end
|
regfunc = function(...) self[method](self,...) end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- function ref with self=object or self="addonId"
|
-- function ref with self=object or self="addonId" or self=thread
|
||||||
if type(self)~="table" and type(self)~="string" then
|
if type(self)~="table" and type(self)~="string" and type(self)~="thread" then
|
||||||
error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string expected.", 2)
|
error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
|
if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
|
||||||
|
@ -1,401 +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] = "sleep",
|
|
||||||
[18657] = "sleep",
|
|
||||||
[18658] = "sleep",
|
|
||||||
|
|
||||||
-- Wyvern Sting
|
|
||||||
[19386] = "disorient",
|
|
||||||
[24132] = "disorient",
|
|
||||||
[24133] = "disorient",
|
|
||||||
[27068] = "disorient",
|
|
||||||
|
|
||||||
--[[ MISC ]]--
|
|
||||||
-- Chastise (Maybe this shares DR with Imp HS?)
|
|
||||||
[44041] = "root",
|
|
||||||
[44043] = "root",
|
|
||||||
[44044] = "root",
|
|
||||||
[44045] = "root",
|
|
||||||
[44046] = "root",
|
|
||||||
[44047] = "root",
|
|
||||||
|
|
||||||
-- Dragon's Breath
|
|
||||||
[31661] = "dragonsbreath", -- Dragon's Breath
|
|
||||||
[33041] = "dragonsbreath", -- Dragon's Breath
|
|
||||||
[33042] = "dragonsbreath", -- Dragon's Breath
|
|
||||||
[33043] = "dragonsbreath", -- Dragon's Breath
|
|
||||||
-- Repentance
|
|
||||||
[20066] = "disorient",
|
|
||||||
|
|
||||||
-- Scatter Shot
|
|
||||||
[19503] = "scatters",
|
|
||||||
|
|
||||||
-- Freezing Trap
|
|
||||||
[3355] = "disorient",
|
|
||||||
[14308] = "disorient",
|
|
||||||
[14309] = "disorient",
|
|
||||||
|
|
||||||
-- Improved Conc Shot
|
|
||||||
[19410] = "impconc",
|
|
||||||
[22915] = "impconc",
|
|
||||||
[28445] = "impconc",
|
|
||||||
|
|
||||||
-- Death Coil
|
|
||||||
[6789] = "dc",
|
|
||||||
[17925] = "dc",
|
|
||||||
[17926] = "dc",
|
|
||||||
[27223] = "dc",
|
|
||||||
|
|
||||||
-- Kidney Shot
|
|
||||||
[408] = "ks",
|
|
||||||
[8643] = "ks",
|
|
||||||
|
|
||||||
-- Mind Control
|
|
||||||
[605] = "charm",
|
|
||||||
[10911] = "charm",
|
|
||||||
[10912] = "charm",
|
|
||||||
}
|
|
||||||
|
|
||||||
-- 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",
|
|
||||||
}
|
|
||||||
|
|
||||||
-- 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
|
|
394
Libs/DRList-1.0/DRList-1.0.lua
Normal file
394
Libs/DRList-1.0/DRList-1.0.lua
Normal file
@ -0,0 +1,394 @@
|
|||||||
|
--[[
|
||||||
|
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", 54 -- 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_WRATH_CLASSIC or 11] = "wotlk",
|
||||||
|
})[WOW_PROJECT_ID]
|
||||||
|
|
||||||
|
-- How long it takes for a DR to expire, in seconds.
|
||||||
|
Lib.resetTimes = {
|
||||||
|
retail = {
|
||||||
|
["default"] = 18.5, -- static 18 sec + 0.5 latency
|
||||||
|
["npc"] = 21, -- Against mobs it seems to last slightly longer, depending on server load
|
||||||
|
["knockback"] = 10.5, -- Knockbacks are immediately immune and only DRs for 10s
|
||||||
|
},
|
||||||
|
|
||||||
|
classic = {
|
||||||
|
["default"] = 20, -- dynamic between 15 and 20s
|
||||||
|
["npc"] = 21,
|
||||||
|
},
|
||||||
|
|
||||||
|
tbc = {
|
||||||
|
["default"] = 20, -- dynamic between 15 and 20s
|
||||||
|
["npc"] = 21,
|
||||||
|
},
|
||||||
|
|
||||||
|
wotlk = {
|
||||||
|
["default"] = 20, -- dynamic between 15 and 20s
|
||||||
|
["npc"] = 21,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- 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 = {
|
||||||
|
["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 for retail some special mobs have DR on all categories,
|
||||||
|
-- see UnitClassification() and UnitIsQuestBoss().
|
||||||
|
Lib.categoriesPvE = {
|
||||||
|
retail = {
|
||||||
|
["taunt"] = L.TAUNTS,
|
||||||
|
["stun"] = L.STUNS,
|
||||||
|
},
|
||||||
|
|
||||||
|
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.
|
||||||
|
-- Key is unlocalized name used for API functions, value is localized name used for UI.
|
||||||
|
-- Note that for retail some special mobs 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 for retail some special mobs have DR on all categories, you need to check for this yourself;
|
||||||
|
-- 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
|
||||||
|
-- @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.RESET_TIME = Lib.resetTimes[Lib.gameExpansion].default
|
||||||
|
Lib.pveDR = Lib.categoriesPvE
|
||||||
|
Lib.IterateSpells = function(cat) if cat then return Lib.IterateSpellsByCategory(cat) else return next, Lib.spellList end end
|
25
Libs/DRList-1.0/DRList-1.0.toc
Normal file
25
Libs/DRList-1.0/DRList-1.0.toc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
## Interface: 100105
|
||||||
|
## Interface-Classic: 11403
|
||||||
|
## Interface-BCC: 20504
|
||||||
|
## Interface-Wrath: 30402
|
||||||
|
## IconTexture: Interface\Icons\Spell_nature_heavypolymorph1
|
||||||
|
## 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@
|
4
Libs/DRList-1.0/DRList-1.0.xml
Normal file
4
Libs/DRList-1.0/DRList-1.0.xml
Normal file
@ -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>
|
734
Libs/DRList-1.0/Spells.lua
Normal file
734
Libs/DRList-1.0/Spells.lua
Normal file
@ -0,0 +1,734 @@
|
|||||||
|
local MAJOR, MINOR = "DRList-1.0", 54 -- Don't forget to change this in DRList-1.0.lua aswell!
|
||||||
|
local Lib = LibStub(MAJOR)
|
||||||
|
if Lib.spellListVersion and Lib.spellListVersion >= MINOR then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Lib.spellListVersion = MINOR
|
||||||
|
|
||||||
|
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
|
||||||
|
[360806] = "disorient", -- Sleep Walk
|
||||||
|
[1513] = "disorient", -- Scare Beast
|
||||||
|
[31661] = "disorient", -- Dragon's Breath
|
||||||
|
[198909] = "disorient", -- Song of Chi-ji
|
||||||
|
[202274] = "disorient", -- Hot Trub
|
||||||
|
[105421] = "disorient", -- Blinding Light
|
||||||
|
[10326] = "disorient", -- Turn Evil
|
||||||
|
[205364] = "disorient", -- Dominate Mind
|
||||||
|
[605] = "disorient", -- Mind Control
|
||||||
|
[8122] = "disorient", -- Psychic Scream
|
||||||
|
[226943] = "disorient", -- Mind Bomb
|
||||||
|
[2094] = "disorient", -- Blind
|
||||||
|
[118699] = "disorient", -- Fear
|
||||||
|
[130616] = "disorient", -- Fear (Horrify)
|
||||||
|
[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
|
||||||
|
[378441] = "incapacitate", -- Time Stop
|
||||||
|
[3355] = "incapacitate", -- Freezing Trap
|
||||||
|
[203337] = "incapacitate", -- Freezing Trap (Honor talent)
|
||||||
|
[213691] = "incapacitate", -- Scatter Shot
|
||||||
|
[383121] = "incapacitate", -- Mass Polymorph
|
||||||
|
[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)
|
||||||
|
[321395] = "incapacitate", -- Polymorph (Mawrat)
|
||||||
|
[391622] = "incapacitate", -- Polymorph (Duck)
|
||||||
|
[82691] = "incapacitate", -- Ring of Frost
|
||||||
|
[115078] = "incapacitate", -- Paralysis
|
||||||
|
[357768] = "incapacitate", -- Paralysis 2 (Perpetual 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 (has no DR)
|
||||||
|
[410065] = "silence", -- Reactive Resin
|
||||||
|
[202933] = "silence", -- Spider Sting
|
||||||
|
[356727] = "silence", -- Spider Venom
|
||||||
|
[354831] = "silence", -- Wailing Arrow 1
|
||||||
|
[355596] = "silence", -- Wailing Arrow 2
|
||||||
|
[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
|
||||||
|
[372245] = "stun", -- Terror of the Skies
|
||||||
|
[117526] = "stun", -- Binding Shot
|
||||||
|
[357021] = "stun", -- Consecutive Concussion
|
||||||
|
[24394] = "stun", -- Intimidation
|
||||||
|
[389831] = "stun", -- Snowdrift
|
||||||
|
[119381] = "stun", -- Leg Sweep
|
||||||
|
[202346] = "stun", -- Double Barrel
|
||||||
|
[385149] = "stun", -- Exorcism
|
||||||
|
[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
|
||||||
|
[385954] = "stun", -- Shield Charge
|
||||||
|
[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)
|
||||||
|
-- TODO: Inferal Awakening?
|
||||||
|
|
||||||
|
[204085] = "root", -- Deathchill (Chains of Ice)
|
||||||
|
[233395] = "root", -- Deathchill (Remorseless Winter)
|
||||||
|
[339] = "root", -- Entangling Roots
|
||||||
|
[235963] = "root", -- Entangling Roots (Earthen Grasp)
|
||||||
|
[170855] = "root", -- Entangling Roots (Nature's Grasp)
|
||||||
|
[102359] = "root", -- Mass Entanglement
|
||||||
|
[355689] = "root", -- Landslide
|
||||||
|
[393456] = "root", -- Entrapment (Tar Trap)
|
||||||
|
[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
|
||||||
|
[386770] = "root", -- Freezing Cold
|
||||||
|
[198121] = "root", -- Frostbite
|
||||||
|
[114404] = "root", -- Void Tendril's Grasp
|
||||||
|
[342375] = "root", -- Tormenting Backlash (Torghast PvE)
|
||||||
|
[233582] = "root", -- Entrenched in Flame
|
||||||
|
[116706] = "root", -- Disable
|
||||||
|
[324382] = "root", -- Clash
|
||||||
|
[64695] = "root", -- Earthgrab (Totem effect)
|
||||||
|
-- [356738] = "root", -- Earth Unleashed (doesn't seem to DR)
|
||||||
|
[285515] = "root", -- Surge of Power
|
||||||
|
[199042] = "root", -- Thunderstruck (Protection PvP Talent)
|
||||||
|
--[356356] = "root", -- Warbringer TODO: has DR?
|
||||||
|
[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)
|
||||||
|
[407032] = "disarm", -- Sticky Tar Bomb 1
|
||||||
|
[407031] = "disarm", -- Sticky Tar Bomb 2
|
||||||
|
[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)
|
||||||
|
[710] = "incapacitate", -- Banish (Rank 1)
|
||||||
|
[18647] = "incapacitate", -- Banish (Rank 2)
|
||||||
|
[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
|
||||||
|
|
||||||
|
-- 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
|
||||||
|
[67769] = "incapacitate", -- Cobalt Frag Bomb
|
||||||
|
[67890] = "incapacitate", -- Cobalt Frag Bomb (Frag Belt)
|
||||||
|
[54466] = "incapacitate", -- Saronite 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)
|
||||||
|
[65857] = "root", -- Entangling Roots (Rank 8) (TODO: Not sure which ID is correct)
|
||||||
|
[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)
|
||||||
|
[53313] = "root", -- Nature's Grasp (Rank 8)
|
||||||
|
[66070] = "root", -- Nature's Grasp (Rank 8) (TODO: Not sure which ID is correct)
|
||||||
|
[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)
|
||||||
|
[64695] = "root", -- Earthgrab
|
||||||
|
[39965] = "root", -- Frost Grenade (Item)
|
||||||
|
[63685] = "root", -- Freeze (Frost Shock)
|
||||||
|
[55536] = "root", -- Frostweave Net (Item)
|
||||||
|
|
||||||
|
[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)
|
||||||
|
[64346] = "disarm", -- Fiery Payback
|
||||||
|
[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 (Shield Slam)
|
||||||
|
[74347] = "silence", -- Silenced - Gag Order (Heroic Throw?)
|
||||||
|
[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
|
||||||
|
[67799] = "mind_control", -- Mind Amplification Dish
|
||||||
|
[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
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
-- PRIEST
|
||||||
-------------
|
-------------
|
||||||
Buff({ 1243, 1244, 1245, 2791, 10937, 10938, 25389 }, { buffType = "magic" }, "PRIEST") -- Power Word: Fortitude
|
Buff({ 1243, 1244, 1245, 2791, 10937, 10938, 25389, 48161 }, { buffType = "magic" }, "PRIEST") -- Power Word: Fortitude
|
||||||
Buff({ 21562, 21564, 25392 }, { buffType = "magic" }, "PRIEST") -- Prayer of 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 }, { buffType = "magic" }, "PRIEST") -- Power Word: Shield
|
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 }, { buffType = "magic" }, "PRIEST") -- Inner Fire
|
Buff({ 588, 7128, 602, 1006, 10951, 10952, 25431, 48040, 48168 }, { buffType = "magic" }, "PRIEST") -- Inner Fire
|
||||||
Buff({ 2651 }, { buffType = "magic" }, "PRIEST") -- Elune's Grace
|
Buff({ 2651 }, { buffType = "magic" }, "PRIEST") -- Elune's Grace
|
||||||
Buff({ 6346 }, { buffType = "magic" }, "PRIEST") -- Fear Ward
|
Buff({ 6346 }, { buffType = "magic" }, "PRIEST") -- Fear Ward
|
||||||
Buff({ 14752, 14818, 14819, 27841, 25312 }, { buffType = "magic" }, "PRIEST") -- Divine Spirit
|
Buff({ 14752, 14818, 14819, 27841, 25312, 48073 }, { buffType = "magic" }, "PRIEST") -- Divine Spirit
|
||||||
Buff({ 27681, 32999 }, { buffType = "magic" }, "PRIEST") -- Prayer of Spirit
|
Buff({ 27681, 32999, 48074 }, { buffType = "magic" }, "PRIEST") -- Prayer of Spirit
|
||||||
Buff({ 1706 }, { buffType = "magic" }, "PRIEST") -- Levitate
|
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({ 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({ 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({ 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({ 18137, 19308, 19310, 19311, 19312, 25477 }, { buffType = "magic" }, "PRIEST") -- Shadowguard
|
||||||
Buff({ 976, 10957, 10958, 16874, 25433 }, { buffType = "magic" }, "PRIEST") -- Shadow Protection
|
Buff({ 976, 10957, 10958, 16874, 25433 }, { buffType = "magic" }, "PRIEST") -- Shadow Protection
|
||||||
Buff({ 27683, 39374 }, { buffType = "magic" }, "PRIEST") -- Prayer of Shadow Protection
|
Buff({ 27683, 39374 }, { buffType = "magic" }, "PRIEST") -- Prayer of Shadow Protection
|
||||||
Buff({ 15473 }, { buffType = "form" }, "PRIEST") -- Shadowform
|
|
||||||
--talents
|
--talents
|
||||||
Buff({ 14893, 15357, 15359 }, { buffType = "magic" }, "PRIEST") -- Inspiration
|
Buff({ 14893, 15357, 15359 }, { buffType = "magic" }, "PRIEST") -- Inspiration
|
||||||
Buff({ 27813, 27817, 27818 }, { buffType = "magic" }, "PRIEST") -- Blessed Recovery
|
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({ 10060 }, { buffType = "magic" }, "PRIEST") -- Power Infusion
|
||||||
Buff({ 33206 }, { buffType = "magic" }, "PRIEST") -- Pain Suppression
|
Buff({ 33206 }, { buffType = "magic" }, "PRIEST") -- Pain Suppression
|
||||||
Buff({ 34754 }, { buffType = "magic" }, "PRIEST") -- Clearcasting
|
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
|
-- 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({ 5487 }, { buffType = "form"}, "DRUID") -- Bear Form
|
||||||
Buff({ 783 }, { buffType = "form"}, "DRUID") -- Travel Form
|
Buff({ 783 }, { buffType = "form"}, "DRUID") -- Travel Form
|
||||||
Buff({ 9634 }, { buffType = "form"}, "DRUID") -- Dire Bear Form
|
Buff({ 9634 }, { buffType = "form"}, "DRUID") -- Dire Bear Form
|
||||||
Buff({ 768 }, { buffType = "form"}, "DRUID") -- Cat Form
|
Buff({ 768 }, { buffType = "form"}, "DRUID") -- Cat Form
|
||||||
Buff({ 22812 }, { buffType = "magic"}, "DRUID") -- Barkskin
|
Buff({ 22812 }, { buffType = "magic"}, "DRUID") -- Barkskin
|
||||||
Buff({ 5229 }, { buffType = "physical"}, "DRUID") -- Enrage
|
Buff({ 5229 }, { buffType = "enrage"}, "DRUID") -- Enrage
|
||||||
Buff({ 5217, 6793, 9845, 9846 }, { buffType = "physical"}, "DRUID") -- Tiger's Fury
|
Buff({ 5217, 6793, 9845, 9846, 50212, 50213 }, { buffType = "physical"}, "DRUID") -- Tiger's Fury
|
||||||
Buff({ 1850, 9821, 33357 }, { buffType = "physical"}, "DRUID") -- Dash
|
Buff({ 1850, 9821, 33357 }, { buffType = "physical"}, "DRUID") -- Dash
|
||||||
Buff({ 22842, 22895, 22896, 26999 }, { buffType = "physical"}, "DRUID") -- Frenzied Regeneration
|
Buff({ 22842 }, { buffType = "physical"}, "DRUID") -- Frenzied Regeneration
|
||||||
Buff({ 1126, 5232, 6756, 5234, 8907, 9884, 9885, 26990 }, { buffType = "magic"}, "DRUID") -- Mark of the Wild
|
Buff({ 1126, 5232, 6756, 5234, 8907, 9884, 9885, 26990, 48469 }, { buffType = "magic"}, "DRUID") -- Mark of the Wild
|
||||||
Buff({ 21849, 21850, 26991 }, { buffType = "magic"}, "DRUID") -- Gift 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 }, { buffType = "magic"}, "DRUID") -- Regrowth
|
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 }, { buffType = "magic"}, "DRUID") -- Rejuvenation
|
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({ 2893 }, { buffType = "magic"}, "DRUID") -- Abolish Poison
|
||||||
Buff({ 33763 }, { buffType = "magic"}, "DRUID") -- Lifebloom
|
Buff({ 33763, 48450, 48451}, { buffType = "magic"}, "DRUID") -- Lifebloom
|
||||||
--Talents
|
--Talents
|
||||||
Buff({ 24858 }, { buffType = "form"}, "DRUID") -- Moonkin Form
|
Buff({ 24858 }, { buffType = "form"}, "DRUID") -- Moonkin Form
|
||||||
Buff({ 24907 }, { buffType = "aura"}, "DRUID") -- Moonkin Aura
|
Buff({ 24907 }, { buffType = "aura"}, "DRUID") -- Moonkin Aura
|
||||||
Buff({ 33891 }, { buffType = "form"}, "DRUID") -- Tree of Life
|
Buff({ 33891 }, { buffType = "form"}, "DRUID") -- Tree of Life
|
||||||
Buff({ 16864 }, { buffType = "magic"}, "DRUID") -- Omen of Clarity
|
Buff({ 16864, 16870 }, { buffType = "magic"}, "DRUID") -- Omen of Clarity
|
||||||
Buff({ 16689, 16810, 16811, 16812, 16813, 17329, 27009 }, { buffType = "magic"}, "DRUID") -- Nature's Grasp
|
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({ 45281, 45282, 45283 }, { buffType = "magic"}, "DRUID") -- Natural Perfection
|
||||||
Buff({ 17116 }, { buffType = "magic"}, "DRUID") -- Nature's Swiftness
|
Buff({ 17116 }, { buffType = "magic"}, "DRUID") -- Nature's Swiftness
|
||||||
Buff({ 17007 }, { buffType = "aura"}, "DRUID") -- Leader of the Pack
|
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
|
-- WARRIOR -- TODO
|
||||||
-------------
|
-------------
|
||||||
Buff({ 29838 }, { buffType = "physical"}, "WARRIOR") -- Second Wind
|
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({ 6673 }, { buffType = "physical"}, "WARRIOR") -- Battle Shout
|
||||||
Buff({ 469 }, { buffType = "physical"}, "WARRIOR") -- Commanding Shout
|
Buff({ 469 }, { buffType = "physical"}, "WARRIOR") -- Commanding Shout
|
||||||
Buff({ 12328 }, { buffType = "physical"}, "WARRIOR") -- Sweeping Strikes
|
Buff({ 12328 }, { buffType = "physical"}, "WARRIOR") -- Sweeping Strikes
|
||||||
Buff({ 30032 }, { buffType = "physical"}, "WARRIOR") -- Rampage
|
Buff({ 29801, 30032 }, { buffType = "aura"}, "WARRIOR") -- Rampage
|
||||||
Buff({ 2687 }, { buffType = "physical"}, "WARRIOR") -- Blood Rage
|
Buff({ 2687 }, { buffType = "enrage"}, "WARRIOR") -- Blood Rage
|
||||||
Buff({ 20230 }, { buffType = "physical"}, "WARRIOR") -- Retaliation
|
Buff({ 20230 }, { buffType = "physical"}, "WARRIOR") -- Retaliation
|
||||||
Buff({ 871 }, { buffType = "physical"}, "WARRIOR") -- Shield Wall
|
Buff({ 871 }, { buffType = "physical"}, "WARRIOR") -- Shield Wall
|
||||||
Buff({ 18499 }, { buffType = "physical"}, "WARRIOR") -- Berserker Rage
|
Buff({ 18499 }, { buffType = "enrage"}, "WARRIOR") -- Berserker Rage
|
||||||
Buff({ 23885 }, { buffType = "physical"}, "WARRIOR") -- Bloodthirst
|
Buff({ 23885 }, { buffType = "enrage"}, "WARRIOR") -- Bloodthirst
|
||||||
Buff({ 3411 }, { buffType = "physical"}, "WARRIOR") -- Intervene
|
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({ 5277 }, { buffType = "physical" }, "ROGUE") -- Evasion
|
||||||
Buff({ 31224 }, { buffType = "physical" }, "ROGUE") -- Cloak of Shadows
|
Buff({ 31224 }, { buffType = "physical" }, "ROGUE") -- Cloak of Shadows
|
||||||
Buff({ 14278 }, { buffType = "physical" }, "ROGUE") -- Ghostly Strike
|
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
|
-- WARLOCK --TODO
|
||||||
------------
|
------------
|
||||||
Buff({ 19028 }, { buffType = "aura"}, "WARLOCK") -- Soul Link
|
Buff({ 19028 }, { buffType = "aura"}, "WARLOCK") -- Soul Link
|
||||||
Buff({ 696 }, { buffType = "aura"}, "WARLOCK") -- Demon Skin
|
Buff({ 687, 696 }, { buffType = "aura"}, "WARLOCK") -- Demon Skin
|
||||||
Buff({ 706 }, { buffType = "aura"}, "WARLOCK") -- Demon Armor
|
Buff({ 706, 1086, 11733, 11734, 11735, 27260, 47793, 47889 }, { buffType = "aura"}, "WARLOCK") -- Demon Armor
|
||||||
Buff({ 28176 }, { buffType = "aura"}, "WARLOCK") -- Fel Armor
|
Buff({ 28176, 28189, 47892, 47893 }, { buffType = "aura"}, "WARLOCK") -- Fel Armor
|
||||||
Buff({ 23759 }, { buffType = "aura"}, "WARLOCK") -- Master Demonologist
|
Buff({ 23759 }, { buffType = "aura"}, "WARLOCK") -- Master Demonologist
|
||||||
Buff({ 34936 }, { buffType = "magic"}, "WARLOCK") -- Backlash
|
Buff({ 34936 }, { buffType = "magic"}, "WARLOCK") -- Backlash
|
||||||
Buff({ 5697 }, { buffType = "magic"}, "WARLOCK") -- Unending Breath
|
Buff({ 5697 }, { buffType = "magic"}, "WARLOCK") -- Unending Breath
|
||||||
Buff({ 132 }, { buffType = "magic"}, "WARLOCK") -- Detect Invisibility
|
Buff({ 132 }, { buffType = "magic"}, "WARLOCK") -- Detect Invisibility
|
||||||
Buff({ 1949 }, { buffType = "aura"}, "WARLOCK") -- Hellfire
|
Buff({ 1949, 11683, 11684, 27213, 47823 }, { buffType = "aura"}, "WARLOCK") -- Hellfire
|
||||||
Buff({ 6229 }, { buffType = "magic"}, "WARLOCK") -- Shadow Ward
|
Buff({ 6229, 11739, 11740, 28610, 47890, 47891 }, { buffType = "magic"}, "WARLOCK") -- Shadow Ward
|
||||||
Buff({ 19480 }, { buffType = "magic"}, "WARLOCK") -- Paranoia
|
Buff({ 19480, 20435, 41002 }, { buffType = "aura"}, "WARLOCK") -- Paranoia
|
||||||
Buff({ 7812 }, { buffType = "magic"}, "WARLOCK") -- Sacrifice
|
Buff({ 7812, 19438, 19440, 19441, 19442, 19443, 27273, 47985, 47986 }, { buffType = "magic"}, "WARLOCK") -- Sacrifice
|
||||||
Buff({ 2947 }, { buffType = "magic"}, "WARLOCK") -- Fire Shield
|
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({ 30823 } ,{ buffType = "magic" }, "SHAMAN") -- Shamanistic Rage
|
||||||
Buff({ 32182 } ,{ buffType = "magic" }, "SHAMAN") -- Heroism
|
Buff({ 32182 } ,{ buffType = "magic" }, "SHAMAN") -- Heroism
|
||||||
Buff({ 2825 } ,{ buffType = "magic" }, "SHAMAN") -- Bloodlust
|
Buff({ 2825 } ,{ buffType = "magic" }, "SHAMAN") -- Bloodlust
|
||||||
Buff({ 974 } ,{ buffType = "magic" }, "SHAMAN") -- Earth Shield
|
Buff({ 974, 32593, 32594, 49283, 49284 } ,{ buffType = "magic" }, "SHAMAN") -- Earth Shield
|
||||||
Buff({ 24398 } ,{ buffType = "magic" }, "SHAMAN") -- Water Shield
|
Buff({ 24398, 33736, 57960 } ,{ buffType = "magic" }, "SHAMAN") -- Water Shield
|
||||||
Buff({ 324 } ,{ buffType = "magic" }, "SHAMAN") -- Lightning Shield
|
Buff({ 324, 25472, 49280, 49281 } ,{ buffType = "magic" }, "SHAMAN") -- Lightning Shield
|
||||||
Buff({ 16188 } ,{ buffType = "magic" }, "SHAMAN") -- Nature's Swiftness
|
Buff({ 16188 } ,{ buffType = "magic" }, "SHAMAN") -- Nature's Swiftness
|
||||||
Buff({ 16166 } ,{ buffType = "magic" }, "SHAMAN") -- Elemental Mastery
|
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
|
-- PALADIN --TODO
|
||||||
--------------
|
--------------
|
||||||
--Blessings
|
--Blessings
|
||||||
Buff( { 1022, 5599, 10278 }, { buffType = "magic"}, "PALADIN") -- Blessing of Protection
|
Buff( { 1022, 5599, 10278 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Protection
|
||||||
Buff( { 6940 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sacrifice
|
Buff( { 6940 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Sacrifice
|
||||||
Buff( { 1044 }, { buffType = "magic"}, "PALADIN") -- Blessing of Freedom
|
Buff( { 1044, 66115 }, { buffType = "magic"}, "PALADIN") -- Blessing/Hand of Freedom
|
||||||
Buff( { 19740, 19834, 19835, 19836, 19837, 19838, 25291, 27140 }, { buffType = "magic"}, "PALADIN") -- Blessing of Might
|
Buff( { 19740, 19834, 19835, 19836, 19837, 19838, 25291, 27140, 48931, 48932 }, { buffType = "magic"}, "PALADIN") -- Blessing of Might
|
||||||
Buff( { 19742 }, { buffType = "magic"}, "PALADIN") -- Blessing of Wisdom
|
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( { 20217 }, { buffType = "magic"}, "PALADIN") -- Blessing of Kings
|
||||||
Buff( { 19977 }, { buffType = "magic"}, "PALADIN") -- Blessing of Light
|
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( { 20911 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sanctuary
|
||||||
Buff( { 25898 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Kings
|
Buff( { 25898 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Kings
|
||||||
Buff( { 25890 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Light
|
Buff( { 25890 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Light
|
||||||
Buff( { 25782 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
|
Buff( { 25782, 27141, 48933, 48934 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
|
||||||
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
|
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
|
||||||
Buff( { 25899 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Sanctuary
|
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( { 642 }, { buffType = "immune"}, "PALADIN") -- Divine Shield
|
||||||
Buff( { 31884 }, { buffType = "magic"}, "PALADIN") -- Avenging Wrath
|
Buff( { 31884 }, { buffType = "magic"}, "PALADIN") -- Avenging Wrath
|
||||||
--Auras
|
--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( { 7294 }, { buffType = "aura"}, "PALADIN") -- Retribution Aura
|
||||||
Buff( { 19746 }, { buffType = "aura"}, "PALADIN") -- Concentration Aura
|
Buff( { 19746 }, { buffType = "aura"}, "PALADIN") -- Concentration Aura
|
||||||
Buff( { 19876 }, { buffType = "aura"}, "PALADIN") -- Shadow Resistance 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( { 19891 }, { buffType = "aura"}, "PALADIN") -- Fire Resistance Aura
|
||||||
Buff( { 32223 }, { buffType = "aura"}, "PALADIN") -- Crusader Aura
|
Buff( { 32223 }, { buffType = "aura"}, "PALADIN") -- Crusader Aura
|
||||||
--Seals
|
--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( { 31892 }, { buffType = "magic"}, "PALADIN") -- Seal of Blood
|
||||||
Buff( { 20375 }, { buffType = "magic"}, "PALADIN") -- Seal of Command
|
Buff( { 20375 }, { buffType = "magic"}, "PALADIN") -- Seal of Command
|
||||||
Buff( { 20164 }, { buffType = "magic"}, "PALADIN") -- Seal of Justice
|
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( { 31801 }, { buffType = "magic"}, "PALADIN") -- Seal of Vengeance
|
||||||
Buff( { 20166 }, { buffType = "magic"}, "PALADIN") -- Seal of Wisdom
|
Buff( { 20166 }, { buffType = "magic"}, "PALADIN") -- Seal of Wisdom
|
||||||
Buff( { 21082 }, { buffType = "magic"}, "PALADIN") -- Seal of the Crusade
|
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( { 5384 }, { buffType = "physical"}, "HUNTER") -- Feign Death
|
||||||
Buff( { 19263 }, { buffType = "physical"}, "HUNTER") -- Deterrence
|
Buff( { 19263 }, { buffType = "physical"}, "HUNTER") -- Deterrence
|
||||||
Buff( { 3045 }, { buffType = "physical"}, "HUNTER") -- Rapid Fire
|
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({ 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({ 130 }, { buffType = "magic"}, "MAGE") -- Slow Fall
|
||||||
Buff({ 604 }, { buffType = "magic"}, "MAGE") -- Dampen Magic
|
Buff({ 604, 8450, 8451, 10173, 10174, 33944, 43015 }, { buffType = "magic"}, "MAGE") -- Dampen Magic
|
||||||
Buff({ 1008 }, { buffType = "magic"}, "MAGE") -- Amplify Magic
|
Buff({ 1008, 8455, 10169, 10170, 27130, 33946, 43017, }, { buffType = "magic"}, "MAGE") -- Amplify Magic
|
||||||
Buff({ 1463 }, { buffType = "magic"}, "MAGE") -- Mana Shield
|
Buff({ 1463, 8494, 8495, 10191, 10192, 10193, 27131, 43019, 43020 }, { buffType = "magic"}, "MAGE") -- Mana Shield
|
||||||
Buff({ 6117 }, { buffType = "form"}, "MAGE") -- Mage Armor
|
Buff({ 6117, 22782, 22783, 27125, 43023, 43024 }, { buffType = "form"}, "MAGE") -- Mage Armor
|
||||||
Buff({ 31643 }, { buffType = "magic"}, "MAGE") -- Blazing Speed
|
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({ 11129 }, { buffType = "magic"}, "MAGE") -- Combustion
|
||||||
Buff({ 30482 }, { buffType = "form"}, "MAGE") -- Molten Armor
|
Buff({ 30482, 43045, 43046 }, { buffType = "form"}, "MAGE") -- Molten Armor
|
||||||
Buff({ 168 }, { buffType = "form"}, "MAGE") -- Frost Armor
|
Buff({ 168, 7300, 7301 }, { buffType = "form"}, "MAGE") -- Frost Armor
|
||||||
Buff({ 7302 }, { buffType = "form"}, "MAGE") -- Ice Armor
|
Buff({ 7302, 7320, 10219, 10220, 27124, 43008 }, { buffType = "form"}, "MAGE") -- Ice Armor
|
||||||
Buff({ 45438 }, { buffType = "immune"}, "MAGE") -- Ice Block
|
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
|
--talents
|
||||||
Buff({ 11426 }, { buffType = "magic"}, "MAGE") -- Ice Barrier
|
Buff({ 11426, 13031, 13032, 13033, 27134, 33405, 43038, 43039 }, { buffType = "magic"}, "MAGE") -- Ice Barrier
|
||||||
Buff({ 12472 }, { buffType = "magic"}, "MAGE") -- Icy Veins
|
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({ 6788 }, { }, "PRIEST") -- Weakened Soul
|
||||||
Debuff({ 15487 }, { buffType = "magic" }, "PRIEST") -- Silence
|
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({ 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({ 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({ 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 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS"}, "PRIEST") -- SW:P
|
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({ 15258 } ,{ buffType = "magic" }, "PRIEST") -- Shadow Vulnerability (Shadow Weaving Talent Effect)
|
||||||
Debuff({ 15286 } ,{ buffType = "magic" }, "PRIEST") -- Vampiric Embrace
|
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({ 605, 10911, 10912 }, { buffType = "magic" }, "PRIEST") -- Mind Control
|
||||||
Debuff({ 8122, 8124, 10888, 10890 }, { buffType = "magic", }, "PRIEST") -- Psychic Scream
|
Debuff({ 8122, 8124, 10888, 10890 }, { buffType = "magic", }, "PRIEST") -- Psychic Scream
|
||||||
Debuff({ 15269 }, { buffType = "magic"}, "PRIEST") -- Blackout
|
Debuff({ 15269 }, { buffType = "magic"}, "PRIEST") -- Blackout
|
||||||
Debuff({ 44041, 44043, 44044, 44045, 44046, 44047 }, { buffType = "magic"}, "PRIEST") -- Chastise
|
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
|
-- DRUID
|
||||||
---------------
|
---------------
|
||||||
Debuff({ 33786 }, { buffType = "immune"}, "DRUID") -- Cyclone
|
Debuff({ 33786 }, { buffType = "immune"}, "DRUID") -- Cyclone
|
||||||
Debuff({ 19675 }, { }, "DRUID") -- Feral Charge
|
Debuff({ 19675 }, { }, "DRUID") -- Feral Charge
|
||||||
Debuff( { 22570}, { buffType = "physical"}, "DRUID") -- Maim
|
Debuff({ 22570, 49802}, { 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({ 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({ 339, 1062, 5195, 5196, 9852, 9853, 26989 }, { buffType = "magic"}, "DRUID") -- Entangling Roots
|
||||||
Debuff({ 770, 778, 9749, 9907, 26993 }, { buffType = "magic" }, "DRUID") -- Faerie Fire
|
Debuff({ 770, 778, 9749, 9907, 26993 }, { buffType = "magic" }, "DRUID") -- Faerie Fire
|
||||||
Debuff({ 16857, 17390, 17391, 17392, 27011 }, { buffType = "magic" }, "DRUID") -- Faerie Fire (Feral)
|
Debuff({ 16857, 17390, 17391, 17392, 27011 }, { buffType = "magic" }, "DRUID") -- Faerie Fire (Feral)
|
||||||
Debuff({ 2637, 18657, 18658 }, { buffType = "magic"}, "DRUID") -- Hibernate
|
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({ 5209 }, { buffType = "physical" }, "DRUID") -- Challenging Roar
|
||||||
Debuff({ 6795 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Taunt
|
Debuff({ 6795 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Taunt
|
||||||
Debuff({ 16922 }, { buffType = "physical" }, "DRUID") -- Imp Starfire Stun
|
Debuff({ 16922 }, { buffType = "physical" }, "DRUID") -- Imp Starfire Stun
|
||||||
Debuff({ 9005, 9823, 9827, 27006 }, { buffType = "physical" }, "DRUID") -- Pounce
|
Debuff({ 9005, 9823, 9827, 27006, 49803 }, { buffType = "physical" }, "DRUID") -- Pounce
|
||||||
Debuff({ 9007, 9824, 9826, 27007 }, { buffType = "physical", stacking = true, preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Pounce Bleed
|
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 }, { stacking = true, buffType = "magic"}, "DRUID") -- Moonfire
|
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 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rake
|
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 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rip
|
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 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Insect Swarm
|
Debuff({ 5570, 24974, 24975, 24976, 24977, 27013, 48468 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Insect Swarm
|
||||||
Debuff({ 33745 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Lacerate
|
Debuff({ 33745, 48567, 48568 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Lacerate
|
||||||
Debuff({ 33878, 33986, 33987 }, { buffType = "physical" }, "DRUID") -- Mangle (Bear)
|
Debuff({ 33878, 33986, 33987, 48563, 48564 }, { buffType = "physical" }, "DRUID") -- Mangle (Bear)
|
||||||
Debuff({ 33876, 33982, 33983 }, { buffType = "physical" }, "DRUID") -- Mangle (Cat)
|
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
|
-- WARRIOR
|
||||||
-------------
|
-------------
|
||||||
Debuff({ 29703 }, { buffType = "physical"}, "WARRIOR") -- Dazed
|
Debuff({ 29703 }, { buffType = "physical"}, "WARRIOR") -- Dazed
|
||||||
Debuff({ 12294, 21551, 21552, 21553, 25248, 30330 }, { buffType = "physical" }, "WARRIOR") -- Mortal Strike
|
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({ 72, 1671, 1672, 29704 }, { buffType = "physical" }, "WARRIOR") -- Shield Bash
|
||||||
Debuff({ 18498 }, { buffType = "physical" }, "WARRIOR") -- Improved 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({ 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({ 12721, 43104, }, { stacking = true, buffType = "physical"}, "WARRIOR") -- Deep Wounds
|
||||||
Debuff({ 12323 }, { buffType = "physical"}, "WARRIOR") -- Piercing Howl
|
Debuff({ 12323 }, { buffType = "physical"}, "WARRIOR") -- Piercing Howl
|
||||||
Debuff({ 1715, 7372, 7373, 25212 }, { buffType = "physical" }, "WARRIOR") -- Hamstring
|
Debuff({ 1715, 7372, 7373, 25212 }, { buffType = "physical" }, "WARRIOR") -- Hamstring
|
||||||
Debuff({ 23694 } , { buffType = "physical" }, "WARRIOR") -- Improved 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({ 694, 7400, 7402, 20559, 20560 }, { buffType = "physical", }, "WARRIOR") -- Mocking Blow
|
||||||
Debuff({ 1161 } ,{ buffType = "physical", }, "WARRIOR") -- Challenging Shout
|
Debuff({ 1161 } ,{ buffType = "physical", }, "WARRIOR") -- Challenging Shout
|
||||||
Debuff({ 355 } ,{ stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "WARRIOR") -- Taunt
|
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({ 5246 }, { buffType = "physical" }, "WARRIOR") -- Intimidating Shout Fear
|
||||||
Debuff({ 676 } ,{ buffType = "physical" }, "WARRIOR") -- Disarm
|
Debuff({ 676 } ,{ buffType = "physical" }, "WARRIOR") -- Disarm
|
||||||
Debuff({ 12798 } , { buffType = "physical" }, "WARRIOR") -- Imp Revenge Stun
|
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({ 12809 } ,{ buffType = "physical" }, "WARRIOR") -- Concussion Blow
|
||||||
Debuff({ 7922 }, { buffType = "physical" }, "WARRIOR") -- Charge Stun
|
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({ 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
|
-- 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({ 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({ 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({ 5760, 8692, 11398 }, { buffType = "poison" }, "ROGUE") -- Mind-numbing Poison
|
||||||
Debuff({ 18425 }, { buffType = "physical" }, "ROGUE") -- Improved Kick Silence
|
Debuff({ 18425 }, { buffType = "physical" }, "ROGUE") -- Improved Kick Silence
|
||||||
Debuff({ 1833 }, { buffType = "physical" }, "ROGUE") -- Cheap Shot
|
Debuff({ 1833 }, { buffType = "physical" }, "ROGUE") -- Cheap Shot
|
||||||
Debuff({ 2070, 6770, 11297 }, { buffType = "physical" }, "ROGUE") -- Sap
|
Debuff({ 2070, 6770, 11297 }, { buffType = "physical" }, "ROGUE") -- Sap
|
||||||
Debuff({ 2094 } , { buffType = "physical" }, "ROGUE") -- Blind
|
Debuff({ 2094 } , { buffType = "physical" }, "ROGUE") -- Blind
|
||||||
Debuff({ 8647, 8649, 8650, 11197, 11198, 26866 }, { buffType = "physical" }, "ROGUE") -- Expose Armor
|
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({ 1330 }, { buffType = "physical"}, "ROGUE")-- Garrote - Silence
|
||||||
Debuff({ 408, 8643 }, { buffType = "physical" }, "ROGUE") -- Kidney Shot
|
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({ 1776, 1777, 8629, 11285, 11286, 38764 }, { buffType = "physical", }, "ROGUE") -- Gouge
|
||||||
Debuff({ 14251 } , { buffType = "physical", }, "ROGUE") -- Riposte (disarm)
|
Debuff({ 14251 } , { buffType = "physical", }, "ROGUE") -- Riposte (disarm)
|
||||||
|
Debuff({ 51693 } , { buffType = "physical", }, "ROGUE") -- Waylay
|
||||||
|
Debuff({ 51585 } , { buffType = "physical", }, "ROGUE") -- Blade Twisting
|
||||||
|
|
||||||
|
|
||||||
------------
|
------------
|
||||||
-- WARLOCK
|
-- WARLOCK
|
||||||
------------
|
------------
|
||||||
Debuff({ 32386 }, { buffType = "magic"}, "WARLOCK") -- Shadow Embrace
|
Debuff({ 32386 }, { buffType = "magic"}, "WARLOCK") -- Shadow Embrace
|
||||||
Debuff({ 710, 18647 } ,{ buffType = "immune"}, "WARLOCK") -- Banish
|
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({ 24259 } ,{ buffType = "magic" }, "WARLOCK") -- Spell Lock Silence
|
||||||
Debuff({ 27243 } ,{ buffType = "magic", stacking = true, preEvent = "SPELL_CAST_START" }, "WARLOCK") -- Seed of Corruption
|
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( { 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( { 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( { 172, 6222, 6223, 7648, 11671, 11672, 25311, 27216, 47812, 47813 }, { 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( { 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({ 18223, 29539, 46434 }, { buffType = "curse"}, "WARLOCK") -- Curse of Exhaustion
|
||||||
Debuff( { 704, 7658, 7659, 11717, 27226 }, { buffType = "curse"}, "WARLOCK") -- Curse of Recklessness
|
Debuff( { 16231, 704, 7658, 7659, 11717, 27226 }, { buffType = "curse"}, "WARLOCK") -- Curse of Recklessness
|
||||||
Debuff( { 1490, 11721, 11722, 27228 }, { buffType = "curse"}, "WARLOCK") -- Curse of the Elements
|
Debuff( { 1490, 11721, 11722, 27228, 47865 }, { buffType = "curse"}, "WARLOCK") -- Curse of the Elements
|
||||||
Debuff( { 1714, 11719 }, { buffType = "curse"}, "WARLOCK") -- Curse of Tongues
|
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( { 702, 1108, 6205, 7646, 11707, 11708, 27224, 30909, 50511 }, { buffType = "curse"}, "WARLOCK") -- Curse of Weakness
|
||||||
Debuff( { 603, 30910 }, { buffType = "curse"}, "WARLOCK") -- Curse of Doom
|
Debuff( { 603, 30910, 47867 }, { buffType = "curse"}, "WARLOCK") -- Curse of Doom
|
||||||
Debuff( { 6789, 17925, 17926, 27223 }, { buffType = "magic"}, "WARLOCK") -- Death Coil
|
Debuff( { 6789, 17925, 17926, 27223, 47859, 47860 }, { buffType = "magic"}, "WARLOCK") -- Death Coil
|
||||||
Debuff( { 5782, 6213, 6215 }, { buffType = "magic"}, "WARLOCK") -- Fear
|
Debuff( { 5782, 6213, 6215 }, { buffType = "magic"}, "WARLOCK") -- Fear
|
||||||
Debuff( { 5484, 17928 }, { buffType = "magic"}, "WARLOCK") -- Howl of Terror
|
Debuff( { 5484, 17928 }, { buffType = "magic"}, "WARLOCK") -- Howl of Terror
|
||||||
Debuff({ 6358 }, { buffType = "magic" }, "WARLOCK") -- Seduction
|
Debuff({ 6358 }, { buffType = "magic" }, "WARLOCK") -- Seduction
|
||||||
Debuff({ 30108, 30404, 30405 }, { buffType = "magic", stacking = true, preEvent = "SPELL_CAST_START" }, "WARLOCK") -- Unstable Affliction
|
Debuff({ 30108, 30404, 30405, 47841, 47843 }, { 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({ 31117, 43523, 65813 }, { buffType = "magic", altName = select(1, GetSpellInfo(30405)) .. " Silence" }, "WARLOCK") -- Unstable Affliction Silence
|
||||||
Debuff({ 18093 } ,{ buffType = "physical" }, "WARLOCK") -- Pyroclasm
|
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
|
-- SHAMAN
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Debuff({ 17364 } ,{ buffType = "magic" }, "SHAMAN") -- Stormstrike
|
Debuff({ 17364 } ,{ buffType = "magic" }, "SHAMAN") -- Stormstrike
|
||||||
Debuff({ 8056, 8058, 10472, 10473, 25464 }, { buffType = "magic" }, "SHAMAN") -- Frost Shock
|
Debuff({ 8056, 8058, 10472, 10473, 25464, 49235, 49236 }, { 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({ 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 }, { buffType = "magic" }, "SHAMAN") -- Frostbrand Attack
|
Debuff({ 8034, 8037, 10458, 16352, 16353, 25501, 58797, 58798, 58799 }, { buffType = "magic" }, "SHAMAN") -- Frostbrand Attack
|
||||||
Debuff({ 3600 } ,{ buffType = "magic" }, "SHAMAN") -- Earthbind Totem
|
Debuff({ 3600 } ,{ buffType = "magic" }, "SHAMAN") -- Earthbind Totem
|
||||||
|
Debuff({ 63685 } ,{ buffType = "magic" }, "SHAMAN") -- Frozen Power
|
||||||
|
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
-- PALADIN
|
-- PALADIN
|
||||||
@ -143,59 +165,94 @@ Debuff( { 25771 }, { buffType = "immune"}, "PALADIN") -- Forbearance
|
|||||||
Debuff({ 20066 }, { buffType = "magic" }, "PALADIN") -- Repentance
|
Debuff({ 20066 }, { buffType = "magic" }, "PALADIN") -- Repentance
|
||||||
Debuff({ 2878, 5627, 5627 }, { buffType = "magic"}, "PALADIN") -- Turn Undead
|
Debuff({ 2878, 5627, 5627 }, { buffType = "magic"}, "PALADIN") -- Turn Undead
|
||||||
Debuff({ 21183, 20188, 20300, 20301, 20302, 20303, 27159 }, { }, "PALADIN") -- Judgement of the Crusader
|
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({ 20271, 20185, 20344, 20345, 20346 }, { buffType = "magic"}, "PALADIN") -- Judgement of Light
|
||||||
Debuff({ 20186, 20354, 20355 }, { buffType = "magic"}, "PALADIN") -- Judgement of Wisdom
|
Debuff({ 20186, 20354, 20355, 53408 }, { buffType = "magic"}, "PALADIN") -- Judgement of Wisdom
|
||||||
Debuff({ 20184, 31896}, { buffType = "magic", }, "PALADIN") -- Judgement of Justice
|
Debuff({ 20184, 31896, 53407}, { buffType = "magic", }, "PALADIN") -- Judgement of Justice
|
||||||
Debuff({ 853, 5588, 5589, 10308 }, { buffType = "magic" }, "PALADIN") -- Hammer of Justice
|
Debuff({ 853, 5588, 5589, 10308 }, { buffType = "magic" }, "PALADIN") -- Hammer of Justice
|
||||||
Debuff({ 20170 } ,{ buffType = "physical", }, "PALADIN") -- Seal of Justice stun
|
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
|
-- HUNTER
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Debuff( { 19434, 20900, 20901, 20902, 20903, 20904}, { buffType = "physical"}, "HUNTER") -- Aimed Shot
|
Debuff( { 19434, 20900, 20901, 20902, 20903, 20904, 27065, 49049, 49050}, { buffType = "physical"}, "HUNTER") -- Aimed Shot
|
||||||
Debuff({ 1130, 14323, 14324, 14325 }, { buffType = "magic", }, "HUNTER") -- Hunter's Mark
|
Debuff({ 1130, 14323, 14324, 14325, 53338 }, { 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({ 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({ 34490 }, { buffType = "magic" }, "HUNTER") -- Silencing Shot
|
||||||
Debuff({ 3043 }, { buffType = "poison", }, "HUNTER") -- Scorpid Sting
|
Debuff({ 3043 }, { buffType = "poison", }, "HUNTER") -- Scorpid Sting
|
||||||
Debuff({ 3034, 14279, 14280, 27018 }, { buffType = "poison", }, "HUNTER") -- Viper Sting
|
Debuff({ 3034, 14279, 14280, 27018 }, { buffType = "poison", }, "HUNTER") -- Viper Sting
|
||||||
Debuff({ 19386, 24132, 24133, 27068 }, { buffType = "poison", }, "HUNTER") -- Wyvern Sting
|
Debuff({ 19386, 24132, 24133, 27068, 49011, 49012 }, { buffType = "poison", }, "HUNTER") -- Wyvern Sting
|
||||||
Debuff({ 24131, 24134, 24135, 27069 }, { buffType = "poison", altName = select(1, GetSpellInfo(19386)) .. " Dot" }, "HUNTER") -- Wyvern Sting Dot
|
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({ 1513, 14326, 14327 }, { buffType = "magic"}, "HUNTER") -- Scare Beast
|
||||||
Debuff({ 19229 }, { buffType = "physical", }, "HUNTER") -- Wing Clip Root
|
Debuff({ 19229, 47168 }, { buffType = "physical", }, "HUNTER") -- Wing Clip Root
|
||||||
Debuff({ 19306, 20909, 20910 }, { buffType = "physical"}, "HUNTER") -- Counterattack
|
Debuff({ 19306, 20909, 20910, 27067, 48998, 48999 }, { buffType = "physical"}, "HUNTER") -- Counterattack
|
||||||
Debuff({ 13812, 14314, 14315, 27026 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "HUNTER") -- Explosive Trap
|
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({ 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({ 3355, 14308, 14309 }, { buffType = "magic" }, "HUNTER") -- Freezing Trap
|
||||||
Debuff({ 19503 }, { buffType = "physical" }, "HUNTER") -- Scatter Shot
|
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({ 5116 }, { buffType = "physical" }, "HUNTER") -- Concussive Shot
|
||||||
Debuff({ 19410 }, { buffType = "physical" }, "HUNTER") -- Conc Stun
|
Debuff({ 19410 }, { buffType = "physical" }, "HUNTER") -- Conc Stun
|
||||||
Debuff({ 24394 }, { buffType = "physical" }, "HUNTER") -- Intimidation
|
Debuff({ 24394 }, { buffType = "physical" }, "HUNTER") -- Intimidation
|
||||||
Debuff({ 15571 }, { buffType = "physical" }, "HUNTER") -- Daze from Aspect
|
Debuff({ 15571 }, { buffType = "physical" }, "HUNTER") -- Daze from Aspect
|
||||||
Debuff({ 19185 }, { buffType = "physical" }, "HUNTER") -- Entrapment
|
Debuff({ 19185 }, { buffType = "physical" }, "HUNTER") -- Entrapment
|
||||||
Debuff({ 25999 }, { buffType = "physical" }, "HUNTER") -- Boar Charge
|
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
|
-- MAGE
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Debuff({ 133, 143, 145, 3140, 8400, 8401, 8402, 10148, 10149, 10150, 10151, 25306, 27070 }, { buffType = "magic"}, "MAGE") -- Fireball
|
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 }, { buffType = "magic" }, "MAGE") -- Pyroblast
|
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({ 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({ 12355 } , { buffType = "physical" }, "MAGE") -- Impact
|
||||||
Debuff({ 12654 }, { buffType = "magic" }, "MAGE") -- Ignite
|
Debuff({ 12654 }, { buffType = "magic" }, "MAGE") -- Ignite
|
||||||
Debuff({ 22959 }, { buffType = "magic" }, "MAGE") -- Fire Vulnerability
|
Debuff({ 22959 }, { buffType = "magic" }, "MAGE") -- Fire Vulnerability
|
||||||
Debuff({ 12579 }, { buffType = "magic" }, "MAGE") -- Winter's Chill
|
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
|
--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({ 12484, 12485, 12486 }, { .5 }) -- Improved Blizzard (Chilled)
|
||||||
Debuff({ 6136, 7321, 18101, 20005, 16927, 15850, 31257}, { buffType = "magic" }, "MAGE") -- Frost/Ice Armor (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({ 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({ 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.buffToId = {}
|
||||||
LibClassAuras.altNames = {}
|
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)
|
local function Spell(id, opts, class, spellTable, idTable)
|
||||||
if not opts or not class then
|
if not opts or not class then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local lastRankID
|
local spellName
|
||||||
if type(id) == "table" then
|
if type(id) == "table" then
|
||||||
local clones = id
|
local realIds = {}
|
||||||
lastRankID = clones[#clones]
|
for i = 1, #id do
|
||||||
|
if GetSpellInfo(id[i]) then
|
||||||
|
tinsert(realIds, id[i])
|
||||||
|
spellName = GetSpellInfo(id[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
id = realIds
|
||||||
else
|
else
|
||||||
lastRankID = id
|
spellName = GetSpellInfo(id)
|
||||||
end
|
end
|
||||||
|
|
||||||
local spellName = GetSpellInfo(lastRankID)
|
|
||||||
if not spellName then
|
if not spellName then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
711
Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.lua
Normal file
711
Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.lua
Normal file
@ -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, -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
|
12
Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.toc
Normal file
12
Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.toc
Normal file
@ -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/
|
<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">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="DRData-1.0.lua"/>
|
<Script file = "LibCustomGlow-1.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
51
Libs/LibCustomGlow-1.0/README.md
Normal file
51
Libs/LibCustomGlow-1.0/README.md
Normal file
@ -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
|
@ -1,6 +1,7 @@
|
|||||||
|
--@curseforge-project-slug: libsharedmedia-3-0@
|
||||||
--[[
|
--[[
|
||||||
Name: LibSharedMedia-3.0
|
Name: LibSharedMedia-3.0
|
||||||
Revision: $Revision: 114 $
|
Revision: $Revision: 128 $
|
||||||
Author: Elkano (elkano@gmx.de)
|
Author: Elkano (elkano@gmx.de)
|
||||||
Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
|
Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
|
||||||
Website: http://www.wowace.com/projects/libsharedmedia-3-0/
|
Website: http://www.wowace.com/projects/libsharedmedia-3-0/
|
||||||
|
@ -10,7 +10,7 @@ if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
|||||||
|
|
||||||
function LibStub:NewLibrary(major, minor)
|
function LibStub:NewLibrary(major, minor)
|
||||||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
||||||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
minor = assert(tonumber(string.match(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
||||||
|
|
||||||
local oldminor = self.minors[major]
|
local oldminor = self.minors[major]
|
||||||
if oldminor and oldminor >= minor then return nil end
|
if oldminor and oldminor >= minor then return nil end
|
||||||
|
@ -16,7 +16,7 @@ local UnitName = UnitName
|
|||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local Announcements = Gladdy:NewModule("Announcements", nil, {
|
local Announcements = Gladdy:NewModule("Announcements", 101, {
|
||||||
announcements = {
|
announcements = {
|
||||||
drinks = true,
|
drinks = true,
|
||||||
resurrections = true,
|
resurrections = true,
|
||||||
@ -26,6 +26,7 @@ local Announcements = Gladdy:NewModule("Announcements", nil, {
|
|||||||
healthThreshold = 20,
|
healthThreshold = 20,
|
||||||
trinketUsed = true,
|
trinketUsed = true,
|
||||||
trinketReady = false,
|
trinketReady = false,
|
||||||
|
spellInterrupt = true,
|
||||||
dest = "party",
|
dest = "party",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -41,16 +42,20 @@ function Announcements:Initialize()
|
|||||||
[GetSpellInfo(20777)] = true,
|
[GetSpellInfo(20777)] = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
self:RegisterMessage("CAST_START")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
|
||||||
self:RegisterMessage("UNIT_SPEC")
|
|
||||||
self:RegisterMessage("UNIT_HEALTH")
|
|
||||||
self:RegisterMessage("TRINKET_USED")
|
|
||||||
self:RegisterMessage("TRINKET_READY")
|
|
||||||
self:RegisterMessage("SHADOWSIGHT")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Announcements:Reset()
|
function Announcements:Reset()
|
||||||
|
self:UnregisterMessages(
|
||||||
|
"CAST_START",
|
||||||
|
"ENEMY_SPOTTED",
|
||||||
|
"UNIT_SPEC",
|
||||||
|
"AURA_GAIN",
|
||||||
|
"UNIT_HEALTH",
|
||||||
|
"TRINKET_USED",
|
||||||
|
"TRINKET_READY",
|
||||||
|
"SHADOWSIGHT",
|
||||||
|
"SPELL_INTERRUPT")
|
||||||
self.enemy = {}
|
self.enemy = {}
|
||||||
self.throttled = {}
|
self.throttled = {}
|
||||||
end
|
end
|
||||||
@ -60,17 +65,25 @@ function Announcements:Test(unit)
|
|||||||
if (not button) then
|
if (not button) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
self:JOINED_ARENA()
|
||||||
if (unit == "arena1") then
|
if unit == "arena1" then
|
||||||
self:UNIT_SPEC(unit, button.testSpec)
|
self:AURA_GAIN(unit, nil, nil, self.DRINK_AURA)
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
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)
|
function Announcements:CAST_START(unit, spell)
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
if (not button or not Gladdy.db.announcements.resurrections) then
|
if (not button or not Gladdy.db.announcements.resurrections) then
|
||||||
@ -78,7 +91,7 @@ function Announcements:CAST_START(unit, spell)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (self.RES_SPELLS[spell]) then
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -92,7 +105,7 @@ function Announcements:ENEMY_SPOTTED(unit)
|
|||||||
if button.name == "Unknown" then
|
if button.name == "Unknown" then
|
||||||
button.name = UnitName(unit)
|
button.name = UnitName(unit)
|
||||||
end
|
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
|
self.enemy[unit] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -105,7 +118,7 @@ function Announcements:UNIT_SPEC(unit, spec)
|
|||||||
if button.name == "Unknown" then
|
if button.name == "Unknown" then
|
||||||
button.name = UnitName(unit)
|
button.name = UnitName(unit)
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function Announcements:UNIT_HEALTH(unit, health, healthMax)
|
function Announcements:UNIT_HEALTH(unit, health, healthMax)
|
||||||
@ -116,7 +129,7 @@ function Announcements:UNIT_HEALTH(unit, health, healthMax)
|
|||||||
|
|
||||||
local healthPercent = floor(health * 100 / healthMax)
|
local healthPercent = floor(health * 100 / healthMax)
|
||||||
if (healthPercent < Gladdy.db.announcements.healthThreshold) then
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -126,7 +139,7 @@ function Announcements:TRINKET_USED(unit)
|
|||||||
return
|
return
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function Announcements:TRINKET_READY(unit)
|
function Announcements:TRINKET_READY(unit)
|
||||||
@ -135,17 +148,25 @@ function Announcements:TRINKET_READY(unit)
|
|||||||
return
|
return
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function Announcements:CheckDrink(unit, aura)
|
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], unit)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Announcements:AURA_GAIN(unit, auraType, spellID, spellName)
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
if (not button or not Gladdy.db.announcements.drinks) then
|
if (not button or not Gladdy.db.announcements.drinks) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if (aura == self.DRINK_AURA) then
|
if (spellName == self.DRINK_AURA) then
|
||||||
self:Send(L["DRINKING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class])
|
self:Send(L["DRINKING: %s (%s)"]:format(button.name, button.classLoc), 3, RAID_CLASS_COLORS[button.class], unit)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -153,13 +174,17 @@ function Announcements:SHADOWSIGHT(msg)
|
|||||||
self:Send(msg, 2)
|
self:Send(msg, 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Announcements:Send(msg, throttle, color)
|
function Announcements:Send(msg, throttle, color, unit)
|
||||||
if (throttle and throttle > 0) then
|
if (throttle and throttle > 0) then
|
||||||
if (not self.throttled[msg]) then
|
local throttledMsg = unit and msg .. unit or msg
|
||||||
self.throttled[msg] = GetTime() + throttle
|
if (not self.throttled[throttledMsg]) then
|
||||||
elseif (self.throttled[msg] < GetTime()) then
|
self.throttled[throttledMsg] = GetTime() + throttle
|
||||||
self.throttled[msg] = nil
|
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
|
else
|
||||||
|
Gladdy:Debug("INFO", throttledMsg, "- THROTTLED -", self.throttled[throttledMsg])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -237,41 +262,47 @@ function Announcements:GetOptions()
|
|||||||
desc = L["Announce when an enemy's trinket is ready again"],
|
desc = L["Announce when an enemy's trinket is ready again"],
|
||||||
order = 4,
|
order = 4,
|
||||||
}),
|
}),
|
||||||
|
spellInterrupt = option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Interrupts"],
|
||||||
|
desc = L["Announces when enemies' spells are interrupted"],
|
||||||
|
order = 5,
|
||||||
|
}),
|
||||||
drinks = option({
|
drinks = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Drinking"],
|
name = L["Drinking"],
|
||||||
desc = L["Announces when enemies sit down to drink"],
|
desc = L["Announces when enemies sit down to drink"],
|
||||||
order = 5,
|
order = 6,
|
||||||
}),
|
}),
|
||||||
resurrections = option({
|
resurrections = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Resurrection"],
|
name = L["Resurrection"],
|
||||||
desc = L["Announces when an enemy tries to resurrect a teammate"],
|
desc = L["Announces when an enemy tries to resurrect a teammate"],
|
||||||
order = 6,
|
order = 7,
|
||||||
}),
|
}),
|
||||||
enemy = option({
|
enemy = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["New enemies"],
|
name = L["New enemies"],
|
||||||
desc = L["Announces when new enemies are discovered"],
|
desc = L["Announces when new enemies are discovered"],
|
||||||
order = 7,
|
order = 8,
|
||||||
}),
|
}),
|
||||||
spec = option({
|
spec = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Spec Detection"],
|
name = L["Spec Detection"],
|
||||||
desc = L["Announces when the spec of an enemy was detected"],
|
desc = L["Announces when the spec of an enemy was detected"],
|
||||||
order = 8,
|
order = 9,
|
||||||
}),
|
}),
|
||||||
health = option({
|
health = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Low health"],
|
name = L["Low health"],
|
||||||
desc = L["Announces when an enemy drops below a certain health threshold"],
|
desc = L["Announces when an enemy drops below a certain health threshold"],
|
||||||
order = 9,
|
order = 10,
|
||||||
}),
|
}),
|
||||||
healthThreshold = option({
|
healthThreshold = option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Low health threshold"],
|
name = L["Low health threshold"],
|
||||||
desc = L["Choose how low an enemy must be before low health is announced"],
|
desc = L["Choose how low an enemy must be before low health is announced"],
|
||||||
order = 10,
|
order = 11,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 100,
|
max = 100,
|
||||||
step = 1,
|
step = 1,
|
||||||
@ -283,7 +314,7 @@ function Announcements:GetOptions()
|
|||||||
type = "select",
|
type = "select",
|
||||||
name = L["Destination"],
|
name = L["Destination"],
|
||||||
desc = L["Choose how your announcements are displayed"],
|
desc = L["Choose how your announcements are displayed"],
|
||||||
order = 11,
|
order = 12,
|
||||||
values = destValues,
|
values = destValues,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
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 CreateFrame = CreateFrame
|
||||||
local GetTime = GetTime
|
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local ACDFrame = Gladdy:NewModule("Arena Countdown", nil, {
|
local ACDFrame = Gladdy:NewModule("Arena Countdown", nil, {
|
||||||
countdown = true,
|
countdown = true,
|
||||||
arenaCountdownSize = 256
|
arenaCountdownSize = 256,
|
||||||
|
arenaCountdownFrameStrata = "HIGH",
|
||||||
|
arenaCountdownFrameLevel = 50,
|
||||||
})
|
})
|
||||||
|
|
||||||
function ACDFrame:OnEvent(event, ...)
|
function ACDFrame:OnEvent(event, ...)
|
||||||
@ -15,115 +16,55 @@ end
|
|||||||
|
|
||||||
function ACDFrame:Initialize()
|
function ACDFrame:Initialize()
|
||||||
self.locale = Gladdy:GetArenaTimer()
|
self.locale = Gladdy:GetArenaTimer()
|
||||||
self.hidden = false
|
|
||||||
self.countdown = -1
|
self.countdown = -1
|
||||||
self.texturePath = "Interface\\AddOns\\Gladdy\\Images\\Countdown\\";
|
self.texturePath = "Interface\\AddOns\\Gladdy\\Images\\Countdown\\";
|
||||||
|
|
||||||
local ACDNumFrame = CreateFrame("Frame", "ACDNumFrame", UIParent)
|
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 = 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")
|
local ACDNumTens = ACDNumFrame:CreateTexture("ACDNumTens", "OVERLAY")
|
||||||
ACDNumTens:SetWidth(256)
|
|
||||||
ACDNumTens:SetHeight(256)
|
|
||||||
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -50, 0)
|
|
||||||
self.ACDNumTens = ACDNumTens
|
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")
|
local ACDNumOnes = ACDNumFrame:CreateTexture("ACDNumOnes", "OVERLAY")
|
||||||
ACDNumOnes:SetWidth(256)
|
|
||||||
ACDNumOnes:SetHeight(256)
|
|
||||||
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 50, 0)
|
|
||||||
self.ACDNumOnes = ACDNumOnes
|
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")
|
local ACDNumOne = ACDNumFrame:CreateTexture("ACDNumOne", "OVERLAY")
|
||||||
ACDNumOne:SetWidth(256)
|
|
||||||
ACDNumOne:SetHeight(256)
|
|
||||||
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
|
|
||||||
self.ACDNumOne = ACDNumOne
|
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")
|
|
||||||
self.faction = UnitFactionGroup("player")
|
|
||||||
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
|
if Gladdy.db.countdown then
|
||||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
self:RegisterMessage("ENEMY_SPOTTED")
|
||||||
self.endTime = GetTime() + 70
|
self:RegisterMessage("UNIT_SPEC")
|
||||||
self:SetScript("OnUpdate", ACDFrame.OnUpdate)
|
|
||||||
end
|
end
|
||||||
|
self.faction = UnitFactionGroup("player")
|
||||||
|
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
function ACDFrame:ENEMY_SPOTTED()
|
function ACDFrame:UpdateFrameOnce()
|
||||||
if not Gladdy.frame.testing then
|
if Gladdy.db.countdown then
|
||||||
ACDFrame:Reset()
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
self:RegisterMessage("ENEMY_SPOTTED")
|
||||||
|
self:RegisterMessage("UNIT_SPEC")
|
||||||
|
else
|
||||||
|
self:UnregisterAllMessages()
|
||||||
end
|
end
|
||||||
end
|
self.ACDNumFrame:SetFrameStrata(Gladdy.db.arenaCountdownFrameStrata)
|
||||||
|
self.ACDNumFrame:SetFrameLevel(Gladdy.db.arenaCountdownFrameLevel)
|
||||||
|
|
||||||
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:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||||
self.ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
|
self.ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||||
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
|
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
|
||||||
@ -141,20 +82,97 @@ function ACDFrame:UpdateFrame()
|
|||||||
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
|
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
function ACDFrame:Test()
|
function ACDFrame:HideAll()
|
||||||
self.countdown = 30
|
self.ACDNumFrame:Hide()
|
||||||
self:JOINED_ARENA()
|
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
|
end
|
||||||
|
|
||||||
function ACDFrame:Reset()
|
function ACDFrame:Reset()
|
||||||
self.endTime = 0
|
if self.ticker and not self.ticker:IsCancelled() then
|
||||||
self.countdown = 0
|
self.ticker:Cancel()
|
||||||
|
end
|
||||||
|
self.countdown = nil
|
||||||
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||||
self:SetScript("OnUpdate", nil)
|
ACDFrame:HideAll()
|
||||||
self.hidden = true;
|
end
|
||||||
self.ACDNumTens:Hide();
|
|
||||||
self.ACDNumOnes:Hide();
|
function ACDFrame:ENEMY_SPOTTED()
|
||||||
self.ACDNumOne:Hide();
|
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
|
end
|
||||||
|
|
||||||
function ACDFrame:GetOptions()
|
function ACDFrame:GetOptions()
|
||||||
@ -179,6 +197,30 @@ function ACDFrame:GetOptions()
|
|||||||
max = 512,
|
max = 512,
|
||||||
step = 16,
|
step = 16,
|
||||||
width = "full",
|
width = "full",
|
||||||
|
disabled = function() return not Gladdy.db.countdown end,
|
||||||
|
}),
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 5,
|
||||||
|
},
|
||||||
|
arenaCountdownFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 6,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
disabled = function() return not Gladdy.db.countdown end,
|
||||||
|
}),
|
||||||
|
arenaCountdownFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 7,
|
||||||
|
width = "full",
|
||||||
|
disabled = function() return not Gladdy.db.countdown end,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -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 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 GetSpellInfo = GetSpellInfo
|
||||||
local GetSpellDescription = GetSpellDescription
|
local GetSpellDescription = GetSpellDescription
|
||||||
local CreateFrame, GetTime = CreateFrame, GetTime
|
local CreateFrame, GetTime = CreateFrame, GetTime
|
||||||
@ -41,7 +41,27 @@ local Auras = Gladdy:NewModule("Auras", nil, {
|
|||||||
auraListDefault = defaultSpells(),
|
auraListDefault = defaultSpells(),
|
||||||
auraListInterrupts = defaultInterrupts(),
|
auraListInterrupts = defaultInterrupts(),
|
||||||
auraInterruptColorsEnabled = true,
|
auraInterruptColorsEnabled = true,
|
||||||
auraInterruptColors = Gladdy:GetSpellSchoolColors()
|
auraInterruptColors = Gladdy:GetSpellSchoolColors(),
|
||||||
|
auraDetached = false,
|
||||||
|
auraXOffset = 0,
|
||||||
|
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()
|
function Auras:Initialize()
|
||||||
@ -57,27 +77,33 @@ function Auras:Initialize()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Auras:CreateFrame(unit)
|
function Auras:CreateFrame(unit)
|
||||||
local auraFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit])
|
local auraFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit])
|
||||||
auraFrame:EnableMouse(false)
|
auraFrame:EnableMouse(false)
|
||||||
auraFrame:SetFrameStrata("MEDIUM")
|
auraFrame:SetFrameStrata("MEDIUM")
|
||||||
auraFrame:SetFrameLevel(3)
|
auraFrame:SetFrameLevel(3)
|
||||||
|
auraFrame.frame = CreateFrame("Frame", nil, auraFrame)
|
||||||
|
auraFrame.frame:SetPoint("TOPLEFT", auraFrame, "TOPLEFT")
|
||||||
|
auraFrame.frame:EnableMouse(false)
|
||||||
|
auraFrame.frame:SetFrameStrata("MEDIUM")
|
||||||
|
auraFrame.frame:SetFrameLevel(3)
|
||||||
|
|
||||||
auraFrame.cooldown = CreateFrame("Cooldown", nil, auraFrame, "CooldownFrameTemplate")
|
auraFrame.cooldown = CreateFrame("Cooldown", nil, auraFrame.frame, "CooldownFrameTemplate")
|
||||||
auraFrame.cooldown.noCooldownCount = true
|
auraFrame.cooldown.noCooldownCount = true
|
||||||
auraFrame.cooldown:SetFrameStrata("MEDIUM")
|
auraFrame.cooldown:SetFrameStrata("MEDIUM")
|
||||||
auraFrame.cooldown:SetFrameLevel(4)
|
auraFrame.cooldown:SetFrameLevel(4)
|
||||||
auraFrame.cooldown:SetReverse(true)
|
auraFrame.cooldown:SetReverse(true)
|
||||||
auraFrame.cooldown:SetHideCountdownNumbers(true)
|
auraFrame.cooldown:SetHideCountdownNumbers(true)
|
||||||
|
|
||||||
auraFrame.cooldownFrame = CreateFrame("Frame", nil, auraFrame)
|
auraFrame.cooldownFrame = CreateFrame("Frame", nil, auraFrame.frame)
|
||||||
auraFrame.cooldownFrame:ClearAllPoints()
|
auraFrame.cooldownFrame:ClearAllPoints()
|
||||||
auraFrame.cooldownFrame:SetAllPoints(auraFrame)
|
auraFrame.cooldownFrame:SetAllPoints(auraFrame.frame)
|
||||||
auraFrame.cooldownFrame:SetFrameStrata("MEDIUM")
|
auraFrame.cooldownFrame:SetFrameStrata("MEDIUM")
|
||||||
auraFrame.cooldownFrame:SetFrameLevel(5)
|
auraFrame.cooldownFrame:SetFrameLevel(5)
|
||||||
|
|
||||||
auraFrame.icon = auraFrame:CreateTexture(nil, "BACKGROUND")
|
auraFrame.icon = auraFrame.frame:CreateTexture(nil, "BACKGROUND")
|
||||||
auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
auraFrame.icon:SetAllPoints(auraFrame)
|
auraFrame.icon:SetAllPoints(auraFrame)
|
||||||
|
auraFrame.icon.masked = true
|
||||||
|
|
||||||
auraFrame.icon.overlay = auraFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
auraFrame.icon.overlay = auraFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
||||||
auraFrame.icon.overlay:SetAllPoints(auraFrame)
|
auraFrame.icon.overlay:SetAllPoints(auraFrame)
|
||||||
@ -89,7 +115,7 @@ function Auras:CreateFrame(unit)
|
|||||||
|
|
||||||
auraFrame.text = auraFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
auraFrame.text = auraFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE")
|
auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE")
|
||||||
auraFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a)
|
auraFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor))
|
||||||
--auraFrame.text:SetShadowOffset(1, -1)
|
--auraFrame.text:SetShadowOffset(1, -1)
|
||||||
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
||||||
auraFrame.text:SetJustifyH("CENTER")
|
auraFrame.text:SetJustifyH("CENTER")
|
||||||
@ -98,13 +124,13 @@ function Auras:CreateFrame(unit)
|
|||||||
|
|
||||||
auraFrame:SetScript("OnUpdate", function(self, elapsed)
|
auraFrame:SetScript("OnUpdate", function(self, elapsed)
|
||||||
if (self.active) then
|
if (self.active) then
|
||||||
if (self.interruptFrame.priority and self.priority < self.interruptFrame.priority) then
|
if (not Gladdy.db.auraInterruptDetached and not Gladdy.db.auraDetached and self.interruptFrame.priority and self.priority < self.interruptFrame.priority) then
|
||||||
self:SetAlpha(0.01)
|
self.frame:SetAlpha(0.001)
|
||||||
else
|
else
|
||||||
self:SetAlpha(1)
|
self.frame:SetAlpha(1)
|
||||||
end
|
end
|
||||||
if (self.timeLeft <= 0) then
|
if (self.timeLeft <= 0) then
|
||||||
Auras:AURA_FADE(self.unit, self.track)
|
Auras:AURA_FADE(self.unit, self.track, true)
|
||||||
else
|
else
|
||||||
if self.spellID == 8178 then
|
if self.spellID == 8178 then
|
||||||
self.text:SetText("")
|
self.text:SetText("")
|
||||||
@ -114,7 +140,7 @@ function Auras:CreateFrame(unit)
|
|||||||
self.timeLeft = self.timeLeft - elapsed
|
self.timeLeft = self.timeLeft - elapsed
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:SetAlpha(0.01)
|
self.frame:SetAlpha(0.001)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -125,30 +151,36 @@ function Auras:CreateFrame(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Auras:CreateInterrupt(unit)
|
function Auras:CreateInterrupt(unit)
|
||||||
local interruptFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit])
|
local interruptFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit])
|
||||||
interruptFrame:EnableMouse(false)
|
interruptFrame:EnableMouse(false)
|
||||||
interruptFrame:SetFrameStrata("MEDIUM")
|
interruptFrame:SetFrameStrata("MEDIUM")
|
||||||
interruptFrame:SetFrameLevel(3)
|
interruptFrame:SetFrameLevel(3)
|
||||||
|
interruptFrame.frame = CreateFrame("Frame", nil, interruptFrame)
|
||||||
|
interruptFrame.frame:SetPoint("TOPLEFT", interruptFrame, "TOPLEFT")
|
||||||
|
interruptFrame.frame:EnableMouse(false)
|
||||||
|
interruptFrame.frame:SetFrameStrata("MEDIUM")
|
||||||
|
interruptFrame.frame:SetFrameLevel(3)
|
||||||
|
|
||||||
interruptFrame.cooldown = CreateFrame("Cooldown", nil, interruptFrame, "CooldownFrameTemplate")
|
interruptFrame.cooldown = CreateFrame("Cooldown", nil, interruptFrame.frame, "CooldownFrameTemplate")
|
||||||
interruptFrame.cooldown.noCooldownCount = true
|
interruptFrame.cooldown.noCooldownCount = true
|
||||||
interruptFrame.cooldown:SetFrameStrata("MEDIUM")
|
interruptFrame.cooldown:SetFrameStrata("MEDIUM")
|
||||||
interruptFrame.cooldown:SetFrameLevel(4)
|
interruptFrame.cooldown:SetFrameLevel(4)
|
||||||
interruptFrame.cooldown:SetReverse(true)
|
interruptFrame.cooldown:SetReverse(true)
|
||||||
interruptFrame.cooldown:SetHideCountdownNumbers(true)
|
interruptFrame.cooldown:SetHideCountdownNumbers(true)
|
||||||
|
|
||||||
interruptFrame.cooldownFrame = CreateFrame("Frame", nil, interruptFrame)
|
interruptFrame.cooldownFrame = CreateFrame("Frame", nil, interruptFrame.frame)
|
||||||
interruptFrame.cooldownFrame:ClearAllPoints()
|
interruptFrame.cooldownFrame:ClearAllPoints()
|
||||||
interruptFrame.cooldownFrame:SetAllPoints(interruptFrame)
|
interruptFrame.cooldownFrame:SetAllPoints(interruptFrame.frame)
|
||||||
interruptFrame.cooldownFrame:SetFrameStrata("MEDIUM")
|
interruptFrame.cooldownFrame:SetFrameStrata("MEDIUM")
|
||||||
interruptFrame.cooldownFrame:SetFrameLevel(5)
|
interruptFrame.cooldownFrame:SetFrameLevel(5)
|
||||||
|
|
||||||
interruptFrame.icon = interruptFrame:CreateTexture(nil, "BACKGROUND")
|
interruptFrame.icon = interruptFrame.frame:CreateTexture(nil, "BACKGROUND")
|
||||||
interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
interruptFrame.icon:SetAllPoints(interruptFrame)
|
interruptFrame.icon:SetAllPoints(interruptFrame.frame)
|
||||||
|
interruptFrame.icon.masked = true
|
||||||
|
|
||||||
interruptFrame.icon.overlay = interruptFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
interruptFrame.icon.overlay = interruptFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
||||||
interruptFrame.icon.overlay:SetAllPoints(interruptFrame)
|
interruptFrame.icon.overlay:SetAllPoints(interruptFrame.frame)
|
||||||
interruptFrame.icon.overlay:SetTexture(Gladdy.db.buttonBorderStyle)
|
interruptFrame.icon.overlay:SetTexture(Gladdy.db.buttonBorderStyle)
|
||||||
|
|
||||||
local classIcon = Gladdy.modules["Class Icon"].frames[unit]
|
local classIcon = Gladdy.modules["Class Icon"].frames[unit]
|
||||||
@ -157,7 +189,7 @@ function Auras:CreateInterrupt(unit)
|
|||||||
|
|
||||||
interruptFrame.text = interruptFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
interruptFrame.text = interruptFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE")
|
interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), 10, "OUTLINE")
|
||||||
interruptFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a)
|
interruptFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor))
|
||||||
--auraFrame.text:SetShadowOffset(1, -1)
|
--auraFrame.text:SetShadowOffset(1, -1)
|
||||||
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
||||||
interruptFrame.text:SetJustifyH("CENTER")
|
interruptFrame.text:SetJustifyH("CENTER")
|
||||||
@ -166,23 +198,25 @@ function Auras:CreateInterrupt(unit)
|
|||||||
|
|
||||||
interruptFrame:SetScript("OnUpdate", function(self, elapsed)
|
interruptFrame:SetScript("OnUpdate", function(self, elapsed)
|
||||||
if (self.active) then
|
if (self.active) then
|
||||||
if (Auras.frames[self.unit].priority and self.priority <= Auras.frames[self.unit].priority) then
|
if (not Gladdy.db.auraInterruptDetached and Auras.frames[self.unit].priority and self.priority <= Auras.frames[self.unit].priority) then
|
||||||
self:SetAlpha(0.01)
|
self.frame:SetAlpha(0.001)
|
||||||
else
|
else
|
||||||
self:SetAlpha(1)
|
self.frame:SetAlpha(1)
|
||||||
end
|
end
|
||||||
if (self.timeLeft <= 0) then
|
if (self.timeLeft <= 0) then
|
||||||
self.active = false
|
self.active = false
|
||||||
self.priority = nil
|
self.priority = nil
|
||||||
self.spellSchool = nil
|
self.spellSchool = nil
|
||||||
self.cooldown:Clear()
|
self.cooldown:Clear()
|
||||||
self:SetAlpha(0.01)
|
self.frame:SetAlpha(0.001)
|
||||||
else
|
else
|
||||||
self.timeLeft = self.timeLeft - elapsed
|
self.timeLeft = self.timeLeft - elapsed
|
||||||
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 10)
|
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 10)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:SetAlpha(0.01)
|
self.priority = nil
|
||||||
|
self.spellSchool = nil
|
||||||
|
self.frame:SetAlpha(0.001)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -197,26 +231,94 @@ function Auras:UpdateFrame(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize
|
local width, height
|
||||||
|
|
||||||
|
if Gladdy.db.auraDetached then
|
||||||
|
width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize
|
||||||
|
|
||||||
|
auraFrame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
auraFrame:SetFrameLevel(Gladdy.db.auraFrameLevel)
|
||||||
|
auraFrame.frame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
auraFrame.frame:SetFrameLevel(Gladdy.db.auraFrameLevel)
|
||||||
|
auraFrame.cooldown:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
auraFrame.cooldown:SetFrameLevel(Gladdy.db.auraFrameLevel + 1)
|
||||||
|
auraFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
auraFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraFrameLevel + 2)
|
||||||
|
|
||||||
|
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"},
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
0,
|
||||||
|
0)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize
|
||||||
|
|
||||||
|
auraFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
auraFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1)
|
||||||
|
auraFrame.frame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
auraFrame.frame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1)
|
||||||
|
auraFrame.cooldown:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
auraFrame.cooldown:SetFrameLevel(Gladdy.db.classIconFrameLevel + 2)
|
||||||
|
auraFrame.cooldownFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
auraFrame.cooldownFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 3)
|
||||||
|
|
||||||
|
auraFrame:ClearAllPoints()
|
||||||
|
auraFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT")
|
||||||
|
if auraFrame.mover then
|
||||||
|
auraFrame.mover:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
|
|
||||||
auraFrame:SetWidth(width)
|
auraFrame:SetWidth(width)
|
||||||
auraFrame:SetHeight(height)
|
auraFrame:SetHeight(height)
|
||||||
auraFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit])
|
auraFrame.frame:SetWidth(height)
|
||||||
|
auraFrame.frame:SetHeight(height)
|
||||||
|
auraFrame.cooldownFrame:ClearAllPoints()
|
||||||
|
auraFrame.cooldownFrame:SetAllPoints(auraFrame)
|
||||||
|
|
||||||
auraFrame.cooldown:SetWidth(width - width/16)
|
|
||||||
auraFrame.cooldown:SetHeight(height - height/16)
|
|
||||||
auraFrame.cooldown:ClearAllPoints()
|
auraFrame.cooldown:ClearAllPoints()
|
||||||
auraFrame.cooldown:SetPoint("CENTER", auraFrame, "CENTER")
|
auraFrame.cooldown:SetPoint("CENTER", auraFrame, "CENTER")
|
||||||
|
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.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||||
|
|
||||||
auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
auraFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
||||||
auraFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a)
|
auraFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor))
|
||||||
|
|
||||||
auraFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
auraFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
||||||
if auraFrame.track and auraFrame.track == AURA_TYPE_DEBUFF then
|
if auraFrame.track and auraFrame.track == AURA_TYPE_DEBUFF then
|
||||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a)
|
auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor))
|
||||||
elseif auraFrame.track and auraFrame.track == AURA_TYPE_BUFF then
|
elseif auraFrame.track and auraFrame.track == AURA_TYPE_BUFF then
|
||||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraBuffBorderColor.r, Gladdy.db.auraBuffBorderColor.g, Gladdy.db.auraBuffBorderColor.b, Gladdy.db.auraBuffBorderColor.a)
|
auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraBuffBorderColor))
|
||||||
else
|
else
|
||||||
auraFrame.icon.overlay:SetVertexColor(0, 0, 0, 1)
|
auraFrame.icon.overlay:SetVertexColor(0, 0, 0, 1)
|
||||||
end
|
end
|
||||||
@ -226,7 +328,31 @@ function Auras:UpdateFrame(unit)
|
|||||||
if Gladdy.db.auraDisableCircle then
|
if Gladdy.db.auraDisableCircle then
|
||||||
auraFrame.cooldown:SetAlpha(0)
|
auraFrame.cooldown:SetAlpha(0)
|
||||||
end
|
end
|
||||||
self:UpdateInterruptFrame(unit)
|
|
||||||
|
if Gladdy.db.auraIconZoomed then
|
||||||
|
if auraFrame.icon.masked then
|
||||||
|
auraFrame.icon:SetMask("")
|
||||||
|
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("")
|
||||||
|
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
|
end
|
||||||
|
|
||||||
function Auras:UpdateInterruptFrame(unit)
|
function Auras:UpdateInterruptFrame(unit)
|
||||||
@ -235,20 +361,108 @@ function Auras:UpdateInterruptFrame(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize
|
local width, height
|
||||||
|
|
||||||
|
if Gladdy.db.auraInterruptDetached then
|
||||||
|
width, height = Gladdy.db.auraInterruptSize * Gladdy.db.auraInterruptWidthFactor, Gladdy.db.auraInterruptSize
|
||||||
|
|
||||||
|
interruptFrame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata)
|
||||||
|
interruptFrame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel)
|
||||||
|
interruptFrame.frame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata)
|
||||||
|
interruptFrame.frame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel)
|
||||||
|
interruptFrame.cooldown:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata)
|
||||||
|
interruptFrame.cooldown:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel + 1)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraInterruptFrameStrata)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraInterruptFrameLevel + 2)
|
||||||
|
|
||||||
|
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"},
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
0,
|
||||||
|
0)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if Gladdy.db.auraDetached then
|
||||||
|
width, height = Gladdy.db.auraSize * Gladdy.db.auraWidthFactor, Gladdy.db.auraSize
|
||||||
|
|
||||||
|
interruptFrame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
interruptFrame:SetFrameLevel(Gladdy.db.auraFrameLevel)
|
||||||
|
interruptFrame.frame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
interruptFrame.frame:SetFrameLevel(Gladdy.db.auraFrameLevel)
|
||||||
|
interruptFrame.cooldown:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
interruptFrame.cooldown:SetFrameLevel(Gladdy.db.auraFrameLevel + 1)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.auraFrameStrata)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.auraFrameLevel + 2)
|
||||||
|
|
||||||
|
interruptFrame:ClearAllPoints()
|
||||||
|
interruptFrame:SetAllPoints(self.frames[unit])
|
||||||
|
if interruptFrame.mover then
|
||||||
|
interruptFrame.mover:Hide()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize
|
||||||
|
|
||||||
|
interruptFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
interruptFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1)
|
||||||
|
interruptFrame.frame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
interruptFrame.frame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 1)
|
||||||
|
interruptFrame.cooldown:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
interruptFrame.cooldown:SetFrameLevel(Gladdy.db.classIconFrameLevel + 2)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
interruptFrame.cooldownFrame:SetFrameLevel(Gladdy.db.classIconFrameLevel + 3)
|
||||||
|
|
||||||
|
interruptFrame:ClearAllPoints()
|
||||||
|
interruptFrame:SetPoint("TOPLEFT", Gladdy.modules["Class Icon"].frames[unit], "TOPLEFT")
|
||||||
|
if interruptFrame.mover then
|
||||||
|
interruptFrame.mover:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
|
|
||||||
interruptFrame:SetWidth(width)
|
interruptFrame:SetWidth(width)
|
||||||
interruptFrame:SetHeight(height)
|
interruptFrame:SetHeight(height)
|
||||||
interruptFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit])
|
interruptFrame.frame:SetWidth(width)
|
||||||
|
interruptFrame.frame:SetHeight(height)
|
||||||
|
interruptFrame.cooldownFrame:ClearAllPoints()
|
||||||
|
interruptFrame.cooldownFrame:SetAllPoints(interruptFrame.frame)
|
||||||
|
|
||||||
interruptFrame.cooldown:SetWidth(width - width/16)
|
|
||||||
interruptFrame.cooldown:SetHeight(height - height/16)
|
|
||||||
interruptFrame.cooldown:ClearAllPoints()
|
interruptFrame.cooldown:ClearAllPoints()
|
||||||
interruptFrame.cooldown:SetPoint("CENTER", interruptFrame, "CENTER")
|
interruptFrame.cooldown:SetPoint("CENTER", interruptFrame, "CENTER")
|
||||||
|
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.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||||
|
|
||||||
interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
interruptFrame.text:SetFont(Gladdy:SMFetch("font", "auraFont"), (width/2 - 1) * Gladdy.db.auraFontSizeScale, "OUTLINE")
|
||||||
interruptFrame.text:SetTextColor(Gladdy.db.auraFontColor.r, Gladdy.db.auraFontColor.g, Gladdy.db.auraFontColor.b, Gladdy.db.auraFontColor.a)
|
interruptFrame.text:SetTextColor(Gladdy:SetColor(Gladdy.db.auraFontColor))
|
||||||
|
|
||||||
interruptFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
interruptFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
||||||
if interruptFrame.spellSchool then
|
if interruptFrame.spellSchool then
|
||||||
@ -262,12 +476,37 @@ function Auras:UpdateInterruptFrame(unit)
|
|||||||
if Gladdy.db.auraDisableCircle then
|
if Gladdy.db.auraDisableCircle then
|
||||||
interruptFrame.cooldown:SetAlpha(0)
|
interruptFrame.cooldown:SetAlpha(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if Gladdy.db.auraInterruptIconZoomed then
|
||||||
|
if interruptFrame.icon.masked then
|
||||||
|
interruptFrame.icon:SetMask("")
|
||||||
|
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("")
|
||||||
|
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
|
end
|
||||||
|
|
||||||
function Auras:ResetUnit(unit)
|
function Auras:ResetUnit(unit)
|
||||||
self.frames[unit]:UnregisterAllEvents()
|
self.frames[unit].interruptFrame.active = false
|
||||||
|
self.frames[unit].active = false
|
||||||
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||||
|
self.frames[unit]:UnregisterAllEvents()
|
||||||
|
self.frames[unit]:Hide()
|
||||||
|
self.frames[unit].interruptFrame:Hide()
|
||||||
|
self.frames[unit].interruptFrame.priority = nil
|
||||||
|
self.frames[unit].interruptFrame.spellSchool = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function Auras:Test(unit)
|
function Auras:Test(unit)
|
||||||
@ -275,6 +514,10 @@ function Auras:Test(unit)
|
|||||||
|
|
||||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||||
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||||
|
if not self.frames[unit]:IsShown() then
|
||||||
|
self.frames[unit]:Show()
|
||||||
|
self.frames[unit].interruptFrame:Show()
|
||||||
|
end
|
||||||
|
|
||||||
--Auras
|
--Auras
|
||||||
local enabledDebuffs, enabledBuffs, testauras = {}, {}
|
local enabledDebuffs, enabledBuffs, testauras = {}, {}
|
||||||
@ -302,12 +545,13 @@ function Auras:Test(unit)
|
|||||||
if Gladdy.exceptionNames[spellid] then
|
if Gladdy.exceptionNames[spellid] then
|
||||||
spellName = Gladdy.exceptionNames[spellid]
|
spellName = Gladdy.exceptionNames[spellid]
|
||||||
end
|
end
|
||||||
|
local duration = math.random(2,10)
|
||||||
if (unit == "arena2") then
|
if (unit == "arena2") then
|
||||||
if (v.value.track == AURA_TYPE_BUFF) 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
|
end
|
||||||
else
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -327,16 +571,21 @@ function Auras:Test(unit)
|
|||||||
local extraSpellSchool = spellSchools[rand(1, #spellSchools)]
|
local extraSpellSchool = spellSchools[rand(1, #spellSchools)]
|
||||||
spellid = tonumber(enabledInterrupts[rand(1, #enabledInterrupts)])
|
spellid = tonumber(enabledInterrupts[rand(1, #enabledInterrupts)])
|
||||||
spellName = select(1, GetSpellInfo(spellid))
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Auras:JOINED_ARENA()
|
function Auras:JOINED_ARENA()
|
||||||
--[[for i=1, Gladdy.curBracket do
|
for i=1, Gladdy.curBracket do
|
||||||
self.frames["arena" .. i]:RegisterUnitEvent("UNIT_AURA", "arena" .. i)
|
local unit = "arena" .. i
|
||||||
self.frames["arena" .. i]:SetScript("OnEvent", Auras.OnEvent)
|
self.frames[unit].interruptFrame.active = false
|
||||||
end--]]
|
self.frames[unit].active = false
|
||||||
|
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||||
|
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||||
|
self.frames[unit]:Show()
|
||||||
|
self.frames[unit].interruptFrame:Show()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, expirationTime, count, debuffType)
|
function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, expirationTime, count, debuffType)
|
||||||
@ -345,15 +594,13 @@ function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, exp
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if spellID == 31117 then
|
|
||||||
spellName = "Unstable Affliction Silence"
|
|
||||||
end
|
|
||||||
|
|
||||||
if not self.auras[spellName] then
|
if not self.auras[spellName] then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- don't use spellId from combatlog, in case of different spellrank
|
-- 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
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -372,9 +619,9 @@ function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, exp
|
|||||||
auraFrame.icon.overlay:Show()
|
auraFrame.icon.overlay:Show()
|
||||||
auraFrame.cooldownFrame:Show()
|
auraFrame.cooldownFrame:Show()
|
||||||
if auraType == AURA_TYPE_DEBUFF then
|
if auraType == AURA_TYPE_DEBUFF then
|
||||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a)
|
auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor))
|
||||||
elseif auraType == AURA_TYPE_BUFF then
|
elseif auraType == AURA_TYPE_BUFF then
|
||||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.auraBuffBorderColor.r, Gladdy.db.auraBuffBorderColor.g, Gladdy.db.auraBuffBorderColor.b, Gladdy.db.auraBuffBorderColor.a)
|
auraFrame.icon.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.auraBuffBorderColor))
|
||||||
else
|
else
|
||||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.frameBorderColor.r, Gladdy.db.frameBorderColor.g, Gladdy.db.frameBorderColor.b, Gladdy.db.frameBorderColor.a)
|
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.frameBorderColor.r, Gladdy.db.frameBorderColor.g, Gladdy.db.frameBorderColor.b, Gladdy.db.frameBorderColor.a)
|
||||||
end
|
end
|
||||||
@ -386,9 +633,9 @@ function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, exp
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Auras:AURA_FADE(unit, auraType)
|
function Auras:AURA_FADE(unit, auraType, force)
|
||||||
local auraFrame = self.frames[unit]
|
local auraFrame = self.frames[unit]
|
||||||
if (not auraFrame or auraFrame.track ~= auraType) then
|
if (not auraFrame or auraFrame.track ~= auraType or not Gladdy.buttons[unit] or (not force and Gladdy.buttons[unit].stealthed)) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if auraFrame.active then
|
if auraFrame.active then
|
||||||
@ -409,7 +656,7 @@ end
|
|||||||
|
|
||||||
function Auras:GetInterruptColor(extraSpellSchool)
|
function Auras:GetInterruptColor(extraSpellSchool)
|
||||||
if not Gladdy.db.auraInterruptColorsEnabled then
|
if not Gladdy.db.auraInterruptColorsEnabled then
|
||||||
return Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a
|
return Gladdy:SetColor(Gladdy.db.auraDebuffBorderColor)
|
||||||
else
|
else
|
||||||
local color = Gladdy.db.auraInterruptColors[extraSpellSchool] or Gladdy.db.auraInterruptColors["unknown"]
|
local color = Gladdy.db.auraInterruptColors[extraSpellSchool] or Gladdy.db.auraInterruptColors["unknown"]
|
||||||
return color.r, color.g, color.b, color.a
|
return color.r, color.g, color.b, color.a
|
||||||
@ -418,7 +665,7 @@ end
|
|||||||
|
|
||||||
function Auras:SPELL_INTERRUPT(unit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
function Auras:SPELL_INTERRUPT(unit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||||
local auraFrame = self.frames[unit]
|
local auraFrame = self.frames[unit]
|
||||||
local interruptFrame = auraFrame and auraFrame.interruptFrame
|
local interruptFrame = auraFrame ~= nil and auraFrame.interruptFrame
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
if (not interruptFrame) then
|
if (not interruptFrame) then
|
||||||
return
|
return
|
||||||
@ -532,10 +779,320 @@ function Auras:GetOptions()
|
|||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 3,
|
order = 3,
|
||||||
args = {
|
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 = 5,
|
||||||
|
args = {
|
||||||
|
headerDetachedMode = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Detached Mode"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
auraDetached = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Aura Detached"],
|
||||||
|
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"],
|
||||||
|
order = 10,
|
||||||
|
},
|
||||||
|
auraSize = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Aura size"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = 3,
|
||||||
|
max = 100,
|
||||||
|
step = 0.1,
|
||||||
|
order = 11,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraWidthFactor = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Aura width factor"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = 0.5,
|
||||||
|
max = 2,
|
||||||
|
step = 0.05,
|
||||||
|
order = 12,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
headerAuraPosition = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Position"],
|
||||||
|
order = 20,
|
||||||
|
},
|
||||||
|
auraXOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Aura X Offset"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = -1000,
|
||||||
|
max = 1000,
|
||||||
|
step = 0.01,
|
||||||
|
order = 21,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraYOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Aura Y Offset"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = -1000,
|
||||||
|
max = 1000,
|
||||||
|
step = 0.01,
|
||||||
|
order = 22,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 30,
|
||||||
|
},
|
||||||
|
auraFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
order = 32,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 33,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
detachedInterruptMode = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Detached Interrupt"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerDetachedMode = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Detached Mode"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
auraInterruptDetached = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Interrupt Detached"],
|
||||||
|
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"],
|
||||||
|
order = 10,
|
||||||
|
},
|
||||||
|
auraInterruptSize = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Interrupt size"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraInterruptDetached
|
||||||
|
end,
|
||||||
|
min = 3,
|
||||||
|
max = 100,
|
||||||
|
step = 0.1,
|
||||||
|
order = 11,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraInterruptWidthFactor = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Interrupt width factor"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraInterruptDetached
|
||||||
|
end,
|
||||||
|
min = 0.5,
|
||||||
|
max = 2,
|
||||||
|
step = 0.05,
|
||||||
|
order = 12,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
headerAuraPosition = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Position"],
|
||||||
|
order = 20,
|
||||||
|
},
|
||||||
|
auraInterruptXOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Interrupt X Offset"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraInterruptDetached
|
||||||
|
end,
|
||||||
|
min = -1000,
|
||||||
|
max = 1000,
|
||||||
|
step = 0.01,
|
||||||
|
order = 21,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraInterruptYOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Interrupt Y Offset"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraInterruptDetached
|
||||||
|
end,
|
||||||
|
min = -1000,
|
||||||
|
max = 1000,
|
||||||
|
step = 0.01,
|
||||||
|
order = 22,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 30,
|
||||||
|
},
|
||||||
|
auraInterruptFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
order = 32,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
auraInterruptFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.auraDetached
|
||||||
|
end,
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 33,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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 = {
|
cooldown = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Cooldown"],
|
name = L["Cooldown"],
|
||||||
order = 1,
|
order = 2,
|
||||||
args = {
|
args = {
|
||||||
headerAuras = {
|
headerAuras = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -578,7 +1135,7 @@ function Auras:GetOptions()
|
|||||||
font = {
|
font = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Font"],
|
name = L["Font"],
|
||||||
order = 2,
|
order = 3,
|
||||||
args = {
|
args = {
|
||||||
headerAuras = {
|
headerAuras = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -615,7 +1172,7 @@ function Auras:GetOptions()
|
|||||||
border = {
|
border = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Border"],
|
name = L["Border"],
|
||||||
order = 3,
|
order = 4,
|
||||||
args = borderArgs
|
args = borderArgs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -679,14 +1236,7 @@ function Auras:GetAuraOptions(auraType)
|
|||||||
for i,k in ipairs(auras) do
|
for i,k in ipairs(auras) do
|
||||||
options[tostring(k)] = {
|
options[tostring(k)] = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = (Gladdy:GetImportantAuras()["Unstable Affliction Silence"]
|
name = Gladdy:GetExceptionSpellName(k),
|
||||||
and Gladdy:GetImportantAuras()["Unstable Affliction Silence"].spellID == k
|
|
||||||
and Gladdy:GetImportantAuras()["Unstable Affliction Silence"].altName)
|
|
||||||
or (Gladdy:GetImportantAuras()[select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689))]
|
|
||||||
and Gladdy:GetImportantAuras()[select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689))].spellID == k
|
|
||||||
and Gladdy:GetImportantAuras()[select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689))].altName)
|
|
||||||
or Gladdy:GetImportantAuras()[GetSpellInfo(k)].altName
|
|
||||||
or GetSpellInfo(k),
|
|
||||||
order = i+2,
|
order = i+2,
|
||||||
icon = Gladdy:GetImportantAuras()[GetSpellInfo(k)] and Gladdy:GetImportantAuras()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
icon = Gladdy:GetImportantAuras()[GetSpellInfo(k)] and Gladdy:GetImportantAuras()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||||
args = {
|
args = {
|
||||||
@ -759,10 +1309,7 @@ function Auras:GetInterruptOptions()
|
|||||||
for i,k in ipairs(auras) do
|
for i,k in ipairs(auras) do
|
||||||
options[tostring(k)] = {
|
options[tostring(k)] = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = Gladdy:GetInterrupts()["Unstable Affliction Silence"]
|
name = GetSpellInfo(k),
|
||||||
and Gladdy:GetInterrupts()["Unstable Affliction Silence"].spellID == k
|
|
||||||
and Gladdy:GetInterrupts()["Unstable Affliction Silence"].altName
|
|
||||||
or GetSpellInfo(k),
|
|
||||||
order = i+2,
|
order = i+2,
|
||||||
icon = Gladdy:GetInterrupts()[GetSpellInfo(k)] and Gladdy:GetInterrupts()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
icon = Gladdy:GetInterrupts()[GetSpellInfo(k)] and Gladdy:GetInterrupts()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||||
args = {
|
args = {
|
||||||
|
@ -20,10 +20,12 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
|||||||
buffsAlpha = 1,
|
buffsAlpha = 1,
|
||||||
buffsIconSize = 30,
|
buffsIconSize = 30,
|
||||||
buffsWidthFactor = 1,
|
buffsWidthFactor = 1,
|
||||||
|
buffsIconZoomed = false,
|
||||||
buffsIconPadding = 1,
|
buffsIconPadding = 1,
|
||||||
buffsBuffsAlpha = 1,
|
buffsBuffsAlpha = 1,
|
||||||
buffsBuffsIconSize = 30,
|
buffsBuffsIconSize = 30,
|
||||||
buffsBuffsWidthFactor = 1,
|
buffsBuffsWidthFactor = 1,
|
||||||
|
buffsBuffsIconZoomed = false,
|
||||||
buffsBuffsIconPadding = 1,
|
buffsBuffsIconPadding = 1,
|
||||||
buffsDisableCircle = false,
|
buffsDisableCircle = false,
|
||||||
buffsCooldownAlpha = 1,
|
buffsCooldownAlpha = 1,
|
||||||
@ -31,11 +33,9 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
|||||||
buffsFontScale = 1,
|
buffsFontScale = 1,
|
||||||
buffsFontColor = {r = 1, g = 1, b = 0, a = 1},
|
buffsFontColor = {r = 1, g = 1, b = 0, a = 1},
|
||||||
buffsDynamicColor = true,
|
buffsDynamicColor = true,
|
||||||
buffsCooldownPos = "TOP",
|
|
||||||
buffsCooldownGrowDirection = "RIGHT",
|
buffsCooldownGrowDirection = "RIGHT",
|
||||||
buffsXOffset = 0,
|
buffsXOffset = 0,
|
||||||
buffsYOffset = 0,
|
buffsYOffset = 0,
|
||||||
buffsBuffsCooldownPos = "BOTTOM",
|
|
||||||
buffsBuffsCooldownGrowDirection = "RIGHT",
|
buffsBuffsCooldownGrowDirection = "RIGHT",
|
||||||
buffsBuffsXOffset = 0,
|
buffsBuffsXOffset = 0,
|
||||||
buffsBuffsYOffset = 0,
|
buffsBuffsYOffset = 0,
|
||||||
@ -44,25 +44,32 @@ local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
|||||||
buffsBorderColorsEnabled = true,
|
buffsBorderColorsEnabled = true,
|
||||||
trackedDebuffs = defaultTrackedDebuffs,
|
trackedDebuffs = defaultTrackedDebuffs,
|
||||||
trackedBuffs = defaultTrackedBuffs,
|
trackedBuffs = defaultTrackedBuffs,
|
||||||
buffsBorderColorCurse = Gladdy:GetAuraTypeColor()["curse"],
|
buffsBorderColorEnrage = Gladdy:GetDispelTypeColors()["enrage"],
|
||||||
buffsBorderColorMagic = Gladdy:GetAuraTypeColor()["magic"],
|
buffsBorderColorCurse = Gladdy:GetDispelTypeColors()["curse"],
|
||||||
buffsBorderColorPoison = Gladdy:GetAuraTypeColor()["poison"],
|
buffsBorderColorMagic = Gladdy:GetDispelTypeColors()["magic"],
|
||||||
buffsBorderColorPhysical = Gladdy:GetAuraTypeColor()["none"],
|
buffsBorderColorPoison = Gladdy:GetDispelTypeColors()["poison"],
|
||||||
buffsBorderColorImmune = Gladdy:GetAuraTypeColor()["immune"],
|
buffsBorderColorPhysical = Gladdy:GetDispelTypeColors()["none"],
|
||||||
buffsBorderColorDisease = Gladdy:GetAuraTypeColor()["disease"],
|
buffsBorderColorImmune = Gladdy:GetDispelTypeColors()["immune"],
|
||||||
buffsBorderColorForm = Gladdy:GetAuraTypeColor()["form"],
|
buffsBorderColorDisease = Gladdy:GetDispelTypeColors()["disease"],
|
||||||
buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"]
|
buffsBorderColorForm = Gladdy:GetDispelTypeColors()["form"],
|
||||||
|
buffsBorderColorAura = Gladdy:GetDispelTypeColors()["aura"],
|
||||||
|
buffFrameStrata = "MEDIUM",
|
||||||
|
buffsFrameLevel = 9,
|
||||||
})
|
})
|
||||||
|
|
||||||
local spellSchoolToOptionValueTable
|
local dispelTypeToOptionValueTable
|
||||||
local function spellSchoolToOptionValue(spellSchool)
|
local function dispelTypeToOptionValue(dispelType)
|
||||||
if Gladdy.db.buffsBorderColorsEnabled and spellSchool then
|
if Gladdy.db.buffsBorderColorsEnabled then
|
||||||
return spellSchoolToOptionValueTable[spellSchool].r,
|
dispelType = dispelType and lower(dispelType) or "physical"
|
||||||
spellSchoolToOptionValueTable[spellSchool].g,
|
if not dispelTypeToOptionValueTable[dispelType] then
|
||||||
spellSchoolToOptionValueTable[spellSchool].b,
|
dispelType = "physical"
|
||||||
spellSchoolToOptionValueTable[spellSchool].a
|
end
|
||||||
|
return dispelTypeToOptionValueTable[dispelType].r,
|
||||||
|
dispelTypeToOptionValueTable[dispelType].g,
|
||||||
|
dispelTypeToOptionValueTable[dispelType].b,
|
||||||
|
dispelTypeToOptionValueTable[dispelType].a
|
||||||
else
|
else
|
||||||
return Gladdy.db.buffsBorderColor.r,Gladdy.db.buffsBorderColor.g,Gladdy.db.buffsBorderColor.b,Gladdy.db.buffsBorderColor.a
|
return Gladdy:SetColor(Gladdy.db.buffsBorderColor)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -76,21 +83,28 @@ function BuffsDebuffs:Initialize()
|
|||||||
self.icons = {}
|
self.icons = {}
|
||||||
self.trackedCC = {}
|
self.trackedCC = {}
|
||||||
self.framePool = {}
|
self.framePool = {}
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
if Gladdy.db.buffsEnabled then
|
||||||
self:RegisterMessage("UNIT_DESTROYED")
|
self:RegisterMessages(
|
||||||
self:RegisterMessage("UNIT_DEATH")
|
"JOINED_ARENA",
|
||||||
self:RegisterMessage("AURA_FADE")
|
"UNIT_DESTROYED",
|
||||||
self:RegisterMessage("AURA_GAIN")
|
"UNIT_DEATH",
|
||||||
self:RegisterMessage("AURA_GAIN_LIMIT")
|
"AURA_FADE",
|
||||||
self:SetScript("OnEvent", BuffsDebuffs.OnEvent)
|
"AURA_GAIN",
|
||||||
spellSchoolToOptionValueTable = {
|
"AURA_GAIN_LIMIT")
|
||||||
curse = Gladdy.db.buffsBorderColorCurse,
|
self:SetScript("OnEvent", BuffsDebuffs.OnEvent)
|
||||||
|
end
|
||||||
|
dispelTypeToOptionValueTable = {
|
||||||
|
none = Gladdy.db.buffsBorderColorPhysical,
|
||||||
magic = Gladdy.db.buffsBorderColorMagic,
|
magic = Gladdy.db.buffsBorderColorMagic,
|
||||||
|
curse = Gladdy.db.buffsBorderColorCurse,
|
||||||
|
disease = Gladdy.db.buffsBorderColorDisease,
|
||||||
poison = Gladdy.db.buffsBorderColorPoison,
|
poison = Gladdy.db.buffsBorderColorPoison,
|
||||||
|
stealth = Gladdy.db.buffsBorderColorPhysical,
|
||||||
|
invisibility = Gladdy.db.buffsBorderColorPhysical,
|
||||||
physical = Gladdy.db.buffsBorderColorPhysical,
|
physical = Gladdy.db.buffsBorderColorPhysical,
|
||||||
immune = Gladdy.db.buffsBorderColorImmune,
|
immune = Gladdy.db.buffsBorderColorImmune,
|
||||||
disease = Gladdy.db.buffsBorderColorDisease,
|
|
||||||
form = Gladdy.db.buffsBorderColorForm,
|
form = Gladdy.db.buffsBorderColorForm,
|
||||||
|
enrage = Gladdy.db.buffsBorderColorEnrage,
|
||||||
}
|
}
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -134,7 +148,7 @@ end
|
|||||||
|
|
||||||
function BuffsDebuffs:Test(unit)
|
function BuffsDebuffs:Test(unit)
|
||||||
if Gladdy.db.buffsEnabled then
|
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_DEBUFF)
|
||||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||||
@ -146,7 +160,7 @@ function BuffsDebuffs:Test(unit)
|
|||||||
break
|
break
|
||||||
end
|
end
|
||||||
if enabled then
|
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
|
i = i + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -156,7 +170,7 @@ function BuffsDebuffs:Test(unit)
|
|||||||
break
|
break
|
||||||
end
|
end
|
||||||
if enabled then
|
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
|
i = i + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -193,7 +207,7 @@ function BuffsDebuffs:AURA_GAIN_LIMIT(unit, auraType, limit)
|
|||||||
end
|
end
|
||||||
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
|
if (not self.frames[unit] or not Gladdy.db.buffsEnabled) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -224,7 +238,7 @@ function BuffsDebuffs:AURA_GAIN(unit, auraType, spellID, spellName, texture, dur
|
|||||||
auraFrame.numBuffs = auraFrame.numBuffs + 1
|
auraFrame.numBuffs = auraFrame.numBuffs + 1
|
||||||
index = auraFrame.numBuffs
|
index = auraFrame.numBuffs
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -233,16 +247,19 @@ end
|
|||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
function BuffsDebuffs:CreateFrame(unit)
|
function BuffsDebuffs:CreateFrame(unit)
|
||||||
local verticalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
|
||||||
local debuffFrame = CreateFrame("Frame", "GladdyDebuffs" .. unit, Gladdy.buttons[unit])
|
local debuffFrame = CreateFrame("Frame", "GladdyDebuffs" .. unit, Gladdy.buttons[unit])
|
||||||
|
debuffFrame:SetFrameStrata(Gladdy.db.buffFrameStrata)
|
||||||
|
debuffFrame:SetFrameLevel(Gladdy.db.buffsFrameLevel)
|
||||||
|
debuffFrame:SetMovable(true)
|
||||||
debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||||
debuffFrame:SetWidth(1)
|
debuffFrame:SetWidth(1)
|
||||||
debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin)
|
|
||||||
debuffFrame.unit = unit
|
debuffFrame.unit = unit
|
||||||
local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit])
|
local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit])
|
||||||
|
buffFrame:SetFrameStrata(Gladdy.db.buffFrameStrata)
|
||||||
|
buffFrame:SetFrameLevel(Gladdy.db.buffsFrameLevel)
|
||||||
|
buffFrame:SetMovable(true)
|
||||||
buffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
buffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||||
buffFrame:SetWidth(1)
|
buffFrame:SetWidth(1)
|
||||||
buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin)
|
|
||||||
buffFrame.unit = unit
|
buffFrame.unit = unit
|
||||||
self.frames[unit] = {}
|
self.frames[unit] = {}
|
||||||
self.frames[unit].buffFrame = buffFrame
|
self.frames[unit].buffFrame = buffFrame
|
||||||
@ -274,164 +291,100 @@ local function styleIcon(aura, auraType)
|
|||||||
aura.cooldowncircle:SetAlpha(Gladdy.db.buffsCooldownAlpha)
|
aura.cooldowncircle:SetAlpha(Gladdy.db.buffsCooldownAlpha)
|
||||||
end
|
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("")
|
||||||
|
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("")
|
||||||
|
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: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: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.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: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)
|
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
|
end
|
||||||
|
|
||||||
function BuffsDebuffs:UpdateFrame(unit)
|
function BuffsDebuffs:UpdateFrame(unit)
|
||||||
self.frames[unit].debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
|
||||||
self.frames[unit].debuffFrame:ClearAllPoints()
|
|
||||||
|
|
||||||
--DEBUFFS
|
--DEBUFFS
|
||||||
local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0
|
self.frames[unit].debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||||
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
Gladdy:SetPosition(self.frames[unit].debuffFrame, unit, "buffsXOffset", "buffsYOffset", BuffsDebuffs:LegacySetPositionDebuffs(unit), BuffsDebuffs)
|
||||||
local verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
if (unit == "arena1") then
|
||||||
if Gladdy.db.buffsCooldownPos == "TOP" then
|
Gladdy:CreateMover(self.frames[unit].debuffFrame, "buffsXOffset", "buffsYOffset", L["Debuffs"],
|
||||||
verticalMargin = horizontalMargin + 1
|
{"TOPRIGHT", "TOPRIGHT"},
|
||||||
if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then
|
Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor, Gladdy.db.buffsIconSize,
|
||||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
0, 0, "buffsEnabled")
|
||||||
end
|
|
||||||
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset + verticalMargin)
|
|
||||||
else
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset + verticalMargin)
|
|
||||||
end
|
|
||||||
elseif Gladdy.db.buffsCooldownPos == "BOTTOM" then
|
|
||||||
verticalMargin = horizontalMargin + 1
|
|
||||||
if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then
|
|
||||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
|
||||||
end
|
|
||||||
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight)
|
|
||||||
else
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight)
|
|
||||||
end
|
|
||||||
elseif Gladdy.db.buffsCooldownPos == "LEFT" then
|
|
||||||
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset)
|
|
||||||
else
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset)
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif Gladdy.db.buffsCooldownPos == "RIGHT" then
|
|
||||||
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset)
|
|
||||||
else
|
|
||||||
self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--BUFFS
|
--BUFFS
|
||||||
self.frames[unit].buffFrame:SetHeight(Gladdy.db.buffsBuffsIconSize)
|
self.frames[unit].buffFrame:SetHeight(Gladdy.db.buffsBuffsIconSize)
|
||||||
self.frames[unit].buffFrame:ClearAllPoints()
|
Gladdy:SetPosition(self.frames[unit].buffFrame, unit, "buffsBuffsXOffset", "buffsBuffsYOffset", BuffsDebuffs:LegacySetPositionBuffs(unit), BuffsDebuffs)
|
||||||
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
if (unit == "arena1") then
|
||||||
verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
Gladdy:CreateMover(self.frames[unit].buffFrame, "buffsBuffsXOffset", "buffsBuffsYOffset", L["Buffs"],
|
||||||
if Gladdy.db.buffsBuffsCooldownPos == "TOP" then
|
{"TOPRIGHT", "TOPRIGHT"},
|
||||||
verticalMargin = horizontalMargin + 1
|
Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor, Gladdy.db.buffsBuffsIconSize,
|
||||||
if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then
|
0, 0, "buffsEnabled")
|
||||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
|
||||||
end
|
|
||||||
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
|
||||||
self.frames[unit].buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
|
||||||
else
|
|
||||||
self.frames[unit].buffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
|
||||||
end
|
|
||||||
elseif Gladdy.db.buffsBuffsCooldownPos == "BOTTOM" then
|
|
||||||
verticalMargin = horizontalMargin + 1
|
|
||||||
if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then
|
|
||||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
|
||||||
end
|
|
||||||
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
|
||||||
self.frames[unit].buffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight)
|
|
||||||
else
|
|
||||||
self.frames[unit].buffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight)
|
|
||||||
end
|
|
||||||
elseif Gladdy.db.buffsBuffsCooldownPos == "LEFT" then
|
|
||||||
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.classIconPos == "LEFT") then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
|
||||||
end
|
|
||||||
elseif (Gladdy.db.classIconPos == "LEFT") then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if (Gladdy.db.drCooldownPos == "LEFT" and Gladdy.db.drEnabled) then
|
|
||||||
verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2
|
|
||||||
end
|
|
||||||
if (Gladdy.db.castBarPos == "LEFT") then
|
|
||||||
verticalMargin = verticalMargin -
|
|
||||||
(((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize
|
|
||||||
or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2)
|
|
||||||
end
|
|
||||||
if (Gladdy.db.cooldownYPos == "LEFT" and Gladdy.db.cooldown) then
|
|
||||||
verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2)
|
|
||||||
end
|
|
||||||
--self.frames[unit].buffFrame:SetPoint("RIGHT", Gladdy.buttons[unit].healthBar, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
|
||||||
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
|
||||||
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset)
|
|
||||||
else
|
|
||||||
self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset)
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif Gladdy.db.buffsBuffsCooldownPos == "RIGHT" then
|
|
||||||
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.classIconPos == "RIGHT") then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
|
||||||
end
|
|
||||||
elseif (Gladdy.db.classIconPos == "RIGHT") then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then
|
|
||||||
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if (Gladdy.db.drCooldownPos == "RIGHT" and Gladdy.db.drEnabled) then
|
|
||||||
verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2
|
|
||||||
end
|
|
||||||
if (Gladdy.db.castBarPos == "RIGHT") then
|
|
||||||
verticalMargin = verticalMargin -
|
|
||||||
(((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize
|
|
||||||
or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2)
|
|
||||||
end
|
|
||||||
if (Gladdy.db.cooldownYPos == "RIGHT" and Gladdy.db.cooldown) then
|
|
||||||
verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2)
|
|
||||||
end
|
|
||||||
--self.frames[unit].buffFrame:SetPoint("LEFT", Gladdy.buttons[unit].healthBar, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
|
||||||
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
|
||||||
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset)
|
|
||||||
else
|
|
||||||
self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local testBuffsAgain, testDebuffsAgain
|
||||||
|
|
||||||
for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do
|
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
|
end
|
||||||
for i=1, #self.frames[unit].auras[AURA_TYPE_DEBUFF] do
|
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
|
end
|
||||||
for i=1, #self.framePool do
|
for i=1, #self.framePool do
|
||||||
styleIcon(self.framePool[i])
|
styleIcon(self.framePool[i])
|
||||||
end
|
end
|
||||||
self:UpdateAurasOnUnit(unit)
|
self:UpdateAurasOnUnit(unit)
|
||||||
|
|
||||||
|
if Gladdy.frame.testing and (testBuffsAgain or testDebuffsAgain) then
|
||||||
|
self:ResetUnit(unit)
|
||||||
|
self:Test(unit)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -441,13 +394,8 @@ end
|
|||||||
function BuffsDebuffs:UpdateAurasOnUnit(unit)
|
function BuffsDebuffs:UpdateAurasOnUnit(unit)
|
||||||
for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do
|
for i=1, #self.frames[unit].auras[AURA_TYPE_BUFF] do
|
||||||
if i == 1 then
|
if i == 1 then
|
||||||
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints()
|
||||||
self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints()
|
self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("RIGHT", self.frames[unit].buffFrame, "LEFT")
|
||||||
self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("RIGHT", self.frames[unit].buffFrame, "LEFT")
|
|
||||||
else
|
|
||||||
self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints()
|
|
||||||
self.frames[unit].auras[AURA_TYPE_BUFF][i]:SetPoint("LEFT", self.frames[unit].buffFrame, "RIGHT")
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
||||||
self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints()
|
self.frames[unit].auras[AURA_TYPE_BUFF][i]:ClearAllPoints()
|
||||||
@ -460,13 +408,8 @@ function BuffsDebuffs:UpdateAurasOnUnit(unit)
|
|||||||
end
|
end
|
||||||
for i=1, #self.frames[unit].auras[AURA_TYPE_DEBUFF] do
|
for i=1, #self.frames[unit].auras[AURA_TYPE_DEBUFF] do
|
||||||
if i == 1 then
|
if i == 1 then
|
||||||
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints()
|
||||||
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints()
|
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("RIGHT", self.frames[unit].debuffFrame, "LEFT")
|
||||||
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("RIGHT", self.frames[unit].debuffFrame, "LEFT")
|
|
||||||
else
|
|
||||||
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints()
|
|
||||||
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:SetPoint("LEFT", self.frames[unit].debuffFrame, "RIGHT")
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
||||||
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints()
|
self.frames[unit].auras[AURA_TYPE_DEBUFF][i]:ClearAllPoints()
|
||||||
@ -506,26 +449,29 @@ local function iconTimer(auraFrame, elapsed)
|
|||||||
end
|
end
|
||||||
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
|
local aura
|
||||||
if not self.frames[unit].auras[auraType][index] then
|
if not self.frames[unit].auras[auraType][index] then
|
||||||
if #self.framePool > 0 then
|
if #self.framePool > 0 then
|
||||||
aura = tremove(self.framePool, #self.framePool)
|
aura = tremove(self.framePool, #self.framePool)
|
||||||
|
styleIcon(aura)
|
||||||
else
|
else
|
||||||
aura = CreateFrame("Frame")
|
aura = CreateFrame("Frame")
|
||||||
aura:EnableMouse(false)
|
aura:EnableMouse(false)
|
||||||
aura:SetFrameLevel(3)
|
aura:SetFrameStrata(Gladdy.db.buffFrameStrata)
|
||||||
|
aura:SetFrameLevel(Gladdy.db.buffsFrameLevel)
|
||||||
aura.texture = aura:CreateTexture(nil, "BACKGROUND")
|
aura.texture = aura:CreateTexture(nil, "BACKGROUND")
|
||||||
aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
aura.texture.masked = true
|
||||||
aura.texture:SetAllPoints(aura)
|
aura.texture:SetAllPoints(aura)
|
||||||
aura.cooldowncircle = CreateFrame("Cooldown", nil, aura, "CooldownFrameTemplate")
|
aura.cooldowncircle = CreateFrame("Cooldown", nil, aura, "CooldownFrameTemplate")
|
||||||
aura.cooldowncircle:SetFrameLevel(4)
|
aura.cooldowncircle:SetFrameLevel(Gladdy.db.buffsFrameLevel + 1)
|
||||||
aura.cooldowncircle.noCooldownCount = true -- disable OmniCC
|
aura.cooldowncircle.noCooldownCount = true -- disable OmniCC
|
||||||
aura.cooldowncircle:SetAllPoints(aura)
|
aura.cooldowncircle:SetAllPoints(aura)
|
||||||
aura.cooldowncircle:SetReverse(true)
|
aura.cooldowncircle:SetReverse(true)
|
||||||
aura.cooldowncircle:SetHideCountdownNumbers(true)
|
aura.cooldowncircle:SetHideCountdownNumbers(true)
|
||||||
aura.overlay = CreateFrame("Frame", nil, aura)
|
aura.overlay = CreateFrame("Frame", nil, aura)
|
||||||
aura.overlay:SetFrameLevel(5)
|
aura.overlay:SetFrameLevel(Gladdy.db.buffsFrameLevel + 2)
|
||||||
aura.overlay:SetAllPoints(aura)
|
aura.overlay:SetAllPoints(aura)
|
||||||
aura.border = aura.overlay:CreateTexture(nil, "OVERLAY")
|
aura.border = aura.overlay:CreateTexture(nil, "OVERLAY")
|
||||||
aura.border:SetAllPoints(aura)
|
aura.border:SetAllPoints(aura)
|
||||||
@ -558,12 +504,12 @@ function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stack
|
|||||||
aura.spellID = spellID
|
aura.spellID = spellID
|
||||||
aura.type = auraType
|
aura.type = auraType
|
||||||
aura.unit = unit
|
aura.unit = unit
|
||||||
aura.spellSchool = spellSchool
|
aura.dispelType = dispelType
|
||||||
aura.border:SetVertexColor(spellSchoolToOptionValue(spellSchool))
|
aura.border:SetVertexColor(dispelTypeToOptionValue(dispelType))
|
||||||
aura:Show()
|
aura:Show()
|
||||||
end
|
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 self.frames[unit].auras[auraType][index] and self.frames[unit].auras[auraType][index].spellID == spellID then -- refresh
|
||||||
if duration == 0 then
|
if duration == 0 then
|
||||||
self.frames[unit].auras[auraType][index].endtime = "undefined"
|
self.frames[unit].auras[auraType][index].endtime = "undefined"
|
||||||
@ -579,7 +525,7 @@ function BuffsDebuffs:AddOrRefreshAura(unit, spellID, auraType, duration, timeLe
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
--add
|
--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)
|
self:UpdateAurasOnUnit(unit)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -587,36 +533,6 @@ end
|
|||||||
-- OPTIONS
|
-- OPTIONS
|
||||||
------------
|
------------
|
||||||
|
|
||||||
local function option(params)
|
|
||||||
local defaults = {
|
|
||||||
get = function(info)
|
|
||||||
local key = info.arg or info[#info]
|
|
||||||
return Gladdy.dbi.profile[key]
|
|
||||||
end,
|
|
||||||
set = function(info, value)
|
|
||||||
local key = info.arg or info[#info]
|
|
||||||
Gladdy.dbi.profile[key] = value
|
|
||||||
if Gladdy.db.buffsCooldownPos == "LEFT" then
|
|
||||||
Gladdy.db.buffsCooldownGrowDirection = "LEFT"
|
|
||||||
elseif Gladdy.db.buffsCooldownPos == "RIGHT" then
|
|
||||||
Gladdy.db.buffsCooldownGrowDirection = "RIGHT"
|
|
||||||
end
|
|
||||||
if Gladdy.db.buffsBuffsCooldownPos == "LEFT" then
|
|
||||||
Gladdy.db.buffsBuffsCooldownGrowDirection = "LEFT"
|
|
||||||
elseif Gladdy.db.buffsBuffsCooldownPos == "RIGHT" then
|
|
||||||
Gladdy.db.buffsBuffsCooldownGrowDirection = "RIGHT"
|
|
||||||
end
|
|
||||||
Gladdy:UpdateFrame()
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v in pairs(params) do
|
|
||||||
defaults[k] = v
|
|
||||||
end
|
|
||||||
|
|
||||||
return defaults
|
|
||||||
end
|
|
||||||
|
|
||||||
function BuffsDebuffs:GetOptions()
|
function BuffsDebuffs:GetOptions()
|
||||||
return {
|
return {
|
||||||
headerBuffs = {
|
headerBuffs = {
|
||||||
@ -635,12 +551,14 @@ function BuffsDebuffs:GetOptions()
|
|||||||
name = L["Show CC"],
|
name = L["Show CC"],
|
||||||
desc = L["Shows all debuffs, which are displayed on the ClassIcon as well"],
|
desc = L["Shows all debuffs, which are displayed on the ClassIcon as well"],
|
||||||
order = 4,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||||
}),
|
}),
|
||||||
group = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 5,
|
order = 5,
|
||||||
|
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||||
args = {
|
args = {
|
||||||
buffs = {
|
buffs = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -649,14 +567,21 @@ function BuffsDebuffs:GetOptions()
|
|||||||
args = {
|
args = {
|
||||||
size = {
|
size = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Size & Padding"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Size & Padding"],
|
name = L["Icon"],
|
||||||
order = 5,
|
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({
|
buffsBuffsIconSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon Size"],
|
name = L["Icon Size"],
|
||||||
@ -699,18 +624,6 @@ function BuffsDebuffs:GetOptions()
|
|||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 5,
|
order = 5,
|
||||||
},
|
},
|
||||||
buffsBuffsCooldownPos = option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Aura Position"],
|
|
||||||
desc = L["Position of the aura icons"],
|
|
||||||
order = 21,
|
|
||||||
values = {
|
|
||||||
["TOP"] = L["Top"],
|
|
||||||
["BOTTOM"] = L["Bottom"],
|
|
||||||
["LEFT"] = L["Left"],
|
|
||||||
["RIGHT"] = L["Right"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
buffsBuffsCooldownGrowDirection = Gladdy:option({
|
buffsBuffsCooldownGrowDirection = Gladdy:option({
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Grow Direction"],
|
name = L["Grow Direction"],
|
||||||
@ -771,14 +684,21 @@ function BuffsDebuffs:GetOptions()
|
|||||||
args = {
|
args = {
|
||||||
size = {
|
size = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Size & Padding"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Size & Padding"],
|
name = L["Icon"],
|
||||||
order = 5,
|
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({
|
buffsIconSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon Size"],
|
name = L["Icon Size"],
|
||||||
@ -821,18 +741,6 @@ function BuffsDebuffs:GetOptions()
|
|||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 5,
|
order = 5,
|
||||||
},
|
},
|
||||||
buffsCooldownPos = option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Aura Position"],
|
|
||||||
desc = L["Position of the aura icons"],
|
|
||||||
order = 21,
|
|
||||||
values = {
|
|
||||||
["TOP"] = L["Top"],
|
|
||||||
["BOTTOM"] = L["Bottom"],
|
|
||||||
["LEFT"] = L["Left"],
|
|
||||||
["RIGHT"] = L["Right"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
buffsCooldownGrowDirection = Gladdy:option({
|
buffsCooldownGrowDirection = Gladdy:option({
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Grow Direction"],
|
name = L["Grow Direction"],
|
||||||
@ -1056,6 +964,42 @@ function BuffsDebuffs:GetOptions()
|
|||||||
order = 49,
|
order = 49,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
|
buffsBorderColorEnrage = Gladdy:colorOption({
|
||||||
|
type = "color",
|
||||||
|
name = L["Enrage"],
|
||||||
|
desc = L["Color of the border"],
|
||||||
|
order = 50,
|
||||||
|
hasAlpha = true,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
buffFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
buffsFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1064,6 +1008,7 @@ function BuffsDebuffs:GetOptions()
|
|||||||
name = L["Debuff Lists"],
|
name = L["Debuff Lists"],
|
||||||
type = "group",
|
type = "group",
|
||||||
order = 11,
|
order = 11,
|
||||||
|
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
args = select(1, Gladdy:GetAuras(AURA_TYPE_DEBUFF)),
|
args = select(1, Gladdy:GetAuras(AURA_TYPE_DEBUFF)),
|
||||||
set = function(info, state)
|
set = function(info, state)
|
||||||
@ -1079,6 +1024,7 @@ function BuffsDebuffs:GetOptions()
|
|||||||
name = L["Buff Lists"],
|
name = L["Buff Lists"],
|
||||||
type = "group",
|
type = "group",
|
||||||
order = 12,
|
order = 12,
|
||||||
|
disabled = function() return not Gladdy.db.buffsEnabled end,
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
args = select(1, Gladdy:GetAuras(AURA_TYPE_BUFF)),
|
args = select(1, Gladdy:GetAuras(AURA_TYPE_BUFF)),
|
||||||
set = function(info, state)
|
set = function(info, state)
|
||||||
@ -1093,3 +1039,168 @@ function BuffsDebuffs:GetOptions()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function BuffsDebuffs:LegacySetPositionDebuffs(unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
self.frames[unit].debuffFrame:ClearAllPoints()
|
||||||
|
local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0
|
||||||
|
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
||||||
|
local verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
||||||
|
local offset = 0
|
||||||
|
if (Gladdy.db.buffsCooldownGrowDirection == "RIGHT") then
|
||||||
|
offset = Gladdy.db.buffsIconSize * Gladdy.db.buffsWidthFactor
|
||||||
|
end
|
||||||
|
local pos = Gladdy.db.buffsCooldownPos
|
||||||
|
|
||||||
|
if pos == "TOP" then
|
||||||
|
verticalMargin = horizontalMargin + 1
|
||||||
|
if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||||
|
end
|
||||||
|
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset + verticalMargin)
|
||||||
|
else
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset + verticalMargin)
|
||||||
|
end
|
||||||
|
elseif pos == "BOTTOM" then
|
||||||
|
verticalMargin = horizontalMargin + 1
|
||||||
|
if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||||
|
end
|
||||||
|
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight)
|
||||||
|
else
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset -verticalMargin - powerBarHeight)
|
||||||
|
end
|
||||||
|
elseif pos == "LEFT" then
|
||||||
|
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset)
|
||||||
|
else
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset)
|
||||||
|
end
|
||||||
|
elseif pos == "RIGHT" then
|
||||||
|
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset)
|
||||||
|
else
|
||||||
|
self.frames[unit].debuffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
|
||||||
|
function BuffsDebuffs:LegacySetPositionBuffs(unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
self.frames[unit].buffFrame:ClearAllPoints()
|
||||||
|
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
||||||
|
local verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
||||||
|
local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0
|
||||||
|
local offset = 0
|
||||||
|
if (Gladdy.db.buffsBuffsCooldownGrowDirection == "RIGHT") then
|
||||||
|
offset = Gladdy.db.buffsBuffsIconSize * Gladdy.db.buffsBuffsWidthFactor
|
||||||
|
end
|
||||||
|
|
||||||
|
local pos = Gladdy.db.buffsBuffsCooldownPos
|
||||||
|
|
||||||
|
if pos == "TOP" then
|
||||||
|
verticalMargin = horizontalMargin + 1
|
||||||
|
if Gladdy.db.cooldownYPos == "TOP" and Gladdy.db.cooldown then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||||
|
end
|
||||||
|
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
||||||
|
self.frames[unit].buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
||||||
|
else
|
||||||
|
self.frames[unit].buffFrame:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", Gladdy.db.buffsXOffset + offset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
||||||
|
end
|
||||||
|
elseif pos == "BOTTOM" then
|
||||||
|
verticalMargin = horizontalMargin + 1
|
||||||
|
if Gladdy.db.cooldownYPos == "BOTTOM" and Gladdy.db.cooldown then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||||
|
end
|
||||||
|
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
||||||
|
self.frames[unit].buffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "BOTTOMRIGHT", Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight)
|
||||||
|
else
|
||||||
|
self.frames[unit].buffFrame:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "BOTTOMLEFT", Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset -verticalMargin - powerBarHeight)
|
||||||
|
end
|
||||||
|
elseif pos == "LEFT" then
|
||||||
|
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.classIconPos == "LEFT") then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
||||||
|
end
|
||||||
|
elseif (Gladdy.db.classIconPos == "LEFT") then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.trinketPos == "LEFT" and Gladdy.db.trinketEnabled) then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (Gladdy.db.drCooldownPos == "LEFT" and Gladdy.db.drEnabled) then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2
|
||||||
|
end
|
||||||
|
if (Gladdy.db.castBarPos == "LEFT") then
|
||||||
|
verticalMargin = verticalMargin -
|
||||||
|
(((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize
|
||||||
|
or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2)
|
||||||
|
end
|
||||||
|
if (Gladdy.db.cooldownYPos == "LEFT" and Gladdy.db.cooldown) then
|
||||||
|
verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2)
|
||||||
|
end
|
||||||
|
--self.frames[unit].buffFrame:SetPoint("RIGHT", Gladdy.buttons[unit].healthBar, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
||||||
|
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
||||||
|
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset)
|
||||||
|
else
|
||||||
|
self.frames[unit].buffFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset)
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif pos == "RIGHT" then
|
||||||
|
horizontalMargin = horizontalMargin - 1 + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.classIconPos == "RIGHT") then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
||||||
|
end
|
||||||
|
elseif (Gladdy.db.classIconPos == "RIGHT") then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.trinketPos == "RIGHT" and Gladdy.db.trinketEnabled) then
|
||||||
|
horizontalMargin = horizontalMargin + (Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor) + Gladdy.db.padding
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (Gladdy.db.drCooldownPos == "RIGHT" and Gladdy.db.drEnabled) then
|
||||||
|
verticalMargin = verticalMargin + Gladdy.db.drIconSize/2 + Gladdy.db.padding/2
|
||||||
|
end
|
||||||
|
if (Gladdy.db.castBarPos == "RIGHT") then
|
||||||
|
verticalMargin = verticalMargin -
|
||||||
|
(((Gladdy.db.castBarHeight < Gladdy.db.castBarIconSize) and Gladdy.db.castBarIconSize
|
||||||
|
or Gladdy.db.castBarHeight)/2 + Gladdy.db.padding/2)
|
||||||
|
end
|
||||||
|
if (Gladdy.db.cooldownYPos == "RIGHT" and Gladdy.db.cooldown) then
|
||||||
|
verticalMargin = verticalMargin + (Gladdy.db.buffsBuffsIconSize/2 + Gladdy.db.padding/2)
|
||||||
|
end
|
||||||
|
--self.frames[unit].buffFrame:SetPoint("LEFT", Gladdy.buttons[unit].healthBar, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset + verticalMargin)
|
||||||
|
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
||||||
|
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) - 1 + Gladdy.db.padding
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset)
|
||||||
|
else
|
||||||
|
self.frames[unit].buffFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.buffsBuffsXOffset + offset, Gladdy.db.buffsBuffsYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
@ -23,8 +23,10 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
|||||||
castBarHeight = 20,
|
castBarHeight = 20,
|
||||||
castBarWidth = 160,
|
castBarWidth = 160,
|
||||||
castBarIconSize = 22,
|
castBarIconSize = 22,
|
||||||
|
castBarIconZoomed = false,
|
||||||
castBarBorderSize = 8,
|
castBarBorderSize = 8,
|
||||||
castBarFontSize = 12,
|
castBarFontSize = 12,
|
||||||
|
castBarFontOutline = false,
|
||||||
castBarTexture = "Smooth",
|
castBarTexture = "Smooth",
|
||||||
castBarIconStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
castBarIconStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||||
castBarBorderStyle = "Gladdy Tooltip round",
|
castBarBorderStyle = "Gladdy Tooltip round",
|
||||||
@ -33,8 +35,8 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
|||||||
castBarIconColor = { r = 0, g = 0, b = 0, a = 1 },
|
castBarIconColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
castBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
castBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
castBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
castBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||||
|
castBarIconEnabled = true,
|
||||||
castBarGuesses = true,
|
castBarGuesses = true,
|
||||||
castBarPos = "LEFT",
|
|
||||||
castBarXOffset = 0,
|
castBarXOffset = 0,
|
||||||
castBarYOffset = 0,
|
castBarYOffset = 0,
|
||||||
castBarIconPos = "LEFT",
|
castBarIconPos = "LEFT",
|
||||||
@ -42,12 +44,16 @@ local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
|||||||
castBarTimerFormat = "LEFT",
|
castBarTimerFormat = "LEFT",
|
||||||
castBarSparkEnabled = true,
|
castBarSparkEnabled = true,
|
||||||
castBarSparkColor = { r = 1, g = 1, b = 1, a = 1 },
|
castBarSparkColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||||
|
castBarFrameStrata = "MEDIUM",
|
||||||
|
castBarFrameLevel = 5,
|
||||||
})
|
})
|
||||||
|
|
||||||
function Castbar:Initialize()
|
function Castbar:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
self:RegisterMessage("UNIT_DEATH")
|
if Gladdy.db.castBarEnabled then
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
self:RegisterMessage("UNIT_DEATH")
|
||||||
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -57,20 +63,28 @@ end
|
|||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
function Castbar:CreateFrame(unit)
|
function Castbar:CreateFrame(unit)
|
||||||
local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
|
local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit])
|
||||||
castBar:EnableMouse(false)
|
castBar:EnableMouse(false)
|
||||||
|
castBar:SetMovable(true)
|
||||||
castBar.unit = unit
|
castBar.unit = unit
|
||||||
|
castBar:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
|
|
||||||
castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
castBar.backdrop = CreateFrame("Frame", nil, castBar, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
|
castBar.backdrop:SetAllPoints(castBar)
|
||||||
|
castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.castBarBorderSize })
|
edgeSize = Gladdy.db.castBarBorderSize })
|
||||||
castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a)
|
castBar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.castBarBorderColor))
|
||||||
castBar:SetFrameLevel(1)
|
castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1)
|
||||||
|
|
||||||
castBar.bar = CreateFrame("StatusBar", nil, castBar)
|
castBar.bar = CreateFrame("StatusBar", nil, castBar)
|
||||||
castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
||||||
castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a)
|
castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor))
|
||||||
castBar.bar:SetMinMaxValues(0, 100)
|
castBar.bar:SetMinMaxValues(0, 100)
|
||||||
castBar.bar:SetFrameLevel(0)
|
castBar.bar:SetFrameLevel(0)
|
||||||
|
castBar.bar:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.bar:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
|
|
||||||
castBar.spark = castBar:CreateTexture(nil, "OVERLAY")
|
castBar.spark = castBar:CreateTexture(nil, "OVERLAY")
|
||||||
castBar.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark")
|
castBar.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark")
|
||||||
@ -82,17 +96,26 @@ function Castbar:CreateFrame(unit)
|
|||||||
castBar.bg = castBar.bar:CreateTexture(nil, "BACKGROUND")
|
castBar.bg = castBar.bar:CreateTexture(nil, "BACKGROUND")
|
||||||
castBar.bg:SetAlpha(1)
|
castBar.bg:SetAlpha(1)
|
||||||
castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
||||||
castBar.bg:SetVertexColor(Gladdy.db.castBarBgColor.r, Gladdy.db.castBarBgColor.g, Gladdy.db.castBarBgColor.b, Gladdy.db.castBarBgColor.a)
|
castBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarBgColor))
|
||||||
castBar.bg:SetAllPoints(castBar.bar)
|
castBar.bg:SetAllPoints(castBar.bar)
|
||||||
|
|
||||||
castBar.icon = CreateFrame("Frame", nil, castBar)
|
castBar.icon = CreateFrame("Frame", nil, castBar)
|
||||||
|
castBar.icon:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.icon:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
castBar.icon.texture = castBar.icon:CreateTexture(nil, "BACKGROUND")
|
castBar.icon.texture = castBar.icon:CreateTexture(nil, "BACKGROUND")
|
||||||
castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
castBar.icon.texture:SetAllPoints(castBar.icon)
|
castBar.icon.texture:SetAllPoints(castBar.icon)
|
||||||
|
castBar.icon.texture.masked = true
|
||||||
castBar.icon.texture.overlay = castBar.icon:CreateTexture(nil, "BORDER")
|
castBar.icon.texture.overlay = castBar.icon:CreateTexture(nil, "BORDER")
|
||||||
castBar.icon.texture.overlay:SetAllPoints(castBar.icon.texture)
|
castBar.icon.texture.overlay:SetAllPoints(castBar.icon.texture)
|
||||||
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
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()
|
castBar.icon:ClearAllPoints()
|
||||||
if (Gladdy.db.castBarIconPos == "LEFT") then
|
if (Gladdy.db.castBarIconPos == "LEFT") then
|
||||||
castBar.icon:SetPoint("RIGHT", castBar, "LEFT", -3, 0) -- Icon of castbar
|
castBar.icon:SetPoint("RIGHT", castBar, "LEFT", -3, 0) -- Icon of castbar
|
||||||
@ -100,17 +123,17 @@ function Castbar:CreateFrame(unit)
|
|||||||
castBar.icon:SetPoint("LEFT", castBar, "RIGHT", 3, 0) -- Icon of castbar
|
castBar.icon:SetPoint("LEFT", castBar, "RIGHT", 3, 0) -- Icon of castbar
|
||||||
end
|
end
|
||||||
|
|
||||||
castBar.spellText = castBar:CreateFontString(nil, "LOW")
|
castBar.spellText = castBar:CreateFontString(nil, "OVERLAY")
|
||||||
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.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
castBar.spellText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||||
castBar.spellText:SetShadowOffset(1, -1)
|
castBar.spellText:SetShadowOffset(1, -1)
|
||||||
castBar.spellText:SetShadowColor(0, 0, 0, 1)
|
castBar.spellText:SetShadowColor(0, 0, 0, 1)
|
||||||
castBar.spellText:SetJustifyH("CENTER")
|
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 = castBar:CreateFontString(nil, "OVERLAY")
|
||||||
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.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||||
castBar.timeText:SetShadowOffset(1, -1)
|
castBar.timeText:SetShadowOffset(1, -1)
|
||||||
castBar.timeText:SetShadowColor(0, 0, 0, 1)
|
castBar.timeText:SetShadowColor(0, 0, 0, 1)
|
||||||
castBar.timeText:SetJustifyH("CENTER")
|
castBar.timeText:SetJustifyH("CENTER")
|
||||||
@ -121,30 +144,50 @@ function Castbar:CreateFrame(unit)
|
|||||||
self:ResetUnit(unit)
|
self:ResetUnit(unit)
|
||||||
end
|
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)
|
function Castbar:UpdateFrame(unit)
|
||||||
local castBar = self.frames[unit]
|
local castBar = self.frames[unit]
|
||||||
if (not castBar) then
|
if (not castBar) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
|
|
||||||
|
castBar:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
|
castBar.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1)
|
||||||
|
castBar.bar:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.bar:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
|
castBar.icon:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
||||||
|
castBar.icon:SetFrameLevel(Gladdy.db.castBarFrameLevel)
|
||||||
|
|
||||||
castBar:SetWidth(Gladdy.db.castBarWidth)
|
castBar:SetWidth(Gladdy.db.castBarWidth)
|
||||||
castBar:SetHeight(Gladdy.db.castBarHeight)
|
castBar:SetHeight(Gladdy.db.castBarHeight)
|
||||||
castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
castBar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.castBarBorderSize })
|
edgeSize = Gladdy.db.castBarBorderSize })
|
||||||
castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a)
|
castBar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.castBarBorderColor))
|
||||||
|
|
||||||
castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
||||||
castBar.bar:ClearAllPoints()
|
castBar.bar:ClearAllPoints()
|
||||||
castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a)
|
castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor))
|
||||||
castBar.bar:SetPoint("TOPLEFT", castBar, "TOPLEFT", (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
castBar.bar:SetPoint("TOPLEFT", castBar, "TOPLEFT", (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||||
castBar.bar:SetPoint("BOTTOMRIGHT", castBar, "BOTTOMRIGHT", -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
castBar.bar:SetPoint("BOTTOMRIGHT", castBar, "BOTTOMRIGHT", -(Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.castBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||||
|
|
||||||
castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
castBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
||||||
castBar.bg:SetVertexColor(Gladdy.db.castBarBgColor.r, Gladdy.db.castBarBgColor.g, Gladdy.db.castBarBgColor.b, Gladdy.db.castBarBgColor.a)
|
castBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarBgColor))
|
||||||
|
|
||||||
if Gladdy.db.castBarSparkEnabled then
|
if Gladdy.db.castBarSparkEnabled then
|
||||||
castBar.spark:SetHeight(Gladdy.db.castBarHeight * 1.8)
|
castBar.spark:SetHeight(Gladdy.db.castBarHeight * 1.8)
|
||||||
castBar.spark:SetVertexColor(Gladdy.db.castBarSparkColor.r, Gladdy.db.castBarSparkColor.g, Gladdy.db.castBarSparkColor.b, Gladdy.db.castBarSparkColor.a)
|
castBar.spark:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarSparkColor))
|
||||||
else
|
else
|
||||||
castBar.spark:SetAlpha(0)
|
castBar.spark:SetAlpha(0)
|
||||||
end
|
end
|
||||||
@ -152,8 +195,28 @@ function Castbar:UpdateFrame(unit)
|
|||||||
castBar.icon:SetWidth(Gladdy.db.castBarIconSize)
|
castBar.icon:SetWidth(Gladdy.db.castBarIconSize)
|
||||||
castBar.icon:SetHeight(Gladdy.db.castBarIconSize)
|
castBar.icon:SetHeight(Gladdy.db.castBarIconSize)
|
||||||
castBar.icon.texture:SetAllPoints(castBar.icon)
|
castBar.icon.texture:SetAllPoints(castBar.icon)
|
||||||
|
if Gladdy.db.castBarIconZoomed then
|
||||||
|
if castBar.icon.texture.masked then
|
||||||
|
castBar.icon.texture:SetMask("")
|
||||||
|
castBar.icon.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||||
|
castBar.icon.texture.masked = nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if not castBar.icon.texture.masked then
|
||||||
|
castBar.icon.texture:SetMask("")
|
||||||
|
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.icon:ClearAllPoints()
|
||||||
|
|
||||||
|
castBar.shield:SetWidth(Gladdy.db.castBarIconSize * 3.2)
|
||||||
|
castBar.shield:SetHeight(Gladdy.db.castBarIconSize * 3.2)
|
||||||
|
|
||||||
local rightMargin = 0
|
local rightMargin = 0
|
||||||
local leftMargin = 0
|
local leftMargin = 0
|
||||||
if (Gladdy.db.castBarIconPos == "LEFT") then
|
if (Gladdy.db.castBarIconPos == "LEFT") then
|
||||||
@ -164,33 +227,35 @@ function Castbar:UpdateFrame(unit)
|
|||||||
leftMargin = Gladdy.db.castBarIconSize + 1
|
leftMargin = Gladdy.db.castBarIconSize + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
castBar:ClearAllPoints()
|
Gladdy:SetPosition(castBar, unit, "castBarXOffset", "castBarYOffset", Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin), Castbar)
|
||||||
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")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
castBar:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
|
||||||
else
|
|
||||||
castBar:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if (Gladdy.db.castBarPos == "RIGHT") then
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
castBar:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
|
||||||
else
|
|
||||||
castBar:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
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.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
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.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
castBar.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.castBarFontColor))
|
||||||
|
|
||||||
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
||||||
castBar.icon.texture.overlay:SetVertexColor(Gladdy.db.castBarIconColor.r, Gladdy.db.castBarIconColor.g, Gladdy.db.castBarIconColor.b, Gladdy.db.castBarIconColor.a)
|
castBar.icon.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.castBarIconColor))
|
||||||
|
|
||||||
|
if (unit == "arena1") then
|
||||||
|
Gladdy:CreateMover(castBar, "castBarXOffset", "castBarYOffset", L["Cast Bar"],
|
||||||
|
{"TOPLEFT", "TOPLEFT"}, Gladdy.db.castBarWidth, Gladdy.db.castBarHeight,
|
||||||
|
0, 0, "castBarEnabled")
|
||||||
|
end
|
||||||
|
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
|
end
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -231,7 +296,7 @@ function Castbar.OnUpdate(castBar, elapsed)
|
|||||||
castBar.spark:SetPoint("CENTER", castBar.bar, "LEFT", castBar.spark.position, 0)
|
castBar.spark:SetPoint("CENTER", castBar.bar, "LEFT", castBar.spark.position, 0)
|
||||||
castBar.spark:Show()
|
castBar.spark:Show()
|
||||||
end
|
end
|
||||||
elseif ( GetTime() < castBar.holdTime ) then
|
elseif ( castBar.holdTime and GetTime() < castBar.holdTime ) then
|
||||||
castBar.timeText:Hide()
|
castBar.timeText:Hide()
|
||||||
castBar.spark:Hide()
|
castBar.spark:Hide()
|
||||||
return
|
return
|
||||||
@ -243,16 +308,16 @@ function Castbar.OnUpdate(castBar, elapsed)
|
|||||||
castBar.fadeOut = nil;
|
castBar.fadeOut = nil;
|
||||||
castBar.timeText:Show()
|
castBar.timeText:Show()
|
||||||
castBar.spark:Show()
|
castBar.spark:Show()
|
||||||
castBar:Hide();
|
castBar:SetAlpha(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Castbar.CastEventsFunc = {}
|
Castbar.CastEventsFunc = {}
|
||||||
Castbar.CastEventsFunc["UNIT_SPELLCAST_START"] = function(castBar, event, ...)
|
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
|
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||||
castBar:Hide()
|
castBar:SetAlpha(0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -283,7 +348,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_SUCCEEDED"] = function(castBar, event, ..
|
|||||||
end
|
end
|
||||||
Castbar.CastEventsFunc["UNIT_SPELLCAST_STOP"] = function(castBar, event, ...)
|
Castbar.CastEventsFunc["UNIT_SPELLCAST_STOP"] = function(castBar, event, ...)
|
||||||
if ( not castBar:IsVisible() ) then
|
if ( not castBar:IsVisible() ) then
|
||||||
castBar:Hide()
|
castBar:SetAlpha(0)
|
||||||
end
|
end
|
||||||
if ( (castBar.casting and event == "UNIT_SPELLCAST_STOP" and select(2, ...) == castBar.castID) or
|
if ( (castBar.casting and event == "UNIT_SPELLCAST_STOP" and select(2, ...) == castBar.castID) or
|
||||||
(castBar.channeling and event == "UNIT_SPELLCAST_CHANNEL_STOP") ) then
|
(castBar.channeling and event == "UNIT_SPELLCAST_CHANNEL_STOP") ) then
|
||||||
@ -331,7 +396,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_DELAYED"] = function(castBar, event, ...)
|
|||||||
|
|
||||||
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||||
-- if there is no name, there is no bar
|
-- if there is no name, there is no bar
|
||||||
castBar:Hide()
|
castBar:SetAlpha(0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
castBar.value = (GetTime() - (startTime / 1000))
|
castBar.value = (GetTime() - (startTime / 1000))
|
||||||
@ -346,10 +411,10 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_DELAYED"] = function(castBar, event, ...)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
Castbar.CastEventsFunc["UNIT_SPELLCAST_CHANNEL_START"] = function(castBar, event, ...)
|
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
|
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||||
castBar:Hide()
|
castBar:SetAlpha(0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if ( castBar.spark ) then
|
if ( castBar.spark ) then
|
||||||
@ -367,7 +432,7 @@ Castbar.CastEventsFunc["UNIT_SPELLCAST_CHANNEL_UPDATE"] = function(castBar, even
|
|||||||
if ( castBar:IsShown() ) then
|
if ( castBar:IsShown() ) then
|
||||||
local name, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(castBar.unit)
|
local name, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(castBar.unit)
|
||||||
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
if ( not name or (not castBar.showTradeSkills and isTradeSkill)) then
|
||||||
castBar:Hide()
|
castBar:SetAlpha(0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
castBar.value = ((endTime / 1000) - GetTime())
|
castBar.value = ((endTime / 1000) - GetTime())
|
||||||
@ -384,7 +449,7 @@ function Castbar.OnEvent(self, event, ...)
|
|||||||
Castbar.CastEventsFunc[event](self, event, ...)
|
Castbar.CastEventsFunc[event](self, event, ...)
|
||||||
end
|
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]
|
local castBar = self.frames[unit]
|
||||||
if (not castBar) then
|
if (not castBar) then
|
||||||
return
|
return
|
||||||
@ -396,18 +461,36 @@ function Castbar:CAST_START(unit, spell, icon, value, maxValue, test)
|
|||||||
castBar.channeling = test == "channel"
|
castBar.channeling = test == "channel"
|
||||||
end
|
end
|
||||||
|
|
||||||
castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a)
|
if notInterruptible then
|
||||||
|
castBar.bar:SetStatusBarColor(.8,.8,.8,1)
|
||||||
|
else
|
||||||
|
castBar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.castBarColor))
|
||||||
|
end
|
||||||
|
|
||||||
castBar.value = value
|
castBar.value = value
|
||||||
castBar.maxValue = maxValue
|
castBar.maxValue = maxValue
|
||||||
castBar.bar:SetMinMaxValues(0, maxValue)
|
castBar.bar:SetMinMaxValues(0, maxValue)
|
||||||
castBar.bar:SetValue(value)
|
castBar.bar:SetValue(value)
|
||||||
|
castBar.icon:SetAlpha(1)
|
||||||
castBar.icon.texture:SetTexture(icon)
|
castBar.icon.texture:SetTexture(icon)
|
||||||
castBar.spellText:SetText(spell)
|
castBar.spellText:SetText(spell)
|
||||||
castBar.timeText:SetText(maxValue)
|
castBar.timeText:SetText(maxValue)
|
||||||
castBar.bg:Show()
|
castBar.bg:Show()
|
||||||
castBar:Show()
|
castBar.backdrop:Show()
|
||||||
|
if Gladdy.db.castBarSparkEnabled then
|
||||||
|
castBar.spark:Show()
|
||||||
|
end
|
||||||
|
if notInterruptible then
|
||||||
|
castBar.shield:Show()
|
||||||
|
else
|
||||||
|
castBar.shield:Hide()
|
||||||
|
end
|
||||||
castBar:SetAlpha(1)
|
castBar:SetAlpha(1)
|
||||||
castBar.icon:Show()
|
if Gladdy.db.castBarIconEnabled then
|
||||||
|
castBar.icon:Show()
|
||||||
|
else
|
||||||
|
castBar.icon:Hide()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Castbar:CAST_STOP(unit, ...)
|
function Castbar:CAST_STOP(unit, ...)
|
||||||
@ -420,13 +503,16 @@ function Castbar:CAST_STOP(unit, ...)
|
|||||||
castBar.channeling = nil
|
castBar.channeling = nil
|
||||||
castBar.value = 0
|
castBar.value = 0
|
||||||
castBar.maxValue = 0
|
castBar.maxValue = 0
|
||||||
|
castBar.icon:SetAlpha(0)
|
||||||
castBar.icon.texture:SetTexture("")
|
castBar.icon.texture:SetTexture("")
|
||||||
castBar.spellText:SetText("")
|
castBar.spellText:SetText("")
|
||||||
castBar.timeText:SetText("")
|
castBar.timeText:SetText("")
|
||||||
castBar.bar:SetValue(0)
|
castBar.bar:SetValue(0)
|
||||||
castBar.bg:Hide()
|
castBar.bg:Hide()
|
||||||
castBar:Hide()
|
castBar.backdrop:Hide()
|
||||||
|
castBar.spark:Hide()
|
||||||
castBar.icon:Hide()
|
castBar.icon:Hide()
|
||||||
|
castBar.shield:Hide()
|
||||||
else
|
else
|
||||||
castBar.bar:SetStatusBarColor(...)
|
castBar.bar:SetStatusBarColor(...)
|
||||||
end
|
end
|
||||||
@ -501,7 +587,8 @@ function Castbar:Test(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (spell) then
|
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
|
end
|
||||||
else
|
else
|
||||||
self:CAST_STOP(unit)
|
self:CAST_STOP(unit)
|
||||||
@ -556,6 +643,7 @@ function Castbar:GetOptions()
|
|||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.castBarEnabled end,
|
||||||
args = {
|
args = {
|
||||||
barFrame = {
|
barFrame = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -573,7 +661,7 @@ function Castbar:GetOptions()
|
|||||||
desc = L["Height of the bar"],
|
desc = L["Height of the bar"],
|
||||||
order = 3,
|
order = 3,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 50,
|
max = 200,
|
||||||
step = 1,
|
step = 1,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
@ -583,7 +671,7 @@ function Castbar:GetOptions()
|
|||||||
desc = L["Width of the bars"],
|
desc = L["Width of the bars"],
|
||||||
order = 4,
|
order = 4,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 300,
|
max = 600,
|
||||||
step = 1,
|
step = 1,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
@ -650,9 +738,22 @@ function Castbar:GetOptions()
|
|||||||
args = {
|
args = {
|
||||||
headerSize = {
|
headerSize = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Icon Size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
},
|
},
|
||||||
|
castBarIconEnabled = option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Icon Enabled"],
|
||||||
|
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({
|
castBarIconSize = option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon size"],
|
name = L["Icon size"],
|
||||||
@ -739,6 +840,12 @@ function Castbar:GetOptions()
|
|||||||
max = 20,
|
max = 20,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
|
castBarFontOutline = option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Outline"],
|
||||||
|
order = 5,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
headerFormat = {
|
headerFormat = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Format"],
|
name = L["Format"],
|
||||||
@ -766,15 +873,6 @@ function Castbar:GetOptions()
|
|||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 1,
|
order = 1,
|
||||||
},
|
},
|
||||||
castBarPos = option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Castbar position"],
|
|
||||||
order = 2,
|
|
||||||
values = {
|
|
||||||
["LEFT"] = L["Left"],
|
|
||||||
["RIGHT"] = L["Right"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
castBarIconPos = option( {
|
castBarIconPos = option( {
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Icon position"],
|
name = L["Icon position"],
|
||||||
@ -809,7 +907,73 @@ function Castbar:GetOptions()
|
|||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
castBarFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
castBarFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 1,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Castbar:LegacySetPosition(castBar, unit, leftMargin, rightMargin)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
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")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
castBar:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
||||||
|
else
|
||||||
|
castBar:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding - leftMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (Gladdy.db.castBarPos == "RIGHT") then
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
castBar:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
||||||
|
else
|
||||||
|
castBar:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + rightMargin + Gladdy.db.castBarXOffset, Gladdy.db.castBarYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
@ -1,21 +1,29 @@
|
|||||||
local select = select
|
local select, str_gsub = select, string.gsub
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local GetSpellInfo = GetSpellInfo
|
local GetSpellInfo = GetSpellInfo
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local Classicon = Gladdy:NewModule("Class Icon", 80, {
|
local Classicon = Gladdy:NewModule("Class Icon", 81, {
|
||||||
classIconPos = "LEFT",
|
classIconEnabled = true,
|
||||||
classIconSize = 60 + 20 + 1,
|
classIconSize = 60 + 20 + 1,
|
||||||
classIconWidthFactor = 0.9,
|
classIconWidthFactor = 0.9,
|
||||||
|
classIconZoomed = false,
|
||||||
classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||||
classIconBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
classIconBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
classIconSpecIcon = false,
|
classIconSpecIcon = false,
|
||||||
|
classIconXOffset = 0,
|
||||||
|
classIconYOffset = 0,
|
||||||
|
classIconFrameStrata = "MEDIUM",
|
||||||
|
classIconFrameLevel = 5,
|
||||||
|
classIconGroup = false,
|
||||||
|
classIconGroupDirection = "DOWN"
|
||||||
})
|
})
|
||||||
|
|
||||||
local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\"
|
local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\"
|
||||||
local classIcons = {
|
local classIcons = {
|
||||||
["DRUID"] = classIconPath .. "inv_misc_monsterclaw_04",
|
["DRUID"] = classIconPath .. "inv_misc_monsterclaw_04",
|
||||||
|
["DEATHKNIGHT"] = select(3, GetSpellInfo(49023)), --Might of Mograine
|
||||||
["HUNTER"] = classIconPath .. "inv_weapon_bow_07",
|
["HUNTER"] = classIconPath .. "inv_weapon_bow_07",
|
||||||
["MAGE"] = classIconPath .. "inv_staff_13",
|
["MAGE"] = classIconPath .. "inv_staff_13",
|
||||||
["PALADIN"] = classIconPath .. "inv_hammer_01",
|
["PALADIN"] = classIconPath .. "inv_hammer_01",
|
||||||
@ -33,6 +41,11 @@ local specIcons = {
|
|||||||
[L["Feral"]] = select(3, GetSpellInfo(27545)), -- Cat Form
|
[L["Feral"]] = select(3, GetSpellInfo(27545)), -- Cat Form
|
||||||
[L["Restoration"]] = select(3, GetSpellInfo(5185)), -- Healing Touch
|
[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"] = {
|
["HUNTER"] = {
|
||||||
[L["Beast Mastery"]] = select(3, GetSpellInfo(1515)), -- Tame Beast
|
[L["Beast Mastery"]] = select(3, GetSpellInfo(1515)), -- Tame Beast
|
||||||
[L["Marksmanship"]] = select(3, GetSpellInfo(42243)), -- Volley
|
[L["Marksmanship"]] = select(3, GetSpellInfo(42243)), -- Volley
|
||||||
@ -78,9 +91,21 @@ local specIcons = {
|
|||||||
function Classicon:Initialize()
|
function Classicon:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
|
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
if Gladdy.db.classIconEnabled then
|
||||||
self:RegisterMessage("UNIT_DEATH")
|
self:RegisterMessage("ENEMY_SPOTTED")
|
||||||
self:RegisterMessage("UNIT_SPEC")
|
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
|
end
|
||||||
|
|
||||||
function Classicon:CreateFrame(unit)
|
function Classicon:CreateFrame(unit)
|
||||||
@ -91,6 +116,7 @@ function Classicon:CreateFrame(unit)
|
|||||||
classIcon.texture = classIcon:CreateTexture(nil, "BACKGROUND")
|
classIcon.texture = classIcon:CreateTexture(nil, "BACKGROUND")
|
||||||
classIcon.texture:SetAllPoints(classIcon)
|
classIcon.texture:SetAllPoints(classIcon)
|
||||||
classIcon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
classIcon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
classIcon.texture.masked = true
|
||||||
|
|
||||||
classIcon.texture.overlay = classIcon:CreateTexture(nil, "BORDER")
|
classIcon.texture.overlay = classIcon:CreateTexture(nil, "BORDER")
|
||||||
classIcon.texture.overlay:SetAllPoints(classIcon)
|
classIcon.texture.overlay:SetAllPoints(classIcon)
|
||||||
@ -99,13 +125,6 @@ function Classicon:CreateFrame(unit)
|
|||||||
classIcon:SetFrameStrata("MEDIUM")
|
classIcon:SetFrameStrata("MEDIUM")
|
||||||
classIcon:SetFrameLevel(2)
|
classIcon:SetFrameLevel(2)
|
||||||
|
|
||||||
classIcon:ClearAllPoints()
|
|
||||||
if (Gladdy.db.classIconPos == "RIGHT") then
|
|
||||||
classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", 2, 2)
|
|
||||||
else
|
|
||||||
classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -2, 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
Gladdy.buttons[unit].classIcon = classIcon
|
Gladdy.buttons[unit].classIcon = classIcon
|
||||||
self.frames[unit] = classIcon
|
self.frames[unit] = classIcon
|
||||||
end
|
end
|
||||||
@ -116,22 +135,73 @@ function Classicon:UpdateFrame(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
|
|
||||||
|
classIcon:SetFrameStrata(Gladdy.db.classIconFrameStrata)
|
||||||
|
classIcon:SetFrameLevel(Gladdy.db.classIconFrameLevel)
|
||||||
|
|
||||||
classIcon:SetWidth(Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor)
|
classIcon:SetWidth(Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor)
|
||||||
classIcon:SetHeight(Gladdy.db.classIconSize)
|
classIcon:SetHeight(Gladdy.db.classIconSize)
|
||||||
|
|
||||||
classIcon:ClearAllPoints()
|
if Gladdy.db.classIconZoomed then
|
||||||
local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
if classIcon.texture.masked then
|
||||||
if (Gladdy.db.classIconPos == "LEFT") then
|
classIcon.texture:SetMask("")
|
||||||
classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0)
|
classIcon.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||||
|
classIcon.texture.masked = nil
|
||||||
|
end
|
||||||
else
|
else
|
||||||
classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPRIGHT", margin, 0)
|
if not classIcon.texture.masked then
|
||||||
|
classIcon.texture:SetMask("")
|
||||||
|
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"},
|
||||||
|
Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor,
|
||||||
|
Gladdy.db.classIconSize,
|
||||||
|
0,
|
||||||
|
0, "classIconEnabled")
|
||||||
end
|
end
|
||||||
|
|
||||||
classIcon.texture:ClearAllPoints()
|
classIcon.texture:ClearAllPoints()
|
||||||
classIcon.texture:SetAllPoints(classIcon)
|
classIcon.texture:SetAllPoints(classIcon)
|
||||||
|
|
||||||
classIcon.texture.overlay:SetTexture(Gladdy.db.classIconBorderStyle)
|
classIcon.texture.overlay:SetTexture(Gladdy.db.classIconBorderStyle)
|
||||||
classIcon.texture.overlay:SetVertexColor(Gladdy.db.classIconBorderColor.r, Gladdy.db.classIconBorderColor.g, Gladdy.db.classIconBorderColor.b, Gladdy.db.classIconBorderColor.a)
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
function Classicon:ENEMY_SPOTTED(unit)
|
function Classicon:ENEMY_SPOTTED(unit)
|
||||||
@ -153,10 +223,6 @@ function Classicon:UNIT_SPEC(unit, spec)
|
|||||||
classIcon.texture:SetTexture(specIcons[Gladdy.buttons[unit].class][spec])
|
classIcon.texture:SetTexture(specIcons[Gladdy.buttons[unit].class][spec])
|
||||||
end
|
end
|
||||||
|
|
||||||
function Classicon:Test(unit)
|
|
||||||
self:ENEMY_SPOTTED(unit)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Classicon:ResetUnit(unit)
|
function Classicon:ResetUnit(unit)
|
||||||
local classIcon = self.frames[unit]
|
local classIcon = self.frames[unit]
|
||||||
if (not classIcon) then
|
if (not classIcon) then
|
||||||
@ -173,11 +239,17 @@ function Classicon:GetOptions()
|
|||||||
name = L["Class Icon"],
|
name = L["Class Icon"],
|
||||||
order = 2,
|
order = 2,
|
||||||
},
|
},
|
||||||
|
classIconEnabled = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Class Icon Enabled"],
|
||||||
|
order = 3,
|
||||||
|
}),
|
||||||
classIconSpecIcon = {
|
classIconSpecIcon = {
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show Spec Icon"],
|
name = L["Show Spec Icon"],
|
||||||
desc = L["Shows Spec Icon once spec is detected"],
|
desc = L["Shows Spec Icon once spec is detected"],
|
||||||
order = 3,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.classIconEnabled end,
|
||||||
get = function() return Gladdy.db.classIconSpecIcon end,
|
get = function() return Gladdy.db.classIconSpecIcon end,
|
||||||
set = function(_, value)
|
set = function(_, value)
|
||||||
Gladdy.db.classIconSpecIcon = value
|
Gladdy.db.classIconSpecIcon = value
|
||||||
@ -192,28 +264,56 @@ function Classicon:GetOptions()
|
|||||||
end
|
end
|
||||||
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 = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 7,
|
||||||
|
disabled = function() return not Gladdy.db.classIconEnabled end,
|
||||||
args = {
|
args = {
|
||||||
size = {
|
size = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Icon size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Icon size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
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({
|
classIconSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon size"],
|
name = L["Size"],
|
||||||
min = 1,
|
min = 3,
|
||||||
max = 100,
|
max = 100,
|
||||||
step = 1,
|
step = .1,
|
||||||
order = 3,
|
order = 3,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
@ -231,29 +331,37 @@ function Classicon:GetOptions()
|
|||||||
position = {
|
position = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 1,
|
order = 3,
|
||||||
args = {
|
args = {
|
||||||
headerPosition = {
|
headerPosition = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 5,
|
order = 5,
|
||||||
},
|
},
|
||||||
classIconPos = Gladdy:option({
|
classIconXOffset = Gladdy:option({
|
||||||
type = "select",
|
type = "range",
|
||||||
name = L["Icon position"],
|
name = L["Horizontal offset"],
|
||||||
desc = L["This changes positions with trinket"],
|
order = 11,
|
||||||
order = 6,
|
min = -800,
|
||||||
values = {
|
max = 800,
|
||||||
["LEFT"] = L["Left"],
|
step = 0.1,
|
||||||
["RIGHT"] = L["Right"],
|
width = "full",
|
||||||
},
|
}),
|
||||||
|
classIconYOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Vertical offset"],
|
||||||
|
order = 12,
|
||||||
|
min = -800,
|
||||||
|
max = 800,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
border = {
|
border = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Border"],
|
name = L["Border"],
|
||||||
order = 1,
|
order = 2,
|
||||||
args = {
|
args = {
|
||||||
headerBorder = {
|
headerBorder = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -275,7 +383,55 @@ function Classicon:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 4,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
classIconFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
classIconFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Classicon:LegacySetPosition(classIcon, unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
classIcon:ClearAllPoints()
|
||||||
|
local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.classIconPos == "LEFT") then
|
||||||
|
classIcon:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0)
|
||||||
|
else
|
||||||
|
classIcon:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPRIGHT", margin, 0)
|
||||||
|
end
|
||||||
|
end
|
@ -1,7 +1,6 @@
|
|||||||
local select = select
|
local select = select
|
||||||
local UnitExists, UnitAffectingCombat, GetSpellInfo = UnitExists, UnitAffectingCombat, GetSpellInfo
|
local UnitExists, UnitAffectingCombat, GetSpellInfo = UnitExists, UnitAffectingCombat, GetSpellInfo
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
|
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
@ -11,17 +10,19 @@ local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, {
|
|||||||
ciSize = 20,
|
ciSize = 20,
|
||||||
ciAlpha = 1,
|
ciAlpha = 1,
|
||||||
ciWidthFactor = 1,
|
ciWidthFactor = 1,
|
||||||
ciAnchor = "healthBar",
|
|
||||||
ciPos = "TOP",
|
|
||||||
ciXOffset = 0,
|
ciXOffset = 0,
|
||||||
ciYOffset = -31,
|
ciYOffset = -31,
|
||||||
ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||||
ciBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
ciBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
|
ciFrameStrata = "HIGH",
|
||||||
|
ciFrameLevel = 5,
|
||||||
})
|
})
|
||||||
|
|
||||||
function CombatIndicator:Initialize()
|
function CombatIndicator:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
if Gladdy.db.ciEnabled then
|
||||||
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
end
|
||||||
self.updateInterval = 0.05
|
self.updateInterval = 0.05
|
||||||
self.combatIndicatorIcon = select(3, GetSpellInfo(674))
|
self.combatIndicatorIcon = select(3, GetSpellInfo(674))
|
||||||
end
|
end
|
||||||
@ -38,7 +39,9 @@ function CombatIndicator:CreateFrame(unit)
|
|||||||
end
|
end
|
||||||
local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button)
|
local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button)
|
||||||
ciFrame:EnableMouse(false)
|
ciFrame:EnableMouse(false)
|
||||||
ciFrame:SetFrameStrata("HIGH")
|
ciFrame:SetMovable(true)
|
||||||
|
ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata)
|
||||||
|
ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel)
|
||||||
ciFrame:SetHeight(Gladdy.db.ciSize)
|
ciFrame:SetHeight(Gladdy.db.ciSize)
|
||||||
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
||||||
|
|
||||||
@ -50,25 +53,36 @@ function CombatIndicator:CreateFrame(unit)
|
|||||||
ciFrame.border = ciFrame:CreateTexture(nil, "OVERLAY")
|
ciFrame.border = ciFrame:CreateTexture(nil, "OVERLAY")
|
||||||
ciFrame.border:SetAllPoints(ciFrame)
|
ciFrame.border:SetAllPoints(ciFrame)
|
||||||
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
||||||
ciFrame.border:SetVertexColor(Gladdy.db.ciBorderColor.r, Gladdy.db.ciBorderColor.g, Gladdy.db.ciBorderColor.b, Gladdy.db.ciBorderColor.a)
|
ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor))
|
||||||
|
|
||||||
self.frames[unit] = ciFrame
|
self.frames[unit] = ciFrame
|
||||||
button.ciFrame = ciFrame
|
button.ciFrame = ciFrame
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function CombatIndicator:UpdateFrameOnce()
|
||||||
|
if Gladdy.db.ciEnabled then
|
||||||
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
else
|
||||||
|
self:UnregisterAllMessages()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function CombatIndicator:UpdateFrame(unit)
|
function CombatIndicator:UpdateFrame(unit)
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
local ciFrame = self.frames[unit]
|
local ciFrame = self.frames[unit]
|
||||||
if (not button or not ciFrame) then
|
if (not button or not ciFrame) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ciFrame:SetFrameStrata(Gladdy.db.ciFrameStrata)
|
||||||
|
ciFrame:SetFrameLevel(Gladdy.db.ciFrameLevel)
|
||||||
|
|
||||||
ciFrame:SetHeight(Gladdy.db.ciSize)
|
ciFrame:SetHeight(Gladdy.db.ciSize)
|
||||||
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
||||||
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
ciFrame.border:SetTexture(Gladdy.db.ciBorderStyle)
|
||||||
ciFrame.border:SetVertexColor(Gladdy.db.ciBorderColor.r, Gladdy.db.ciBorderColor.g, Gladdy.db.ciBorderColor.b, Gladdy.db.ciBorderColor.a)
|
ciFrame.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.ciBorderColor))
|
||||||
|
|
||||||
ciFrame:ClearAllPoints()
|
Gladdy:SetPosition(ciFrame, unit, "ciXOffset", "ciYOffset", CombatIndicator:LegacySetPosition(ciFrame, unit), CombatIndicator)
|
||||||
ciFrame:SetPoint(ANCHORS[Gladdy.db.ciPos], Gladdy.buttons[unit][Gladdy.db.ciAnchor], Gladdy.db.ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset)
|
|
||||||
|
|
||||||
ciFrame:SetAlpha(Gladdy.db.ciAlpha)
|
ciFrame:SetAlpha(Gladdy.db.ciAlpha)
|
||||||
|
|
||||||
@ -77,6 +91,12 @@ function CombatIndicator:UpdateFrame(unit)
|
|||||||
else
|
else
|
||||||
ciFrame:Show()
|
ciFrame:Show()
|
||||||
end
|
end
|
||||||
|
if (unit == "arena1") then
|
||||||
|
Gladdy:CreateMover(ciFrame, "ciXOffset", "ciYOffset", L["Combat Indicator"],
|
||||||
|
{"TOPLEFT", "TOPLEFT"},
|
||||||
|
Gladdy.db.ciSize * Gladdy.db.ciWidthFactor, Gladdy.db.ciSize,
|
||||||
|
0, 0, "ciEnabled")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function CombatIndicator:Test()
|
function CombatIndicator:Test()
|
||||||
@ -123,6 +143,7 @@ function CombatIndicator:GetOptions()
|
|||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.ciEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -166,37 +187,13 @@ function CombatIndicator:GetOptions()
|
|||||||
position = {
|
position = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 4,
|
order = 3,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 4,
|
order = 4,
|
||||||
},
|
},
|
||||||
ciAnchor = Gladdy:option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Anchor"],
|
|
||||||
desc = L["This changes the anchor of the ci icon"],
|
|
||||||
order = 20,
|
|
||||||
values = {
|
|
||||||
["trinket"] = L["Trinket"],
|
|
||||||
["classIcon"] = L["Class Icon"],
|
|
||||||
["healthBar"] = L["Health Bar"],
|
|
||||||
["powerBar"] = L["Power Bar"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
ciPos = Gladdy:option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Position"],
|
|
||||||
desc = L["This changes position relative to its anchor of the ci icon"],
|
|
||||||
order = 21,
|
|
||||||
values = {
|
|
||||||
["LEFT"] = L["Left"],
|
|
||||||
["RIGHT"] = L["Right"],
|
|
||||||
["TOP"] = L["Top"],
|
|
||||||
["BOTTOM"] = L["Bottom"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
ciXOffset = Gladdy:option({
|
ciXOffset = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Horizontal offset"],
|
name = L["Horizontal offset"],
|
||||||
@ -220,7 +217,7 @@ function CombatIndicator:GetOptions()
|
|||||||
border = {
|
border = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Border"],
|
name = L["Border"],
|
||||||
order = 4,
|
order = 2,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -242,7 +239,56 @@ function CombatIndicator:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 5,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
ciFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
ciFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function CombatIndicator:LegacySetPosition(ciFrame, unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
-- LEGACY options
|
||||||
|
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
|
||||||
|
local ciAnchor = Gladdy.db.ciAnchor or Gladdy.legacy.ciAnchor
|
||||||
|
local ciPos = Gladdy.db.ciPos
|
||||||
|
|
||||||
|
ciFrame:ClearAllPoints()
|
||||||
|
ciFrame:SetPoint(ANCHORS[ciPos], Gladdy.buttons[unit][ciAnchor], ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset)
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,13 @@
|
|||||||
local select = select
|
local select = select
|
||||||
local pairs,ipairs,tbl_sort,tinsert,format,rand = pairs,ipairs,table.sort,tinsert,format,math.random
|
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 GetSpellInfo = GetSpellInfo
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local GetTime = GetTime
|
local GetTime = GetTime
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local DRData = LibStub("DRData-1.0-BCC")
|
local DRData = LibStub("DRList-1.0")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local function defaultCategories()
|
local function defaultCategories()
|
||||||
local categories = {}
|
local categories = {}
|
||||||
@ -28,12 +29,14 @@ local function defaultCategories()
|
|||||||
end
|
end
|
||||||
local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
||||||
drFont = "DorisPP",
|
drFont = "DorisPP",
|
||||||
|
drFontColorsEnabled = false,
|
||||||
drFontColor = { r = 1, g = 1, b = 0, a = 1 },
|
drFontColor = { r = 1, g = 1, b = 0, a = 1 },
|
||||||
drFontScale = 1,
|
drFontScale = 1,
|
||||||
drCooldownPos = "RIGHT",
|
drGrowDirection = "RIGHT",
|
||||||
drXOffset = 0,
|
drXOffset = 0,
|
||||||
drYOffset = 0,
|
drYOffset = 0,
|
||||||
drIconSize = 36,
|
drIconSize = 36,
|
||||||
|
drIconZoomed = false,
|
||||||
drEnabled = true,
|
drEnabled = true,
|
||||||
drBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_Gloss",
|
drBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_Gloss",
|
||||||
drBorderColor = { r = 1, g = 1, b = 1, a = 1 },
|
drBorderColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||||
@ -44,55 +47,78 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
|||||||
drHalfColor = {r = 1, g = 1, b = 0, a = 1 },
|
drHalfColor = {r = 1, g = 1, b = 0, a = 1 },
|
||||||
drQuarterColor = {r = 1, g = 0.7, b = 0, a = 1 },
|
drQuarterColor = {r = 1, g = 0.7, b = 0, a = 1 },
|
||||||
drNullColor = {r = 1, g = 0, b = 0, a = 1 },
|
drNullColor = {r = 1, g = 0, b = 0, a = 1 },
|
||||||
|
drLevelTextEnabled = true,
|
||||||
|
drLevelTextFont = "DorisPP",
|
||||||
|
drLevelTextScale = 0.8,
|
||||||
|
drLevelTextColor = { r = 1, g = 1, b = 0, a = 1 },
|
||||||
|
drLevelTextColorsEnabled = true,
|
||||||
drWidthFactor = 1,
|
drWidthFactor = 1,
|
||||||
drCategories = defaultCategories(),
|
drCategories = defaultCategories(),
|
||||||
drDuration = 18
|
drDuration = 18,
|
||||||
|
drFrameStrata = "MEDIUM",
|
||||||
|
drFrameLevel = 3,
|
||||||
|
drGroup = false,
|
||||||
|
drGroupDirection = "DOWN"
|
||||||
})
|
})
|
||||||
|
|
||||||
local function getDiminishColor(dr)
|
local function getDiminishColor(dr)
|
||||||
if dr == 0.5 then
|
if dr == 0.5 then
|
||||||
return Gladdy.db.drHalfColor.r, Gladdy.db.drHalfColor.g, Gladdy.db.drHalfColor.b, Gladdy.db.drHalfColor.a
|
return Gladdy:SetColor(Gladdy.db.drHalfColor)
|
||||||
elseif dr == 0.25 then
|
elseif dr == 0.25 then
|
||||||
return Gladdy.db.drQuarterColor.r, Gladdy.db.drQuarterColor.g, Gladdy.db.drQuarterColor.b, Gladdy.db.drQuarterColor.a
|
return Gladdy:SetColor(Gladdy.db.drQuarterColor)
|
||||||
else
|
else
|
||||||
return Gladdy.db.drNullColor.r, Gladdy.db.drNullColor.g, Gladdy.db.drNullColor.b, Gladdy.db.drNullColor.a
|
return Gladdy:SetColor(Gladdy.db.drNullColor)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getDiminishText(dr)
|
||||||
|
if dr == 0.5 then
|
||||||
|
return "½"
|
||||||
|
elseif dr == 0.25 then
|
||||||
|
return "¼"
|
||||||
|
else
|
||||||
|
return "ø"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Diminishings:Initialize()
|
function Diminishings:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
self:RegisterMessage("UNIT_DEATH", "ResetUnit", "AURA_FADE", "UNIT_DESTROYED")
|
self:RegisterMessage("UNIT_DESTROYED")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Diminishings:CreateFrame(unit)
|
function Diminishings:CreateFrame(unit)
|
||||||
local drFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit])
|
local drFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit])
|
||||||
drFrame:EnableMouse(false)
|
drFrame:EnableMouse(false)
|
||||||
|
drFrame:SetMovable(true)
|
||||||
|
drFrame:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
drFrame:SetFrameLevel(Gladdy.db.drFrameLevel)
|
||||||
|
|
||||||
for i = 1, 16 do
|
for i = 1, 16 do
|
||||||
local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame)
|
local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame)
|
||||||
|
icon.drFrame = drFrame
|
||||||
icon:Hide()
|
icon:Hide()
|
||||||
icon:EnableMouse(false)
|
icon:EnableMouse(false)
|
||||||
icon:SetFrameLevel(3)
|
icon:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
icon:SetFrameLevel(Gladdy.db.drFrameLevel)
|
||||||
icon.texture = icon:CreateTexture(nil, "BACKGROUND")
|
icon.texture = icon:CreateTexture(nil, "BACKGROUND")
|
||||||
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
icon.texture.masked = true
|
||||||
icon.texture:SetAllPoints(icon)
|
icon.texture:SetAllPoints(icon)
|
||||||
icon:SetScript("OnUpdate", function(self, elapsed)
|
icon:SetScript("OnUpdate", function(self, elapsed)
|
||||||
if (self.active) then
|
if (self.running) then
|
||||||
if (self.timeLeft <= 0) then
|
if (self.timeLeft <= 0) then
|
||||||
if (self.factor == drFrame.tracked[self.dr]) then
|
self.drFrame.tracked[self.dr] = nil
|
||||||
drFrame.tracked[self.dr] = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
self.active = false
|
self.active = false
|
||||||
|
self.running = false
|
||||||
self.dr = nil
|
self.dr = nil
|
||||||
self.diminishing = 1.0
|
self.diminishing = 1.0
|
||||||
self.texture:SetTexture("")
|
self.texture:SetTexture("")
|
||||||
self.text:SetText("")
|
self.timeText:SetText("")
|
||||||
self:Hide()
|
self:Hide()
|
||||||
Diminishings:Positionate(unit)
|
Diminishings:Positionate(unit)
|
||||||
else
|
else
|
||||||
self.timeLeft = self.timeLeft - elapsed
|
self.timeLeft = self.timeLeft - elapsed
|
||||||
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 5)
|
Gladdy:FormatTimer(self.timeText, self.timeLeft, self.timeLeft < 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
@ -100,13 +126,15 @@ function Diminishings:CreateFrame(unit)
|
|||||||
icon.cooldown = CreateFrame("Cooldown", nil, icon, "CooldownFrameTemplate")
|
icon.cooldown = CreateFrame("Cooldown", nil, icon, "CooldownFrameTemplate")
|
||||||
icon.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
|
icon.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
|
||||||
icon.cooldown:SetHideCountdownNumbers(true)
|
icon.cooldown:SetHideCountdownNumbers(true)
|
||||||
icon.cooldown:SetFrameLevel(4)
|
icon.cooldown:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
icon.cooldown:SetFrameLevel(Gladdy.db.drFrameLevel + 1)
|
||||||
|
|
||||||
icon.cooldownFrame = CreateFrame("Frame", nil, icon)
|
icon.cooldownFrame = CreateFrame("Frame", nil, icon)
|
||||||
icon.cooldownFrame:ClearAllPoints()
|
icon.cooldownFrame:ClearAllPoints()
|
||||||
icon.cooldownFrame:SetPoint("TOPLEFT", icon, "TOPLEFT")
|
icon.cooldownFrame:SetPoint("TOPLEFT", icon, "TOPLEFT")
|
||||||
icon.cooldownFrame:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT")
|
icon.cooldownFrame:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT")
|
||||||
icon.cooldownFrame:SetFrameLevel(5)
|
icon.cooldownFrame:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2)
|
||||||
|
|
||||||
--icon.overlay = CreateFrame("Frame", nil, icon)
|
--icon.overlay = CreateFrame("Frame", nil, icon)
|
||||||
--icon.overlay:SetAllPoints(icon)
|
--icon.overlay:SetAllPoints(icon)
|
||||||
@ -114,24 +142,24 @@ function Diminishings:CreateFrame(unit)
|
|||||||
icon.border:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp")
|
icon.border:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp")
|
||||||
icon.border:SetAllPoints(icon)
|
icon.border:SetAllPoints(icon)
|
||||||
|
|
||||||
icon.text = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
|
||||||
icon.text:SetDrawLayer("OVERLAY")
|
|
||||||
icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE")
|
|
||||||
icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
|
||||||
icon.text:SetShadowOffset(1, -1)
|
|
||||||
icon.text:SetShadowColor(0, 0, 0, 1)
|
|
||||||
icon.text:SetJustifyH("CENTER")
|
|
||||||
icon.text:SetPoint("CENTER")
|
|
||||||
|
|
||||||
icon.timeText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
icon.timeText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
icon.timeText:SetDrawLayer("OVERLAY")
|
icon.timeText:SetDrawLayer("OVERLAY")
|
||||||
icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE")
|
icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), 10, "OUTLINE")
|
||||||
icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor))
|
||||||
icon.timeText:SetShadowOffset(1, -1)
|
icon.timeText:SetShadowOffset(1, -1)
|
||||||
icon.timeText:SetShadowColor(0, 0, 0, 1)
|
icon.timeText:SetShadowColor(0, 0, 0, 1)
|
||||||
icon.timeText:SetJustifyH("CENTER")
|
icon.timeText:SetJustifyH("CENTER")
|
||||||
icon.timeText:SetPoint("CENTER", icon, "CENTER", 0, 1)
|
icon.timeText:SetPoint("CENTER", icon, "CENTER", 0, 1)
|
||||||
|
|
||||||
|
icon.drLevelText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
|
icon.drLevelText:SetDrawLayer("OVERLAY")
|
||||||
|
icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), 10, "OUTLINE")
|
||||||
|
icon.drLevelText:SetTextColor(getDiminishColor(1))
|
||||||
|
icon.drLevelText:SetShadowOffset(1, -1)
|
||||||
|
icon.drLevelText:SetShadowColor(0, 0, 0, 1)
|
||||||
|
icon.drLevelText:SetJustifyH("CENTER")
|
||||||
|
icon.drLevelText:SetPoint("BOTTOM", icon, "BOTTOM", 0, 0)
|
||||||
|
|
||||||
icon.diminishing = 1
|
icon.diminishing = 1
|
||||||
|
|
||||||
drFrame["icon" .. i] = icon
|
drFrame["icon" .. i] = icon
|
||||||
@ -156,41 +184,73 @@ function Diminishings:UpdateFrame(unit)
|
|||||||
drFrame:Show()
|
drFrame:Show()
|
||||||
end
|
end
|
||||||
|
|
||||||
drFrame:ClearAllPoints()
|
drFrame:SetWidth(Gladdy.db.drIconSize)
|
||||||
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
|
||||||
if (Gladdy.db.drCooldownPos == "LEFT") then
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
drFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
|
||||||
else
|
|
||||||
drFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if (Gladdy.db.drCooldownPos == "RIGHT") then
|
|
||||||
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
|
||||||
if anchor == Gladdy.buttons[unit].healthBar then
|
|
||||||
drFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
|
||||||
else
|
|
||||||
drFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
drFrame:SetWidth(Gladdy.db.drIconSize * 16)
|
|
||||||
drFrame:SetHeight(Gladdy.db.drIconSize)
|
drFrame:SetHeight(Gladdy.db.drIconSize)
|
||||||
|
drFrame:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
drFrame:SetFrameLevel(Gladdy.db.drFrameLevel)
|
||||||
|
|
||||||
|
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"},
|
||||||
|
Gladdy.db.drIconSize * Gladdy.db.drWidthFactor,
|
||||||
|
Gladdy.db.drIconSize,
|
||||||
|
0,
|
||||||
|
0, "drEnabled")
|
||||||
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
for i = 1, 16 do
|
for i = 1, 16 do
|
||||||
local icon = drFrame["icon" .. i]
|
local icon = drFrame["icon" .. i]
|
||||||
|
|
||||||
icon:SetWidth(Gladdy.db.drIconSize * Gladdy.db.drWidthFactor)
|
icon:SetWidth(Gladdy.db.drIconSize * Gladdy.db.drWidthFactor)
|
||||||
icon:SetHeight(Gladdy.db.drIconSize)
|
icon:SetHeight(Gladdy.db.drIconSize)
|
||||||
|
|
||||||
icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
icon:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
icon:SetFrameLevel(Gladdy.db.drFrameLevel)
|
||||||
icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
icon.cooldown:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
icon.cooldown:SetFrameLevel(Gladdy.db.drFrameLevel + 1)
|
||||||
|
icon.cooldownFrame:SetFrameStrata(Gladdy.db.drFrameStrata)
|
||||||
|
icon.cooldownFrame:SetFrameLevel(Gladdy.db.drFrameLevel + 2)
|
||||||
|
|
||||||
icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16)
|
icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
||||||
icon.cooldown:SetHeight(icon:GetHeight() - icon:GetHeight()/16)
|
if Gladdy.db.drFontColorsEnabled then
|
||||||
|
icon.timeText:SetTextColor(getDiminishColor(icon.diminishing))
|
||||||
|
else
|
||||||
|
icon.timeText:SetTextColor(Gladdy:SetColor(Gladdy.db.drFontColor))
|
||||||
|
end
|
||||||
|
|
||||||
|
icon.drLevelText:SetFont(Gladdy:SMFetch("font", "drLevelTextFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drLevelTextScale, "OUTLINE")
|
||||||
|
if Gladdy.db.drLevelTextColorsEnabled then
|
||||||
|
icon.drLevelText:SetTextColor(getDiminishColor(icon.diminishing))
|
||||||
|
else
|
||||||
|
icon.drLevelText:SetTextColor(Gladdy:SetColor(Gladdy.db.drLevelTextColor))
|
||||||
|
end
|
||||||
|
|
||||||
|
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:ClearAllPoints()
|
||||||
icon.cooldown:SetPoint("CENTER", icon, "CENTER")
|
icon.cooldown:SetPoint("CENTER", icon, "CENTER")
|
||||||
if Gladdy.db.drDisableCircle then
|
if Gladdy.db.drDisableCircle then
|
||||||
@ -202,19 +262,25 @@ function Diminishings:UpdateFrame(unit)
|
|||||||
if Gladdy.db.drBorderColorsEnabled then
|
if Gladdy.db.drBorderColorsEnabled then
|
||||||
icon.border:SetVertexColor(getDiminishColor(icon.diminishing))
|
icon.border:SetVertexColor(getDiminishColor(icon.diminishing))
|
||||||
else
|
else
|
||||||
icon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a)
|
icon.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.drBorderColor))
|
||||||
|
end
|
||||||
|
|
||||||
|
if Gladdy.db.drLevelTextEnabled then
|
||||||
|
icon.drLevelText:Show()
|
||||||
|
else
|
||||||
|
icon.drLevelText:Hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
icon:ClearAllPoints()
|
icon:ClearAllPoints()
|
||||||
if (Gladdy.db.drCooldownPos == "LEFT") then
|
if (Gladdy.db.drGrowDirection == "LEFT") then
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
icon:SetPoint("TOPRIGHT")
|
icon:SetPoint("TOPRIGHT", drFrame, "TOPRIGHT")
|
||||||
else
|
else
|
||||||
icon:SetPoint("RIGHT", drFrame["icon" .. (i - 1)], "LEFT", -Gladdy.db.drIconPadding, 0)
|
icon:SetPoint("RIGHT", drFrame["icon" .. (i - 1)], "LEFT", -Gladdy.db.drIconPadding, 0)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (i == 1) then
|
if (i == 1) then
|
||||||
icon:SetPoint("TOPLEFT")
|
icon:SetPoint("TOPLEFT", drFrame, "TOPLEFT")
|
||||||
else
|
else
|
||||||
icon:SetPoint("LEFT", drFrame["icon" .. (i - 1)], "RIGHT", Gladdy.db.drIconPadding, 0)
|
icon:SetPoint("LEFT", drFrame["icon" .. (i - 1)], "RIGHT", Gladdy.db.drIconPadding, 0)
|
||||||
end
|
end
|
||||||
@ -226,9 +292,27 @@ function Diminishings:UpdateFrame(unit)
|
|||||||
icon.border:SetTexture(Gladdy.db.drBorderStyle)
|
icon.border:SetTexture(Gladdy.db.drBorderStyle)
|
||||||
end
|
end
|
||||||
|
|
||||||
--icon.texture:SetTexCoord(.1, .9, .1, .9)
|
if Gladdy.db.drIconZoomed then
|
||||||
--icon.texture:SetPoint("TOPLEFT", icon, "TOPLEFT", 2, -2)
|
if icon.texture.masked then
|
||||||
--icon.texture:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT", -2, 2)
|
icon.texture:SetMask("")
|
||||||
|
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("")
|
||||||
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -243,9 +327,9 @@ function Diminishings:ResetUnit(unit)
|
|||||||
for i = 1, 16 do
|
for i = 1, 16 do
|
||||||
local icon = drFrame["icon" .. i]
|
local icon = drFrame["icon" .. i]
|
||||||
icon.active = false
|
icon.active = false
|
||||||
|
icon.running = false
|
||||||
icon.timeLeft = 0
|
icon.timeLeft = 0
|
||||||
icon.texture:SetTexture("")
|
icon.texture:SetTexture("")
|
||||||
icon.text:SetText("")
|
|
||||||
icon.timeText:SetText("")
|
icon.timeText:SetText("")
|
||||||
icon:Hide()
|
icon:Hide()
|
||||||
end
|
end
|
||||||
@ -282,12 +366,123 @@ function Diminishings:Test(unit)
|
|||||||
amount = rand(1,3)
|
amount = rand(1,3)
|
||||||
index = rand(1, #enabledCategories[i].spellIDs)
|
index = rand(1, #enabledCategories[i].spellIDs)
|
||||||
for _=1, amount do
|
for _=1, amount do
|
||||||
|
self:AuraGain(unit, enabledCategories[i].spellIDs[index])
|
||||||
self:AuraFade(unit, enabledCategories[i].spellIDs[index])
|
self:AuraFade(unit, enabledCategories[i].spellIDs[index])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
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)
|
function Diminishings:AuraFade(unit, spellID)
|
||||||
local drFrame = self.frames[unit]
|
local drFrame = self.frames[unit]
|
||||||
local drCat = DRData:GetSpellCategory(spellID)
|
local drCat = DRData:GetSpellCategory(spellID)
|
||||||
@ -298,35 +493,16 @@ function Diminishings:AuraFade(unit, spellID)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local lastIcon
|
-- find icon and start timer
|
||||||
for i = 1, 16 do
|
local lastIcon = Diminishings:FindLastIcon(unit, drCat)
|
||||||
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
|
|
||||||
if not lastIcon then return end
|
if not lastIcon then return end
|
||||||
lastIcon.dr = drCat
|
|
||||||
|
Diminishings:PrepareIcon(unit, lastIcon, drCat, spellID)
|
||||||
|
|
||||||
lastIcon.timeLeft = Gladdy.db.drDuration
|
lastIcon.timeLeft = Gladdy.db.drDuration
|
||||||
lastIcon.diminishing = DRData:NextDR(lastIcon.diminishing)
|
lastIcon.cooldown:Show()
|
||||||
if Gladdy.db.drBorderColorsEnabled then
|
|
||||||
lastIcon.border:SetVertexColor(getDiminishColor(lastIcon.diminishing))
|
|
||||||
else
|
|
||||||
lastIcon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a)
|
|
||||||
end
|
|
||||||
lastIcon.cooldown:SetCooldown(GetTime(), Gladdy.db.drDuration)
|
lastIcon.cooldown:SetCooldown(GetTime(), Gladdy.db.drDuration)
|
||||||
if Gladdy.db.drCategories[drCat].forceIcon then
|
lastIcon.running = true
|
||||||
lastIcon.texture:SetTexture(Gladdy.db.drCategories[drCat].icon)
|
|
||||||
else
|
|
||||||
lastIcon.texture:SetTexture(select(3, GetSpellInfo(spellID)))
|
|
||||||
end
|
|
||||||
lastIcon.active = true
|
|
||||||
self:Positionate(unit)
|
|
||||||
lastIcon:Show()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Diminishings:Positionate(unit)
|
function Diminishings:Positionate(unit)
|
||||||
@ -342,13 +518,15 @@ function Diminishings:Positionate(unit)
|
|||||||
|
|
||||||
if (icon.active) then
|
if (icon.active) then
|
||||||
icon:ClearAllPoints()
|
icon:ClearAllPoints()
|
||||||
if (Gladdy.db.drCooldownPos == "LEFT") then
|
if (Gladdy.db.newLayout and Gladdy.db.drGrowDirection == "LEFT"
|
||||||
|
or not Gladdy.db.newLayout and Gladdy.db.drCooldownPos == "LEFT") then
|
||||||
if (not lastIcon) then
|
if (not lastIcon) then
|
||||||
icon:SetPoint("TOPRIGHT")
|
icon:SetPoint("TOPRIGHT")
|
||||||
else
|
else
|
||||||
icon:SetPoint("RIGHT", lastIcon, "LEFT", -Gladdy.db.drIconPadding, 0)
|
icon:SetPoint("RIGHT", lastIcon, "LEFT", -Gladdy.db.drIconPadding, 0)
|
||||||
end
|
end
|
||||||
else
|
elseif (Gladdy.db.newLayout and Gladdy.db.drGrowDirection == "RIGHT"
|
||||||
|
or not Gladdy.db.newLayout and Gladdy.db.drCooldownPos == "RIGHT") then
|
||||||
if (not lastIcon) then
|
if (not lastIcon) then
|
||||||
icon:SetPoint("TOPLEFT")
|
icon:SetPoint("TOPLEFT")
|
||||||
else
|
else
|
||||||
@ -379,15 +557,37 @@ function Diminishings:GetOptions()
|
|||||||
name = L["DR Duration"],
|
name = L["DR Duration"],
|
||||||
desc = L["Change the DR Duration in seconds (DR is dynamic between 15-20s)"],
|
desc = L["Change the DR Duration in seconds (DR is dynamic between 15-20s)"],
|
||||||
order = 4,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.drEnabled end,
|
||||||
min = 15,
|
min = 15,
|
||||||
max = 20,
|
max = 20,
|
||||||
step = .1,
|
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 = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 5,
|
order = 5,
|
||||||
|
disabled = function() return not Gladdy.db.drEnabled end,
|
||||||
args = {
|
args = {
|
||||||
icon = {
|
icon = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -399,11 +599,18 @@ function Diminishings:GetOptions()
|
|||||||
name = L["Icon"],
|
name = L["Icon"],
|
||||||
order = 4,
|
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({
|
drIconSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon Size"],
|
name = L["Icon Size"],
|
||||||
desc = L["Size of the DR Icons"],
|
desc = L["Size of the DR Icons"],
|
||||||
order = 5,
|
order = 6,
|
||||||
min = 5,
|
min = 5,
|
||||||
max = 80,
|
max = 80,
|
||||||
step = 1,
|
step = 1,
|
||||||
@ -413,7 +620,7 @@ function Diminishings:GetOptions()
|
|||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon Width Factor"],
|
name = L["Icon Width Factor"],
|
||||||
desc = L["Stretches the icon"],
|
desc = L["Stretches the icon"],
|
||||||
order = 6,
|
order = 7,
|
||||||
min = 0.5,
|
min = 0.5,
|
||||||
max = 2,
|
max = 2,
|
||||||
step = 0.05,
|
step = 0.05,
|
||||||
@ -423,7 +630,7 @@ function Diminishings:GetOptions()
|
|||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon Padding"],
|
name = L["Icon Padding"],
|
||||||
desc = L["Space between Icons"],
|
desc = L["Space between Icons"],
|
||||||
order = 7,
|
order = 8,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 10,
|
max = 10,
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
@ -476,34 +683,42 @@ function Diminishings:GetOptions()
|
|||||||
},
|
},
|
||||||
font = {
|
font = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Font"],
|
name = L["Cooldown Font"],
|
||||||
order = 3,
|
order = 3,
|
||||||
args = {
|
args = {
|
||||||
headerFont = {
|
headerFont = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Font"],
|
name = L["Cooldown Font"],
|
||||||
order = 10,
|
order = 1,
|
||||||
},
|
},
|
||||||
drFont = Gladdy:option({
|
drFontColorsEnabled = Gladdy:option({
|
||||||
type = "select",
|
type = "toggle",
|
||||||
name = L["Font"],
|
name = L["Enable DR Colors as Font Color"],
|
||||||
desc = L["Font of the cooldown"],
|
desc = L["Shows the current DR Level on the DR icon."],
|
||||||
order = 11,
|
order = 2,
|
||||||
dialogControl = "LSM30_Font",
|
width = "full",
|
||||||
values = AceGUIWidgetLSMlists.font,
|
|
||||||
}),
|
}),
|
||||||
drFontColor = Gladdy:colorOption({
|
drFontColor = Gladdy:colorOption({
|
||||||
type = "color",
|
type = "color",
|
||||||
name = L["Font color"],
|
name = L["Font color"],
|
||||||
desc = L["Color of the text"],
|
desc = L["Color of the text"],
|
||||||
order = 13,
|
order = 3,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
drFont = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Font"],
|
||||||
|
desc = L["Font of the cooldown"],
|
||||||
|
order = 4,
|
||||||
|
dialogControl = "LSM30_Font",
|
||||||
|
values = AceGUIWidgetLSMlists.font,
|
||||||
}),
|
}),
|
||||||
drFontScale = Gladdy:option({
|
drFontScale = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Font scale"],
|
name = L["Font scale"],
|
||||||
desc = L["Scale of the text"],
|
desc = L["Scale of the text"],
|
||||||
order = 12,
|
order = 5,
|
||||||
min = 0.1,
|
min = 0.1,
|
||||||
max = 2,
|
max = 2,
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
@ -511,48 +726,67 @@ function Diminishings:GetOptions()
|
|||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
position = {
|
levelText = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Position"],
|
name = L["DR Font"],
|
||||||
order = 4,
|
order = 4,
|
||||||
args = {
|
args = {
|
||||||
headerPosition = {
|
headerBorder = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Position"],
|
name = L["DR Font"],
|
||||||
order = 20,
|
order = 1,
|
||||||
},
|
},
|
||||||
drCooldownPos = Gladdy:option({
|
drLevelTextEnabled = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Enable DR Font"],
|
||||||
|
desc = L["Shows the current DR Level on the DR icon."],
|
||||||
|
order = 2,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
drLevelTextColorsEnabled = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Enable DR Colors as Font Color"],
|
||||||
|
desc = L["Shows the current DR Level on the DR icon."],
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.drLevelTextEnabled
|
||||||
|
end,
|
||||||
|
}),
|
||||||
|
drLevelTextColor = Gladdy:colorOption({
|
||||||
|
type = "color",
|
||||||
|
name = L["DR Font color"],
|
||||||
|
desc = L["Color of the font"],
|
||||||
|
order = 4,
|
||||||
|
hasAlpha = true,
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.drLevelTextEnabled
|
||||||
|
end,
|
||||||
|
}),
|
||||||
|
drLevelTextFont = Gladdy:option({
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["DR Cooldown position"],
|
name = L["Font"],
|
||||||
desc = L["Position of the cooldown icons"],
|
desc = L["Font of the DR Font"],
|
||||||
order = 21,
|
order = 5,
|
||||||
values = {
|
dialogControl = "LSM30_Font",
|
||||||
["LEFT"] = L["Left"],
|
values = AceGUIWidgetLSMlists.font,
|
||||||
["RIGHT"] = L["Right"],
|
width = "full",
|
||||||
},
|
disabled = function()
|
||||||
|
return not Gladdy.db.drLevelTextEnabled
|
||||||
|
end,
|
||||||
}),
|
}),
|
||||||
headerOffset = {
|
drLevelTextScale = Gladdy:option({
|
||||||
type = "header",
|
|
||||||
name = L["Offset"],
|
|
||||||
order = 22,
|
|
||||||
},
|
|
||||||
drXOffset = Gladdy:option({
|
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Horizontal offset"],
|
name = L["Font scale"],
|
||||||
order = 23,
|
desc = L["Scale of the text"],
|
||||||
min = -400,
|
order = 6,
|
||||||
max = 400,
|
min = 0.1,
|
||||||
step = 0.1,
|
max = 2,
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
drYOffset = Gladdy:option({
|
|
||||||
type = "range",
|
|
||||||
name = L["Vertical offset"],
|
|
||||||
order = 24,
|
|
||||||
min = -400,
|
|
||||||
max = 400,
|
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
width = "full",
|
width = "full",
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.drLevelTextEnabled
|
||||||
|
end,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -564,33 +798,43 @@ function Diminishings:GetOptions()
|
|||||||
headerBorder = {
|
headerBorder = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Border"],
|
name = L["Border"],
|
||||||
order = 30,
|
order = 1,
|
||||||
},
|
},
|
||||||
drBorderStyle = Gladdy:option({
|
drBorderColorsEnabled = Gladdy:option({
|
||||||
type = "select",
|
type = "toggle",
|
||||||
name = L["Border style"],
|
name = L["Enable DR Colors as Border Color"],
|
||||||
order = 31,
|
desc = L["Colors borders of DRs in respective DR Colors"],
|
||||||
values = Gladdy:GetIconStyles()
|
order = 2,
|
||||||
|
width = "full",
|
||||||
}),
|
}),
|
||||||
drBorderColor = Gladdy:colorOption({
|
drBorderColor = Gladdy:colorOption({
|
||||||
type = "color",
|
type = "color",
|
||||||
name = L["Border color"],
|
name = L["Border color"],
|
||||||
desc = L["Color of the border"],
|
desc = L["Color of the border"],
|
||||||
order = 32,
|
order = 3,
|
||||||
|
disabled = function()
|
||||||
|
return Gladdy.db.drBorderColorsEnabled
|
||||||
|
end,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
headerBorderColors = {
|
drBorderStyle = Gladdy:option({
|
||||||
type = "header",
|
type = "select",
|
||||||
name = L["DR Border Colors"],
|
name = L["Border style"],
|
||||||
order = 40,
|
order = 4,
|
||||||
},
|
values = Gladdy:GetIconStyles()
|
||||||
drBorderColorsEnabled = Gladdy:option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Dr Border Colors Enabled"],
|
|
||||||
desc = L["Colors borders of DRs in respective DR-color below"],
|
|
||||||
order = 41,
|
|
||||||
width = "full",
|
|
||||||
}),
|
}),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
levelColors = {
|
||||||
|
type = "group",
|
||||||
|
name = L["DR Colors"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerColors = {
|
||||||
|
type = "header",
|
||||||
|
name = L["DR Colors"],
|
||||||
|
order = 10,
|
||||||
|
},
|
||||||
drHalfColor = Gladdy:colorOption({
|
drHalfColor = Gladdy:colorOption({
|
||||||
type = "color",
|
type = "color",
|
||||||
name = L["Half"],
|
name = L["Half"],
|
||||||
@ -612,7 +856,76 @@ function Diminishings:GetOptions()
|
|||||||
order = 44,
|
order = 44,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
position = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Position"],
|
||||||
|
order = 7,
|
||||||
|
args = {
|
||||||
|
headerPosition = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Position"],
|
||||||
|
order = 20,
|
||||||
|
},
|
||||||
|
drGrowDirection = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["DR Grow Direction"],
|
||||||
|
desc = L["Grow Direction of the dr icons"],
|
||||||
|
order = 21,
|
||||||
|
values = {
|
||||||
|
["LEFT"] = L["Left"],
|
||||||
|
["RIGHT"] = L["Right"],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
drXOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Horizontal offset"],
|
||||||
|
order = 23,
|
||||||
|
min = -400,
|
||||||
|
max = 400,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
drYOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Vertical offset"],
|
||||||
|
order = 24,
|
||||||
|
min = -400,
|
||||||
|
max = 400,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 8,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
drFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
drFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -620,6 +933,7 @@ function Diminishings:GetOptions()
|
|||||||
type = "group",
|
type = "group",
|
||||||
name = L["Categories"],
|
name = L["Categories"],
|
||||||
order = 6,
|
order = 6,
|
||||||
|
disabled = function() return not Gladdy.db.drEnabled end,
|
||||||
args = Diminishings:CategoryOptions(),
|
args = Diminishings:CategoryOptions(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -713,3 +1027,36 @@ function Diminishings:GetDRIcons(category)
|
|||||||
end
|
end
|
||||||
return icons
|
return icons
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Diminishings:LegacySetPosition(drFrame, unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
drFrame:ClearAllPoints()
|
||||||
|
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.drCooldownPos == "LEFT") then
|
||||||
|
Gladdy.db.drGrowDirection = "LEFT"
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
drFrame:SetPoint("RIGHT", anchor, "LEFT", -horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
||||||
|
else
|
||||||
|
drFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (Gladdy.db.drCooldownPos == "RIGHT") then
|
||||||
|
Gladdy.db.drGrowDirection = "RIGHT"
|
||||||
|
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
||||||
|
if anchor == Gladdy.buttons[unit].healthBar then
|
||||||
|
drFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
||||||
|
else
|
||||||
|
drFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.drXOffset, Gladdy.db.drYOffset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
@ -24,6 +24,7 @@ local function table_copy(t, str)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local ExportImport = Gladdy:NewModule("Export Import", nil, {
|
local ExportImport = Gladdy:NewModule("Export Import", nil, {
|
||||||
|
expansion = Gladdy.expansion,
|
||||||
})
|
})
|
||||||
|
|
||||||
local export = AceGUI:Create("Frame")
|
local export = AceGUI:Create("Frame")
|
||||||
@ -72,6 +73,7 @@ importButton:SetCallback("OnClick", function(widget)
|
|||||||
Gladdy:Reset()
|
Gladdy:Reset()
|
||||||
Gladdy:HideFrame()
|
Gladdy:HideFrame()
|
||||||
Gladdy:ToggleFrame(3)
|
Gladdy:ToggleFrame(3)
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
end)
|
end)
|
||||||
import:AddChild(importButton)
|
import:AddChild(importButton)
|
||||||
import.button = importButton
|
import.button = importButton
|
||||||
@ -89,9 +91,40 @@ import:AddChild(importClearButton)
|
|||||||
import.clearButton = importClearButton
|
import.clearButton = importClearButton
|
||||||
|
|
||||||
local deletedOptions = { -- backwards compatibility
|
local deletedOptions = { -- backwards compatibility
|
||||||
growUp = true,
|
--deleted DR-categories
|
||||||
|
repentance = true,
|
||||||
|
sleep = true,
|
||||||
|
impconc = true,
|
||||||
|
dragonsbreath = true,
|
||||||
freezetrap = true,
|
freezetrap = true,
|
||||||
repentance = true
|
--deleted db options
|
||||||
|
castBarPos = true,
|
||||||
|
buffsCooldownPos = true,
|
||||||
|
buffsBuffsCooldownPos = true,
|
||||||
|
classIconPos = true,
|
||||||
|
ciAnchor = true,
|
||||||
|
ciPos = true,
|
||||||
|
cooldownYPos = true,
|
||||||
|
cooldownXPos = true,
|
||||||
|
drCooldownPos = true,
|
||||||
|
racialAnchor = true,
|
||||||
|
racialPos = true,
|
||||||
|
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)
|
local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg)
|
||||||
@ -99,7 +132,7 @@ local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg)
|
|||||||
for key, _ in pairs(deletedOptions) do
|
for key, _ in pairs(deletedOptions) do
|
||||||
if str_match(k, key) then
|
if str_match(k, key) then
|
||||||
isDeleted = true
|
isDeleted = true
|
||||||
Gladdy:Warn("found deleted option =", str .. "." .. k)
|
Gladdy:Debug("WARN", "found deleted option =", str .. "." .. k)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if errorFound then
|
if errorFound then
|
||||||
@ -114,8 +147,8 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
|||||||
if str == nil and not tbl.version_major_num then
|
if str == nil and not tbl.version_major_num then
|
||||||
return false, "Version conflict: version_major_num not seen"
|
return false, "Version conflict: version_major_num not seen"
|
||||||
end
|
end
|
||||||
if str == nil and tbl.version_major_num ~= Gladdy.version_major_num then
|
if str == nil and tbl.version_major_num > Gladdy.version_major_num then
|
||||||
return false, "Version conflict: " .. tbl.version_major_num .. " ~= " .. Gladdy.version_major_num
|
return false, "Version conflict: Major v" .. tbl.version_major_num .. " ~= v" .. Gladdy.version_major_num
|
||||||
end
|
end
|
||||||
if str == nil then
|
if str == nil then
|
||||||
str = "Gladdy.db"
|
str = "Gladdy.db"
|
||||||
@ -142,7 +175,7 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if errorFound then
|
if errorFound then
|
||||||
return false, errorMsg
|
--return false, errorMsg
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -204,17 +237,32 @@ end
|
|||||||
function ExportImport:ApplyImport(t, table, str)
|
function ExportImport:ApplyImport(t, table, str)
|
||||||
if str == nil then
|
if str == nil then
|
||||||
str = "Gladdy.db"
|
str = "Gladdy.db"
|
||||||
|
if (not t.newLayout) then
|
||||||
|
table.newLayout = false
|
||||||
|
end
|
||||||
|
if not t.expansion then
|
||||||
|
t.expansion = "BCC"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
for k,v in pairs(t) do
|
for k,v in pairs(t) do
|
||||||
if type(v) == "table" then
|
local skip = k == "expansion"
|
||||||
if (table[k] ~= nil) then
|
if t.expansion and t.expansion ~= table.expansion then
|
||||||
ExportImport:ApplyImport(v, table[k], str .. "." .. k)
|
if Gladdy:contains(k, expansionSpecific) then
|
||||||
else
|
Gladdy:Debug("WARN", "ExportImport:ApplyImport", "skipped", k, "- import string expansion is", t.expansion, "- current expansion is", table.expansion)
|
||||||
Gladdy:Warn("ApplyImport failed for", str .. "." .. k)
|
skip = true
|
||||||
end
|
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
|
else
|
||||||
table[k] = v
|
table[k] = v
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
local pairs = pairs
|
local pairs, ipairs = pairs, ipairs
|
||||||
local floor = math.floor
|
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 UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost = UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost
|
||||||
|
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
@ -16,6 +17,15 @@ local Healthbar = Gladdy:NewModule("Health Bar", 100, {
|
|||||||
healthBarBorderSize = 9,
|
healthBarBorderSize = 9,
|
||||||
healthBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
healthBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
healthBarBgColor = { r = 0, g = 0, b = 0, a = 0.4 },
|
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 },
|
healthBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||||
healthBarNameFontSize = 12,
|
healthBarNameFontSize = 12,
|
||||||
healthBarHealthFontSize = 12,
|
healthBarHealthFontSize = 12,
|
||||||
@ -24,12 +34,23 @@ local Healthbar = Gladdy:NewModule("Health Bar", 100, {
|
|||||||
healthActual = false,
|
healthActual = false,
|
||||||
healthMax = true,
|
healthMax = true,
|
||||||
healthPercentage = true,
|
healthPercentage = true,
|
||||||
|
healthCustomTagsEnabled = false,
|
||||||
|
healthTextLeft = "[name]",
|
||||||
|
healthTextRight = "[percent|status]",
|
||||||
|
healthTextLeftOutline = false,
|
||||||
|
healthTextRightOutline = false,
|
||||||
|
healthTextLeftVOffset = 0,
|
||||||
|
healthTextLeftHOffset = 5,
|
||||||
|
healthTextRightVOffset = 0,
|
||||||
|
healthTextRightHOffset = -5,
|
||||||
})
|
})
|
||||||
|
|
||||||
function Healthbar:Initialize()
|
function Healthbar:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
self:RegisterMessage("ENEMY_SPOTTED")
|
||||||
|
self:RegisterMessage("ENEMY_STEALTH")
|
||||||
|
self:RegisterMessage("UNIT_SPEC")
|
||||||
self:RegisterMessage("UNIT_DESTROYED")
|
self:RegisterMessage("UNIT_DESTROYED")
|
||||||
self:RegisterMessage("UNIT_DEATH")
|
self:RegisterMessage("UNIT_DEATH")
|
||||||
end
|
end
|
||||||
@ -41,72 +62,64 @@ function Healthbar:CreateFrame(unit)
|
|||||||
healthBar:EnableMouse(false)
|
healthBar:EnableMouse(false)
|
||||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.healthBarBorderSize })
|
edgeSize = Gladdy.db.healthBarBorderSize })
|
||||||
healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a)
|
healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.healthBarBorderColor))
|
||||||
healthBar:SetFrameLevel(1)
|
healthBar:SetFrameStrata(Gladdy.db.healthFrameStrata)
|
||||||
|
healthBar:SetFrameLevel(Gladdy.db.healthFrameLevel)
|
||||||
|
|
||||||
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
||||||
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||||
healthBar.hp:SetMinMaxValues(0, 100)
|
healthBar.hp:SetMinMaxValues(0, 100)
|
||||||
healthBar.hp:SetFrameLevel(0)
|
healthBar.hp:SetFrameStrata(Gladdy.db.healthFrameStrata)
|
||||||
|
healthBar.hp:SetFrameLevel(Gladdy.db.healthFrameLevel - 1)
|
||||||
|
|
||||||
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
||||||
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||||
healthBar.bg:ClearAllPoints()
|
healthBar.bg:ClearAllPoints()
|
||||||
healthBar.bg:SetAllPoints(healthBar.hp)
|
healthBar.bg:SetAllPoints(healthBar.hp)
|
||||||
healthBar.bg:SetAlpha(1)
|
healthBar.bg:SetAlpha(1)
|
||||||
healthBar.bg:SetVertexColor(Gladdy.db.healthBarBgColor.r, Gladdy.db.healthBarBgColor.g, Gladdy.db.healthBarBgColor.b, Gladdy.db.healthBarBgColor.a)
|
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor))
|
||||||
|
|
||||||
healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall")
|
healthBar.nameText = healthBar:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||||
if (Gladdy.db.healthBarNameFontSize < 1) then
|
if (Gladdy.db.healthBarNameFontSize < 1) then
|
||||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||||
healthBar.nameText:Hide()
|
healthBar.nameText:Hide()
|
||||||
else
|
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()
|
healthBar.nameText:Show()
|
||||||
end
|
end
|
||||||
healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||||
healthBar.nameText:SetShadowOffset(1, -1)
|
healthBar.nameText:SetShadowOffset(1, -1)
|
||||||
healthBar.nameText:SetShadowColor(0, 0, 0, 1)
|
healthBar.nameText:SetShadowColor(0, 0, 0, 1)
|
||||||
healthBar.nameText:SetJustifyH("CENTER")
|
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")
|
healthBar.healthText = healthBar:CreateFontString(nil, "OVERLAY")
|
||||||
if (Gladdy.db.healthBarHealthFontSize < 1) then
|
if (Gladdy.db.healthBarHealthFontSize < 1) then
|
||||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||||
healthBar.healthText:Hide()
|
healthBar.healthText:Hide()
|
||||||
else
|
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()
|
healthBar.healthText:Hide()
|
||||||
end
|
end
|
||||||
healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||||
healthBar.healthText:SetShadowOffset(1, -1)
|
healthBar.healthText:SetShadowOffset(1, -1)
|
||||||
healthBar.healthText:SetShadowColor(0, 0, 0, 1)
|
healthBar.healthText:SetShadowColor(0, 0, 0, 1)
|
||||||
healthBar.healthText:SetJustifyH("CENTER")
|
healthBar.healthText:SetJustifyH("CENTER")
|
||||||
healthBar.healthText:SetPoint("RIGHT", -5, 0)
|
healthBar.healthText:SetPoint("RIGHT", Gladdy.db.healthTextRightHOffset, Gladdy.db.healthTextRightVOffset)
|
||||||
|
|
||||||
healthBar.unit = unit
|
healthBar.unit = unit
|
||||||
self.frames[unit] = healthBar
|
self.frames[unit] = healthBar
|
||||||
button.healthBar = healthBar
|
button.healthBar = healthBar
|
||||||
self:ResetUnit(unit)
|
self:ResetUnit(unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_HEALTH", unit)
|
healthBar:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
||||||
healthBar:SetScript("OnEvent", Healthbar.OnEvent)
|
healthBar:SetScript("OnEvent", Healthbar.OnEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar.OnEvent(self, event, unit)
|
function Healthbar.OnEvent(self, event, unit)
|
||||||
local isDead = UnitExists(unit) and UnitIsDeadOrGhost(unit)
|
local isDead = UnitExists(unit) and UnitIsDeadOrGhost(unit) and not Gladdy:isFeignDeath(unit)
|
||||||
if event == "UNIT_HEALTH" then
|
if event == "UNIT_HEALTH_FREQUENT" or event == "UNIT_MAXHEALTH" 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
|
|
||||||
if isDead then
|
if isDead then
|
||||||
Gladdy:SendMessage("UNIT_DEATH", unit)
|
Gladdy:SendMessage("UNIT_DEATH", unit)
|
||||||
return
|
return
|
||||||
@ -115,64 +128,135 @@ function Healthbar.OnEvent(self, event, unit)
|
|||||||
local healthMax = UnitHealthMax(unit)
|
local healthMax = UnitHealthMax(unit)
|
||||||
self.hp:SetMinMaxValues(0, healthMax)
|
self.hp:SetMinMaxValues(0, healthMax)
|
||||||
self.hp:SetValue(health)
|
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
|
elseif event == "UNIT_NAME_UPDATE" then
|
||||||
local name = UnitName(unit)
|
local name = UnitName(unit)
|
||||||
Gladdy.buttons[unit].name = name
|
Gladdy.buttons[unit].name = name
|
||||||
if Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then
|
Healthbar:SetText(unit, self.hp.current, self.hp.max)
|
||||||
self.nameText:SetText(name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
if not Gladdy.buttons[unit].class then
|
if not Gladdy.buttons[unit].class then
|
||||||
Gladdy:SpotEnemy(unit, true)
|
Gladdy:SpotEnemy(unit, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar:SetHealthText(healthBar, health, healthMax)
|
local function getGradient(start, ending, percentage, factor)
|
||||||
local healthText
|
return start * abs(-2 * percentage + 1) + ending * factor
|
||||||
local healthPercentage = floor(health * 100 / healthMax)
|
end
|
||||||
|
|
||||||
if health == 0 and UnitExists(healthBar.unit) and UnitIsDeadOrGhost(healthBar.unit) then
|
local rMax, gMax, bMax, rMid, gMid, bMid, rMin, gMin, bMin, rNow, gNow, bNow, percentage, factor, stealthAlpha
|
||||||
self:UNIT_DEATH(healthBar.unit)
|
function Healthbar:SetHealthStatusBarColor(unit, health, healthMax)
|
||||||
|
local button = Gladdy.buttons[unit]
|
||||||
|
if not button or not health or not healthMax then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if (Gladdy.db.healthActual) then
|
local healthBar = Gladdy.buttons[unit].healthBar
|
||||||
healthText = healthMax > 999 and ("%.1fk"):format(health / 1000) or health
|
if not healthBar.hp.oorFactor then
|
||||||
|
healthBar.hp.oorFactor = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
if (Gladdy.db.healthMax) then
|
healthBar.hp:SetMinMaxValues(0, healthMax)
|
||||||
local text = healthMax > 999 and ("%.1fk"):format(healthMax / 1000) or healthMax
|
healthBar.hp:SetValue(health)
|
||||||
if (healthText) then
|
|
||||||
healthText = ("%s/%s"):format(healthText, text)
|
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
|
else
|
||||||
healthText = text
|
healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.healthBarStatusBarColorMax, healthBar.hp.oorFactor))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if button.class and Gladdy.db.healthBarClassColored then
|
||||||
if (Gladdy.db.healthPercentage) then
|
healthBar.hp:SetStatusBarColor(
|
||||||
if (healthText) then
|
RAID_CLASS_COLORS[button.class].r / healthBar.hp.oorFactor,
|
||||||
healthText = ("%s (%d%%)"):format(healthText, healthPercentage)
|
RAID_CLASS_COLORS[button.class].g / healthBar.hp.oorFactor,
|
||||||
else
|
RAID_CLASS_COLORS[button.class].b / healthBar.hp.oorFactor, 1)
|
||||||
healthText = ("%d%%"):format(healthPercentage)
|
|
||||||
end
|
|
||||||
end
|
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)
|
healthBar.healthText:SetText(healthText)
|
||||||
end
|
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)
|
function Healthbar:UpdateFrame(unit)
|
||||||
local healthBar = self.frames[unit]
|
local healthBar = self.frames[unit]
|
||||||
if (not healthBar) then
|
if (not healthBar) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
healthBar:SetFrameStrata(Gladdy.db.healthFrameStrata)
|
||||||
|
healthBar:SetFrameLevel(Gladdy.db.healthFrameLevel)
|
||||||
|
healthBar.hp:SetFrameStrata(Gladdy.db.healthFrameStrata)
|
||||||
|
healthBar.hp:SetFrameLevel(Gladdy.db.healthFrameLevel - 1)
|
||||||
|
|
||||||
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||||
healthBar.bg:SetVertexColor(Gladdy.db.healthBarBgColor.r, Gladdy.db.healthBarBgColor.g, Gladdy.db.healthBarBgColor.b, Gladdy.db.healthBarBgColor.a)
|
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.healthBarBgColor))
|
||||||
|
|
||||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.healthBarBorderSize })
|
edgeSize = Gladdy.db.healthBarBorderSize })
|
||||||
healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a)
|
healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.healthBarBorderColor))
|
||||||
healthBar:ClearAllPoints()
|
healthBar:ClearAllPoints()
|
||||||
healthBar:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPLEFT", 0, 0)
|
healthBar:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPLEFT", 0, 0)
|
||||||
healthBar:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit], "BOTTOMRIGHT")
|
healthBar:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit], "BOTTOMRIGHT")
|
||||||
@ -186,22 +270,26 @@ function Healthbar:UpdateFrame(unit)
|
|||||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||||
healthBar.healthText:Hide()
|
healthBar.healthText:Hide()
|
||||||
else
|
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()
|
healthBar.healthText:Show()
|
||||||
end
|
end
|
||||||
if (Gladdy.db.healthBarNameFontSize < 1) then
|
if (Gladdy.db.healthBarNameFontSize < 1) then
|
||||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||||
healthBar.nameText:Hide()
|
healthBar.nameText:Hide()
|
||||||
else
|
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")
|
||||||
if Gladdy.db.healthName then
|
if Gladdy.db.healthName or Gladdy.db.healthCustomTagsEnabled then
|
||||||
healthBar.nameText:Show()
|
healthBar.nameText:Show()
|
||||||
else
|
else
|
||||||
healthBar.nameText:Hide()
|
healthBar.nameText:Hide()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.healthBarFontColor))
|
||||||
healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
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
|
end
|
||||||
|
|
||||||
function Healthbar:ResetUnit(unit)
|
function Healthbar:ResetUnit(unit)
|
||||||
@ -214,6 +302,8 @@ function Healthbar:ResetUnit(unit)
|
|||||||
healthBar.nameText:SetText("")
|
healthBar.nameText:SetText("")
|
||||||
healthBar.healthText:SetText("")
|
healthBar.healthText:SetText("")
|
||||||
healthBar.hp:SetValue(0)
|
healthBar.hp:SetValue(0)
|
||||||
|
healthBar.hp.current = nil
|
||||||
|
healthBar.hp.max = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar:Test(unit)
|
function Healthbar:Test(unit)
|
||||||
@ -223,17 +313,30 @@ function Healthbar:Test(unit)
|
|||||||
return
|
return
|
||||||
end
|
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: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
|
end
|
||||||
|
|
||||||
function Healthbar:JOINED_ARENA()
|
function Healthbar:JOINED_ARENA()
|
||||||
if Gladdy.db.healthNameToArenaId and Gladdy.db.healthName then
|
for i=1,Gladdy.curBracket do
|
||||||
for i=1,Gladdy.curBracket do
|
local unit = "arena" .. i
|
||||||
local healthBar = self.frames["arena" .. i]
|
self:SetText(unit, self.frames[unit].hp.current, self.frames[unit].hp.max)
|
||||||
healthBar.nameText:SetText(i)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -249,53 +352,23 @@ function Healthbar:ENEMY_SPOTTED(unit)
|
|||||||
local healthMax = UnitHealthMax(unit)
|
local healthMax = UnitHealthMax(unit)
|
||||||
healthBar.hp:SetMinMaxValues(0, healthMax)
|
healthBar.hp:SetMinMaxValues(0, healthMax)
|
||||||
healthBar.hp:SetValue(health)
|
healthBar.hp:SetValue(health)
|
||||||
Healthbar:SetHealthText(healthBar, health, healthMax)
|
healthBar.hp.current = health
|
||||||
end
|
healthBar.hp.max = healthMax
|
||||||
if 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)
|
|
||||||
end
|
end
|
||||||
|
Healthbar:SetText(unit, healthBar.hp.current, healthBar.hp.max)
|
||||||
|
Healthbar:SetHealthStatusBarColor(unit, healthBar.hp.current, healthBar.hp.max)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar:UNIT_HEALTH(unit, health, healthMax)
|
function Healthbar:ENEMY_STEALTH(unit, stealth)
|
||||||
local healthBar = self.frames[unit]
|
local healthBar = self.frames[unit]
|
||||||
if (not healthBar) then
|
local button = Gladdy.buttons[unit]
|
||||||
|
if (not healthBar or not button) then
|
||||||
return
|
return
|
||||||
end
|
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)
|
healthBar.hp.stealth = stealth
|
||||||
local healthText
|
|
||||||
|
|
||||||
if (Gladdy.db.healthActual) then
|
Healthbar:SetHealthStatusBarColor(unit, healthBar.hp.current, healthBar.hp.max)
|
||||||
healthText = healthMax > 999 and ("%.1fk"):format(health / 1000) or health
|
|
||||||
end
|
|
||||||
|
|
||||||
if (Gladdy.db.healthMax) then
|
|
||||||
local text = healthMax > 999 and ("%.1fk"):format(healthMax / 1000) or healthMax
|
|
||||||
if (healthText) then
|
|
||||||
healthText = ("%s/%s"):format(healthText, text)
|
|
||||||
else
|
|
||||||
healthText = text
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (Gladdy.db.healthPercentage) then
|
|
||||||
if (healthText) then
|
|
||||||
healthText = ("%s (%d%%)"):format(healthText, healthPercentage)
|
|
||||||
else
|
|
||||||
healthText = ("%d%%"):format(healthPercentage)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
healthBar.healthText:SetText(healthText)
|
|
||||||
healthBar.hp:SetValue(healthPercentage)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar:UNIT_DEATH(unit)
|
function Healthbar:UNIT_DEATH(unit)
|
||||||
@ -305,7 +378,8 @@ function Healthbar:UNIT_DEATH(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
healthBar.hp:SetValue(0)
|
healthBar.hp:SetValue(0)
|
||||||
healthBar.healthText:SetText(L["DEAD"])
|
healthBar.hp.current = 0
|
||||||
|
Healthbar:SetText(unit, 0, 100, L["DEAD"])
|
||||||
end
|
end
|
||||||
|
|
||||||
function Healthbar:UNIT_DESTROYED(unit)
|
function Healthbar:UNIT_DESTROYED(unit)
|
||||||
@ -315,8 +389,8 @@ function Healthbar:UNIT_DESTROYED(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
healthBar.hp:SetValue(0)
|
healthBar.hp:SetValue(0)
|
||||||
healthBar.healthText:SetText(L["LEAVE"])
|
healthBar.hp.current = 0
|
||||||
healthBar.nameText:SetText("")
|
Healthbar:SetText(unit, 0, 100, L["LEAVE"])
|
||||||
end
|
end
|
||||||
|
|
||||||
local function option(params)
|
local function option(params)
|
||||||
@ -332,8 +406,10 @@ local function option(params)
|
|||||||
if Gladdy.db.healthBarBorderSize > Gladdy.db.healthBarHeight/2 then
|
if Gladdy.db.healthBarBorderSize > Gladdy.db.healthBarHeight/2 then
|
||||||
Gladdy.db.healthBarBorderSize = Gladdy.db.healthBarHeight/2
|
Gladdy.db.healthBarBorderSize = Gladdy.db.healthBarHeight/2
|
||||||
end
|
end
|
||||||
for i=1,Gladdy.curBracket do
|
if Gladdy.frame.testing then
|
||||||
Healthbar:Test("arena" .. i)
|
for i=1,Gladdy.curBracket do
|
||||||
|
Healthbar:Test("arena" .. i)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
Gladdy:UpdateFrame()
|
Gladdy:UpdateFrame()
|
||||||
end,
|
end,
|
||||||
@ -387,19 +463,76 @@ function Healthbar:GetOptions()
|
|||||||
dialogControl = "LSM30_Statusbar",
|
dialogControl = "LSM30_Statusbar",
|
||||||
values = AceGUIWidgetLSMlists.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({
|
healthBarBgColor = Gladdy:colorOption({
|
||||||
type = "color",
|
type = "color",
|
||||||
name = L["Background color"],
|
name = L["Background color"],
|
||||||
desc = L["Color of the status bar background"],
|
desc = L["Color of the status bar background"],
|
||||||
order = 5,
|
order = 4,
|
||||||
hasAlpha = true,
|
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 = {
|
font = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Font"],
|
name = L["Font"],
|
||||||
order = 2,
|
order = 3,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -421,11 +554,28 @@ function Healthbar:GetOptions()
|
|||||||
order = 12,
|
order = 12,
|
||||||
hasAlpha = true,
|
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({
|
healthBarNameFontSize = option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Name font size"],
|
name = L["Name font size"],
|
||||||
desc = L["Size of the name text"],
|
desc = L["Size of the name text"],
|
||||||
order = 13,
|
order = 21,
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 20,
|
max = 20,
|
||||||
@ -435,18 +585,59 @@ function Healthbar:GetOptions()
|
|||||||
type = "range",
|
type = "range",
|
||||||
name = L["Health font size"],
|
name = L["Health font size"],
|
||||||
desc = L["Size of the health text"],
|
desc = L["Size of the health text"],
|
||||||
order = 14,
|
order = 22,
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 20,
|
max = 20,
|
||||||
width = "full",
|
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 = {
|
border = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Border"],
|
name = L["Border"],
|
||||||
order = 3,
|
order = 4,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -479,10 +670,39 @@ function Healthbar:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 5,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
healthFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
healthFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 1,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
healthValues = {
|
healthValues = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Health Bar Text"],
|
name = L["Health Bar Text"],
|
||||||
order = 4,
|
order = 6,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -495,6 +715,7 @@ function Healthbar:GetOptions()
|
|||||||
desc = L["Show the units name"],
|
desc = L["Show the units name"],
|
||||||
order = 2,
|
order = 2,
|
||||||
width = "full",
|
width = "full",
|
||||||
|
disabled = function() return Gladdy.db.healthCustomTagsEnabled end,
|
||||||
}),
|
}),
|
||||||
healthNameToArenaId = option({
|
healthNameToArenaId = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
@ -502,21 +723,7 @@ function Healthbar:GetOptions()
|
|||||||
desc = L["Show 1-5 as name instead"],
|
desc = L["Show 1-5 as name instead"],
|
||||||
order = 3,
|
order = 3,
|
||||||
width = "full",
|
width = "full",
|
||||||
disabled = function() return not Gladdy.db.healthName end
|
disabled = function() return not Gladdy.db.healthName or Gladdy.db.healthCustomTagsEnabled end,
|
||||||
}),
|
|
||||||
healthActual = option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Show the actual health"],
|
|
||||||
desc = L["Show the actual health on the health bar"],
|
|
||||||
order = 4,
|
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
healthMax = option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Show max health"],
|
|
||||||
desc = L["Show max health on the health bar"],
|
|
||||||
order = 5,
|
|
||||||
width = "full",
|
|
||||||
}),
|
}),
|
||||||
healthPercentage = option({
|
healthPercentage = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
@ -524,7 +731,16 @@ function Healthbar:GetOptions()
|
|||||||
desc = L["Show health percentage on the health bar"],
|
desc = L["Show health percentage on the health bar"],
|
||||||
order = 6,
|
order = 6,
|
||||||
width = "full",
|
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),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -13,6 +13,8 @@ local Highlight = Gladdy:NewModule("Highlight", nil, {
|
|||||||
targetBorder = true,
|
targetBorder = true,
|
||||||
focusBorder = true,
|
focusBorder = true,
|
||||||
leaderBorder = true,
|
leaderBorder = true,
|
||||||
|
highlightFrameStrata = "MEDIUM",
|
||||||
|
highlightFrameLevel = 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
function Highlight:Initialize()
|
function Highlight:Initialize()
|
||||||
@ -56,17 +58,20 @@ function Highlight:CreateFrame(unit)
|
|||||||
|
|
||||||
local targetBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
local targetBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||||
--targetBorder:SetFrameStrata("MEDIUM")
|
targetBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
targetBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
targetBorder:Hide()
|
targetBorder:Hide()
|
||||||
|
|
||||||
local focusBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
local focusBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||||
--focusBorder:SetFrameStrata("MEDIUM")
|
focusBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
focusBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
focusBorder:Hide()
|
focusBorder:Hide()
|
||||||
|
|
||||||
local leaderBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
local leaderBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||||
--leaderBorder:SetFrameStrata("MEDIUM")
|
leaderBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
leaderBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
leaderBorder:Hide()
|
leaderBorder:Hide()
|
||||||
|
|
||||||
local highlight = healthBar:CreateTexture(nil, "OVERLAY")
|
local highlight = healthBar:CreateTexture(nil, "OVERLAY")
|
||||||
@ -96,6 +101,13 @@ function Highlight:UpdateFrame(unit)
|
|||||||
local width = Gladdy.db.barWidth + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
local width = Gladdy.db.barWidth + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
||||||
local height = hpAndPowerHeight + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
local height = hpAndPowerHeight + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
||||||
|
|
||||||
|
button.targetBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
button.targetBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
|
button.focusBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
button.focusBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
|
button.leaderBorder:SetFrameStrata(Gladdy.db.highlightFrameStrata)
|
||||||
|
button.leaderBorder:SetFrameLevel(Gladdy.db.highlightFrameLevel)
|
||||||
|
|
||||||
button.targetBorder:SetWidth(width)
|
button.targetBorder:SetWidth(width)
|
||||||
button.targetBorder:SetHeight(height)
|
button.targetBorder:SetHeight(height)
|
||||||
button.targetBorder:ClearAllPoints()
|
button.targetBorder:ClearAllPoints()
|
||||||
@ -107,7 +119,7 @@ function Highlight:UpdateFrame(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
button.targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
button.targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
||||||
button.targetBorder:SetBackdropBorderColor(Gladdy.db.targetBorderColor.r, Gladdy.db.targetBorderColor.g, Gladdy.db.targetBorderColor.b, Gladdy.db.targetBorderColor.a)
|
button.targetBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.targetBorderColor))
|
||||||
|
|
||||||
button.focusBorder:SetWidth(width)
|
button.focusBorder:SetWidth(width)
|
||||||
button.focusBorder:SetHeight(height)
|
button.focusBorder:SetHeight(height)
|
||||||
@ -120,7 +132,7 @@ function Highlight:UpdateFrame(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
button.focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
button.focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
||||||
button.focusBorder:SetBackdropBorderColor(Gladdy.db.focusBorderColor.r, Gladdy.db.focusBorderColor.g, Gladdy.db.focusBorderColor.b, Gladdy.db.focusBorderColor.a)
|
button.focusBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.focusBorderColor))
|
||||||
|
|
||||||
button.leaderBorder:SetWidth(width)
|
button.leaderBorder:SetWidth(width)
|
||||||
button.leaderBorder:SetHeight(height)
|
button.leaderBorder:SetHeight(height)
|
||||||
@ -133,7 +145,7 @@ function Highlight:UpdateFrame(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
button.leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
button.leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = borderSize })
|
||||||
button.leaderBorder:SetBackdropBorderColor(Gladdy.db.leaderBorderColor.r, Gladdy.db.leaderBorderColor.g, Gladdy.db.leaderBorderColor.b, Gladdy.db.leaderBorderColor.a)
|
button.leaderBorder:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.leaderBorderColor))
|
||||||
if Gladdy.frame.testing then
|
if Gladdy.frame.testing then
|
||||||
Highlight:Test(unit)
|
Highlight:Test(unit)
|
||||||
end
|
end
|
||||||
@ -207,67 +219,130 @@ function Highlight:GetOptions()
|
|||||||
desc = L["Show Highlight border inside of frame"],
|
desc = L["Show Highlight border inside of frame"],
|
||||||
order = 3,
|
order = 3,
|
||||||
}),
|
}),
|
||||||
highlightBorderSize = Gladdy:option({
|
group = {
|
||||||
type = "range",
|
type = "group",
|
||||||
name = L["Border size"],
|
childGroups = "tree",
|
||||||
desc = L["Border size"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 3,
|
||||||
min = 1,
|
args = {
|
||||||
max = 20,
|
enabled = {
|
||||||
step = 1,
|
type = "group",
|
||||||
width = "full",
|
name = L["Enabled"],
|
||||||
}),
|
order = 1,
|
||||||
highlightBorderStyle = Gladdy:option({
|
args = {
|
||||||
type = "select",
|
headerEnable = {
|
||||||
name = L["Border style"],
|
type = "header",
|
||||||
order = 5,
|
name = L["Enabled"],
|
||||||
dialogControl = "LSM30_Border",
|
order = 10,
|
||||||
values = AceGUIWidgetLSMlists.border,
|
},
|
||||||
}),
|
highlight = Gladdy:option({
|
||||||
headerColor = {
|
type = "toggle",
|
||||||
type = "header",
|
name = L["Highlight target"],
|
||||||
name = L["Colors"],
|
desc = L["Toggle if the selected target should be highlighted"],
|
||||||
order = 6,
|
order = 11,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
targetBorder = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Show border around target"],
|
||||||
|
desc = L["Toggle if a border should be shown around the selected target"],
|
||||||
|
order = 12,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
focusBorder = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Show border around focus"],
|
||||||
|
desc = L["Toggle of a border should be shown around the current focus"],
|
||||||
|
order = 13,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
border = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Border"],
|
||||||
|
order = 2,
|
||||||
|
args = {
|
||||||
|
headerHighlight = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Border"],
|
||||||
|
order = 2,
|
||||||
|
},
|
||||||
|
highlightBorderSize = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Border size"],
|
||||||
|
desc = L["Border size"],
|
||||||
|
order = 4,
|
||||||
|
min = 1,
|
||||||
|
max = 20,
|
||||||
|
step = 1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
highlightBorderStyle = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Border style"],
|
||||||
|
order = 5,
|
||||||
|
dialogControl = "LSM30_Border",
|
||||||
|
values = AceGUIWidgetLSMlists.border,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
color = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Color"],
|
||||||
|
order = 3,
|
||||||
|
args = {
|
||||||
|
headerColor = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Colors"],
|
||||||
|
order = 6,
|
||||||
|
},
|
||||||
|
targetBorderColor = Gladdy:colorOption({
|
||||||
|
type = "color",
|
||||||
|
name = L["Target border color"],
|
||||||
|
desc = L["Color of the selected targets border"],
|
||||||
|
order = 7,
|
||||||
|
hasAlpha = true,
|
||||||
|
}),
|
||||||
|
focusBorderColor = Gladdy:colorOption({
|
||||||
|
type = "color",
|
||||||
|
name = L["Focus border color"],
|
||||||
|
desc = L["Color of the focus border"],
|
||||||
|
order = 8,
|
||||||
|
hasAlpha = true,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 4,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
highlightFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
highlightFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 1,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
targetBorderColor = Gladdy:colorOption({
|
|
||||||
type = "color",
|
|
||||||
name = L["Target border color"],
|
|
||||||
desc = L["Color of the selected targets border"],
|
|
||||||
order = 7,
|
|
||||||
hasAlpha = true,
|
|
||||||
}),
|
|
||||||
focusBorderColor = Gladdy:colorOption({
|
|
||||||
type = "color",
|
|
||||||
name = L["Focus border color"],
|
|
||||||
desc = L["Color of the focus border"],
|
|
||||||
order = 8,
|
|
||||||
hasAlpha = true,
|
|
||||||
}),
|
|
||||||
headerEnable = {
|
|
||||||
type = "header",
|
|
||||||
name = L["Enabled"],
|
|
||||||
order = 10,
|
|
||||||
},
|
|
||||||
highlight = Gladdy:option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Highlight target"],
|
|
||||||
desc = L["Toggle if the selected target should be highlighted"],
|
|
||||||
order = 11,
|
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
targetBorder = Gladdy:option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Show border around target"],
|
|
||||||
desc = L["Toggle if a border should be shown around the selected target"],
|
|
||||||
order = 12,
|
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
focusBorder = Gladdy:option({
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Show border around focus"],
|
|
||||||
desc = L["Toggle of a border should be shown around the current focus"],
|
|
||||||
order = 13,
|
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
end
|
end
|
194
Modules/Pets.lua
194
Modules/Pets.lua
@ -1,6 +1,6 @@
|
|||||||
local string_gsub, floor, pairs = string.gsub, math.floor, pairs
|
local string_gsub, floor, pairs = string.gsub, math.floor, pairs
|
||||||
local CreateFrame, SetPortraitTexture = CreateFrame, SetPortraitTexture
|
local CreateFrame, SetPortraitTexture = CreateFrame, SetPortraitTexture
|
||||||
local UnitHealthMax, UnitHealth, UnitGUID = UnitHealthMax, UnitHealth, UnitGUID
|
local UnitHealthMax, UnitHealth, UnitGUID, UnitExists = UnitHealthMax, UnitHealth, UnitGUID, UnitExists
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
@ -23,21 +23,45 @@ local Pets = Gladdy:NewModule("Pets", nil, {
|
|||||||
petHealthPercentage = true,
|
petHealthPercentage = true,
|
||||||
petXOffset = 1,
|
petXOffset = 1,
|
||||||
petYOffset = -62,
|
petYOffset = -62,
|
||||||
|
petGroup = false,
|
||||||
|
petMargin = 1,
|
||||||
|
petFrameStrata = "MEDIUM",
|
||||||
|
petFrameLevel = 5,
|
||||||
})
|
})
|
||||||
|
|
||||||
function Pets:Initialize()
|
function Pets:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
if Gladdy.db.petEnabled then
|
||||||
self:RegisterMessage("PET_SPOTTED")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:RegisterMessage("PET_DESTROYED")
|
self:RegisterMessage("PET_SPOTTED")
|
||||||
self:RegisterMessage("PET_STEALTH")
|
self:RegisterMessage("PET_DESTROYED")
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
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")
|
||||||
|
self:RegisterMessage("UNIT_DEATH")
|
||||||
|
else
|
||||||
|
self:UnregisterAllMessages()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Pets:JOINED_ARENA()
|
function Pets:JOINED_ARENA()
|
||||||
for _,v in pairs(self.frames) do
|
for _,v in pairs(self.frames) do
|
||||||
v.healthBar:SetAlpha(0)
|
v.healthBar:SetAlpha(0)
|
||||||
end
|
end
|
||||||
|
for i=1,Gladdy.curBracket do
|
||||||
|
if UnitExists("arenapet" .. i) then
|
||||||
|
Gladdy:SendMessage("PET_SPOTTED", "arenapet" .. i)
|
||||||
|
end
|
||||||
|
end
|
||||||
if Gladdy.db.petEnabled then
|
if Gladdy.db.petEnabled then
|
||||||
self:RegisterEvent("UNIT_PET")
|
self:RegisterEvent("UNIT_PET")
|
||||||
self:SetScript("OnEvent", function(_, event, unitId)
|
self:SetScript("OnEvent", function(_, event, unitId)
|
||||||
@ -59,27 +83,34 @@ function Pets:ResetUnit(unitId)
|
|||||||
end
|
end
|
||||||
petFrame.healthBar:SetAlpha(0)
|
petFrame.healthBar:SetAlpha(0)
|
||||||
petFrame.healthBar:SetScript("OnUpdate", nil)
|
petFrame.healthBar:SetScript("OnUpdate", nil)
|
||||||
|
petFrame.healthBar.portrait:SetTexture(nil)
|
||||||
self:UnregisterEvent("UNIT_PET")
|
self:UnregisterEvent("UNIT_PET")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Pets:PET_SPOTTED(unit)
|
function Pets:PET_SPOTTED(unit)
|
||||||
|
Gladdy.guids[UnitGUID(unit)] = unit
|
||||||
if Gladdy.db.petEnabled then
|
if Gladdy.db.petEnabled then
|
||||||
self.frames[unit].healthBar:SetAlpha(1)
|
self.frames[unit].healthBar:SetAlpha(1)
|
||||||
self.frames[unit].healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a)
|
self.frames[unit].healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor))
|
||||||
self.frames[unit].healthBar:SetScript("OnUpdate", function(self)
|
self.frames[unit].healthBar:SetScript("OnUpdate", function(self)
|
||||||
self.hp:SetValue(UnitHealth(self.unit))
|
self.hp:SetValue(UnitHealth(self.unit))
|
||||||
Pets:SetHealthText(self, UnitHealth(unit), UnitHealthMax(unit))
|
Pets:SetHealthText(self, UnitHealth(unit), UnitHealthMax(unit))
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
Gladdy:Print(self.frames[unit].healthBar:GetAlpha())
|
||||||
end
|
end
|
||||||
|
|
||||||
function Pets:PET_DESTROYED(unit)
|
function Pets:PET_DESTROYED(unit)
|
||||||
if Gladdy.db.petEnabled then
|
if Gladdy.db.petEnabled and self.frames[unit] then
|
||||||
self.frames[unit].healthBar:SetAlpha(0)
|
self.frames[unit].healthBar:SetAlpha(0)
|
||||||
self.frames[unit].healthBar:SetScript("OnUpdate", nil)
|
self.frames[unit].healthBar:SetScript("OnUpdate", nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Pets:UNIT_DEATH(unit)
|
||||||
|
self:PET_DESTROYED(unit)
|
||||||
|
end
|
||||||
|
|
||||||
function Pets:PET_STEALTH(unit)
|
function Pets:PET_STEALTH(unit)
|
||||||
if Gladdy.db.petEnabled then
|
if Gladdy.db.petEnabled then
|
||||||
self.frames[unit].healthBar.hp:SetStatusBarColor(0.66, 0.66, 0.66, 1)
|
self.frames[unit].healthBar.hp:SetStatusBarColor(0.66, 0.66, 0.66, 1)
|
||||||
@ -103,6 +134,7 @@ function Pets:CheckUnitPet(unitId)
|
|||||||
petFrame.healthBar.hp:SetMinMaxValues(0, UnitHealthMax(unit))
|
petFrame.healthBar.hp:SetMinMaxValues(0, UnitHealthMax(unit))
|
||||||
petFrame.healthBar.hp:SetValue(UnitHealth(unit))
|
petFrame.healthBar.hp:SetValue(UnitHealth(unit))
|
||||||
Pets:SetHealthText(petFrame.healthBar, UnitHealth(unit), UnitHealthMax(unit))
|
Pets:SetHealthText(petFrame.healthBar, UnitHealth(unit), UnitHealthMax(unit))
|
||||||
|
SetPortraitTexture(petFrame.healthBar.portrait, unit)
|
||||||
petFrame.healthBar:SetScript("OnUpdate", function(self)
|
petFrame.healthBar:SetScript("OnUpdate", function(self)
|
||||||
self.hp:SetValue(UnitHealth(self.unit))
|
self.hp:SetValue(UnitHealth(self.unit))
|
||||||
Pets:SetHealthText(self, UnitHealth(unit), UnitHealthMax(unit))
|
Pets:SetHealthText(self, UnitHealth(unit), UnitHealthMax(unit))
|
||||||
@ -134,6 +166,7 @@ function Pets:CreateFrame(unitId)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
local button = CreateFrame("Frame", "GladdyButtonFramePet" .. unit, Gladdy.frame)
|
local button = CreateFrame("Frame", "GladdyButtonFramePet" .. unit, Gladdy.frame)
|
||||||
|
button:SetMovable(true)
|
||||||
--button:SetAlpha(0)
|
--button:SetAlpha(0)
|
||||||
button:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
button:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
|
||||||
@ -151,8 +184,9 @@ function Pets:CreateFrame(unitId)
|
|||||||
local healthBar = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
local healthBar = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
||||||
healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor))
|
||||||
healthBar:SetFrameLevel(1)
|
healthBar:SetFrameStrata(Gladdy.db.petFrameStrata)
|
||||||
|
healthBar:SetFrameLevel(Gladdy.db.petFrameLevel)
|
||||||
healthBar:SetAllPoints(button)
|
healthBar:SetAllPoints(button)
|
||||||
healthBar:SetAlpha(0)
|
healthBar:SetAlpha(0)
|
||||||
|
|
||||||
@ -163,14 +197,15 @@ function Pets:CreateFrame(unitId)
|
|||||||
healthBar.portrait.border = healthBar:CreateTexture(nil, "OVERLAY")
|
healthBar.portrait.border = healthBar:CreateTexture(nil, "OVERLAY")
|
||||||
healthBar.portrait.border:SetAllPoints(healthBar.portrait)
|
healthBar.portrait.border:SetAllPoints(healthBar.portrait)
|
||||||
healthBar.portrait.border:SetTexture(Gladdy.db.classIconBorderStyle)
|
healthBar.portrait.border:SetTexture(Gladdy.db.classIconBorderStyle)
|
||||||
healthBar.portrait.border:SetVertexColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
healthBar.portrait.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor))
|
||||||
|
|
||||||
|
|
||||||
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
||||||
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
||||||
healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a)
|
healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor))
|
||||||
healthBar.hp:SetMinMaxValues(0, 100)
|
healthBar.hp:SetMinMaxValues(0, 100)
|
||||||
healthBar.hp:SetFrameLevel(0)
|
healthBar.hp:SetFrameStrata(Gladdy.db.petFrameStrata)
|
||||||
|
healthBar.hp:SetFrameLevel(Gladdy.db.petFrameLevel - 1)
|
||||||
healthBar.hp:SetAllPoints(healthBar)
|
healthBar.hp:SetAllPoints(healthBar)
|
||||||
|
|
||||||
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
||||||
@ -178,9 +213,9 @@ function Pets:CreateFrame(unitId)
|
|||||||
healthBar.bg:ClearAllPoints()
|
healthBar.bg:ClearAllPoints()
|
||||||
healthBar.bg:SetAllPoints(healthBar.hp)
|
healthBar.bg:SetAllPoints(healthBar.hp)
|
||||||
healthBar.bg:SetAlpha(1)
|
healthBar.bg:SetAlpha(1)
|
||||||
healthBar.bg:SetVertexColor(Gladdy.db.petHealthBarBgColor.r, Gladdy.db.petHealthBarBgColor.g, Gladdy.db.petHealthBarBgColor.b, Gladdy.db.petHealthBarBgColor.a)
|
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBgColor))
|
||||||
|
|
||||||
healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall")
|
healthBar.nameText = healthBar:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||||
if (Gladdy.db.petHealthBarFontSize < 1) then
|
if (Gladdy.db.petHealthBarFontSize < 1) then
|
||||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||||
healthBar.nameText:Hide()
|
healthBar.nameText:Hide()
|
||||||
@ -188,13 +223,13 @@ function Pets:CreateFrame(unitId)
|
|||||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||||
healthBar.nameText:Show()
|
healthBar.nameText:Show()
|
||||||
end
|
end
|
||||||
healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor))
|
||||||
healthBar.nameText:SetShadowOffset(1, -1)
|
healthBar.nameText:SetShadowOffset(1, -1)
|
||||||
healthBar.nameText:SetShadowColor(0, 0, 0, 1)
|
healthBar.nameText:SetShadowColor(0, 0, 0, 1)
|
||||||
healthBar.nameText:SetJustifyH("CENTER")
|
healthBar.nameText:SetJustifyH("CENTER")
|
||||||
healthBar.nameText:SetPoint("LEFT", 5, 0)
|
healthBar.nameText:SetPoint("LEFT", 5, 0)
|
||||||
|
|
||||||
healthBar.healthText = healthBar:CreateFontString(nil, "LOW")
|
healthBar.healthText = healthBar:CreateFontString(nil, "OVERLAY")
|
||||||
if (Gladdy.db.petHealthBarFontSize < 1) then
|
if (Gladdy.db.petHealthBarFontSize < 1) then
|
||||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||||
healthBar.healthText:Hide()
|
healthBar.healthText:Hide()
|
||||||
@ -202,7 +237,7 @@ function Pets:CreateFrame(unitId)
|
|||||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||||
healthBar.healthText:Hide()
|
healthBar.healthText:Hide()
|
||||||
end
|
end
|
||||||
healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor))
|
||||||
healthBar.healthText:SetShadowOffset(1, -1)
|
healthBar.healthText:SetShadowOffset(1, -1)
|
||||||
healthBar.healthText:SetShadowColor(0, 0, 0, 1)
|
healthBar.healthText:SetShadowColor(0, 0, 0, 1)
|
||||||
healthBar.healthText:SetJustifyH("CENTER")
|
healthBar.healthText:SetJustifyH("CENTER")
|
||||||
@ -211,7 +246,7 @@ function Pets:CreateFrame(unitId)
|
|||||||
healthBar.unit = unit
|
healthBar.unit = unit
|
||||||
button.healthBar = healthBar
|
button.healthBar = healthBar
|
||||||
|
|
||||||
healthBar:RegisterUnitEvent("UNIT_HEALTH", unit)
|
healthBar:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
healthBar:RegisterUnitEvent("UNIT_MAXHEALTH", unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_PORTRAIT_UPDATE", unit)
|
healthBar:RegisterUnitEvent("UNIT_PORTRAIT_UPDATE", unit)
|
||||||
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
healthBar:RegisterUnitEvent("UNIT_NAME_UPDATE", unit)
|
||||||
@ -241,6 +276,11 @@ function Pets:UpdateFrame(unitId)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
healthBar:SetFrameStrata(Gladdy.db.petFrameStrata)
|
||||||
|
healthBar:SetFrameLevel(Gladdy.db.petFrameLevel)
|
||||||
|
healthBar.hp:SetFrameStrata(Gladdy.db.petFrameStrata)
|
||||||
|
healthBar.hp:SetFrameLevel(Gladdy.db.petFrameLevel - 1)
|
||||||
|
|
||||||
if not Gladdy.db.petEnabled then
|
if not Gladdy.db.petEnabled then
|
||||||
self.frames[unit]:Hide()
|
self.frames[unit]:Hide()
|
||||||
else
|
else
|
||||||
@ -249,7 +289,22 @@ function Pets:UpdateFrame(unitId)
|
|||||||
|
|
||||||
self.frames[unit]:SetWidth(Gladdy.db.petWidth)
|
self.frames[unit]:SetWidth(Gladdy.db.petWidth)
|
||||||
self.frames[unit]:SetHeight(Gladdy.db.petHeight)
|
self.frames[unit]:SetHeight(Gladdy.db.petHeight)
|
||||||
self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
|
||||||
|
Gladdy:SetPosition(self.frames[unit], unitId, "petXOffset", "petYOffset", Pets:LegacySetPosition(unit, unitId), Pets)
|
||||||
|
|
||||||
|
if (Gladdy.db.petGroup) then
|
||||||
|
if (unit == "arenapet1") then
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
else
|
||||||
|
local previousPet = "arenapet" .. string_gsub(unit, "arenapet", "") - 1
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousPet], "BOTTOMLEFT", 0, - Gladdy.db.petMargin)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("TOPLEFT", Gladdy.buttons[unitId].healthBar, "TOPLEFT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
end
|
||||||
|
|
||||||
healthBar.portrait:SetHeight(Gladdy.db.petHeight)
|
healthBar.portrait:SetHeight(Gladdy.db.petHeight)
|
||||||
healthBar.portrait:SetWidth(Gladdy.db.petHeight)
|
healthBar.portrait:SetWidth(Gladdy.db.petHeight)
|
||||||
@ -261,17 +316,17 @@ function Pets:UpdateFrame(unitId)
|
|||||||
healthBar.portrait.border:Show()
|
healthBar.portrait.border:Show()
|
||||||
end
|
end
|
||||||
healthBar.portrait.border:SetTexture(Gladdy.db.petPortraitBorderStyle)
|
healthBar.portrait.border:SetTexture(Gladdy.db.petPortraitBorderStyle)
|
||||||
healthBar.portrait.border:SetVertexColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
healthBar.portrait.border:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor))
|
||||||
|
|
||||||
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
||||||
healthBar.bg:SetVertexColor(Gladdy.db.petHealthBarBgColor.r, Gladdy.db.petHealthBarBgColor.g, Gladdy.db.petHealthBarBgColor.b, Gladdy.db.petHealthBarBgColor.a)
|
healthBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.petHealthBarBgColor))
|
||||||
|
|
||||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
||||||
healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
healthBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.petHealthBarBorderColor))
|
||||||
|
|
||||||
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
||||||
healthBar.hp:SetStatusBarColor(Gladdy.db.petHealthBarColor.r, Gladdy.db.petHealthBarColor.g, Gladdy.db.petHealthBarColor.b, Gladdy.db.petHealthBarColor.a)
|
healthBar.hp:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.petHealthBarColor))
|
||||||
healthBar.hp:ClearAllPoints()
|
healthBar.hp:ClearAllPoints()
|
||||||
healthBar.hp:SetPoint("TOPLEFT", healthBar, "TOPLEFT", (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
healthBar.hp:SetPoint("TOPLEFT", healthBar, "TOPLEFT", (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||||
healthBar.hp:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
healthBar.hp:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", -(Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.petHealthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||||
@ -287,8 +342,11 @@ function Pets:UpdateFrame(unitId)
|
|||||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||||
healthBar.healthText:Show()
|
healthBar.healthText:Show()
|
||||||
end
|
end
|
||||||
healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
healthBar.nameText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor))
|
||||||
healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
healthBar.healthText:SetTextColor(Gladdy:SetColor(Gladdy.db.petHealthBarFontColor))
|
||||||
|
if (unit == "arenapet1") then
|
||||||
|
Gladdy:CreateMover(self.frames[unit], "petXOffset", "petYOffset", L["Pets"], {"TOPLEFT", "TOPLEFT"})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Pets:SetHealthText(healthBar, health, healthMax)
|
function Pets:SetHealthText(healthBar, health, healthMax)
|
||||||
@ -301,7 +359,7 @@ function Pets:SetHealthText(healthBar, health, healthMax)
|
|||||||
healthText = ("%d%%"):format(healthPercentage)
|
healthText = ("%d%%"):format(healthPercentage)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
healthText = "DEAD"
|
healthText = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
healthBar.healthText:SetText(healthText)
|
healthBar.healthText:SetText(healthText)
|
||||||
@ -344,11 +402,17 @@ function Pets:GetOptions()
|
|||||||
desc = L["Enables Pets module"],
|
desc = L["Enables Pets module"],
|
||||||
order = 3,
|
order = 3,
|
||||||
}),
|
}),
|
||||||
|
petGroup = option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Group Pets"],
|
||||||
|
order = 4,
|
||||||
|
}),
|
||||||
group = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 3,
|
order = 3,
|
||||||
|
disabled = function() return not Gladdy.db.petEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -380,11 +444,23 @@ function Pets:GetOptions()
|
|||||||
step = 1,
|
step = 1,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
|
petMargin = option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Margin"],
|
||||||
|
desc = L["Height of the bar"],
|
||||||
|
order = 6,
|
||||||
|
disabled = function()
|
||||||
|
return not Gladdy.db.petGroup
|
||||||
|
end,
|
||||||
|
min = 0,
|
||||||
|
max = 50,
|
||||||
|
step = .1,
|
||||||
|
}),
|
||||||
petHealthBarTexture = option({
|
petHealthBarTexture = option({
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Bar texture"],
|
name = L["Bar texture"],
|
||||||
desc = L["Texture of the bar"],
|
desc = L["Texture of the bar"],
|
||||||
order = 5,
|
order = 7,
|
||||||
dialogControl = "LSM30_Statusbar",
|
dialogControl = "LSM30_Statusbar",
|
||||||
values = AceGUIWidgetLSMlists.statusbar,
|
values = AceGUIWidgetLSMlists.statusbar,
|
||||||
}),
|
}),
|
||||||
@ -392,14 +468,14 @@ function Pets:GetOptions()
|
|||||||
type = "color",
|
type = "color",
|
||||||
name = L["Health color"],
|
name = L["Health color"],
|
||||||
desc = L["Color of the status bar"],
|
desc = L["Color of the status bar"],
|
||||||
order = 6,
|
order = 8,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
petHealthBarBgColor = Gladdy:colorOption({
|
petHealthBarBgColor = Gladdy:colorOption({
|
||||||
type = "color",
|
type = "color",
|
||||||
name = L["Background color"],
|
name = L["Background color"],
|
||||||
desc = L["Color of the status bar background"],
|
desc = L["Color of the status bar background"],
|
||||||
order = 7,
|
order = 9,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -530,10 +606,39 @@ function Pets:GetOptions()
|
|||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
petFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
petFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 1,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
healthValues = {
|
healthValues = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Health Values"],
|
name = L["Health Values"],
|
||||||
order = 6,
|
order = 7,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -552,3 +657,30 @@ function Pets:GetOptions()
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Pets:LegacySetPosition(unit, unitId)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
if (Gladdy.db.petGroup) then
|
||||||
|
if (unit == "arenapet1") then
|
||||||
|
self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
else
|
||||||
|
local previousPet = "arenapet" .. string_gsub(unit, "arenapet", "") - 1
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("TOPLEFT", self.frames[previousPet], "BOTTOMLEFT", 0, - Gladdy.db.petMargin)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.frames[unit]:ClearAllPoints()
|
||||||
|
self.frames[unit]:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
@ -16,21 +16,46 @@ local Powerbar = Gladdy:NewModule("Power Bar", 90, {
|
|||||||
powerBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
powerBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
powerBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
powerBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||||
powerBarBgColor = { r = 0.3, g = 0.3, b = 0.3, a = 0.7 },
|
powerBarBgColor = { r = 0.3, g = 0.3, b = 0.3, a = 0.7 },
|
||||||
powerBarFontSize = 10,
|
powerBarRaceFontSize = 10,
|
||||||
|
powerBarPowerFontSize = 10,
|
||||||
powerShowSpec = true,
|
powerShowSpec = true,
|
||||||
powerShowRace = true,
|
powerShowRace = true,
|
||||||
powerActual = true,
|
powerActual = true,
|
||||||
powerMax = true,
|
powerMax = true,
|
||||||
powerPercentage = false,
|
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()
|
function Powerbar:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
|
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
if Gladdy.db.powerBarEnabled then
|
||||||
self:RegisterMessage("UNIT_SPEC")
|
self:RegisterMessage("ENEMY_SPOTTED")
|
||||||
self:RegisterMessage("UNIT_DEATH")
|
self:RegisterMessage("UNIT_SPEC")
|
||||||
self:RegisterMessage("UNIT_DESTROYED")
|
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
|
end
|
||||||
|
|
||||||
function Powerbar:CreateFrame(unit)
|
function Powerbar:CreateFrame(unit)
|
||||||
@ -40,79 +65,154 @@ function Powerbar:CreateFrame(unit)
|
|||||||
powerBar:EnableMouse(false)
|
powerBar:EnableMouse(false)
|
||||||
powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"),
|
powerBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "powerBarBorderStyle"),
|
||||||
edgeSize = Gladdy.db.powerBarBorderSize })
|
edgeSize = Gladdy.db.powerBarBorderSize })
|
||||||
powerBar:SetBackdropBorderColor(Gladdy.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a)
|
powerBar:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.powerBarBorderColor))
|
||||||
powerBar:SetFrameLevel(1)
|
powerBar:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||||
|
powerBar:SetFrameLevel(Gladdy.db.powerFrameLevel)
|
||||||
|
|
||||||
powerBar.energy = CreateFrame("StatusBar", nil, powerBar)
|
powerBar.energy = CreateFrame("StatusBar", nil, powerBar)
|
||||||
powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||||
powerBar.energy:SetMinMaxValues(0, 100)
|
powerBar.energy:SetMinMaxValues(0, 100)
|
||||||
powerBar.energy:SetFrameLevel(0)
|
powerBar.energy:SetFrameStrata(Gladdy.db.powerFrameStrata)
|
||||||
|
powerBar.energy:SetFrameLevel(Gladdy.db.powerFrameLevel - 1)
|
||||||
|
|
||||||
powerBar.bg = powerBar.energy:CreateTexture(nil, "BACKGROUND")
|
powerBar.bg = powerBar.energy:CreateTexture(nil, "BACKGROUND")
|
||||||
powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||||
powerBar.bg:ClearAllPoints()
|
powerBar.bg:ClearAllPoints()
|
||||||
powerBar.bg:SetAllPoints(powerBar.energy)
|
powerBar.bg:SetAllPoints(powerBar.energy)
|
||||||
powerBar.bg:SetVertexColor(Gladdy.db.powerBarBgColor.r, Gladdy.db.powerBarBgColor.g, Gladdy.db.powerBarBgColor.b, Gladdy.db.powerBarBgColor.a)
|
powerBar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.powerBarBgColor))
|
||||||
|
|
||||||
powerBar.raceText = powerBar:CreateFontString(nil, "LOW")
|
powerBar.raceText = powerBar:CreateFontString(nil, "OVERLAY")
|
||||||
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.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
powerBar.raceText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||||
powerBar.raceText:SetShadowOffset(1, -1)
|
powerBar.raceText:SetShadowOffset(1, -1)
|
||||||
powerBar.raceText:SetShadowColor(0, 0, 0, 1)
|
powerBar.raceText:SetShadowColor(0, 0, 0, 1)
|
||||||
powerBar.raceText:SetJustifyH("CENTER")
|
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 = powerBar:CreateFontString(nil, "OVERLAY")
|
||||||
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.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
powerBar.powerText:SetTextColor(Gladdy:SetColor(Gladdy.db.powerBarFontColor))
|
||||||
powerBar.powerText:SetShadowOffset(1, -1)
|
powerBar.powerText:SetShadowOffset(1, -1)
|
||||||
powerBar.powerText:SetShadowColor(0, 0, 0, 1)
|
powerBar.powerText:SetShadowColor(0, 0, 0, 1)
|
||||||
powerBar.powerText:SetJustifyH("CENTER")
|
powerBar.powerText:SetJustifyH("CENTER")
|
||||||
powerBar.powerText:SetPoint("RIGHT", -5, 1)
|
powerBar.powerText:SetPoint("RIGHT", Gladdy.db.powerTextRightHOffset, Gladdy.db.powerTextRightVOffset)
|
||||||
|
|
||||||
button.powerBar = powerBar
|
button.powerBar = powerBar
|
||||||
self.frames[unit] = powerBar
|
self.frames[unit] = powerBar
|
||||||
self:ResetUnit(unit)
|
self:ResetUnit(unit)
|
||||||
|
powerBar.unit = unit
|
||||||
powerBar:RegisterUnitEvent("UNIT_POWER_UPDATE", unit)
|
powerBar:RegisterUnitEvent("UNIT_POWER_UPDATE", unit)
|
||||||
powerBar:RegisterUnitEvent("UNIT_MAXPOWER", unit)
|
powerBar:RegisterUnitEvent("UNIT_MAXPOWER", unit)
|
||||||
powerBar:RegisterUnitEvent("UNIT_DISPLAYPOWER", unit)
|
powerBar:RegisterUnitEvent("UNIT_DISPLAYPOWER", unit)
|
||||||
powerBar:SetScript("OnEvent", Powerbar.OnEvent)
|
powerBar:SetScript("OnEvent", Powerbar.OnEvent)
|
||||||
end
|
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)
|
function Powerbar.OnEvent(powerBar, event, unit)
|
||||||
if event == "UNIT_POWER_UPDATE" then
|
powerBar.energy.powerType = select(1, UnitPowerType(unit))
|
||||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
powerBar.energy.current, powerBar.energy.max = UnitPower(unit, powerBar.energy.powerType, true), UnitPowerMax(unit, powerBar.energy.powerType, true)
|
||||||
elseif event == "UNIT_MAXPOWER" then
|
Powerbar:SetPower(powerBar, unit, powerBar.energy.current, powerBar.energy.max, powerBar.energy.powerType)
|
||||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
end
|
||||||
elseif event == "UNIT_DISPLAYPOWER" then
|
|
||||||
Powerbar:SetPower(powerBar, UnitPower(unit, UnitPowerType(unit), true), UnitPowerMax(unit, UnitPowerType(unit), true), UnitPowerType(unit))
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
function Powerbar:SetPower(powerBar, power, powerMax, powerType)
|
function Powerbar:SetPower(powerBar, unit, power, powerMax, powerType, status)
|
||||||
local powerPercentage = floor(power * 100 / powerMax)
|
Powerbar:SetText(unit, power, powerMax, status)
|
||||||
local powerText
|
powerBar.energy.current = power
|
||||||
|
powerBar.energy.max = powerMax
|
||||||
if (Gladdy.db.powerActual) then
|
powerBar.energy.powerType = powerType
|
||||||
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 and powerBar.powerType ~= powerType) then
|
if (powerType == 1 and powerBar.powerType ~= powerType) then
|
||||||
powerBar.energy:SetStatusBarColor(1, 0, 0, 1)
|
powerBar.energy:SetStatusBarColor(1, 0, 0, 1)
|
||||||
@ -128,51 +228,11 @@ function Powerbar:SetPower(powerBar, power, powerMax, powerType)
|
|||||||
powerBar.powerType = powerType
|
powerBar.powerType = powerType
|
||||||
end
|
end
|
||||||
|
|
||||||
powerBar.powerText:SetText(powerText)
|
|
||||||
powerBar.energy:SetMinMaxValues(0, powerMax)
|
powerBar.energy:SetMinMaxValues(0, powerMax)
|
||||||
powerBar.energy:SetValue(power)
|
powerBar.energy:SetValue(power)
|
||||||
|
|
||||||
end
|
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.db.powerBarBgColor.r, Gladdy.db.powerBarBgColor.g, Gladdy.db.powerBarBgColor.b, Gladdy.db.powerBarBgColor.a)
|
|
||||||
|
|
||||||
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.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a)
|
|
||||||
|
|
||||||
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.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
|
||||||
powerBar.powerText:SetFont(Gladdy:SMFetch("font", "powerBarFont"), Gladdy.db.powerBarFontSize)
|
|
||||||
powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Powerbar:ResetUnit(unit)
|
function Powerbar:ResetUnit(unit)
|
||||||
local powerBar = self.frames[unit]
|
local powerBar = self.frames[unit]
|
||||||
if (not powerBar) then
|
if (not powerBar) then
|
||||||
@ -194,8 +254,14 @@ function Powerbar:Test(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
powerBar.energy.current = button.power
|
||||||
|
powerBar.energy.max = button.powerMax
|
||||||
|
powerBar.energy.powerType = button.powerType
|
||||||
self:ENEMY_SPOTTED(unit)
|
self:ENEMY_SPOTTED(unit)
|
||||||
self:UNIT_POWER(unit, button.power, button.powerMax, button.powerType)
|
self:UNIT_POWER(unit, button.power, button.powerMax, button.powerType)
|
||||||
|
if unit == "arena1" then
|
||||||
|
self:UNIT_DEATH(unit)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Powerbar:ENEMY_SPOTTED(unit)
|
function Powerbar:ENEMY_SPOTTED(unit)
|
||||||
@ -205,15 +271,10 @@ function Powerbar:ENEMY_SPOTTED(unit)
|
|||||||
return
|
return
|
||||||
end
|
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
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -223,13 +284,10 @@ function Powerbar:UNIT_SPEC(unit, spec)
|
|||||||
if (not powerBar or not button) then
|
if (not powerBar or not button) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local raceText = Gladdy.db.powerShowRace and button.raceLoc or ""
|
|
||||||
|
|
||||||
if (button.spec and Gladdy.db.powerShowSpec) then
|
if UnitExists(unit) then
|
||||||
raceText = spec .. " " .. raceText
|
Powerbar:SetPower(powerBar, unit, powerBar.energy.current, powerBar.energy.max, powerBar.energy.powerType)
|
||||||
end
|
end
|
||||||
|
|
||||||
powerBar.raceText:SetText(raceText)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
||||||
@ -241,44 +299,7 @@ function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
|||||||
if not Gladdy.buttons[unit].class then
|
if not Gladdy.buttons[unit].class then
|
||||||
Gladdy:SpotEnemy(unit, true)
|
Gladdy:SpotEnemy(unit, true)
|
||||||
end
|
end
|
||||||
|
Powerbar:SetPower(powerBar, unit, 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
|
|
||||||
|
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Powerbar:UNIT_DEATH(unit)
|
function Powerbar:UNIT_DEATH(unit)
|
||||||
@ -286,9 +307,7 @@ function Powerbar:UNIT_DEATH(unit)
|
|||||||
if (not powerBar) then
|
if (not powerBar) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
Powerbar:SetPower(powerBar, unit, 0, powerBar.energy.max, powerBar.energy.powerType, L["DEAD"])
|
||||||
powerBar.energy:SetValue(0)
|
|
||||||
powerBar.powerText:SetText("0%")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Powerbar:UNIT_DESTROYED(unit)
|
function Powerbar:UNIT_DESTROYED(unit)
|
||||||
@ -296,8 +315,7 @@ function Powerbar:UNIT_DESTROYED(unit)
|
|||||||
if (not powerBar) then
|
if (not powerBar) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
powerBar.energy:SetValue(0)
|
Powerbar:SetPower(powerBar, unit, 0, powerBar.energy.max, powerBar.energy.powerType, L["LEAVE"])
|
||||||
powerBar.powerText:SetText("0%")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function option(params)
|
local function option(params)
|
||||||
@ -313,8 +331,10 @@ local function option(params)
|
|||||||
if Gladdy.db.powerBarBorderSize > Gladdy.db.powerBarHeight/2 then
|
if Gladdy.db.powerBarBorderSize > Gladdy.db.powerBarHeight/2 then
|
||||||
Gladdy.db.powerBarBorderSize = Gladdy.db.powerBarHeight/2
|
Gladdy.db.powerBarBorderSize = Gladdy.db.powerBarHeight/2
|
||||||
end
|
end
|
||||||
for i=1,Gladdy.curBracket do
|
if Gladdy.frame.testing then
|
||||||
Powerbar:Test("arena" .. i)
|
for i=1,Gladdy.curBracket do
|
||||||
|
Powerbar:Test("arena" .. i)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
Gladdy:UpdateFrame()
|
Gladdy:UpdateFrame()
|
||||||
end,
|
end,
|
||||||
@ -344,6 +364,7 @@ function Powerbar:GetOptions()
|
|||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 4,
|
||||||
|
disabled = function() return not Gladdy.db.powerBarEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -407,16 +428,84 @@ function Powerbar:GetOptions()
|
|||||||
order = 12,
|
order = 12,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
}),
|
}),
|
||||||
powerBarFontSize = option({
|
powerTextLeftOutline = option({
|
||||||
type = "range",
|
type = "toggle",
|
||||||
name = L["Font size"],
|
name = L["Left Font Outline"],
|
||||||
desc = L["Size of the text"],
|
|
||||||
order = 13,
|
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,
|
step = 0.1,
|
||||||
min = 1,
|
min = 0,
|
||||||
max = 20,
|
max = 20,
|
||||||
width = "full",
|
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 = {
|
border = {
|
||||||
@ -455,10 +544,39 @@ function Powerbar:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 4,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
powerFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
powerFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 1,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
powerValues = {
|
powerValues = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Power Bar Text"],
|
name = L["Power Bar Text"],
|
||||||
order = 4,
|
order = 5,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
@ -470,31 +588,44 @@ function Powerbar:GetOptions()
|
|||||||
name = L["Show race"],
|
name = L["Show race"],
|
||||||
desc = L["Show race"],
|
desc = L["Show race"],
|
||||||
order = 2,
|
order = 2,
|
||||||
|
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||||
}),
|
}),
|
||||||
powerShowSpec= option({
|
powerShowSpec= option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show spec"],
|
name = L["Show spec"],
|
||||||
desc = L["Show spec"],
|
desc = L["Show spec"],
|
||||||
order = 3,
|
order = 3,
|
||||||
|
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||||
}),
|
}),
|
||||||
powerActual = option({
|
powerActual = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show the actual power"],
|
name = L["Show the actual power"],
|
||||||
desc = L["Show the actual power on the power bar"],
|
desc = L["Show the actual power on the power bar"],
|
||||||
order = 31,
|
order = 4,
|
||||||
|
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||||
}),
|
}),
|
||||||
powerMax = option({
|
powerMax = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show max power"],
|
name = L["Show max power"],
|
||||||
desc = L["Show max power on the power bar"],
|
desc = L["Show max power on the power bar"],
|
||||||
order = 32,
|
order = 5,
|
||||||
|
disabled = function() return Gladdy.db.powerCustomTagsEnabled end,
|
||||||
}),
|
}),
|
||||||
powerPercentage = option({
|
powerPercentage = option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show power percentage"],
|
name = L["Show power percentage"],
|
||||||
desc = L["Show power percentage on the power bar"],
|
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),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
local ceil = ceil
|
local ceil, str_gsub = ceil, string.gsub
|
||||||
|
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
local GetTime = GetTime
|
local GetTime = GetTime
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local Racial = Gladdy:NewModule("Racial", nil, {
|
local Racial = Gladdy:NewModule("Racial", 79, {
|
||||||
racialFont = "DorisPP",
|
racialFont = "DorisPP",
|
||||||
racialFontScale = 1,
|
racialFontScale = 1,
|
||||||
racialEnabled = true,
|
racialEnabled = true,
|
||||||
racialSize = 60 + 20 + 1,
|
racialSize = 60 + 20 + 1,
|
||||||
racialWidthFactor = 0.9,
|
racialWidthFactor = 0.9,
|
||||||
racialAnchor = "trinket",
|
racialIconZoomed = false,
|
||||||
racialPos = "RIGHT",
|
|
||||||
racialXOffset = 0,
|
racialXOffset = 0,
|
||||||
racialYOffset = 0,
|
racialYOffset = 0,
|
||||||
racialBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
racialBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||||
@ -20,16 +19,37 @@ local Racial = Gladdy:NewModule("Racial", nil, {
|
|||||||
racialDisableCircle = false,
|
racialDisableCircle = false,
|
||||||
racialCooldownAlpha = 1,
|
racialCooldownAlpha = 1,
|
||||||
racialCooldownNumberAlpha = 1,
|
racialCooldownNumberAlpha = 1,
|
||||||
|
racialFrameStrata = "MEDIUM",
|
||||||
|
racialFrameLevel = 5,
|
||||||
|
racialGroup = false,
|
||||||
|
racialGroupDirection = "DOWN",
|
||||||
})
|
})
|
||||||
|
|
||||||
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
|
|
||||||
|
|
||||||
function Racial:Initialize()
|
function Racial:Initialize()
|
||||||
self.frames = {}
|
self.frames = {}
|
||||||
|
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
if Gladdy.db.racialEnabled then
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:RegisterMessage("RACIAL_USED")
|
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
|
end
|
||||||
|
|
||||||
local function iconTimer(self,elapsed)
|
local function iconTimer(self,elapsed)
|
||||||
@ -66,19 +86,27 @@ end
|
|||||||
function Racial:CreateFrame(unit)
|
function Racial:CreateFrame(unit)
|
||||||
local racial = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit])
|
local racial = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit])
|
||||||
racial:EnableMouse(false)
|
racial:EnableMouse(false)
|
||||||
|
racial:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial:SetFrameLevel(Gladdy.db.racialFrameLevel)
|
||||||
|
|
||||||
racial.texture = racial:CreateTexture(nil, "BACKGROUND")
|
racial.texture = racial:CreateTexture(nil, "BACKGROUND")
|
||||||
racial.texture:SetAllPoints(racial)
|
racial.texture:SetAllPoints(racial)
|
||||||
racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
racial.texture.masked = true
|
||||||
--racial.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
--racial.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||||
|
|
||||||
racial.cooldown = CreateFrame("Cooldown", nil, racial, "CooldownFrameTemplate")
|
racial.cooldown = CreateFrame("Cooldown", nil, racial, "CooldownFrameTemplate")
|
||||||
racial.cooldown.noCooldownCount = true --Gladdy.db.racialDisableOmniCC
|
racial.cooldown.noCooldownCount = true --Gladdy.db.racialDisableOmniCC
|
||||||
racial.cooldown:SetHideCountdownNumbers(true)
|
racial.cooldown:SetHideCountdownNumbers(true)
|
||||||
|
racial.cooldown:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.cooldown:SetFrameLevel(Gladdy.db.racialFrameLevel + 1)
|
||||||
|
|
||||||
racial.cooldownFrame = CreateFrame("Frame", nil, racial)
|
racial.cooldownFrame = CreateFrame("Frame", nil, racial)
|
||||||
racial.cooldownFrame:ClearAllPoints()
|
racial.cooldownFrame:ClearAllPoints()
|
||||||
racial.cooldownFrame:SetPoint("TOPLEFT", racial, "TOPLEFT")
|
racial.cooldownFrame:SetPoint("TOPLEFT", racial, "TOPLEFT")
|
||||||
racial.cooldownFrame:SetPoint("BOTTOMRIGHT", racial, "BOTTOMRIGHT")
|
racial.cooldownFrame:SetPoint("BOTTOMRIGHT", racial, "BOTTOMRIGHT")
|
||||||
|
racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2)
|
||||||
|
|
||||||
racial.cooldownFont = racial.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
racial.cooldownFont = racial.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
racial.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), 20, "OUTLINE")
|
racial.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), 20, "OUTLINE")
|
||||||
@ -88,6 +116,9 @@ function Racial:CreateFrame(unit)
|
|||||||
|
|
||||||
racial.borderFrame = CreateFrame("Frame", nil, racial)
|
racial.borderFrame = CreateFrame("Frame", nil, racial)
|
||||||
racial.borderFrame:SetAllPoints(racial)
|
racial.borderFrame:SetAllPoints(racial)
|
||||||
|
racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 3)
|
||||||
|
|
||||||
racial.texture.overlay = racial.borderFrame:CreateTexture(nil, "OVERLAY")
|
racial.texture.overlay = racial.borderFrame:CreateTexture(nil, "OVERLAY")
|
||||||
racial.texture.overlay:SetAllPoints(racial)
|
racial.texture.overlay:SetAllPoints(racial)
|
||||||
racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle)
|
racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle)
|
||||||
@ -104,12 +135,27 @@ function Racial:UpdateFrame(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
local width, height = Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, Gladdy.db.racialSize
|
local width, height = Gladdy.db.racialSize * Gladdy.db.racialWidthFactor, Gladdy.db.racialSize
|
||||||
|
|
||||||
|
racial:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial:SetFrameLevel(Gladdy.db.racialFrameLevel)
|
||||||
|
racial.cooldown:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.cooldown:SetFrameLevel(Gladdy.db.racialFrameLevel + 1)
|
||||||
|
racial.cooldownFrame:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.cooldownFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 2)
|
||||||
|
racial.borderFrame:SetFrameStrata(Gladdy.db.racialFrameStrata)
|
||||||
|
racial.borderFrame:SetFrameLevel(Gladdy.db.racialFrameLevel + 3)
|
||||||
|
|
||||||
racial:SetWidth(width)
|
racial:SetWidth(width)
|
||||||
racial:SetHeight(height)
|
racial:SetHeight(height)
|
||||||
racial.cooldown:SetWidth(width - width/16)
|
if Gladdy.db.racialIconZoomed then
|
||||||
racial.cooldown:SetHeight(height - height/16)
|
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:ClearAllPoints()
|
||||||
racial.cooldown:SetPoint("CENTER", racial, "CENTER")
|
racial.cooldown:SetPoint("CENTER", racial, "CENTER")
|
||||||
racial.cooldown.noCooldownCount = true -- Gladdy.db.racialDisableOmniCC
|
racial.cooldown.noCooldownCount = true -- Gladdy.db.racialDisableOmniCC
|
||||||
@ -119,29 +165,64 @@ function Racial:UpdateFrame(unit)
|
|||||||
racial.texture:SetAllPoints(racial)
|
racial.texture:SetAllPoints(racial)
|
||||||
|
|
||||||
racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle)
|
racial.texture.overlay:SetTexture(Gladdy.db.racialBorderStyle)
|
||||||
racial.texture.overlay:SetVertexColor(Gladdy.db.racialBorderColor.r, Gladdy.db.racialBorderColor.g, Gladdy.db.racialBorderColor.b, Gladdy.db.racialBorderColor.a)
|
racial.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.racialBorderColor))
|
||||||
|
|
||||||
racial:ClearAllPoints()
|
if Gladdy.db.racialIconZoomed then
|
||||||
local parent = Gladdy.buttons[unit][Gladdy.db.racialAnchor]
|
if racial.texture.masked then
|
||||||
if (Gladdy.db.racialPos == "RIGHT") then
|
racial.texture:SetMask("")
|
||||||
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset)
|
racial.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||||
elseif (Gladdy.db.racialPos == "LEFT") then
|
racial.texture.masked = nil
|
||||||
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, -Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset)
|
end
|
||||||
elseif (Gladdy.db.racialPos == "TOP") then
|
else
|
||||||
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, Gladdy.db.padding + Gladdy.db.racialYOffset)
|
if not racial.texture.masked then
|
||||||
elseif (Gladdy.db.racialPos == "BOTTOM") then
|
racial.texture:SetMask("")
|
||||||
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, -Gladdy.db.padding + Gladdy.db.racialYOffset)
|
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"},
|
||||||
|
Gladdy.db.racialSize * Gladdy.db.racialWidthFactor,
|
||||||
|
Gladdy.db.racialSize,
|
||||||
|
0, 0, "racialEnabled")
|
||||||
end
|
end
|
||||||
|
|
||||||
if (Gladdy.db.racialEnabled == false) then
|
if (Gladdy.db.racialEnabled == false) then
|
||||||
racial:Hide()
|
racial:Hide()
|
||||||
else
|
else
|
||||||
racial:Show()
|
racial:Show()
|
||||||
|
if testAgain then
|
||||||
|
Racial:ResetUnit(unit)
|
||||||
|
Racial:Test(unit)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Racial:JOINED_ARENA()
|
function Racial:JOINED_ARENA()
|
||||||
self:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
|
|
||||||
self:SetScript("OnEvent", function(self, event, ...)
|
self:SetScript("OnEvent", function(self, event, ...)
|
||||||
if self[event] then
|
if self[event] then
|
||||||
self[event](self, ...)
|
self[event](self, ...)
|
||||||
@ -149,13 +230,34 @@ function Racial:JOINED_ARENA()
|
|||||||
end)
|
end)
|
||||||
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 racial = self.frames[unit]
|
||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
if (not racial or not button or not button.race) then
|
if (not racial or not button or not button.race) then
|
||||||
return
|
return
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function Racial:Used(unit, startTime, duration)
|
function Racial:Used(unit, startTime, duration)
|
||||||
@ -165,7 +267,7 @@ function Racial:Used(unit, startTime, duration)
|
|||||||
end
|
end
|
||||||
if not racial.active then
|
if not racial.active then
|
||||||
racial.timeLeft = duration
|
racial.timeLeft = duration
|
||||||
if not Gladdy.db.trinketDisableCircle then racial.cooldown:SetCooldown(startTime, duration) end
|
if not Gladdy.db.racialDisableCircle then racial.cooldown:SetCooldown(startTime, duration) end
|
||||||
racial.active = true
|
racial.active = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -192,8 +294,8 @@ end
|
|||||||
|
|
||||||
function Racial:Test(unit)
|
function Racial:Test(unit)
|
||||||
Racial:ENEMY_SPOTTED(unit)
|
Racial:ENEMY_SPOTTED(unit)
|
||||||
if (unit == "arena1" or unit == "arena3") then
|
if (unit == "arena2" or unit == "arena3") then
|
||||||
Racial:Used(unit, GetTime(), Gladdy:Racials()[Gladdy.buttons[unit].race].duration)
|
Gladdy:SendMessage("RACIAL_USED", unit)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -210,29 +312,57 @@ function Racial:GetOptions()
|
|||||||
desc = L["Enable racial icon"],
|
desc = L["Enable racial icon"],
|
||||||
order = 3,
|
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 = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 6,
|
||||||
|
disabled = function() return not Gladdy.db.racialEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
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({
|
racialSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Icon size"],
|
name = L["Icon size"],
|
||||||
min = 5,
|
min = 5,
|
||||||
max = 100,
|
max = 100,
|
||||||
step = 1,
|
step = 1,
|
||||||
order = 2,
|
order = 3,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
racialWidthFactor = Gladdy:option({
|
racialWidthFactor = Gladdy:option({
|
||||||
@ -241,7 +371,7 @@ function Racial:GetOptions()
|
|||||||
min = 0.5,
|
min = 0.5,
|
||||||
max = 2,
|
max = 2,
|
||||||
step = 0.05,
|
step = 0.05,
|
||||||
order = 3,
|
order = 4,
|
||||||
width = "full",
|
width = "full",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
@ -315,37 +445,13 @@ function Racial:GetOptions()
|
|||||||
position = {
|
position = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 4,
|
order = 5,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Icon position"],
|
name = L["Icon position"],
|
||||||
order = 4,
|
order = 4,
|
||||||
},
|
},
|
||||||
racialAnchor = Gladdy:option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Anchor"],
|
|
||||||
desc = L["This changes the anchor of the racial icon"],
|
|
||||||
order = 20,
|
|
||||||
values = {
|
|
||||||
["trinket"] = L["Trinket"],
|
|
||||||
["classIcon"] = L["Class Icon"],
|
|
||||||
["healthBar"] = L["Health Bar"],
|
|
||||||
["powerBar"] = L["Power Bar"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
racialPos = Gladdy:option({
|
|
||||||
type = "select",
|
|
||||||
name = L["Icon position"],
|
|
||||||
desc = L["This changes position relative to its anchor of the racial icon"],
|
|
||||||
order = 21,
|
|
||||||
values = {
|
|
||||||
["LEFT"] = L["Left"],
|
|
||||||
["RIGHT"] = L["Right"],
|
|
||||||
["TOP"] = L["Top"],
|
|
||||||
["BOTTOM"] = L["Bottom"],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
racialXOffset = Gladdy:option({
|
racialXOffset = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Horizontal offset"],
|
name = L["Horizontal offset"],
|
||||||
@ -391,7 +497,62 @@ function Racial:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
racialFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
racialFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Racial:LegacySetPosition(racial, unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
|
||||||
|
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
|
||||||
|
racial:ClearAllPoints()
|
||||||
|
local parent = Gladdy.buttons[unit][Gladdy.db.racialAnchor]
|
||||||
|
if (Gladdy.db.racialPos == "RIGHT") then
|
||||||
|
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset)
|
||||||
|
elseif (Gladdy.db.racialPos == "LEFT") then
|
||||||
|
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, -Gladdy.db.padding + Gladdy.db.racialXOffset, Gladdy.db.racialYOffset)
|
||||||
|
elseif (Gladdy.db.racialPos == "TOP") then
|
||||||
|
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, Gladdy.db.padding + Gladdy.db.racialYOffset)
|
||||||
|
elseif (Gladdy.db.racialPos == "BOTTOM") then
|
||||||
|
racial:SetPoint(ANCHORS[Gladdy.db.racialPos], parent, Gladdy.db.racialPos, Gladdy.db.racialXOffset, -Gladdy.db.padding + Gladdy.db.racialYOffset)
|
||||||
|
end
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
@ -17,6 +17,7 @@ local LibStub = LibStub
|
|||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local LSR = LibStub("SpellRange-1.0")
|
local LSR = LibStub("SpellRange-1.0")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
|
local HealthBar = Gladdy.modules["Health Bar"]
|
||||||
|
|
||||||
local classSpells = {
|
local classSpells = {
|
||||||
["MAGE"] = 118,
|
["MAGE"] = 118,
|
||||||
@ -52,12 +53,20 @@ local RangeCheck = Gladdy:NewModule("Range Check", nil, {
|
|||||||
})
|
})
|
||||||
|
|
||||||
function RangeCheck:Initialize()
|
function RangeCheck:Initialize()
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
if Gladdy.db.rangeCheckEnabled then
|
||||||
self:RegisterMessage("ENEMY_STEALTH")
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
self:RegisterMessage("ENEMY_SPOTTED")
|
end
|
||||||
self.playerClass = select(2, UnitClass("player"))
|
self.playerClass = select(2, UnitClass("player"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function RangeCheck:UpdateFrameOnce()
|
||||||
|
if Gladdy.db.rangeCheckEnabled then
|
||||||
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
else
|
||||||
|
self:UnregisterAllMessages()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function RangeCheck:Reset()
|
function RangeCheck:Reset()
|
||||||
self.test = nil
|
self.test = nil
|
||||||
end
|
end
|
||||||
@ -66,7 +75,6 @@ function RangeCheck:ResetUnit(unit)
|
|||||||
local button = Gladdy.buttons[unit]
|
local button = Gladdy.buttons[unit]
|
||||||
self:CancelTimer(button)
|
self:CancelTimer(button)
|
||||||
self:SetColor(button, 1)
|
self:SetColor(button, 1)
|
||||||
button.classColors = {}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function RangeCheck:Test(unit)
|
function RangeCheck:Test(unit)
|
||||||
@ -74,11 +82,10 @@ function RangeCheck:Test(unit)
|
|||||||
if not button then
|
if not button then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
self:ENEMY_SPOTTED(unit)
|
|
||||||
self.test = true
|
self.test = true
|
||||||
button.lastState = 0
|
button.lastState = 0
|
||||||
if Gladdy.db.rangeCheckEnabled then
|
if Gladdy.db.rangeCheckEnabled then
|
||||||
if unit == "arena1" then
|
if unit == "arena2" or unit == "arena4" then
|
||||||
--button.unit = "target"
|
--button.unit = "target"
|
||||||
--self:CreateTimer(button)
|
--self:CreateTimer(button)
|
||||||
self:SetRangeAlpha(button, nil)
|
self:SetRangeAlpha(button, nil)
|
||||||
@ -101,18 +108,12 @@ function RangeCheck:SetColor(button, oorFac)
|
|||||||
return
|
return
|
||||||
end
|
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
|
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
|
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
|
end
|
||||||
|
|
||||||
if Gladdy.db.rangeCheckHealthBarText then
|
if Gladdy.db.rangeCheckHealthBarText then
|
||||||
@ -177,35 +178,6 @@ function RangeCheck:JOINED_ARENA()
|
|||||||
end
|
end
|
||||||
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)
|
function RangeCheck.CheckRange(self)
|
||||||
local button = self.parent
|
local button = self.parent
|
||||||
|
|
||||||
@ -268,6 +240,7 @@ function RangeCheck:GetOptions()
|
|||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["General"],
|
name = L["General"],
|
||||||
order = 5,
|
order = 5,
|
||||||
|
disabled = function() return not Gladdy.db.rangeCheckEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -340,6 +313,7 @@ function RangeCheck:GetOptions()
|
|||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Spells"],
|
name = L["Spells"],
|
||||||
order = 5,
|
order = 5,
|
||||||
|
disabled = function() return not Gladdy.db.rangeCheckEnabled end,
|
||||||
args = RangeCheck:GetSpells(),
|
args = RangeCheck:GetSpells(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -383,8 +357,6 @@ function RangeCheck:GetSpells()
|
|||||||
end,
|
end,
|
||||||
set = function(_, value)
|
set = function(_, value)
|
||||||
Gladdy.db.rangeCheckDefaultSpells[class].min = tonumber(value)
|
Gladdy.db.rangeCheckDefaultSpells[class].min = tonumber(value)
|
||||||
--Gladdy.options.args["Range Check"].args.oorSpells.args[class].args.min.name = GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min) and format("|T%s:20|t %s", select(3, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)), select(1, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)))
|
|
||||||
-- or "nil"
|
|
||||||
Gladdy.options.args["Range Check"].args.oorSpells.args[class].args.headerMin.name = GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min) and format("|T%s:20|t %s - %d" .. L["yds"], select(3, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)), select(1, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)), select(6, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)))
|
Gladdy.options.args["Range Check"].args.oorSpells.args[class].args.headerMin.name = GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min) and format("|T%s:20|t %s - %d" .. L["yds"], select(3, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)), select(1, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)), select(6, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].min)))
|
||||||
or "nil"
|
or "nil"
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
local floor, str_find, pairs = math.floor, string.find, pairs
|
local floor, str_find, pairs = math.floor, string.find, pairs
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- CORE
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, {
|
local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, {
|
||||||
@ -12,6 +18,11 @@ local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, {
|
|||||||
shadowsightTimerX = 0,
|
shadowsightTimerX = 0,
|
||||||
shadowsightTimerY = 0,
|
shadowsightTimerY = 0,
|
||||||
shadowsightAnnounce = true,
|
shadowsightAnnounce = true,
|
||||||
|
shadowsightTimerStartTime = 91,
|
||||||
|
shadowsightTimerResetTime = 120,
|
||||||
|
shadowsightTimerShowTwoTimer = false,
|
||||||
|
shadowsightTimerFrameStrata = "HIGH",
|
||||||
|
shadowsightTimerFrameLevel = 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
function ShadowsightTimer:OnEvent(event, ...)
|
function ShadowsightTimer:OnEvent(event, ...)
|
||||||
@ -20,22 +31,142 @@ end
|
|||||||
|
|
||||||
function ShadowsightTimer:Initialize()
|
function ShadowsightTimer:Initialize()
|
||||||
self.locale = Gladdy:GetArenaTimer()
|
self.locale = Gladdy:GetArenaTimer()
|
||||||
self:RegisterMessage("JOINED_ARENA")
|
self:CreateAnchor()
|
||||||
self:RegisterMessage("AURA_GAIN")
|
if Gladdy.db.shadowsightTimerEnabled then
|
||||||
self:CreateTimerFrame()
|
self:RegisterMessage("JOINED_ARENA")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ShadowsightTimer:Reset()
|
||||||
|
self.anchor:Hide()
|
||||||
|
for i=1,2 do
|
||||||
|
self["timerFrame" .. i].active = false
|
||||||
|
self["timerFrame" .. i]:SetScript("OnUpdate", nil)
|
||||||
|
self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0)
|
||||||
|
end
|
||||||
|
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||||
|
self:SetScript("OnEvent", nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- FRAME SETUP
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function ShadowsightTimer:CreateTimerFrame(anchor, name, points)
|
||||||
|
local backdrop = {
|
||||||
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
||||||
|
edgeFile = "",
|
||||||
|
tile = true, tileSize = 16, edgeSize = 10,
|
||||||
|
insets = {left = 0, right = 0, top = 0, bottom = 0}
|
||||||
|
}
|
||||||
|
self[name] = CreateFrame("Frame", nil, anchor, BackdropTemplateMixin and "BackdropTemplate")
|
||||||
|
self[name]:SetPoint(points[1], anchor, points[2])
|
||||||
|
self[name]:SetBackdrop(backdrop)
|
||||||
|
self[name]:SetBackdropColor(0,0,0,0.8)
|
||||||
|
self[name]:SetHeight(17)
|
||||||
|
self[name]:SetWidth(35)
|
||||||
|
|
||||||
|
self[name].texture = self[name]:CreateTexture(nil,"OVERLAY")
|
||||||
|
self[name].texture:SetWidth(16)
|
||||||
|
self[name].texture:SetHeight(16)
|
||||||
|
self[name].texture:SetTexture("Interface\\Icons\\Spell_Shadow_EvilEye")
|
||||||
|
self[name].texture:SetTexCoord(0.125,0.875,0.125,0.875)
|
||||||
|
self[name].texture:SetPoint("RIGHT", self[name], "LEFT")
|
||||||
|
|
||||||
|
self[name].font = self[name]:CreateFontString(nil,"OVERLAY","GameFontNormal")
|
||||||
|
self[name].font:SetPoint("LEFT", 5, 0)
|
||||||
|
self[name].font:SetJustifyH("LEFT")
|
||||||
|
self[name].font:SetTextColor(1, 0.8, 0)
|
||||||
|
|
||||||
|
self[name]:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata)
|
||||||
|
self[name]:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ShadowsightTimer:CreateAnchor()
|
||||||
|
self.anchor = CreateFrame("Frame")
|
||||||
|
self.anchor:SetMovable(true)
|
||||||
|
self.anchor:EnableMouse(true)
|
||||||
|
self.anchor:SetWidth(35)
|
||||||
|
self.anchor:SetHeight(17)
|
||||||
|
self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
||||||
|
self.anchor:SetScript("OnMouseDown",function(self) self:StartMoving() end)
|
||||||
|
self.anchor:SetScript("OnMouseUp",function(self)
|
||||||
|
self:StopMovingOrSizing()
|
||||||
|
Gladdy.db.shadowsightTimerRelPoint1,_,Gladdy.db.shadowsightTimerRelPoint2,Gladdy.db.shadowsightTimerX,Gladdy.db.shadowsightTimerY = self:GetPoint()
|
||||||
|
end)
|
||||||
|
self.anchor:SetScale(Gladdy.db.shadowsightTimerScale)
|
||||||
|
self.anchor:Hide()
|
||||||
|
|
||||||
|
self:CreateTimerFrame(self.anchor, "timerFrame1", {"TOP", "TOP"})
|
||||||
|
local show = Gladdy.db.shadowsightTimerShowTwoTimer
|
||||||
|
self:CreateTimerFrame(show and self.timerFrame1 or self.anchor, "timerFrame2", show and {"TOP", "BOTTOM"} or {"TOP", "TOP"})
|
||||||
|
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)
|
||||||
|
self.anchor:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel)
|
||||||
|
self.timerFrame1:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata)
|
||||||
|
self.timerFrame1:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel)
|
||||||
|
self.timerFrame2:SetFrameStrata(Gladdy.db.shadowsightTimerFrameStrata)
|
||||||
|
self.timerFrame2:SetFrameLevel(Gladdy.db.shadowsightTimerFrameLevel)
|
||||||
|
|
||||||
|
if Gladdy.db.shadowsightTimerEnabled then
|
||||||
|
self.anchor:SetScale(Gladdy.db.shadowsightTimerScale)
|
||||||
|
self.anchor:ClearAllPoints()
|
||||||
|
self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
||||||
|
if Gladdy.frame.testing or Gladdy.curBracket then
|
||||||
|
self.anchor:Show()
|
||||||
|
end
|
||||||
|
if Gladdy.db.shadowsightTimerShowTwoTimer then
|
||||||
|
self.anchor:SetHeight(34)
|
||||||
|
self.timerFrame2:ClearAllPoints()
|
||||||
|
self.timerFrame2:SetPoint("TOP", self.timerFrame1, "BOTTOM")
|
||||||
|
ShadowsightTimer:NotifyStart()
|
||||||
|
else
|
||||||
|
self.anchor:SetHeight(17)
|
||||||
|
self.timerFrame2:ClearAllPoints()
|
||||||
|
self.timerFrame2:SetPoint("TOP", self.anchor, "TOP")
|
||||||
|
ShadowsightTimer:NotifyStart()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.anchor:SetScale(Gladdy.db.shadowsightTimerScale)
|
||||||
|
self.anchor:ClearAllPoints()
|
||||||
|
self.anchor:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
||||||
|
self.anchor:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- EVENT HANDLING
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
function ShadowsightTimer:JOINED_ARENA()
|
function ShadowsightTimer:JOINED_ARENA()
|
||||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
if Gladdy.db.shadowsightTimerEnabled then
|
||||||
self:SetScript("OnEvent", ShadowsightTimer.OnEvent)
|
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||||
self.timerFrame.font:SetText("1:30")
|
self:SetScript("OnEvent", ShadowsightTimer.OnEvent)
|
||||||
self.timerFrame.font:SetTextColor(1, 0.8, 0)
|
for i=1,2 do
|
||||||
self.timerFrame:Show()
|
self["timerFrame" .. i].font:SetText("1:30")
|
||||||
|
self["timerFrame" .. i].font:SetTextColor(1, 0.8, 0)
|
||||||
|
end
|
||||||
|
self.anchor:Show()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID)
|
function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID)
|
||||||
if (spellID == 34709) then
|
if (spellID == 34709 and Gladdy.db.shadowsightTimerEnabled) then
|
||||||
--TODO reset timer after 15s
|
self:Start(Gladdy.db.shadowsightTimerResetTime, self:GetHiddenTimer())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -43,96 +174,53 @@ function ShadowsightTimer:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)
|
|||||||
for k,v in pairs(self.locale) do
|
for k,v in pairs(self.locale) do
|
||||||
if str_find(msg, v) then
|
if str_find(msg, v) then
|
||||||
if k == 0 then
|
if k == 0 then
|
||||||
self:Start()
|
self:Start(nil, self.timerFrame1)
|
||||||
|
self:Start(nil, self.timerFrame2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- TEST
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
function ShadowsightTimer:Test()
|
function ShadowsightTimer:Test()
|
||||||
if Gladdy.db.shadowsightTimerEnabled then
|
if Gladdy.db.shadowsightTimerEnabled then
|
||||||
self.timerFrame:Show()
|
self.anchor:Show()
|
||||||
self:Start()
|
ShadowsightTimer:JOINED_ARENA()
|
||||||
|
self:Start(20, self.timerFrame1)
|
||||||
|
self:Start(25, self.timerFrame2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ShadowsightTimer:Reset()
|
---------------------------
|
||||||
self.timerFrame:Hide()
|
|
||||||
self.timerFrame:SetScript("OnUpdate", nil)
|
|
||||||
self.timerFrame.font:SetTextColor(1, 0.8, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
function ShadowsightTimer:CreateTimerFrame()
|
-- TIMER
|
||||||
self.timerFrame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate")
|
|
||||||
self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
|
||||||
|
|
||||||
local backdrop = {
|
---------------------------
|
||||||
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
||||||
edgeFile = "",
|
|
||||||
tile = true, tileSize = 16, edgeSize = 10,
|
|
||||||
insets = {left = 0, right = 0, top = 0, bottom = 0}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.timerFrame:SetBackdrop(backdrop)
|
function ShadowsightTimer:Start(time, frame)
|
||||||
self.timerFrame:SetBackdropColor(0,0,0,0.8)
|
frame.endTime = time or Gladdy.db.shadowsightTimerStartTime
|
||||||
self.timerFrame:SetHeight(17)
|
frame.active = true
|
||||||
self.timerFrame:SetWidth(35)
|
ShadowsightTimer:NotifyStart()
|
||||||
|
frame.announced = nil
|
||||||
self.timerFrame:SetMovable(true)
|
frame.timeSinceLastUpdate = 0
|
||||||
self.timerFrame:EnableMouse(true)
|
frame.font:SetTextColor(1, 0.8, 0)
|
||||||
|
frame:SetScript("OnUpdate", ShadowsightTimer.OnUpdate)
|
||||||
self.timerFrame.texture = self.timerFrame:CreateTexture(nil,"OVERLAY")
|
|
||||||
self.timerFrame.texture:SetWidth(16)
|
|
||||||
self.timerFrame.texture:SetHeight(16)
|
|
||||||
self.timerFrame.texture:SetTexture("Interface\\Icons\\Spell_Shadow_EvilEye")
|
|
||||||
self.timerFrame.texture:SetTexCoord(0.125,0.875,0.125,0.875)
|
|
||||||
self.timerFrame.texture:SetPoint("RIGHT", self.timerFrame, "LEFT")
|
|
||||||
|
|
||||||
self.timerFrame.font = self.timerFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
|
|
||||||
self.timerFrame.font:SetPoint("LEFT", 5, 0)
|
|
||||||
self.timerFrame.font:SetJustifyH("LEFT")
|
|
||||||
self.timerFrame.font:SetTextColor(1, 0.8, 0)
|
|
||||||
|
|
||||||
self.timerFrame:SetScript("OnMouseDown",function(self) self:StartMoving() end)
|
|
||||||
self.timerFrame:SetScript("OnMouseUp",function(self)
|
|
||||||
self:StopMovingOrSizing()
|
|
||||||
Gladdy.db.shadowsightTimerRelPoint1,_,Gladdy.db.shadowsightTimerRelPoint2,Gladdy.db.shadowsightTimerX,Gladdy.db.shadowsightTimerY = self:GetPoint()
|
|
||||||
end)
|
|
||||||
self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale)
|
|
||||||
self.timerFrame:Hide()
|
|
||||||
end
|
|
||||||
|
|
||||||
function ShadowsightTimer:UpdateFrameOnce()
|
|
||||||
self.timerFrame:EnableMouse(not Gladdy.db.shadowsightTimerLocked)
|
|
||||||
if Gladdy.db.shadowsightTimerEnabled then
|
|
||||||
self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale)
|
|
||||||
self.timerFrame:ClearAllPoints()
|
|
||||||
self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
|
||||||
if Gladdy.frame.testing or Gladdy.curBracket then
|
|
||||||
self.timerFrame:Show()
|
|
||||||
end
|
|
||||||
else
|
|
||||||
self.timerFrame:SetScale(Gladdy.db.shadowsightTimerScale)
|
|
||||||
self.timerFrame:ClearAllPoints()
|
|
||||||
self.timerFrame:SetPoint(Gladdy.db.shadowsightTimerRelPoint1, nil, Gladdy.db.shadowsightTimerRelPoint2, Gladdy.db.shadowsightTimerX, Gladdy.db.shadowsightTimerY)
|
|
||||||
self.timerFrame:Hide()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function ShadowsightTimer:Start()
|
|
||||||
self.timerFrame.endTime = 91
|
|
||||||
self.timerFrame.timeSinceLastUpdate = 0
|
|
||||||
self.timerFrame:SetScript("OnUpdate", ShadowsightTimer.OnUpdate)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function ShadowsightTimer.OnUpdate(self, elapsed)
|
function ShadowsightTimer.OnUpdate(self, elapsed)
|
||||||
self.timeSinceLastUpdate = self.timeSinceLastUpdate + elapsed;
|
self.timeSinceLastUpdate = self.timeSinceLastUpdate + elapsed;
|
||||||
self.endTime = self.endTime - elapsed
|
self.endTime = self.endTime - elapsed
|
||||||
|
|
||||||
if (self.timeSinceLastUpdate > 0.1) then
|
if (self.timeSinceLastUpdate > 0.01) then
|
||||||
self.font:SetFormattedText(floor(self.endTime / 60) .. ":" .. "%02d", self.endTime - floor(self.endTime / 60) * 60)
|
self.font:SetFormattedText(floor(self.endTime / 60) .. ":" .. "%02d", self.endTime - floor(self.endTime / 60) * 60)
|
||||||
self.timeSinceLastUpdate = 0;
|
self.timeSinceLastUpdate = 0;
|
||||||
if floor(self.endTime) == 15 and Gladdy.db.shadowsightAnnounce then
|
if floor(self.endTime) == 15 and Gladdy.db.shadowsightAnnounce and not self.announced then
|
||||||
|
self.announced = true
|
||||||
Gladdy:SendMessage("SHADOWSIGHT", L["Shadowsight up in %ds"]:format(15))
|
Gladdy:SendMessage("SHADOWSIGHT", L["Shadowsight up in %ds"]:format(15))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -143,12 +231,64 @@ function ShadowsightTimer.OnUpdate(self, elapsed)
|
|||||||
self:SetScript("OnUpdate", nil)
|
self:SetScript("OnUpdate", nil)
|
||||||
self.font:SetText("0:00")
|
self.font:SetText("0:00")
|
||||||
self.font:SetTextColor(0, 1, 0)
|
self.font:SetTextColor(0, 1, 0)
|
||||||
|
self.active = false
|
||||||
|
ShadowsightTimer:NotifyEnd()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ShadowsightTimer:NotifyStart()
|
||||||
|
local show = Gladdy.db.shadowsightTimerShowTwoTimer
|
||||||
|
if self.timerFrame1.active and self.timerFrame2.active then
|
||||||
|
if self.timerFrame1.endTime < self.timerFrame2.endTime then
|
||||||
|
self.timerFrame1:SetAlpha(1)
|
||||||
|
self.timerFrame2:SetAlpha(show and 1 or 0)
|
||||||
|
else
|
||||||
|
self.timerFrame1:SetAlpha(show and 1 or 0)
|
||||||
|
self.timerFrame2:SetAlpha(1)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if self.timerFrame1.active then
|
||||||
|
self.timerFrame1:SetAlpha(1)
|
||||||
|
self.timerFrame2:SetAlpha(show and 1 or 0)
|
||||||
|
elseif self.timerFrame2.active then
|
||||||
|
self.timerFrame1:SetAlpha(show and 1 or 0)
|
||||||
|
self.timerFrame2:SetAlpha(1)
|
||||||
|
else
|
||||||
|
self.timerFrame1:SetAlpha(1)
|
||||||
|
self.timerFrame2:SetAlpha(show and 1 or 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function ShadowsightTimer:NotifyEnd()
|
||||||
|
local show = Gladdy.db.shadowsightTimerShowTwoTimer
|
||||||
|
if self.timerFrame1.active then
|
||||||
|
self.timerFrame1:SetAlpha(1)
|
||||||
|
self.timerFrame2:SetAlpha(show and 1 or 0)
|
||||||
|
elseif self.timerFrame2.active then
|
||||||
|
self.timerFrame1:SetAlpha(show and 1 or 0)
|
||||||
|
self.timerFrame2:SetAlpha(1)
|
||||||
|
else
|
||||||
|
self.timerFrame1:SetAlpha(1)
|
||||||
|
self.timerFrame2:SetAlpha(show and 1 or 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function ShadowsightTimer:GetHiddenTimer()
|
||||||
|
if self.timerFrame1.active and self.timerFrame2.active then
|
||||||
|
return self.timerFrame1.endTime < self.timerFrame2.endTime and self.timerFrame1 or self.timerFrame2
|
||||||
|
else
|
||||||
|
return self.timerFrame1.active and self.timerFrame2 or self.timerFrame1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- OPTIONS
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
function ShadowsightTimer:GetOptions()
|
function ShadowsightTimer:GetOptions()
|
||||||
return {
|
return {
|
||||||
headerArenaCountdown = {
|
headerShadowsight = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Shadowsight Timer"],
|
name = L["Shadowsight Timer"],
|
||||||
order = 2,
|
order = 2,
|
||||||
@ -158,30 +298,147 @@ function ShadowsightTimer:GetOptions()
|
|||||||
name = L["Enabled"],
|
name = L["Enabled"],
|
||||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||||
order = 3,
|
order = 3,
|
||||||
width = "full",
|
|
||||||
}),
|
}),
|
||||||
shadowsightTimerLocked = Gladdy:option({
|
shadowsightTimerLocked = Gladdy:option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Locked"],
|
name = L["Locked"],
|
||||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||||
order = 4,
|
order = 4,
|
||||||
width = "full",
|
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({
|
shadowsightAnnounce = Gladdy:option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Announce"],
|
name = L["Announce"],
|
||||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||||
order = 5,
|
|
||||||
width = "full",
|
|
||||||
}),
|
|
||||||
shadowsightTimerScale = Gladdy:option({
|
|
||||||
type = "range",
|
|
||||||
name = L["Scale"],
|
|
||||||
order = 6,
|
order = 6,
|
||||||
min = 0.1,
|
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||||
max = 5,
|
|
||||||
step = 0.1,
|
|
||||||
width = "full",
|
|
||||||
}),
|
}),
|
||||||
|
group = {
|
||||||
|
type = "group",
|
||||||
|
childGroups = "tree",
|
||||||
|
name = L["Frame"],
|
||||||
|
order = 7,
|
||||||
|
disabled = function() return not Gladdy.db.shadowsightTimerEnabled end,
|
||||||
|
args = {
|
||||||
|
general = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Scale"],
|
||||||
|
order = 1,
|
||||||
|
args = {
|
||||||
|
header = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Scale"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
shadowsightTimerScale = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Scale"],
|
||||||
|
order = 2,
|
||||||
|
min = 0.1,
|
||||||
|
max = 5,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cooldown = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Cooldown"],
|
||||||
|
order = 2,
|
||||||
|
args = {
|
||||||
|
header = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Shadowsight CDs"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
shadowsightTimerStartTime = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Start Time"],
|
||||||
|
desc = L["Start time in seconds"],
|
||||||
|
min = 80,
|
||||||
|
max = 100,
|
||||||
|
order = 2,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
shadowsightTimerResetTime = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Reset Time"],
|
||||||
|
desc = L["Reset time in seconds"],
|
||||||
|
min = 110,
|
||||||
|
max = 130,
|
||||||
|
order = 3,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
--[[font = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Font"],
|
||||||
|
order = 3,
|
||||||
|
args = {
|
||||||
|
header = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Font"],
|
||||||
|
order = 4,
|
||||||
|
},
|
||||||
|
racialFont = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Font"],
|
||||||
|
desc = L["Font of the cooldown"],
|
||||||
|
order = 11,
|
||||||
|
dialogControl = "LSM30_Font",
|
||||||
|
values = AceGUIWidgetLSMlists.font,
|
||||||
|
}),
|
||||||
|
racialFontScale = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Font scale"],
|
||||||
|
desc = L["Scale of the font"],
|
||||||
|
order = 12,
|
||||||
|
min = 0.1,
|
||||||
|
max = 2,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},--]]
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
shadowsightTimerFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
shadowsightTimerFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
@ -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 select, pairs, tremove, tinsert, format, strsplit, tonumber, ipairs = select, pairs, tremove, tinsert, format, strsplit, tonumber, ipairs
|
||||||
local UnitExists, UnitIsUnit, UnitName, UnitIsEnemy = UnitExists, UnitIsUnit, UnitName, UnitIsEnemy
|
local UnitExists, UnitIsUnit, UnitIsEnemy, UnitGUID = UnitExists, UnitIsUnit, UnitIsEnemy, UnitGUID
|
||||||
local C_NamePlate = C_NamePlate
|
local C_NamePlate = C_NamePlate
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local GetSpellInfo, CreateFrame = GetSpellInfo, CreateFrame
|
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 function GetTotemColorDefaultOptions()
|
||||||
local defaultDB = {}
|
local defaultDB = {}
|
||||||
local options = {}
|
local options = {}
|
||||||
local indexedList = {}
|
local indexedList = {}
|
||||||
for k,v in pairs(totemData) do
|
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
|
end
|
||||||
table.sort(indexedList, function (a, b)
|
table.sort(indexedList, function (a, b)
|
||||||
return a.name < b.name
|
return a.name < b.name
|
||||||
end)
|
end)
|
||||||
for i=1,#indexedList do
|
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] = {
|
options["totem" .. indexedList[i].id] = {
|
||||||
order = i+1,
|
order = i+1,
|
||||||
name = select(1, GetSpellInfo(indexedList[i].id)),
|
name = select(1, GetSpellInfo(indexedList[i].id)),
|
||||||
@ -174,17 +112,13 @@ local function GetTotemColorDefaultOptions()
|
|||||||
return defaultDB, options, indexedList
|
return defaultDB, options, indexedList
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:GetTotemColors()
|
|
||||||
return GetTotemColorDefaultOptions()
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
||||||
-- Core
|
-- Core
|
||||||
|
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
||||||
local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
|
local TotemPlates = Gladdy:NewModule("Totem Plates", 2, {
|
||||||
npTotems = true,
|
npTotems = true,
|
||||||
npTotemsShowFriendly = true,
|
npTotemsShowFriendly = true,
|
||||||
npTotemsShowEnemy = true,
|
npTotemsShowEnemy = true,
|
||||||
@ -198,12 +132,10 @@ local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
|
|||||||
npTotemPlatesAlpha = 0.6,
|
npTotemPlatesAlpha = 0.6,
|
||||||
npTotemPlatesAlphaAlways = false,
|
npTotemPlatesAlphaAlways = false,
|
||||||
npTotemPlatesAlphaAlwaysTargeted = 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, ...)
|
function TotemPlates.OnEvent(self, event, ...)
|
||||||
TotemPlates[event](self, ...)
|
TotemPlates[event](self, ...)
|
||||||
end
|
end
|
||||||
@ -212,19 +144,18 @@ function TotemPlates:Initialize()
|
|||||||
self.numChildren = 0
|
self.numChildren = 0
|
||||||
self.activeTotemNameplates = {}
|
self.activeTotemNameplates = {}
|
||||||
self.totemPlateCache = {}
|
self.totemPlateCache = {}
|
||||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
if Gladdy.db.npTotems then
|
||||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||||
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||||
self:RegisterEvent("UNIT_NAME_UPDATE")
|
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||||
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
||||||
|
end
|
||||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy then
|
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy then
|
||||||
--GetCVar("nameplateShowEnemyTotems")
|
SetCVar("nameplateShowEnemyTotems", true);
|
||||||
--SetCVar("nameplateShowEnemyTotems", true);
|
|
||||||
end
|
end
|
||||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly then
|
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly then
|
||||||
--GetCVar("nameplateShowFriendlyTotems")
|
SetCVar("nameplateShowFriendlyTotems", true);
|
||||||
--SetCVar("nameplateShowFriendlyTotems", true);
|
|
||||||
end
|
end
|
||||||
self.addon = "Blizzard"
|
self.addon = "Blizzard"
|
||||||
if (IsAddOnLoaded("Plater")) then
|
if (IsAddOnLoaded("Plater")) then
|
||||||
@ -248,17 +179,69 @@ function TotemPlates:Initialize()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
-- Events
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
function TotemPlates:PLAYER_ENTERING_WORLD()
|
function TotemPlates:PLAYER_ENTERING_WORLD()
|
||||||
self.numChildren = 0
|
self.numChildren = 0
|
||||||
self.activeTotemNameplates = {}
|
self.activeTotemNameplates = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
function TotemPlates:Reset()
|
function TotemPlates:PLAYER_TARGET_CHANGED()
|
||||||
--self:CancelAllTimers()
|
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||||
--self:UnhookAll()
|
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, k)
|
||||||
|
end
|
||||||
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
|
||||||
|
if nameplate.gladdyTotemFrame then
|
||||||
|
nameplate.gladdyTotemFrame:Hide()
|
||||||
|
nameplate.gladdyTotemFrame:SetParent(nil)
|
||||||
|
tinsert(self.totemPlateCache, nameplate.gladdyTotemFrame)
|
||||||
|
nameplate.gladdyTotemFrame = nil
|
||||||
|
end
|
||||||
|
if (self.addon == "ElvUI") then
|
||||||
|
self:ToggleAddon(nameplate, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
-- Gladdy Call
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
function TotemPlates:UpdateFrameOnce()
|
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
|
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||||
local totemDataEntry = nameplate.gladdyTotemFrame.totemDataEntry
|
local totemDataEntry = nameplate.gladdyTotemFrame.totemDataEntry
|
||||||
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||||
@ -295,6 +278,18 @@ function TotemPlates:UpdateFrameOnce()
|
|||||||
nameplate.gladdyTotemFrame:Hide()
|
nameplate.gladdyTotemFrame:Hide()
|
||||||
self:ToggleAddon(nameplate, true)
|
self:ToggleAddon(nameplate, true)
|
||||||
end
|
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
|
end
|
||||||
for _,gladdyTotemFrame in ipairs(self.totemPlateCache) do
|
for _,gladdyTotemFrame in ipairs(self.totemPlateCache) do
|
||||||
gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||||
@ -313,6 +308,7 @@ end
|
|||||||
|
|
||||||
function TotemPlates:CreateTotemFrame(nameplate)
|
function TotemPlates:CreateTotemFrame(nameplate)
|
||||||
nameplate.gladdyTotemFrame = CreateFrame("Frame")
|
nameplate.gladdyTotemFrame = CreateFrame("Frame")
|
||||||
|
nameplate.gladdyTotemFrame:SetFrameLevel(1)
|
||||||
nameplate.gladdyTotemFrame:SetIgnoreParentAlpha(true)
|
nameplate.gladdyTotemFrame:SetIgnoreParentAlpha(true)
|
||||||
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||||
nameplate.gladdyTotemFrame:SetHeight(Gladdy.db.npTotemPlatesSize)
|
nameplate.gladdyTotemFrame:SetHeight(Gladdy.db.npTotemPlatesSize)
|
||||||
@ -373,34 +369,44 @@ function TotemPlates:GetAddonFrame(nameplate)
|
|||||||
end
|
end
|
||||||
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)
|
function TotemPlates:ToggleAddon(nameplate, show)
|
||||||
local addonFrames = { self:GetAddonFrame(nameplate) }
|
local addonFrames = { self:GetAddonFrame(nameplate) }
|
||||||
if addonFrames and #addonFrames > 0 then
|
if addonFrames and #addonFrames > 0 then
|
||||||
if show then
|
if show then
|
||||||
for _,v in ipairs(addonFrames) do
|
for _, frame in ipairs(addonFrames) do
|
||||||
v:Show()
|
if frame.UpdateAllElements then
|
||||||
|
Gladdy:Debug("INFO", "TotemPlates:ToggleAddon - NAME_PLATE_UNIT_ADDED - nameplate.unitFrame:UpdateAllElements")
|
||||||
|
frame:Show()
|
||||||
|
frame:UpdateAllElements("NAME_PLATE_UNIT_ADDED")
|
||||||
|
else
|
||||||
|
Gladdy:Debug("INFO", "TotemPlates:ToggleAddon - NAME_PLATE_UNIT_ADDED - Show")
|
||||||
|
frame:Show()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
for _,v in ipairs(addonFrames) do
|
for _, frame in ipairs(addonFrames) do
|
||||||
v:Hide()
|
if frame.UpdateAllElements then
|
||||||
|
Gladdy:Debug("INFO", "TotemPlates:ToggleAddon - NAME_PLATE_UNIT_REMOVED - nameplate.unitFrame:UpdateAllElements")
|
||||||
|
frame:UpdateAllElements("NAME_PLATE_UNIT_REMOVED")
|
||||||
|
frame:Hide()
|
||||||
|
else
|
||||||
|
Gladdy:Debug("INFO", "TotemPlates:ToggleAddon - NAME_PLATE_UNIT_REMOVED - Hide")
|
||||||
|
frame:Hide()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function TotemPlates.OnUpdate(self)
|
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)
|
self.selectionHighlight:SetAlpha(.25)
|
||||||
else
|
else
|
||||||
self.selectionHighlight:SetAlpha(0)
|
self.selectionHighlight:SetAlpha(0)
|
||||||
end
|
end
|
||||||
if (TotemPlates.addon == "Plater" or TotemPlates.addon == "Tukui" or TotemPlates.addon == "ElvUI") and self.parent and self.parent.unitFrame then
|
if (TotemPlates.addon == "Plater" or TotemPlates.addon == "Tukui") and self.parent and self.parent.unitFrame then
|
||||||
self.parent.unitFrame:Hide()
|
self.parent.unitFrame:Hide()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -423,12 +429,14 @@ function TotemPlates:OnUnitEvent(unitID)
|
|||||||
self:ToggleAddon(nameplate, true)
|
self:ToggleAddon(nameplate, true)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local nameplateName = UnitName(unitID)
|
local npcType, _, _, _, _, npcId = strsplit("-", UnitGUID(unitID))
|
||||||
local totemName = string_gsub(nameplateName, "^%s+", "") --trim
|
if npcType ~= "Creature" then
|
||||||
totemName = string_gsub(totemName, "%s+$", "") --trim
|
return
|
||||||
totemName = string_gsub(totemName, "%s+[I,V,X]+$", "") --trim rank
|
end
|
||||||
totemName = string_lower(totemName)
|
local totemDataEntry = npcIdToTotemData[tonumber(npcId)]
|
||||||
local totemDataEntry = localizedTotemData["default"][totemName] or localizedTotemData["frFR"][totemName] or localizedTotemData["ruRU"][totemName]
|
if not totemDataEntry then
|
||||||
|
return
|
||||||
|
end
|
||||||
if totemDataEntry and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then-- modify this nameplates
|
if totemDataEntry and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then-- modify this nameplates
|
||||||
if #self.totemPlateCache > 0 then
|
if #self.totemPlateCache > 0 then
|
||||||
nameplate.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
nameplate.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
||||||
@ -450,34 +458,21 @@ function TotemPlates:OnUnitEvent(unitID)
|
|||||||
nameplate.gladdyTotemFrame.parent = nameplate
|
nameplate.gladdyTotemFrame.parent = nameplate
|
||||||
nameplate.gladdyTotemFrame:Show()
|
nameplate.gladdyTotemFrame:Show()
|
||||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, unitID)
|
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, unitID)
|
||||||
self:ToggleAddon(nameplate)
|
self:ToggleAddon(nameplate, false)
|
||||||
self.activeTotemNameplates[unitID] = 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, false)
|
||||||
else
|
else
|
||||||
self:ToggleAddon(nameplate, true)
|
self:ToggleAddon(nameplate, true)
|
||||||
end
|
end
|
||||||
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)
|
function TotemPlates:SetTotemAlpha(gladdyTotemFrame, unitID)
|
||||||
local targetExists = UnitExists("target")
|
local targetExists = UnitExists("target")
|
||||||
local totemDataEntry = gladdyTotemFrame.totemDataEntry
|
local totemDataEntry = gladdyTotemFrame.totemDataEntry
|
||||||
@ -502,6 +497,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
|
-- Interface options
|
||||||
|
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
@ -516,21 +570,23 @@ function TotemPlates:GetOptions()
|
|||||||
npTotems = Gladdy:option({
|
npTotems = Gladdy:option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Enabled"],
|
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,
|
order = 3,
|
||||||
width = 0.9,
|
width = 0.9,
|
||||||
}),
|
}),
|
||||||
npTotemsShowFriendly = Gladdy:option({
|
npTotemsShowFriendly = Gladdy:option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show friendly"],
|
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,
|
order = 4,
|
||||||
width = 0.65,
|
width = 0.65,
|
||||||
}),
|
}),
|
||||||
npTotemsShowEnemy = Gladdy:option({
|
npTotemsShowEnemy = Gladdy:option({
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show enemy"],
|
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,
|
order = 5,
|
||||||
width = 0.6,
|
width = 0.6,
|
||||||
}),
|
}),
|
||||||
@ -538,6 +594,7 @@ function TotemPlates:GetOptions()
|
|||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
|
disabled = function() return not Gladdy.db.npTotems end,
|
||||||
order = 4,
|
order = 4,
|
||||||
args = {
|
args = {
|
||||||
icon = {
|
icon = {
|
||||||
@ -732,7 +789,8 @@ function TotemPlates:GetOptions()
|
|||||||
name = L["Customize Totems"],
|
name = L["Customize Totems"],
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
args = select(2, Gladdy:GetTotemColors())
|
disabled = function() return not Gladdy.db.npTotems end,
|
||||||
|
args = select(2, GetTotemColorDefaultOptions())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
782
Modules/TotemPulse.lua
Normal file
782
Modules/TotemPulse.lua
Normal file
@ -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
|
@ -1,4 +1,4 @@
|
|||||||
local ceil = ceil
|
local ceil, str_gsub = ceil, string.gsub
|
||||||
local C_PvP = C_PvP
|
local C_PvP = C_PvP
|
||||||
|
|
||||||
local CreateFrame = CreateFrame
|
local CreateFrame = CreateFrame
|
||||||
@ -6,25 +6,50 @@ local GetTime = GetTime
|
|||||||
|
|
||||||
local Gladdy = LibStub("Gladdy")
|
local Gladdy = LibStub("Gladdy")
|
||||||
local L = Gladdy.L
|
local L = Gladdy.L
|
||||||
local Trinket = Gladdy:NewModule("Trinket", nil, {
|
local Trinket = Gladdy:NewModule("Trinket", 80, {
|
||||||
trinketFont = "DorisPP",
|
trinketFont = "DorisPP",
|
||||||
trinketFontScale = 1,
|
trinketFontScale = 1,
|
||||||
|
trinketFontEnabled = true,
|
||||||
trinketEnabled = true,
|
trinketEnabled = true,
|
||||||
trinketSize = 60 + 20 + 1,
|
trinketSize = 60 + 20 + 1,
|
||||||
trinketWidthFactor = 0.9,
|
trinketWidthFactor = 0.9,
|
||||||
trinketPos = "RIGHT",
|
trinketIconZoomed = false,
|
||||||
trinketBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
trinketBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||||
trinketBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
trinketBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||||
trinketDisableCircle = false,
|
trinketDisableCircle = false,
|
||||||
trinketCooldownAlpha = 1,
|
trinketCooldownAlpha = 1,
|
||||||
trinketCooldownNumberAlpha = 1,
|
trinketCooldownNumberAlpha = 1,
|
||||||
|
trinketXOffset = 0,
|
||||||
|
trinketYOffset = 0,
|
||||||
|
trinketFrameStrata = "MEDIUM",
|
||||||
|
trinketFrameLevel = 5,
|
||||||
|
trinketColored = false,
|
||||||
|
trinketColoredCd = { r = 1, g = 0, b = 0, a = 1 },
|
||||||
|
trinketColoredNoCd = { r = 0, g = 1, b = 0, a = 1 },
|
||||||
|
trinketGroup = false,
|
||||||
|
trinketGroupDirection = "DOWN",
|
||||||
})
|
})
|
||||||
LibStub("AceComm-3.0"):Embed(Trinket)
|
|
||||||
|
|
||||||
function Trinket:Initialize()
|
function Trinket:Initialize()
|
||||||
self.frames = {}
|
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
|
end
|
||||||
|
|
||||||
local function iconTimer(self, elapsed)
|
local function iconTimer(self, elapsed)
|
||||||
@ -33,6 +58,9 @@ local function iconTimer(self, elapsed)
|
|||||||
self.active = false
|
self.active = false
|
||||||
self.cooldown:Clear()
|
self.cooldown:Clear()
|
||||||
Gladdy:SendMessage("TRINKET_READY", self.unit)
|
Gladdy:SendMessage("TRINKET_READY", self.unit)
|
||||||
|
if Gladdy.db.trinketColored then
|
||||||
|
self:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredNoCd))
|
||||||
|
end
|
||||||
else
|
else
|
||||||
self.timeLeft = self.timeLeft - elapsed
|
self.timeLeft = self.timeLeft - elapsed
|
||||||
end
|
end
|
||||||
@ -55,26 +83,39 @@ local function iconTimer(self, elapsed)
|
|||||||
self.cooldownFont:SetTextColor(1, 0, 0, Gladdy.db.trinketCooldownNumberAlpha)
|
self.cooldownFont:SetTextColor(1, 0, 0, Gladdy.db.trinketCooldownNumberAlpha)
|
||||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||||
end
|
end
|
||||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
if Gladdy.db.trinketFontEnabled then
|
||||||
|
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
||||||
|
else
|
||||||
|
self.cooldownFont:SetText("")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Trinket:CreateFrame(unit)
|
function Trinket:CreateFrame(unit)
|
||||||
local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit])
|
local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
|
||||||
|
trinket:SetBackdrop({bgFile = "Interface\\AddOns\\Gladdy\\Images\\trinket" })
|
||||||
trinket:EnableMouse(false)
|
trinket:EnableMouse(false)
|
||||||
|
trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket:SetFrameLevel(Gladdy.db.trinketFrameLevel)
|
||||||
|
|
||||||
trinket.texture = trinket:CreateTexture(nil, "BACKGROUND")
|
trinket.texture = trinket:CreateTexture(nil, "BACKGROUND")
|
||||||
trinket.texture:SetAllPoints(trinket)
|
trinket.texture:SetAllPoints(trinket)
|
||||||
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
|
||||||
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
trinket.texture.masked = true
|
||||||
|
|
||||||
trinket.cooldown = CreateFrame("Cooldown", nil, trinket, "CooldownFrameTemplate")
|
trinket.cooldown = CreateFrame("Cooldown", nil, trinket, "CooldownFrameTemplate")
|
||||||
trinket.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
|
trinket.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
|
||||||
trinket.cooldown:SetHideCountdownNumbers(true)
|
trinket.cooldown:SetHideCountdownNumbers(true)
|
||||||
|
trinket.cooldown:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.cooldown:SetFrameLevel(Gladdy.db.trinketFrameLevel + 1)
|
||||||
|
|
||||||
trinket.cooldownFrame = CreateFrame("Frame", nil, trinket)
|
trinket.cooldownFrame = CreateFrame("Frame", nil, trinket)
|
||||||
trinket.cooldownFrame:ClearAllPoints()
|
trinket.cooldownFrame:ClearAllPoints()
|
||||||
trinket.cooldownFrame:SetPoint("TOPLEFT", trinket, "TOPLEFT")
|
trinket.cooldownFrame:SetPoint("TOPLEFT", trinket, "TOPLEFT")
|
||||||
trinket.cooldownFrame:SetPoint("BOTTOMRIGHT", trinket, "BOTTOMRIGHT")
|
trinket.cooldownFrame:SetPoint("BOTTOMRIGHT", trinket, "BOTTOMRIGHT")
|
||||||
|
trinket.cooldownFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.cooldownFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 2)
|
||||||
|
|
||||||
trinket.cooldownFont = trinket.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
trinket.cooldownFont = trinket.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||||
trinket.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), 20, "OUTLINE")
|
trinket.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), 20, "OUTLINE")
|
||||||
@ -84,6 +125,9 @@ function Trinket:CreateFrame(unit)
|
|||||||
|
|
||||||
trinket.borderFrame = CreateFrame("Frame", nil, trinket)
|
trinket.borderFrame = CreateFrame("Frame", nil, trinket)
|
||||||
trinket.borderFrame:SetAllPoints(trinket)
|
trinket.borderFrame:SetAllPoints(trinket)
|
||||||
|
trinket.borderFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.borderFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 3)
|
||||||
|
|
||||||
trinket.texture.overlay = trinket.borderFrame:CreateTexture(nil, "OVERLAY")
|
trinket.texture.overlay = trinket.borderFrame:CreateTexture(nil, "OVERLAY")
|
||||||
trinket.texture.overlay:SetAllPoints(trinket)
|
trinket.texture.overlay:SetAllPoints(trinket)
|
||||||
trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle)
|
trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle)
|
||||||
@ -102,12 +146,29 @@ function Trinket:UpdateFrame(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local testAgain = false
|
||||||
|
|
||||||
local width, height = Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize
|
local width, height = Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor, Gladdy.db.trinketSize
|
||||||
|
|
||||||
|
trinket:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket:SetFrameLevel(Gladdy.db.trinketFrameLevel)
|
||||||
|
trinket.cooldown:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.cooldown:SetFrameLevel(Gladdy.db.trinketFrameLevel + 1)
|
||||||
|
trinket.cooldownFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.cooldownFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 2)
|
||||||
|
trinket.borderFrame:SetFrameStrata(Gladdy.db.trinketFrameStrata)
|
||||||
|
trinket.borderFrame:SetFrameLevel(Gladdy.db.trinketFrameLevel + 3)
|
||||||
|
|
||||||
trinket:SetWidth(width)
|
trinket:SetWidth(width)
|
||||||
trinket:SetHeight(height)
|
trinket:SetHeight(height)
|
||||||
trinket.cooldown:SetWidth(width - width/16)
|
if Gladdy.db.trinketIconZoomed then
|
||||||
trinket.cooldown:SetHeight(height - height/16)
|
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:ClearAllPoints()
|
||||||
trinket.cooldown:SetPoint("CENTER", trinket, "CENTER")
|
trinket.cooldown:SetPoint("CENTER", trinket, "CENTER")
|
||||||
trinket.cooldown.noCooldownCount = true -- Gladdy.db.trinketDisableOmniCC
|
trinket.cooldown.noCooldownCount = true -- Gladdy.db.trinketDisableOmniCC
|
||||||
@ -117,28 +178,81 @@ function Trinket:UpdateFrame(unit)
|
|||||||
trinket.texture:SetAllPoints(trinket)
|
trinket.texture:SetAllPoints(trinket)
|
||||||
|
|
||||||
trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle)
|
trinket.texture.overlay:SetTexture(Gladdy.db.trinketBorderStyle)
|
||||||
trinket.texture.overlay:SetVertexColor(Gladdy.db.trinketBorderColor.r, Gladdy.db.trinketBorderColor.g, Gladdy.db.trinketBorderColor.b, Gladdy.db.trinketBorderColor.a)
|
trinket.texture.overlay:SetVertexColor(Gladdy:SetColor(Gladdy.db.trinketBorderColor))
|
||||||
|
|
||||||
trinket:ClearAllPoints()
|
if Gladdy.db.trinketIconZoomed then
|
||||||
local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
if trinket.texture.masked then
|
||||||
if (Gladdy.db.classIconPos == "LEFT") then
|
trinket.texture:SetMask("")
|
||||||
if (Gladdy.db.trinketPos == "RIGHT") then
|
trinket.texture:SetTexCoord(0.1,0.9,0.1,0.9)
|
||||||
trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", margin, 0)
|
trinket.texture.masked = nil
|
||||||
else
|
|
||||||
trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].classIcon, "TOPLEFT", -Gladdy.db.padding, 0)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (Gladdy.db.trinketPos == "RIGHT") then
|
if not trinket.texture.masked then
|
||||||
trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].classIcon, "TOPRIGHT", Gladdy.db.padding, 0)
|
trinket.texture:SetMask("")
|
||||||
else
|
trinket.texture:SetTexCoord(0,1,0,1)
|
||||||
trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0)
|
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||||
|
trinket.texture.masked = true
|
||||||
|
if Gladdy.frame.testing then
|
||||||
|
testAgain = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (Gladdy.db.trinketEnabled == false) then
|
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"},
|
||||||
|
Gladdy.db.trinketSize * Gladdy.db.trinketWidthFactor,
|
||||||
|
Gladdy.db.trinketSize,
|
||||||
|
0,
|
||||||
|
0, "trinketEnabled")
|
||||||
|
end
|
||||||
|
|
||||||
|
trinket.cooldown:SetAlpha(Gladdy.db.trinketCooldownAlpha)
|
||||||
|
|
||||||
|
if Gladdy.db.trinketDisableCircle then
|
||||||
|
trinket.cooldown:Hide()
|
||||||
|
else
|
||||||
|
trinket.cooldown:Show()
|
||||||
|
end
|
||||||
|
|
||||||
|
if (not Gladdy.db.trinketEnabled) then
|
||||||
trinket:Hide()
|
trinket:Hide()
|
||||||
else
|
else
|
||||||
trinket:Show()
|
trinket:Show()
|
||||||
|
if testAgain then
|
||||||
|
Trinket:ResetUnit(unit)
|
||||||
|
Trinket:Test(unit)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -153,6 +267,7 @@ function Trinket:ResetUnit(unit)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trinket.itemID = nil
|
||||||
trinket.timeLeft = nil
|
trinket.timeLeft = nil
|
||||||
trinket.active = false
|
trinket.active = false
|
||||||
trinket.cooldown:Clear()
|
trinket.cooldown:Clear()
|
||||||
@ -164,13 +279,14 @@ function Trinket:Test(unit)
|
|||||||
if (not trinket) then
|
if (not trinket) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if (unit == "arena2" or unit == "arena3") then
|
if (unit == "arena1" or unit == "arena2") then
|
||||||
self:Used(unit, GetTime() * 1000, 120000)
|
Gladdy:SendMessage("TRINKET_USED", unit)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Trinket:JOINED_ARENA()
|
function Trinket:JOINED_ARENA()
|
||||||
self:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
|
self:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
|
||||||
|
self:RegisterEvent("ARENA_CROWD_CONTROL_SPELL_UPDATE")
|
||||||
self:SetScript("OnEvent", function(self, event, ...)
|
self:SetScript("OnEvent", function(self, event, ...)
|
||||||
if self[event] then
|
if self[event] then
|
||||||
self[event](self, ...)
|
self[event](self, ...)
|
||||||
@ -178,13 +294,52 @@ function Trinket:JOINED_ARENA()
|
|||||||
end)
|
end)
|
||||||
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()
|
function Trinket:ARENA_COOLDOWNS_UPDATE()
|
||||||
for i=1, Gladdy.curBracket do
|
for i=1, Gladdy.curBracket do
|
||||||
local unit = "arena" .. i
|
local unitID = "arena" .. i
|
||||||
local spellID, itemID, startTime, duration = C_PvP.GetArenaCrowdControlInfo(unit);
|
local spellID, itemID, startTime, duration = C_PvP.GetArenaCrowdControlInfo(unitID)
|
||||||
if (spellID) then
|
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
|
if (startTime ~= 0 and duration ~= 0) then
|
||||||
self:Used(unit, startTime, duration)
|
self:Used(unitID, startTime, duration)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -192,15 +347,17 @@ end
|
|||||||
|
|
||||||
function Trinket:Used(unit, startTime, duration)
|
function Trinket:Used(unit, startTime, duration)
|
||||||
local trinket = self.frames[unit]
|
local trinket = self.frames[unit]
|
||||||
if (not trinket) then
|
if (not trinket or not Gladdy.db.trinketEnabled) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if not trinket.active then
|
--if not trinket.active then
|
||||||
trinket.timeLeft = (startTime/1000.0 + duration/1000.0) - GetTime()
|
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
|
if not Gladdy.db.trinketDisableCircle then trinket.cooldown:SetCooldown(startTime/1000.0, duration/1000.0) end
|
||||||
trinket.active = true
|
trinket.active = true
|
||||||
Gladdy:SendMessage("TRINKET_USED", unit)
|
if Gladdy.db.trinketColored then
|
||||||
end
|
trinket:SetBackdropColor(Gladdy:SetColor(Gladdy.db.trinketColoredCd))
|
||||||
|
end
|
||||||
|
--end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Trinket:GetOptions()
|
function Trinket:GetOptions()
|
||||||
@ -216,22 +373,73 @@ function Trinket:GetOptions()
|
|||||||
desc = L["Enable trinket icon"],
|
desc = L["Enable trinket icon"],
|
||||||
order = 3,
|
order = 3,
|
||||||
}),
|
}),
|
||||||
|
trinketColored = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
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",
|
||||||
|
name = L["Colored trinket CD"],
|
||||||
|
desc = L["Color of the border"],
|
||||||
|
order = 5,
|
||||||
|
hasAlpha = true,
|
||||||
|
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||||
|
}),
|
||||||
|
trinketColoredNoCd = Gladdy:colorOption({
|
||||||
|
type = "color",
|
||||||
|
name = L["Colored trinket No CD"],
|
||||||
|
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.trinketGroup or not Gladdy.db.trinketEnabled
|
||||||
|
end,
|
||||||
|
}),
|
||||||
group = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
name = L["Frame"],
|
name = L["Frame"],
|
||||||
order = 4,
|
order = 5,
|
||||||
|
disabled = function() return not Gladdy.db.trinketEnabled end,
|
||||||
args = {
|
args = {
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
order = 1,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Size"],
|
name = L["Icon"],
|
||||||
order = 1,
|
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({
|
trinketSize = Gladdy:option({
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Size"],
|
name = L["Size"],
|
||||||
@ -296,13 +504,19 @@ function Trinket:GetOptions()
|
|||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Font"],
|
name = L["Font"],
|
||||||
order = 4,
|
order = 1,
|
||||||
},
|
},
|
||||||
|
trinketFontEnabled = Gladdy:option({
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Font Enabled"],
|
||||||
|
order = 2,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
trinketFont = Gladdy:option({
|
trinketFont = Gladdy:option({
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Font"],
|
name = L["Font"],
|
||||||
desc = L["Font of the cooldown"],
|
desc = L["Font of the cooldown"],
|
||||||
order = 11,
|
order = 3,
|
||||||
dialogControl = "LSM30_Font",
|
dialogControl = "LSM30_Font",
|
||||||
values = AceGUIWidgetLSMlists.font,
|
values = AceGUIWidgetLSMlists.font,
|
||||||
}),
|
}),
|
||||||
@ -310,7 +524,7 @@ function Trinket:GetOptions()
|
|||||||
type = "range",
|
type = "range",
|
||||||
name = L["Font scale"],
|
name = L["Font scale"],
|
||||||
desc = L["Scale of the font"],
|
desc = L["Scale of the font"],
|
||||||
order = 12,
|
order = 4,
|
||||||
min = 0.1,
|
min = 0.1,
|
||||||
max = 2,
|
max = 2,
|
||||||
step = 0.1,
|
step = 0.1,
|
||||||
@ -321,22 +535,30 @@ function Trinket:GetOptions()
|
|||||||
position = {
|
position = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["Position"],
|
name = L["Position"],
|
||||||
order = 4,
|
order = 5,
|
||||||
args = {
|
args = {
|
||||||
header = {
|
header = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Icon position"],
|
name = L["Icon position"],
|
||||||
order = 4,
|
order = 4,
|
||||||
},
|
},
|
||||||
trinketPos = Gladdy:option({
|
trinketXOffset = Gladdy:option({
|
||||||
type = "select",
|
type = "range",
|
||||||
name = L["Icon position"],
|
name = L["Horizontal offset"],
|
||||||
desc = L["This changes positions of the trinket"],
|
order = 23,
|
||||||
order = 21,
|
min = -800,
|
||||||
values = {
|
max = 800,
|
||||||
["LEFT"] = L["Left"],
|
step = 0.1,
|
||||||
["RIGHT"] = L["Right"],
|
width = "full",
|
||||||
},
|
}),
|
||||||
|
trinketYOffset = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Vertical offset"],
|
||||||
|
order = 24,
|
||||||
|
min = -800,
|
||||||
|
max = 800,
|
||||||
|
step = 0.1,
|
||||||
|
width = "full",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -365,7 +587,63 @@ function Trinket:GetOptions()
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
frameStrata = {
|
||||||
|
type = "group",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 6,
|
||||||
|
args = {
|
||||||
|
headerAuraLevel = {
|
||||||
|
type = "header",
|
||||||
|
name = L["Frame Strata and Level"],
|
||||||
|
order = 1,
|
||||||
|
},
|
||||||
|
trinketFrameStrata = Gladdy:option({
|
||||||
|
type = "select",
|
||||||
|
name = L["Frame Strata"],
|
||||||
|
order = 2,
|
||||||
|
values = Gladdy.frameStrata,
|
||||||
|
sorting = Gladdy.frameStrataSorting,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
trinketFrameLevel = Gladdy:option({
|
||||||
|
type = "range",
|
||||||
|
name = L["Frame Level"],
|
||||||
|
min = 0,
|
||||||
|
max = 500,
|
||||||
|
step = 1,
|
||||||
|
order = 3,
|
||||||
|
width = "full",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- LAGACY HANDLER
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
function Trinket:LegacySetPosition(trinket, unit)
|
||||||
|
if Gladdy.db.newLayout then
|
||||||
|
return Gladdy.db.newLayout
|
||||||
|
end
|
||||||
|
trinket:ClearAllPoints()
|
||||||
|
local margin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize) + Gladdy.db.padding
|
||||||
|
if (Gladdy.db.classIconPos == "LEFT") then
|
||||||
|
if (Gladdy.db.trinketPos == "RIGHT") then
|
||||||
|
trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].healthBar, "TOPRIGHT", margin, 0)
|
||||||
|
else
|
||||||
|
trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].classIcon, "TOPLEFT", -Gladdy.db.padding, 0)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (Gladdy.db.trinketPos == "RIGHT") then
|
||||||
|
trinket:SetPoint("TOPLEFT", Gladdy.buttons[unit].classIcon, "TOPRIGHT", Gladdy.db.padding, 0)
|
||||||
|
else
|
||||||
|
trinket:SetPoint("TOPRIGHT", Gladdy.buttons[unit].healthBar, "TOPLEFT", -margin, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,4 +1,4 @@
|
|||||||
local tonumber, tostring = tonumber, tostring
|
local tonumber, tostring, str_format = tonumber, tostring, string.format
|
||||||
|
|
||||||
local UnitName = UnitName
|
local UnitName = UnitName
|
||||||
local IsInGroup, IsInRaid = IsInGroup, IsInRaid
|
local IsInGroup, IsInRaid = IsInGroup, IsInRaid
|
||||||
@ -24,11 +24,11 @@ end
|
|||||||
function VersionCheck:JOINED_ARENA()
|
function VersionCheck:JOINED_ARENA()
|
||||||
self:RegisterComm("GladdyVCheck", VersionCheck.OnCommReceived)
|
self:RegisterComm("GladdyVCheck", VersionCheck.OnCommReceived)
|
||||||
if IsInRaid(LE_PARTY_CATEGORY_HOME) then
|
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
|
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
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -41,9 +41,9 @@ end
|
|||||||
|
|
||||||
function VersionCheck.OnCommReceived(prefix, message, distribution, sender)
|
function VersionCheck.OnCommReceived(prefix, message, distribution, sender)
|
||||||
if sender ~= VersionCheck.playerName then
|
if sender ~= VersionCheck.playerName then
|
||||||
local addonVersion = Gladdy.version_num
|
local addonVersion = str_format("%.2f", Gladdy.version_num)
|
||||||
message = tonumber(message)
|
local message_num = tonumber(message) or 0
|
||||||
if message and message <= Gladdy.version_num then
|
if message and message_num <= Gladdy.version_num then
|
||||||
--Gladdy:Print("Version", "\"".. addonVersion.."\"", "is up to date")
|
--Gladdy:Print("Version", "\"".. addonVersion.."\"", "is up to date")
|
||||||
else
|
else
|
||||||
Gladdy:Warn("Current version", "\"".. addonVersion.."\"", "is outdated. Most recent version is", "\"".. message.."\"")
|
Gladdy:Warn("Current version", "\"".. addonVersion.."\"", "is outdated. Most recent version is", "\"".. message.."\"")
|
||||||
|
@ -4,74 +4,17 @@ local L = Gladdy.L
|
|||||||
local XiconProfiles = Gladdy:NewModule("XiconProfiles", nil, {
|
local XiconProfiles = Gladdy:NewModule("XiconProfiles", nil, {
|
||||||
})
|
})
|
||||||
|
|
||||||
function XiconProfiles:ApplyKlimp()
|
local function applyProfile(profileString)
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKlimpProfile())
|
local deserialized = Gladdy.modules["Export Import"]:Decode(profileString)
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyKnall()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKnallProfile())
|
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyClassic()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfile())
|
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyClassicNoPet()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfileNoPet())
|
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyBlizz()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetBlizzardProfile())
|
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyRukk()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetRukkProfile())
|
|
||||||
if deserialized then
|
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
|
||||||
end
|
|
||||||
Gladdy:Reset()
|
|
||||||
Gladdy:HideFrame()
|
|
||||||
Gladdy:ToggleFrame(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
function XiconProfiles:ApplyMir()
|
|
||||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetMirProfile())
|
|
||||||
if deserialized then
|
if deserialized then
|
||||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
||||||
end
|
end
|
||||||
Gladdy:Reset()
|
Gladdy:Reset()
|
||||||
Gladdy:HideFrame()
|
Gladdy:HideFrame()
|
||||||
Gladdy:ToggleFrame(3)
|
Gladdy:ToggleFrame(3)
|
||||||
|
Gladdy.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"]
|
||||||
|
Gladdy.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"]
|
||||||
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||||
end
|
end
|
||||||
|
|
||||||
function XiconProfiles:GetOptions()
|
function XiconProfiles:GetOptions()
|
||||||
@ -85,7 +28,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyBlizz()
|
applyProfile(Gladdy:GetBlizzardProfile())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Blizzard " .. L["Profile"],
|
desc = "Blizzard " .. L["Profile"],
|
||||||
@ -104,7 +47,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyClassic()
|
applyProfile(Gladdy:GetClassicProfile())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Classic " .. L["Profile"],
|
desc = "Classic " .. L["Profile"],
|
||||||
@ -123,7 +66,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyClassicNoPet()
|
applyProfile(Gladdy:GetClassicProfileNoPet())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Classic " .. L["Profile"] .. L[" No Pet"],
|
desc = "Classic " .. L["Profile"] .. L[" No Pet"],
|
||||||
@ -142,7 +85,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyKnall()
|
applyProfile(Gladdy:GetKnallProfile())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Knall's " .. L["Profile"],
|
desc = "Knall's " .. L["Profile"],
|
||||||
@ -161,7 +104,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyKlimp()
|
applyProfile(Gladdy:GetKlimpProfile())
|
||||||
end,
|
end,
|
||||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Klimp1.blp",
|
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Klimp1.blp",
|
||||||
imageWidth = 350,
|
imageWidth = 350,
|
||||||
@ -180,7 +123,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyRukk()
|
applyProfile(Gladdy:GetRukkProfile())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Rukk1's " .. L["Profile"],
|
desc = "Rukk1's " .. L["Profile"],
|
||||||
@ -199,7 +142,7 @@ function XiconProfiles:GetOptions()
|
|||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
XiconProfiles:ApplyMir()
|
applyProfile(Gladdy:GetMirProfile())
|
||||||
end,
|
end,
|
||||||
name = " ",
|
name = " ",
|
||||||
desc = "Mir's " .. L["Profile"],
|
desc = "Mir's " .. L["Profile"],
|
||||||
@ -209,5 +152,24 @@ function XiconProfiles:GetOptions()
|
|||||||
width = "full",
|
width = "full",
|
||||||
order = 15,
|
order = 15,
|
||||||
},
|
},
|
||||||
|
headerProfileMirEdited = {
|
||||||
|
type = "header",
|
||||||
|
name = "Mir's " .. L["Profile"] .. " edited",
|
||||||
|
order = 16,
|
||||||
|
},
|
||||||
|
mirProfileEdited = {
|
||||||
|
type = "execute",
|
||||||
|
func = function()
|
||||||
|
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||||
|
applyProfile(Gladdy:GetMirEditedProfile())
|
||||||
|
end,
|
||||||
|
name = " ",
|
||||||
|
desc = "Mir's " .. L["Profile"],
|
||||||
|
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Mir1_edited.blp",
|
||||||
|
imageWidth = 350,
|
||||||
|
imageHeight = 175,
|
||||||
|
width = "full",
|
||||||
|
order = 17,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
106
Options.lua
106
Options.lua
@ -1,9 +1,8 @@
|
|||||||
local type, pairs, tinsert, tsort = type, pairs, table.insert, table.sort
|
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 ceil, floor = ceil, floor
|
||||||
local ReloadUI = ReloadUI
|
local ReloadUI = ReloadUI
|
||||||
|
|
||||||
local InterfaceOptionsFrame_OpenToFrame = InterfaceOptionsFrame_OpenToFrame
|
|
||||||
local GetSpellInfo = GetSpellInfo
|
local GetSpellInfo = GetSpellInfo
|
||||||
local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
|
local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
|
||||||
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
||||||
@ -31,7 +30,7 @@ function Gladdy:FormatTimer(fontString, timeLeft, milibreakpoint, showSeconds)
|
|||||||
else
|
else
|
||||||
if time >= 60 then
|
if time >= 60 then
|
||||||
if showSeconds 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
|
else
|
||||||
fontString:SetText(ceil(ceil(time / 60)) .. "m")
|
fontString:SetText(ceil(ceil(time / 60)) .. "m")
|
||||||
end
|
end
|
||||||
@ -47,15 +46,17 @@ Gladdy.defaults = {
|
|||||||
hideBlizzard = "arena",
|
hideBlizzard = "arena",
|
||||||
x = 0,
|
x = 0,
|
||||||
y = 0,
|
y = 0,
|
||||||
growUp = false,
|
|
||||||
growDirection = "BOTTOM",
|
growDirection = "BOTTOM",
|
||||||
|
growMiddle = false,
|
||||||
frameScale = 1,
|
frameScale = 1,
|
||||||
padding = 1,
|
pixelPerfect = false,
|
||||||
barWidth = 180,
|
barWidth = 180,
|
||||||
bottomMargin = 2,
|
bottomMargin = 2,
|
||||||
statusbarBorderOffset = 6,
|
statusbarBorderOffset = 6,
|
||||||
timerFormat = Gladdy.TIMER_FORMAT.tenths,
|
timerFormat = Gladdy.TIMER_FORMAT.tenths,
|
||||||
backgroundColor = {r = 0, g = 0, b = 0, a = 0},
|
backgroundColor = {r = 0, g = 0, b = 0, a = 0},
|
||||||
|
newLayout = false,
|
||||||
|
showMover = true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +104,13 @@ function Gladdy:option(params)
|
|||||||
return defaults
|
return defaults
|
||||||
end
|
end
|
||||||
|
|
||||||
|
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)
|
function Gladdy:colorOption(params)
|
||||||
local defaults = {
|
local defaults = {
|
||||||
get = function(info)
|
get = function(info)
|
||||||
@ -214,19 +222,45 @@ function Gladdy:SetupOptions()
|
|||||||
get = getOpt,
|
get = getOpt,
|
||||||
set = setOpt,
|
set = setOpt,
|
||||||
args = {
|
args = {
|
||||||
test = {
|
lock = {
|
||||||
order = 1,
|
order = 1,
|
||||||
width = 0.7,
|
width = 0.7,
|
||||||
|
name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"],
|
||||||
|
desc = L["Toggle if frame can be moved"],
|
||||||
|
type = "execute",
|
||||||
|
func = function()
|
||||||
|
Gladdy.db.locked = not Gladdy.db.locked
|
||||||
|
Gladdy:UpdateFrame()
|
||||||
|
self.options.args.lock.name = Gladdy.db.locked and L["Unlock frame"] or L["Lock frame"]
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
showMover = {
|
||||||
|
order = 2,
|
||||||
|
width = 0.7,
|
||||||
|
name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"],
|
||||||
|
desc = L["Toggle to show Mover Frames"],
|
||||||
|
type = "execute",
|
||||||
|
func = function()
|
||||||
|
Gladdy.db.showMover = not Gladdy.db.showMover
|
||||||
|
Gladdy:UpdateFrame()
|
||||||
|
self.options.args.showMover.name = Gladdy.db.showMover and L["Hide Mover"] or L["Show Mover"]
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
test = {
|
||||||
|
order = 2,
|
||||||
|
width = 0.7,
|
||||||
name = L["Test"],
|
name = L["Test"],
|
||||||
|
desc = L["Show Test frames"],
|
||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy:ToggleFrame(3)
|
Gladdy:ToggleFrame(3)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
hide = {
|
hide = {
|
||||||
order = 2,
|
order = 3,
|
||||||
width = 0.7,
|
width = 0.7,
|
||||||
name = L["Hide"],
|
name = L["Hide"],
|
||||||
|
desc = L["Hide frames"],
|
||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
Gladdy:Reset()
|
Gladdy:Reset()
|
||||||
@ -234,19 +268,20 @@ function Gladdy:SetupOptions()
|
|||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
reload = {
|
reload = {
|
||||||
order = 3,
|
order = 4,
|
||||||
width = 0.7,
|
width = 0.7,
|
||||||
name = L["ReloadUI"],
|
name = L["ReloadUI"],
|
||||||
|
desc = L["Reloads the UI"],
|
||||||
type = "execute",
|
type = "execute",
|
||||||
func = function()
|
func = function()
|
||||||
ReloadUI()
|
ReloadUI()
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
version = {
|
version = {
|
||||||
order = 4,
|
order = 5,
|
||||||
width = 1,
|
width = 1,
|
||||||
type = "description",
|
type = "description",
|
||||||
name = " Gladdy v" .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
name = " " .. Gladdy.version
|
||||||
},
|
},
|
||||||
general = {
|
general = {
|
||||||
type = "group",
|
type = "group",
|
||||||
@ -255,12 +290,6 @@ function Gladdy:SetupOptions()
|
|||||||
childGroups = "tab",
|
childGroups = "tab",
|
||||||
order = 5,
|
order = 5,
|
||||||
args = {
|
args = {
|
||||||
locked = {
|
|
||||||
type = "toggle",
|
|
||||||
name = L["Lock frame"],
|
|
||||||
desc = L["Toggle if frame can be moved"],
|
|
||||||
order = 1,
|
|
||||||
},
|
|
||||||
growDirection = {
|
growDirection = {
|
||||||
type = "select",
|
type = "select",
|
||||||
name = L["Grow Direction"],
|
name = L["Grow Direction"],
|
||||||
@ -285,7 +314,7 @@ function Gladdy:SetupOptions()
|
|||||||
group = {
|
group = {
|
||||||
type = "group",
|
type = "group",
|
||||||
name = L["General"],
|
name = L["General"],
|
||||||
order = 5,
|
order = 6,
|
||||||
childGroups = "tree",
|
childGroups = "tree",
|
||||||
args = {
|
args = {
|
||||||
frameGeneral = {
|
frameGeneral = {
|
||||||
@ -296,31 +325,35 @@ function Gladdy:SetupOptions()
|
|||||||
headerFrame = {
|
headerFrame = {
|
||||||
type = "header",
|
type = "header",
|
||||||
name = L["Frame General"],
|
name = L["Frame General"],
|
||||||
|
order = 2,
|
||||||
|
},
|
||||||
|
growMiddle = {
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Grow Middle"],
|
||||||
|
desc = L["Frames expand along a centric anchor"],
|
||||||
order = 3,
|
order = 3,
|
||||||
},
|
},
|
||||||
|
pixelPerfect = {
|
||||||
|
type = "toggle",
|
||||||
|
name = L["Pixel Perfect Scale"],
|
||||||
|
desc = L["Enables Pixel Perfect Scale - disables manual "].. L["Frame scale"],
|
||||||
|
order = 4,
|
||||||
|
},
|
||||||
frameScale = {
|
frameScale = {
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Frame scale"],
|
name = L["Frame scale"],
|
||||||
desc = L["Scale of the frame"],
|
desc = L["Scale of the frame"],
|
||||||
order = 4,
|
disabled = function() return Gladdy.db.pixelPerfect end,
|
||||||
|
order = 5,
|
||||||
min = .1,
|
min = .1,
|
||||||
max = 2,
|
max = 2,
|
||||||
step = .01,
|
step = .01,
|
||||||
},
|
},
|
||||||
padding = {
|
|
||||||
type = "range",
|
|
||||||
name = L["Frame padding"],
|
|
||||||
desc = L["Padding of the frame"],
|
|
||||||
order = 5,
|
|
||||||
min = 0,
|
|
||||||
max = 20,
|
|
||||||
step = 1,
|
|
||||||
},
|
|
||||||
barWidth = {
|
barWidth = {
|
||||||
type = "range",
|
type = "range",
|
||||||
name = L["Frame width"],
|
name = L["Frame width"],
|
||||||
desc = L["Width of the bars"],
|
desc = L["Width of the bars"],
|
||||||
order = 6,
|
order = 7,
|
||||||
min = 10,
|
min = 10,
|
||||||
max = 500,
|
max = 500,
|
||||||
step = 5,
|
step = 5,
|
||||||
@ -329,7 +362,7 @@ function Gladdy:SetupOptions()
|
|||||||
type = "range",
|
type = "range",
|
||||||
name = L["Margin"],
|
name = L["Margin"],
|
||||||
desc = L["Margin between each button"],
|
desc = L["Margin between each button"],
|
||||||
order = 7,
|
order = 8,
|
||||||
min = -200,
|
min = -200,
|
||||||
max = 200,
|
max = 200,
|
||||||
step = 1,
|
step = 1,
|
||||||
@ -338,7 +371,7 @@ function Gladdy:SetupOptions()
|
|||||||
type = "color",
|
type = "color",
|
||||||
name = L["Background color"],
|
name = L["Background color"],
|
||||||
desc = L["Background Color of the frame"],
|
desc = L["Background Color of the frame"],
|
||||||
order = 8,
|
order = 9,
|
||||||
hasAlpha = true,
|
hasAlpha = true,
|
||||||
get = getColorOpt,
|
get = getColorOpt,
|
||||||
set = setColorOpt,
|
set = setColorOpt,
|
||||||
@ -765,7 +798,7 @@ function Gladdy:SetupOptions()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:ShowOptions()
|
function Gladdy:ShowOptions()
|
||||||
InterfaceOptionsFrame_OpenToFrame("Gladdy")
|
LibStub("AceConfigDialog-3.0"):Open("Gladdy")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Gladdy:GetAuras(auraType)
|
function Gladdy:GetAuras(auraType)
|
||||||
@ -901,6 +934,17 @@ function Gladdy:GetAuras(auraType)
|
|||||||
end
|
end
|
||||||
return args
|
return args
|
||||||
end
|
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.druid.args = assignForClass("DRUID")
|
||||||
spells.hunter.args = assignForClass("HUNTER")
|
spells.hunter.args = assignForClass("HUNTER")
|
||||||
spells.mage.args = assignForClass("MAGE")
|
spells.mage.args = assignForClass("MAGE")
|
||||||
|
210
README.md
210
README.md
@ -1,7 +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
|
||||||
## [v1.22-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.22-Release/Gladdy_TBC-Classic_v1.22-Release.zip)
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [v2.27-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v2.27-Release/Gladdy_Classic_v2.27-Release.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
|
###### <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
|
||||||
|
|
||||||
@ -31,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)
|
- **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)
|
- **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**)
|
- **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)
|
- **Trinket** (tracks trinket usage)
|
||||||
- **VersionCheck** (checks if you use an older version that your teammate)
|
- **VersionCheck** (checks if you use an older version that your teammate)
|
||||||
- **XiconProfiles** (predefined profiles to start your configuration from)
|
- **XiconProfiles** (predefined profiles to start your configuration from)
|
||||||
@ -49,6 +53,18 @@ The goal is to make Gladdy highly configurable in it's appearance. Everything ca
|
|||||||
<img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/sample2.jpg" align="right" width="48.5%">
|
<img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/sample2.jpg" align="right" width="48.5%">
|
||||||
<img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/sample3.png" width="48.5%">
|
<img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/sample3.png" width="48.5%">
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
- [XyzKangUI](https://github.com/XyzKangUI)
|
||||||
|
- [ManneN1](https://github.com/ManneN1)
|
||||||
|
- [AlexFolland](https://github.com/AlexFolland)
|
||||||
|
- [dfherr](https://github.com/dfherr)
|
||||||
|
- [miraage](https://github.com/miraage)
|
||||||
|
- [veiz](https://github.com/veiz)
|
||||||
|
- [Flamanis](https://github.com/Flamanis)
|
||||||
|
|
||||||
|
Thank you!
|
||||||
|
|
||||||
## Special Thanks
|
## Special Thanks
|
||||||
|
|
||||||
- **miraage** - the origininal author of Gladdy! Your work set the foundation for this edit. Thanks!
|
- **miraage** - the origininal author of Gladdy! Your work set the foundation for this edit. Thanks!
|
||||||
@ -59,9 +75,197 @@ The goal is to make Gladdy highly configurable in it's appearance. Everything ca
|
|||||||
- **Klimp** (thanks for all the suggestions and active feedback)
|
- **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)
|
- **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)
|
- **Hydra** (thanks for constructive feedback and suggestions)
|
||||||
|
- **Xyz** (thanks for suggestions and extensive testing <3)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|
||||||
|
### v2.27-Release
|
||||||
|
- fix TotemPlates interfering with NeatPlates
|
||||||
|
|
||||||
|
### v2.26-Release
|
||||||
|
- fix TotemPlates interfering with Plater (thanks again [Flamanis](https://github.com/Flamanis))
|
||||||
|
|
||||||
|
### v2.25-Release
|
||||||
|
- fix TotemPlates interfering with ElvUI (thanks [Flamanis](https://github.com/Flamanis))
|
||||||
|
|
||||||
|
### v2.24-Release
|
||||||
|
- fix for WotLK v30402 (update libs)
|
||||||
|
- update DRList
|
||||||
|
- fix taint issue on first load up
|
||||||
|
|
||||||
|
### v2.23-Release
|
||||||
|
- fix for WotLK v30401 (update libs + layers + masks)
|
||||||
|
|
||||||
|
### v2.22-Release
|
||||||
|
- fixed unwanted committed changes to LibCustomGlow
|
||||||
|
|
||||||
|
### v2.21-Release
|
||||||
|
- **Cooldowns**
|
||||||
|
- glows minor fix again...
|
||||||
|
- more tracking
|
||||||
|
- **Pets**
|
||||||
|
- death detection improved
|
||||||
|
- detection improved
|
||||||
|
|
||||||
|
### v2.20-Release
|
||||||
|
- **Cooldowns**
|
||||||
|
- glow changed to PixelGlow
|
||||||
|
- glow color configurable
|
||||||
|
- improved tracking
|
||||||
|
- feign death cd tracking
|
||||||
|
- fixed Elemental Mastery and Presence of Mind tracking
|
||||||
|
- **Auras**
|
||||||
|
- improved **Aura** tracking
|
||||||
|
- stealthed unit **Aura** tracking improved
|
||||||
|
- fixed Berserking Wrath
|
||||||
|
- **Totemplates**
|
||||||
|
- ElvUI fix
|
||||||
|
- fix ManaSpringTotem
|
||||||
|
- fix Paladin **SpecDetection**
|
||||||
|
- fix DRList conflict with Diminish
|
||||||
|
- minor bugfixes/improvements
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
Thank you for the great feedback and active contribution.
|
||||||
|
|
||||||
|
***Attention: Once you install this version it will drastically change your current profile! You can't go back to an earlier version. Either back up your WTF or export your Profile before updating!***
|
||||||
|
|
||||||
|
**Here is a list of all changes:**
|
||||||
|
- **major release version set to v2**
|
||||||
|
- this will mean, that export strings will still be backwards compatible, but not forward (Gladdy v2.x String can't be imported into Gladdy v1.x but vice versa)
|
||||||
|
- **big overhaul of positioning elements added! All elements besides HP and PowerBar can be moved separately**
|
||||||
|
- added Mover Frames for Auras, Interrupts, (De)Buffs, CastBar, ClassIcon, CombatIndicator, Cooldowns, DRs, Pets, Racial, Trinket
|
||||||
|
- this will hopefully make configuration a lot easier
|
||||||
|
- all visible elements' FrameStrata and FrameLevel can be configured (overlap frames how you want it)
|
||||||
|
- **SpecDetection:**
|
||||||
|
- fixed spec detection for Paladins
|
||||||
|
- added following spells for better spec detection:
|
||||||
|
- Expose Weakness (Survival Hunter)
|
||||||
|
- Slow (Arcane Mage)
|
||||||
|
- Improved Blink (Arcane Mage)
|
||||||
|
- Vindication (Retribution Paladin)
|
||||||
|
- Holy Shield (Protection Paladin)
|
||||||
|
- Vampiric Embrace (Shadow Priest)
|
||||||
|
- Blade Flurry (Combat Rogue)
|
||||||
|
- Unleashed Rage (Enhancement Shaman)
|
||||||
|
- Flurry (Enhancement Shaman)
|
||||||
|
- Shamanistic Rage (Enhancement Shaman)
|
||||||
|
- Healing Way (Restoration Shaman)
|
||||||
|
- Totem of Wrath (Elemental Shaman)
|
||||||
|
- Dark Pact (Affliction Warlock)
|
||||||
|
- Conflagrate (Destruction Warlock)
|
||||||
|
- Shield Slam (Protection Warrior)
|
||||||
|
- **Cooldowns:**
|
||||||
|
- added Fear Ward and Fear Ward Cooldown Detection in case it was used before arena
|
||||||
|
- added following cooldowns:
|
||||||
|
- Scare Beast (Hunter)
|
||||||
|
- Feign Death (Hunter)
|
||||||
|
- Viper Sting (Hunter)
|
||||||
|
- Flare (Hunter)
|
||||||
|
- Fear Ward (Priest)
|
||||||
|
- Shadow Word: Death (Priest)
|
||||||
|
- Evocation (Mage)
|
||||||
|
- Grounding Totem (Shaman)
|
||||||
|
- Spell Lock (Warlock)
|
||||||
|
- Devour Magic (Warlock)
|
||||||
|
- Intercept (Warrior)
|
||||||
|
- **Auras/Interrupts:**
|
||||||
|
- can now be detached from ClassIcon and positioned/scaled anywhere separately
|
||||||
|
- added Auras:
|
||||||
|
- Scare Beast (Hunter)
|
||||||
|
- Fear Ward (Priest)
|
||||||
|
- **Shadowsight:**
|
||||||
|
- reset timer when buff was taken
|
||||||
|
- add a configurable 2nd timer or show one timer with the closest CD
|
||||||
|
- **CastBar Icon can be enabled/disabled**
|
||||||
|
- **Trinket solid color option added**
|
||||||
|
- color for Trinket on/off CD can be configured (red/green by default)
|
||||||
|
- **fixed some DR-categories** (Hibernate / Chastice / Dragonsbreath / ImpConcussiveShot / Counterattack)
|
||||||
|
- **Pixel Perfect option added** (makes your Gladdy Frames pixel perfect - no more weird scaling interferences)
|
||||||
|
- **Pets can be grouped** (not perfect yet, but a first step)
|
||||||
|
- **added DR-Level Text** (thanks https://github.com/ManneN1)
|
||||||
|
- **added zhCN Locale** (thanks https://github.com/veiz)
|
||||||
|
- **ClassIcon can be disabled**
|
||||||
|
- **add interrupt announcement**
|
||||||
|
- **detect SpellLock and Devour Magic cooldowns properly**
|
||||||
|
- **minor fixes:**
|
||||||
|
- fixed reloading during arena to properly show all frames
|
||||||
|
- fix grow up positioning
|
||||||
|
|
||||||
### v1.22-Release
|
### v1.22-Release
|
||||||
- fixed import for some localizations not working
|
- fixed import for some localizations not working
|
||||||
- added cooldown number alpha configurations for Auras, BuffsDebuffs, Cooldowns, Diminishings, Racial & Trinket
|
- added cooldown number alpha configurations for Auras, BuffsDebuffs, Cooldowns, Diminishings, Racial & Trinket
|
||||||
|
261
Util.lua
Normal file
261
Util.lua
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
local pairs, ipairs = pairs, ipairs
|
||||||
|
local select = select
|
||||||
|
local type = type
|
||||||
|
local floor = math.floor
|
||||||
|
local str_find, str_gsub, str_sub, str_format = string.find, string.gsub, string.sub, string.format
|
||||||
|
local tinsert = 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
|
||||||
|
|
||||||
|
function Gladdy:ShallowCopy(table)
|
||||||
|
local copy
|
||||||
|
if type(table) == 'table' then
|
||||||
|
copy = {}
|
||||||
|
for k,v in pairs(table) do
|
||||||
|
copy[k] = v
|
||||||
|
end
|
||||||
|
else -- number, string, boolean, etc
|
||||||
|
copy = table
|
||||||
|
end
|
||||||
|
return copy
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:DeepCopy(table)
|
||||||
|
local copy
|
||||||
|
if type(table) == 'table' then
|
||||||
|
copy = {}
|
||||||
|
for k,v in pairs(table) do
|
||||||
|
if type(v) == 'table' then
|
||||||
|
copy[k] = self:DeepCopy(v)
|
||||||
|
else -- number, string, boolean, etc
|
||||||
|
copy[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else -- number, string, boolean, etc
|
||||||
|
copy = table
|
||||||
|
end
|
||||||
|
return copy
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:AddEntriesToTable(table, entries)
|
||||||
|
for k,v in pairs(entries) do
|
||||||
|
if not table[k] then
|
||||||
|
table[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:GetExceptionSpellName(spellID)
|
||||||
|
for k,v in pairs(Gladdy.exceptionNames) do
|
||||||
|
if k == spellID and Gladdy:GetImportantAuras()[v] and Gladdy:GetImportantAuras()[v].altName then
|
||||||
|
return Gladdy:GetImportantAuras()[v].altName
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return select(1, GetSpellInfo(spellID))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function toHex(color)
|
||||||
|
if not color or not color.r or not color.g or not color.b then
|
||||||
|
return "000000"
|
||||||
|
end
|
||||||
|
return str_format("%.2x%.2x%.2x", floor(color.r * 255), floor(color.g * 255), floor(color.b * 255))
|
||||||
|
end
|
||||||
|
function Gladdy:SetTextColor(text, color)
|
||||||
|
return "|cff" .. toHex(color) .. text or "" .. "|r"
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:ColorAsArray(color)
|
||||||
|
return {color.r, color.g, color.b, color.a}
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gladdy:Dump(table, space)
|
||||||
|
if type(table) ~= "table" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not space then
|
||||||
|
space = ""
|
||||||
|
end
|
||||||
|
for k,v in pairs(table) do
|
||||||
|
Gladdy:Print(space .. k .. " - ", v)
|
||||||
|
if type(v) == "table" then
|
||||||
|
Gladdy:Dump(v, space .. " ")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -12,7 +12,8 @@
|
|||||||
<Include file="libs\LibDeflate\lib.xml"/>
|
<Include file="libs\LibDeflate\lib.xml"/>
|
||||||
<Include file="libs\LibSharedMedia-3.0\lib.xml"/>
|
<Include file="libs\LibSharedMedia-3.0\lib.xml"/>
|
||||||
<Include file="libs\AceGUI-3.0-SharedMediaWidgets\widget.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\LibClassAuras-1.0\lib.xml"/>
|
||||||
<Include file="libs\LibSpellRange-1.0\lib.xml"/>
|
<Include file="libs\LibSpellRange-1.0\lib.xml"/>
|
||||||
|
<Include file="libs\LibCustomGlow-1.0\LibCustomGlow-1.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
Loading…
Reference in New Issue
Block a user