Compare commits
164 Commits
v1.07-Beta
...
v1.20-Rele
Author | SHA1 | Date | |
---|---|---|---|
2c845547a4 | |||
b861091d44 | |||
c3a1555932 | |||
f36883df31 | |||
f9b1ac9c51 | |||
b6d243b8c0 | |||
ce5c8fc5a0 | |||
60c823fa07 | |||
f1e1ee4e0b | |||
d2884e777a | |||
b651eb39ce | |||
73b01c28d7 | |||
dd75f267f4 | |||
7108598603 | |||
6b4c35c66b | |||
75d4dfe9fe | |||
776464f551 | |||
dd8a35857d | |||
1c93e4ce4d | |||
e2d0af1e2b | |||
9e81455ec5 | |||
fad4321bf6 | |||
9c8c78bb83 | |||
bb7b820cbb | |||
890cf80531 | |||
f7f703d33a | |||
a7cdacb55d | |||
237130e3ce | |||
2c73188e15 | |||
5da6d1d7c9 | |||
8a17592842 | |||
51cd2b7311 | |||
720e5b63ec | |||
74753e327c | |||
0d5b5644a9 | |||
d53f89c6d4 | |||
79371b72b0 | |||
b73bc33630 | |||
4c239cd599 | |||
6de5a60309 | |||
31360bf695 | |||
599fde6581 | |||
382e5c3948 | |||
582ca88b59 | |||
aa53bfc241 | |||
bd2c15088d | |||
d2da0a22ae | |||
915c213eb5 | |||
0cfba040f1 | |||
2a5a0fa394 | |||
a1387f8ecd | |||
e7a83d61f3 | |||
90b146e433 | |||
61f79adda2 | |||
9b8c6a1426 | |||
d44ac29f43 | |||
751e84c61d | |||
f92b3a4964 | |||
c2fec39202 | |||
9f1bda3e80 | |||
fdeea258be | |||
960a98d244 | |||
82ec1460f8 | |||
23b9e2dfae | |||
755a3e52b5 | |||
5767bc7ae3 | |||
b1070d070a | |||
5f4ab71a5a | |||
c43228f0b9 | |||
b54ed1cda1 | |||
19d0460501 | |||
cb6e519afe | |||
d9f0c1491a | |||
17a983fad6 | |||
4e0ea70bfa | |||
da54c659bc | |||
6be94215b9 | |||
964a4b4f88 | |||
03a55395b8 | |||
8409ac1b96 | |||
d653c76e37 | |||
984c22a861 | |||
ede4b93ad8 | |||
ca211e047f | |||
8121cf3c6c | |||
5b348b760c | |||
6a66bcb0ca | |||
50716f3f63 | |||
9dab6b7299 | |||
43bd5af2cc | |||
9780922fec | |||
2c21a6e770 | |||
88b769c12d | |||
4ff3ed487b | |||
92dc847909 | |||
fa01d38989 | |||
326af8e796 | |||
af17c7e1b9 | |||
4148e775a9 | |||
0d7bd3c688 | |||
2988177128 | |||
b17e58f558 | |||
9edb632efc | |||
56de506ef1 | |||
6c471a0fad | |||
6f5cb0498b | |||
df2ff4c9e7 | |||
b03b05b2bb | |||
09a07c7201 | |||
152573124f | |||
3378cfcd0b | |||
53228a0e39 | |||
cbf8c1a13b | |||
993de572cd | |||
f0c0286708 | |||
20a654c810 | |||
c5f2ee1eff | |||
4eda8cea8f | |||
fb953530b6 | |||
bc1a617b6e | |||
505154e699 | |||
5776dde270 | |||
0b9c33b867 | |||
d7f31dbdab | |||
b363df73a3 | |||
54e0aa4a47 | |||
c970fe576f | |||
2be103fb88 | |||
4cd4ff982c | |||
9d26713dc1 | |||
db1e3da6fc | |||
5cad55e91a | |||
5972ef8c05 | |||
779e81727c | |||
0c4409fe16 | |||
85f63e590b | |||
da5a8ea67d | |||
4f370f4e63 | |||
06884ae043 | |||
7b0bf921c4 | |||
a83c1ad0c2 | |||
8ba1f84047 | |||
4721324a2a | |||
51e484eadd | |||
46f379c1e4 | |||
5e42a9b51f | |||
df58544f6e | |||
43518055f0 | |||
9ef174e290 | |||
a60119caa2 | |||
1546e3db6e | |||
82a9a014e4 | |||
a9a1a77dd3 | |||
084fad0074 | |||
2b9e219839 | |||
ba8ea87863 | |||
f498a0dde1 | |||
673dc72b3b | |||
6da33b6c68 | |||
0c6cae0b04 | |||
ded321e772 | |||
7015bb989e | |||
eaeccf5595 | |||
c7d07c62ee |
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,3 +6,4 @@ BuffLib
|
||||
Ace-Libs
|
||||
Images_Raw
|
||||
Gladdy_old
|
||||
Gladdy_TW
|
31
Bindings.xml
Normal file
31
Bindings.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<Bindings>
|
||||
<Binding name="GLADDYBUTTON1_LEFT" header="GLADDY" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON2_LEFT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON3_LEFT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON4_LEFT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON5_LEFT" Category="Gladdy"/>
|
||||
|
||||
<Binding name="GLADDYBUTTON1_RIGHT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON2_RIGHT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON3_RIGHT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON4_RIGHT" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON5_RIGHT" Category="Gladdy"/>
|
||||
|
||||
<Binding name="GLADDYBUTTON1_MIDDLE" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON2_MIDDLE" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON3_MIDDLE" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON4_MIDDLE" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON5_MIDDLE" Category="Gladdy"/>
|
||||
|
||||
<Binding name="GLADDYBUTTON1_BUTTON4" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON2_BUTTON4" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON3_BUTTON4" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON4_BUTTON4" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON5_BUTTON4" Category="Gladdy"/>
|
||||
|
||||
<Binding name="GLADDYBUTTON1_BUTTON5" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON2_BUTTON5" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON3_BUTTON5" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON4_BUTTON5" Category="Gladdy"/>
|
||||
<Binding name="GLADDYBUTTON5_BUTTON5" Category="Gladdy"/>
|
||||
</Bindings>
|
266
Constants.lua
266
Constants.lua
@ -1,13 +1,19 @@
|
||||
local tbl_sort, select = table.sort, select
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local GetItemInfo = GetItemInfo
|
||||
local GetLocale = GetLocale
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
||||
|
||||
function Gladdy:GetSpecBuffs()
|
||||
return {
|
||||
Gladdy.CLASSES = {"MAGE", "PRIEST", "DRUID", "SHAMAN", "PALADIN", "WARLOCK", "WARRIOR", "HUNTER", "ROGUE"}
|
||||
tbl_sort(Gladdy.CLASSES)
|
||||
Gladdy.RACES = {"Scourge", "BloodElf", "Tauren", "Orc", "Troll", "NightElf", "Draenei", "Human", "Gnome", "Dwarf"}
|
||||
tbl_sort(Gladdy.RACES)
|
||||
|
||||
local specBuffs = {
|
||||
-- DRUID
|
||||
[GetSpellInfo(45283)] = L["Restoration"], -- Natural Perfection
|
||||
[GetSpellInfo(16880)] = L["Restoration"], -- Nature's Grace; Dreamstate spec in TBC equals Restoration
|
||||
@ -69,11 +75,12 @@ function Gladdy:GetSpecBuffs()
|
||||
[GetSpellInfo(29838)] = L["Arms"], -- Second Wind
|
||||
[GetSpellInfo(12292)] = L["Arms"], -- Death Wish
|
||||
|
||||
}
|
||||
}
|
||||
function Gladdy:GetSpecBuffs()
|
||||
return specBuffs
|
||||
end
|
||||
|
||||
function Gladdy:GetSpecSpells()
|
||||
return {
|
||||
local specSpells = {
|
||||
-- DRUID
|
||||
[GetSpellInfo(33831)] = L["Balance"], -- Force of Nature
|
||||
[GetSpellInfo(33983)] = L["Feral"], -- Mangle (Cat)
|
||||
@ -145,11 +152,12 @@ function Gladdy:GetSpecSpells()
|
||||
[GetSpellInfo(30335)] = L["Fury"], -- Bloodthirst
|
||||
[GetSpellInfo(12809)] = L["Protection"], -- Concussion Blow
|
||||
[GetSpellInfo(30022)] = L["Protection"], -- Devastation
|
||||
}
|
||||
}
|
||||
function Gladdy:GetSpecSpells()
|
||||
return specSpells
|
||||
end
|
||||
|
||||
function Gladdy:GetImportantAuras()
|
||||
return {
|
||||
local importantAuras = {
|
||||
-- Cyclone
|
||||
[GetSpellInfo(33786)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
@ -175,6 +183,13 @@ function Gladdy:GetImportantAuras()
|
||||
root = true,
|
||||
spellID = 26989,
|
||||
},
|
||||
[select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689))] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 10,
|
||||
priority = 30,
|
||||
spellID = 27010,
|
||||
altName = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689)),
|
||||
},
|
||||
-- Feral Charge
|
||||
[GetSpellInfo(16979)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
@ -408,6 +423,14 @@ function Gladdy:GetImportantAuras()
|
||||
magic = true,
|
||||
spellID = 605,
|
||||
},
|
||||
--Blackout Stun 15269
|
||||
[GetSpellInfo(15269)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 3,
|
||||
priority = 40,
|
||||
spellSchool = "magic",
|
||||
spellID = 15269,
|
||||
},
|
||||
-- Silence
|
||||
[GetSpellInfo(15487)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
@ -486,6 +509,13 @@ function Gladdy:GetImportantAuras()
|
||||
priority = 20,
|
||||
spellID = 31224,
|
||||
},
|
||||
-- Evasion
|
||||
[GetSpellInfo(26669)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 15,
|
||||
priority = 10,
|
||||
spellID = 26669,
|
||||
},
|
||||
|
||||
|
||||
-- Fear
|
||||
@ -505,6 +535,13 @@ function Gladdy:GetImportantAuras()
|
||||
priority = 40,
|
||||
spellID = 27223,
|
||||
},
|
||||
--Banish
|
||||
[GetSpellInfo(710)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 10,
|
||||
priority = 40,
|
||||
spellID = 710,
|
||||
},
|
||||
-- Shadowfury
|
||||
[GetSpellInfo(30283)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
@ -545,6 +582,7 @@ function Gladdy:GetImportantAuras()
|
||||
-- Unstable Affliction Silence
|
||||
["Unstable Affliction Silence"] = { -- GetSpellInfo returns "Unstable Affliction"
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
altName = select(1, GetSpellInfo(31117)) .. " Silence",
|
||||
duration = 5,
|
||||
priority = 15,
|
||||
magic = true,
|
||||
@ -574,6 +612,15 @@ function Gladdy:GetImportantAuras()
|
||||
duration = 3,
|
||||
priority = 40,
|
||||
spellID = 25274,
|
||||
texture = select(3, GetSpellInfo(25272))
|
||||
},
|
||||
-- Charge Stun
|
||||
[GetSpellInfo(7922)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 1,
|
||||
priority = 40,
|
||||
spellID = 7922,
|
||||
texture = select(3, GetSpellInfo(100))
|
||||
},
|
||||
-- Spell Reflection
|
||||
[GetSpellInfo(23920)] = {
|
||||
@ -602,7 +649,7 @@ function Gladdy:GetImportantAuras()
|
||||
-- Grounding Totem Effect
|
||||
[GetSpellInfo(8178)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 0,
|
||||
duration = 4,
|
||||
priority = 20,
|
||||
spellID = 8178
|
||||
},
|
||||
@ -614,7 +661,33 @@ function Gladdy:GetImportantAuras()
|
||||
spellSchool = "physical",
|
||||
spellID = 3411,
|
||||
},
|
||||
--Improved Hamstring
|
||||
[GetSpellInfo(23694)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 5,
|
||||
priority = 40,
|
||||
spellSchool = "physical",
|
||||
spellID = 23694,
|
||||
},
|
||||
|
||||
-- Mace Stun Effect
|
||||
[GetSpellInfo(5530)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 3,
|
||||
priority = 40,
|
||||
spellSchool = "physical",
|
||||
texture = select(3, GetSpellInfo(12284)),
|
||||
spellID = 5530,
|
||||
},
|
||||
|
||||
-- Storm Herald Stun effect
|
||||
[GetSpellInfo(34510)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 4,
|
||||
priority = 40,
|
||||
spellSchool = "physical",
|
||||
spellID = 34510,
|
||||
},
|
||||
|
||||
-- War Stomp
|
||||
[GetSpellInfo(20549)] = {
|
||||
@ -631,16 +704,93 @@ function Gladdy:GetImportantAuras()
|
||||
magic = true,
|
||||
spellID = 28730,
|
||||
},
|
||||
}
|
||||
-- Shadowsight Buff
|
||||
[GetSpellInfo(34709)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 15,
|
||||
priority = 15,
|
||||
magic = true,
|
||||
spellID = 34709,
|
||||
},
|
||||
-- Net-o-Matic
|
||||
[GetSpellInfo(13120)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 10,
|
||||
priority = 30,
|
||||
spellID = 13120,
|
||||
},
|
||||
-- Nigh Invulnerability Shield
|
||||
[GetSpellInfo(30458)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 8,
|
||||
priority = 15,
|
||||
spellID = 30458,
|
||||
texture = select(10, GetItemInfo(23825))
|
||||
},
|
||||
-- Nigh Invulnerability Belt Backfire
|
||||
[GetSpellInfo(30457)] = {
|
||||
track = AURA_TYPE_DEBUFF,
|
||||
duration = 8,
|
||||
priority = 15,
|
||||
spellID = 30457,
|
||||
},
|
||||
-- Flee (Skull of impending Doom) -- 5024
|
||||
[GetSpellInfo(5024)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 8,
|
||||
priority = 15,
|
||||
spellID = 5024,
|
||||
altName = select(1, GetSpellInfo(5024)) .. " - " .. (select(1, GetItemInfo(4984)) or "Skull of Impending Doom"),
|
||||
},
|
||||
}
|
||||
function Gladdy:GetImportantAuras()
|
||||
return importantAuras
|
||||
end
|
||||
|
||||
Gladdy.CLASSES = {"MAGE", "PRIEST", "DRUID", "SHAMAN", "PALADIN", "WARLOCK", "WARRIOR", "HUNTER", "ROGUE"}
|
||||
tbl_sort(Gladdy.CLASSES)
|
||||
Gladdy.RACES = {"Scourge", "BloodElf", "Tauren", "Orc", "Troll", "NightElf", "Draenei", "Human", "Gnome", "Dwarf"}
|
||||
tbl_sort(Gladdy.RACES)
|
||||
local interrupts = {
|
||||
[GetSpellInfo(19675)] = {duration = 4, spellID = 19675, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(19675)), priority = 15}, -- Feral Charge Effect (Druid)
|
||||
[GetSpellInfo(2139)] = {duration = 8, spellID = 2139, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(2139)), priority = 15}, -- Counterspell (Mage)
|
||||
[GetSpellInfo(1766)] = {duration = 5, spellID = 1766, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(1766)), priority = 15}, -- Kick (Rogue)
|
||||
[GetSpellInfo(6552)] = {duration = 4, spellID = 6552, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(6552)), priority = 15}, -- Pummel (Warrior)
|
||||
[GetSpellInfo(72)] = {duration = 6, spellID = 72, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(72)), priority = 15}, -- Shield Bash (Warrior)
|
||||
[GetSpellInfo(8042)] = {duration = 2, spellID = 8042, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(8042)), priority = 15}, -- Earth Shock (Shaman)
|
||||
[GetSpellInfo(19244)] = {duration = 5, spellID = 19244, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(19244)), priority = 15}, -- Spell Lock (Warlock
|
||||
[GetSpellInfo(32747)] = {duration = 3, spellID = 32747, track = AURA_TYPE_DEBUFF, texture = select(3, GetSpellInfo(32747)), priority = 15}, -- Deadly Throw Interrupt
|
||||
}
|
||||
function Gladdy:GetInterrupts()
|
||||
return interrupts
|
||||
end
|
||||
|
||||
function Gladdy:GetCooldownList()
|
||||
return {
|
||||
local auraTypeColor = {}
|
||||
auraTypeColor["none"] = { r = 0.80, g = 0, b = 0 , a = 1}
|
||||
auraTypeColor["magic"] = { r = 0.20, g = 0.60, b = 1.00, a = 1}
|
||||
auraTypeColor["curse"] = { r = 0.60, g = 0.00, b = 1.00, a = 1 }
|
||||
auraTypeColor["disease"] = { r = 0.60, g = 0.40, b = 0, a = 1 }
|
||||
auraTypeColor["poison"] = { r = 0.00, g = 0.60, b = 0, a = 1 }
|
||||
auraTypeColor["immune"] = { r = 1.00, g = 0.02, b = 0.99, a = 1 }
|
||||
auraTypeColor["form"] = auraTypeColor["none"]
|
||||
auraTypeColor["aura"] = auraTypeColor["none"]
|
||||
auraTypeColor[""] = auraTypeColor["none"]
|
||||
|
||||
function Gladdy:GetAuraTypeColor()
|
||||
return auraTypeColor
|
||||
end
|
||||
|
||||
local spellSchoolColors = {}
|
||||
spellSchoolColors[1] = {r = 1, g = 1, b = 0, a = 1, type = "Physical"} --- "physical" 255, 255, 0
|
||||
spellSchoolColors[2] = {r = 1, g = 0.901, b = 0.501, a = 1, type = "Holy"} ---"holy" -- 255, 230, 128
|
||||
spellSchoolColors[4] = {r = 1, g = 0.501, b = 0, a = 1, type = "Fire"} ---"fire" -- 255, 128, 0
|
||||
spellSchoolColors[8] = {r = 0.302, g = 1, b = 0.302, a = 1, type = "Nature"} ---"nature" -- 77, 255, 77
|
||||
spellSchoolColors[16] = {r = 0.501, g = 1, b = 1, a = 1, type = "Frost"} ---"frost" -- 128, 255, 255
|
||||
spellSchoolColors[32] = {r = 0.501, g = 0.501, b = 1, a = 1, type = "Shadow"} ---"shadow" --128, 128, 255
|
||||
spellSchoolColors[64] = {r = 1, g = 0.501, b = 1, a = 1, type = "Arcane"} ---"arcane" -- 255, 128, 255
|
||||
spellSchoolColors["unknown"] = {r = 0, g = 0, b = 0, a = 1, type = "Unknown"} ---"unknown spell school"
|
||||
|
||||
function Gladdy:GetSpellSchoolColors()
|
||||
return spellSchoolColors
|
||||
end
|
||||
|
||||
local cooldownList = {
|
||||
-- Spell Name Cooldown[, Spec]
|
||||
-- Mage
|
||||
["MAGE"] = {
|
||||
@ -686,6 +836,7 @@ function Gladdy:GetCooldownList()
|
||||
[29166] = 360, -- Innervate
|
||||
[8983] = 60, -- Bash
|
||||
[16689] = 60, -- Natures Grasp
|
||||
[18562] = { cd = 15, spec = L["Restoration"], }, -- Swiftmend
|
||||
[17116] = { cd = 180, spec = L["Restoration"], }, -- Natures Swiftness
|
||||
[33831] = { cd = 180, spec = L["Balance"], }, -- Force of Nature
|
||||
},
|
||||
@ -753,6 +904,7 @@ function Gladdy:GetCooldownList()
|
||||
[3411] = 30, -- Intervene
|
||||
[676] = 60, -- Disarm
|
||||
[5246] = 180, -- Intimidating Shout
|
||||
[18499] = 30, -- Berserker Rage
|
||||
--[2565] = 60, -- Shield Block
|
||||
[12292] = { cd = 180, spec = L["Arms"], }, -- Death Wish
|
||||
[12975] = { cd = 180, spec = L["Protection"], }, -- Last Stand
|
||||
@ -841,11 +993,12 @@ function Gladdy:GetCooldownList()
|
||||
["Dwarf"] = {
|
||||
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
|
||||
},
|
||||
}
|
||||
}
|
||||
function Gladdy:GetCooldownList()
|
||||
return cooldownList
|
||||
end
|
||||
|
||||
function Gladdy:Racials()
|
||||
return {
|
||||
local racials = {
|
||||
["Scourge"] = {
|
||||
[7744] = true, -- Will of the Forsaken
|
||||
duration = 120,
|
||||
@ -910,5 +1063,78 @@ function Gladdy:Racials()
|
||||
spellName = select(1, GetSpellInfo(20594)),
|
||||
texture = select(3, GetSpellInfo(20594))
|
||||
},
|
||||
}
|
||||
}
|
||||
function Gladdy:Racials()
|
||||
return racials
|
||||
end
|
||||
|
||||
local arenaTimer = {
|
||||
["default"] = {
|
||||
[61] = "One minute until the Arena battle begins!",
|
||||
[31] = "Thirty seconds until the Arena battle begins!",
|
||||
[16] = "Fifteen seconds until the Arena battle begins!",
|
||||
[0] = "The Arena battle has begun!",
|
||||
},
|
||||
["esES"] = {
|
||||
[61] = "¡Un minuto hasta que dé comienzo la batalla en arena!",
|
||||
[31] = "¡Treinta segundos hasta que comience la batalla en arena!",
|
||||
[16] = "¡Quince segundos hasta que comience la batalla en arena!",
|
||||
[0] = "¡La batalla en arena ha comenzado!",
|
||||
},
|
||||
["ptBR"] = {
|
||||
[61] = "Um minuto até a batalha na Arena começar!",
|
||||
[31] = "Trinta segundos até a batalha na Arena começar!",
|
||||
[16] = "Quinze segundos até a batalha na Arena começar!",
|
||||
[0] = "A batalha na Arena começou!",
|
||||
},
|
||||
["deDE"] = {
|
||||
[61] = "Noch eine Minute bis der Arenakampf beginnt!",
|
||||
[31] = "Noch dreißig Sekunden bis der Arenakampf beginnt!",
|
||||
[16] = "Noch fünfzehn Sekunden bis der Arenakampf beginnt!",
|
||||
[0] = "Der Arenakampf hat begonnen!",
|
||||
},
|
||||
["frFR"] = {
|
||||
[61] = "Le combat d'arène commence dans une minute\194\160!",
|
||||
[31] = "Le combat d'arène commence dans trente secondes\194\160!",
|
||||
[16] = "Le combat d'arène commence dans quinze secondes\194\160!",
|
||||
[0] = "Le combat d'arène commence\194\160!",
|
||||
},
|
||||
["ruRU"] = {
|
||||
[61] = "Одна минута до начала боя на арене!",
|
||||
[31] = "Тридцать секунд до начала боя на арене!",
|
||||
[16] = "До начала боя на арене осталось 15 секунд.",
|
||||
[0] = "Бой начался!",
|
||||
},
|
||||
["itIT"] = { -- TODO
|
||||
-- Beta has no itIT version available?
|
||||
},
|
||||
["koKR"] = {
|
||||
[61] = "투기장 전투 시작 1분 전입니다!",
|
||||
[31] = "투기장 전투 시작 30초 전입니다!",
|
||||
[16] = "투기장 전투 시작 15초 전입니다!",
|
||||
[0] = "투기장 전투가 시작되었습니다!",
|
||||
},
|
||||
["zhCN"] = {
|
||||
[61] = "竞技场战斗将在一分钟后开始!",
|
||||
[31] = "竞技场战斗将在三十秒后开始!",
|
||||
[16] = "竞技场战斗将在十五秒后开始!",
|
||||
[0] = "竞技场的战斗开始了!",
|
||||
},
|
||||
["zhTW"] = {
|
||||
[61] = "1分鐘後競技場戰鬥開始!",
|
||||
[31] = "30秒後競技場戰鬥開始!",
|
||||
[16] = "15秒後競技場戰鬥開始!",
|
||||
[0] = "競技場戰鬥開始了!",
|
||||
},
|
||||
}
|
||||
arenaTimer["esMX"] = arenaTimer["esES"]
|
||||
arenaTimer["ptPT"] = arenaTimer["ptBR"]
|
||||
|
||||
function Gladdy:GetArenaTimer()
|
||||
if arenaTimer[GetLocale()] then
|
||||
return arenaTimer[GetLocale()]
|
||||
else
|
||||
return arenaTimer["default"]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
local select, string_gsub, tostring = select, string.gsub, tostring
|
||||
|
||||
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
||||
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
||||
local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
|
||||
local AURA_TYPE_BUFF = AURA_TYPE_BUFF
|
||||
|
||||
@ -34,7 +33,6 @@ function EventListener:JOINED_ARENA()
|
||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START")
|
||||
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
|
||||
self:SetScript("OnEvent", EventListener.OnEvent)
|
||||
Gladdy:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "RAID", UnitName("player"))
|
||||
end
|
||||
|
||||
function EventListener:Reset()
|
||||
@ -50,6 +48,9 @@ end
|
||||
|
||||
function Gladdy:SpotEnemy(unit, auraScan)
|
||||
local button = self.buttons[unit]
|
||||
if not unit or not button then
|
||||
return
|
||||
end
|
||||
button.raceLoc = UnitRace(unit)
|
||||
button.race = select(2, UnitRace(unit))
|
||||
button.classLoc = select(1, UnitClass(unit))
|
||||
@ -57,7 +58,9 @@ function Gladdy:SpotEnemy(unit, auraScan)
|
||||
button.name = UnitName(unit)
|
||||
button.stealthed = false
|
||||
Gladdy.guids[UnitGUID(unit)] = unit
|
||||
if button.class and button.race then
|
||||
Gladdy:SendMessage("ENEMY_SPOTTED", unit)
|
||||
end
|
||||
if auraScan and not button.spec then
|
||||
for n = 1, 30 do
|
||||
local spellName,_,_,_,_,_,unitCaster = UnitAura(unit, n, "HELPFUL")
|
||||
@ -76,21 +79,10 @@ end
|
||||
|
||||
function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
-- timestamp,eventType,hideCaster,sourceGUID,sourceName,sourceFlags,sourceRaidFlags,destGUID,destName,destFlags,destRaidFlags,spellId,spellName,spellSchool
|
||||
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName = CombatLogGetCurrentEventInfo()
|
||||
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool = CombatLogGetCurrentEventInfo()
|
||||
local srcUnit = Gladdy.guids[sourceGUID]
|
||||
local destUnit = Gladdy.guids[destGUID]
|
||||
|
||||
if Gladdy.specSpells[spellName] and srcUnit then
|
||||
--Gladdy:Print(eventType, spellName, Gladdy.specSpells[spellName], srcUnit)
|
||||
end
|
||||
if (eventType == "UNIT_DIED" or eventType == "PARTY_KILL" or eventType == "SPELL_INSTAKILL") then
|
||||
if destUnit then
|
||||
--Gladdy:Print(eventType, "destUnit", destUnit)
|
||||
elseif srcUnit then
|
||||
--Gladdy:Print(eventType, "srcUnit", srcUnit)
|
||||
end
|
||||
end
|
||||
|
||||
if destUnit then
|
||||
-- diminish tracker
|
||||
if (Gladdy.db.drEnabled and (eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH")) then
|
||||
@ -101,11 +93,16 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
Gladdy:SendMessage("UNIT_DEATH", destUnit)
|
||||
end
|
||||
-- spec detection
|
||||
if not Gladdy.buttons[destUnit].class then
|
||||
if not Gladdy.buttons[destUnit].class or not Gladdy.buttons[destUnit].race then
|
||||
Gladdy:SpotEnemy(destUnit, true)
|
||||
end
|
||||
--interrupt detection
|
||||
if eventType == "SPELL_INTERRUPT" then
|
||||
Gladdy:SendMessage("SPELL_INTERRUPT", destUnit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||
end
|
||||
end
|
||||
if srcUnit then
|
||||
if (eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED") then
|
||||
local unitRace = Gladdy.buttons[srcUnit].race
|
||||
-- cooldown tracker
|
||||
if Gladdy.db.cooldown and Cooldowns.cooldownSpellIds[spellName] then
|
||||
@ -125,8 +122,9 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
if Gladdy.db.racialEnabled and Gladdy:Racials()[unitRace].spellName == spellName and Gladdy:Racials()[unitRace][spellID] then
|
||||
Gladdy:SendMessage("RACIAL_USED", srcUnit)
|
||||
end
|
||||
end
|
||||
|
||||
if not Gladdy.buttons[srcUnit].class then
|
||||
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
|
||||
@ -143,12 +141,11 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||
if button or pet then
|
||||
if updateReason == "seen" then
|
||||
-- ENEMY_SPOTTED
|
||||
if button and not button.class then
|
||||
if button then
|
||||
Gladdy:SendMessage("ENEMY_STEALTH", unit, false)
|
||||
if not button.class or not button.race then
|
||||
Gladdy:SpotEnemy(unit, true)
|
||||
end
|
||||
if button and button.stealthed then
|
||||
local class = Gladdy.buttons[unit].class
|
||||
button.healthBar.hp:SetStatusBarColor(RAID_CLASS_COLORS[class].r, RAID_CLASS_COLORS[class].g, RAID_CLASS_COLORS[class].b, 1)
|
||||
end
|
||||
if pet then
|
||||
Gladdy:SendMessage("PET_SPOTTED", unit)
|
||||
@ -156,9 +153,7 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||
elseif updateReason == "unseen" then
|
||||
-- STEALTH
|
||||
if button then
|
||||
Gladdy:SendMessage("ENEMY_STEALTH", unit)
|
||||
button.healthBar.hp:SetStatusBarColor(0.66, 0.66, 0.66, 1)
|
||||
button.stealthed = true
|
||||
Gladdy:SendMessage("ENEMY_STEALTH", unit, true)
|
||||
end
|
||||
if pet then
|
||||
Gladdy:SendMessage("PET_STEALTH", unit)
|
||||
@ -177,7 +172,7 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||
end
|
||||
end
|
||||
|
||||
local exceptionNames = {
|
||||
Gladdy.exceptionNames = { -- TODO MOVE ME TO CLASSBUFFS LIB
|
||||
[31117] = GetSpellInfo(30405) .. " Silence", -- Unstable Affliction Silence
|
||||
[43523] = GetSpellInfo(30405) .. " Silence",
|
||||
[24131] = select(1, GetSpellInfo(19386)) .. " Dot", -- Wyvern Sting Dot
|
||||
@ -199,7 +194,7 @@ function EventListener:UNIT_AURA(unit)
|
||||
return
|
||||
end
|
||||
for i = 1, 2 do
|
||||
if not Gladdy.buttons[unit].class then
|
||||
if not Gladdy.buttons[unit].class or not Gladdy.buttons[unit].race then
|
||||
Gladdy:SpotEnemy(unit, false)
|
||||
end
|
||||
local filter = (i == 1 and "HELPFUL" or "HARMFUL")
|
||||
@ -213,12 +208,12 @@ function EventListener:UNIT_AURA(unit)
|
||||
end
|
||||
if not button.spec and Gladdy.specBuffs[spellName] then
|
||||
local unitPet = string_gsub(unit, "%d$", "pet%1")
|
||||
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
|
||||
if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then
|
||||
Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName])
|
||||
end
|
||||
end
|
||||
if exceptionNames[spellID] then
|
||||
spellName = exceptionNames[spellID]
|
||||
if Gladdy.exceptionNames[spellID] then
|
||||
spellName = Gladdy.exceptionNames[spellID]
|
||||
end
|
||||
Gladdy:SendMessage("AURA_GAIN", unit, auraType, spellID, spellName, texture, duration, expirationTime, count, debuffType, i)
|
||||
Gladdy:Call("Announcements", "CheckDrink", unit, spellName)
|
||||
@ -252,7 +247,3 @@ function EventListener:UNIT_SPELLCAST_SUCCEEDED(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function EventListener:GetOptions()
|
||||
return nil
|
||||
end
|
||||
|
180
Frame.lua
180
Frame.lua
@ -26,11 +26,22 @@ Gladdy.BUTTON_DEFAULTS = {
|
||||
damaged = 0,
|
||||
click = false,
|
||||
stealthed = false,
|
||||
classColors = {},
|
||||
lastState = 0,
|
||||
}
|
||||
|
||||
function Gladdy:CreateFrame()
|
||||
self.frame = CreateFrame("Frame", "GladdyFrame", UIParent)
|
||||
|
||||
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: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:SetAllPoints(self.frame)
|
||||
--self.frame.texture = self.frame:CreateTexture(nil, "OVERLAY")
|
||||
--self.frame.texture:SetAllPoints(self.frame)
|
||||
--self.frame.texture:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp")
|
||||
|
||||
self.frame:SetClampedToScreen(true)
|
||||
self.frame:EnableMouse(false)
|
||||
self.frame:SetMovable(true)
|
||||
@ -104,132 +115,194 @@ end
|
||||
|
||||
function Gladdy:UpdateFrame()
|
||||
|
||||
if (InCombatLockdown()) then
|
||||
return
|
||||
end
|
||||
|
||||
if (not self.frame) then
|
||||
self:CreateFrame()
|
||||
end
|
||||
local teamSize = self.curBracket or 0
|
||||
|
||||
local iconSize = self.db.healthBarHeight
|
||||
local margin = 0
|
||||
local width = self.db.barWidth + self.db.padding * 2 + 5
|
||||
local height = self.db.healthBarHeight * teamSize + margin * (teamSize - 1) + self.db.padding * 2 + 5
|
||||
local extraBarWidth = 0
|
||||
local extraBarHeight = 0
|
||||
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 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
|
||||
|
||||
-- Powerbar
|
||||
iconSize = iconSize + self.db.powerBarHeight
|
||||
margin = margin + self.db.powerBarHeight
|
||||
height = height + self.db.powerBarHeight * teamSize
|
||||
extraBarHeight = extraBarHeight + self.db.powerBarHeight
|
||||
local margin = powerBarHeight
|
||||
local width = self.db.barWidth + leftSize + rightSize
|
||||
local height = (self.db.healthBarHeight + powerBarHeight) * teamSize
|
||||
+ (self.db.highlightInset and 0 or self.db.highlightBorderSize * 2 * teamSize)
|
||||
+ self.db.bottomMargin * (teamSize - 1)
|
||||
|
||||
-- Cooldown
|
||||
margin = margin + 1 + self.db.highlightBorderSize * 2 + 1 -- + 1 space between health and power bar
|
||||
height = height + self.db.highlightBorderSize * teamSize
|
||||
-- Highlight
|
||||
margin = margin + highlightBorderSize
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
-- Classicon
|
||||
width = width + iconSize
|
||||
extraBarWidth = extraBarWidth + iconSize
|
||||
|
||||
-- Trinket
|
||||
width = width + iconSize
|
||||
-- GrowDirection
|
||||
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
|
||||
end
|
||||
|
||||
self.frame:SetScale(self.db.frameScale)
|
||||
self.frame:SetWidth(width)
|
||||
self.frame:SetHeight(height)
|
||||
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:SetBackdropColor(self.db.frameColor.r, self.db.frameColor.g, self.db.frameColor.b, self.db.frameColor.a)
|
||||
self.frame:ClearAllPoints()
|
||||
if (self.db.x == 0 and self.db.y == 0) then
|
||||
self.frame:SetPoint("CENTER")
|
||||
else
|
||||
local scale = self.frame:GetEffectiveScale()
|
||||
if (self.db.growUp) then
|
||||
if (self.db.growDirection == "TOP") then
|
||||
self.frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, self.db.y / scale)
|
||||
else
|
||||
self.frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", self.db.x / scale, self.db.y / scale)
|
||||
end
|
||||
end
|
||||
|
||||
--Anchor
|
||||
self.anchor:SetWidth(width)
|
||||
self.anchor:ClearAllPoints()
|
||||
if (self.db.growUp) then
|
||||
if (self.db.growDirection == "TOP") then
|
||||
self.anchor:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
|
||||
else
|
||||
elseif self.growDirection == "BOTTOM" or self.growDirection == "RIGHT" then
|
||||
self.anchor:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT")
|
||||
else
|
||||
self.anchor:SetPoint("BOTTOMRIGHT", self.frame, "TOPRIGHT")
|
||||
end
|
||||
|
||||
if (self.db.locked) then
|
||||
self.anchor:Hide()
|
||||
self.anchor:Hide()
|
||||
else
|
||||
self.anchor:Show()
|
||||
end
|
||||
|
||||
for i = 1, teamSize do
|
||||
local button = self.buttons["arena" .. i]
|
||||
button:SetWidth(self.db.barWidth + extraBarWidth)
|
||||
button:SetWidth(self.db.barWidth)
|
||||
button:SetHeight(self.db.healthBarHeight)
|
||||
button.secure:SetWidth(self.db.barWidth)
|
||||
button.secure:SetHeight(self.db.healthBarHeight + extraBarHeight)
|
||||
button.secure:SetHeight(self.db.healthBarHeight + powerBarHeight)
|
||||
|
||||
button:ClearAllPoints()
|
||||
button.secure:ClearAllPoints()
|
||||
if (self.db.growUp) then
|
||||
if (self.db.growDirection == "TOP") then
|
||||
if (i == 1) then
|
||||
button:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", self.db.padding + 2, 0)
|
||||
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
|
||||
else
|
||||
elseif (self.db.growDirection == "BOTTOM") then
|
||||
if (i == 1) then
|
||||
button:SetPoint("TOPLEFT", self.frame, "TOPLEFT", self.db.padding + 2, 0)
|
||||
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
|
||||
|
||||
|
||||
for _, v in self:IterModules() do
|
||||
self:Call(v, "UpdateFrame", button.unit)
|
||||
self:Call(v, "UpdateFrame", "arena" .. i)
|
||||
end
|
||||
end
|
||||
for _, v in self:IterModules() do
|
||||
self:Call(v, "UpdateFrameOnce")
|
||||
end
|
||||
if Gladdy.db.hideBlizzard == "always" then
|
||||
Gladdy:BlizzArenaSetAlpha(0)
|
||||
elseif Gladdy.db.hideBlizzard == "arena" then
|
||||
if Gladdy.curBracket then
|
||||
Gladdy:BlizzArenaSetAlpha(0)
|
||||
else
|
||||
Gladdy:BlizzArenaSetAlpha(1)
|
||||
end
|
||||
elseif Gladdy.db.hideBlizzard == "never" then
|
||||
Gladdy:BlizzArenaSetAlpha(1)
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:HideFrame()
|
||||
if (self.frame) then
|
||||
if InCombatLockdown() then
|
||||
self.startTest = nil
|
||||
self.hideFrame = true
|
||||
else
|
||||
self.frame:Hide()
|
||||
end
|
||||
|
||||
self.frame.testing = nil
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:ToggleFrame(i)
|
||||
self:Reset()
|
||||
|
||||
if (self.frame and self.frame:IsShown() and i == self.curBracket) then
|
||||
self:HideFrame()
|
||||
else
|
||||
@ -245,10 +318,18 @@ function Gladdy:ToggleFrame(i)
|
||||
self:CreateButton(o)
|
||||
end
|
||||
end
|
||||
self:Reset()
|
||||
self.curBracket = i
|
||||
self:UpdateFrame()
|
||||
if InCombatLockdown() then
|
||||
Gladdy:Print("Gladdy frames show as soon as you leave combat")
|
||||
self.showFrame = true
|
||||
self.startTest = true
|
||||
else
|
||||
self:Test()
|
||||
self.frame:Show()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:CreateButton(i)
|
||||
@ -258,30 +339,43 @@ function Gladdy:CreateButton(i)
|
||||
|
||||
local button = CreateFrame("Frame", "GladdyButtonFrame" .. i, self.frame)
|
||||
button:EnableMouse(false)
|
||||
button:SetAlpha(0)
|
||||
--button:SetAlpha(0)
|
||||
--button.texture = button:CreateTexture(nil, "OVERLAY")
|
||||
--button.texture:SetAllPoints(button)
|
||||
--button.texture:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp")
|
||||
|
||||
local secure = CreateFrame("Button", "GladdyButton" .. i, button, "SecureActionButtonTemplate")
|
||||
local secure = CreateFrame("Button", "GladdyButton" .. i, button, "SecureActionButtonTemplate, SecureHandlerEnterLeaveTemplate")
|
||||
secure:RegisterForClicks("AnyUp")
|
||||
secure:RegisterForClicks("AnyUp")
|
||||
secure:SetAttribute("*type1", "target")
|
||||
secure:SetAttribute("*type2", "focus")
|
||||
secure:RegisterForClicks("AnyDown")
|
||||
|
||||
secure:SetAttribute("target", "arena" .. i)
|
||||
secure:SetAttribute("focus", "arena" .. i)
|
||||
secure:SetAttribute("unit", "arena" .. i)
|
||||
|
||||
--[[
|
||||
secure:SetAttribute("target", i == 1 and "player" or "focus")
|
||||
secure:SetAttribute("focus", i == 1 and "player" or "focus")
|
||||
secure:SetAttribute("unit", i == 1 and "player" or "focus")
|
||||
--]]
|
||||
|
||||
--secure.texture = secure:CreateTexture(nil, "OVERLAY")
|
||||
--secure.texture:SetAllPoints(secure)
|
||||
--secure.texture:SetTexture("Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp")
|
||||
|
||||
button.id = i
|
||||
--button.unit = i == 1 and "player" or "focus"
|
||||
button.unit = "arena" .. i
|
||||
button.secure = secure
|
||||
|
||||
|
||||
self:ResetButton(button.unit)
|
||||
self:ResetButton("arena" .. i)
|
||||
|
||||
self.buttons[button.unit] = button
|
||||
self.buttons["arena" .. i] = button
|
||||
|
||||
for _, v in self:IterModules() do
|
||||
self:Call(v, "CreateFrame", button.unit)
|
||||
self:Call(v, "CreateFrame", "arena" .. i)
|
||||
end
|
||||
self:ResetButton("arena" .. i)
|
||||
end
|
||||
|
||||
function Gladdy:GetAnchor(unit, position)
|
||||
|
116
Gladdy.lua
116
Gladdy.lua
@ -5,6 +5,7 @@ local select = select
|
||||
local pairs = pairs
|
||||
local tinsert = table.insert
|
||||
local tsort = table.sort
|
||||
local GetTime = GetTime
|
||||
local CreateFrame = CreateFrame
|
||||
local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
|
||||
local IsAddOnLoaded = IsAddOnLoaded
|
||||
@ -25,9 +26,9 @@ local MAJOR, MINOR = "Gladdy", 4
|
||||
local Gladdy = LibStub:NewLibrary(MAJOR, MINOR)
|
||||
local L
|
||||
Gladdy.version_major_num = 1
|
||||
Gladdy.version_minor_num = 0.07
|
||||
Gladdy.version_minor_num = 0.20
|
||||
Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num
|
||||
Gladdy.version_releaseType = RELEASE_TYPES.beta
|
||||
Gladdy.version_releaseType = RELEASE_TYPES.release
|
||||
Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
||||
Gladdy.VERSION_REGEX = VERSION_REGEX
|
||||
|
||||
@ -131,8 +132,8 @@ function Gladdy:Call(module, func, ...)
|
||||
end
|
||||
end
|
||||
function Gladdy:SendMessage(message, ...)
|
||||
for k, v in self:IterModules() do
|
||||
self:Call(v, v.messages[message], ...)
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, module.messages[message], ...)
|
||||
end
|
||||
end
|
||||
|
||||
@ -200,11 +201,12 @@ function Gladdy:OnInitialize()
|
||||
self.LSM:Register("border", "Gladdy Tooltip round", "Interface\\AddOns\\Gladdy\\Images\\UI-Tooltip-Border_round_selfmade")
|
||||
self.LSM:Register("border", "Gladdy Tooltip squared", "Interface\\AddOns\\Gladdy\\Images\\UI-Tooltip-Border_square_selfmade")
|
||||
self.LSM:Register("font", "DorisPP", "Interface\\AddOns\\Gladdy\\Images\\DorisPP.TTF")
|
||||
self.LSM:Register("border", "Square Full White", "Interface\\AddOns\\Gladdy\\Images\\Square_FullWhite.tga")
|
||||
|
||||
L = self.L
|
||||
|
||||
self.testData = {
|
||||
["arena1"] = { name = "Swift", raceLoc = L["Tauren"], classLoc = L["Warrior"], class = "WARRIOR", health = 9635, healthMax = 14207, power = 76, powerMax = 100, powerType = 1, testSpec = L["Arms"], race = "Tauren" },
|
||||
["arena1"] = { name = "Swift", raceLoc = L["NightElf"], classLoc = L["Warrior"], class = "WARRIOR", health = 9635, healthMax = 14207, power = 76, powerMax = 100, powerType = 1, testSpec = L["Arms"], race = "NightElf" },
|
||||
["arena2"] = { name = "Vilden", raceLoc = L["Undead"], classLoc = L["Mage"], class = "MAGE", health = 10969, healthMax = 11023, power = 7833, powerMax = 10460, powerType = 0, testSpec = L["Frost"], race = "Scourge" },
|
||||
["arena3"] = { name = "Krymu", raceLoc = L["Human"], classLoc = L["Rogue"], class = "ROGUE", health = 1592, healthMax = 11740, power = 45, powerMax = 110, powerType = 3, testSpec = L["Subtlety"], race = "Human" },
|
||||
["arena4"] = { name = "Talmon", raceLoc = L["Human"], classLoc = L["Warlock"], class = "WARLOCK", health = 10221, healthMax = 14960, power = 9855, powerMax = 9855, powerType = 0, testSpec = L["Demonology"], race = "Human" },
|
||||
@ -223,10 +225,13 @@ function Gladdy:OnInitialize()
|
||||
|
||||
self:SetupOptions()
|
||||
|
||||
for k, v in self:IterModules() do
|
||||
self:Call(v, "Initialize") -- B.E > A.E :D
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, "Initialize") -- B.E > A.E :D
|
||||
end
|
||||
self:DeleteUnknownOptions(self.db, self.defaults.profile)
|
||||
if Gladdy.db.hideBlizzard == "always" then
|
||||
Gladdy:BlizzArenaSetAlpha(0)
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:OnProfileChanged()
|
||||
@ -240,6 +245,7 @@ end
|
||||
function Gladdy:OnEnable()
|
||||
self:RegisterEvent("UPDATE_BATTLEFIELD_STATUS")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
self:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
|
||||
if (IsAddOnLoaded("Clique")) then
|
||||
for i = 1, 5 do
|
||||
@ -266,6 +272,7 @@ function Gladdy:OnEnable()
|
||||
|
||||
self:HideFrame()
|
||||
self:ToggleFrame(3)
|
||||
self.showConfig = true
|
||||
end
|
||||
end
|
||||
|
||||
@ -285,7 +292,8 @@ end
|
||||
---------------------------
|
||||
|
||||
function Gladdy:Test()
|
||||
Gladdy.frame.testing = true
|
||||
self.frame.testing = true
|
||||
if self.curBracket then
|
||||
for i = 1, self.curBracket do
|
||||
local unit = "arena" .. i
|
||||
if (not self.buttons[unit]) then
|
||||
@ -297,12 +305,13 @@ function Gladdy:Test()
|
||||
button[k] = v
|
||||
end
|
||||
|
||||
for k, v in self:IterModules() do
|
||||
self:Call(v, "Test", unit)
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, "Test", unit)
|
||||
end
|
||||
|
||||
button:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
@ -312,6 +321,10 @@ end
|
||||
---------------------------
|
||||
|
||||
function Gladdy:PLAYER_ENTERING_WORLD()
|
||||
if self.showConfig then
|
||||
LibStub("AceConfigDialog-3.0"):Open("Gladdy", nil, LibStub("AceConfigDialog-3.0"):SelectGroup("Gladdy", "XiconProfiles"))
|
||||
self.showConfig = nil
|
||||
end
|
||||
local instance = select(2, IsInInstance())
|
||||
if (instance ~= "arena" and self.frame and self.frame:IsVisible() and not self.frame.testing) then
|
||||
self:Reset()
|
||||
@ -332,6 +345,23 @@ function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index)
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:PLAYER_REGEN_ENABLED()
|
||||
if self.showFrame then
|
||||
self:UpdateFrame()
|
||||
if self.startTest then
|
||||
self:Test()
|
||||
self.startTest = nil
|
||||
end
|
||||
self.frame:Show()
|
||||
self.showFrame = nil
|
||||
end
|
||||
if self.hideFrame then
|
||||
self:Reset()
|
||||
self.frame:Hide()
|
||||
self.hideFrame = nil
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
|
||||
-- RESET FUNCTIONS (ARENA LEAVE)
|
||||
@ -340,7 +370,7 @@ end
|
||||
|
||||
function Gladdy:Reset()
|
||||
if type(self.guids) == "table" then
|
||||
for k, v in pairs(self.guids) do
|
||||
for k,_ in pairs(self.guids) do
|
||||
self.guids[k] = nil
|
||||
end
|
||||
end
|
||||
@ -348,13 +378,16 @@ function Gladdy:Reset()
|
||||
self.curBracket = nil
|
||||
self.curUnit = 1
|
||||
|
||||
for k1, v1 in self:IterModules() do
|
||||
self:Call(v1, "Reset")
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, "Reset")
|
||||
end
|
||||
|
||||
for unit in pairs(self.buttons) do
|
||||
self:ResetUnit(unit)
|
||||
end
|
||||
if Gladdy.db.hideBlizzard == "never" or Gladdy.db.hideBlizzard == "arena" then
|
||||
Gladdy:BlizzArenaSetAlpha(1)
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:ResetUnit(unit)
|
||||
@ -366,8 +399,8 @@ function Gladdy:ResetUnit(unit)
|
||||
button:SetAlpha(0)
|
||||
self:ResetButton(unit)
|
||||
|
||||
for k2, v2 in self:IterModules() do
|
||||
self:Call(v2, "ResetUnit", unit)
|
||||
for _, module in self:IterModules() do
|
||||
self:Call(module, "ResetUnit", unit)
|
||||
end
|
||||
end
|
||||
|
||||
@ -381,7 +414,7 @@ function Gladdy:ResetButton(unit)
|
||||
button[k1] = nil
|
||||
elseif (type(v1) == "number") then
|
||||
button[k1] = 0
|
||||
elseif (type(v1) == "array") then
|
||||
elseif (type(v1) == "table") then
|
||||
button[k1] = {}
|
||||
elseif (type(v1) == "boolean") then
|
||||
button[k1] = false
|
||||
@ -407,9 +440,60 @@ function Gladdy:JoinedArena()
|
||||
end
|
||||
|
||||
self:SendMessage("JOINED_ARENA")
|
||||
if InCombatLockdown() then
|
||||
Gladdy:Print("Gladdy frames show as soon as you leave combat")
|
||||
self.showFrame = true
|
||||
else
|
||||
self:UpdateFrame()
|
||||
self.frame:Show()
|
||||
end
|
||||
for i=1, self.curBracket do
|
||||
self.buttons["arena" .. i]:SetAlpha(1)
|
||||
end
|
||||
if Gladdy.db.hideBlizzard == "arena" or Gladdy.db.hideBlizzard == "always" then
|
||||
Gladdy:BlizzArenaSetAlpha(0)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
|
||||
-- BLIZZARD FRAMES
|
||||
|
||||
---------------------------
|
||||
|
||||
function Gladdy:BlizzArenaSetAlpha(alpha)
|
||||
if IsAddOnLoaded("Blizzard_ArenaUI") then
|
||||
ArenaEnemyFrames:SetAlpha(alpha)
|
||||
ArenaEnemyFrame1:SetAlpha(alpha)
|
||||
ArenaEnemyFrame1PetFrame:SetAlpha(alpha)
|
||||
ArenaEnemyFrame2:SetAlpha(alpha)
|
||||
ArenaEnemyFrame2PetFrame:SetAlpha(alpha)
|
||||
ArenaEnemyFrame3:SetAlpha(alpha)
|
||||
ArenaEnemyFrame3PetFrame:SetAlpha(alpha)
|
||||
ArenaEnemyFrame4:SetAlpha(alpha)
|
||||
ArenaEnemyFrame4PetFrame:SetAlpha(alpha)
|
||||
ArenaEnemyFrame5:SetAlpha(alpha)
|
||||
ArenaEnemyFrame5PetFrame:SetAlpha(alpha)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
|
||||
-- FONT/STATUSBAR/BORDER
|
||||
|
||||
---------------------------
|
||||
|
||||
local defaults = {["statusbar"] = "Smooth", ["border"] = "Gladdy Tooltip round", ["font"] = "DorisPP"}
|
||||
|
||||
local lastWarning = {}
|
||||
function Gladdy:SMFetch(lsmType, key)
|
||||
local smMediaType = self.LSM:Fetch(lsmType, Gladdy.db[key])
|
||||
if (smMediaType == nil and Gladdy.db[key] ~= "None") then
|
||||
if not lastWarning[key] or GetTime() - lastWarning[key] > 120 then
|
||||
lastWarning[key] = GetTime()
|
||||
Gladdy:Warn("Could not find", "\"" .. lsmType .. "\" \"", Gladdy.db[key], " \" for", "\"" .. key .. "\"", "- setting it to", "\"" .. defaults[lsmType] .. "\"")
|
||||
end
|
||||
return self.LSM:Fetch(lsmType, defaults[lsmType])
|
||||
end
|
||||
return smMediaType
|
||||
end
|
@ -1,6 +1,6 @@
|
||||
## Interface: 20501
|
||||
## Interface: 20502
|
||||
## Title: Gladdy - TBC
|
||||
## Version: 1.07-Beta
|
||||
## Version: 1.20-Release
|
||||
## Notes: The most powerful arena AddOn for WoW 2.5.1
|
||||
## Author: XiconQoo, DnB_Junkee, Knall
|
||||
## X-Email: contact me on discord Knall#1751
|
||||
@ -22,6 +22,7 @@ Modules\Powerbar.lua
|
||||
Modules\Auras.lua
|
||||
Modules\Castbar.lua
|
||||
Modules\Classicon.lua
|
||||
Modules\Clicks.lua
|
||||
Modules\Diminishings.lua
|
||||
Modules\Highlight.lua
|
||||
Modules\TotemPlates.lua
|
||||
@ -35,4 +36,6 @@ Modules\XiconProfiles.lua
|
||||
Modules\Pets.lua
|
||||
Modules\ExportImport.lua
|
||||
Modules\CombatIndicator.lua
|
||||
Modules\RangeCheck.lua
|
||||
Modules\ShadowsightTimer.lua
|
||||
EventListener.lua
|
||||
|
BIN
Images/BasicProfiles/Blizz1.blp
Normal file
BIN
Images/BasicProfiles/Blizz1.blp
Normal file
Binary file not shown.
Binary file not shown.
BIN
Images/BasicProfiles/Classic2.blp
Normal file
BIN
Images/BasicProfiles/Classic2.blp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Images/BasicProfiles/Mir1.blp
Normal file
BIN
Images/BasicProfiles/Mir1.blp
Normal file
Binary file not shown.
BIN
Images/BasicProfiles/Rukk1.blp
Normal file
BIN
Images/BasicProfiles/Rukk1.blp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Images/Countdown/Alliance.blp
Normal file
BIN
Images/Countdown/Alliance.blp
Normal file
Binary file not shown.
BIN
Images/Countdown/Horde.blp
Normal file
BIN
Images/Countdown/Horde.blp
Normal file
Binary file not shown.
BIN
Images/Square_FullWhite.tga
Normal file
BIN
Images/Square_FullWhite.tga
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
local major = "DRData-1.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))
|
||||
@ -140,6 +140,9 @@ Data.spells = {
|
||||
-- Revenge Stun
|
||||
[12798] = "rndstun",
|
||||
|
||||
-- Pyroclasm
|
||||
[18093] = "rndstun",
|
||||
|
||||
--[[ CYCLONE ]]--
|
||||
-- Blind
|
||||
[2094] = "cyclone",
|
||||
@ -167,6 +170,15 @@ Data.spells = {
|
||||
[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",
|
||||
@ -181,10 +193,10 @@ Data.spells = {
|
||||
[18658] = "sleep",
|
||||
|
||||
-- Wyvern Sting
|
||||
[19386] = "sleep",
|
||||
[24132] = "sleep",
|
||||
[24133] = "sleep",
|
||||
[27068] = "sleep",
|
||||
[19386] = "disorient",
|
||||
[24132] = "disorient",
|
||||
[24133] = "disorient",
|
||||
[27068] = "disorient",
|
||||
|
||||
--[[ MISC ]]--
|
||||
-- Chastise (Maybe this shares DR with Imp HS?)
|
||||
@ -201,15 +213,15 @@ Data.spells = {
|
||||
[33042] = "dragonsbreath", -- Dragon's Breath
|
||||
[33043] = "dragonsbreath", -- Dragon's Breath
|
||||
-- Repentance
|
||||
[20066] = "repentance",
|
||||
[20066] = "disorient",
|
||||
|
||||
-- Scatter Shot
|
||||
[19503] = "scatters",
|
||||
|
||||
-- Freezing Trap
|
||||
[3355] = "freezetrap",
|
||||
[14308] = "freezetrap",
|
||||
[14309] = "freezetrap",
|
||||
[3355] = "disorient",
|
||||
[14308] = "disorient",
|
||||
[14309] = "disorient",
|
||||
|
||||
-- Improved Conc Shot
|
||||
[19410] = "impconc",
|
||||
|
@ -140,7 +140,8 @@ Buff( { 25782 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
|
||||
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
|
||||
Buff( { 25899 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Sanctuary
|
||||
Buff( { 25894 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Wisdom
|
||||
Buff( { 642 }, { buffType = "magic"}, "PALADIN") -- Divine Shield
|
||||
Buff( { 642 }, { buffType = "immune"}, "PALADIN") -- Divine Shield
|
||||
Buff( { 31884 }, { buffType = "magic"}, "PALADIN") -- Avenging Wrath
|
||||
--Auras
|
||||
Buff( { 465, 10290, 643, 10291, 1032, 10292, 10293, 27149 }, { buffType = "aura"}, "PALADIN") -- Devotion Aura
|
||||
Buff( { 7294 }, { buffType = "aura"}, "PALADIN") -- Retribution Aura
|
||||
@ -167,6 +168,8 @@ Buff( { 21082 }, { buffType = "magic"}, "PALADIN") -- Seal of the Crusade
|
||||
-------------
|
||||
|
||||
Buff( { 5384 }, { buffType = "physical"}, "HUNTER") -- Feign Death
|
||||
Buff( { 19263 }, { buffType = "physical"}, "HUNTER") -- Deterrence
|
||||
Buff( { 3045 }, { buffType = "physical"}, "HUNTER") -- Rapid Fire
|
||||
--local FEIGN_DEATH = GetSpellInfo(5384) -- Localized name for Feign Death
|
||||
|
||||
|
||||
|
@ -20,7 +20,8 @@ Debuff({ 15286 } ,{ buffType = "magic" }, "PRIEST") -- Vampiric Embrace
|
||||
Debuff({ 15407, 17311, 17312, 17313, 17314, 18807, 25387 }, { buffType = "magic" }, "PRIEST") -- Mind Flay
|
||||
Debuff({ 605, 10911, 10912 }, { buffType = "magic" }, "PRIEST") -- Mind Control
|
||||
Debuff({ 8122, 8124, 10888, 10890 }, { buffType = "magic", }, "PRIEST") -- Psychic Scream
|
||||
Debuff({ 15269 }, { buffType = "magic"}, "PRIEST")
|
||||
Debuff({ 15269 }, { buffType = "magic"}, "PRIEST") -- Blackout
|
||||
Debuff({ 44041, 44043, 44044, 44045, 44046, 44047 }, { buffType = "magic"}, "PRIEST") -- Chastise
|
||||
|
||||
---------------
|
||||
-- DRUID
|
||||
@ -44,6 +45,8 @@ Debuff({ 1822, 1823, 1824, 9904, 27003 }, { stacking = true, buffType = "physica
|
||||
Debuff({ 1079, 9492, 9493, 9752, 9894, 9896, 27008 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Rip
|
||||
Debuff({ 5570, 24974, 24975, 24976, 24977, 27013 }, { stacking = true, buffType = "magic", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Insect Swarm
|
||||
Debuff({ 33745 }, { stacking = true, buffType = "physical", preEvent = "SPELL_CAST_SUCCESS" }, "DRUID") -- Lacerate
|
||||
Debuff({ 33878, 33986, 33987 }, { buffType = "physical" }, "DRUID") -- Mangle (Bear)
|
||||
Debuff({ 33876, 33982, 33983 }, { buffType = "physical" }, "DRUID") -- Mangle (Cat)
|
||||
|
||||
-------------
|
||||
-- WARRIOR
|
||||
|
232
Libs/LibSpellRange-1.0/LibSpellRange-1.0.lua
Normal file
232
Libs/LibSpellRange-1.0/LibSpellRange-1.0.lua
Normal file
@ -0,0 +1,232 @@
|
||||
--- = Background =
|
||||
-- Blizzard's IsSpellInRange API has always been very limited - you either must have the name of the spell, or its spell book ID. Checking directly by spellID is simply not possible.
|
||||
-- Now, in Mists of Pandaria, Blizzard changed the way that many talents and specialization spells work - instead of giving you a new spell when leaned, they replace existing spells. These replacement spells do not work with Blizzard's IsSpellInRange function whatsoever; this limitation is what prompted the creation of this lib.
|
||||
-- = Usage =
|
||||
-- **LibSpellRange-1.0** exposes an enhanced version of IsSpellInRange that:
|
||||
-- * Allows ranged checking based on both spell name and spellID.
|
||||
-- * Works correctly with replacement spells that will not work using Blizzard's IsSpellInRange method alone.
|
||||
--
|
||||
-- @class file
|
||||
-- @name LibSpellRange-1.0.lua
|
||||
|
||||
local major = "SpellRange-1.0"
|
||||
local minor = 15
|
||||
|
||||
assert(LibStub, format("%s requires LibStub.", major))
|
||||
|
||||
local Lib = LibStub:NewLibrary(major, minor)
|
||||
if not Lib then return end
|
||||
|
||||
local tonumber = _G.tonumber
|
||||
local strlower = _G.strlower
|
||||
local wipe = _G.wipe
|
||||
local type = _G.type
|
||||
|
||||
local GetSpellTabInfo = _G.GetSpellTabInfo
|
||||
local GetNumSpellTabs = _G.GetNumSpellTabs
|
||||
local GetSpellBookItemInfo = _G.GetSpellBookItemInfo
|
||||
local GetSpellBookItemName = _G.GetSpellBookItemName
|
||||
local GetSpellLink = _G.GetSpellLink
|
||||
local GetSpellInfo = _G.GetSpellInfo
|
||||
|
||||
local IsSpellInRange = _G.IsSpellInRange
|
||||
local SpellHasRange = _G.SpellHasRange
|
||||
|
||||
-- isNumber is basically a tonumber cache for maximum efficiency
|
||||
Lib.isNumber = Lib.isNumber or setmetatable({}, {
|
||||
__mode = "kv",
|
||||
__index = function(t, i)
|
||||
local o = tonumber(i) or false
|
||||
t[i] = o
|
||||
return o
|
||||
end})
|
||||
local isNumber = Lib.isNumber
|
||||
|
||||
-- strlower cache for maximum efficiency
|
||||
Lib.strlowerCache = Lib.strlowerCache or setmetatable(
|
||||
{}, {
|
||||
__index = function(t, i)
|
||||
if not i then return end
|
||||
local o
|
||||
if type(i) == "number" then
|
||||
o = i
|
||||
else
|
||||
o = strlower(i)
|
||||
end
|
||||
t[i] = o
|
||||
return o
|
||||
end,
|
||||
}) local strlowerCache = Lib.strlowerCache
|
||||
|
||||
-- Matches lowercase player spell names to their spellBookID
|
||||
Lib.spellsByName_spell = Lib.spellsByName_spell or {}
|
||||
local spellsByName_spell = Lib.spellsByName_spell
|
||||
|
||||
-- Matches player spellIDs to their spellBookID
|
||||
Lib.spellsByID_spell = Lib.spellsByID_spell or {}
|
||||
local spellsByID_spell = Lib.spellsByID_spell
|
||||
|
||||
-- Matches lowercase pet spell names to their spellBookID
|
||||
Lib.spellsByName_pet = Lib.spellsByName_pet or {}
|
||||
local spellsByName_pet = Lib.spellsByName_pet
|
||||
|
||||
-- Matches pet spellIDs to their spellBookID
|
||||
Lib.spellsByID_pet = Lib.spellsByID_pet or {}
|
||||
local spellsByID_pet = Lib.spellsByID_pet
|
||||
|
||||
-- Updates spellsByName and spellsByID
|
||||
local function UpdateBook(bookType)
|
||||
local max = 0
|
||||
for i = 1, GetNumSpellTabs() do
|
||||
local _, _, offs, numspells, _, specId = GetSpellTabInfo(i)
|
||||
if specId == 0 then
|
||||
max = offs + numspells
|
||||
end
|
||||
end
|
||||
|
||||
local spellsByName = Lib["spellsByName_" .. bookType]
|
||||
local spellsByID = Lib["spellsByID_" .. bookType]
|
||||
|
||||
wipe(spellsByName)
|
||||
wipe(spellsByID)
|
||||
|
||||
for spellBookID = 1, max do
|
||||
local type, baseSpellID = GetSpellBookItemInfo(spellBookID, bookType)
|
||||
|
||||
if type == "SPELL" or type == "PETACTION" then
|
||||
local currentSpellName = GetSpellBookItemName(spellBookID, bookType)
|
||||
local link = GetSpellLink(currentSpellName)
|
||||
local currentSpellID = tonumber(link and link:gsub("|", "||"):match("spell:(%d+)"))
|
||||
|
||||
-- For each entry we add to a table,
|
||||
-- only add it if there isn't anything there already.
|
||||
-- This prevents weird passives from overwriting real, legit spells.
|
||||
-- For example, in WoW 7.3.5 the ret paladin mastery
|
||||
-- was coming back with a base spell named "Judgement",
|
||||
-- which was overwriting the real "Judgement".
|
||||
-- Passives usually come last in the spellbook,
|
||||
-- so this should work just fine as a workaround.
|
||||
-- This issue with "Judgement" is gone in BFA because the mastery changed.
|
||||
|
||||
if currentSpellName and not spellsByName[strlower(currentSpellName)] then
|
||||
spellsByName[strlower(currentSpellName)] = spellBookID
|
||||
end
|
||||
if currentSpellID and not spellsByID[currentSpellID] then
|
||||
spellsByID[currentSpellID] = spellBookID
|
||||
end
|
||||
|
||||
if type == "SPELL" then
|
||||
-- PETACTION (pet abilities) don't return a spellID for baseSpellID,
|
||||
-- so base spells only work for proper player spells.
|
||||
local baseSpellName = GetSpellInfo(baseSpellID)
|
||||
if baseSpellName and not spellsByName[strlower(baseSpellName)] then
|
||||
spellsByName[strlower(baseSpellName)] = spellBookID
|
||||
end
|
||||
if baseSpellID and not spellsByID[baseSpellID] then
|
||||
spellsByID[baseSpellID] = spellBookID
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Handles updating spellsByName and spellsByID
|
||||
if not Lib.updaterFrame then
|
||||
Lib.updaterFrame = CreateFrame("Frame")
|
||||
end
|
||||
Lib.updaterFrame:UnregisterAllEvents()
|
||||
Lib.updaterFrame:RegisterEvent("SPELLS_CHANGED")
|
||||
|
||||
local function UpdateSpells()
|
||||
UpdateBook("spell")
|
||||
UpdateBook("pet")
|
||||
end
|
||||
|
||||
Lib.updaterFrame:SetScript("OnEvent", UpdateSpells)
|
||||
UpdateSpells()
|
||||
|
||||
--- Improved spell range checking function.
|
||||
-- @name SpellRange.IsSpellInRange
|
||||
-- @paramsig spell, unit
|
||||
-- @param spell Name or spellID of a spell that you wish to check the range of. The spell must be a spell that you have in your spellbook or your pet's spellbook.
|
||||
-- @param unit UnitID of the spell that you wish to check the range on.
|
||||
-- @return Exact same returns as http://wowprogramming.com/docs/api/IsSpellInRange
|
||||
-- @usage
|
||||
-- -- Check spell range by spell name on unit "target"
|
||||
-- local SpellRange = LibStub("SpellRange-1.0")
|
||||
-- local inRange = SpellRange.IsSpellInRange("Stormstrike", "target")
|
||||
--
|
||||
-- -- Check spell range by spellID on unit "mouseover"
|
||||
-- local SpellRange = LibStub("SpellRange-1.0")
|
||||
-- local inRange = SpellRange.IsSpellInRange(17364, "mouseover")
|
||||
function Lib.IsSpellInRange(spellInput, unit)
|
||||
if isNumber[spellInput] then
|
||||
local spell = spellsByID_spell[spellInput]
|
||||
if spell then
|
||||
return IsSpellInRange(spell, "spell", unit)
|
||||
else
|
||||
local spell = spellsByID_pet[spellInput]
|
||||
if spell then
|
||||
return IsSpellInRange(spell, "pet", unit)
|
||||
end
|
||||
end
|
||||
else
|
||||
local spellInput = strlowerCache[spellInput]
|
||||
|
||||
local spell = spellsByName_spell[spellInput]
|
||||
if spell then
|
||||
return IsSpellInRange(spell, "spell", unit)
|
||||
else
|
||||
local spell = spellsByName_pet[spellInput]
|
||||
if spell then
|
||||
return IsSpellInRange(spell, "pet", unit)
|
||||
end
|
||||
end
|
||||
|
||||
return IsSpellInRange(spellInput, unit)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
--- Improved SpellHasRange.
|
||||
-- @name SpellRange.SpellHasRange
|
||||
-- @paramsig spell
|
||||
-- @param spell Name or spellID of a spell that you wish to check for a range. The spell must be a spell that you have in your spellbook or your pet's spellbook.
|
||||
-- @return Exact same returns as http://wowprogramming.com/docs/api/SpellHasRange
|
||||
-- @usage
|
||||
-- -- Check if a spell has a range by spell name
|
||||
-- local SpellRange = LibStub("SpellRange-1.0")
|
||||
-- local hasRange = SpellRange.SpellHasRange("Stormstrike")
|
||||
--
|
||||
-- -- Check if a spell has a range by spellID
|
||||
-- local SpellRange = LibStub("SpellRange-1.0")
|
||||
-- local hasRange = SpellRange.SpellHasRange(17364)
|
||||
function Lib.SpellHasRange(spellInput)
|
||||
if isNumber[spellInput] then
|
||||
local spell = spellsByID_spell[spellInput]
|
||||
if spell then
|
||||
return SpellHasRange(spell, "spell")
|
||||
else
|
||||
local spell = spellsByID_pet[spellInput]
|
||||
if spell then
|
||||
return SpellHasRange(spell, "pet")
|
||||
end
|
||||
end
|
||||
else
|
||||
local spellInput = strlowerCache[spellInput]
|
||||
|
||||
local spell = spellsByName_spell[spellInput]
|
||||
if spell then
|
||||
return SpellHasRange(spell, "spell")
|
||||
else
|
||||
local spell = spellsByName_pet[spellInput]
|
||||
if spell then
|
||||
return SpellHasRange(spell, "pet")
|
||||
end
|
||||
end
|
||||
|
||||
return SpellHasRange(spellInput)
|
||||
end
|
||||
|
||||
end
|
61
Libs/LibSpellRange-1.0/README.md
Normal file
61
Libs/LibSpellRange-1.0/README.md
Normal file
@ -0,0 +1,61 @@
|
||||
# LibSpellRange-1.0
|
||||
|
||||
## Background
|
||||
|
||||
Blizzard's `IsSpellInRange` API has always been very limited - you either must have the name of the spell,
|
||||
or its spell book ID. Checking directly by spellID is simply not possible.
|
||||
Now, since Mists of Pandaria, Blizzard changed the way that many talents and specialization spells work -
|
||||
instead of giving you a new spell when leaned, they replace existing spells. These replacement spells do
|
||||
not work with Blizzard's IsSpellInRange function whatsoever; this limitation is what prompted the creation of this lib.
|
||||
|
||||
## Usage
|
||||
|
||||
**LibSpellRange-1.0** exposes an enhanced version of IsSpellInRange that:
|
||||
|
||||
* Allows ranged checking based on both spell name and spellID.
|
||||
* Works correctly with replacement spells that will not work using Blizzard's IsSpellInRange method alone.
|
||||
|
||||
### `SpellRange.IsSpellInRange(spell, unit)` - Improved `IsSpellInRange`
|
||||
|
||||
#### Parameters
|
||||
|
||||
- `spell` - Name or spellID of a spell that you wish to check the range of. The spell must be a spell that you have in your spellbook or your pet's spellbook.
|
||||
- `unit` - UnitID of the spell that you wish to check the range on.
|
||||
|
||||
#### Return value
|
||||
|
||||
Exact same returns as [the built-in `IsSpellInRange`](http://wowprogramming.com/docs/api/IsSpellInRange.html)
|
||||
|
||||
#### Usage
|
||||
|
||||
``` lua
|
||||
-- Check spell range by spell name on unit "target"
|
||||
local SpellRange = LibStub("SpellRange-1.0")
|
||||
local inRange = SpellRange.IsSpellInRange("Stormstrike", "target")
|
||||
|
||||
-- Check spell range by spellID on unit "mouseover"
|
||||
local SpellRange = LibStub("SpellRange-1.0")
|
||||
local inRange = SpellRange.IsSpellInRange(17364, "mouseover")
|
||||
```
|
||||
|
||||
### `SpellRange.SpellHasRange(spell)` - Improved `SpellHasRange`
|
||||
|
||||
#### Parameters
|
||||
|
||||
- `spell` - Name or spellID of a spell that you wish to check for a range. The spell must be a spell that you have in your spellbook or your pet's spellbook.
|
||||
|
||||
#### Return value
|
||||
|
||||
Exact same returns as [the built-in `SpellHasRange`](http://wowprogramming.com/docs/api/SpellHasRange.html)
|
||||
|
||||
#### Usage
|
||||
|
||||
``` lua
|
||||
-- Check if a spell has a range by spell name
|
||||
local SpellRange = LibStub("SpellRange-1.0")
|
||||
local hasRange = SpellRange.SpellHasRange("Stormstrike")
|
||||
|
||||
-- Check if a spell has a range by spellID
|
||||
local SpellRange = LibStub("SpellRange-1.0")
|
||||
local hasRange = SpellRange.SpellHasRange(17364)
|
||||
```
|
3
Libs/LibSpellRange-1.0/lib.xml
Normal file
3
Libs/LibSpellRange-1.0/lib.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<Ui>
|
||||
<Script file="LibSpellRange-1.0.lua"/>
|
||||
</Ui>
|
@ -21,12 +21,12 @@ local Announcements = Gladdy:NewModule("Announcements", nil, {
|
||||
drinks = true,
|
||||
resurrections = true,
|
||||
enemy = false,
|
||||
spec = false,
|
||||
spec = true,
|
||||
health = false,
|
||||
healthThreshold = 20,
|
||||
trinketUsed = true,
|
||||
trinketReady = false,
|
||||
dest = "self",
|
||||
dest = "party",
|
||||
},
|
||||
})
|
||||
|
||||
@ -47,6 +47,7 @@ function Announcements:Initialize()
|
||||
self:RegisterMessage("UNIT_HEALTH")
|
||||
self:RegisterMessage("TRINKET_USED")
|
||||
self:RegisterMessage("TRINKET_READY")
|
||||
self:RegisterMessage("SHADOWSIGHT")
|
||||
end
|
||||
|
||||
function Announcements:Reset()
|
||||
@ -148,6 +149,10 @@ function Announcements:CheckDrink(unit, aura)
|
||||
end
|
||||
end
|
||||
|
||||
function Announcements:SHADOWSIGHT(msg)
|
||||
self:Send(msg, 2)
|
||||
end
|
||||
|
||||
function Announcements:Send(msg, throttle, color)
|
||||
if (throttle and throttle > 0) then
|
||||
if (not self.throttled[msg]) then
|
||||
@ -172,9 +177,9 @@ function Announcements:Send(msg, throttle, color)
|
||||
RaidNotice_AddMessage(RaidBossEmoteFrame, msg, color)
|
||||
elseif (dest == "fct" and IsAddOnLoaded("Blizzard_CombatText")) then
|
||||
CombatText_AddMessage(msg, nil, color.r, color.g, color.b, "crit", 1)
|
||||
--[[elseif (dest == "msbt" and IsAddOnLoaded("MikScrollingBattleText")) then
|
||||
MikSBT.DisplayMessage(msg, MikSBT.DISPLAYTYPE_NOTIFICATION, true, color.r * 255, color.g * 255, color.b * 255)
|
||||
elseif (dest == "sct" and IsAddOnLoaded("sct")) then
|
||||
elseif (dest == "msbt" and IsAddOnLoaded("MikScrollingBattleText")) then
|
||||
MikSBT.Animations.DisplayMessage(msg, MikSBT.DISPLAYTYPE_NOTIFICATION, true, color.r * 255, color.g * 255, color.b * 255)
|
||||
--[[elseif (dest == "sct" and IsAddOnLoaded("sct")) then
|
||||
SCT:DisplayText(msg, color, true, "event", 1)
|
||||
elseif (dest == "parrot" and IsAddOnLoaded("parrot")) then
|
||||
Parrot:ShowMessage(msg, "Notification", true, color.r, color.g, color.b)--]]
|
||||
@ -205,12 +210,15 @@ function Announcements:GetOptions()
|
||||
["self"] = L["Self"],
|
||||
["party"] = L["Party"],
|
||||
["rw"] = L["Raid Warning"],
|
||||
["fct"] = L["Blizzard's Floating Combat Text"],
|
||||
--["msbt"] = L["MikScrollingBattleText"],
|
||||
--["sct"] = L["Scrolling Combat Text"],
|
||||
--["parrot"] = L["Parrot"],
|
||||
}
|
||||
|
||||
if IsAddOnLoaded("Blizzard_CombatText") then
|
||||
destValues["fct"] = L["Blizzard's Floating Combat Text"]
|
||||
end
|
||||
if IsAddOnLoaded("MikScrollingBattleText") then
|
||||
destValues["msbt"] = L["MikScrollingBattleText"]
|
||||
end
|
||||
|
||||
return {
|
||||
headerAnnouncements = {
|
||||
type = "header",
|
||||
|
@ -1,9 +1,10 @@
|
||||
local floor, str_len, tostring, str_sub, str_find = math.floor, string.len, tostring, string.sub, string.find
|
||||
local floor, str_len, tostring, str_sub, str_find, pairs = math.floor, string.len, tostring, string.sub, string.find, pairs
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local ACDFrame = Gladdy:NewModule("Countdown", nil, {
|
||||
local ACDFrame = Gladdy:NewModule("Arena Countdown", nil, {
|
||||
countdown = true,
|
||||
arenaCountdownSize = 256
|
||||
})
|
||||
@ -13,37 +14,41 @@ function ACDFrame:OnEvent(event, ...)
|
||||
end
|
||||
|
||||
function ACDFrame:Initialize()
|
||||
self.locale = Gladdy:GetArenaTimer()
|
||||
self.hidden = false
|
||||
self.countdown = -1
|
||||
self.texturePath = "Interface\\AddOns\\Gladdy\\Images\\Countdown\\";
|
||||
|
||||
local ACDNumFrame = CreateFrame("Frame", "ACDNumFrame", UIParent)
|
||||
ACDNumFrame:EnableMouse(false)
|
||||
ACDNumFrame:SetHeight(256)
|
||||
ACDNumFrame:SetWidth(256)
|
||||
ACDNumFrame:SetPoint("CENTER", 0, 128)
|
||||
ACDNumFrame:SetHeight(512)
|
||||
ACDNumFrame:SetWidth(512)
|
||||
ACDNumFrame:SetPoint("CENTER", 0, 256)
|
||||
ACDNumFrame:Show()
|
||||
self.ACDNumFrame = ACDNumFrame
|
||||
|
||||
local ACDNumTens = ACDNumFrame:CreateTexture("ACDNumTens", "HIGH")
|
||||
ACDNumTens:SetWidth(256)
|
||||
ACDNumTens:SetHeight(128)
|
||||
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -48, 0)
|
||||
ACDNumTens:SetHeight(256)
|
||||
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -50, 0)
|
||||
self.ACDNumTens = ACDNumTens
|
||||
|
||||
local ACDNumOnes = ACDNumFrame:CreateTexture("ACDNumOnes", "HIGH")
|
||||
ACDNumOnes:SetWidth(256)
|
||||
ACDNumOnes:SetHeight(128)
|
||||
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 48, 0)
|
||||
ACDNumOnes:SetHeight(256)
|
||||
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 50, 0)
|
||||
self.ACDNumOnes = ACDNumOnes
|
||||
|
||||
local ACDNumOne = ACDNumFrame:CreateTexture("ACDNumOne", "HIGH")
|
||||
ACDNumOne:SetWidth(256)
|
||||
ACDNumOne:SetHeight(128)
|
||||
ACDNumOne:SetHeight(256)
|
||||
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
|
||||
self.ACDNumOne = ACDNumOne
|
||||
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
self.faction = UnitFactionGroup("player")
|
||||
end
|
||||
|
||||
function ACDFrame.OnUpdate(self, elapse)
|
||||
@ -53,11 +58,7 @@ function ACDFrame.OnUpdate(self, elapse)
|
||||
if ((floor(self.countdown) ~= floor(self.countdown - elapse)) and (floor(self.countdown - elapse) >= 0)) then
|
||||
local str = tostring(floor(self.countdown - elapse));
|
||||
|
||||
if (floor(self.countdown - elapse) == 0) then
|
||||
self.ACDNumTens:Hide();
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumOne:Hide();
|
||||
elseif (str_len(str) == 2) then
|
||||
if (str_len(str) == 2) then
|
||||
-- Display has 2 digits
|
||||
self.ACDNumOne:Hide();
|
||||
self.ACDNumTens:Show();
|
||||
@ -68,8 +69,10 @@ function ACDFrame.OnUpdate(self, elapse)
|
||||
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 .. str_sub(str, 0, 1));
|
||||
self.ACDNumOne:SetTexture(self.texturePath .. path);
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumTens:Hide();
|
||||
self.ACDNumFrame:SetScale(1.0)
|
||||
@ -82,50 +85,41 @@ function ACDFrame.OnUpdate(self, elapse)
|
||||
self.ACDNumOnes:Hide();
|
||||
self.ACDNumOne:Hide();
|
||||
end
|
||||
if (GetTime() > self.endTime) then
|
||||
self:SetScript("OnUpdate", nil)
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:JOINED_ARENA()
|
||||
if Gladdy.db.countdown then
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
||||
self.endTime = GetTime() + 70
|
||||
self:SetScript("OnUpdate", ACDFrame.OnUpdate)
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:ENEMY_SPOTTED()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:UNIT_SPEC()
|
||||
if not Gladdy.frame.testing then
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
end
|
||||
|
||||
function ACDFrame:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)
|
||||
if (str_find(msg, "L'ar\195\168ne ouvre ses portes dans 60 secondes !")) then
|
||||
self.countdown = 61
|
||||
return
|
||||
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
|
||||
if (str_find(msg, "L'ar\195\168ne ouvre ses portes dans 30 secondes !")) then
|
||||
self.countdown = 31
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "L'ar\195\168ne ouvre ses portes dans 15 secondes !")) then
|
||||
self.countdown = 16
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "L'ar\195\168ne ouvre ses portes dans 10 secondes !")) then
|
||||
self.countdown = 11
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "One minute until the Arena battle begins!")) then
|
||||
self.countdown = 61
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "Thirty seconds until the Arena battle begins!")) then
|
||||
self.countdown = 31
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "Fifteen seconds until the Arena battle begins!")) then
|
||||
self.countdown = 16
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "Ten seconds until the Arena battle begins!")) then
|
||||
self.countdown = 10
|
||||
return
|
||||
end
|
||||
if (str_find(msg, "The Arena battle has begun!")) then
|
||||
ACDFrame:SetScript("OnUpdate", nil)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
@ -135,15 +129,15 @@ function ACDFrame:UpdateFrame()
|
||||
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
|
||||
|
||||
self.ACDNumTens:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumTens:SetHeight(Gladdy.db.arenaCountdownSize/2)
|
||||
self.ACDNumTens:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumTens:SetPoint("CENTER", self.ACDNumFrame, "CENTER", -(Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
|
||||
|
||||
self.ACDNumOnes:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOnes:SetHeight(Gladdy.db.arenaCountdownSize/2)
|
||||
self.ACDNumOnes:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOnes:SetPoint("CENTER", self.ACDNumFrame, "CENTER", (Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
|
||||
|
||||
self.ACDNumOne:SetWidth(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOne:SetHeight(Gladdy.db.arenaCountdownSize/2)
|
||||
self.ACDNumOne:SetHeight(Gladdy.db.arenaCountdownSize)
|
||||
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
|
||||
end
|
||||
|
||||
@ -153,6 +147,7 @@ function ACDFrame:Test()
|
||||
end
|
||||
|
||||
function ACDFrame:Reset()
|
||||
self.endTime = 0
|
||||
self.countdown = 0
|
||||
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnUpdate", nil)
|
||||
@ -171,7 +166,7 @@ function ACDFrame:GetOptions()
|
||||
},
|
||||
countdown = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Turn on/off"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Turns countdown before the start of an arena match on/off."],
|
||||
order = 3,
|
||||
width = "full",
|
||||
@ -183,6 +178,7 @@ function ACDFrame:GetOptions()
|
||||
min = 64,
|
||||
max = 512,
|
||||
step = 16,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
end
|
||||
|
@ -1,6 +1,7 @@
|
||||
local pairs, ipairs, select, tinsert, tbl_sort, tostring = pairs, ipairs, select, tinsert, table.sort, tostring
|
||||
local pairs, ipairs, select, tinsert, tbl_sort, tostring, tonumber, rand = pairs, ipairs, select, tinsert, table.sort, tostring, tonumber, math.random
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local GetSpellDescription = GetSpellDescription
|
||||
local CreateFrame, GetTime = CreateFrame, GetTime
|
||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
||||
|
||||
@ -8,15 +9,26 @@ local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local function defaultSpells(auraType)
|
||||
local spells = {}
|
||||
for k,v in pairs(Gladdy:GetImportantAuras()) do
|
||||
for _,v in pairs(Gladdy:GetImportantAuras()) do
|
||||
if not auraType or auraType == v.track then
|
||||
spells[tostring(v.spellID)] = {}
|
||||
spells[tostring(v.spellID)].enabled = true
|
||||
spells[tostring(v.spellID)].priority = v.priority
|
||||
spells[tostring(v.spellID)].track = v.track
|
||||
end
|
||||
end
|
||||
return spells
|
||||
end
|
||||
local function defaultInterrupts()
|
||||
local spells = {}
|
||||
for _,v in pairs(Gladdy:GetInterrupts()) do
|
||||
spells[tostring(v.spellID)] = {}
|
||||
spells[tostring(v.spellID)].enabled = true
|
||||
spells[tostring(v.spellID)].priority = v.priority
|
||||
end
|
||||
return spells
|
||||
end
|
||||
|
||||
local Auras = Gladdy:NewModule("Auras", nil, {
|
||||
auraFont = "DorisPP",
|
||||
auraFontSizeScale = 1,
|
||||
@ -26,7 +38,10 @@ local Auras = Gladdy:NewModule("Auras", nil, {
|
||||
auraDebuffBorderColor = { r = 0, g = 1, b = 0, a = 1 },
|
||||
auraDisableCircle = false,
|
||||
auraCooldownAlpha = 1,
|
||||
auraListDefault = defaultSpells()
|
||||
auraListDefault = defaultSpells(),
|
||||
auraListInterrupts = defaultInterrupts(),
|
||||
auraInterruptColorsEnabled = true,
|
||||
auraInterruptColors = Gladdy:GetSpellSchoolColors()
|
||||
})
|
||||
|
||||
function Auras:Initialize()
|
||||
@ -38,10 +53,11 @@ function Auras:Initialize()
|
||||
self:RegisterMessage("UNIT_DEATH")
|
||||
self:RegisterMessage("AURA_GAIN")
|
||||
self:RegisterMessage("AURA_FADE")
|
||||
self:RegisterMessage("SPELL_INTERRUPT")
|
||||
end
|
||||
|
||||
function Auras:CreateFrame(unit)
|
||||
local auraFrame = CreateFrame("Frame", nil, Gladdy.modules.Classicon.frames[unit])
|
||||
local auraFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit])
|
||||
auraFrame:EnableMouse(false)
|
||||
auraFrame:SetFrameStrata("MEDIUM")
|
||||
auraFrame:SetFrameLevel(3)
|
||||
@ -67,22 +83,12 @@ function Auras:CreateFrame(unit)
|
||||
auraFrame.icon.overlay:SetAllPoints(auraFrame)
|
||||
auraFrame.icon.overlay:SetTexture(Gladdy.db.buttonBorderStyle)
|
||||
|
||||
local classIcon = Gladdy.modules.Classicon.frames[unit]
|
||||
local classIcon = Gladdy.modules["Class Icon"].frames[unit]
|
||||
auraFrame:ClearAllPoints()
|
||||
auraFrame:SetAllPoints(classIcon)
|
||||
auraFrame:SetScript("OnUpdate", function(self, elapsed)
|
||||
if (self.active) then
|
||||
if (self.timeLeft <= 0) then
|
||||
Auras:AURA_FADE(unit)
|
||||
else
|
||||
self.timeLeft = self.timeLeft - elapsed
|
||||
self.text:SetFormattedText("%.1f", self.timeLeft >= 0.0 and self.timeLeft or 0.0)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
auraFrame.text = auraFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
auraFrame.text:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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:SetShadowOffset(1, -1)
|
||||
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
||||
@ -90,7 +96,94 @@ function Auras:CreateFrame(unit)
|
||||
auraFrame.text:SetPoint("CENTER")
|
||||
auraFrame.unit = unit
|
||||
|
||||
auraFrame:SetScript("OnUpdate", function(self, elapsed)
|
||||
if (self.active) then
|
||||
if (self.interruptFrame.priority and self.priority < self.interruptFrame.priority) then
|
||||
self:SetAlpha(0.01)
|
||||
else
|
||||
self:SetAlpha(1)
|
||||
end
|
||||
if (self.timeLeft <= 0) then
|
||||
Auras:AURA_FADE(self.unit, self.track)
|
||||
else
|
||||
self.timeLeft = self.timeLeft - elapsed
|
||||
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 10)
|
||||
end
|
||||
else
|
||||
self:SetAlpha(0.01)
|
||||
end
|
||||
end)
|
||||
|
||||
Gladdy.buttons[unit].aura = auraFrame
|
||||
self.frames[unit] = auraFrame
|
||||
self:CreateInterrupt(unit)
|
||||
self:ResetUnit(unit)
|
||||
end
|
||||
|
||||
function Auras:CreateInterrupt(unit)
|
||||
local interruptFrame = CreateFrame("Frame", nil, Gladdy.modules["Class Icon"].frames[unit])
|
||||
interruptFrame:EnableMouse(false)
|
||||
interruptFrame:SetFrameStrata("MEDIUM")
|
||||
interruptFrame:SetFrameLevel(3)
|
||||
|
||||
interruptFrame.cooldown = CreateFrame("Cooldown", nil, interruptFrame, "CooldownFrameTemplate")
|
||||
interruptFrame.cooldown.noCooldownCount = true
|
||||
interruptFrame.cooldown:SetFrameStrata("MEDIUM")
|
||||
interruptFrame.cooldown:SetFrameLevel(4)
|
||||
interruptFrame.cooldown:SetReverse(true)
|
||||
interruptFrame.cooldown:SetHideCountdownNumbers(true)
|
||||
|
||||
interruptFrame.cooldownFrame = CreateFrame("Frame", nil, interruptFrame)
|
||||
interruptFrame.cooldownFrame:ClearAllPoints()
|
||||
interruptFrame.cooldownFrame:SetAllPoints(interruptFrame)
|
||||
interruptFrame.cooldownFrame:SetFrameStrata("MEDIUM")
|
||||
interruptFrame.cooldownFrame:SetFrameLevel(5)
|
||||
|
||||
interruptFrame.icon = interruptFrame:CreateTexture(nil, "BACKGROUND")
|
||||
interruptFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
|
||||
interruptFrame.icon:SetAllPoints(interruptFrame)
|
||||
|
||||
interruptFrame.icon.overlay = interruptFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
|
||||
interruptFrame.icon.overlay:SetAllPoints(interruptFrame)
|
||||
interruptFrame.icon.overlay:SetTexture(Gladdy.db.buttonBorderStyle)
|
||||
|
||||
local classIcon = Gladdy.modules["Class Icon"].frames[unit]
|
||||
interruptFrame:ClearAllPoints()
|
||||
interruptFrame:SetAllPoints(classIcon)
|
||||
|
||||
interruptFrame.text = interruptFrame.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
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)
|
||||
--auraFrame.text:SetShadowOffset(1, -1)
|
||||
--auraFrame.text:SetShadowColor(0, 0, 0, 1)
|
||||
interruptFrame.text:SetJustifyH("CENTER")
|
||||
interruptFrame.text:SetPoint("CENTER")
|
||||
interruptFrame.unit = unit
|
||||
|
||||
interruptFrame:SetScript("OnUpdate", function(self, elapsed)
|
||||
if (self.active) then
|
||||
if (Auras.frames[self.unit].priority and self.priority <= Auras.frames[self.unit].priority) then
|
||||
self:SetAlpha(0.01)
|
||||
else
|
||||
self:SetAlpha(1)
|
||||
end
|
||||
if (self.timeLeft <= 0) then
|
||||
self.active = false
|
||||
self.priority = nil
|
||||
self.spellSchool = nil
|
||||
self.cooldown:Clear()
|
||||
self:SetAlpha(0.01)
|
||||
else
|
||||
self.timeLeft = self.timeLeft - elapsed
|
||||
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 10)
|
||||
end
|
||||
else
|
||||
self:SetAlpha(0.01)
|
||||
end
|
||||
end)
|
||||
|
||||
Gladdy.buttons[unit].interruptFrame = interruptFrame
|
||||
self.frames[unit].interruptFrame = interruptFrame
|
||||
self:ResetUnit(unit)
|
||||
end
|
||||
|
||||
@ -104,7 +197,7 @@ function Auras:UpdateFrame(unit)
|
||||
|
||||
auraFrame:SetWidth(width)
|
||||
auraFrame:SetHeight(height)
|
||||
auraFrame:SetAllPoints(Gladdy.modules.Classicon.frames[unit])
|
||||
auraFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit])
|
||||
|
||||
auraFrame.cooldown:SetWidth(width - width/16)
|
||||
auraFrame.cooldown:SetHeight(height - height/16)
|
||||
@ -112,7 +205,7 @@ function Auras:UpdateFrame(unit)
|
||||
auraFrame.cooldown:SetPoint("CENTER", auraFrame, "CENTER")
|
||||
auraFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||
|
||||
auraFrame.text:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
||||
@ -123,67 +216,159 @@ function Auras:UpdateFrame(unit)
|
||||
else
|
||||
auraFrame.icon.overlay:SetVertexColor(0, 0, 0, 1)
|
||||
end
|
||||
if not auraFrame.active then
|
||||
auraFrame.icon.overlay:Hide()
|
||||
end
|
||||
if Gladdy.db.auraDisableCircle then
|
||||
auraFrame.cooldown:SetAlpha(0)
|
||||
end
|
||||
self:UpdateInterruptFrame(unit)
|
||||
end
|
||||
|
||||
function Auras:UpdateInterruptFrame(unit)
|
||||
local interruptFrame = self.frames[unit] and self.frames[unit].interruptFrame
|
||||
if (not interruptFrame) then
|
||||
return
|
||||
end
|
||||
|
||||
local width, height = Gladdy.db.classIconSize * Gladdy.db.classIconWidthFactor, Gladdy.db.classIconSize
|
||||
|
||||
interruptFrame:SetWidth(width)
|
||||
interruptFrame:SetHeight(height)
|
||||
interruptFrame:SetAllPoints(Gladdy.modules["Class Icon"].frames[unit])
|
||||
|
||||
interruptFrame.cooldown:SetWidth(width - width/16)
|
||||
interruptFrame.cooldown:SetHeight(height - height/16)
|
||||
interruptFrame.cooldown:ClearAllPoints()
|
||||
interruptFrame.cooldown:SetPoint("CENTER", interruptFrame, "CENTER")
|
||||
interruptFrame.cooldown:SetAlpha(Gladdy.db.auraCooldownAlpha)
|
||||
|
||||
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.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
||||
if interruptFrame.spellSchool then
|
||||
interruptFrame.icon.overlay:SetVertexColor(self:GetInterruptColor(interruptFrame.spellSchool))
|
||||
else
|
||||
interruptFrame.icon.overlay:SetVertexColor(0, 0, 0, 1)
|
||||
end
|
||||
if not interruptFrame.active then
|
||||
interruptFrame.icon.overlay:Hide()
|
||||
end
|
||||
if Gladdy.db.auraDisableCircle then
|
||||
interruptFrame.cooldown:SetAlpha(0)
|
||||
end
|
||||
end
|
||||
|
||||
function Auras:ResetUnit(unit)
|
||||
self.frames[unit]:UnregisterAllEvents()
|
||||
self:AURA_FADE(unit)
|
||||
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
end
|
||||
|
||||
function Auras:Test(unit)
|
||||
local aura, _, icon
|
||||
local spellName, spellid, icon, limit
|
||||
|
||||
if (unit == "arena1") then
|
||||
aura, _, icon = GetSpellInfo(12826)
|
||||
self:AURA_GAIN(unit,nil, 12826, aura, icon, self.auras[aura].duration, GetTime() + self.auras[aura].duration)
|
||||
elseif (unit == "arena2") then
|
||||
aura, _, icon = GetSpellInfo(6770)
|
||||
self:AURA_GAIN(unit,nil, 6770, aura, icon, self.auras[aura].duration, GetTime() + self.auras[aura].duration)
|
||||
elseif (unit == "arena3") then
|
||||
aura, _, icon = GetSpellInfo(31224)
|
||||
self:AURA_GAIN(unit,nil, 31224, aura, icon, self.auras[aura].duration, GetTime() + self.auras[aura].duration)
|
||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
|
||||
--Auras
|
||||
local enabledDebuffs, enabledBuffs, testauras = {}, {}
|
||||
for spellIdStr,value in pairs(Gladdy.db.auraListDefault) do
|
||||
if value.enabled then
|
||||
if value.track == AURA_TYPE_BUFF then
|
||||
tinsert(enabledBuffs, {value = value, spellIdStr = spellIdStr})
|
||||
else
|
||||
tinsert(enabledDebuffs, {value = value, spellIdStr = spellIdStr})
|
||||
end
|
||||
end
|
||||
end
|
||||
if unit == "arena2" then
|
||||
testauras = enabledBuffs
|
||||
else
|
||||
testauras = enabledDebuffs
|
||||
end
|
||||
|
||||
if #testauras > 0 then
|
||||
limit = rand(1, #testauras)
|
||||
local v = testauras[rand(1, #testauras)]
|
||||
spellid = tonumber(v.spellIdStr)
|
||||
spellName = select(1, GetSpellInfo(tonumber(v.spellIdStr)))
|
||||
icon = select(3, GetSpellInfo(tonumber(v.spellIdStr)))
|
||||
if Gladdy.exceptionNames[spellid] then
|
||||
spellName = Gladdy.exceptionNames[spellid]
|
||||
end
|
||||
if (unit == "arena2") then
|
||||
if (v.value.track == AURA_TYPE_BUFF) then
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
end
|
||||
else
|
||||
self:AURA_GAIN(unit,v.value.track, spellid, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
end
|
||||
end
|
||||
|
||||
--Interrupts
|
||||
if (unit == "arena1" or unit == "arena3") then
|
||||
local enabledInterrupts = {}
|
||||
local spellSchools = {}
|
||||
for k,_ in pairs(Gladdy:GetSpellSchoolColors()) do
|
||||
tinsert(spellSchools, k)
|
||||
end
|
||||
for spellIdStr, value in pairs(Gladdy.db.auraListInterrupts) do
|
||||
if value.enabled then
|
||||
tinsert(enabledInterrupts, spellIdStr)
|
||||
end
|
||||
end
|
||||
if #enabledInterrupts > 0 then
|
||||
local extraSpellSchool = spellSchools[rand(1, #spellSchools)]
|
||||
spellid = tonumber(enabledInterrupts[rand(1, #enabledInterrupts)])
|
||||
spellName = select(1, GetSpellInfo(spellid))
|
||||
self:SPELL_INTERRUPT(unit,spellid, spellName, "physical", spellid, spellName, extraSpellSchool)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Auras:JOINED_ARENA()
|
||||
for i=1, Gladdy.curBracket do
|
||||
--self.frames["arena" .. i]:RegisterUnitEvent("UNIT_AURA", "arena" .. i)
|
||||
--self.frames["arena" .. i]:SetScript("OnEvent", Auras.OnEvent)
|
||||
end
|
||||
--[[for i=1, Gladdy.curBracket do
|
||||
self.frames["arena" .. i]:RegisterUnitEvent("UNIT_AURA", "arena" .. i)
|
||||
self.frames["arena" .. i]:SetScript("OnEvent", Auras.OnEvent)
|
||||
end--]]
|
||||
end
|
||||
|
||||
function Auras:AURA_GAIN(unit, auraType, spellID, aura, icon, duration, expirationTime, count, debuffType)
|
||||
function Auras:AURA_GAIN(unit, auraType, spellID, spellName, icon, duration, expirationTime, count, debuffType)
|
||||
local auraFrame = self.frames[unit]
|
||||
if (not auraFrame) then
|
||||
return
|
||||
end
|
||||
if not self.auras[aura] then
|
||||
|
||||
if spellID == 31117 then
|
||||
spellName = "Unstable Affliction Silence"
|
||||
end
|
||||
|
||||
if not self.auras[spellName] then
|
||||
return
|
||||
end
|
||||
-- don't use spellId from combatlog, in case of different spellrank
|
||||
if not Gladdy.db.auraListDefault[tostring(self.auras[aura].spellID)] or not Gladdy.db.auraListDefault[tostring(self.auras[aura].spellID)].enabled then
|
||||
if not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)] or not Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].enabled then
|
||||
return
|
||||
end
|
||||
|
||||
if (auraFrame.priority and auraFrame.priority > Gladdy.db.auraListDefault[tostring(self.auras[aura].spellID)].priority) then
|
||||
if (auraFrame.priority and auraFrame.priority > Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].priority) then
|
||||
return
|
||||
end
|
||||
auraFrame.startTime = expirationTime - duration
|
||||
auraFrame.endTime = expirationTime
|
||||
auraFrame.name = aura
|
||||
auraFrame.name = spellName
|
||||
auraFrame.timeLeft = expirationTime - GetTime()
|
||||
auraFrame.priority = Gladdy.db.auraListDefault[tostring(self.auras[aura].spellID)].priority
|
||||
auraFrame.icon:SetTexture(icon)
|
||||
auraFrame.track = self.auras[aura].track
|
||||
auraFrame.priority = Gladdy.db.auraListDefault[tostring(self.auras[spellName].spellID)].priority
|
||||
auraFrame.icon:SetTexture(Gladdy:GetImportantAuras()[GetSpellInfo(self.auras[spellName].spellID)] and Gladdy:GetImportantAuras()[GetSpellInfo(self.auras[spellName].spellID)].texture or icon)
|
||||
auraFrame.track = auraType
|
||||
auraFrame.active = true
|
||||
auraFrame.icon.overlay:SetTexture(Gladdy.db.auraBorderStyle)
|
||||
auraFrame.icon.overlay:Show()
|
||||
auraFrame.cooldownFrame:Show()
|
||||
if auraFrame.track and auraFrame.track == 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)
|
||||
elseif auraFrame.track and auraFrame.track == 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)
|
||||
else
|
||||
auraFrame.icon.overlay:SetVertexColor(Gladdy.db.frameBorderColor.r, Gladdy.db.frameBorderColor.g, Gladdy.db.frameBorderColor.b, Gladdy.db.frameBorderColor.a)
|
||||
@ -194,15 +379,15 @@ function Auras:AURA_GAIN(unit, auraType, spellID, aura, icon, duration, expirati
|
||||
end
|
||||
end
|
||||
|
||||
function Auras:AURA_FADE(unit)
|
||||
function Auras:AURA_FADE(unit, auraType)
|
||||
local auraFrame = self.frames[unit]
|
||||
if (not auraFrame) then
|
||||
if (not auraFrame or auraFrame.track ~= auraType) then
|
||||
return
|
||||
end
|
||||
if auraFrame.active then
|
||||
auraFrame.cooldown:SetCooldown(GetTime(), 0)
|
||||
auraFrame.cooldown:Clear()
|
||||
end
|
||||
auraFrame.cooldown:Hide()
|
||||
--auraFrame.cooldown:Hide()
|
||||
auraFrame.active = false
|
||||
auraFrame.name = nil
|
||||
auraFrame.timeLeft = 0
|
||||
@ -211,78 +396,58 @@ function Auras:AURA_FADE(unit)
|
||||
auraFrame.endTime = nil
|
||||
auraFrame.icon:SetTexture("")
|
||||
auraFrame.text:SetText("")
|
||||
auraFrame.icon.overlay:SetTexture("")
|
||||
auraFrame.cooldownFrame:Hide()
|
||||
--auraFrame.icon.overlay:Hide()
|
||||
--auraFrame.cooldownFrame:Hide()
|
||||
end
|
||||
|
||||
function Auras:GetInterruptColor(extraSpellSchool)
|
||||
if not Gladdy.db.auraInterruptColorsEnabled then
|
||||
return Gladdy.db.auraDebuffBorderColor.r, Gladdy.db.auraDebuffBorderColor.g, Gladdy.db.auraDebuffBorderColor.b, Gladdy.db.auraDebuffBorderColor.a
|
||||
else
|
||||
local color = Gladdy.db.auraInterruptColors[extraSpellSchool] or Gladdy.db.auraInterruptColors["unknown"]
|
||||
return color.r, color.g, color.b, color.a
|
||||
end
|
||||
end
|
||||
|
||||
function Auras:SPELL_INTERRUPT(unit,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool)
|
||||
local auraFrame = self.frames[unit]
|
||||
local interruptFrame = auraFrame and auraFrame.interruptFrame
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not interruptFrame) then
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.auraListInterrupts[tostring(Gladdy:GetInterrupts()[spellName].spellID)] or not Gladdy.db.auraListInterrupts[tostring(Gladdy:GetInterrupts()[spellName].spellID)].enabled then
|
||||
return
|
||||
end
|
||||
if (interruptFrame.priority and interruptFrame.priority > Gladdy.db.auraListInterrupts[tostring(Gladdy:GetInterrupts()[spellName].spellID)].priority) then
|
||||
return
|
||||
end
|
||||
local multiplier = ((button.spec == L["Restoration"] and button.class == "SHAMAN") or (button.spec == L["Holy"] and button.class == "PALADIN")) and 0.7 or 1
|
||||
|
||||
local duration = Gladdy:GetInterrupts()[spellName].duration * multiplier
|
||||
|
||||
interruptFrame.startTime = GetTime()
|
||||
interruptFrame.endTime = GetTime() + duration
|
||||
interruptFrame.name = spellName
|
||||
interruptFrame.timeLeft = duration
|
||||
interruptFrame.priority = Gladdy.db.auraListInterrupts[tostring(Gladdy:GetInterrupts()[spellName].spellID)].priority
|
||||
interruptFrame.icon:SetTexture(Gladdy:GetInterrupts()[spellName].texture)
|
||||
interruptFrame.spellSchool = extraSpellSchool
|
||||
interruptFrame.active = true
|
||||
interruptFrame.icon.overlay:Show()
|
||||
interruptFrame.cooldownFrame:Show()
|
||||
|
||||
interruptFrame.icon.overlay:SetVertexColor(self:GetInterruptColor(extraSpellSchool))
|
||||
|
||||
if not Gladdy.db.auraDisableCircle then
|
||||
interruptFrame.cooldown:Show()
|
||||
interruptFrame.cooldown:SetCooldown(interruptFrame.startTime, duration)
|
||||
end
|
||||
--interruptFrame:SetAlpha(1)
|
||||
end
|
||||
|
||||
function Auras:GetOptions()
|
||||
return {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Auras"],
|
||||
order = 2,
|
||||
},
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
order = 3,
|
||||
args = {
|
||||
cooldown = {
|
||||
type = "group",
|
||||
name = "Cooldown",
|
||||
order = 1,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Cooldown"],
|
||||
order = 2,
|
||||
},
|
||||
auraDisableCircle = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 3,
|
||||
width = "full"
|
||||
}),
|
||||
auraCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Cooldown circle alpha"],
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 4,
|
||||
}),
|
||||
auraFont = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Font"],
|
||||
desc = L["Font of the cooldown"],
|
||||
order = 5,
|
||||
dialogControl = "LSM30_Font",
|
||||
values = AceGUIWidgetLSMlists.font,
|
||||
}),
|
||||
auraFontSizeScale = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Font scale"],
|
||||
desc = L["Scale of the text"],
|
||||
order = 6,
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
}),
|
||||
auraFontColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Font color"],
|
||||
desc = L["Color of the text"],
|
||||
order = 7,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
}
|
||||
},
|
||||
border = {
|
||||
type = "group",
|
||||
name = "Border",
|
||||
order = 2,
|
||||
args = {
|
||||
local borderArgs = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Border"],
|
||||
@ -310,23 +475,148 @@ function Auras:GetOptions()
|
||||
hasAlpha = true,
|
||||
width = "0.8",
|
||||
}),
|
||||
headerColors = {
|
||||
type = "header",
|
||||
name = L["Interrupt Spells School Colors"],
|
||||
order = 12,
|
||||
},
|
||||
auraInterruptColorsEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable Interrupt Spell School Colors"],
|
||||
width = "full",
|
||||
desc = L["Will use Debuff Color if disabled"],
|
||||
order = 13,
|
||||
}),
|
||||
}
|
||||
local list = {}
|
||||
for k,v in pairs(Gladdy:GetSpellSchoolColors()) do
|
||||
tinsert(list, { key = k, val = v})
|
||||
end
|
||||
tbl_sort(list, function(a, b) return a.val.type < b.val.type end)
|
||||
for i,v in ipairs(list) do
|
||||
borderArgs["auraSpellSchool" .. v.key] = {
|
||||
type = "color",
|
||||
name = L[v.val.type],
|
||||
order = i + 13,
|
||||
hasAlpha = true,
|
||||
width = "0.8",
|
||||
set = function(_, r, g, b, a)
|
||||
Gladdy.db.auraInterruptColors[v.key].r = r
|
||||
Gladdy.db.auraInterruptColors[v.key].g = g
|
||||
Gladdy.db.auraInterruptColors[v.key].b = b
|
||||
Gladdy.db.auraInterruptColors[v.key].a = a
|
||||
end,
|
||||
get = function()
|
||||
local color = Gladdy.db.auraInterruptColors[v.key]
|
||||
return color.r, color.g, color.b, color.a
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
return {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Auras"],
|
||||
order = 2,
|
||||
},
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
args = {
|
||||
cooldown = {
|
||||
type = "group",
|
||||
name = L["Cooldown"],
|
||||
order = 1,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Cooldown"],
|
||||
order = 2,
|
||||
},
|
||||
auraDisableCircle = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 3,
|
||||
width = "full"
|
||||
}),
|
||||
auraCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Cooldown circle alpha"],
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
},
|
||||
font = {
|
||||
type = "group",
|
||||
name = L["Font"],
|
||||
order = 2,
|
||||
args = {
|
||||
headerAuras = {
|
||||
type = "header",
|
||||
name = L["Font"],
|
||||
order = 1,
|
||||
},
|
||||
auraFont = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Font"],
|
||||
desc = L["Font of the cooldown"],
|
||||
order = 5,
|
||||
dialogControl = "LSM30_Font",
|
||||
values = AceGUIWidgetLSMlists.font,
|
||||
}),
|
||||
auraFontSizeScale = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Font scale"],
|
||||
desc = L["Scale of the text"],
|
||||
order = 6,
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
auraFontColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Font color"],
|
||||
desc = L["Color of the text"],
|
||||
order = 7,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
border = {
|
||||
type = "group",
|
||||
name = L["Border"],
|
||||
order = 3,
|
||||
args = borderArgs
|
||||
}
|
||||
}
|
||||
},
|
||||
debuffList = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Debuffs",
|
||||
name = L["Debuffs"],
|
||||
order = 4,
|
||||
args = Auras:GetAuraOptions(AURA_TYPE_DEBUFF)
|
||||
},
|
||||
buffList = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Buffs",
|
||||
name = L["Buffs"],
|
||||
order = 5,
|
||||
args = Auras:GetAuraOptions(AURA_TYPE_BUFF)
|
||||
},
|
||||
interruptList = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Interrupts"],
|
||||
order = 6,
|
||||
args = Auras:GetInterruptOptions()
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -336,10 +626,10 @@ function Auras:GetAuraOptions(auraType)
|
||||
ckeckAll = {
|
||||
order = 1,
|
||||
width = "0.7",
|
||||
name = "Check All",
|
||||
name = L["Check All"],
|
||||
type = "execute",
|
||||
func = function(info)
|
||||
for k,v in pairs(defaultSpells(auraType)) do
|
||||
func = function()
|
||||
for k,_ in pairs(defaultSpells(auraType)) do
|
||||
Gladdy.db.auraListDefault[k].enabled = true
|
||||
end
|
||||
end,
|
||||
@ -347,39 +637,47 @@ function Auras:GetAuraOptions(auraType)
|
||||
uncheckAll = {
|
||||
order = 2,
|
||||
width = "0.7",
|
||||
name = "Uncheck All",
|
||||
name = L["Uncheck All"],
|
||||
type = "execute",
|
||||
func = function(info)
|
||||
for k,v in pairs(defaultSpells(auraType)) do
|
||||
func = function()
|
||||
for k,_ in pairs(defaultSpells(auraType)) do
|
||||
Gladdy.db.auraListDefault[k].enabled = false
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
local auras = {}
|
||||
for k,v in pairs(Gladdy:GetImportantAuras()) do
|
||||
for _,v in pairs(Gladdy:GetImportantAuras()) do
|
||||
if v.track == auraType then
|
||||
tinsert(auras, v.spellID)
|
||||
end
|
||||
end
|
||||
tbl_sort(auras)
|
||||
tbl_sort(auras, function(a, b) return GetSpellInfo(a) < GetSpellInfo(b) end)
|
||||
for i,k in ipairs(auras) do
|
||||
options[tostring(k)] = {
|
||||
type = "group",
|
||||
name = GetSpellInfo(k),
|
||||
name = (Gladdy:GetImportantAuras()["Unstable Affliction Silence"]
|
||||
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,
|
||||
icon = select(3, GetSpellInfo(k)),
|
||||
icon = Gladdy:GetImportantAuras()[GetSpellInfo(k)] and Gladdy:GetImportantAuras()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||
args = {
|
||||
enabled = {
|
||||
order = 1,
|
||||
name = L["Enabled"],
|
||||
desc = GetSpellDescription(k),
|
||||
type = "toggle",
|
||||
image = select(3, GetSpellInfo(k)),
|
||||
image = Gladdy:GetImportantAuras()[GetSpellInfo(k)] and Gladdy:GetImportantAuras()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||
width = "2",
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.auraListDefault[tostring(k)].enabled = value
|
||||
end,
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.auraListDefault[tostring(k)].enabled
|
||||
end
|
||||
},
|
||||
@ -391,12 +689,88 @@ function Auras:GetAuraOptions(auraType)
|
||||
max = 50,
|
||||
width = "2",
|
||||
step = 1,
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.auraListDefault[tostring(k)].priority
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.auraListDefault[tostring(k)].priority = value
|
||||
end,
|
||||
width = "full",
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
return options
|
||||
end
|
||||
|
||||
function Auras:GetInterruptOptions()
|
||||
local options = {
|
||||
checkAll = {
|
||||
order = 1,
|
||||
width = "0.7",
|
||||
name = L["Check All"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
for k,_ in pairs(defaultInterrupts()) do
|
||||
Gladdy.db.auraListInterrupts[k].enabled = true
|
||||
end
|
||||
end,
|
||||
},
|
||||
uncheckAll = {
|
||||
order = 2,
|
||||
width = "0.7",
|
||||
name = L["Uncheck All"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
for k,_ in pairs(defaultInterrupts()) do
|
||||
Gladdy.db.auraListInterrupts[k].enabled = false
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
local auras = {}
|
||||
for _,v in pairs(Gladdy:GetInterrupts()) do
|
||||
tinsert(auras, v.spellID)
|
||||
end
|
||||
tbl_sort(auras, function(a, b) return GetSpellInfo(a) < GetSpellInfo(b) end)
|
||||
for i,k in ipairs(auras) do
|
||||
options[tostring(k)] = {
|
||||
type = "group",
|
||||
name = Gladdy:GetInterrupts()["Unstable Affliction Silence"]
|
||||
and Gladdy:GetInterrupts()["Unstable Affliction Silence"].spellID == k
|
||||
and Gladdy:GetInterrupts()["Unstable Affliction Silence"].altName
|
||||
or GetSpellInfo(k),
|
||||
order = i+2,
|
||||
icon = Gladdy:GetInterrupts()[GetSpellInfo(k)] and Gladdy:GetInterrupts()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||
args = {
|
||||
enabled = {
|
||||
order = 1,
|
||||
name = L["Enabled"],
|
||||
type = "toggle",
|
||||
image = Gladdy:GetInterrupts()[GetSpellInfo(k)] and Gladdy:GetInterrupts()[GetSpellInfo(k)].texture or select(3, GetSpellInfo(k)),
|
||||
width = "2",
|
||||
set = function(_, value)
|
||||
Gladdy.db.auraListInterrupts[tostring(k)].enabled = value
|
||||
end,
|
||||
get = function()
|
||||
return Gladdy.db.auraListInterrupts[tostring(k)].enabled
|
||||
end
|
||||
},
|
||||
priority = {
|
||||
order = 2,
|
||||
name = L["Priority"],
|
||||
type = "range",
|
||||
min = 0,
|
||||
max = 50,
|
||||
width = "2",
|
||||
step = 1,
|
||||
get = function()
|
||||
return Gladdy.db.auraListInterrupts[tostring(k)].priority
|
||||
end,
|
||||
set = function(_, value)
|
||||
Gladdy.db.auraListInterrupts[tostring(k)].priority = value
|
||||
end,
|
||||
width = "full",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +1,10 @@
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
local select, lower, ceil, tremove, tinsert, pairs, ipairs, tostring = select, string.lower, ceil, tremove, tinsert, pairs, ipairs, tostring
|
||||
local auraTypeColor = { }
|
||||
local select, lower, ceil, tremove, tinsert, pairs, ipairs, tostring, random = select, string.lower, ceil, tremove, tinsert, pairs, ipairs, tostring, math.random
|
||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
||||
local auraTypes = {AURA_TYPE_BUFF, AURA_TYPE_DEBUFF}
|
||||
|
||||
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"]
|
||||
|
||||
---------------------------
|
||||
-- Module init
|
||||
---------------------------
|
||||
@ -25,7 +14,7 @@ local LibClassAuras = LibStub("LibClassAuras-1.0")
|
||||
local L = Gladdy.L
|
||||
local defaultTrackedDebuffs = select(2, Gladdy:GetAuras(AURA_TYPE_DEBUFF))
|
||||
local defaultTrackedBuffs = select(2, Gladdy:GetAuras(AURA_TYPE_BUFF))
|
||||
local BuffsDebuffs = Gladdy:NewModule("BuffsDebuffs", nil, {
|
||||
local BuffsDebuffs = Gladdy:NewModule("Buffs and Debuffs", nil, {
|
||||
buffsEnabled = true,
|
||||
buffsShowAuraDebuffs = false,
|
||||
buffsAlpha = 1,
|
||||
@ -55,14 +44,14 @@ local BuffsDebuffs = Gladdy:NewModule("BuffsDebuffs", nil, {
|
||||
buffsBorderColorsEnabled = true,
|
||||
trackedDebuffs = defaultTrackedDebuffs,
|
||||
trackedBuffs = defaultTrackedBuffs,
|
||||
buffsBorderColorCurse = auraTypeColor["curse"],
|
||||
buffsBorderColorMagic = auraTypeColor["magic"],
|
||||
buffsBorderColorPoison = auraTypeColor["poison"],
|
||||
buffsBorderColorPhysical = auraTypeColor["none"],
|
||||
buffsBorderColorImmune = auraTypeColor["immune"],
|
||||
buffsBorderColorDisease = auraTypeColor["disease"],
|
||||
buffsBorderColorForm = auraTypeColor["form"],
|
||||
buffsBorderColorAura = auraTypeColor["aura"]
|
||||
buffsBorderColorCurse = Gladdy:GetAuraTypeColor()["curse"],
|
||||
buffsBorderColorMagic = Gladdy:GetAuraTypeColor()["magic"],
|
||||
buffsBorderColorPoison = Gladdy:GetAuraTypeColor()["poison"],
|
||||
buffsBorderColorPhysical = Gladdy:GetAuraTypeColor()["none"],
|
||||
buffsBorderColorImmune = Gladdy:GetAuraTypeColor()["immune"],
|
||||
buffsBorderColorDisease = Gladdy:GetAuraTypeColor()["disease"],
|
||||
buffsBorderColorForm = Gladdy:GetAuraTypeColor()["form"],
|
||||
buffsBorderColorAura = Gladdy:GetAuraTypeColor()["aura"]
|
||||
})
|
||||
|
||||
local spellSchoolToOptionValueTable
|
||||
@ -145,24 +134,30 @@ end
|
||||
|
||||
function BuffsDebuffs:Test(unit)
|
||||
if Gladdy.db.buffsEnabled then
|
||||
if unit == "arena1" or unit == "arena3" then
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 1943, select(1, GetSpellInfo(1943)), select(3, GetSpellInfo(1943)), 10, GetTime() + 10, 1, "physical")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 18647, select(1, GetSpellInfo(18647)), select(3, GetSpellInfo(18647)), 10, GetTime() + 10, 1, "immune")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 27218, select(1, GetSpellInfo(27218)), select(3, GetSpellInfo(27218)), 24, GetTime() + 20, 1, "curse")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 27216, select(1, GetSpellInfo(27216)), select(3, GetSpellInfo(27216)), 18, GetTime() + 18, 1, "magic")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 27189, select(1, GetSpellInfo(27189)), select(3, GetSpellInfo(27189)), 12, GetTime() + 12, 5, "poison")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_BUFF, 33076, select(1, GetSpellInfo(33076)), select(3, GetSpellInfo(33076)), 20, GetTime() + 20, 1, "magic")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_BUFF, 26980, select(1, GetSpellInfo(26980)), select(3, GetSpellInfo(26980)), 20, GetTime() + 20, 5, "magic")
|
||||
elseif unit == "arena2" then
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 1943, select(1, GetSpellInfo(1943)), select(3, GetSpellInfo(1943)), 10, GetTime() + 10, 1, "physical")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_DEBUFF, 1, select(1, GetSpellInfo(1)), select(3, GetSpellInfo(1)), 20, GetTime() + 20, 5, "poison")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_BUFF, 27009, select(1, GetSpellInfo(27009)), select(3, GetSpellInfo(27009)), 20, GetTime() + 15, 1, "magic")
|
||||
BuffsDebuffs:AURA_GAIN(unit, AURA_TYPE_BUFF, 11426, select(1, GetSpellInfo(11426)), select(3, GetSpellInfo(11426)), 10, GetTime() + 10, 1, "magic")
|
||||
local spellSchools = { "physical", "magic", "curse", "poison", "disease", "immune" }
|
||||
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
BuffsDebuffs:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
|
||||
local i = 1
|
||||
for spellID, enabled in pairs(Gladdy.db.trackedDebuffs) do
|
||||
if i > 4 then
|
||||
break
|
||||
end
|
||||
if enabled then
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_DEBUFF, 15, 15, random(1,5), spellSchools[random(1,6)], select(3, GetSpellInfo(spellID)), i)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
i = 1
|
||||
for spellID, enabled in pairs(Gladdy.db.trackedBuffs) do
|
||||
if i > 4 then
|
||||
break
|
||||
end
|
||||
if enabled then
|
||||
BuffsDebuffs:AddOrRefreshAura(unit, spellID, AURA_TYPE_BUFF, 15, 15, random(1,5), spellSchools[random(1,6)], select(3, GetSpellInfo(spellID)), i)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -226,15 +221,16 @@ end
|
||||
---------------------------
|
||||
|
||||
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])
|
||||
debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||
debuffFrame:SetWidth(1)
|
||||
debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, Gladdy.db.highlightBorderSize + Gladdy.db.padding)
|
||||
debuffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin)
|
||||
debuffFrame.unit = unit
|
||||
local buffFrame = CreateFrame("Frame", "GladdyBuffs" .. unit, Gladdy.buttons[unit])
|
||||
buffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||
buffFrame:SetWidth(1)
|
||||
buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, Gladdy.db.highlightBorderSize + Gladdy.db.padding)
|
||||
buffFrame:SetPoint("BOTTOMLEFT", Gladdy.buttons[unit].healthBar, "TOPLEFT", 0, verticalMargin)
|
||||
buffFrame.unit = unit
|
||||
self.frames[unit] = {}
|
||||
self.frames[unit].buffFrame = buffFrame
|
||||
@ -268,16 +264,19 @@ local function styleIcon(aura, auraType)
|
||||
|
||||
aura.border:SetTexture(Gladdy.db.buffsBorderStyle)
|
||||
aura.border:SetVertexColor(spellSchoolToOptionValue(aura.spellSchool))
|
||||
aura.cooldown:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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.stacks:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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, Gladdy.db.buffsFontColor.a)
|
||||
end
|
||||
|
||||
function BuffsDebuffs:UpdateFrame(unit)
|
||||
self.frames[unit].debuffFrame:SetHeight(Gladdy.db.buffsIconSize)
|
||||
self.frames[unit].debuffFrame:ClearAllPoints()
|
||||
local horizontalMargin = Gladdy.db.highlightBorderSize
|
||||
|
||||
--DEBUFFS
|
||||
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
|
||||
if Gladdy.db.buffsCooldownPos == "TOP" then
|
||||
verticalMargin = horizontalMargin + 1
|
||||
@ -295,12 +294,12 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||
end
|
||||
if Gladdy.db.buffsCooldownGrowDirection == "LEFT" then
|
||||
self.frames[unit].debuffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].powerBar, "BOTTOMRIGHT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin)
|
||||
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].powerBar, "BOTTOMLEFT", Gladdy.db.buffsXOffset, Gladdy.db.buffsYOffset -verticalMargin)
|
||||
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 = Gladdy.db.highlightBorderSize - 1 + Gladdy.db.padding
|
||||
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)
|
||||
@ -318,9 +317,10 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
end
|
||||
end
|
||||
|
||||
--BUFFS
|
||||
self.frames[unit].buffFrame:SetHeight(Gladdy.db.buffsBuffsIconSize)
|
||||
self.frames[unit].buffFrame:ClearAllPoints()
|
||||
horizontalMargin = Gladdy.db.highlightBorderSize
|
||||
horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
||||
verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
||||
if Gladdy.db.buffsBuffsCooldownPos == "TOP" then
|
||||
verticalMargin = horizontalMargin + 1
|
||||
@ -338,9 +338,9 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
verticalMargin = verticalMargin + Gladdy.db.cooldownSize
|
||||
end
|
||||
if Gladdy.db.buffsBuffsCooldownGrowDirection == "LEFT" then
|
||||
self.frames[unit].buffFrame:SetPoint("TOPLEFT", Gladdy.buttons[unit].powerBar, "BOTTOMRIGHT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin)
|
||||
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].powerBar, "BOTTOMLEFT", Gladdy.db.buffsBuffsXOffset, Gladdy.db.buffsBuffsYOffset -verticalMargin)
|
||||
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
|
||||
@ -369,7 +369,7 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
--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.highlightBorderSize - 1 + Gladdy.db.padding
|
||||
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
|
||||
@ -403,7 +403,7 @@ function BuffsDebuffs:UpdateFrame(unit)
|
||||
--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.highlightBorderSize - 1 + Gladdy.db.padding
|
||||
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
|
||||
@ -472,28 +472,23 @@ local function iconTimer(auraFrame, elapsed)
|
||||
local timeLeftMilliSec = auraFrame.endtime - GetTime()
|
||||
local timeLeftSec = ceil(timeLeftMilliSec)
|
||||
auraFrame.timeLeft = timeLeftMilliSec
|
||||
--auraFrame.cooldowncircle:SetCooldown(auraFrame.startTime, auraFrame.endtime)
|
||||
if Gladdy.db.buffsDynamicColor then
|
||||
if timeLeftSec >= 60 then
|
||||
if Gladdy.db.buffsDynamicColor then auraFrame.cooldown:SetTextColor(0.7, 1, 0) end
|
||||
auraFrame.cooldown:SetFormattedText("%dm", ceil(timeLeftSec / 60))
|
||||
auraFrame.cooldown:SetTextColor(0.7, 1, 0)
|
||||
elseif timeLeftSec < 60 and timeLeftSec >= 11 then
|
||||
--if it's less than 60s
|
||||
if Gladdy.db.buffsDynamicColor then auraFrame.cooldown:SetTextColor(0.7, 1, 0) end
|
||||
auraFrame.cooldown:SetFormattedText("%d", timeLeftSec)
|
||||
auraFrame.cooldown:SetTextColor(0.7, 1, 0)
|
||||
elseif timeLeftSec <= 10 and timeLeftSec >= 5 then
|
||||
if Gladdy.db.buffsDynamicColor then auraFrame.cooldown:SetTextColor(1, 0.7, 0) end
|
||||
auraFrame.cooldown:SetFormattedText("%d", timeLeftSec)
|
||||
auraFrame.cooldown:SetTextColor(1, 0.7, 0)
|
||||
elseif timeLeftSec <= 4 and timeLeftSec >= 3 then
|
||||
if Gladdy.db.buffsDynamicColor then auraFrame.cooldown:SetTextColor(1, 0, 0) end
|
||||
auraFrame.cooldown:SetFormattedText("%d", timeLeftSec)
|
||||
auraFrame.cooldown:SetTextColor(1, 0, 0)
|
||||
elseif timeLeftMilliSec <= 3 and timeLeftMilliSec > 0 then
|
||||
if Gladdy.db.buffsDynamicColor then auraFrame.cooldown:SetTextColor(1, 0, 0) end
|
||||
auraFrame.cooldown:SetFormattedText("%.1f", timeLeftMilliSec >= 0.0 and timeLeftMilliSec or 0.0)
|
||||
elseif timeLeftMilliSec <= 0 and timeLeftMilliSec > -0.05 then -- 50ms ping max wait for SPELL_AURA_REMOVED event
|
||||
auraFrame.cooldown:SetText("")
|
||||
else -- fallback in case SPELL_AURA_REMOVED is not fired
|
||||
auraFrame.cooldown:SetTextColor(1, 0, 0)
|
||||
end
|
||||
end
|
||||
if timeLeftMilliSec < 0 then
|
||||
auraFrame:Hide()
|
||||
end
|
||||
Gladdy:FormatTimer(auraFrame.cooldown, timeLeftMilliSec, timeLeftMilliSec <= 3)
|
||||
else
|
||||
auraFrame.cooldown:SetText("")
|
||||
end
|
||||
@ -619,7 +614,7 @@ function BuffsDebuffs:GetOptions()
|
||||
},
|
||||
buffsEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Enabled Buffs and Debuffs module"],
|
||||
order = 3,
|
||||
}),
|
||||
@ -632,7 +627,7 @@ function BuffsDebuffs:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 5,
|
||||
args = {
|
||||
buffs = {
|
||||
@ -642,7 +637,7 @@ function BuffsDebuffs:GetOptions()
|
||||
args = {
|
||||
size = {
|
||||
type = "group",
|
||||
name = "Size & Padding",
|
||||
name = L["Size & Padding"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
@ -658,6 +653,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 5,
|
||||
max = 50,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsBuffsWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -667,6 +663,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
buffsBuffsIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -676,12 +673,13 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
position = {
|
||||
type = "group",
|
||||
name = "Position",
|
||||
name = L["Position"],
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
@ -718,6 +716,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsBuffsYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -726,6 +725,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -746,6 +746,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
}
|
||||
@ -758,7 +759,7 @@ function BuffsDebuffs:GetOptions()
|
||||
args = {
|
||||
size = {
|
||||
type = "group",
|
||||
name = "Size & Padding",
|
||||
name = L["Size & Padding"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
@ -774,6 +775,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 5,
|
||||
max = 50,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -783,6 +785,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
buffsIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -792,12 +795,13 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
position = {
|
||||
type = "group",
|
||||
name = "Position",
|
||||
name = L["Position"],
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
@ -834,6 +838,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -842,6 +847,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -862,6 +868,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
}
|
||||
@ -869,7 +876,7 @@ function BuffsDebuffs:GetOptions()
|
||||
},
|
||||
cooldown = {
|
||||
type = "group",
|
||||
name = "Cooldown",
|
||||
name = L["Cooldown"],
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
@ -881,6 +888,7 @@ function BuffsDebuffs:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 9,
|
||||
width = "full",
|
||||
}),
|
||||
buffsCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -889,12 +897,13 @@ function BuffsDebuffs:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 10,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
font = {
|
||||
type = "group",
|
||||
name = "Font",
|
||||
name = L["Font"],
|
||||
order = 4,
|
||||
args = {
|
||||
header = {
|
||||
@ -918,6 +927,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsDynamicColor = Gladdy:option({
|
||||
type = "toggle",
|
||||
@ -936,7 +946,7 @@ function BuffsDebuffs:GetOptions()
|
||||
},
|
||||
border = {
|
||||
type = "group",
|
||||
name = "Border",
|
||||
name = L["Border"],
|
||||
order = 5,
|
||||
args = {
|
||||
header = {
|
||||
@ -1023,7 +1033,7 @@ function BuffsDebuffs:GetOptions()
|
||||
},
|
||||
},
|
||||
debuffList = {
|
||||
name = "Debuff Lists",
|
||||
name = L["Debuff Lists"],
|
||||
type = "group",
|
||||
order = 11,
|
||||
childGroups = "tree",
|
||||
@ -1038,7 +1048,7 @@ function BuffsDebuffs:GetOptions()
|
||||
end,
|
||||
},
|
||||
buffList = {
|
||||
name = "Buff Lists",
|
||||
name = L["Buff Lists"],
|
||||
type = "group",
|
||||
order = 12,
|
||||
childGroups = "tree",
|
||||
|
@ -18,7 +18,8 @@ local BackdropTemplateMixin = BackdropTemplateMixin
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AceGUIWidgetLSMlists = AceGUIWidgetLSMlists
|
||||
local Castbar = Gladdy:NewModule("Castbar", 70, {
|
||||
local Castbar = Gladdy:NewModule("Cast Bar", 70, {
|
||||
castBarEnabled = true,
|
||||
castBarHeight = 20,
|
||||
castBarWidth = 160,
|
||||
castBarIconSize = 22,
|
||||
@ -60,13 +61,13 @@ function Castbar:CreateFrame(unit)
|
||||
castBar:EnableMouse(false)
|
||||
castBar.unit = unit
|
||||
|
||||
castBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.castBarBorderStyle),
|
||||
castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.castBarBorderSize })
|
||||
castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a)
|
||||
castBar:SetFrameLevel(1)
|
||||
|
||||
castBar.bar = CreateFrame("StatusBar", nil, castBar)
|
||||
castBar.bar:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:SetMinMaxValues(0, 100)
|
||||
castBar.bar:SetFrameLevel(0)
|
||||
@ -80,7 +81,7 @@ function Castbar:CreateFrame(unit)
|
||||
|
||||
castBar.bg = castBar.bar:CreateTexture(nil, "BACKGROUND")
|
||||
castBar.bg:SetAlpha(1)
|
||||
castBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:SetAllPoints(castBar.bar)
|
||||
|
||||
@ -100,7 +101,7 @@ function Castbar:CreateFrame(unit)
|
||||
end
|
||||
|
||||
castBar.spellText = castBar:CreateFontString(nil, "LOW")
|
||||
castBar.spellText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.auraFont), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
||||
castBar.spellText:SetShadowOffset(1, -1)
|
||||
castBar.spellText:SetShadowColor(0, 0, 0, 1)
|
||||
@ -108,7 +109,7 @@ function Castbar:CreateFrame(unit)
|
||||
castBar.spellText:SetPoint("LEFT", 7, 0) -- Text of the spell
|
||||
|
||||
castBar.timeText = castBar:CreateFontString(nil, "LOW")
|
||||
castBar.timeText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.auraFont), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "auraFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
||||
castBar.timeText:SetShadowOffset(1, -1)
|
||||
castBar.timeText:SetShadowColor(0, 0, 0, 1)
|
||||
@ -121,7 +122,6 @@ function Castbar:CreateFrame(unit)
|
||||
end
|
||||
|
||||
function Castbar:UpdateFrame(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
local castBar = self.frames[unit]
|
||||
if (not castBar) then
|
||||
return
|
||||
@ -129,17 +129,17 @@ function Castbar:UpdateFrame(unit)
|
||||
|
||||
castBar:SetWidth(Gladdy.db.castBarWidth)
|
||||
castBar:SetHeight(Gladdy.db.castBarHeight)
|
||||
castBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.castBarBorderStyle),
|
||||
castBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "castBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.castBarBorderSize })
|
||||
castBar:SetBackdropBorderColor(Gladdy.db.castBarBorderColor.r, Gladdy.db.castBarBorderColor.g, Gladdy.db.castBarBorderColor.b, Gladdy.db.castBarBorderColor.a)
|
||||
|
||||
castBar.bar:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.castBarTexture))
|
||||
castBar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "castBarTexture"))
|
||||
castBar.bar:ClearAllPoints()
|
||||
castBar.bar:SetStatusBarColor(Gladdy.db.castBarColor.r, Gladdy.db.castBarColor.g, Gladdy.db.castBarColor.b, Gladdy.db.castBarColor.a)
|
||||
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.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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)
|
||||
|
||||
if Gladdy.db.castBarSparkEnabled then
|
||||
@ -165,7 +165,7 @@ function Castbar:UpdateFrame(unit)
|
||||
end
|
||||
|
||||
castBar:ClearAllPoints()
|
||||
local horizontalMargin = Gladdy.db.highlightBorderSize + Gladdy.db.padding
|
||||
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
|
||||
@ -183,10 +183,10 @@ function Castbar:UpdateFrame(unit)
|
||||
end
|
||||
end
|
||||
|
||||
castBar.spellText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.auraFont), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.spellText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
||||
|
||||
castBar.timeText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.auraFont), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetFont(Gladdy:SMFetch("font", "castBarFont"), Gladdy.db.castBarFontSize)
|
||||
castBar.timeText:SetTextColor(Gladdy.db.castBarFontColor.r, Gladdy.db.castBarFontColor.g, Gladdy.db.castBarFontColor.b, Gladdy.db.castBarFontColor.a)
|
||||
|
||||
castBar.icon.texture.overlay:SetTexture(Gladdy.db.castBarIconStyle)
|
||||
@ -439,6 +439,7 @@ end
|
||||
---------------------------
|
||||
|
||||
function Castbar:JOINED_ARENA()
|
||||
if Gladdy.db.castBarEnabled then
|
||||
for i=1, Gladdy.curBracket do
|
||||
local unit = "arena" .. i
|
||||
local castBar = self.frames[unit]
|
||||
@ -457,24 +458,22 @@ function Castbar:JOINED_ARENA()
|
||||
self:CAST_STOP(unit)
|
||||
--Castbar.OnEvent(castBar, "PLAYER_ENTERING_WORLD")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Castbar:ResetUnit(unit)
|
||||
local castBar = self.frames[unit]
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_INTERRUPTED")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_DELAYED")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_START")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_STOP")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_START")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_STOP")
|
||||
castBar:UnregisterEvent("UNIT_SPELLCAST_FAILED")
|
||||
castBar:UnregisterAllEvents()
|
||||
castBar:SetScript("OnEvent", nil)
|
||||
castBar:SetScript("OnUpdate", nil)
|
||||
castBar.fadeOut = nil
|
||||
self:CAST_STOP(unit)
|
||||
end
|
||||
|
||||
function Castbar:Reset()
|
||||
self.test = nil
|
||||
end
|
||||
|
||||
---------------------------
|
||||
|
||||
-- TEST
|
||||
@ -482,6 +481,8 @@ end
|
||||
---------------------------
|
||||
|
||||
function Castbar:Test(unit)
|
||||
self.test = true
|
||||
if Gladdy.db.castBarEnabled then
|
||||
local spell, _, icon, value, maxValue, event, endTime, startTime
|
||||
|
||||
if (unit == "arena2") then
|
||||
@ -494,7 +495,7 @@ function Castbar:Test(unit)
|
||||
value = (endTime / 1000) - GetTime()
|
||||
maxValue = (endTime - startTime) / 1000
|
||||
event = "channel"
|
||||
elseif (unit == "arena3") then
|
||||
else
|
||||
spell, _, icon = GetSpellInfo(20770)
|
||||
value, maxValue, event = 0, 60, "cast"
|
||||
end
|
||||
@ -502,6 +503,9 @@ function Castbar:Test(unit)
|
||||
if (spell) then
|
||||
self:CAST_START(unit, spell, icon, value, maxValue, event)
|
||||
end
|
||||
else
|
||||
self:CAST_STOP(unit)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------
|
||||
@ -519,7 +523,7 @@ local function option(params)
|
||||
set = function(info, value)
|
||||
local key = info.arg or info[#info]
|
||||
Gladdy.dbi.profile[key] = value
|
||||
Gladdy.options.args.Castbar.args.group.args.barFrame.args.castBarBorderSize.max = Gladdy.db.castBarHeight/2
|
||||
Gladdy.options.args["Cast Bar"].args.group.args.barFrame.args.castBarBorderSize.max = Gladdy.db.castBarHeight/2
|
||||
if Gladdy.db.castBarBorderSize > Gladdy.db.castBarHeight/2 then
|
||||
Gladdy.db.castBarBorderSize = Gladdy.db.castBarHeight/2
|
||||
end
|
||||
@ -541,15 +545,21 @@ function Castbar:GetOptions()
|
||||
name = L["Cast Bar"],
|
||||
order = 2,
|
||||
},
|
||||
castBarEnabled = option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
desc = L["If test is running, type \"/gladdy test\" again"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
order = 3,
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
barFrame = {
|
||||
type = "group",
|
||||
name = "Bar",
|
||||
name = L["Bar"],
|
||||
order = 1,
|
||||
args = {
|
||||
headerSize = {
|
||||
@ -565,6 +575,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 50,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
castBarWidth = option({
|
||||
type = "range",
|
||||
@ -574,6 +585,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
headerTexture = {
|
||||
type = "header",
|
||||
@ -614,6 +626,7 @@ function Castbar:GetOptions()
|
||||
min = 0.5,
|
||||
max = Gladdy.db.castBarHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
castBarBorderStyle = option({
|
||||
type = "select",
|
||||
@ -632,7 +645,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
icon = {
|
||||
type = "group",
|
||||
name = "Icon",
|
||||
name = L["Icon"],
|
||||
order = 2,
|
||||
args = {
|
||||
headerSize = {
|
||||
@ -647,6 +660,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
headerBorder = {
|
||||
type = "header",
|
||||
@ -669,7 +683,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
spark = {
|
||||
type = "group",
|
||||
name = "Spark",
|
||||
name = L["Spark"],
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
@ -693,7 +707,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
font = {
|
||||
type = "group",
|
||||
name = "Font",
|
||||
name = L["Font"],
|
||||
order = 4,
|
||||
args = {
|
||||
header = {
|
||||
@ -723,6 +737,7 @@ function Castbar:GetOptions()
|
||||
order = 4,
|
||||
min = 1,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
headerFormat = {
|
||||
type = "header",
|
||||
@ -743,7 +758,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
position = {
|
||||
type = "group",
|
||||
name = "Position",
|
||||
name = L["Position"],
|
||||
order = 5,
|
||||
args = {
|
||||
header = {
|
||||
@ -781,6 +796,7 @@ function Castbar:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
castBarYOffset = option({
|
||||
type = "range",
|
||||
@ -789,6 +805,7 @@ function Castbar:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
},
|
||||
|
@ -4,7 +4,7 @@ local Gladdy = LibStub("Gladdy")
|
||||
local CreateFrame = CreateFrame
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local L = Gladdy.L
|
||||
local Classicon = Gladdy:NewModule("Classicon", 80, {
|
||||
local Classicon = Gladdy:NewModule("Class Icon", 80, {
|
||||
classIconPos = "LEFT",
|
||||
classIconSize = 60 + 20 + 1,
|
||||
classIconWidthFactor = 0.9,
|
||||
@ -120,7 +120,7 @@ function Classicon:UpdateFrame(unit)
|
||||
classIcon:SetHeight(Gladdy.db.classIconSize)
|
||||
|
||||
classIcon:ClearAllPoints()
|
||||
local margin = Gladdy.db.highlightBorderSize + Gladdy.db.padding
|
||||
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
|
||||
@ -178,8 +178,8 @@ function Classicon:GetOptions()
|
||||
name = L["Show Spec Icon"],
|
||||
desc = L["Shows Spec Icon once spec is detected"],
|
||||
order = 3,
|
||||
get = function(info) return Gladdy.db.classIconSpecIcon end,
|
||||
set = function(info, value)
|
||||
get = function() return Gladdy.db.classIconSpecIcon end,
|
||||
set = function(_, value)
|
||||
Gladdy.db.classIconSpecIcon = value
|
||||
if Gladdy.curBracket and Gladdy.curBracket > 0 then
|
||||
for i=1,Gladdy.curBracket do
|
||||
@ -195,7 +195,7 @@ function Classicon:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
size = {
|
||||
@ -203,6 +203,11 @@ function Classicon:GetOptions()
|
||||
name = L["Icon size"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Icon size"],
|
||||
order = 1,
|
||||
},
|
||||
classIconSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Icon size"],
|
||||
@ -210,6 +215,7 @@ function Classicon:GetOptions()
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
classIconWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -218,6 +224,7 @@ function Classicon:GetOptions()
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
217
Modules/Clicks.lua
Normal file
217
Modules/Clicks.lua
Normal file
@ -0,0 +1,217 @@
|
||||
local tinsert = table.insert
|
||||
local pairs = pairs
|
||||
local tonumber = tonumber
|
||||
local tostring = tostring
|
||||
|
||||
local GetBindingKey = GetBindingKey
|
||||
local ClearOverrideBindings = ClearOverrideBindings
|
||||
local SetOverrideBindingClick = SetOverrideBindingClick
|
||||
local MACRO, TARGET, FOCUS, ADDON_DISABLED = MACRO, TARGET, FOCUS, ADDON_DISABLED
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
|
||||
local attributes = {
|
||||
{ name = L["Target"], button = "1", modifier = "", action = "target", spell = "" },
|
||||
{ name = L["Focus"], button = "2", modifier = "", action = "focus", spell = "" },
|
||||
}
|
||||
for i = 3, 10 do
|
||||
tinsert(attributes, { name = L["Action #%d"]:format(i), button = "", modifier = "", action = "disabled", spell = "" })
|
||||
end
|
||||
local Clicks = Gladdy:NewModule("Clicks", nil, {
|
||||
attributes = attributes,
|
||||
})
|
||||
|
||||
BINDING_HEADER_GLADDY = "Gladdy"
|
||||
BINDING_NAME_GLADDYBUTTON1_LEFT = L["Left Click Enemy 1"]
|
||||
BINDING_NAME_GLADDYBUTTON2_LEFT = L["Left Click Enemy 2"]
|
||||
BINDING_NAME_GLADDYBUTTON3_LEFT = L["Left Click Enemy 3"]
|
||||
BINDING_NAME_GLADDYBUTTON4_LEFT = L["Left Click Enemy 4"]
|
||||
BINDING_NAME_GLADDYBUTTON5_LEFT = L["Left Click Enemy 5"]
|
||||
|
||||
BINDING_NAME_GLADDYBUTTON1_RIGHT = L["Right Click Enemy 1"]
|
||||
BINDING_NAME_GLADDYBUTTON2_RIGHT = L["Right Click Enemy 2"]
|
||||
BINDING_NAME_GLADDYBUTTON3_RIGHT = L["Right Click Enemy 3"]
|
||||
BINDING_NAME_GLADDYBUTTON4_RIGHT = L["Right Click Enemy 4"]
|
||||
BINDING_NAME_GLADDYBUTTON5_RIGHT = L["Right Click Enemy 5"]
|
||||
|
||||
BINDING_NAME_GLADDYBUTTON1_MIDDLE = L["Middle Click Enemy 1"]
|
||||
BINDING_NAME_GLADDYBUTTON2_MIDDLE = L["Middle Click Enemy 2"]
|
||||
BINDING_NAME_GLADDYBUTTON3_MIDDLE = L["Middle Click Enemy 3"]
|
||||
BINDING_NAME_GLADDYBUTTON4_MIDDLE = L["Middle Click Enemy 4"]
|
||||
BINDING_NAME_GLADDYBUTTON5_MIDDLE = L["Middle Click Enemy 5"]
|
||||
|
||||
BINDING_NAME_GLADDYBUTTON1_BUTTON4 = L["Button4 Click Enemy 1"]
|
||||
BINDING_NAME_GLADDYBUTTON2_BUTTON4 = L["Button4 Click Enemy 2"]
|
||||
BINDING_NAME_GLADDYBUTTON3_BUTTON4 = L["Button4 Click Enemy 3"]
|
||||
BINDING_NAME_GLADDYBUTTON4_BUTTON4 = L["Button4 Click Enemy 4"]
|
||||
BINDING_NAME_GLADDYBUTTON5_BUTTON4 = L["Button4 Click Enemy 5"]
|
||||
|
||||
BINDING_NAME_GLADDYBUTTON1_BUTTON5 = L["Button5 Click Enemy 1"]
|
||||
BINDING_NAME_GLADDYBUTTON2_BUTTON5 = L["Button5 Click Enemy 2"]
|
||||
BINDING_NAME_GLADDYBUTTON3_BUTTON5 = L["Button5 Click Enemy 3"]
|
||||
BINDING_NAME_GLADDYBUTTON4_BUTTON5 = L["Button5 Click Enemy 4"]
|
||||
BINDING_NAME_GLADDYBUTTON5_BUTTON5 = L["Button5 Click Enemy 5"]
|
||||
|
||||
function Clicks:Initialize()
|
||||
--
|
||||
end
|
||||
|
||||
function Clicks:Reset()
|
||||
--
|
||||
end
|
||||
|
||||
function Clicks:ResetUnit(unit)
|
||||
--
|
||||
end
|
||||
|
||||
function Clicks:UpdateFrame(unit)
|
||||
self:SetupAttributes(unit)
|
||||
end
|
||||
|
||||
function Clicks:UpdateFrameOnce()
|
||||
for _, v in pairs(Gladdy.buttons) do
|
||||
local left = GetBindingKey(("GLADDYBUTTON%d_LEFT"):format(v.id))
|
||||
local right = GetBindingKey(("GLADDYBUTTON%d_RIGHT"):format(v.id))
|
||||
local middle = GetBindingKey(("GLADDYBUTTON%d_MIDDLE"):format(v.id))
|
||||
local button4 = GetBindingKey(("GLADDYBUTTON%d_BUTTON4"):format(v.id))
|
||||
local button5 = GetBindingKey(("GLADDYBUTTON%d_BUTTON5"):format(v.id))
|
||||
|
||||
ClearOverrideBindings(v.secure)
|
||||
|
||||
if (left) then
|
||||
SetOverrideBindingClick(v.secure, false, left, v.secure:GetName(), "LeftButton")
|
||||
end
|
||||
|
||||
if (right) then
|
||||
SetOverrideBindingClick(v.secure, false, right, v.secure:GetName(), "RightButton")
|
||||
end
|
||||
|
||||
if (middle) then
|
||||
SetOverrideBindingClick(v.secure, false, middle, v.secure:GetName(), "MiddleButton")
|
||||
end
|
||||
|
||||
if (button4) then
|
||||
SetOverrideBindingClick(v.secure, false, button4, v.secure:GetName(), "Button4")
|
||||
end
|
||||
|
||||
if (button5) then
|
||||
SetOverrideBindingClick(v.secure, false, button5, v.secure:GetName(), "Button5")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Clicks:SetupAttributes(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if (not button) then
|
||||
return
|
||||
end
|
||||
|
||||
for _, v in pairs(Gladdy.db.attributes) do
|
||||
self:SetupAttribute(button, v.button, v.modifier, v.action, v.spell)
|
||||
end
|
||||
end
|
||||
|
||||
function Clicks:SetupAttribute(button, key, mod, action, spell)
|
||||
local attr = ""
|
||||
local text = ""
|
||||
|
||||
if (action == "macro") then
|
||||
attr = mod .. "macrotext" .. key
|
||||
text = spell:gsub("%*arena%*", button.unit)
|
||||
button.secure:SetAttribute(mod .. "type" .. key, "macro")
|
||||
elseif (action ~= "disabled") then
|
||||
if (action == "target") then
|
||||
attr = mod .. "type" .. key
|
||||
text = "target"
|
||||
elseif (action == "focus") then
|
||||
attr = mod .. "type" .. key
|
||||
text = "focus"
|
||||
elseif (action == "spell") then
|
||||
attr = mod .. "type" .. key
|
||||
text = "spell"
|
||||
button.secure:SetAttribute(mod .. "spell" .. key, spell)
|
||||
end
|
||||
end
|
||||
|
||||
button.secure:SetAttribute(attr, text)
|
||||
end
|
||||
|
||||
local buttons = { ["1"] = L["Left button"], ["2"] = L["Right button"], ["3"] = L["Middle button"], ["4"] = L["Button 4"], ["5"] = L["Button 5"] }
|
||||
local modifiers = { [""] = L["None"], ["*"] = L["All"], ["ctrl-"] = L["CTRL"], ["shift-"] = L["SHIFT"], ["alt-"] = L["ALT"] }
|
||||
local clickValues = { ["macro"] = MACRO, ["target"] = TARGET, ["focus"] = FOCUS, ["spell"] = L["Cast Spell"], ["disabled"] = ADDON_DISABLED }
|
||||
|
||||
local function SetupAttributeOption(i)
|
||||
return {
|
||||
type = "group",
|
||||
name = Gladdy.dbi.profile.attributes[i].name,
|
||||
desc = Gladdy.dbi.profile.attributes[i].name,
|
||||
order = i + 1,
|
||||
get = function(info)
|
||||
return Gladdy.dbi.profile.attributes[tonumber(info[#info - 1])][info[#info]]
|
||||
end,
|
||||
set = function(info, value)
|
||||
Gladdy.dbi.profile.attributes[tonumber(info[#info - 1])][info[#info]] = value
|
||||
|
||||
if (info[#info] == "name") then
|
||||
Gladdy.options.args.Clicks.args[info[#info - 1]].name = value
|
||||
end
|
||||
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
args = {
|
||||
name = {
|
||||
type = "input",
|
||||
name = L["Name"],
|
||||
desc = L["Select the name of the click option"],
|
||||
order = 1,
|
||||
},
|
||||
button = {
|
||||
type = "select",
|
||||
name = L["Button"],
|
||||
desc = L["Select which mouse button to use"],
|
||||
order = 2,
|
||||
values = buttons,
|
||||
},
|
||||
modifier = {
|
||||
type = "select",
|
||||
name = L["Modifier"],
|
||||
desc = L["Select which modifier to use"],
|
||||
order = 3,
|
||||
values = modifiers,
|
||||
},
|
||||
action = {
|
||||
type = "select",
|
||||
name = L["Action"],
|
||||
desc = L["Select what action this mouse button does"],
|
||||
order = 4,
|
||||
values = clickValues,
|
||||
},
|
||||
spell = {
|
||||
type = "input",
|
||||
name = L["Cast Spell / Macro"],
|
||||
desc = L["\n|cff1ac742Cast Spell:|r\n" ..
|
||||
"Type in the spell name.\n" ..
|
||||
"For example:\n" ..
|
||||
"|cff17d1c8Polymorph|r\n" ..
|
||||
"\n" ..
|
||||
"|cff1ac742Macro:|r\n" ..
|
||||
"Use *arena* as placeholder.\n" ..
|
||||
"For example:\n" ..
|
||||
"|cff17d1c8/cast [@*arena*] Blind\n" ..
|
||||
"/run SendChatMessage(\"Blinding \" .. UnitName(\"*arena*\"), \"PARTY\")|r"],
|
||||
order = 5,
|
||||
width = "full",
|
||||
multiline = 10,
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function Clicks:GetOptions()
|
||||
local options = {}
|
||||
for i = 1, 10 do
|
||||
options[tostring(i)] = SetupAttributeOption(i)
|
||||
end
|
||||
return options
|
||||
end
|
@ -6,7 +6,7 @@ local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
|
||||
local CombatIndicator = Gladdy:NewModule("CombatIndicator", nil, {
|
||||
local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, {
|
||||
ciEnabled = true,
|
||||
ciSize = 20,
|
||||
ciAlpha = 1,
|
||||
@ -64,6 +64,7 @@ function CombatIndicator:UpdateFrame(unit)
|
||||
end
|
||||
ciFrame:SetHeight(Gladdy.db.ciSize)
|
||||
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
|
||||
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:ClearAllPoints()
|
||||
@ -94,7 +95,7 @@ function CombatIndicator.OnEvent(self, elapsed)
|
||||
if (self.lastTimeUpdated > self.updateInterval) then
|
||||
for i=1,Gladdy.curBracket do
|
||||
local unit = "arena" .. i
|
||||
if CombatIndicator.test or (UnitExists(unit) and UnitAffectingCombat(unit)) then
|
||||
if Gladdy.db.ciEnabled and (CombatIndicator.test or (UnitExists(unit) and UnitAffectingCombat(unit))) then
|
||||
CombatIndicator.frames[unit]:Show()
|
||||
else
|
||||
CombatIndicator.frames[unit]:Hide()
|
||||
@ -106,21 +107,21 @@ end
|
||||
|
||||
function CombatIndicator:GetOptions()
|
||||
return {
|
||||
headerTrinket = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Racial"],
|
||||
name = L["Combat Indicator"],
|
||||
order = 2,
|
||||
},
|
||||
ciEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
desc = L["Enable ci icon"],
|
||||
desc = L["Enable Combat Indicator icon"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
general = {
|
||||
@ -140,6 +141,7 @@ function CombatIndicator:GetOptions()
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
ciWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -148,6 +150,7 @@ function CombatIndicator:GetOptions()
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
ciAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -156,6 +159,7 @@ function CombatIndicator:GetOptions()
|
||||
max = 1,
|
||||
step = 0.05,
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -200,6 +204,7 @@ function CombatIndicator:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
ciYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -208,6 +213,7 @@ function CombatIndicator:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
@ -36,9 +36,9 @@ local L = Gladdy.L
|
||||
|
||||
local function getDefaultCooldown()
|
||||
local cooldowns = {}
|
||||
for class, t in pairs(Gladdy:GetCooldownList()) do
|
||||
for spellId, v in pairs(t) do
|
||||
local spellName, _, texture = GetSpellInfo(spellId)
|
||||
for _,spellTable in pairs(Gladdy:GetCooldownList()) do
|
||||
for spellId,_ in pairs(spellTable) do
|
||||
local spellName = GetSpellInfo(spellId)
|
||||
if spellName then
|
||||
cooldowns[tostring(spellId)] = true
|
||||
else
|
||||
@ -72,14 +72,14 @@ local Cooldowns = Gladdy:NewModule("Cooldowns", nil, {
|
||||
function Cooldowns:Initialize()
|
||||
self.cooldownSpellIds = {}
|
||||
self.spellTextures = {}
|
||||
for class, t in pairs(Gladdy:GetCooldownList()) do
|
||||
for k, v in pairs(t) do
|
||||
local spellName, _, texture = GetSpellInfo(k)
|
||||
for _,spellTable in pairs(Gladdy:GetCooldownList()) do
|
||||
for spellId,_ in pairs(spellTable) do
|
||||
local spellName, _, texture = GetSpellInfo(spellId)
|
||||
if spellName then
|
||||
self.cooldownSpellIds[spellName] = k
|
||||
self.spellTextures[k] = texture
|
||||
self.cooldownSpellIds[spellName] = spellId
|
||||
self.spellTextures[spellId] = texture
|
||||
else
|
||||
Gladdy:Print("spellid does not exist " .. k)
|
||||
Gladdy:Print("spellid does not exist " .. spellId)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -120,7 +120,7 @@ function Cooldowns:CreateFrame(unit)
|
||||
icon.border:SetVertexColor(Gladdy.db.cooldownBorderColor.r, Gladdy.db.cooldownBorderColor.g, Gladdy.db.cooldownBorderColor.b, Gladdy.db.cooldownBorderColor.a)
|
||||
|
||||
icon.cooldownFont = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
icon.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a)
|
||||
icon.cooldownFont:SetAllPoints(icon)
|
||||
|
||||
@ -134,30 +134,31 @@ function Cooldowns:UpdateFrame(unit)
|
||||
-- Cooldown frame
|
||||
if (Gladdy.db.cooldown) then
|
||||
button.spellCooldownFrame:ClearAllPoints()
|
||||
local verticalMargin = -(Gladdy.db.powerBarHeight)/2
|
||||
local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0
|
||||
local horizontalMargin = (Gladdy.db.highlightInset and 0 or Gladdy.db.highlightBorderSize)
|
||||
if Gladdy.db.cooldownYPos == "TOP" then
|
||||
if Gladdy.db.cooldownXPos == "RIGHT" then
|
||||
button.spellCooldownFrame:SetPoint("BOTTOMRIGHT", button.healthBar, "TOPRIGHT", Gladdy.db.cooldownXOffset, Gladdy.db.highlightBorderSize + Gladdy.db.cooldownYOffset) -- needs to be properly anchored after trinket
|
||||
button.spellCooldownFrame:SetPoint("BOTTOMRIGHT", button.healthBar, "TOPRIGHT", Gladdy.db.cooldownXOffset, horizontalMargin + Gladdy.db.cooldownYOffset)
|
||||
else
|
||||
button.spellCooldownFrame:SetPoint("BOTTOMLEFT", button.healthBar, "TOPLEFT", Gladdy.db.cooldownXOffset, Gladdy.db.highlightBorderSize + Gladdy.db.cooldownYOffset)
|
||||
button.spellCooldownFrame:SetPoint("BOTTOMLEFT", button.healthBar, "TOPLEFT", Gladdy.db.cooldownXOffset, horizontalMargin + Gladdy.db.cooldownYOffset)
|
||||
end
|
||||
elseif Gladdy.db.cooldownYPos == "BOTTOM" then
|
||||
if Gladdy.db.cooldownXPos == "RIGHT" then
|
||||
button.spellCooldownFrame:SetPoint("TOPRIGHT", button.powerBar, "BOTTOMRIGHT", Gladdy.db.cooldownXOffset, -Gladdy.db.highlightBorderSize + Gladdy.db.cooldownYOffset) -- needs to be properly anchored after trinket
|
||||
button.spellCooldownFrame:SetPoint("TOPRIGHT", button.healthBar, "BOTTOMRIGHT", Gladdy.db.cooldownXOffset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight)
|
||||
else
|
||||
button.spellCooldownFrame:SetPoint("TOPLEFT", button.powerBar, "BOTTOMLEFT", Gladdy.db.cooldownXOffset, -Gladdy.db.highlightBorderSize + Gladdy.db.cooldownYOffset)
|
||||
button.spellCooldownFrame:SetPoint("TOPLEFT", button.healthBar, "BOTTOMLEFT", Gladdy.db.cooldownXOffset, -horizontalMargin + Gladdy.db.cooldownYOffset - powerBarHeight)
|
||||
end
|
||||
elseif Gladdy.db.cooldownYPos == "LEFT" then
|
||||
local anchor = Gladdy:GetAnchor(unit, "LEFT")
|
||||
if anchor == Gladdy.buttons[unit].healthBar then
|
||||
button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -(Gladdy.db.highlightBorderSize + Gladdy.db.padding) + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -(horizontalMargin + Gladdy.db.padding) + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
else
|
||||
button.spellCooldownFrame:SetPoint("RIGHT", anchor, "LEFT", -Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
end
|
||||
elseif Gladdy.db.cooldownYPos == "RIGHT" then
|
||||
local anchor = Gladdy:GetAnchor(unit, "RIGHT")
|
||||
if anchor == Gladdy.buttons[unit].healthBar then
|
||||
button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.highlightBorderSize + Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", horizontalMargin + Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
else
|
||||
button.spellCooldownFrame:SetPoint("LEFT", anchor, "RIGHT", Gladdy.db.padding + Gladdy.db.cooldownXOffset, Gladdy.db.cooldownYOffset)
|
||||
end
|
||||
@ -171,7 +172,7 @@ function Cooldowns:UpdateFrame(unit)
|
||||
local icon = button.spellCooldownFrame["icon" .. j]
|
||||
icon:SetHeight(Gladdy.db.cooldownSize)
|
||||
icon:SetWidth(Gladdy.db.cooldownSize * Gladdy.db.cooldownWidthFactor)
|
||||
icon.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a)
|
||||
icon:ClearAllPoints()
|
||||
if (Gladdy.db.cooldownXPos == "RIGHT") then
|
||||
@ -219,7 +220,7 @@ function Cooldowns:UpdateFrame(unit)
|
||||
icon.cooldown:SetPoint("CENTER", icon, "CENTER")
|
||||
icon.cooldown:SetAlpha(Gladdy.db.cooldownCooldownAlpha)
|
||||
|
||||
icon.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), (icon:GetWidth()/2 - 1) * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), (icon:GetWidth()/2 - 1) * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
icon.cooldownFont:SetTextColor(Gladdy.db.cooldownFontColor.r, Gladdy.db.cooldownFontColor.g, Gladdy.db.cooldownFontColor.b, Gladdy.db.cooldownFontColor.a)
|
||||
|
||||
icon.border:SetTexture(Gladdy.db.cooldownBorderStyle)
|
||||
@ -237,9 +238,16 @@ end
|
||||
|
||||
function Cooldowns:Test(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if Gladdy.db.cooldown then
|
||||
button.spellCooldownFrame:Show()
|
||||
button.lastCooldownSpell = 1
|
||||
self:UpdateTestCooldowns(unit)
|
||||
else
|
||||
button.spellCooldownFrame:Hide()
|
||||
button.lastCooldownSpell = 1
|
||||
self:UpdateTestCooldowns(unit)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function Cooldowns:UpdateTestCooldowns(unit)
|
||||
@ -253,13 +261,12 @@ function Cooldowns:UpdateTestCooldowns(unit)
|
||||
button.test = true
|
||||
|
||||
-- use class spells
|
||||
for k, v in pairs(Gladdy:GetCooldownList()[button.class]) do
|
||||
--k is spellId
|
||||
self:CooldownUsed(unit, button.class, k, nil)
|
||||
for spellId,_ in pairs(Gladdy:GetCooldownList()[button.class]) do
|
||||
self:CooldownUsed(unit, button.class, spellId)
|
||||
end
|
||||
-- use race spells
|
||||
for k, v in pairs(Gladdy:GetCooldownList()[button.race]) do
|
||||
self:CooldownUsed(unit, button.race, k, nil)
|
||||
for spellId,_ in pairs(Gladdy:GetCooldownList()[button.race]) do
|
||||
self:CooldownUsed(unit, button.race, spellId)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -287,19 +294,13 @@ function Cooldowns:CooldownStart(button, spellId, duration)
|
||||
self.timeLeft = self.timeLeft - elapsed
|
||||
local timeLeft = ceil(self.timeLeft)
|
||||
if timeLeft >= 540 then
|
||||
self.cooldownFont:SetText(ceil(timeLeft / 60) .. "m")
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), Gladdy.db.cooldownSize / 3.1 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 3.1 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
elseif timeLeft < 540 and timeLeft >= 60 then
|
||||
-- more than 1 minute
|
||||
self.cooldownFont:SetText(ceil(timeLeft / 60) .. "m")
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), Gladdy.db.cooldownSize / 2.15 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2.15 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
elseif timeLeft < 60 and timeLeft > 0 then
|
||||
-- between 60s and 21s (green)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.cooldownFont), Gladdy.db.cooldownSize / 2.15 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
self.cooldownFont:SetText(timeLeft)
|
||||
else
|
||||
self.cooldownFont:SetText("")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "cooldownFont"), Gladdy.db.cooldownSize / 2.15 * Gladdy.db.cooldownFontScale, "OUTLINE")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 0)
|
||||
if (self.timeLeft <= 0) then
|
||||
Cooldowns:CooldownReady(button, spellId, frame)
|
||||
end
|
||||
@ -337,6 +338,9 @@ function Cooldowns:DetectSpec(unit, spec)
|
||||
if (not button or not spec or button.spec) then
|
||||
return
|
||||
end
|
||||
if button.class == "PALADIN" and (spec ~= L["Holy"] or spec ~= L["Retribution"]) then
|
||||
return
|
||||
end
|
||||
|
||||
button.spec = spec
|
||||
if not button.test then
|
||||
@ -351,7 +355,6 @@ function Cooldowns:DetectSpec(unit, spec)
|
||||
]]
|
||||
if (Gladdy.db.cooldown) then
|
||||
local class = Gladdy.buttons[unit].class
|
||||
local race = Gladdy.buttons[unit].race
|
||||
for k, v in pairs(Gladdy:GetCooldownList()[class]) do
|
||||
if Gladdy.db.cooldownCooldowns[tostring(k)] then
|
||||
--if (self.db.cooldownList[k] ~= false and self.db.cooldownList[class] ~= false) then
|
||||
@ -482,7 +485,7 @@ function Cooldowns:UpdateCooldowns(button)
|
||||
end
|
||||
end
|
||||
|
||||
function Cooldowns:CooldownUsed(unit, unitClass, spellId, spellName)
|
||||
function Cooldowns:CooldownUsed(unit, unitClass, spellId)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
@ -500,8 +503,8 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, spellName)
|
||||
|
||||
-- check if we need to reset other cooldowns because of this spell
|
||||
if (cooldown.resetCD ~= nil) then
|
||||
for k, v in pairs(cooldown.resetCD) do
|
||||
self:CooldownReady(button, k, false)
|
||||
for spellID,_ in pairs(cooldown.resetCD) do
|
||||
self:CooldownReady(button, spellID, false)
|
||||
end
|
||||
end
|
||||
|
||||
@ -517,9 +520,9 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, spellName)
|
||||
if (cooldown.sharedCD ~= nil) then
|
||||
local sharedCD = cooldown.sharedCD.cd and cooldown.sharedCD.cd or cd
|
||||
|
||||
for k, v in pairs(cooldown.sharedCD) do
|
||||
if (k ~= "cd") then
|
||||
self:CooldownStart(button, k, sharedCD)
|
||||
for spellID,_ in pairs(cooldown.sharedCD) do
|
||||
if (spellID ~= "cd") then
|
||||
self:CooldownStart(button, spellID, sharedCD)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -575,14 +578,14 @@ function Cooldowns:GetOptions()
|
||||
},
|
||||
cooldown = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Enabled cooldown module"],
|
||||
order = 2,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
args = {
|
||||
icon = {
|
||||
@ -601,7 +604,8 @@ function Cooldowns:GetOptions()
|
||||
desc = L["Size of each cd icon"],
|
||||
order = 4,
|
||||
min = 5,
|
||||
max = (Gladdy.db.healthBarHeight + Gladdy.db.castBarHeight + Gladdy.db.powerBarHeight + Gladdy.db.bottomMargin) / 2,
|
||||
max = 50,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -611,6 +615,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -620,6 +625,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownMaxIconsPerLine = Gladdy:option({
|
||||
type = "range",
|
||||
@ -628,6 +634,7 @@ function Cooldowns:GetOptions()
|
||||
min = 3,
|
||||
max = 14,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -645,6 +652,7 @@ function Cooldowns:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -653,6 +661,7 @@ function Cooldowns:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 9,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -682,6 +691,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownFontColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@ -736,6 +746,7 @@ function Cooldowns:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -744,6 +755,7 @@ function Cooldowns:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -777,7 +789,7 @@ function Cooldowns:GetOptions()
|
||||
cooldowns = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Cooldowns",
|
||||
name = L["Cooldowns"],
|
||||
order = 4,
|
||||
args = Cooldowns:GetCooldownOptions(),
|
||||
},
|
||||
@ -805,10 +817,10 @@ function Cooldowns:GetCooldownOptions()
|
||||
order = o,
|
||||
width = "full",
|
||||
image = select(3, GetSpellInfo(spellId)),
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.cooldownCooldowns[tostring(spellId)]
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.cooldownCooldowns[tostring(spellId)] = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
@ -834,10 +846,10 @@ function Cooldowns:GetCooldownOptions()
|
||||
order = o,
|
||||
width = "full",
|
||||
image = select(3, GetSpellInfo(spellId)),
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.cooldownCooldowns[tostring(spellId)]
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.cooldownCooldowns[tostring(spellId)] = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
@ -859,13 +871,13 @@ function Gladdy:UpdateTestCooldowns(i)
|
||||
Cooldowns:DetectSpec(unit, button.testSpec)
|
||||
|
||||
-- use class spells
|
||||
for k, v in pairs(Gladdy:GetCooldownList()[button.class]) do
|
||||
for spellID,_ in pairs(Gladdy:GetCooldownList()[button.class]) do
|
||||
--k is spellId
|
||||
Cooldowns:CooldownUsed(unit, button.class, k, nil)
|
||||
Cooldowns:CooldownUsed(unit, button.class, spellID)
|
||||
end
|
||||
-- use race spells
|
||||
for k, v in pairs(Gladdy:GetCooldownList()[button.race]) do
|
||||
Cooldowns:CooldownUsed(unit, button.race, k, nil)
|
||||
for spellID,_ in pairs(Gladdy:GetCooldownList()[button.race]) do
|
||||
Cooldowns:CooldownUsed(unit, button.race, spellID)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,14 +1,12 @@
|
||||
local select = select
|
||||
local pairs,ipairs,tbl_sort,tinsert,format = pairs,ipairs,table.sort,tinsert,format
|
||||
|
||||
local drDuration = 18
|
||||
local pairs,ipairs,tbl_sort,tinsert,format,rand = pairs,ipairs,table.sort,tinsert,format,math.random
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local DRData = LibStub("DRData-1.0")
|
||||
local DRData = LibStub("DRData-1.0-BCC")
|
||||
local L = Gladdy.L
|
||||
local function defaultCategories()
|
||||
local categories = {}
|
||||
@ -17,7 +15,7 @@ local function defaultCategories()
|
||||
tinsert(indexList, {spellID = k, category = v})
|
||||
end
|
||||
tbl_sort(indexList, function(a, b) return a.spellID < b.spellID end)
|
||||
for i,v in ipairs(indexList) do
|
||||
for _,v in ipairs(indexList) do
|
||||
if not categories[v.category] then
|
||||
categories[v.category] = {
|
||||
enabled = true,
|
||||
@ -47,7 +45,8 @@ local Diminishings = Gladdy:NewModule("Diminishings", nil, {
|
||||
drQuarterColor = {r = 1, g = 0.7, b = 0, a = 1 },
|
||||
drNullColor = {r = 1, g = 0, b = 0, a = 1 },
|
||||
drWidthFactor = 1,
|
||||
drCategories = defaultCategories()
|
||||
drCategories = defaultCategories(),
|
||||
drDuration = 18
|
||||
})
|
||||
|
||||
local function getDiminishColor(dr)
|
||||
@ -93,11 +92,7 @@ function Diminishings:CreateFrame(unit)
|
||||
Diminishings:Positionate(unit)
|
||||
else
|
||||
self.timeLeft = self.timeLeft - elapsed
|
||||
if self.timeLeft >=5 then
|
||||
self.timeText:SetFormattedText("%d", self.timeLeft)
|
||||
else
|
||||
self.timeText:SetFormattedText("%.1f", self.timeLeft >= 0.0 and self.timeLeft or 0.0)
|
||||
end
|
||||
Gladdy:FormatTimer(self.text, self.timeLeft, self.timeLeft < 5)
|
||||
end
|
||||
end
|
||||
end)
|
||||
@ -121,7 +116,7 @@ function Diminishings:CreateFrame(unit)
|
||||
|
||||
icon.text = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
icon.text:SetDrawLayer("OVERLAY")
|
||||
icon.text:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.drFont), 10, "OUTLINE")
|
||||
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)
|
||||
@ -130,7 +125,7 @@ function Diminishings:CreateFrame(unit)
|
||||
|
||||
icon.timeText = icon.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
icon.timeText:SetDrawLayer("OVERLAY")
|
||||
icon.timeText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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:SetShadowOffset(1, -1)
|
||||
icon.timeText:SetShadowColor(0, 0, 0, 1)
|
||||
@ -162,7 +157,7 @@ function Diminishings:UpdateFrame(unit)
|
||||
end
|
||||
|
||||
drFrame:ClearAllPoints()
|
||||
local horizontalMargin = Gladdy.db.highlightBorderSize + Gladdy.db.padding
|
||||
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
|
||||
@ -189,9 +184,9 @@ function Diminishings:UpdateFrame(unit)
|
||||
icon:SetWidth(Gladdy.db.drIconSize * Gladdy.db.drWidthFactor)
|
||||
icon:SetHeight(Gladdy.db.drIconSize)
|
||||
|
||||
icon.text:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.drFont), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
||||
icon.text:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
||||
icon.text:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
||||
icon.timeText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.drFont), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
||||
icon.timeText:SetFont(Gladdy:SMFetch("font", "drFont"), (Gladdy.db.drIconSize/2 - 1) * Gladdy.db.drFontScale, "OUTLINE")
|
||||
icon.timeText:SetTextColor(Gladdy.db.drFontColor.r, Gladdy.db.drFontColor.g, Gladdy.db.drFontColor.b, Gladdy.db.drFontColor.a)
|
||||
|
||||
icon.cooldown:SetWidth(icon:GetWidth() - icon:GetWidth()/16)
|
||||
@ -262,17 +257,32 @@ end
|
||||
|
||||
function Diminishings:Test(unit)
|
||||
if Gladdy.db.drEnabled then
|
||||
local spells = { 33786, 118, 8643, 8983 }
|
||||
for i = 1, 4 do
|
||||
if i == 1 then
|
||||
self:AuraFade(unit, spells[i])
|
||||
elseif i == 2 then
|
||||
self:AuraFade(unit, spells[i])
|
||||
self:AuraFade(unit, spells[i])
|
||||
else
|
||||
self:AuraFade(unit, spells[i])
|
||||
self:AuraFade(unit, spells[i])
|
||||
self:AuraFade(unit, spells[i])
|
||||
local enabledCategories = {}
|
||||
for cat,val in pairs(Gladdy.db.drCategories) do
|
||||
if (val.enabled) then
|
||||
tinsert(enabledCategories, {cat = cat , spellIDs = {}})
|
||||
enabledCategories[cat] = #enabledCategories
|
||||
end
|
||||
end
|
||||
for spellId,cat in pairs(DRData:GetSpells()) do
|
||||
if enabledCategories[cat] then
|
||||
tinsert(enabledCategories[enabledCategories[cat]].spellIDs, spellId)
|
||||
end
|
||||
end
|
||||
|
||||
--shuffle
|
||||
for i = #enabledCategories, 2, -1 do
|
||||
local j = rand(i)
|
||||
enabledCategories[i], enabledCategories[j] = enabledCategories[j], enabledCategories[i]
|
||||
end
|
||||
|
||||
--execute test
|
||||
local index, amount = 0,0
|
||||
for i=1, (#enabledCategories < 4 and #enabledCategories) or 4 do
|
||||
amount = rand(1,3)
|
||||
index = rand(1, #enabledCategories[i].spellIDs)
|
||||
for _=1, amount do
|
||||
self:AuraFade(unit, enabledCategories[i].spellIDs[index])
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -299,15 +309,16 @@ function Diminishings:AuraFade(unit, spellID)
|
||||
lastIcon.diminishing = 1.0
|
||||
end
|
||||
end
|
||||
if not lastIcon then return end
|
||||
lastIcon.dr = drCat
|
||||
lastIcon.timeLeft = drDuration
|
||||
lastIcon.timeLeft = Gladdy.db.drDuration
|
||||
lastIcon.diminishing = DRData:NextDR(lastIcon.diminishing)
|
||||
if Gladdy.db.drBorderColorsEnabled then
|
||||
lastIcon.border:SetVertexColor(getDiminishColor(lastIcon.diminishing))
|
||||
else
|
||||
lastIcon.border:SetVertexColor(Gladdy.db.drBorderColor.r, Gladdy.db.drBorderColor.g, Gladdy.db.drBorderColor.b, Gladdy.db.drBorderColor.a)
|
||||
end
|
||||
lastIcon.cooldown:SetCooldown(GetTime(), drDuration)
|
||||
lastIcon.cooldown:SetCooldown(GetTime(), Gladdy.db.drDuration)
|
||||
if Gladdy.db.drCategories[drCat].forceIcon then
|
||||
lastIcon.texture:SetTexture(Gladdy.db.drCategories[drCat].icon)
|
||||
else
|
||||
@ -359,15 +370,24 @@ function Diminishings:GetOptions()
|
||||
},
|
||||
drEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Enabled DR module"],
|
||||
order = 3,
|
||||
}),
|
||||
drDuration = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["DR Duration"],
|
||||
desc = L["Change the DR Duration in seconds (DR is dynamic between 15-20s)"],
|
||||
order = 4,
|
||||
min = 15,
|
||||
max = 20,
|
||||
step = .1,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
order = 4,
|
||||
name = L["Frame"],
|
||||
order = 5,
|
||||
args = {
|
||||
icon = {
|
||||
type = "group",
|
||||
@ -385,8 +405,9 @@ function Diminishings:GetOptions()
|
||||
desc = L["Size of the DR Icons"],
|
||||
order = 5,
|
||||
min = 5,
|
||||
max = 50,
|
||||
max = 80,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
drWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -396,6 +417,7 @@ function Diminishings:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
drIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -405,6 +427,7 @@ function Diminishings:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -422,6 +445,7 @@ function Diminishings:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
drCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -430,6 +454,7 @@ function Diminishings:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 9,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -466,6 +491,7 @@ function Diminishings:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
},
|
||||
@ -501,6 +527,7 @@ function Diminishings:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
drYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -509,6 +536,7 @@ function Diminishings:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -582,16 +610,39 @@ function Diminishings:GetOptions()
|
||||
end
|
||||
|
||||
function Diminishings:CategoryOptions()
|
||||
local categories = {}
|
||||
local categories = {
|
||||
checkAll = {
|
||||
order = 1,
|
||||
width = "0.7",
|
||||
name = L["Check All"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
for k,_ in pairs(defaultCategories()) do
|
||||
Gladdy.db.drCategories[k].enabled = true
|
||||
end
|
||||
end,
|
||||
},
|
||||
uncheckAll = {
|
||||
order = 2,
|
||||
width = "0.7",
|
||||
name = L["Uncheck All"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
for k,_ in pairs(defaultCategories()) do
|
||||
Gladdy.db.drCategories[k].enabled = false
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
local indexList = {}
|
||||
for k,v in pairs(DRData:GetCategories()) do
|
||||
for k,_ in pairs(DRData:GetCategories()) do
|
||||
tinsert(indexList, k)
|
||||
end
|
||||
tbl_sort(indexList)
|
||||
for i, k in ipairs(indexList) do
|
||||
for i,k in ipairs(indexList) do
|
||||
categories[k] = {
|
||||
type = "group",
|
||||
name = DRData:GetCategoryName(k),
|
||||
name = L[DRData:GetCategoryName(k)],
|
||||
order = i,
|
||||
icon = Gladdy.db.drCategories[k].icon,
|
||||
args = {
|
||||
@ -599,10 +650,10 @@ function Diminishings:CategoryOptions()
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
order = 1,
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.drCategories[k].enabled
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.drCategories[k].enabled = value
|
||||
end,
|
||||
},
|
||||
@ -610,10 +661,10 @@ function Diminishings:CategoryOptions()
|
||||
type = "toggle",
|
||||
name = L["Force Icon"],
|
||||
order = 2,
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.drCategories[k].forceIcon
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.drCategories[k].forceIcon = value
|
||||
end,
|
||||
},
|
||||
@ -623,10 +674,10 @@ function Diminishings:CategoryOptions()
|
||||
desc = L["Icon of the DR"],
|
||||
order = 4,
|
||||
values = Diminishings:GetDRIcons(k),
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.db.drCategories[k].icon
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.db.drCategories[k].icon = value
|
||||
Gladdy.options.args.Diminishings.args.categories.args[k].icon = value
|
||||
end,
|
||||
|
@ -1,4 +1,4 @@
|
||||
local type, pairs = type, pairs
|
||||
local type, pairs, str_match = type, pairs, string.match
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local AceSerializer = LibStub("AceSerializer-3.0")
|
||||
@ -6,23 +6,32 @@ local L = Gladdy.L
|
||||
local AceGUI = LibStub("AceGUI-3.0")
|
||||
local LibDeflate = LibStub:GetLibrary("LibDeflate")
|
||||
|
||||
local function table_copy(t)
|
||||
|
||||
local function table_copy(t, str)
|
||||
local t2 = {};
|
||||
if str == nil then
|
||||
str = "Gladdy.db"
|
||||
end
|
||||
for k,v in pairs(t) do
|
||||
if type(v) == "table" then
|
||||
t2[k] = table_copy(v);
|
||||
if k == "drCategories" then
|
||||
for key,val in pairs(v) do
|
||||
--Gladdy:Print("TableCopy", str .. "." .. key)
|
||||
end
|
||||
end
|
||||
|
||||
t2[k] = table_copy(v, str .. "." .. k);
|
||||
else
|
||||
|
||||
t2[k] = v;
|
||||
end
|
||||
end
|
||||
return t2;
|
||||
end
|
||||
|
||||
local ExportImport = Gladdy:NewModule("ExportImport", nil, {
|
||||
local ExportImport = Gladdy:NewModule("Export Import", nil, {
|
||||
})
|
||||
|
||||
|
||||
|
||||
local export = AceGUI:Create("Frame")
|
||||
export:SetWidth(550)
|
||||
export.sizer_se:Hide()
|
||||
@ -85,6 +94,28 @@ end)
|
||||
import:AddChild(importClearButton)
|
||||
import.clearButton = importClearButton
|
||||
|
||||
local deletedOptions = { --TODO backward compatibility Imports on deleted options
|
||||
growUp = true,
|
||||
freezetrap = true,
|
||||
repentance = true
|
||||
}
|
||||
|
||||
local function checkIsDeletedOption(k, str, msg, errorFound, errorMsg)
|
||||
local isDeleted
|
||||
for key, _ in pairs(deletedOptions) do
|
||||
if str_match(k, key) then
|
||||
isDeleted = true
|
||||
Gladdy:Warn("found deleted option =", str .. "." .. k)
|
||||
end
|
||||
end
|
||||
if errorFound then
|
||||
return errorFound, errorMsg
|
||||
end
|
||||
if not isDeleted then
|
||||
return true, msg or str .. "." .. k .. " does not exist"
|
||||
end
|
||||
end
|
||||
|
||||
function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
||||
if str == nil and not tbl.version_major_num then
|
||||
return false, "Version conflict: version_major_num not seen"
|
||||
@ -96,17 +127,29 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
||||
str = "Gladdy.db"
|
||||
tbl.version_major_num = nil
|
||||
end
|
||||
local res, msg
|
||||
local errorFound, errorMsg
|
||||
if refTbl == nil then
|
||||
return false, str .. "does not exist"
|
||||
else
|
||||
for k,v in pairs(tbl) do
|
||||
if refTbl[k] == nil then
|
||||
return false, str .. "." .. k .. " does not exist"
|
||||
else
|
||||
if type(v) ~= type(refTbl[k]) then
|
||||
return false, str .. "." .. k .. " type error. Expected " .. type(refTbl[k]) .. " found " .. type(v)
|
||||
errorFound, errorMsg = checkIsDeletedOption(k, str, nil, errorFound, errorMsg)
|
||||
elseif type(v) ~= type(refTbl[k]) then
|
||||
errorFound = true
|
||||
errorMsg = str .. "." .. k .. " type error. Expected " .. type(refTbl[k]) .. " found " .. type(v)
|
||||
elseif type(v) == "table" then
|
||||
ExportImport:CheckDeserializedOptions(v, refTbl[k], str .. "." .. k)
|
||||
res, msg = ExportImport:CheckDeserializedOptions(v, refTbl[k], str .. "." .. k)
|
||||
if not res then
|
||||
errorFound, errorMsg = checkIsDeletedOption(msg, str, msg, errorFound, errorMsg)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if errorFound then
|
||||
return false, errorMsg
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
@ -133,8 +176,8 @@ function ExportImport:GetOptions()
|
||||
export.eb:HighlightText(0, export.eb.editBox:GetNumLetters())
|
||||
export:SetStatusText("Copy this string to share your configuration with others.")
|
||||
end,
|
||||
name = "Export",
|
||||
desc = "Export your current profile to share with others or your various accounts.",
|
||||
name = L["Export"],
|
||||
desc = L["Export your current profile to share with others or your various accounts."],
|
||||
order = 3,
|
||||
},
|
||||
import = {
|
||||
@ -157,17 +200,25 @@ function ExportImport:GetOptions()
|
||||
import.deserializedTable = deserialized
|
||||
end)
|
||||
end,
|
||||
name = "Import",
|
||||
desc = "This will overwrite your current profile!",
|
||||
name = L["Import"],
|
||||
desc = L["This will overwrite your current profile!"],
|
||||
order = 4,
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function ExportImport:ApplyImport(t, table)
|
||||
function ExportImport:ApplyImport(t, table, str)
|
||||
if str == nil then
|
||||
str = "Gladdy.db"
|
||||
end
|
||||
for k,v in pairs(t) do
|
||||
if type(v) == "table" then
|
||||
ExportImport:ApplyImport(v, table[k])
|
||||
if (table[k] ~= nil) then
|
||||
ExportImport:ApplyImport(v, table[k], str .. "." .. k)
|
||||
else
|
||||
Gladdy:Warn("ApplyImport failed for", str .. "." .. k)
|
||||
end
|
||||
|
||||
else
|
||||
table[k] = v
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
local pairs = pairs
|
||||
local floor = math.floor
|
||||
local UnitHealth, UnitHealthMax, UnitName, UnitExists = UnitHealth, UnitHealthMax, UnitName, UnitExists
|
||||
local UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost = UnitHealth, UnitHealthMax, UnitName, UnitExists, UnitIsDeadOrGhost
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
||||
@ -8,7 +8,7 @@ local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AceGUIWidgetLSMlists = AceGUIWidgetLSMlists
|
||||
local Healthbar = Gladdy:NewModule("Healthbar", 100, {
|
||||
local Healthbar = Gladdy:NewModule("Health Bar", 100, {
|
||||
healthBarFont = "DorisPP",
|
||||
healthBarHeight = 60,
|
||||
healthBarTexture = "Smooth",
|
||||
@ -39,18 +39,18 @@ function Healthbar:CreateFrame(unit)
|
||||
|
||||
local healthBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
|
||||
healthBar:EnableMouse(false)
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.healthBarBorderStyle),
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.healthBarBorderSize })
|
||||
healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a)
|
||||
healthBar:SetFrameLevel(1)
|
||||
|
||||
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.healthBarTexture))
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||
healthBar.hp:SetMinMaxValues(0, 100)
|
||||
healthBar.hp:SetFrameLevel(0)
|
||||
|
||||
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
||||
healthBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.healthBarTexture))
|
||||
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||
healthBar.bg:ClearAllPoints()
|
||||
healthBar.bg:SetAllPoints(healthBar.hp)
|
||||
healthBar.bg:SetAlpha(1)
|
||||
@ -58,10 +58,10 @@ function Healthbar:CreateFrame(unit)
|
||||
|
||||
healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall")
|
||||
if (Gladdy.db.healthBarNameFontSize < 1) then
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarNameFont), 1)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), Gladdy.db.healthBarNameFontSize)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize)
|
||||
healthBar.nameText:Show()
|
||||
end
|
||||
healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
||||
@ -72,10 +72,10 @@ function Healthbar:CreateFrame(unit)
|
||||
|
||||
healthBar.healthText = healthBar:CreateFontString(nil, "LOW")
|
||||
if (Gladdy.db.healthBarHealthFontSize < 1) then
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), 1)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:Hide()
|
||||
end
|
||||
healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
||||
@ -95,12 +95,22 @@ function Healthbar:CreateFrame(unit)
|
||||
end
|
||||
|
||||
function Healthbar.OnEvent(self, event, unit)
|
||||
local isDead = UnitExists(unit) and UnitIsDeadOrGhost(unit)
|
||||
if event == "UNIT_HEALTH" then
|
||||
if isDead then
|
||||
Gladdy:SendMessage("UNIT_DEATH", unit)
|
||||
return
|
||||
end
|
||||
local health = UnitHealth(unit)
|
||||
local healthMax = UnitHealthMax(unit)
|
||||
Healthbar:SetHealthText(self, health, healthMax)
|
||||
self.hp:SetMinMaxValues(0, healthMax)
|
||||
self.hp:SetValue(UnitHealth(unit))
|
||||
Healthbar:SetHealthText(self, health, healthMax)
|
||||
elseif 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)
|
||||
@ -109,8 +119,10 @@ function Healthbar.OnEvent(self, event, unit)
|
||||
elseif event == "UNIT_NAME_UPDATE" then
|
||||
local name = UnitName(unit)
|
||||
Gladdy.buttons[unit].name = name
|
||||
if Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then
|
||||
self.nameText:SetText(name)
|
||||
end
|
||||
end
|
||||
if not Gladdy.buttons[unit].class then
|
||||
Gladdy:SpotEnemy(unit, true)
|
||||
end
|
||||
@ -120,7 +132,7 @@ function Healthbar:SetHealthText(healthBar, health, healthMax)
|
||||
local healthText
|
||||
local healthPercentage = floor(health * 100 / healthMax)
|
||||
|
||||
if health == 0 then
|
||||
if health == 0 and UnitExists(healthBar.unit) and UnitIsDeadOrGhost(healthBar.unit) then
|
||||
self:UNIT_DEATH(healthBar.unit)
|
||||
return
|
||||
end
|
||||
@ -155,35 +167,33 @@ function Healthbar:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local iconSize = Gladdy.db.healthBarHeight + Gladdy.db.powerBarHeight
|
||||
|
||||
healthBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.healthBarBorderStyle),
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "healthBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.healthBarBorderSize })
|
||||
healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a)
|
||||
healthBar:ClearAllPoints()
|
||||
healthBar:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPLEFT", iconSize, 0)
|
||||
healthBar:SetPoint("TOPLEFT", Gladdy.buttons[unit], "TOPLEFT", 0, 0)
|
||||
healthBar:SetPoint("BOTTOMRIGHT", Gladdy.buttons[unit], "BOTTOMRIGHT")
|
||||
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.healthBarTexture))
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "healthBarTexture"))
|
||||
healthBar.hp:ClearAllPoints()
|
||||
healthBar.hp:SetPoint("TOPLEFT", healthBar, "TOPLEFT", (Gladdy.db.healthBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.healthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
healthBar.hp:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", -(Gladdy.db.healthBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.healthBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
||||
|
||||
if (Gladdy.db.healthBarHealthFontSize < 1) then
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), 1)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), 1)
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarHealthFontSize)
|
||||
healthBar.healthText:Show()
|
||||
end
|
||||
if (Gladdy.db.healthBarNameFontSize < 1) then
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarNameFont), 1)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarNameFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.healthBarFont), Gladdy.db.healthBarNameFontSize)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "healthBarFont"), Gladdy.db.healthBarNameFontSize)
|
||||
if Gladdy.db.healthName then
|
||||
healthBar.nameText:Show()
|
||||
else
|
||||
@ -222,7 +232,7 @@ function Healthbar:JOINED_ARENA()
|
||||
if Gladdy.db.healthNameToArenaId and Gladdy.db.healthName then
|
||||
for i=1,Gladdy.curBracket do
|
||||
local healthBar = self.frames["arena" .. i]
|
||||
healthBar.nameText:SetText("Arena" .. i)
|
||||
healthBar.nameText:SetText(i)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -245,7 +255,9 @@ function Healthbar:ENEMY_SPOTTED(unit)
|
||||
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
|
||||
|
||||
function Healthbar:UNIT_HEALTH(unit, health, healthMax)
|
||||
@ -316,7 +328,7 @@ local function option(params)
|
||||
set = function(info, value)
|
||||
local key = info.arg or info[#info]
|
||||
Gladdy.dbi.profile[key] = value
|
||||
Gladdy.options.args.Healthbar.args.group.args.border.args.healthBarBorderSize.max = Gladdy.db.healthBarHeight/2
|
||||
Gladdy.options.args["Health Bar"].args.group.args.border.args.healthBarBorderSize.max = Gladdy.db.healthBarHeight/2
|
||||
if Gladdy.db.healthBarBorderSize > Gladdy.db.healthBarHeight/2 then
|
||||
Gladdy.db.healthBarBorderSize = Gladdy.db.healthBarHeight/2
|
||||
end
|
||||
@ -344,7 +356,7 @@ function Healthbar:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
args = {
|
||||
general = {
|
||||
@ -365,6 +377,7 @@ function Healthbar:GetOptions()
|
||||
min = 10,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
healthBarTexture = option({
|
||||
type = "select",
|
||||
@ -416,6 +429,7 @@ function Healthbar:GetOptions()
|
||||
step = 0.1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
healthBarHealthFontSize = option({
|
||||
type = "range",
|
||||
@ -425,6 +439,7 @@ function Healthbar:GetOptions()
|
||||
step = 0.1,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -453,6 +468,7 @@ function Healthbar:GetOptions()
|
||||
min = 0.5,
|
||||
max = Gladdy.db.healthBarHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
healthBarBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@ -478,12 +494,14 @@ function Healthbar:GetOptions()
|
||||
name = L["Show name text"],
|
||||
desc = L["Show the units name"],
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
healthNameToArenaId = option({
|
||||
type = "toggle",
|
||||
name = L["Show ArenaX"],
|
||||
desc = L["Show Arena1-5 as name instead"],
|
||||
desc = L["Show 1-5 as name instead"],
|
||||
order = 3,
|
||||
width = "full",
|
||||
disabled = function() return not Gladdy.db.healthName end
|
||||
}),
|
||||
healthActual = option({
|
||||
@ -491,18 +509,21 @@ function Healthbar:GetOptions()
|
||||
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({
|
||||
type = "toggle",
|
||||
name = L["Show health percentage"],
|
||||
desc = L["Show health percentage on the health bar"],
|
||||
order = 6,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
@ -3,10 +3,12 @@ local CreateFrame, UnitIsUnit = CreateFrame, UnitIsUnit
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local Highlight = Gladdy:NewModule("Highlight", nil, {
|
||||
highlightBorderSize = 2,
|
||||
highlightBorderSize = 1,
|
||||
highlightInset = false,
|
||||
targetBorderColor = { r = 1, g = 0.8, b = 0, a = 1 },
|
||||
focusBorderColor = { r = 1, g = 0, b = 0, a = 1 },
|
||||
leaderBorderColor = { r = 0, g = 1, b = 0, a = 1 },
|
||||
highlightBorderStyle = "Square Full White",
|
||||
highlight = true,
|
||||
targetBorder = true,
|
||||
focusBorder = true,
|
||||
@ -50,20 +52,20 @@ function Highlight:CreateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local healthBar = Gladdy.modules.Healthbar.frames[unit]
|
||||
local healthBar = Gladdy.modules["Health Bar"].frames[unit]
|
||||
|
||||
local targetBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||
targetBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = Gladdy.db.highlightBorderSize })
|
||||
targetBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||
--targetBorder:SetFrameStrata("MEDIUM")
|
||||
targetBorder:Hide()
|
||||
|
||||
local focusBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||
focusBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = Gladdy.db.highlightBorderSize })
|
||||
focusBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||
--focusBorder:SetFrameStrata("MEDIUM")
|
||||
focusBorder:Hide()
|
||||
|
||||
local leaderBorder = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||
leaderBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = Gladdy.db.highlightBorderSize })
|
||||
leaderBorder:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "highlightBorderStyle"), edgeSize = Gladdy.db.highlightBorderSize })
|
||||
--leaderBorder:SetFrameStrata("MEDIUM")
|
||||
leaderBorder:Hide()
|
||||
|
||||
@ -87,30 +89,50 @@ function Highlight:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local powerBarHeight = Gladdy.db.powerBarEnabled and (Gladdy.db.powerBarHeight + 1) or 0
|
||||
local borderSize = Gladdy.db.highlightBorderSize
|
||||
local iconSize = Gladdy.db.healthBarHeight + Gladdy.db.powerBarHeight + 1
|
||||
local width = Gladdy.db.barWidth + borderSize * 2
|
||||
local height = iconSize + borderSize * 2
|
||||
local borderOffset = borderSize
|
||||
local hpAndPowerHeight = Gladdy.db.healthBarHeight + powerBarHeight
|
||||
local width = Gladdy.db.barWidth + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
||||
local height = hpAndPowerHeight + (Gladdy.db.highlightInset and 0 or borderSize * 2)
|
||||
|
||||
button.targetBorder:SetWidth(width)
|
||||
button.targetBorder:SetHeight(height)
|
||||
button.targetBorder:ClearAllPoints()
|
||||
button.targetBorder:SetPoint("TOP", button.healthBar, "TOP", 0, borderSize)
|
||||
button.targetBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = borderSize })
|
||||
if Gladdy.db.highlightInset then
|
||||
button.targetBorder:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", -(borderOffset/Gladdy.db.statusbarBorderOffset), (borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
button.targetBorder:SetPoint("BOTTOMRIGHT", Gladdy.db.powerBarEnabled and button.powerBar or button.healthBar, "BOTTOMRIGHT", (borderOffset/Gladdy.db.statusbarBorderOffset), -(borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
else
|
||||
button.targetBorder:SetPoint("TOP", button.healthBar, "TOP", 0, (Gladdy.db.highlightInset and 0 or borderSize))
|
||||
end
|
||||
|
||||
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.focusBorder:SetWidth(width)
|
||||
button.focusBorder:SetHeight(height)
|
||||
button.focusBorder:ClearAllPoints()
|
||||
button.focusBorder:SetPoint("TOP", button.healthBar, "TOP", 0, borderSize)
|
||||
button.focusBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = borderSize })
|
||||
if Gladdy.db.highlightInset then
|
||||
button.focusBorder:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", -(borderOffset/Gladdy.db.statusbarBorderOffset), (borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
button.focusBorder:SetPoint("BOTTOMRIGHT", Gladdy.db.powerBarEnabled and button.powerBar or button.healthBar, "BOTTOMRIGHT", (borderOffset/Gladdy.db.statusbarBorderOffset), -(borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
else
|
||||
button.focusBorder:SetPoint("TOP", button.healthBar, "TOP", 0, (Gladdy.db.highlightInset and 0 or borderSize))
|
||||
end
|
||||
|
||||
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.leaderBorder:SetWidth(width)
|
||||
button.leaderBorder:SetHeight(height)
|
||||
button.leaderBorder:ClearAllPoints()
|
||||
button.leaderBorder:SetPoint("TOP", button.healthBar, "TOP", 0, borderSize)
|
||||
button.leaderBorder:SetBackdrop({ edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeSize = borderSize })
|
||||
if Gladdy.db.highlightInset then
|
||||
button.leaderBorder:SetPoint("TOPLEFT", button.healthBar, "TOPLEFT", -(borderOffset/Gladdy.db.statusbarBorderOffset), (borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
button.leaderBorder:SetPoint("BOTTOMRIGHT", button.powerBar, "BOTTOMRIGHT", (borderOffset/Gladdy.db.statusbarBorderOffset), -(borderOffset/Gladdy.db.statusbarBorderOffset))
|
||||
else
|
||||
button.leaderBorder:SetPoint("TOP", button.healthBar, "TOP", 0, (Gladdy.db.highlightInset and 0 or borderSize))
|
||||
end
|
||||
|
||||
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)
|
||||
if Gladdy.frame.testing then
|
||||
Highlight:Test(unit)
|
||||
@ -135,7 +157,7 @@ function Highlight:Test(unit)
|
||||
elseif (unit == "arena2") then
|
||||
self:Toggle(unit, "target", true)
|
||||
elseif (unit == "arena3") then
|
||||
self:Toggle(unit, "leader", true)
|
||||
--self:Toggle(unit, "leader", true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -179,39 +201,51 @@ function Highlight:GetOptions()
|
||||
name = L["Highlight"],
|
||||
order = 2,
|
||||
},
|
||||
highlightBorderSize = {
|
||||
highlightInset = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Show Inside"],
|
||||
desc = L["Show Highlight border inside of frame"],
|
||||
order = 3,
|
||||
}),
|
||||
highlightBorderSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Border size"],
|
||||
desc = L["Border size"],
|
||||
order = 3,
|
||||
order = 4,
|
||||
min = 1,
|
||||
max = 10,
|
||||
max = 20,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
highlightBorderStyle = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Border style"],
|
||||
order = 5,
|
||||
dialogControl = "LSM30_Border",
|
||||
values = AceGUIWidgetLSMlists.border,
|
||||
}),
|
||||
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 = 4,
|
||||
order = 7,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
focusBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Focus border color"],
|
||||
desc = L["Color of the focus border"],
|
||||
order = 5,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
leaderBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
name = L["Raid leader border color"],
|
||||
desc = L["Color of the raid leader border"],
|
||||
order = 6,
|
||||
order = 8,
|
||||
hasAlpha = true,
|
||||
}),
|
||||
headerEnable = {
|
||||
type = "header",
|
||||
name = L["Enable/Disable"],
|
||||
name = L["Enabled"],
|
||||
order = 10,
|
||||
},
|
||||
highlight = Gladdy:option({
|
||||
@ -219,24 +253,21 @@ function Highlight:GetOptions()
|
||||
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,
|
||||
}),
|
||||
leaderBorder = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Show border around raid leader"],
|
||||
desc = L["Toggle if a border should be shown around the raid leader"],
|
||||
order = 14,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
end
|
@ -1,12 +1,12 @@
|
||||
local string_gsub, floor, pairs = string.gsub, math.floor, pairs
|
||||
local CreateFrame = CreateFrame
|
||||
local CreateFrame, SetPortraitTexture = CreateFrame, SetPortraitTexture
|
||||
local UnitHealthMax, UnitHealth, UnitGUID = UnitHealthMax, UnitHealth, UnitGUID
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local Pets = Gladdy:NewModule("Pets", nil, {
|
||||
petEnabled = true,
|
||||
petWidth = 100,
|
||||
petWidth = 128,
|
||||
petHeight = 20,
|
||||
petPortraitEnabled = true,
|
||||
petPortraitBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
|
||||
@ -21,8 +21,8 @@ local Pets = Gladdy:NewModule("Pets", nil, {
|
||||
petHealthBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
petHealthBarFontSize = 12,
|
||||
petHealthPercentage = true,
|
||||
petXOffset = 50,
|
||||
petYOffset = 0,
|
||||
petXOffset = 1,
|
||||
petYOffset = -62,
|
||||
})
|
||||
|
||||
function Pets:Initialize()
|
||||
@ -35,12 +35,12 @@ function Pets:Initialize()
|
||||
end
|
||||
|
||||
function Pets:JOINED_ARENA()
|
||||
for k,v in pairs(self.frames) do
|
||||
for _,v in pairs(self.frames) do
|
||||
v.healthBar:SetAlpha(0)
|
||||
end
|
||||
if Gladdy.db.petEnabled then
|
||||
self:RegisterEvent("UNIT_PET")
|
||||
self:SetScript("OnEvent", function(self, event, unitId)
|
||||
self:SetScript("OnEvent", function(_, event, unitId)
|
||||
if event == "UNIT_PET" then
|
||||
local unit = Gladdy.guids[UnitGUID(unitId)]
|
||||
if unit then
|
||||
@ -124,6 +124,7 @@ function Pets:Test(unitId)
|
||||
petFrame.healthBar.hp:SetMinMaxValues(0, 6200)
|
||||
petFrame.healthBar.hp:SetValue(2000)
|
||||
Pets:SetHealthText(petFrame.healthBar, 2000, 6200)
|
||||
SetPortraitTexture(petFrame.healthBar.portrait, "player")
|
||||
end
|
||||
end
|
||||
|
||||
@ -136,9 +137,9 @@ function Pets:CreateFrame(unitId)
|
||||
--button:SetAlpha(0)
|
||||
button:SetPoint("LEFT", Gladdy.buttons[unitId].healthBar, "RIGHT", Gladdy.db.petXOffset, Gladdy.db.petYOffset)
|
||||
|
||||
local secure = CreateFrame("Button", "GladdyButton" .. unit, button, "SecureActionButtonTemplate")
|
||||
secure:RegisterForClicks("AnyUp")
|
||||
local secure = CreateFrame("Button", "GladdyButton" .. unit, button, "SecureActionButtonTemplate, SecureHandlerEnterLeaveTemplate")
|
||||
secure:RegisterForClicks("AnyUp")
|
||||
secure:RegisterForClicks("AnyDown")
|
||||
secure:SetAttribute("*type1", "target")
|
||||
secure:SetAttribute("*type2", "focus")
|
||||
secure:SetAttribute("unit", unit)
|
||||
@ -148,14 +149,14 @@ function Pets:CreateFrame(unitId)
|
||||
button.secure = secure
|
||||
|
||||
local healthBar = CreateFrame("Frame", nil, button, BackdropTemplateMixin and "BackdropTemplate")
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.petHealthBarBorderStyle),
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
||||
healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
||||
healthBar:SetFrameLevel(1)
|
||||
healthBar:SetAllPoints(button)
|
||||
healthBar:SetAlpha(0)
|
||||
|
||||
healthBar.portrait = healthBar:CreateTexture(nil, "OVERLAY")
|
||||
healthBar.portrait = healthBar:CreateTexture(nil, "BACKGROUND")
|
||||
healthBar.portrait:SetPoint("LEFT", healthBar, "RIGHT")
|
||||
healthBar.portrait:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
||||
SetPortraitTexture(healthBar.portrait, "player")
|
||||
@ -166,14 +167,14 @@ function Pets:CreateFrame(unitId)
|
||||
|
||||
|
||||
healthBar.hp = CreateFrame("StatusBar", nil, healthBar)
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:SetMinMaxValues(0, 100)
|
||||
healthBar.hp:SetFrameLevel(0)
|
||||
healthBar.hp:SetAllPoints(healthBar)
|
||||
|
||||
healthBar.bg = healthBar.hp:CreateTexture(nil, "BACKGROUND")
|
||||
healthBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.petHealthBarTexture))
|
||||
healthBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "petHealthBarTexture"))
|
||||
healthBar.bg:ClearAllPoints()
|
||||
healthBar.bg:SetAllPoints(healthBar.hp)
|
||||
healthBar.bg:SetAlpha(1)
|
||||
@ -181,10 +182,10 @@ function Pets:CreateFrame(unitId)
|
||||
|
||||
healthBar.nameText = healthBar:CreateFontString(nil, "LOW", "GameFontNormalSmall")
|
||||
if (Gladdy.db.petHealthBarFontSize < 1) then
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), 1)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.nameText:Show()
|
||||
end
|
||||
healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
||||
@ -195,10 +196,10 @@ function Pets:CreateFrame(unitId)
|
||||
|
||||
healthBar.healthText = healthBar:CreateFontString(nil, "LOW")
|
||||
if (Gladdy.db.petHealthBarFontSize < 1) then
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), 1)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.healthText:Hide()
|
||||
end
|
||||
healthBar.healthText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
||||
@ -262,28 +263,28 @@ function Pets:UpdateFrame(unitId)
|
||||
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.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.petHealthBarBorderStyle),
|
||||
healthBar:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "petHealthBarBorderStyle"),
|
||||
edgeSize = Gladdy.db.petHealthBarBorderSize })
|
||||
healthBar:SetBackdropBorderColor(Gladdy.db.petHealthBarBorderColor.r, Gladdy.db.petHealthBarBorderColor.g, Gladdy.db.petHealthBarBorderColor.b, Gladdy.db.petHealthBarBorderColor.a)
|
||||
|
||||
healthBar.hp:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.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:ClearAllPoints()
|
||||
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))
|
||||
|
||||
if (Gladdy.db.petHealthBarFontSize < 1) then
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), 1)
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), 1)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), 1)
|
||||
healthBar.nameText:Hide()
|
||||
healthBar.healthText:Hide()
|
||||
else
|
||||
healthBar.nameText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.nameText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.nameText:Show()
|
||||
healthBar.healthText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.petHealthBarFont), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.healthText:SetFont(Gladdy:SMFetch("font", "petHealthBarFont"), Gladdy.db.petHealthBarFontSize)
|
||||
healthBar.healthText:Show()
|
||||
end
|
||||
healthBar.nameText:SetTextColor(Gladdy.db.petHealthBarFontColor.r, Gladdy.db.petHealthBarFontColor.g, Gladdy.db.petHealthBarFontColor.b, Gladdy.db.petHealthBarFontColor.a)
|
||||
@ -332,21 +333,21 @@ end
|
||||
|
||||
function Pets:GetOptions()
|
||||
return {
|
||||
headerHealthbar = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Health Bar"],
|
||||
name = L["Pets"],
|
||||
order = 2,
|
||||
},
|
||||
petEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
desc = L["Enabled Pets module"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Enables Pets module"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 3,
|
||||
args = {
|
||||
general = {
|
||||
@ -367,6 +368,7 @@ function Pets:GetOptions()
|
||||
min = 10,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
petWidth = option({
|
||||
type = "range",
|
||||
@ -374,8 +376,9 @@ function Pets:GetOptions()
|
||||
desc = L["Width of the bar"],
|
||||
order = 4,
|
||||
min = 10,
|
||||
max = 100,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
petHealthBarTexture = option({
|
||||
type = "select",
|
||||
@ -457,6 +460,7 @@ function Pets:GetOptions()
|
||||
order = 13,
|
||||
min = 0,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -485,6 +489,7 @@ function Pets:GetOptions()
|
||||
min = 0.5,
|
||||
max = Gladdy.db.petHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
petHealthBarBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@ -512,6 +517,7 @@ function Pets:GetOptions()
|
||||
min = -600,
|
||||
max = 600,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
petYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -520,6 +526,7 @@ function Pets:GetOptions()
|
||||
min = -600,
|
||||
max = 600,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
},
|
||||
|
@ -6,7 +6,8 @@ local CreateFrame, UnitPower, UnitPowerType, UnitPowerMax, UnitExists = CreateFr
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local AceGUIWidgetLSMlists = AceGUIWidgetLSMlists
|
||||
local Powerbar = Gladdy:NewModule("Powerbar", 90, {
|
||||
local Powerbar = Gladdy:NewModule("Power Bar", 90, {
|
||||
powerBarEnabled = true,
|
||||
powerBarFont = "DorisPP",
|
||||
powerBarHeight = 20,
|
||||
powerBarTexture = "Smooth",
|
||||
@ -37,24 +38,24 @@ function Powerbar:CreateFrame(unit)
|
||||
|
||||
local powerBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
|
||||
powerBar:EnableMouse(false)
|
||||
powerBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.powerBarBorderStyle),
|
||||
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:SetFrameLevel(1)
|
||||
|
||||
powerBar.energy = CreateFrame("StatusBar", nil, powerBar)
|
||||
powerBar.energy:SetStatusBarTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.powerBarTexture))
|
||||
powerBar.energy:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.energy:SetMinMaxValues(0, 100)
|
||||
powerBar.energy:SetFrameLevel(0)
|
||||
|
||||
powerBar.bg = powerBar.energy:CreateTexture(nil, "BACKGROUND")
|
||||
powerBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.powerBarTexture))
|
||||
powerBar.bg:SetTexture(Gladdy:SMFetch("statusbar", "powerBarTexture"))
|
||||
powerBar.bg:ClearAllPoints()
|
||||
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.raceText = powerBar:CreateFontString(nil, "LOW")
|
||||
powerBar.raceText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.powerBarFont), Gladdy.db.powerBarFontSize)
|
||||
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.raceText:SetShadowOffset(1, -1)
|
||||
powerBar.raceText:SetShadowColor(0, 0, 0, 1)
|
||||
@ -62,7 +63,7 @@ function Powerbar:CreateFrame(unit)
|
||||
powerBar.raceText:SetPoint("LEFT", 5, 1)
|
||||
|
||||
powerBar.powerText = powerBar:CreateFontString(nil, "LOW")
|
||||
powerBar.powerText:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.powerBarFont), Gladdy.db.powerBarFontSize)
|
||||
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)
|
||||
powerBar.powerText:SetShadowOffset(1, -1)
|
||||
powerBar.powerText:SetShadowColor(0, 0, 0, 1)
|
||||
@ -113,17 +114,24 @@ function Powerbar:SetPower(powerBar, power, powerMax, powerType)
|
||||
end
|
||||
end
|
||||
|
||||
if (powerType == 1) then
|
||||
if (powerType == 1 and powerBar.powerType ~= powerType) then
|
||||
powerBar.energy:SetStatusBarColor(1, 0, 0, 1)
|
||||
elseif (powerType == 3) then
|
||||
powerBar.powerColor = {r = 1, g = 0, b = 0}
|
||||
powerBar.powerType = powerType
|
||||
elseif (powerType == 3 and powerBar.powerType ~= powerType) then
|
||||
powerBar.energy:SetStatusBarColor(1, 1, 0, 1)
|
||||
else
|
||||
powerBar.powerColor = {r = 1, g = 1, b = 0}
|
||||
powerBar.powerType = powerType
|
||||
elseif powerBar.powerType ~= powerType then
|
||||
powerBar.energy:SetStatusBarColor(.18, .44, .75, 1)
|
||||
powerBar.powerColor = {r = .18, g = .44, b = .75}
|
||||
powerBar.powerType = powerType
|
||||
end
|
||||
|
||||
powerBar.powerText:SetText(powerText)
|
||||
powerBar.energy:SetMinMaxValues(0, powerMax)
|
||||
powerBar.energy:SetValue(power)
|
||||
|
||||
end
|
||||
|
||||
function Powerbar:UpdateFrame(unit)
|
||||
@ -132,10 +140,16 @@ function Powerbar:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local healthBar = Gladdy.modules.Healthbar.frames[unit]
|
||||
local healthBar = Gladdy.modules["Health Bar"].frames[unit]
|
||||
|
||||
|
||||
powerBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.powerBarTexture))
|
||||
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())
|
||||
@ -144,18 +158,18 @@ function Powerbar:UpdateFrame(unit)
|
||||
powerBar:ClearAllPoints()
|
||||
powerBar:SetPoint("TOPLEFT", healthBar, "BOTTOMLEFT", 0, -1)
|
||||
|
||||
powerBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.powerBarBorderStyle),
|
||||
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.LSM:Fetch("statusbar", Gladdy.db.powerBarTexture))
|
||||
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.LSM:Fetch("font", Gladdy.db.powerBarFont), Gladdy.db.powerBarFontSize)
|
||||
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.LSM:Fetch("font", Gladdy.db.powerBarFont), Gladdy.db.powerBarFontSize)
|
||||
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
|
||||
|
||||
@ -169,6 +183,8 @@ function Powerbar:ResetUnit(unit)
|
||||
powerBar.raceText:SetText("")
|
||||
powerBar.powerText:SetText("")
|
||||
powerBar.energy:SetValue(0)
|
||||
powerBar.powerType = ""
|
||||
powerBar.powerColor = {r = 1, g = 1, b = 1}
|
||||
end
|
||||
|
||||
function Powerbar:Test(unit)
|
||||
@ -252,10 +268,13 @@ function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
|
||||
|
||||
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)
|
||||
@ -290,7 +309,7 @@ local function option(params)
|
||||
set = function(info, value)
|
||||
local key = info.arg or info[#info]
|
||||
Gladdy.dbi.profile[key] = value
|
||||
Gladdy.options.args.Powerbar.args.group.args.border.args.powerBarBorderSize.max = Gladdy.db.powerBarHeight/2
|
||||
Gladdy.options.args["Power Bar"].args.group.args.border.args.powerBarBorderSize.max = Gladdy.db.powerBarHeight/2
|
||||
if Gladdy.db.powerBarBorderSize > Gladdy.db.powerBarHeight/2 then
|
||||
Gladdy.db.powerBarBorderSize = Gladdy.db.powerBarHeight/2
|
||||
end
|
||||
@ -315,11 +334,16 @@ function Powerbar:GetOptions()
|
||||
name = L["Power Bar"],
|
||||
order = 2,
|
||||
},
|
||||
powerBarEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
order = 3,
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
@ -339,6 +363,7 @@ function Powerbar:GetOptions()
|
||||
min = 0,
|
||||
max = 50,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
powerBarTexture = option({
|
||||
type = "select",
|
||||
@ -390,6 +415,7 @@ function Powerbar:GetOptions()
|
||||
step = 0.1,
|
||||
min = 1,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -418,6 +444,7 @@ function Powerbar:GetOptions()
|
||||
min = 0.5,
|
||||
max = Gladdy.db.powerBarHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
powerBarBorderColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
|
@ -1,10 +1,8 @@
|
||||
local ceil, floor, string_format, tonumber = ceil, floor, string.format, tonumber
|
||||
local ceil = ceil
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
|
||||
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local Racial = Gladdy:NewModule("Racial", nil, {
|
||||
@ -45,33 +43,22 @@ local function iconTimer(self,elapsed)
|
||||
local timeLeft = ceil(self.timeLeft)
|
||||
|
||||
if timeLeft >= 60 then
|
||||
-- more than 1 minute
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
self.cooldownFont:SetText(floor(timeLeft / 60) .. ":" .. string_format("%02.f", floor(timeLeft - floor(timeLeft / 60) * 60)))
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), (self:GetWidth()/2 - 0.15* self:GetWidth()) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 60 and timeLeft >= 21 then
|
||||
-- between 60s and 21s (green)
|
||||
self.cooldownFont:SetTextColor(0.7, 1, 0)
|
||||
self.cooldownFont:SetText(timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 20.9 and timeLeft >= 11 then
|
||||
-- between 20s and 11s (green)
|
||||
self.cooldownFont:SetTextColor(0, 1, 0)
|
||||
self.cooldownFont:SetText(timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft <= 10 and timeLeft >= 5 then
|
||||
-- between 10s and 5s (orange)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), (self:GetWidth()/2 - 0.15* self:GetWidth()) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 60 and timeLeft >= 30 then
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 30 and timeLeft >= 11 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
self.cooldownFont:SetFormattedText("%.1f", timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 10 and timeLeft >= 5 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
elseif timeLeft < 5 and timeLeft > 0 then
|
||||
-- between 5s and 1s (red)
|
||||
self.cooldownFont:SetTextColor(1, 0, 0)
|
||||
self.cooldownFont:SetFormattedText("%.1f", timeLeft >= 0.0 and timeLeft or 0.0)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
else
|
||||
self.cooldownFont:SetText("")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), (self:GetWidth()/2 - 1) * Gladdy.db.racialFontScale, "OUTLINE")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -93,7 +80,7 @@ function Racial:CreateFrame(unit)
|
||||
racial.cooldownFrame:SetPoint("BOTTOMRIGHT", racial, "BOTTOMRIGHT")
|
||||
|
||||
racial.cooldownFont = racial.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
racial.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.racialFont), 20, "OUTLINE")
|
||||
racial.cooldownFont:SetFont(Gladdy:SMFetch("font", "racialFont"), 20, "OUTLINE")
|
||||
--trinket.cooldownFont:SetAllPoints(trinket.cooldown)
|
||||
racial.cooldownFont:SetJustifyH("CENTER")
|
||||
racial.cooldownFont:SetPoint("CENTER")
|
||||
@ -134,7 +121,6 @@ function Racial:UpdateFrame(unit)
|
||||
racial.texture.overlay:SetVertexColor(Gladdy.db.racialBorderColor.r, Gladdy.db.racialBorderColor.g, Gladdy.db.racialBorderColor.b, Gladdy.db.racialBorderColor.a)
|
||||
|
||||
racial:ClearAllPoints()
|
||||
local margin = Gladdy.db.highlightBorderSize + Gladdy.db.padding
|
||||
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)
|
||||
@ -185,7 +171,7 @@ end
|
||||
|
||||
function Racial:ENEMY_SPOTTED(unit)
|
||||
local racial = self.frames[unit]
|
||||
if (not racial) then
|
||||
if (not racial or not Gladdy.buttons[unit].race) then
|
||||
return
|
||||
end
|
||||
racial.texture:SetTexture(Gladdy:Racials()[Gladdy.buttons[unit].race].texture)
|
||||
@ -226,7 +212,7 @@ function Racial:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
general = {
|
||||
@ -237,7 +223,7 @@ function Racial:GetOptions()
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 4,
|
||||
order = 1,
|
||||
},
|
||||
racialSize = Gladdy:option({
|
||||
type = "range",
|
||||
@ -245,7 +231,8 @@ function Racial:GetOptions()
|
||||
min = 5,
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 4,
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
racialWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -253,7 +240,8 @@ function Racial:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 6,
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -271,6 +259,7 @@ function Racial:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 7,
|
||||
width = "full",
|
||||
}),
|
||||
racialCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -279,6 +268,7 @@ function Racial:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -308,6 +298,7 @@ function Racial:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -318,7 +309,7 @@ function Racial:GetOptions()
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Position"],
|
||||
name = L["Icon position"],
|
||||
order = 4,
|
||||
},
|
||||
racialAnchor = Gladdy:option({
|
||||
@ -335,7 +326,7 @@ function Racial:GetOptions()
|
||||
}),
|
||||
racialPos = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Position"],
|
||||
name = L["Icon position"],
|
||||
desc = L["This changes position relative to its anchor of the racial icon"],
|
||||
order = 21,
|
||||
values = {
|
||||
@ -352,6 +343,7 @@ function Racial:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
racialYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -360,6 +352,7 @@ function Racial:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
421
Modules/RangeCheck.lua
Normal file
421
Modules/RangeCheck.lua
Normal file
@ -0,0 +1,421 @@
|
||||
local UnitIsConnected = UnitIsConnected
|
||||
local UnitInPhase = UnitInPhase
|
||||
local UnitInRaid = UnitInRaid
|
||||
local UnitInParty = UnitInParty
|
||||
local UnitInRange = UnitInRange
|
||||
local CheckInteractDistance = CheckInteractDistance
|
||||
local C_Timer = C_Timer
|
||||
local UnitIsUnit = UnitIsUnit
|
||||
local UnitClass = UnitClass
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
||||
local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
|
||||
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
||||
local select, ipairs, type, tonumber, tostring, format = select, ipairs, type, tonumber, tostring, format
|
||||
|
||||
local LibStub = LibStub
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local LSR = LibStub("SpellRange-1.0")
|
||||
local L = Gladdy.L
|
||||
|
||||
local classSpells = {
|
||||
["MAGE"] = 118,
|
||||
["PRIEST"] = 32379,
|
||||
["DRUID"] = 33786,
|
||||
["SHAMAN"] = 10414,
|
||||
["PALADIN"] = 10308,
|
||||
["WARLOCK"] = 5782,
|
||||
["WARRIOR"] = 25275,
|
||||
["HUNTER"] = 27018,
|
||||
["ROGUE"] = 36554,
|
||||
}
|
||||
|
||||
local function defaultSpells()
|
||||
local defaults = {}
|
||||
for _,class in ipairs(Gladdy.CLASSES) do
|
||||
defaults[class] = { min = classSpells[class] }
|
||||
end
|
||||
return defaults
|
||||
end
|
||||
|
||||
local RangeCheck = Gladdy:NewModule("Range Check", nil, {
|
||||
rangeCheckEnabled = true,
|
||||
rangeCheckDefaultSpells = defaultSpells(),
|
||||
rangeCheckOorFactor = 1.5,
|
||||
rangeCheckHealthBar = true,
|
||||
rangeCheckHealthBarText = true,
|
||||
rangeCheckPowerBar = true,
|
||||
rangeCheckPowerBarText = true,
|
||||
rangeCheckClassIcon = false,
|
||||
rangeCheckTrinket = false,
|
||||
rangeCheckRacial = false,
|
||||
})
|
||||
|
||||
function RangeCheck:Initialize()
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_STEALTH")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self.playerClass = select(2, UnitClass("player"))
|
||||
end
|
||||
|
||||
function RangeCheck:Reset()
|
||||
self.test = nil
|
||||
end
|
||||
|
||||
function RangeCheck:ResetUnit(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
self:CancelTimer(button)
|
||||
self:SetColor(button, 1)
|
||||
button.classColors = {}
|
||||
end
|
||||
|
||||
function RangeCheck:Test(unit)
|
||||
local button = Gladdy.buttons[unit]
|
||||
if not button then
|
||||
return
|
||||
end
|
||||
self:ENEMY_SPOTTED(unit)
|
||||
self.test = true
|
||||
button.lastState = 0
|
||||
if Gladdy.db.rangeCheckEnabled then
|
||||
if unit == "arena1" then
|
||||
--button.unit = "target"
|
||||
--self:CreateTimer(button)
|
||||
self:SetRangeAlpha(button, nil)
|
||||
else
|
||||
self:SetRangeAlpha(button, true)
|
||||
end
|
||||
else
|
||||
self:SetRangeAlpha(button, true)
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:UpdateFrame(unit)
|
||||
if self.test then
|
||||
self:Test(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:SetColor(button, oorFac)
|
||||
if button.lastState == oorFac then
|
||||
return
|
||||
end
|
||||
|
||||
if not button.classColors.r then
|
||||
if button.class then
|
||||
button.classColors = { r = RAID_CLASS_COLORS[button.class].r, g = RAID_CLASS_COLORS[button.class].g, b = RAID_CLASS_COLORS[button.class].b }
|
||||
else
|
||||
button.classColors = { r = 0.66, g = 0.66, b = 0.66 }
|
||||
end
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckHealthBar then
|
||||
button.healthBar.hp:SetStatusBarColor(button.classColors.r/oorFac, button.classColors.g/oorFac, button.classColors.b/oorFac, 1)
|
||||
else
|
||||
button.healthBar.hp:SetStatusBarColor(button.classColors.r, button.classColors.g, button.classColors.b, 1)
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckHealthBarText then
|
||||
button.healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r/oorFac, Gladdy.db.healthBarFontColor.g/oorFac, Gladdy.db.healthBarFontColor.b/oorFac, Gladdy.db.healthBarFontColor.a)
|
||||
button.healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r/oorFac, Gladdy.db.healthBarFontColor.g/oorFac, Gladdy.db.healthBarFontColor.b/oorFac, Gladdy.db.healthBarFontColor.a)
|
||||
else
|
||||
button.healthBar.nameText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
||||
button.healthBar.healthText:SetTextColor(Gladdy.db.healthBarFontColor.r, Gladdy.db.healthBarFontColor.g, Gladdy.db.healthBarFontColor.b, Gladdy.db.healthBarFontColor.a)
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckPowerBar then
|
||||
button.powerBar.energy:SetStatusBarColor(button.powerBar.powerColor.r/oorFac, button.powerBar.powerColor.g/oorFac, button.powerBar.powerColor.b/oorFac, 1)
|
||||
else
|
||||
button.powerBar.energy:SetStatusBarColor(button.powerBar.powerColor.r, button.powerBar.powerColor.g, button.powerBar.powerColor.b, 1)
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckPowerBarText then
|
||||
button.powerBar.raceText:SetTextColor(Gladdy.db.powerBarFontColor.r/oorFac, Gladdy.db.powerBarFontColor.g/oorFac, Gladdy.db.powerBarFontColor.b/oorFac, Gladdy.db.powerBarFontColor.a)
|
||||
button.powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r/oorFac, Gladdy.db.powerBarFontColor.g/oorFac, Gladdy.db.powerBarFontColor.b/oorFac, Gladdy.db.powerBarFontColor.a)
|
||||
else
|
||||
button.powerBar.raceText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
||||
button.powerBar.powerText:SetTextColor(Gladdy.db.powerBarFontColor.r, Gladdy.db.powerBarFontColor.g, Gladdy.db.powerBarFontColor.b, Gladdy.db.powerBarFontColor.a)
|
||||
end
|
||||
|
||||
if Gladdy.db.rangeCheckTrinket then
|
||||
button.trinket.texture:SetVertexColor(1/oorFac, 1/oorFac, 1/oorFac)
|
||||
else
|
||||
button.trinket.texture:SetVertexColor(1, 1, 1)
|
||||
end
|
||||
if Gladdy.db.rangeCheckClassIcon then
|
||||
button.classIcon.texture:SetVertexColor(1/oorFac, 1/oorFac, 1/oorFac)
|
||||
button.aura.icon:SetVertexColor(1/oorFac, 1/oorFac, 1/oorFac)
|
||||
else
|
||||
button.classIcon.texture:SetVertexColor(1, 1, 1)
|
||||
button.aura.icon:SetVertexColor(1, 1, 1)
|
||||
end
|
||||
if Gladdy.db.rangeCheckRacial then
|
||||
button.racial.texture:SetVertexColor(1/oorFac, 1/oorFac, 1/oorFac)
|
||||
else
|
||||
button.racial.texture:SetVertexColor(1, 1, 1)
|
||||
end
|
||||
button.lastState = oorFac
|
||||
end
|
||||
|
||||
function RangeCheck:SetRangeAlpha(button, inRange)
|
||||
local oorFac = Gladdy.db.rangeCheckOorFactor
|
||||
if inRange then
|
||||
RangeCheck:SetColor(button, 1)
|
||||
else
|
||||
RangeCheck:SetColor(button, oorFac)
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:JOINED_ARENA()
|
||||
self.test = nil
|
||||
if Gladdy.db.rangeCheckEnabled then
|
||||
for i = 1, Gladdy.curBracket do
|
||||
local button = Gladdy.buttons["arena"..i]
|
||||
--if i == 1 then button.unit = "focus" end
|
||||
self:CreateTimer(button)
|
||||
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)
|
||||
local button = self.parent
|
||||
|
||||
local spell = Gladdy.db.rangeCheckDefaultSpells[RangeCheck.playerClass].min
|
||||
|
||||
if (not UnitIsConnected(button.unit) or not UnitInPhase(button.unit)) then
|
||||
RangeCheck:SetRangeAlpha(button, false)
|
||||
elseif (spell) then
|
||||
RangeCheck:SetRangeAlpha(button, LSR.IsSpellInRange(spell, button.unit) == 1)
|
||||
-- That didn't work, but they are grouped lets try the actual API for this, it's a bit flaky though and not that useful generally
|
||||
elseif (UnitInRaid(button.unit) or UnitInParty(button.unit)) then
|
||||
RangeCheck:SetRangeAlpha(button, UnitInRange(button.unit, "player"))
|
||||
-- Nope, fall back to interaction :(
|
||||
else
|
||||
RangeCheck:SetRangeAlpha(button, CheckInteractDistance(button.unit, 4))
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:CreateTimer(frame)
|
||||
if not frame.range then
|
||||
frame.range = C_Timer.NewTicker(0.05, RangeCheck.CheckRange)
|
||||
frame.range.parent = frame
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:CancelTimer(frame)
|
||||
if frame.range then
|
||||
frame.range:Cancel()
|
||||
frame.range = nil
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:ForceUpdate(frame)
|
||||
if( UnitIsUnit(frame.unit, "player") ) then
|
||||
frame.healthBar:SetAlpha(1)
|
||||
frame.powerBar:SetAlpha(1)
|
||||
self:CancelTimer(frame)
|
||||
else
|
||||
self:CreateTimer(frame)
|
||||
self.CheckRange(frame.parent)
|
||||
end
|
||||
end
|
||||
|
||||
function RangeCheck:GetOptions()
|
||||
return {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Range Check"],
|
||||
order = 2,
|
||||
},
|
||||
|
||||
rangeCheckEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
desc = L["Enable racial icon"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["General"],
|
||||
order = 5,
|
||||
args = {
|
||||
general = {
|
||||
type = "group",
|
||||
name = L["General"],
|
||||
order = 1,
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["General"],
|
||||
order = 1,
|
||||
},
|
||||
rangeCheckOorFactor = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Out of Range Darkening Level"],
|
||||
desc = L["Higher is darker"],
|
||||
min = 1.1,
|
||||
max = 5,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
order = 2,
|
||||
}),
|
||||
rangeCheckHealthBar = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Health Bar"],
|
||||
width = "full",
|
||||
order = 3,
|
||||
}),
|
||||
rangeCheckHealthBarText = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Health Bar Text"],
|
||||
width = "full",
|
||||
order = 4,
|
||||
}),
|
||||
rangeCheckPowerBar = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Power Bar"],
|
||||
width = "full",
|
||||
order = 5,
|
||||
}),
|
||||
rangeCheckPowerBarText = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Power Bar Text"],
|
||||
width = "full",
|
||||
order = 6,
|
||||
}),
|
||||
rangeCheckClassIcon = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Class Icon"],
|
||||
width = "full",
|
||||
order = 7,
|
||||
}),
|
||||
rangeCheckTrinket = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Trinket"],
|
||||
width = "full",
|
||||
order = 8,
|
||||
}),
|
||||
rangeCheckRacial = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Fade"] .. " " .. L["Racial"],
|
||||
width = "full",
|
||||
order = 9,
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
oorSpells = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = L["Spells"],
|
||||
order = 5,
|
||||
args = RangeCheck:GetSpells(),
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function RangeCheck:GetSpells()
|
||||
local group = {
|
||||
description = {
|
||||
type = "description",
|
||||
name = 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."],
|
||||
order = 1,
|
||||
},
|
||||
}
|
||||
for i,class in ipairs(Gladdy.CLASSES) do
|
||||
group[class] = {
|
||||
type = "group",
|
||||
name = LOCALIZED_CLASS_NAMES_MALE[class],
|
||||
order = i + 1,
|
||||
icon = "Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes",
|
||||
iconCoords = CLASS_ICON_TCOORDS[class],
|
||||
args = {
|
||||
headerMin = {
|
||||
type = "header",
|
||||
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",
|
||||
order = 1,
|
||||
},
|
||||
min = {
|
||||
type = "input",
|
||||
name = "Spell ID", --format("|T%s:20|t %s", select(3, GetSpellInfo(k)), select(1, GetSpellInfo(k)))
|
||||
order = 2,
|
||||
width = "full",
|
||||
pattern = "%d+",
|
||||
validate = function(_, value)
|
||||
LibStub("AceConfigRegistry-3.0"):NotifyChange("Gladdy")
|
||||
return type(tonumber(value)) == "number"
|
||||
end,
|
||||
--image = select(3, GetSpellInfo(defaultSpells()[class].min)),
|
||||
get = function(_)
|
||||
return tostring(Gladdy.db.rangeCheckDefaultSpells[class].min)
|
||||
end,
|
||||
set = function(_, 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)))
|
||||
or "nil"
|
||||
end
|
||||
},
|
||||
--[[headerMax = {
|
||||
type = "header",
|
||||
name = L["Max"],
|
||||
order = 3,
|
||||
},
|
||||
max = {
|
||||
type = "input",
|
||||
name = GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max) and format("|T%s:20|t %s", select(3, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max)), select(1, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max)))
|
||||
or "nil",
|
||||
order = 4,
|
||||
width = "full",
|
||||
pattern = "%d+",
|
||||
validate = function(_, value)
|
||||
return type(tonumber(value)) == "number"
|
||||
end,
|
||||
--image = select(3, GetSpellInfo(defaultSpells()[class].max)),
|
||||
get = function(_)
|
||||
return tostring(Gladdy.db.rangeCheckDefaultSpells[class].max)
|
||||
end,
|
||||
set = function(_, value)
|
||||
Gladdy.db.rangeCheckDefaultSpells[class].max = tonumber(value)
|
||||
Gladdy.options.args["Range Check"].args.oorSpells.args[class].args.max.name = GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max) and format("|T%s:20|t %s", select(3, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max)), select(1, GetSpellInfo(Gladdy.db.rangeCheckDefaultSpells[class].max)))
|
||||
or "nil"
|
||||
end
|
||||
}--]]
|
||||
}
|
||||
}
|
||||
end
|
||||
return group
|
||||
end
|
187
Modules/ShadowsightTimer.lua
Normal file
187
Modules/ShadowsightTimer.lua
Normal file
@ -0,0 +1,187 @@
|
||||
local floor, str_find, pairs = math.floor, string.find, pairs
|
||||
local CreateFrame = CreateFrame
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local ShadowsightTimer = Gladdy:NewModule("Shadowsight Timer", nil, {
|
||||
shadowsightTimerEnabled = true,
|
||||
shadowsightTimerLocked = false,
|
||||
shadowsightTimerScale = 1,
|
||||
shadowsightTimerRelPoint1 = "CENTER",
|
||||
shadowsightTimerRelPoint2 = "CENTER",
|
||||
shadowsightTimerX = 0,
|
||||
shadowsightTimerY = 0,
|
||||
shadowsightAnnounce = true,
|
||||
})
|
||||
|
||||
function ShadowsightTimer:OnEvent(event, ...)
|
||||
self[event](self, ...)
|
||||
end
|
||||
|
||||
function ShadowsightTimer:Initialize()
|
||||
self.locale = Gladdy:GetArenaTimer()
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("AURA_GAIN")
|
||||
self:CreateTimerFrame()
|
||||
end
|
||||
|
||||
function ShadowsightTimer:JOINED_ARENA()
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ShadowsightTimer.OnEvent)
|
||||
self.timerFrame.font:SetText("1:30")
|
||||
self.timerFrame.font:SetTextColor(1, 0.8, 0)
|
||||
self.timerFrame:Show()
|
||||
end
|
||||
|
||||
function ShadowsightTimer:AURA_GAIN(unit, auraType, spellID)
|
||||
if (spellID == 34709) then
|
||||
--TODO reset timer after 15s
|
||||
end
|
||||
end
|
||||
|
||||
function ShadowsightTimer:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)
|
||||
for k,v in pairs(self.locale) do
|
||||
if str_find(msg, v) then
|
||||
if k == 0 then
|
||||
self:Start()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ShadowsightTimer:Test()
|
||||
if Gladdy.db.shadowsightTimerEnabled then
|
||||
self.timerFrame:Show()
|
||||
self:Start()
|
||||
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()
|
||||
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)
|
||||
self.timerFrame:SetBackdropColor(0,0,0,0.8)
|
||||
self.timerFrame:SetHeight(17)
|
||||
self.timerFrame:SetWidth(35)
|
||||
|
||||
self.timerFrame:SetMovable(true)
|
||||
self.timerFrame:EnableMouse(true)
|
||||
|
||||
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
|
||||
|
||||
function ShadowsightTimer.OnUpdate(self, elapsed)
|
||||
self.timeSinceLastUpdate = self.timeSinceLastUpdate + elapsed;
|
||||
self.endTime = self.endTime - elapsed
|
||||
|
||||
if (self.timeSinceLastUpdate > 0.1) then
|
||||
self.font:SetFormattedText(floor(self.endTime / 60) .. ":" .. "%02d", self.endTime - floor(self.endTime / 60) * 60)
|
||||
self.timeSinceLastUpdate = 0;
|
||||
if floor(self.endTime) == 15 and Gladdy.db.shadowsightAnnounce then
|
||||
Gladdy:SendMessage("SHADOWSIGHT", L["Shadowsight up in %ds"]:format(15))
|
||||
end
|
||||
end
|
||||
if self.endTime <= 0 then
|
||||
if Gladdy.db.shadowsightAnnounce then
|
||||
Gladdy:SendMessage("SHADOWSIGHT", L["Shadowsight up!"])
|
||||
end
|
||||
self:SetScript("OnUpdate", nil)
|
||||
self.font:SetText("0:00")
|
||||
self.font:SetTextColor(0, 1, 0)
|
||||
end
|
||||
end
|
||||
|
||||
function ShadowsightTimer:GetOptions()
|
||||
return {
|
||||
headerArenaCountdown = {
|
||||
type = "header",
|
||||
name = L["Shadowsight Timer"],
|
||||
order = 2,
|
||||
},
|
||||
shadowsightTimerEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enabled"],
|
||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
shadowsightTimerLocked = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Locked"],
|
||||
--desc = L["Turns countdown before the start of an arena match on/off."],
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
shadowsightAnnounce = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Announce"],
|
||||
--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,
|
||||
min = 0.1,
|
||||
max = 5,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
end
|
@ -3,7 +3,7 @@ local UnitExists, UnitIsUnit, UnitName, UnitIsEnemy = UnitExists, UnitIsUnit, Un
|
||||
local C_NamePlate = C_NamePlate
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
local GetSpellInfo, CreateFrame, GetCVar = GetSpellInfo, CreateFrame, GetCVar
|
||||
local GetSpellInfo, CreateFrame = GetSpellInfo, CreateFrame
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
@ -77,6 +77,13 @@ local localizedTotemData = {
|
||||
[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()
|
||||
@ -90,7 +97,7 @@ local function GetTotemColorDefaultOptions()
|
||||
return a.name < b.name
|
||||
end)
|
||||
for i=1,#indexedList do
|
||||
defaultDB["totem" .. indexedList[i].id] = {color = indexedList[i].color, enabled = indexedList[i].enabled, alpha = 0.6}
|
||||
defaultDB["totem" .. indexedList[i].id] = {color = indexedList[i].color, enabled = indexedList[i].enabled, alpha = 0.6, customText = ""}
|
||||
options["totem" .. indexedList[i].id] = {
|
||||
order = i+1,
|
||||
name = select(1, GetSpellInfo(indexedList[i].id)),
|
||||
@ -106,12 +113,12 @@ local function GetTotemColorDefaultOptions()
|
||||
},
|
||||
enabled = {
|
||||
order = 2,
|
||||
name = "Enabled",
|
||||
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(info) return Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].enabled end,
|
||||
set = function(info, value)
|
||||
get = function() return Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].enabled end,
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].enabled = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
@ -123,15 +130,13 @@ local function GetTotemColorDefaultOptions()
|
||||
order = 3,
|
||||
hasAlpha = true,
|
||||
width = "full",
|
||||
get = function(info)
|
||||
local key = info.arg or info[#info]
|
||||
get = function()
|
||||
return Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.r,
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.g,
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.b,
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.a
|
||||
end,
|
||||
set = function(info, r, g, b, a)
|
||||
local key = info.arg or info[#info]
|
||||
set = function(_, r, g, b, a)
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.r,
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.g,
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].color.b,
|
||||
@ -147,10 +152,10 @@ local function GetTotemColorDefaultOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
get = function(info)
|
||||
get = function()
|
||||
return Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].alpha
|
||||
end,
|
||||
set = function(info, value)
|
||||
set = function(_, value)
|
||||
Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].alpha = value
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
@ -160,8 +165,8 @@ local function GetTotemColorDefaultOptions()
|
||||
name = L["Custom totem name"],
|
||||
order = 5,
|
||||
width = "full",
|
||||
get = function(info) return Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].customText end,
|
||||
set = function(info, value) Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id].customText = value Gladdy:UpdateFrame() end
|
||||
get = function() return Gladdy.db.npTotemColors["totem" .. indexedList[i].id].customText end,
|
||||
set = function(_, value) Gladdy.db.npTotemColors["totem" .. indexedList[i].id].customText = value Gladdy:UpdateFrame() end
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -169,15 +174,6 @@ local function GetTotemColorDefaultOptions()
|
||||
return defaultDB, options, indexedList
|
||||
end
|
||||
|
||||
local function GetTotemOptions()
|
||||
local indexedList = select(3, GetTotemColorDefaultOptions())
|
||||
local colorList = {}
|
||||
for i=1, #indexedList do
|
||||
tinsert(colorList, Gladdy.dbi.profile.npTotemColors["totem" .. indexedList[i].id])
|
||||
end
|
||||
return colorList
|
||||
end
|
||||
|
||||
function Gladdy:GetTotemColors()
|
||||
return GetTotemColorDefaultOptions()
|
||||
end
|
||||
@ -188,7 +184,7 @@ end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
local TotemPlates = Gladdy:NewModule("TotemPlates", nil, {
|
||||
local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
|
||||
npTotems = true,
|
||||
npTotemsShowFriendly = true,
|
||||
npTotemsShowEnemy = true,
|
||||
@ -220,7 +216,36 @@ function TotemPlates:Initialize()
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
||||
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
||||
self:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
self:RegisterEvent("UNIT_NAME_UPDATE")
|
||||
self:SetScript("OnEvent", TotemPlates.OnEvent)
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy then
|
||||
--GetCVar("nameplateShowEnemyTotems")
|
||||
--SetCVar("nameplateShowEnemyTotems", true);
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly then
|
||||
--GetCVar("nameplateShowFriendlyTotems")
|
||||
--SetCVar("nameplateShowFriendlyTotems", true);
|
||||
end
|
||||
self.addon = "Blizzard"
|
||||
if (IsAddOnLoaded("Plater")) then
|
||||
self.addon = "Plater"
|
||||
elseif (IsAddOnLoaded("Kui_Nameplates")) then
|
||||
self.addon = "Kui_Nameplates"
|
||||
elseif (IsAddOnLoaded("NeatPlates")) then
|
||||
self.addon = "NeatPlates"
|
||||
elseif (IsAddOnLoaded("TidyPlates_ThreatPlates")) then
|
||||
self.addon = "TidyPlates_ThreatPlates"
|
||||
elseif (IsAddOnLoaded("Tukui")) then
|
||||
local _, C, _ = Tukui:unpack()
|
||||
if C.NamePlates.Enable then
|
||||
self.addon = "Tukui"
|
||||
end
|
||||
elseif (IsAddOnLoaded("ElvUI")) then
|
||||
local E = unpack(ElvUI)
|
||||
if E.private.nameplates.enable then
|
||||
self.addon = "ElvUI"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:PLAYER_ENTERING_WORLD()
|
||||
@ -244,55 +269,50 @@ function TotemPlates:UpdateFrameOnce()
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.b,
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.a)
|
||||
nameplate.gladdyTotemFrame.totemName:SetPoint("TOP", nameplate.gladdyTotemFrame, "BOTTOM", Gladdy.db.npTremorFontXOffset, Gladdy.db.npTremorFontYOffset)
|
||||
nameplate.gladdyTotemFrame.totemName:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.npTremorFont), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
nameplate.gladdyTotemFrame.totemName:SetFont(Gladdy:SMFetch("font", "npTremorFont"), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
nameplate.gladdyTotemFrame.totemName:SetText(Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].customText or "")
|
||||
self:SetTotemAlpha(nameplate.gladdyTotemFrame, k)
|
||||
nameplate.UnitFrame.selectionHighlight:SetPoint("TOPLEFT", nameplate.gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
||||
nameplate.UnitFrame.selectionHighlight:SetPoint("BOTTOMRIGHT", nameplate.gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
||||
|
||||
if not Gladdy.db.npTotems then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate, true)
|
||||
else
|
||||
nameplate.gladdyTotemFrame:Show()
|
||||
self:ToggleAddon(nameplate)
|
||||
end
|
||||
for i,gladdyTotemFrame in ipairs(self.totemPlateCache) do
|
||||
local isEnemy = UnitIsEnemy("player", nameplate.gladdyTotemFrame.unitID)
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowEnemy and isEnemy then
|
||||
nameplate.gladdyTotemFrame:Show()
|
||||
self:ToggleAddon(nameplate)
|
||||
elseif Gladdy.db.npTotems and not Gladdy.db.npTotemsShowEnemy and isEnemy then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
if Gladdy.db.npTotems and Gladdy.db.npTotemsShowFriendly and not isEnemy then
|
||||
nameplate.gladdyTotemFrame:Show()
|
||||
self:ToggleAddon(nameplate)
|
||||
elseif not Gladdy.db.npTotemsShowFriendly and not isEnemy then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
end
|
||||
for _,gladdyTotemFrame in ipairs(self.totemPlateCache) do
|
||||
gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||
gladdyTotemFrame:SetHeight(Gladdy.db.npTotemPlatesSize)
|
||||
gladdyTotemFrame.totemBorder:SetTexture(Gladdy.db.npTotemPlatesBorderStyle)
|
||||
gladdyTotemFrame.totemName:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.npTremorFont), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
gladdyTotemFrame.totemName:SetFont(Gladdy:SMFetch("font", "npTremorFont"), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
gladdyTotemFrame.totemName:SetPoint("TOP", gladdyTotemFrame, "BOTTOM", Gladdy.db.npTremorFontXOffset, Gladdy.db.npTremorFontYOffset)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Nameplate functions
|
||||
-- TotemPlates Frame
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPlates:PLAYER_TARGET_CHANGED()
|
||||
for k,nameplate in pairs(self.activeTotemNameplates) do
|
||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, k)
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
local unitID = ...
|
||||
local isEnemy = UnitIsEnemy("player", unitID)
|
||||
if not Gladdy.db.npTotemsShowEnemy and isEnemy then
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.npTotemsShowFriendly and not isEnemy then
|
||||
return
|
||||
end
|
||||
local nameplateName = UnitName(unitID)
|
||||
local totemName = string_gsub(nameplateName, "^%s+", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+$", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+[I,V,X]+$", "") --trim rank
|
||||
totemName = string_lower(totemName)
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitID)
|
||||
local totemDataEntry = localizedTotemData["default"][totemName]
|
||||
if totemDataEntry and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then-- modify this nameplates
|
||||
|
||||
if #self.totemPlateCache > 0 then
|
||||
nameplate.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
||||
else
|
||||
nameplate.gladdyTotemFrame = CreateFrame("Frame", nil)
|
||||
function TotemPlates:CreateTotemFrame(nameplate)
|
||||
nameplate.gladdyTotemFrame = CreateFrame("Frame")
|
||||
nameplate.gladdyTotemFrame:SetIgnoreParentAlpha(true)
|
||||
nameplate.gladdyTotemFrame:SetWidth(Gladdy.db.npTotemPlatesSize * Gladdy.db.npTotemPlatesWidthFactor)
|
||||
nameplate.gladdyTotemFrame:SetHeight(Gladdy.db.npTotemPlatesSize)
|
||||
@ -307,9 +327,115 @@ function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
nameplate.gladdyTotemFrame.totemBorder:SetPoint("BOTTOMRIGHT", nameplate.gladdyTotemFrame, "BOTTOMRIGHT")
|
||||
nameplate.gladdyTotemFrame.totemBorder:SetTexture(Gladdy.db.npTotemPlatesBorderStyle)
|
||||
nameplate.gladdyTotemFrame.totemName = nameplate.gladdyTotemFrame:CreateFontString(nil, "OVERLAY")
|
||||
nameplate.gladdyTotemFrame.totemName:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.npTremorFont), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
nameplate.gladdyTotemFrame.totemName:SetFont(Gladdy:SMFetch("font", "npTremorFont"), Gladdy.db.npTremorFontSize, "OUTLINE")
|
||||
nameplate.gladdyTotemFrame.totemName:SetPoint("TOP", nameplate.gladdyTotemFrame, "BOTTOM", Gladdy.db.npTremorFontXOffset, Gladdy.db.npTremorFontYOffset)
|
||||
nameplate.gladdyTotemFrame.selectionHighlight = nameplate.gladdyTotemFrame:CreateTexture(nil, "OVERLAY")
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetTexture("Interface/TargetingFrame/UI-TargetingFrame-BarFill")
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetAlpha(0)
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetBlendMode("ADD")
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetIgnoreParentAlpha(true)
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetPoint("TOPLEFT", nameplate.gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
||||
nameplate.gladdyTotemFrame.selectionHighlight:SetPoint("BOTTOMRIGHT", nameplate.gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
||||
nameplate.gladdyTotemFrame:SetScript('OnUpdate', TotemPlates.OnUpdate)
|
||||
nameplate.gladdyTotemFrame:SetScript("OnHide", function(self)
|
||||
self.parent = nil
|
||||
self:SetParent(nil)
|
||||
end)
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
-- Nameplate functions
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
function TotemPlates:GetAddonFrame(nameplate)
|
||||
if self.addon == "Blizzard" then
|
||||
if nameplate.UnitFrame then
|
||||
return nameplate.UnitFrame
|
||||
end
|
||||
elseif self.addon == "Plater" or self.addon == "Tukui" or self.addon == "ElvUI" then
|
||||
if nameplate.unitFrame then
|
||||
return nameplate.unitFrame
|
||||
end
|
||||
elseif self.addon == "Kui_Nameplates" then
|
||||
if nameplate.kui then
|
||||
return nameplate.kui
|
||||
end
|
||||
elseif self.addon == "NeatPlates" then
|
||||
if nameplate.extended or nameplate.carrier then
|
||||
return nameplate.extended , nameplate.carrier
|
||||
end
|
||||
elseif self.addon == "TidyPlates_ThreatPlates" then
|
||||
if nameplate.TPFrame then
|
||||
return nameplate.TPFrame
|
||||
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)
|
||||
local addonFrames = { self:GetAddonFrame(nameplate) }
|
||||
if addonFrames and #addonFrames > 0 then
|
||||
if show then
|
||||
for _,v in ipairs(addonFrames) do
|
||||
v:Show()
|
||||
end
|
||||
else
|
||||
for _,v in ipairs(addonFrames) do
|
||||
v:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates.OnUpdate(self)
|
||||
if (UnitIsUnit("mouseover", self.unitID) or UnitIsUnit("target", self.unitID)) then
|
||||
self.selectionHighlight:SetAlpha(.25)
|
||||
else
|
||||
self.selectionHighlight:SetAlpha(0)
|
||||
end
|
||||
if (TotemPlates.addon == "Plater" or TotemPlates.addon == "Tukui" or TotemPlates.addon == "ElvUI") and self.parent and self.parent.unitFrame then
|
||||
self.parent.unitFrame:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:OnUnitEvent(unitID)
|
||||
local isEnemy = UnitIsEnemy("player", unitID)
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitID)
|
||||
if not nameplate then
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.npTotems then
|
||||
self:ToggleAddon(nameplate, true)
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.npTotemsShowEnemy and isEnemy then
|
||||
self:ToggleAddon(nameplate, true)
|
||||
return
|
||||
end
|
||||
if not Gladdy.db.npTotemsShowFriendly and not isEnemy then
|
||||
self:ToggleAddon(nameplate, true)
|
||||
return
|
||||
end
|
||||
local nameplateName = UnitName(unitID)
|
||||
local totemName = string_gsub(nameplateName, "^%s+", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+$", "") --trim
|
||||
totemName = string_gsub(totemName, "%s+[I,V,X]+$", "") --trim rank
|
||||
totemName = string_lower(totemName)
|
||||
local totemDataEntry = localizedTotemData["default"][totemName] or localizedTotemData["frFR"][totemName] or localizedTotemData["ruRU"][totemName]
|
||||
if totemDataEntry and Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].enabled then-- modify this nameplates
|
||||
if #self.totemPlateCache > 0 then
|
||||
nameplate.gladdyTotemFrame = tremove(self.totemPlateCache, #self.totemPlateCache)
|
||||
else
|
||||
self:CreateTotemFrame(nameplate)
|
||||
end
|
||||
nameplate.gladdyTotemFrame.unitID = unitID
|
||||
nameplate.gladdyTotemFrame.totemDataEntry = totemDataEntry
|
||||
nameplate.gladdyTotemFrame.parent = nameplate
|
||||
nameplate.gladdyTotemFrame:SetParent(nameplate)
|
||||
@ -321,29 +447,29 @@ function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.b,
|
||||
Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].color.a)
|
||||
nameplate.gladdyTotemFrame.totemName:SetText(Gladdy.db.npTotemColors["totem" .. totemDataEntry.id].customText or "")
|
||||
nameplate.gladdyTotemFrame.parent = nameplate
|
||||
nameplate.gladdyTotemFrame:Show()
|
||||
TotemPlates:SetTotemAlpha(nameplate.gladdyTotemFrame, unitID)
|
||||
|
||||
nameplate.UnitFrame:SetAlpha(0)
|
||||
nameplate.UnitFrame.point = select(2, nameplate.UnitFrame.selectionHighlight:GetPoint())
|
||||
nameplate.UnitFrame.selectionHighlight:ClearAllPoints()
|
||||
nameplate.UnitFrame.selectionHighlight:SetPoint("TOPLEFT", nameplate.gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
||||
nameplate.UnitFrame.selectionHighlight:SetPoint("BOTTOMRIGHT", nameplate.gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
||||
nameplate.UnitFrame:SetScript("OnHide", function(unitFrame)
|
||||
unitFrame:SetAlpha(1)
|
||||
unitFrame.selectionHighlight:ClearAllPoints()
|
||||
unitFrame.selectionHighlight:SetPoint("TOPLEFT", unitFrame.point, "TOPLEFT")
|
||||
unitFrame.selectionHighlight:SetPoint("BOTTOMRIGHT", unitFrame.point, "BOTTOMRIGHT")
|
||||
unitFrame:SetScript("OnHide", nil)
|
||||
end)
|
||||
self:ToggleAddon(nameplate)
|
||||
self.activeTotemNameplates[unitID] = nameplate
|
||||
else
|
||||
self:ToggleAddon(nameplate, true)
|
||||
end
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
self:OnUnitEvent(...)
|
||||
end
|
||||
|
||||
function TotemPlates:UNIT_NAME_UPDATE(...)
|
||||
self:OnUnitEvent(...)
|
||||
end
|
||||
|
||||
function TotemPlates:NAME_PLATE_UNIT_REMOVED(...)
|
||||
local unitID = ...
|
||||
local nameplate = C_NamePlate.GetNamePlateForUnit(unitID)
|
||||
self.activeTotemNameplates[unitID] = nil
|
||||
--self:ToggleAddon(nameplate, true)
|
||||
if nameplate.gladdyTotemFrame then
|
||||
nameplate.gladdyTotemFrame:Hide()
|
||||
nameplate.gladdyTotemFrame:SetParent(nil)
|
||||
@ -384,12 +510,12 @@ function TotemPlates:GetOptions()
|
||||
return {
|
||||
headerTotems = {
|
||||
type = "header",
|
||||
name = L["Totem General"],
|
||||
name = L["Totem Plates"],
|
||||
order = 2,
|
||||
},
|
||||
npTotems = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Totem icons on/off"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Turns totem icons instead of nameplates on or off. (Requires reload)"],
|
||||
order = 3,
|
||||
width = 0.9,
|
||||
@ -411,7 +537,7 @@ function TotemPlates:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
icon = {
|
||||
@ -432,6 +558,7 @@ function TotemPlates:GetOptions()
|
||||
min = 20,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
npTotemPlatesWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -441,6 +568,7 @@ function TotemPlates:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -451,7 +579,7 @@ function TotemPlates:GetOptions()
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Icon"],
|
||||
name = L["Font"],
|
||||
order = 1,
|
||||
},
|
||||
npTremorFont = Gladdy:option({
|
||||
@ -470,6 +598,7 @@ function TotemPlates:GetOptions()
|
||||
min = 1,
|
||||
max = 50,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
npTremorFontXOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -479,6 +608,7 @@ function TotemPlates:GetOptions()
|
||||
min = -300,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
npTremorFontYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -488,6 +618,7 @@ function TotemPlates:GetOptions()
|
||||
min = -300,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -521,21 +652,25 @@ function TotemPlates:GetOptions()
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
width = "double",
|
||||
width = "full",
|
||||
order = 23,
|
||||
get = function(info)
|
||||
local alphas = GetTotemOptions()
|
||||
for i=2, #alphas do
|
||||
if alphas[i].alpha ~= alphas[1].alpha then
|
||||
get = function()
|
||||
local alpha, i = nil, 1
|
||||
for _,v in pairs(Gladdy.dbi.profile.npTotemColors) do
|
||||
if i == 1 then
|
||||
alpha = v.alpha
|
||||
i = i + 1
|
||||
else
|
||||
if v.alpha ~= alpha then
|
||||
return ""
|
||||
end
|
||||
end
|
||||
return alphas[1].alpha
|
||||
end
|
||||
return alpha
|
||||
end,
|
||||
set = function(info, value)
|
||||
local alphas = GetTotemOptions()
|
||||
for i=1, #alphas do
|
||||
alphas[i].alpha = value
|
||||
set = function(_, value)
|
||||
for _,v in pairs(Gladdy.dbi.profile.npTotemColors) do
|
||||
v.alpha = value
|
||||
end
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
@ -563,23 +698,27 @@ function TotemPlates:GetOptions()
|
||||
name = L["All totem border color"],
|
||||
order = 42,
|
||||
hasAlpha = true,
|
||||
get = function(info)
|
||||
local colors = GetTotemOptions()
|
||||
local color = colors[1].color
|
||||
for i=2, #colors do
|
||||
if colors[i].r ~= color.r or colors[i].color.r ~= color.r or colors[i].color.r ~= color.r or colors[i].color.r ~= color.r then
|
||||
get = function()
|
||||
local color
|
||||
local i = 1
|
||||
for _,v in pairs(Gladdy.dbi.profile.npTotemColors) do
|
||||
if i == 1 then
|
||||
color = v.color
|
||||
i = i + 1
|
||||
else
|
||||
if v.color.r ~= color.r or v.color.g ~= color.g or v.color.b ~= color.b or v.color.a ~= color.a then
|
||||
return 0, 0, 0, 0
|
||||
end
|
||||
end
|
||||
end
|
||||
return color.r, color.g, color.b, color.a
|
||||
end,
|
||||
set = function(info, r, g, b, a)
|
||||
local colors = GetTotemOptions()
|
||||
for i=1, #colors do
|
||||
colors[i].color.r = r
|
||||
colors[i].color.g = g
|
||||
colors[i].color.b = b
|
||||
colors[i].color.a = a
|
||||
set = function(_, r, g, b, a)
|
||||
for _,v in pairs(Gladdy.dbi.profile.npTotemColors) do
|
||||
v.color.r = r
|
||||
v.color.g = g
|
||||
v.color.b = b
|
||||
v.color.a = a
|
||||
end
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
@ -590,7 +729,7 @@ function TotemPlates:GetOptions()
|
||||
},
|
||||
npTotemColors = {
|
||||
order = 50,
|
||||
name = "Customize Totems",
|
||||
name = L["Customize Totems"],
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
args = select(2, Gladdy:GetTotemColors())
|
||||
|
@ -1,4 +1,4 @@
|
||||
local ceil, floor, string_format, tonumber = ceil, floor, string.format, tonumber
|
||||
local ceil = ceil
|
||||
local C_PvP = C_PvP
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
@ -39,33 +39,22 @@ local function iconTimer(self, elapsed)
|
||||
local timeLeft = ceil(self.timeLeft)
|
||||
|
||||
if timeLeft >= 60 then
|
||||
-- more than 1 minute
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
self.cooldownFont:SetText(floor(timeLeft / 60) .. ":" .. string_format("%02.f", floor(timeLeft - floor(timeLeft / 60) * 60)))
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), (self:GetWidth()/2 - 0.15*self:GetWidth()) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft < 60 and timeLeft >= 21 then
|
||||
-- between 60s and 21s (green)
|
||||
self.cooldownFont:SetTextColor(0.7, 1, 0)
|
||||
self.cooldownFont:SetText(timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft < 20.9 and timeLeft >= 11 then
|
||||
-- between 20s and 11s (green)
|
||||
self.cooldownFont:SetTextColor(0, 1, 0)
|
||||
self.cooldownFont:SetText(timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft <= 10 and timeLeft >= 5 then
|
||||
-- between 10s and 5s (orange)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 0.15*self:GetWidth()) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft < 60 and timeLeft >= 30 then
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft < 30 and timeLeft >= 11 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
self.cooldownFont:SetFormattedText("%.1f", timeLeft)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft <= 10 and timeLeft >= 5 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
elseif timeLeft < 5 and timeLeft > 0 then
|
||||
-- between 5s and 1s (red)
|
||||
self.cooldownFont:SetTextColor(1, 0, 0)
|
||||
self.cooldownFont:SetFormattedText("%.1f", timeLeft >= 0.0 and timeLeft or 0.0)
|
||||
self.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
else
|
||||
self.cooldownFont:SetText("")
|
||||
self.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), (self:GetWidth()/2 - 1) * Gladdy.db.trinketFontScale, "OUTLINE")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -87,7 +76,7 @@ function Trinket:CreateFrame(unit)
|
||||
trinket.cooldownFrame:SetPoint("BOTTOMRIGHT", trinket, "BOTTOMRIGHT")
|
||||
|
||||
trinket.cooldownFont = trinket.cooldownFrame:CreateFontString(nil, "OVERLAY")
|
||||
trinket.cooldownFont:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.trinketFont), 20, "OUTLINE")
|
||||
trinket.cooldownFont:SetFont(Gladdy:SMFetch("font", "trinketFont"), 20, "OUTLINE")
|
||||
--trinket.cooldownFont:SetAllPoints(trinket.cooldown)
|
||||
trinket.cooldownFont:SetJustifyH("CENTER")
|
||||
trinket.cooldownFont:SetPoint("CENTER")
|
||||
@ -130,7 +119,7 @@ function Trinket:UpdateFrame(unit)
|
||||
trinket.texture.overlay:SetVertexColor(Gladdy.db.trinketBorderColor.r, Gladdy.db.trinketBorderColor.g, Gladdy.db.trinketBorderColor.b, Gladdy.db.trinketBorderColor.a)
|
||||
|
||||
trinket:ClearAllPoints()
|
||||
local margin = Gladdy.db.highlightBorderSize + Gladdy.db.padding
|
||||
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)
|
||||
@ -229,7 +218,7 @@ function Trinket:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
general = {
|
||||
@ -240,15 +229,16 @@ function Trinket:GetOptions()
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 4,
|
||||
order = 1,
|
||||
},
|
||||
trinketSize = Gladdy:option({
|
||||
type = "range",
|
||||
name = L["Trinket size"],
|
||||
name = L["Size"],
|
||||
min = 5,
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 4,
|
||||
width = "full",
|
||||
}),
|
||||
trinketWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -257,6 +247,7 @@ function Trinket:GetOptions()
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 6,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -274,6 +265,7 @@ function Trinket:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 7,
|
||||
width = "full",
|
||||
}),
|
||||
trinketCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -282,6 +274,7 @@ function Trinket:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -311,6 +304,7 @@ function Trinket:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -321,12 +315,12 @@ function Trinket:GetOptions()
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Position"],
|
||||
name = L["Icon position"],
|
||||
order = 4,
|
||||
},
|
||||
trinketPos = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Trinket position"],
|
||||
name = L["Icon position"],
|
||||
desc = L["This changes positions of the trinket"],
|
||||
order = 21,
|
||||
values = {
|
||||
|
@ -1,9 +1,11 @@
|
||||
local str_match, tonumber, tostring = string.match, tonumber, tostring
|
||||
local tonumber, tostring = tonumber, tostring
|
||||
|
||||
local UnitName = UnitName
|
||||
local IsInGroup, IsInRaid = IsInGroup, IsInRaid
|
||||
local LE_PARTY_CATEGORY_HOME, LE_PARTY_CATEGORY_INSTANCE = LE_PARTY_CATEGORY_HOME, LE_PARTY_CATEGORY_INSTANCE
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local L = Gladdy.L
|
||||
|
||||
local VersionCheck = Gladdy:NewModule("VersionCheck", 1, {
|
||||
})
|
||||
LibStub("AceComm-3.0"):Embed(VersionCheck)
|
||||
@ -21,6 +23,13 @@ end
|
||||
|
||||
function VersionCheck:JOINED_ARENA()
|
||||
self:RegisterComm("GladdyVCheck", VersionCheck.OnCommReceived)
|
||||
if IsInRaid(LE_PARTY_CATEGORY_HOME) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "RAID", self.playerName)
|
||||
elseif IsInGroup(LE_PARTY_CATEGORY_INSTANCE) or IsInRaid(LE_PARTY_CATEGORY_INSTANCE) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "INSTANCE_CHAT", self.playerName)
|
||||
elseif IsInGroup(LE_PARTY_CATEGORY_HOME) then
|
||||
self:SendCommMessage("GladdyVCheck", tostring(Gladdy.version_num), "PARTY", self.playerName)
|
||||
end
|
||||
end
|
||||
|
||||
function VersionCheck:Test(unit)
|
||||
@ -39,7 +48,7 @@ function VersionCheck.OnCommReceived(prefix, message, distribution, sender)
|
||||
else
|
||||
Gladdy:Warn("Current version", "\"".. addonVersion.."\"", "is outdated. Most recent version is", "\"".. message.."\"")
|
||||
Gladdy:Warn("Please download the latest Gladdy version at:")
|
||||
Gladdy:Warn("https://github.com/XiconQoo/Gladdy-TBC")
|
||||
Gladdy:Warn("https://www.curseforge.com/wow/addons/gladdy-tbc or https://github.com/XiconQoo/Gladdy-TBC")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -5,9 +5,9 @@ local XiconProfiles = Gladdy:NewModule("XiconProfiles", nil, {
|
||||
})
|
||||
|
||||
function XiconProfiles:ApplyKlimp()
|
||||
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetKlimpProfile())
|
||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKlimpProfile())
|
||||
if deserialized then
|
||||
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
|
||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
||||
end
|
||||
Gladdy:Reset()
|
||||
Gladdy:HideFrame()
|
||||
@ -15,9 +15,9 @@ function XiconProfiles:ApplyKlimp()
|
||||
end
|
||||
|
||||
function XiconProfiles:ApplyKnall()
|
||||
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetKnallProfile())
|
||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKnallProfile())
|
||||
if deserialized then
|
||||
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
|
||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
||||
end
|
||||
Gladdy:Reset()
|
||||
Gladdy:HideFrame()
|
||||
@ -25,9 +25,49 @@ function XiconProfiles:ApplyKnall()
|
||||
end
|
||||
|
||||
function XiconProfiles:ApplyClassic()
|
||||
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetClassicProfile())
|
||||
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfile())
|
||||
if deserialized then
|
||||
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
|
||||
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
|
||||
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
|
||||
end
|
||||
Gladdy:Reset()
|
||||
Gladdy:HideFrame()
|
||||
@ -36,10 +76,29 @@ end
|
||||
|
||||
function XiconProfiles:GetOptions()
|
||||
return {
|
||||
headerProfileBlizzard = {
|
||||
type = "header",
|
||||
name = "Blizzard " .. L["Profile"],
|
||||
order = 2,
|
||||
},
|
||||
blizzardProfile = {
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||
XiconProfiles:ApplyBlizz()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Blizzard " .. L["Profile"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Blizz1.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 3,
|
||||
},
|
||||
headerProfileClassic = {
|
||||
type = "header",
|
||||
name = L["Classic Profile"],
|
||||
order = 2,
|
||||
name = "Classic " .. L["Profile"],
|
||||
order = 4,
|
||||
},
|
||||
classicProfile = {
|
||||
type = "execute",
|
||||
@ -48,17 +107,36 @@ function XiconProfiles:GetOptions()
|
||||
XiconProfiles:ApplyClassic()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Classic Profile",
|
||||
desc = "Classic " .. L["Profile"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Classic1.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 3,
|
||||
order = 5,
|
||||
},
|
||||
headerProfileClassicNoPet = {
|
||||
type = "header",
|
||||
name = "Classic " .. L["Profile"] .. L[" No Pet"],
|
||||
order = 6,
|
||||
},
|
||||
classicProfileNoPet = {
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||
XiconProfiles:ApplyClassicNoPet()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Classic " .. L["Profile"] .. L[" No Pet"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Classic2.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 7,
|
||||
},
|
||||
headerProfileKnall = {
|
||||
type = "header",
|
||||
name = L["Knall's Profile"],
|
||||
order = 4,
|
||||
name = "Knall's " .. L["Profile"],
|
||||
order = 8,
|
||||
},
|
||||
knallProfile = {
|
||||
type = "execute",
|
||||
@ -67,17 +145,17 @@ function XiconProfiles:GetOptions()
|
||||
XiconProfiles:ApplyKnall()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Knall's Profile",
|
||||
desc = "Knall's " .. L["Profile"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Knall1.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 5,
|
||||
order = 9,
|
||||
},
|
||||
headerProfileKlimp = {
|
||||
type = "header",
|
||||
name = L["Klimp's Profile"],
|
||||
order = 6,
|
||||
name = "Klimp's " .. L["Profile"],
|
||||
order = 10,
|
||||
},
|
||||
klimpProfiles = {
|
||||
type = "execute",
|
||||
@ -89,9 +167,47 @@ function XiconProfiles:GetOptions()
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
name = " ",
|
||||
desc = "Klimp's Profile",
|
||||
desc = "Klimp's " .. L["Profile"],
|
||||
width = "full",
|
||||
order = 7,
|
||||
order = 11,
|
||||
},
|
||||
headerProfileRukk = {
|
||||
type = "header",
|
||||
name = "Rukk1's " .. L["Profile"],
|
||||
order = 12,
|
||||
},
|
||||
rukkProfile = {
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||
XiconProfiles:ApplyRukk()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Rukk1's " .. L["Profile"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Rukk1.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 13,
|
||||
},
|
||||
headerProfileMir = {
|
||||
type = "header",
|
||||
name = "Mir's " .. L["Profile"],
|
||||
order = 14,
|
||||
},
|
||||
mirProfile = {
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||
XiconProfiles:ApplyMir()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Mir's " .. L["Profile"],
|
||||
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Mir1.blp",
|
||||
imageWidth = 350,
|
||||
imageHeight = 175,
|
||||
width = "full",
|
||||
order = 15,
|
||||
},
|
||||
}
|
||||
end
|
157
Options.lua
157
Options.lua
@ -1,4 +1,7 @@
|
||||
local type, pairs, tinsert, tsort, tostring, str_match, tonumber = type, pairs, table.insert, table.sort, tostring, string.match, tonumber
|
||||
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 ceil, floor = ceil, floor
|
||||
local ReloadUI = ReloadUI
|
||||
|
||||
local InterfaceOptionsFrame_OpenToFrame = InterfaceOptionsFrame_OpenToFrame
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
@ -6,21 +9,53 @@ local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
|
||||
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
||||
local AURA_TYPE_DEBUFF, AURA_TYPE_BUFF = AURA_TYPE_DEBUFF, AURA_TYPE_BUFF
|
||||
|
||||
|
||||
local Gladdy = LibStub("Gladdy")
|
||||
local LibClassAuras = LibStub("LibClassAuras-1.0")
|
||||
local L = Gladdy.L
|
||||
|
||||
Gladdy.TIMER_FORMAT = { tenths = "tenths", seconds = "seconds",
|
||||
values = {
|
||||
["tenths"] = "xx:xx Miliseconds",
|
||||
["seconds"] = "xx Seconds"
|
||||
}}
|
||||
|
||||
function Gladdy:FormatTimer(fontString, timeLeft, milibreakpoint, showSeconds)
|
||||
if timeLeft < 0 then
|
||||
fontString:SetText("")
|
||||
return
|
||||
end
|
||||
local time = timeLeft >= 0.0 and timeLeft or 0.0
|
||||
if Gladdy.db.timerFormat == Gladdy.TIMER_FORMAT.tenths and milibreakpoint then
|
||||
fontString:SetFormattedText("%.1f", time)
|
||||
else
|
||||
if time >= 60 then
|
||||
if showSeconds then
|
||||
fontString:SetText(floor(timeLeft / 60) .. ":" .. string_format("%02.f", floor(timeLeft - floor(timeLeft / 60) * 60)))
|
||||
else
|
||||
fontString:SetText(ceil(ceil(time / 60)) .. "m")
|
||||
end
|
||||
else
|
||||
fontString:SetFormattedText("%d", ceil(time))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Gladdy.defaults = {
|
||||
profile = {
|
||||
locked = false,
|
||||
hideBlizzard = "arena",
|
||||
x = 0,
|
||||
y = 0,
|
||||
growUp = false,
|
||||
growDirection = "BOTTOM",
|
||||
frameScale = 1,
|
||||
padding = 3,
|
||||
padding = 1,
|
||||
barWidth = 180,
|
||||
bottomMargin = 10,
|
||||
bottomMargin = 2,
|
||||
statusbarBorderOffset = 6,
|
||||
timerFormat = Gladdy.TIMER_FORMAT.tenths,
|
||||
backgroundColor = {r = 0, g = 0, b = 0, a = 0},
|
||||
},
|
||||
}
|
||||
|
||||
@ -96,6 +131,11 @@ local function setOpt(info, value)
|
||||
local key = info.arg or info[#info]
|
||||
Gladdy.dbi.profile[key] = value
|
||||
Gladdy:UpdateFrame()
|
||||
if Gladdy.db.hideBlizzard == "always" then
|
||||
SetCVar("showArenaEnemyFrames", 0)
|
||||
elseif Gladdy.db.hideBlizzard == "never" then
|
||||
SetCVar("showArenaEnemyFrames", 1)
|
||||
end
|
||||
end
|
||||
local function getColorOpt(info)
|
||||
local key = info.arg or info[#info]
|
||||
@ -113,7 +153,7 @@ function Gladdy:SetupModule(name, module, order)
|
||||
self.options.args[name] = {
|
||||
type = "group",
|
||||
name = L[name],
|
||||
desc = L[name .. " settings"],
|
||||
desc = L[name] .. " " .. L["settings"],
|
||||
childGroups = "tab",
|
||||
order = order,
|
||||
args = {},
|
||||
@ -151,7 +191,7 @@ local function pairsByKeys(t)
|
||||
for k in pairs(t) do
|
||||
tinsert(a, k)
|
||||
end
|
||||
tsort(a)
|
||||
tsort(a, function(a, b) return L[a] < L[b] end)
|
||||
|
||||
local i = 0
|
||||
return function()
|
||||
@ -168,18 +208,52 @@ end
|
||||
function Gladdy:SetupOptions()
|
||||
self.options = {
|
||||
type = "group",
|
||||
name = "Gladdy",
|
||||
name = L["Gladdy"],
|
||||
plugins = {},
|
||||
childGroups = "tree",
|
||||
get = getOpt,
|
||||
set = setOpt,
|
||||
args = {
|
||||
test = {
|
||||
order = 1,
|
||||
width = 0.7,
|
||||
name = L["Test"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy:ToggleFrame(3)
|
||||
end,
|
||||
},
|
||||
hide = {
|
||||
order = 2,
|
||||
width = 0.7,
|
||||
name = L["Hide"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy:Reset()
|
||||
Gladdy:HideFrame()
|
||||
end,
|
||||
},
|
||||
reload = {
|
||||
order = 3,
|
||||
width = 0.7,
|
||||
name = L["ReloadUI"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
ReloadUI()
|
||||
end,
|
||||
},
|
||||
version = {
|
||||
order = 4,
|
||||
width = 1,
|
||||
type = "description",
|
||||
name = " Gladdy v" .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
||||
},
|
||||
general = {
|
||||
type = "group",
|
||||
name = L["General"],
|
||||
desc = L["General settings"],
|
||||
childGroups = "tab",
|
||||
order = 1,
|
||||
order = 5,
|
||||
args = {
|
||||
locked = {
|
||||
type = "toggle",
|
||||
@ -187,16 +261,31 @@ function Gladdy:SetupOptions()
|
||||
desc = L["Toggle if frame can be moved"],
|
||||
order = 1,
|
||||
},
|
||||
growUp = {
|
||||
type = "toggle",
|
||||
name = L["Grow frame upwards"],
|
||||
desc = L["If enabled the frame will grow upwards instead of downwards"],
|
||||
order = 2,
|
||||
growDirection = {
|
||||
type = "select",
|
||||
name = L["Grow Direction"],
|
||||
order = 3,
|
||||
values = {
|
||||
["BOTTOM"] = L["Down"],
|
||||
["TOP"] = L["Up"],
|
||||
["LEFT"] = L["Left"],
|
||||
["RIGHT"] = L["Right"],
|
||||
}
|
||||
},
|
||||
hideBlizzard = {
|
||||
type = "select",
|
||||
name = L["Hide Blizzard"],
|
||||
values = {
|
||||
["arena"] = L["Arena only"],
|
||||
["never"] = L["Never"],
|
||||
["always"] = L["Always"],
|
||||
},
|
||||
order = 4,
|
||||
},
|
||||
group = {
|
||||
type = "group",
|
||||
name = "General",
|
||||
order = 3,
|
||||
name = L["General"],
|
||||
order = 5,
|
||||
childGroups = "tree",
|
||||
args = {
|
||||
frameGeneral = {
|
||||
@ -216,7 +305,7 @@ function Gladdy:SetupOptions()
|
||||
order = 4,
|
||||
min = .1,
|
||||
max = 2,
|
||||
step = .1,
|
||||
step = .01,
|
||||
},
|
||||
padding = {
|
||||
type = "range",
|
||||
@ -238,13 +327,22 @@ function Gladdy:SetupOptions()
|
||||
},
|
||||
bottomMargin = {
|
||||
type = "range",
|
||||
name = L["Bottom margin"],
|
||||
name = L["Margin"],
|
||||
desc = L["Margin between each button"],
|
||||
order = 7,
|
||||
min = -100,
|
||||
max = 100,
|
||||
min = -200,
|
||||
max = 200,
|
||||
step = 1,
|
||||
},
|
||||
backgroundColor = {
|
||||
type = "color",
|
||||
name = L["Background color"],
|
||||
desc = L["Background Color of the frame"],
|
||||
order = 8,
|
||||
hasAlpha = true,
|
||||
get = getColorOpt,
|
||||
set = setColorOpt,
|
||||
},
|
||||
}
|
||||
},
|
||||
cooldownGeneral = {
|
||||
@ -315,6 +413,12 @@ function Gladdy:SetupOptions()
|
||||
Gladdy:UpdateFrame()
|
||||
end
|
||||
},
|
||||
timerFormat = Gladdy:option({
|
||||
type = "select",
|
||||
name = L["Timer Format"],
|
||||
order = 11,
|
||||
values = Gladdy.TIMER_FORMAT.values
|
||||
})
|
||||
},
|
||||
},
|
||||
fontGeneral = {
|
||||
@ -490,6 +594,7 @@ function Gladdy:SetupOptions()
|
||||
local g = Gladdy.db.cooldownBorderColor
|
||||
local h = Gladdy.db.drBorderColor
|
||||
local i = Gladdy.db.trinketBorderColor
|
||||
local j = Gladdy.db.racialBorderColor
|
||||
if (a.r == b.r and a.g == b.g and a.b == b.b and a.a == b.a
|
||||
and a.r == c.r and a.g == c.g and a.b == c.b and a.a == c.a
|
||||
and a.r == d.r and a.g == d.g and a.b == d.b and a.a == d.a
|
||||
@ -497,7 +602,8 @@ function Gladdy:SetupOptions()
|
||||
and a.r == f.r and a.g == f.g and a.b == f.b and a.a == f.a
|
||||
and a.r == g.r and a.g == g.g and a.b == g.b and a.a == g.a
|
||||
and a.r == h.r and a.g == h.g and a.b == h.b and a.a == h.a
|
||||
and a.r == i.r and a.g == i.g and a.b == i.b and a.a == i.a) then
|
||||
and a.r == i.r and a.g == i.g and a.b == i.b and a.a == i.a
|
||||
and a.r == j.r and a.g == j.g and a.b == j.b and a.a == j.a) then
|
||||
return a.r, a.g, a.b, a.a
|
||||
else
|
||||
return { r = 0, g = 0, b = 0, a = 0 }
|
||||
@ -514,6 +620,7 @@ function Gladdy:SetupOptions()
|
||||
Gladdy.db.cooldownBorderColor = rgb
|
||||
Gladdy.db.drBorderColor = rgb
|
||||
Gladdy.db.trinketBorderColor = rgb
|
||||
Gladdy.db.racialBorderColor = rgb
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
},
|
||||
@ -627,19 +734,19 @@ function Gladdy:SetupOptions()
|
||||
},
|
||||
}
|
||||
|
||||
local order = 2
|
||||
local order = 6
|
||||
for k, v in pairsByKeys(self.modules) do
|
||||
self:SetupModule(k, v, order)
|
||||
order = order + 1
|
||||
end
|
||||
|
||||
local options = {
|
||||
name = "Gladdy",
|
||||
name = L["Gladdy"],
|
||||
type = "group",
|
||||
args = {
|
||||
load = {
|
||||
name = "Load configuration",
|
||||
desc = "Load configuration options",
|
||||
name = L["Load configuration"],
|
||||
desc = L["Load configuration options"],
|
||||
type = "execute",
|
||||
func = function()
|
||||
HideUIPanel(InterfaceOptionsFrame)
|
||||
@ -666,7 +773,7 @@ function Gladdy:GetAuras(auraType)
|
||||
ckeckAll = {
|
||||
order = 1,
|
||||
width = "0.7",
|
||||
name = "Check All",
|
||||
name = L["Check All"],
|
||||
type = "execute",
|
||||
func = function(info)
|
||||
if auraType == AURA_TYPE_DEBUFF then
|
||||
@ -683,7 +790,7 @@ function Gladdy:GetAuras(auraType)
|
||||
uncheckAll = {
|
||||
order = 2,
|
||||
width = "0.7",
|
||||
name = "Uncheck All",
|
||||
name = L["Uncheck All"],
|
||||
type = "execute",
|
||||
func = function(info)
|
||||
if auraType == AURA_TYPE_DEBUFF then
|
||||
|
151
README.md
151
README.md
@ -1,35 +1,47 @@
|
||||
# Gladdy - TBC
|
||||
|
||||
### The most powerful arena addon for WoW TBC 2.5.1
|
||||
## [v1.07-Beta Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.07-Beta/Gladdy_TBC-Classic_v1.07-Beta.zip)
|
||||
## [v1.20-Release Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.20-Release/Gladdy_TBC-Classic_v1.20-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
|
||||
|
||||
### Origin
|
||||
|
||||
Based on https://github.com/Schaka/gladdy
|
||||
Based on https://github.com/miraage/gladdy
|
||||
|
||||
### Motivation for this edit
|
||||
|
||||
The goal is to make Gladdy highly configurable in it's appearance. Everything can be arranged left or right independently. Also I gave Gladdy a new look with black borders. A lot can be configured.
|
||||
|
||||
### Modules:
|
||||
- Announcement (drink, trinket usage, spec detection ...)
|
||||
- ArenaCountDown
|
||||
- Auras (show important (de)buffs in the class icon)
|
||||
- BuffsDebuffs (show buffs and debuffs on arena frames - can be filtered)
|
||||
- ClassIcon (or specicon, once detected)
|
||||
- CombatIndicator
|
||||
- Cooldown (tracks important cooldowns)
|
||||
- Diminishing (tracks DRs)
|
||||
- ExportImport (share your profile with your friends in the form of a string, which can be imported)
|
||||
- Highlight (highlights focus and target)
|
||||
- Pets (show arena pets)
|
||||
- Racial Spells
|
||||
- TotemPlates (show totem icons instead of normal nameplates)
|
||||
- Trinket (tracks trinket usage)
|
||||
- VersionCheck (checks if you use an older version that your teammate)
|
||||
- XiconProfiles (predefined profiles to start your configuration from)
|
||||
- **Announcement** (drink, trinket usage, spec detection ...)
|
||||
- **ArenaCountDown**
|
||||
- **Auras** (show important (de)buffs as well as interrupts on the class icon)
|
||||
- **BuffsDebuffs** (show buffs and debuffs on arena frames - can be filtered)
|
||||
- **CastBar** (shows a castbar, can be disabled)
|
||||
- **ClassIcon** (or specicon, once detected)
|
||||
- **Clicks** (bind spells or macros to click actions)
|
||||
- **CombatIndicator** (shows a sword icon if unit is in combat)
|
||||
- **Cooldown** (tracks important cooldowns)
|
||||
- **Diminishing** (tracks DRs)
|
||||
- **ExportImport** (share your profile with your friends in the form of a string, which can be imported)
|
||||
- **Highlight** (highlights focus and target)
|
||||
- **Pets** (show arena pets)
|
||||
- **Racial** (show arena racial cooldowns)
|
||||
- **Range Check** (checks the range to a unit by a configurable spell)
|
||||
- **Shadowsight Timer** (shows a little movable frame with time left until Shadow Eyes spawn)
|
||||
- **TotemPlates** (show totem icons instead of normal nameplates, compatible with **Plater, NeatPlates, KUI, ThreatPlates, ElvUI, TukUI**)
|
||||
- **Trinket** (tracks trinket usage)
|
||||
- **VersionCheck** (checks if you use an older version that your teammate)
|
||||
- **XiconProfiles** (predefined profiles to start your configuration from)
|
||||
|
||||
### Valid Slash commands
|
||||
|
||||
- **/gladdy ui** (shows config)
|
||||
- **/gladdy test** (standard 3v3 test mode)
|
||||
- **/gladdy test1** to **/gladdy test5** (test mode with 1-5 frames active)
|
||||
- **/gladdy hide** (hides the frames)
|
||||
- **/gladdy reset** (resets current profile to default settings)
|
||||
|
||||
## Screenshots
|
||||
|
||||
@ -37,8 +49,111 @@ 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/sample3.png" width="48.5%">
|
||||
|
||||
## Special Thanks
|
||||
|
||||
- **miraage** - the origininal author of Gladdy! Your work set the foundation for this edit. Thanks!
|
||||
- **Schaka** - the maintainer of Gladdy! (thanks for letting me continue Gladdy and all the work you put into the TBC community)
|
||||
- **Macumba** (thanks for all the support, your feedback and your dedication for the TBC community)
|
||||
- **RMO** (without you I would not have modified Gladdy at all and thanks for all the suggestions and active feedback)
|
||||
- **Ur0b0r0s aka DrainTheLock** (thanks for testing, giving feedback and correcting/adding wrong CDs)
|
||||
- **Klimp** (thanks for all the suggestions and active feedback)
|
||||
- **the whole TBC addons 2.4.3 discord** (thanks for the support and great community, especially the MVPs)
|
||||
- **Hydra** (thanks for constructive feedback and suggestions)
|
||||
|
||||
### Changes
|
||||
|
||||
### v1.20-Release
|
||||
- configurable DR duration
|
||||
- scale in 0.01 percent steps
|
||||
- added Net-o-Matic, Nigh Invulnerablility Shield, Nigh Invulnerablility Backfire & Flee (Skull of Impending Doom) to Auras
|
||||
- added Mangle, Chastise, Avenging Wrath, Rapid Fire to BuffsDebuffs
|
||||
- improved testmode to only activate Auras/Buffs/Debuffs/Dr's that are actually enabled
|
||||
- added Mir's profile to XiconProfiles
|
||||
- added zhTW localization
|
||||
- added buttons for Test, Hide & Reload in the config
|
||||
- added version in config
|
||||
- ArenaCountdown upgrade
|
||||
- Repentance, Freezing Trap & Wyvern Sting are now disorients
|
||||
- import string now ignores errors on deleted options
|
||||
- added (un)checkAll button in DR-Categories in Diminishing Module
|
||||
- totemplates fix option to alter all colors/alphas
|
||||
- hide blizzard arena pets as well
|
||||
- fix shadowsight timer showing when not in arena or testmode
|
||||
- some minor refactoring / optimization
|
||||
|
||||
### v1.19-Beta
|
||||
- fix gladdy frames not showing v2
|
||||
- minor bug fixes
|
||||
|
||||
### v1.18-Beta
|
||||
- castbar font now working properly
|
||||
|
||||
### v1.17-Beta
|
||||
- option TimerFormat added (seconds or seconds + milliseconds) (General > Cooldown General > Timer Format)
|
||||
- hide blizzard arena frames without cvars
|
||||
- fix Gladdy bugging out on arena join when in combat
|
||||
- fix some TotemPlates issues
|
||||
- fix Feign Death causing to reset DR and Aura tracking
|
||||
- ArenaX option in Healthbar module now only shows the number
|
||||
- add background for all frames (General > Frame General > Background Color)
|
||||
- add evasion and banish to Aura
|
||||
- add MSBT to Announcement module
|
||||
- Shadowsight timer can be locked now
|
||||
- add "All" modifier to Clicks module
|
||||
- updated testmode for BuffsDebuffs (show only from enabled set)
|
||||
- updated Klimp's profile
|
||||
- added a new Profile in XiconProfiles -> Rukk1
|
||||
|
||||
### v1.16-Beta
|
||||
- unit gray in stealth when rangecheck module disabled
|
||||
|
||||
### v1.15-Beta
|
||||
- hotfix added entangling roots nature's grasp
|
||||
|
||||
### v1.14-Beta
|
||||
- hotfix for secure button grow direction up
|
||||
|
||||
### v1.13-Beta
|
||||
- frames behave now to mouseover macros
|
||||
- added Range Check module (configurable which spell is used for range check)
|
||||
- added Shadowsight Timer module (with announce)
|
||||
- added Clicks module
|
||||
- added Interrupt Tracker in Aura module (border color by spell school locked)
|
||||
- TotemPlates compatible with Plater, NeatPlates, KUI, ThreatPlates, ElvUI, TukUI
|
||||
- added a new Classic Profile in XiconProfiles
|
||||
- hide blizzard arena frames option added in General
|
||||
- castbar enable/disable
|
||||
- powerbar enable/disable
|
||||
- added some auras (Blackout, Improved Hamstring, Mace Stun, Stormherald Stun, Shadowsight Buff)
|
||||
- added Swiftmend and Berserker Rage cooldowns
|
||||
- changed textures for Mace Stun, Charge Stun and Intercept Stun
|
||||
- reduced BLP size by 80%
|
||||
- show XiconProfiles on first login
|
||||
- DR bigger icons possible
|
||||
- minor fixes
|
||||
|
||||
### v1.12-Beta
|
||||
- fix classic profile
|
||||
|
||||
### v1.11-Beta
|
||||
- TotemPlates fix after blizzard update
|
||||
|
||||
### v1.10-Beta
|
||||
- fix german and russian client not working
|
||||
- ArenaCountdown loacalization now working for all languages (except itIT...beta has no option to select italian)
|
||||
- Race and Class localization working for all languages
|
||||
- Localization finished for German
|
||||
|
||||
#### v1.09-Beta
|
||||
- fix Blizzard profile not having all modules preconfigured
|
||||
|
||||
#### v1.08-Beta
|
||||
- fix Buffs not showing on class icon
|
||||
- added option highlight to be inside
|
||||
- added option to grow frames vertically
|
||||
- added new profile to XiconProfile (Blizzard raid style)
|
||||
- minor bugfixes
|
||||
|
||||
#### v1.07-Beta
|
||||
|
||||
- CombatIndicator module added
|
||||
|
@ -14,4 +14,5 @@
|
||||
<Include file="libs\AceGUI-3.0-SharedMediaWidgets\widget.xml"/>
|
||||
<Include file="libs\DRData-1.0\DRData-1.0.xml"/>
|
||||
<Include file="libs\LibClassAuras-1.0\lib.xml"/>
|
||||
<Include file="libs\LibSpellRange-1.0\lib.xml"/>
|
||||
</Ui>
|
Reference in New Issue
Block a user