Compare commits
112 Commits
v1.07-Beta
...
v1.17-Beta
Author | SHA1 | Date | |
---|---|---|---|
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 |
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>
|
223
Constants.lua
223
Constants.lua
@ -1,13 +1,18 @@
|
||||
local tbl_sort, select = table.sort, select
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
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
|
||||
@ -70,10 +75,11 @@ function Gladdy:GetSpecBuffs()
|
||||
[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)
|
||||
@ -146,10 +152,11 @@ function Gladdy:GetSpecSpells()
|
||||
[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 +182,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 +422,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 +508,13 @@ function Gladdy:GetImportantAuras()
|
||||
priority = 20,
|
||||
spellID = 31224,
|
||||
},
|
||||
-- Evasion
|
||||
[GetSpellInfo(26669)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 15,
|
||||
priority = 10,
|
||||
spellID = 26669,
|
||||
},
|
||||
|
||||
|
||||
-- Fear
|
||||
@ -505,6 +534,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 +581,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 +611,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)] = {
|
||||
@ -614,7 +660,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 +703,63 @@ function Gladdy:GetImportantAuras()
|
||||
magic = true,
|
||||
spellID = 28730,
|
||||
},
|
||||
-- Shadowsight Buff
|
||||
[GetSpellInfo(34709)] = {
|
||||
track = AURA_TYPE_BUFF,
|
||||
duration = 15,
|
||||
priority = 15,
|
||||
magic = true,
|
||||
spellID = 34709,
|
||||
},
|
||||
}
|
||||
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 +805,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 +873,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
|
||||
@ -842,10 +963,11 @@ function Gladdy:GetCooldownList()
|
||||
[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,
|
||||
@ -911,4 +1033,77 @@ function Gladdy:Racials()
|
||||
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"] = {
|
||||
[60] = "Le combat d'arène commence dans une minute\194\160!",
|
||||
[30] = "Le combat d'arène commence dans trente secondes\194\160!",
|
||||
[15] = "Le combat d'arène commence dans quinze secondes\194\160!",
|
||||
[0] = "Le combat d'arène commence\194\160!",
|
||||
},
|
||||
["ruRU"] = {
|
||||
[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()
|
||||
@ -76,21 +74,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
|
||||
@ -104,8 +91,13 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
|
||||
if not Gladdy.buttons[destUnit].class 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,6 +117,7 @@ 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
|
||||
Gladdy:SpotEnemy(srcUnit, true)
|
||||
@ -143,12 +136,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 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 +148,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 +167,7 @@ function EventListener:ARENA_OPPONENT_UPDATE(unit, updateReason)
|
||||
end
|
||||
end
|
||||
|
||||
local exceptionNames = {
|
||||
local 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
|
||||
@ -213,7 +203,7 @@ 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
|
||||
@ -252,7 +242,3 @@ function EventListener:UNIT_SPELLCAST_SUCCEEDED(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function EventListener:GetOptions()
|
||||
return nil
|
||||
end
|
||||
|
163
Frame.lua
163
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)
|
||||
@ -99,120 +110,166 @@ function Gladdy:CreateFrame()
|
||||
self.anchor:Hide()
|
||||
end
|
||||
|
||||
self.frame:Hide()
|
||||
self.frame:SetAlpha(0)
|
||||
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
|
||||
@ -222,14 +279,13 @@ end
|
||||
|
||||
function Gladdy:HideFrame()
|
||||
if (self.frame) then
|
||||
self.frame:Hide()
|
||||
self.frame:SetAlpha(0)
|
||||
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,9 +301,11 @@ function Gladdy:ToggleFrame(i)
|
||||
self:CreateButton(o)
|
||||
end
|
||||
end
|
||||
self:Reset()
|
||||
self.curBracket = i
|
||||
self:UpdateFrame()
|
||||
self:Test()
|
||||
self.frame:Show()
|
||||
self.frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
|
||||
@ -258,30 +316,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)
|
||||
|
58
Gladdy.lua
58
Gladdy.lua
@ -25,7 +25,7 @@ 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.17
|
||||
Gladdy.version_num = Gladdy.version_major_num + Gladdy.version_minor_num
|
||||
Gladdy.version_releaseType = RELEASE_TYPES.beta
|
||||
Gladdy.version = PREFIX .. Gladdy.version_num .. "-" .. Gladdy.version_releaseType
|
||||
@ -200,11 +200,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" },
|
||||
@ -227,6 +228,15 @@ function Gladdy:OnInitialize()
|
||||
self:Call(v, "Initialize") -- B.E > A.E :D
|
||||
end
|
||||
self:DeleteUnknownOptions(self.db, self.defaults.profile)
|
||||
if Gladdy.db.hideBlizzard == "always" then
|
||||
if IsAddOnLoaded("Blizzard_ArenaUI") then
|
||||
ArenaEnemyFrame1:SetAlpha(0)
|
||||
ArenaEnemyFrame2:SetAlpha(0)
|
||||
ArenaEnemyFrame3:SetAlpha(0)
|
||||
ArenaEnemyFrame4:SetAlpha(0)
|
||||
ArenaEnemyFrame5:SetAlpha(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:OnProfileChanged()
|
||||
@ -241,11 +251,15 @@ function Gladdy:OnEnable()
|
||||
self:RegisterEvent("UPDATE_BATTLEFIELD_STATUS")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
if (IsAddOnLoaded("Clique")) then
|
||||
self:CreateFrame()
|
||||
for i = 1, 5 do
|
||||
self:CreateButton(i)
|
||||
end
|
||||
self.curBracket = 5
|
||||
self:UpdateFrame()
|
||||
self:Reset()
|
||||
|
||||
if (IsAddOnLoaded("Clique")) then
|
||||
ClickCastFrames = ClickCastFrames or {}
|
||||
ClickCastFrames[self.buttons.arena1.secure] = true
|
||||
ClickCastFrames[self.buttons.arena2.secure] = true
|
||||
@ -266,6 +280,7 @@ function Gladdy:OnEnable()
|
||||
|
||||
self:HideFrame()
|
||||
self:ToggleFrame(3)
|
||||
self.showConfig = true
|
||||
end
|
||||
end
|
||||
|
||||
@ -285,7 +300,7 @@ end
|
||||
---------------------------
|
||||
|
||||
function Gladdy:Test()
|
||||
Gladdy.frame.testing = true
|
||||
self.frame.testing = true
|
||||
for i = 1, self.curBracket do
|
||||
local unit = "arena" .. i
|
||||
if (not self.buttons[unit]) then
|
||||
@ -312,6 +327,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()
|
||||
@ -355,6 +374,15 @@ function Gladdy:Reset()
|
||||
for unit in pairs(self.buttons) do
|
||||
self:ResetUnit(unit)
|
||||
end
|
||||
if Gladdy.db.hideBlizzard == "never" or Gladdy.db.hideBlizzard == "arena" then
|
||||
if IsAddOnLoaded("Blizzard_ArenaUI") then
|
||||
ArenaEnemyFrame1:SetAlpha(1)
|
||||
ArenaEnemyFrame2:SetAlpha(1)
|
||||
ArenaEnemyFrame3:SetAlpha(1)
|
||||
ArenaEnemyFrame4:SetAlpha(1)
|
||||
ArenaEnemyFrame5:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Gladdy:ResetUnit(unit)
|
||||
@ -381,7 +409,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
|
||||
@ -400,16 +428,18 @@ function Gladdy:JoinedArena()
|
||||
self.curBracket = 2
|
||||
end
|
||||
|
||||
for i = 1, self.curBracket do
|
||||
if (not self.buttons["arena" .. i]) then
|
||||
self:CreateButton(i)
|
||||
end
|
||||
end
|
||||
|
||||
self:SendMessage("JOINED_ARENA")
|
||||
self:UpdateFrame()
|
||||
self.frame:Show()
|
||||
Gladdy:SendMessage("JOINED_ARENA")
|
||||
self.frame:SetAlpha(1)
|
||||
for i=1, self.curBracket do
|
||||
self.buttons["arena" .. i]:SetAlpha(1)
|
||||
end
|
||||
if Gladdy.db.hideBlizzard == "arena" or Gladdy.db.hideBlizzard == "always" then
|
||||
if IsAddOnLoaded("Blizzard_ArenaUI") then
|
||||
ArenaEnemyFrame1:SetAlpha(0)
|
||||
ArenaEnemyFrame2:SetAlpha(0)
|
||||
ArenaEnemyFrame3:SetAlpha(0)
|
||||
ArenaEnemyFrame4:SetAlpha(0)
|
||||
ArenaEnemyFrame5:SetAlpha(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
## Interface: 20501
|
||||
## Title: Gladdy - TBC
|
||||
## Version: 1.07-Beta
|
||||
## Version: 1.17-Beta
|
||||
## 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/Rukk1.blp
Normal file
BIN
Images/BasicProfiles/Rukk1.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
591
Lang.lua
591
Lang.lua
@ -1,33 +1,34 @@
|
||||
local setmetatable = setmetatable
|
||||
local C_CreatureInfo = C_CreatureInfo
|
||||
|
||||
local GetLocale = GetLocale
|
||||
|
||||
local L = {}
|
||||
|
||||
if (GetLocale() == "ruRU") then
|
||||
-- Races
|
||||
L["Human"] = "Человек"
|
||||
L["Dwarf"] = "Дворф"
|
||||
L["Night Elf"] = "Ночной эльф"
|
||||
L["Gnome"] = "Гном"
|
||||
L["Draenei"] = "Дреней"
|
||||
L["Orc"] = "Орк"
|
||||
L["Undead"] = "Нежить"
|
||||
L["Tauren"] = "Таурен"
|
||||
L["Troll"] = "Тролль"
|
||||
L["Blood Elf"] = "Эльф крови"
|
||||
|
||||
-- Classes
|
||||
L["Druid"] = "Друид"
|
||||
L["Hunter"] = "Охотник"
|
||||
L["Mage"] = "Маг"
|
||||
L["Paladin"] = "Паладин"
|
||||
L["Priest"] = "Жрец"
|
||||
L["Rogue"] = "Разбойник"
|
||||
L["Shaman"] = "Шаман"
|
||||
L["Warlock"] = "Чернокнижник"
|
||||
L["Warrior"] = "Воин"
|
||||
L["Druid"] = C_CreatureInfo.GetClassInfo(11).className
|
||||
L["Hunter"] = C_CreatureInfo.GetClassInfo(3).className
|
||||
L["Mage"] = C_CreatureInfo.GetClassInfo(8).className
|
||||
L["Paladin"] = C_CreatureInfo.GetClassInfo(2).className
|
||||
L["Priest"] = C_CreatureInfo.GetClassInfo(5).className
|
||||
L["Rogue"] = C_CreatureInfo.GetClassInfo(4).className
|
||||
L["Shaman"] = C_CreatureInfo.GetClassInfo(7).className
|
||||
L["Warlock"] = C_CreatureInfo.GetClassInfo(9).className
|
||||
L["Warrior"] = C_CreatureInfo.GetClassInfo(1).className
|
||||
|
||||
-- Races
|
||||
L["Human"] = C_CreatureInfo.GetRaceInfo(1).raceName
|
||||
L["Orc"] = C_CreatureInfo.GetRaceInfo(2).raceName
|
||||
L["Dwarf"] = C_CreatureInfo.GetRaceInfo(3).raceName
|
||||
L["Night Elf"] = C_CreatureInfo.GetRaceInfo(4).raceName
|
||||
L["Undead"] = C_CreatureInfo.GetRaceInfo(5).raceName
|
||||
L["Tauren"] = C_CreatureInfo.GetRaceInfo(6).raceName
|
||||
L["Gnome"] = C_CreatureInfo.GetRaceInfo(7).raceName
|
||||
L["Troll"] = C_CreatureInfo.GetRaceInfo(8).raceName
|
||||
L["Blood Elf"] = C_CreatureInfo.GetRaceInfo(10).raceName
|
||||
L["Draenei"] = C_CreatureInfo.GetRaceInfo(11).raceName
|
||||
|
||||
if (GetLocale() == "ruRU") then
|
||||
-- Specs
|
||||
L["Balance"] = "Баланс"
|
||||
L["Feral"] = "Сила зверя"
|
||||
@ -157,40 +158,7 @@ if (GetLocale() == "ruRU") then
|
||||
L["Color of the cast bar"] = "Цвет полосы применений"
|
||||
L["Background color"] = "Цвет фона полосы"
|
||||
L["Color of the cast bar background"] = "Цвет фона полосы применений"
|
||||
L["Icon position"] "Расположение значка трансляции"
|
||||
|
||||
-- Clicks.lua
|
||||
L["Action #%d"] = "Действие #%d"
|
||||
L["Left Click Enemy 1"] = "Левый клик по цели 1"
|
||||
L["Left Click Enemy 2"] = "Левый клик по цели 2"
|
||||
L["Left Click Enemy 3"] = "Левый клик по цели 3"
|
||||
L["Left Click Enemy 4"] = "Левый клик по цели 4"
|
||||
L["Left Click Enemy 5"] = "Левый клик по цели 5"
|
||||
L["Right Click Enemy 1"] = "Правый клик по цели 1"
|
||||
L["Right Click Enemy 2"] = "Правый клик по цели 2"
|
||||
L["Right Click Enemy 3"] = "Правый клик по цели 3"
|
||||
L["Right Click Enemy 4"] = "Правый клик по цели 4"
|
||||
L["Right Click Enemy 5"] = "Правый клик по цели 5"
|
||||
L["Left button"] = "Левая кнопка"
|
||||
L["Right button"] = "Правая кнопка"
|
||||
L["Middle button"] = "Средняя кнопка"
|
||||
L["Button 4"] = "Кнопка 4"
|
||||
L["Button 5"] = "Кнопка 5"
|
||||
L["None"] = "Не назначено"
|
||||
L["CTRL"] = "CTRL"
|
||||
L["SHIFT"] = "SHIFT"
|
||||
L["ALT"] = "ALT"
|
||||
L["Cast Spell"] = "Применить заклинание"
|
||||
L["Name"] = "Название"
|
||||
L["Select the name of the click option"] = "Выбрать название опции клика"
|
||||
L["Button"] = "Кнопка"
|
||||
L["Select which mouse button to use"] = "Выбрать кнопку мыши для использования"
|
||||
L["Modifier"] = "Модификатор"
|
||||
L["Select which modifier to use"] = "Выбрать модификатор для использования"
|
||||
L["Action"] = "Действите"
|
||||
L["Select what action this mouse button does"] = "Выбрать действие, производимое данной кнопкой мыши"
|
||||
L["Spell name / Macro text"] = "Название заклинания / Текст макроса"
|
||||
L["Use *name* as unit's name. Like a '/rofl *name*'"] = "Используйте *name* в качестве имени игрока. Например, '/rofl *name*'"
|
||||
L["Icon position"] = "Расположение значка трансляции"
|
||||
|
||||
-- Diminishings.lua
|
||||
L["DR Cooldown position"] = "Позиция ДР таймеров"
|
||||
@ -237,31 +205,146 @@ if (GetLocale() == "ruRU") then
|
||||
-- Trinket.lua
|
||||
L["No cooldown count (OmniCC)"] = "Не показывать кулдаун (OmniCC)"
|
||||
L["Disable cooldown timers by addons (reload UI to take effect)"] = "Отключить таймер кулдаунов для аддонов (необходима перезагрузка интерфейса)"
|
||||
elseif (GetLocale() == "deDE") then
|
||||
-- Races
|
||||
L["Human"] = "Mensch"
|
||||
L["Dwarf"] = "Zwerg"
|
||||
L["Night Elf"] = "Nachtelf"
|
||||
L["Gnome"] = "Gnom"
|
||||
L["Draenei"] = "Draenei"
|
||||
L["Orc"] = "Ork"
|
||||
L["Undead"] = "Untoter"
|
||||
L["Tauren"] = "Taure"
|
||||
L["Troll"] = "Тroll"
|
||||
L["Blood Elf"] = "Blutelf"
|
||||
elseif GetLocale() == "deDE" then
|
||||
-- Announcements.lua
|
||||
L["Announcements"] = "Meldungen"
|
||||
L["RESURRECTING: %s (%s)"] = "Wiederbeleben: %s (%s) "
|
||||
L["SPEC DETECTED: %s - %s (%s)"] = "Talenspezalisierung entdeckt: %s - %s (%s)"
|
||||
L["LOW HEALTH: %s (%s)"] = "Niedriges Leben: %s (%s)"
|
||||
L["TRINKET USED: %s (%s)"] = "Insiginie benutzt: %s (%s)"
|
||||
L["TRINKET READY: %s (%s)"] = "Insignie bereit: %s (%s)"
|
||||
L["DRINKING: %s (%s)"] = "Trinken: %s (%s)"
|
||||
L["Self"] = "Selbst"
|
||||
L["Party"] = "Gruppe"
|
||||
L["Raid Warning"] = "Schlachtzugwarnung"
|
||||
L["Blizzard's Floating Combat Text"] = "Blizzard Kampftext"
|
||||
L["Trinket used"] = "Insignie benutzt"
|
||||
L["Announce when an enemy's trinket is used"] = "Warnt, wenn ein Gegner seine Insignie benutzt"
|
||||
L["Trinket ready"] = "Insignie bereit"
|
||||
L["Announce when an enemy's trinket is ready again"] = "Warnt wenn die Insignie eines Gegner wieder bereit ist"
|
||||
L["Drinking"] = "Trinken"
|
||||
L["Announces when enemies sit down to drink"] = "Warnt wenn Gegner sich zum Trinken hinsetzen"
|
||||
L["Resurrection"] = "Wiederbelebung"
|
||||
L["Announces when an enemy tries to resurrect a teammate"] = "Warnt wenn Gegner versuchen Teammitglieder wiederzubeleben"
|
||||
L["New enemies"] = "Neue Gegner"
|
||||
L["Announces when new enemies are discovered"] = "Gibt an, wenn neue Gegner entdeckt wurden"
|
||||
L["Spec Detection"] = "Talent Entdeckung"
|
||||
L["Announces when the spec of an enemy was detected"] = "Gibt an, wenn Talente eines Gegners entdeckt wurden"
|
||||
L["Low health"] = "Wenig Leben"
|
||||
L["Announces when an enemy drops below a certain health threshold"] = "Warnt, wenn das Leben eines Gegners unter einen bestimmten Prozentwert fällt"
|
||||
L["Low health threshold"] = "Prozentwert: Wenig Leben"
|
||||
L["Choose how low an enemy must be before low health is announced"] = "Bestimme wie wenig Leben ein Gegner haben muss, damit vor wenig Leben gewarnt wird"
|
||||
L["Destination"] = "Ziel"
|
||||
L["Choose how your announcements are displayed"] = "Bestimme wo Warnungen dargestellt werden"
|
||||
|
||||
-- Classes
|
||||
L["Druid"] = "Druide"
|
||||
L["Hunter"] = "Jäger"
|
||||
L["Mage"] = "Magier"
|
||||
L["Paladin"] = "Paladin"
|
||||
L["Priest"] = "Priester"
|
||||
L["Rogue"] = "Schurke"
|
||||
L["Shaman"] = "Schamane"
|
||||
L["Warlock"] = "Hexenmeister"
|
||||
L["Warrior"] = "Krieger"
|
||||
-- ArenaCountDown.lua
|
||||
L["Arena Countdown"] = "Arena Countdown"
|
||||
L["Turns countdown before the start of an arena match on/off."] = ""
|
||||
L["Size"] = "Größe"
|
||||
|
||||
-- Specs
|
||||
-- Auras.lua
|
||||
L["Auras"] = "Auren"
|
||||
L["Frame"] = "Frame"
|
||||
L["Cooldown"] = "Abklingzeit"
|
||||
L["No Cooldown Circle"] = "Verstecke Abklingzeitzirkel"
|
||||
L["Cooldown circle alpha"] = "Abklingzeitzirkel Alpha"
|
||||
L["Font"] = "Schrift"
|
||||
L["Font of the cooldown"] = "Schrift der Abklingzeit"
|
||||
L["Font scale"] = "Schriftskalierung"
|
||||
L["Scale of the text"] = "Skalierungfaktor des Texts"
|
||||
L["Font color"] = "Schriftfarbe"
|
||||
L["Color of the text"] = "Farbe des Texts"
|
||||
L["Border"] = "Rahmen"
|
||||
L["Border style"] = "Rahmen Stil"
|
||||
L["Buff color"] = "Buff Farbe"
|
||||
L["Debuff color"] = "Debuff Farbe"
|
||||
L["Check All"] = "Alle auswählen"
|
||||
L["Uncheck All"] = "Alle abwählen"
|
||||
L["Enabled"] = "Eingeschaltet"
|
||||
L["Priority"] = "Priorität"
|
||||
|
||||
-- BuffsDebuffs.lua
|
||||
L["Buffs and Debuffs"] = "Buffs und Debuffs"
|
||||
L["Enabled Buffs and Debuffs module"] = "Buffs und Debuffs Modul einschalten"
|
||||
L["Show CC"] = "Zeige Crowdcontrol"
|
||||
L["Shows all debuffs, which are displayed on the ClassIcon as well"] = "Zeigt alle Buffs & Debuffs, die auch auf dem Klassensymbol dargestellt werden"
|
||||
L["Buffs"] = "Buffs"
|
||||
L["Size & Padding"] = "Größe und Abstand"
|
||||
L["Icon Size"] = "Symbol Größe"
|
||||
L["Size of the DR Icons"] = "Größe der DR Symbole"
|
||||
L["Icon Width Factor"] = "Symbol Breitenfaktor"
|
||||
L["Stretches the icon"] = "Streckt das Symbol"
|
||||
L["Icon Padding"] = "Symbol Abstand"
|
||||
L["Space between Icons"] = "Abstand zwischen den Symbolen"
|
||||
L["Position"] = "Position"
|
||||
L["Aura Position"] = "Aura Position"
|
||||
L["Position of the aura icons"] = "Position der Aura Symbole"
|
||||
L["Top"] = "Oben"
|
||||
L["Bottom"] = "Unten"
|
||||
L["Left"] = "Links"
|
||||
L["Right"] = "Rechts"
|
||||
L["Grow Direction"] = "Richtung"
|
||||
L["Grow Direction of the aura icons"] = "In welche Richtung die Symbole wachsen"
|
||||
L["Horizontal offset"] = "Horizontaler Offset"
|
||||
L["Vertical offset"] = "Vertikaler Offset"
|
||||
L["Alpha"] = "Alpha"
|
||||
L["Debuffs"] = "Debuffs"
|
||||
L["Dynamic Timer Color"] = "Dynamische Textfarbe"
|
||||
L["Show dynamic color on cooldown numbers"] = "Verändert die Farbe des Textes dynamisch"
|
||||
L["Color of the cooldown timer and stacks"] = "Farbe der Abklingzeit und Stapel"
|
||||
L["Spell School Colors"] = "Zauberart Farbe"
|
||||
L["Spell School Colors Enabled"] = "Zauberart Farbe Eingeschaltet"
|
||||
L["Show border colors by spell school"] = "Färbt den Rahmen entspechend der Zauberart"
|
||||
L["Curse"] = "Fluch"
|
||||
L["Color of the border"] = "Farbe des Rahmens"
|
||||
L["Magic"] = "Magie"
|
||||
L["Poison"] = "Gift"
|
||||
L["Physical"] = "Physisch"
|
||||
L["Immune"] = "Immun"
|
||||
L["Disease"] = "Erkrankung"
|
||||
L["Aura"] = "Aura"
|
||||
L["Form"] = "Form"
|
||||
|
||||
-- Castbar.lua
|
||||
L["Cast Bar"] = "Zauberleiste"
|
||||
L["Bar"] = "Balken"
|
||||
L["Bar Size"] = "Balken Größe"
|
||||
L["Bar height"] = "Balken Höhe"
|
||||
L["Height of the bar"] = "Höhe des Balken"
|
||||
L["Bar width"] = "Balken Weite"
|
||||
L["Width of the bars"] = "Weite des Balken"
|
||||
L["Texture"] = "Textur"
|
||||
L["Bar texture"] = "Balken Textur"
|
||||
L["Texture of the bar"] = "Textur des Balken"
|
||||
L["Bar color"] = "Balken Farbe"
|
||||
L["Color of the cast bar"] = "Farbe des Balken"
|
||||
L["Background color"] = "Hintergrundfarbe"
|
||||
L["Color of the cast bar background"] = "Hinergrundfarbe des Zauberbalkens"
|
||||
L["Border size"] = "Rahmen Größe"
|
||||
L["Status Bar border"] = "Balken Rahmen"
|
||||
L["Status Bar border color"] = "Balken Rahmen Farbe"
|
||||
L["Icon"] = "Symbol"
|
||||
L["Icon size"] = "Symbolgröße"
|
||||
L["Icon border"] = "Symbolrahmen"
|
||||
L["Icon border color"] = "Farbe Symbolrahmen"
|
||||
L["Spark"] = "Funke"
|
||||
L["Spark enabled"] = "Funke eingeschaltet"
|
||||
L["Spark color"] = "Funkenfarbe"
|
||||
L["Color of the cast bar spark"] = "Farbe des Zauberleisten Funke"
|
||||
L["Font of the castbar"] = "Schriftart der Zauberleiste"
|
||||
L["Font size"] = "Schriftgröße"
|
||||
L["Size of the text"] = "Schriftgröße"
|
||||
L["Format"] = "Darstellung"
|
||||
L["Timer Format"] = "Zeitdarstellung"
|
||||
L["Remaining"] = "Verbleibend"
|
||||
L["Total"] = "Total"
|
||||
L["Both"] = "Beides"
|
||||
L["Castbar position"] = "Zauberleistenposition"
|
||||
L["Icon position"] = "Symbolposition"
|
||||
L["Offsets"] = "Offsets"
|
||||
|
||||
-- Classicon.lua
|
||||
L["Class Icon"] = "Klassensymbol"
|
||||
L["Balance"] = "Gleichgewicht"
|
||||
L["Feral"] = "Wilder Kampf"
|
||||
L["Restoration"] = "Wiederherstellung"
|
||||
@ -286,6 +369,145 @@ elseif (GetLocale() == "deDE") then
|
||||
L["Destruction"] = "Zerstörung"
|
||||
L["Arms"] = "Waffen"
|
||||
L["Fury"] = "Furor"
|
||||
L["Show Spec Icon"] = "Zeige Spezialisierungssymbol"
|
||||
L["Shows Spec Icon once spec is detected"] = "Zeigt das Talentspezialisierungs Symbol sobald die Spezialisierung erkannt wurde"
|
||||
L["Icon width factor"] = "Symbol Breitenfaktor"
|
||||
L["This changes positions with trinket"] = "Das tauscht die Position mit dem Trinket, wenn auf der gleichen Seite."
|
||||
L["Border color"] = "Rahmenfarbe"
|
||||
|
||||
--CombatIndicator.lua
|
||||
L["Combat Indicator"] = "Kampfindikator"
|
||||
L["Enable Combat Indicator icon"] = "Schalte Kampfindikator ein"
|
||||
L["Anchor"] = "Anker"
|
||||
L["This changes the anchor of the ci icon"] = "Dies ändert den Anker des Kampfindikatorsymbols"
|
||||
L["This changes position relative to its anchor of the ci icon"] = "Dies ändert die Position relativ zum Anker"
|
||||
|
||||
-- Cooldowns.lua
|
||||
L["Cooldowns"] = "Abklingzeiten"
|
||||
L["Enabled cooldown module"] = ""
|
||||
L["Cooldown size"] = "Abklingzeit Größe"
|
||||
L["Size of each cd icon"] = "Größe eines einzelnen Symbols"
|
||||
L["Max Icons per row"] = "Maximale Anzahl an Symbolen pro Reihe"
|
||||
L["Scale of the font"] = "Skalierung der Schrift"
|
||||
L["Anchor of the cooldown icons"] = "Anker der Abklingzeiten Symbole"
|
||||
L["Grow Direction of the cooldown icons"] = "Richtung der Abklingzeiten Symbole"
|
||||
L["Offset"] = "Offset"
|
||||
|
||||
-- Diminishings.lua
|
||||
L["Diminishings"] = "DR"
|
||||
L["Enabled DR module"] = "DR einschalten"
|
||||
L["DR Cooldown position"] = "DR Position"
|
||||
L["Position of the cooldown icons"] = "Position der Symbole"
|
||||
L["DR Border Colors"] = "DR Rahmen Farbe"
|
||||
L["Dr Border Colors Enabled"] = "DR Rahmen Farben eingeschaltet"
|
||||
L["Colors borders of DRs in respective DR-color below"] = "Färbt die Rahmen der DR Symbole je nach Stärke der Verminderung"
|
||||
L["Half"] = "Hälfte"
|
||||
L["Quarter"] = "Viertel"
|
||||
L["Categories"] = "Kategorien"
|
||||
L["Force Icon"] = "Erzwinge Symbol"
|
||||
L["Icon of the DR"] = "Symbol des DR"
|
||||
|
||||
-- ExportImport.lua
|
||||
L["Export Import"] = "Exportieren Importieren"
|
||||
L["Profile Export Import"] = "Profile Exportieren Importieren"
|
||||
|
||||
-- Healthbar.lua
|
||||
L["Health Bar"] = "Lebensbalken"
|
||||
L["DEAD"] = "TOT"
|
||||
L["LEAVE"] = "VERLASSEN"
|
||||
L["General"] = "Allgemein"
|
||||
L["Color of the status bar background"] = "Farbe des Balkenhintergrunds"
|
||||
L["Font of the bar"] = "Schriftart des Balken"
|
||||
L["Name font size"] = "Schriftgröße des Namen"
|
||||
L["Size of the name text"] = "Schriftgröße des Namen"
|
||||
L["Health font size"] = "Schriftgröße der Gesundheit"
|
||||
L["Size of the health text"] = "Schriftgröße der Gesundheit"
|
||||
L["Size of the border"] = "Rahmengröße"
|
||||
L["Health Bar Text"] = "Lebensbalken Text"
|
||||
L["Show name text"] = "Namen zeigen"
|
||||
L["Show the units name"] = "Zeige den Namen des Gegners"
|
||||
L["Show ArenaX"] = "ArenaX zeigen"
|
||||
L["Show 1-5 as name instead"] = "Zeigt 1-5 anstatt des Namens"
|
||||
L["Show the actual health"] = "Zeige die momentane Gesundheit"
|
||||
L["Show the actual health on the health bar"] = "Zeigt die momentane Gesundheit"
|
||||
L["Show max health"] = "Zeige maximale Gesundheit"
|
||||
L["Show max health on the health bar"] = "Zeige maximale Gesundheit"
|
||||
L["Show health percentage"] = "Zeige Prozentwert"
|
||||
L["Show health percentage on the health bar"] = "Zeige Prozentwert der Gesundheit"
|
||||
|
||||
-- Highlight.lua
|
||||
L["Highlight"] = "Hervorhebung"
|
||||
L["Show Inside"] = "Zeige innen"
|
||||
L["Show Highlight border inside of frame"] = "Zeige die Hervorhebung innerhalb des Frames"
|
||||
L["Colors"] = "Farben"
|
||||
L["Target border color"] = "Rahmenfarbe deines Ziels"
|
||||
L["Color of the selected targets border"] = "Rahmenfarbe deines momentanen Ziels"
|
||||
L["Focus border color"] = "Rahmenfarbe deines Fokus"
|
||||
L["Color of the focus border"] = "Rahmenfarbe deines momentanen Fokus"
|
||||
L["Highlight target"] = "Hervorhebung des Ziels"
|
||||
L["Toggle if the selected target should be highlighted"] = "Ziel hervorheben ein/ausschalten"
|
||||
L["Show border around target"] = "Zeige Rahmen um dein Ziel"
|
||||
L["Toggle if a border should be shown around the selected target"] = "Zeigt Rahmen um dein momentanes Ziel"
|
||||
L["Show border around focus"] = "Zeige Rahmen um dein Fokus"
|
||||
L["Toggle of a border should be shown around the current focus"] = "Zeigt Rahmen um dein Fokusziel"
|
||||
|
||||
-- Pets.lua
|
||||
L["Pets"] = "Begleiter"
|
||||
L["Enables Pets module"] = "Schaltet das Begleiter Modul ein"
|
||||
L["Width of the bar"] = "Breite des Balkens"
|
||||
L["Health color"] = "Gesundheitsfarbe"
|
||||
L["Color of the status bar"] = "Farbe des Balkens"
|
||||
L["Portrait"] = "Portrait"
|
||||
L["Health Values"] = "Gesundheitswerte"
|
||||
|
||||
-- Powerbar.lua
|
||||
L["Power Bar"] = "Mana/Energie Balken"
|
||||
L["Power Bar Text"] = "Mana/Energie Balken Text"
|
||||
L["Power Texts"] = "Mana/Energie Balken Texte"
|
||||
L["Show race"] = "Rasse zeigen"
|
||||
L["Show spec"] = "Spezialisierung zeigen"
|
||||
L["Show the actual power"] = "Zeige das momentane Mana"
|
||||
L["Show the actual power on the power bar"] = "Zeige das momentane Mana"
|
||||
L["Show max power"] = "Zeige das maximale Mana"
|
||||
L["Show max power on the power bar"] = "Zeige das maximale Mana"
|
||||
L["Show power percentage"] = "Zeige Prozentwert"
|
||||
L["Show power percentage on the power bar"] = "Zeige Prozentwert"
|
||||
|
||||
-- Racial.lua
|
||||
L["Racial"] = "Rassenfertigkeit"
|
||||
L["Enable racial icon"] = "Rassenfertigkeit einschalten"
|
||||
L["This changes the anchor of the racial icon"] = "Dies ändert den Anker des Rassenfertigkeitssymbols"
|
||||
L["This changes position relative to its anchor of the racial icon"] = "Dies ändert doe Position relativ zu seinem Anker"
|
||||
|
||||
-- TotemPlates.lua
|
||||
L["Totem Plates"] = "Totem Symbole"
|
||||
L["Customize Totems"] = "Individuelle Totemeinstellungen"
|
||||
L["Custom totem name"] = "Individueller Totem Name"
|
||||
L["Totem General"] = "Totems Allgemein"
|
||||
L["Turns totem icons instead of nameplates on or off. (Requires reload)"] = ""
|
||||
L["Show friendly"] = "Zeige für freundliche"
|
||||
L["Show enemy"] = "Zeige für feindliche"
|
||||
L["Totem size"] = "Totem Größe"
|
||||
L["Size of totem icons"] = "Größe der Totemsymbole"
|
||||
L["Font of the custom totem name"] = "Schriftart der benutzerdefinierten Totem Namen"
|
||||
L["Apply alpha when no target"] = "Wende den Alpha-Wert an, wenn kein Ziel anvisiert ist"
|
||||
L["Always applies alpha, even when you don't have a target. Else it is 1."] = "Alpha immer anwenden, auch wenn man kein Ziel anvisiert hat. Sonst ist der Alpha-Wert 1"
|
||||
L["Apply alpha when targeted"] = "Wende den Alpha-Wert an, wenn das Totem als Ziel anvisiert ist"
|
||||
L["Always applies alpha, even when you target the totem. Else it is 1."] = "Alpha immer anwenden, auch wenn das Totem als Ziel anvisiert ist. Sonst ist der Alpha-Wert 1"
|
||||
L["All totem border alphas (configurable per totem)"] = "Alpha aller Totems"
|
||||
L["Totem icon border style"] = "Totem Rahmenstil"
|
||||
L["All totem border color"] = "Rahmenfarbe aller Totems"
|
||||
|
||||
-- Trinket.lua
|
||||
L["Trinket"] = "Insignie"
|
||||
L["Enable trinket icon"] = "Insignie einschalten"
|
||||
L["This changes positions of the trinket"] = "Dies ändert die Position der Insignie"
|
||||
|
||||
-- XiconProfiles.lua
|
||||
L["Profile"] = "Profil"
|
||||
|
||||
-- Frame.lua
|
||||
L["Gladdy - drag to move"] = "Gladdy - ziehe um zu bewegen"
|
||||
|
||||
-- Gladdy.lua
|
||||
L["Welcome to Gladdy!"] = "Willkommen bei Gladdy!"
|
||||
@ -293,185 +515,50 @@ elseif (GetLocale() == "deDE") then
|
||||
L["Valid slash commands are:"] = "Gültige slash Befehle sind:"
|
||||
L["If this is not your first run please lock or move the frame to prevent this from happening."] = "Wenn dies nicht dein erster Start ist, sperre oder bewege das Bild um diese Meldung zu verhindern."
|
||||
|
||||
-- Frame.lua
|
||||
L["Gladdy - drag to move"] = "Gladdy - ziehe um zu bewegen"
|
||||
|
||||
-- Options.lua
|
||||
L["Announcements"] = "Meldungen"
|
||||
L["Announcement settings"] = "Meldungseinstellungen"
|
||||
L["Auras"] = "Auren"
|
||||
L["Auras settings"] = "Aureneinstellungen"
|
||||
L["Castbar"] = "Zauberleiste"
|
||||
L["Castbar settings"] = "Zauberleisteneinstellungen"
|
||||
L["Classicon"] = "Klassensymbol"
|
||||
L["Classicon settings"] = "Klassensymboleinstellungen"
|
||||
L["Clicks"] = "Klicks"
|
||||
L["Clicks settings"] = "Klickeinstellungen"
|
||||
L["Diminishings"] = "DR"
|
||||
L["Diminishings settings"] = "DR Einstellungen"
|
||||
L["Healthbar"] = "Lebensleiste"
|
||||
L["Healthbar settings"] = "Lebensleisteneinstellungen"
|
||||
L["Highlight"] = "warnung"
|
||||
L["Highlight settings"] = "Warnungseinstellungen"
|
||||
L["Nameplates"] = "Namensplaketten"
|
||||
L["Nameplates settings"] = "Namensplaketteneinstellungen"
|
||||
L["Powerbar"] = "Powerleiste"
|
||||
L["Powerbar settings"] = "Powerleisteneinstellungen"
|
||||
L["Score"] = "Score"
|
||||
L["Score settings"] = "Scoreeinstellungen"
|
||||
L["Trinket"] = "Insignie"
|
||||
L["Trinket settings"] = "Insignieneinstellungen"
|
||||
L["Reset module"] = "Model zurücksetzen"
|
||||
L["Reset module to defaults"] = "Modul auf Standardeinstellungen zurücksetzen"
|
||||
L["settings"] = "Einstellungen"
|
||||
L["Reset module"] = "Modul zurücksetzen"
|
||||
L["Reset module to defaults"] = "Setze das Modul auf seine Standardwerte zurück"
|
||||
L["No settings"] = "Keine Einstellungen"
|
||||
L["Module has no settings"] = "Modul hat keine Einstellungen"
|
||||
L["General"] = "ОAllgemein"
|
||||
L["General settings"] = "Allgemeine Einstellungen"
|
||||
L["Lock frame"] = "Sperre Bild"
|
||||
L["Toggle if frame can be moved"] = "Aktivieren falls das Bild bewegt werden kann"
|
||||
L["Grow frame upwards"] = "Bild von unten nach oben aufbauen"
|
||||
L["If enabled the frame will grow upwards instead of downwards"] = "Falls aktiviert, wird das Bild von unten nach oben aufgebaut"
|
||||
L["Frame scale"] = "Bildskalierung"
|
||||
L["Scale of the frame"] = "Skalierung des Bildes"
|
||||
L["Frame padding"] = "Bild Unterlage"
|
||||
L["Padding of the frame"] = "Unterlage des Bildes"
|
||||
L["Frame color"] = "Bildfarbe"
|
||||
L["Color of the frame"] = "Farbe des Bildes"
|
||||
L["Bar width"] = "Leistenbreite"
|
||||
L["Width of the bars"] = "Breite der Leisten"
|
||||
L["Bottom margin"] = "Unterer Abstand"
|
||||
L["Margin between each button"] = "Abstand zwischen jedem Buttom"
|
||||
|
||||
-- Announcements.lua
|
||||
L["RESURRECTING: %s (%s)"] = "Wiederbeleben: %s (%s) "
|
||||
L["SPEC DETECTED: %s - %s (%s)"] = "Talenspezalisierung entdeckt: %s - %s (%s)"
|
||||
L["LOW HEALTH: %s (%s)"] = "Niedriges Leben: %s (%s)"
|
||||
L["TRINKET USED: %s (%s)"] = "Insiginie benutzt: %s (%s)"
|
||||
L["TRINKET READY: %s (%s)"] = "Insignie bereit: %s (%s)"
|
||||
L["DRINKING: %s (%s)"] = "Trinken: %s (%s)"
|
||||
L["Self"] = "Selbst"
|
||||
L["Party"] = "Gruppe"
|
||||
L["Raid Warning"] = "Schlachtzugwarnung"
|
||||
L["Blizzard's Floating Combat Text"] = "Blizzard Kampftext"
|
||||
L["MikScrollingBattleText"] = "MikScrollingBattleText"
|
||||
L["Scrolling Combat Text"] = "Scrolling Combat Text"
|
||||
L["Parrot"] = "Parrot"
|
||||
L["Drinking"] = "Trinken"
|
||||
L["Announces when enemies sit down to drink"] = "Warnt wenn Gegner sich zum Trinken hinsetzen"
|
||||
L["Resurrection"] = "Wiederbelebung"
|
||||
L["Announces when an enemy tries to resurrect a teammate"] = "Warnt wenn Gegner versuchen Teammitglieder wiederzubeleben"
|
||||
L["New enemies"] = "Neue Gegner"
|
||||
L["Announces when new enemies are discovered"] = "Gibt an, wenn neue Gegner entdeckt wurden"
|
||||
L["Spec Detection"] = "Talent Entdeckung"
|
||||
L["Announces when the spec of an enemy was detected"] = "Gibt an, wenn Talente eines Gegners entdeckt wurden"
|
||||
L["Low health"] = "Wenig Leben"
|
||||
L["Announces when an enemy drops below a certain health threshold"] = "Warnt, wenn das Leben eines Gegners unter einen bestimmten Prozentwert fällt"
|
||||
L["Low health threshold"] = "Prozentwert: Wenig Leben"
|
||||
L["Choose how low an enemy must be before low health is announced"] = "Bestimme wie wenig Leben ein Gegner haben muss, damit vor wenig Leben gewarnt wird"
|
||||
L["Trinket used"] = "Insignie benutzt"
|
||||
L["Announce when an enemy's trinket is used"] = "Warnt, wenn ein Gegner seine Insignie benutzt"
|
||||
L["Trinket ready"] = "Insignie bereit"
|
||||
L["Announce when an enemy's trinket is ready again"] = "Warnt wenn die Insignie eines Gegner wieder bereit ist"
|
||||
L["Destination"] = "Ziel"
|
||||
L["Choose how your announcements are displayed"] = "Bestimme wo Warnungen dargestellt werden"
|
||||
|
||||
-- Auras.lua
|
||||
L["Font color"] = "Schriftfarbe"
|
||||
L["Color of the text"] = "Farbe der Schrift"
|
||||
L["Font size"] = "Schriftgröße"
|
||||
L["Size of the text"] = "Größe der Schrift"
|
||||
|
||||
-- Castbar.lua
|
||||
L["Bar height"] = "Leistenhöhe"
|
||||
L["Height of the bar"] = "Höhe der Leiste"
|
||||
L["Bar texture"] = "Leistentextur"
|
||||
L["Texture of the bar"] = "Textur der Leiste"
|
||||
L["Bar color"] = "Leistenfarbe"
|
||||
L["Color of the cast bar"] = "Farbe der Zauberleiste"
|
||||
L["Background color"] = "Hintergrundfarbe"
|
||||
L["Color of the cast bar background"] = "Hintergrundfarbe der Zauberleiste"
|
||||
L["Icon position"] "Position des Zauberleistensymbols"
|
||||
|
||||
-- Clicks.lua
|
||||
L["Action #%d"] = "Aktion #%d"
|
||||
L["Left Click Enemy 1"] = "Linksklick Gegner 1"
|
||||
L["Left Click Enemy 2"] = "Linksklick Gegner 2"
|
||||
L["Left Click Enemy 3"] = "Linksklick Gegner 3"
|
||||
L["Left Click Enemy 4"] = "Linksklick Gegner 4"
|
||||
L["Left Click Enemy 5"] = "Linksklick Gegner 5"
|
||||
L["Right Click Enemy 1"] = "Rechtsklick Gegner 1"
|
||||
L["Right Click Enemy 2"] = "Rechtsklick Gegner 2"
|
||||
L["Right Click Enemy 3"] = "Rechtsklick Gegner 3"
|
||||
L["Right Click Enemy 4"] = "Rechtsklick Gegner 4"
|
||||
L["Right Click Enemy 5"] = "Rechtsklick Gegner 5"
|
||||
L["Left button"] = "Linke Taste"
|
||||
L["Right button"] = "Rechte Taste"
|
||||
L["Middle button"] = "Mittlere Taste"
|
||||
L["Button 4"] = "Maus 4"
|
||||
L["Button 5"] = "Maus 5"
|
||||
L["None"] = "Keine"
|
||||
L["CTRL"] = "STRG"
|
||||
L["SHIFT"] = "SHIFT"
|
||||
L["ALT"] = "ALT"
|
||||
L["Cast Spell"] = "Wirke Zauber"
|
||||
L["Name"] = "Name"
|
||||
L["Select the name of the click option"] = "Wähle einen Namen für die Klickoption"
|
||||
L["Button"] = "Taste"
|
||||
L["Select which mouse button to use"] = "Wähle welche Maustaste genutzt werden soll"
|
||||
L["Modifier"] = "Modifier"
|
||||
L["Select which modifier to use"] = "Wähle welcher Modifier benutzt werdne soll"
|
||||
L["Action"] = "Aktion"
|
||||
L["Select what action this mouse button does"] = "Wähle welche Aktion die Maustaste durchführt"
|
||||
L["Spell name / Macro text"] = "Zaubername / Makrotext"
|
||||
L["Use *name* as unit's name. Like a '/rofl *name*'"] = "Benutzt *name* als Gegnername. Zum Beispiel '/rofl *name*'"
|
||||
|
||||
-- Diminishings.lua
|
||||
L["DR Cooldown position"] = "Position des DR Cooldowns"
|
||||
L["Position of the cooldown icons"] = "Position des DR Cooldowns"
|
||||
L["Left"] = "Links"
|
||||
L["Right"] = "Rechts"
|
||||
L["Icon Size"] = "Symbolgröße"
|
||||
L["Size of the DR Icons"] = "Größe des DR Symbols"
|
||||
|
||||
-- Healthbar.lua
|
||||
L["Show the actual health"] = "Zeige das Leben an"
|
||||
L["Show the actual health on the health bar"] = "Zeige das Leben auf der Lebensanzeige an"
|
||||
L["Show max health"] = "Zeige Maximalleben an"
|
||||
L["Show max health on the health bar"] = "Zeige Maximalleben auf der Lebensanzeige an"
|
||||
L["Show health percentage"] = "Zeige prozentuales Leben"
|
||||
L["Show health percentage on the health bar"] = "Zeige prozentuales Leben auf der Lebensanzeige an"
|
||||
|
||||
-- Highlight.lua
|
||||
L["Border size"] = "Rahmengröße"
|
||||
L["Target border color"] = "Zielrahmenfarbe"
|
||||
L["Color of the selected targets border"] = "Farbe des Rahmens des gewählten Ziels"
|
||||
L["Focus border color"] = "Focusrahmenfarbe"
|
||||
L["Color of the focus border"] = "Farbe des Focusrahmens"
|
||||
L["Raid leader border color"] = "Schlachtzugleiterrahmenfarbe"
|
||||
L["Color of the raid leader border"] = "Farbe des Rahmens für den Schlachtzugleiter"
|
||||
L["Highlight target"] = "Highlight Ziel"
|
||||
L["Toggle if the selected target should be highlighted"] = "Включите, если необходима подсветка цели"
|
||||
L["Show border around target"] = "Zeige Rahmen um das Ziel an"
|
||||
L["Toggle if a border should be shown around the selected target"] = "Auswählen wenn ein Ramhen um das ausgewählte Ziel angezeigt werden soll"
|
||||
L["Show border around focus"] = "Zeige Rahmen um Focus"
|
||||
L["Toggle of a border should be shown around the current focus"] = "Auswählen wenn ein Ramhen um das ausgewählte Focusziel angezeigt werden soll"
|
||||
L["Show border around raid leader"] = "Zeige Rahmen um Schlachtzugleiter"
|
||||
L["Toggle if a border should be shown around the raid leader"] = "Auswählen wenn ein Ramhen um den ausgewählten SChlachtzugleiter angezeigt werden soll"
|
||||
|
||||
-- Powerbar.lua
|
||||
L["Show the actual power"] = "Zeige genaue Power"
|
||||
L["Show the actual power on the power bar"] = "Zeige die genaue Power in der Powerleiste "
|
||||
L["Show max power"] = "Zeige Maximalpower"
|
||||
L["Show max power on the power bar"] = "Zeige Maximalpower in der Powerbau"
|
||||
L["Show power percentage"] = "Zeige prozentuale Power"
|
||||
L["Show power percentage on the power bar"] = "Zeige prozentuale Power in der Powerbau"
|
||||
L["Color of the status bar background"] = "Hintergrundfarbe der Statusleiste"
|
||||
|
||||
-- Trinket.lua
|
||||
L["No cooldown count (OmniCC)"] = "Keine Cooldownanzeige (OmniCC)"
|
||||
L["Disable cooldown timers by addons (reload UI to take effect)"] = "Deaktiviere Cooldownanzeige durch Addons (UI neu laden um zu wirken)"
|
||||
L["Lock frame"] = "Sperre Frame"
|
||||
L["Toggle if frame can be moved"] = "Aktivieren falls das Frame bewegt werden kann"
|
||||
L["Grow frame upwards"] = "Frame von unten nach oben aufbauen"
|
||||
L["If enabled the frame will grow upwards instead of downwards"] = "Falls aktiviert, wird das Frame von unten nach oben aufgebaut"
|
||||
L["Down"] = "Runter"
|
||||
L["Up"] = "Hoch"
|
||||
L["Frame General"] = "Frame Allgemein"
|
||||
L["Frame scale"] = "Frame Skalierung"
|
||||
L["Scale of the frame"] = "Skalierung des Frames"
|
||||
L["Frame padding"] = "Symbolabstand"
|
||||
L["Padding of the frame"] = "Abstand zwischen den Elementen des Frames"
|
||||
L["Frame width"] = "Frame Breite"
|
||||
L["Margin"] = "Frame Abstand"
|
||||
L["Margin between each button"] = "Abstand zwischen den Arena Einheiten"
|
||||
L["Cooldown General"] = "Abklingzeiten Allgemein"
|
||||
L["Font General"] = "Schriftart Allgemein"
|
||||
L["General Font"] = "Allgemeine Schriftart"
|
||||
L["Font color text"] = "Schriftfarbe von text"
|
||||
L["Font color timer"] = "Schriftfarbe von Abklingzeiten"
|
||||
L["Color of the timers"] = "Farbe der Abklingzeiten"
|
||||
L["Icons General"] = "Symbol Allgemein"
|
||||
L["Icon border style"] = "Rahmenstil"
|
||||
L["This changes the border style of all icons"] = "Dies ändert den Rahmenstil aller Symbole"
|
||||
L["This changes the border color of all icons"] = "Dies ändert die Rahmenfarbe aller Symbole"
|
||||
L["Statusbar General"] = "Balken Allgemein"
|
||||
L["Statusbar texture"] = "Balken Textur"
|
||||
L["This changes the texture of all statusbar frames"] = "Dies ändert die Textur aller Balken"
|
||||
L["Statusbar border style"] = "Balken Rahmenstil"
|
||||
L["This changes the border style of all statusbar frames"] = "Dies ändert den Rahmenstil aller Balken"
|
||||
L["Statusbar border offset divider (smaller is higher offset)"] = "Rahmenstil offset Quotient"
|
||||
L["Offset of border to statusbar (in case statusbar shows beyond the border)"] = "Offset des Rahmens zur Statusbar (falls der Balken hinter dem Rahmen erscheint)"
|
||||
L["Statusbar border color"] = "Balken Rahmenfarbe"
|
||||
L["This changes the border color of all statusbar frames"] = "Dies ändert die Rahmenfarbe aller Balken"
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- Superhack allowing use key as value if not present in table
|
||||
LibStub("Gladdy").L = setmetatable(L, {
|
||||
__index = function(t, k)
|
||||
|
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)--]]
|
||||
@ -206,9 +211,7 @@ function Announcements:GetOptions()
|
||||
["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"],
|
||||
["msbt"] = L["MikScrollingBattleText"],
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -1,9 +1,11 @@
|
||||
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 GetLocale = GetLocale
|
||||
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,6 +15,7 @@ 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\\";
|
||||
@ -44,6 +47,8 @@ function ACDFrame:Initialize()
|
||||
self.ACDNumOne = ACDNumOne
|
||||
|
||||
self:RegisterMessage("JOINED_ARENA")
|
||||
self:RegisterMessage("ENEMY_SPOTTED")
|
||||
self:RegisterMessage("UNIT_SPEC")
|
||||
end
|
||||
|
||||
function ACDFrame.OnUpdate(self, elapse)
|
||||
@ -82,50 +87,35 @@ 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()
|
||||
self:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
|
||||
self:SetScript("OnEvent", ACDFrame.OnEvent)
|
||||
self.endTime = GetTime() + 70
|
||||
self:SetScript("OnUpdate", ACDFrame.OnUpdate)
|
||||
end
|
||||
|
||||
function ACDFrame:ENEMY_SPOTTED()
|
||||
ACDFrame:Reset()
|
||||
end
|
||||
|
||||
function ACDFrame:UNIT_SPEC()
|
||||
ACDFrame:Reset()
|
||||
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
|
||||
|
||||
@ -153,6 +143,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 +162,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 +174,7 @@ function ACDFrame:GetOptions()
|
||||
min = 64,
|
||||
max = 512,
|
||||
step = 16,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
end
|
||||
|
@ -13,10 +13,21 @@ local function defaultSpells(auraType)
|
||||
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 k,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 +37,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 +52,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,19 +82,9 @@ 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")
|
||||
@ -90,7 +95,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.LSM:Fetch("font", Gladdy.db.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 +196,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)
|
||||
@ -123,28 +215,79 @@ 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.LSM:Fetch("font", Gladdy.db.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, _, icon
|
||||
|
||||
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)
|
||||
spellName, _, icon = GetSpellInfo(7922)
|
||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
self:AURA_GAIN(unit,AURA_TYPE_DEBUFF, 7922, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
self:SPELL_INTERRUPT(unit,19244, select(1, GetSpellInfo(19244)), "physical", 25396, select(1, GetSpellInfo(25396)), 64)
|
||||
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)
|
||||
spellName = select(1, GetSpellInfo(27010)) .. " " .. select(1, GetSpellInfo(16689))
|
||||
_, _, icon = GetSpellInfo(27010)
|
||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
self:AURA_FADE(unit,AURA_TYPE_DEBUFF)
|
||||
self:AURA_GAIN(unit,AURA_TYPE_DEBUFF, 27010, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
self:SPELL_INTERRUPT(unit,19244, select(1, GetSpellInfo(19244)), "physical", 25396, select(1, GetSpellInfo(25396)), 64)
|
||||
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)
|
||||
spellName, _, icon = GetSpellInfo(34709)
|
||||
self:AURA_FADE(unit, AURA_TYPE_BUFF)
|
||||
self:AURA_GAIN(unit,AURA_TYPE_BUFF, 34709, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
spellName, _, icon = GetSpellInfo(18425)
|
||||
--self:AURA_FADE(unit, AURA_TYPE_DEBUFF)
|
||||
--self:AURA_GAIN(unit,AURA_TYPE_DEBUFF, 18425, spellName, icon, self.auras[spellName].duration, GetTime() + self.auras[spellName].duration)
|
||||
end
|
||||
end
|
||||
|
||||
@ -155,35 +298,40 @@ function Auras:JOINED_ARENA()
|
||||
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 +342,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 +359,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,7 +438,125 @@ 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 = v.val.type,
|
||||
order = i + 13,
|
||||
hasAlpha = true,
|
||||
width = "0.8",
|
||||
set = function(info, 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
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -327,6 +573,13 @@ function Auras:GetOptions()
|
||||
name = "Buffs",
|
||||
order = 5,
|
||||
args = Auras:GetAuraOptions(AURA_TYPE_BUFF)
|
||||
},
|
||||
interruptList = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Interrupts",
|
||||
order = 6,
|
||||
args = Auras:GetInterruptOptions()
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -336,7 +589,7 @@ 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
|
||||
@ -347,7 +600,7 @@ 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
|
||||
@ -362,19 +615,25 @@ function Auras:GetAuraOptions(auraType)
|
||||
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 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"],
|
||||
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)
|
||||
Gladdy.db.auraListDefault[tostring(k)].enabled = value
|
||||
@ -397,6 +656,82 @@ function Auras:GetAuraOptions(auraType)
|
||||
set = function(info, value)
|
||||
Gladdy.db.auraListDefault[tostring(k)].priority = value
|
||||
end,
|
||||
width = "full",
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
return options
|
||||
end
|
||||
|
||||
function Auras:GetInterruptOptions()
|
||||
local options = {
|
||||
ckeckAll = {
|
||||
order = 1,
|
||||
width = "0.7",
|
||||
name = L["Check All"],
|
||||
type = "execute",
|
||||
func = function(info)
|
||||
for k,v 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(info)
|
||||
for k,v in pairs(defaultInterrupts()) do
|
||||
Gladdy.db.auraListInterrupts[k].enabled = false
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
local auras = {}
|
||||
for k,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(info, value)
|
||||
Gladdy.db.auraListInterrupts[tostring(k)].enabled = value
|
||||
end,
|
||||
get = function(info)
|
||||
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(info)
|
||||
return Gladdy.db.auraListInterrupts[tostring(k)].priority
|
||||
end,
|
||||
set = function(info, 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
|
||||
@ -277,7 +273,10 @@ 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,6 +897,7 @@ function BuffsDebuffs:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 10,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -918,6 +927,7 @@ function BuffsDebuffs:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
buffsDynamicColor = Gladdy:option({
|
||||
type = "toggle",
|
||||
|
@ -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,
|
||||
@ -165,7 +166,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
|
||||
@ -439,6 +440,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]
|
||||
@ -458,23 +460,21 @@ function Castbar:JOINED_ARENA()
|
||||
--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 +482,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 +496,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 +504,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 +524,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 +546,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 +576,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 50,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
castBarWidth = option({
|
||||
type = "range",
|
||||
@ -574,6 +586,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
headerTexture = {
|
||||
type = "header",
|
||||
@ -614,6 +627,7 @@ function Castbar:GetOptions()
|
||||
min = 0.5,
|
||||
max = Gladdy.db.castBarHeight/2,
|
||||
step = 0.5,
|
||||
width = "full",
|
||||
}),
|
||||
castBarBorderStyle = option({
|
||||
type = "select",
|
||||
@ -632,7 +646,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
icon = {
|
||||
type = "group",
|
||||
name = "Icon",
|
||||
name = L["Icon"],
|
||||
order = 2,
|
||||
args = {
|
||||
headerSize = {
|
||||
@ -647,6 +661,7 @@ function Castbar:GetOptions()
|
||||
min = 0,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
headerBorder = {
|
||||
type = "header",
|
||||
@ -669,7 +684,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
spark = {
|
||||
type = "group",
|
||||
name = "Spark",
|
||||
name = L["Spark"],
|
||||
order = 3,
|
||||
args = {
|
||||
header = {
|
||||
@ -693,7 +708,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
font = {
|
||||
type = "group",
|
||||
name = "Font",
|
||||
name = L["Font"],
|
||||
order = 4,
|
||||
args = {
|
||||
header = {
|
||||
@ -723,6 +738,7 @@ function Castbar:GetOptions()
|
||||
order = 4,
|
||||
min = 1,
|
||||
max = 20,
|
||||
width = "full",
|
||||
}),
|
||||
headerFormat = {
|
||||
type = "header",
|
||||
@ -743,7 +759,7 @@ function Castbar:GetOptions()
|
||||
},
|
||||
position = {
|
||||
type = "group",
|
||||
name = "Position",
|
||||
name = L["Position"],
|
||||
order = 5,
|
||||
args = {
|
||||
header = {
|
||||
@ -781,6 +797,7 @@ function Castbar:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
castBarYOffset = option({
|
||||
type = "range",
|
||||
@ -789,6 +806,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
|
||||
@ -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 = "Target", button = "1", modifier = "", action = "target", spell = "" },
|
||||
{ name = "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 k, 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 k, 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
|
@ -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",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
@ -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
|
||||
@ -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)
|
||||
@ -287,19 +295,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")
|
||||
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")
|
||||
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("")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 0)
|
||||
if (self.timeLeft <= 0) then
|
||||
Cooldowns:CooldownReady(button, spellId, frame)
|
||||
end
|
||||
@ -575,14 +577,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 +603,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 +614,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -620,6 +624,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownMaxIconsPerLine = Gladdy:option({
|
||||
type = "range",
|
||||
@ -628,6 +633,7 @@ function Cooldowns:GetOptions()
|
||||
min = 3,
|
||||
max = 14,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -645,6 +651,7 @@ function Cooldowns:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -653,6 +660,7 @@ function Cooldowns:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 9,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -682,6 +690,7 @@ function Cooldowns:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownFontColor = Gladdy:colorOption({
|
||||
type = "color",
|
||||
@ -736,6 +745,7 @@ function Cooldowns:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
cooldownYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -744,6 +754,7 @@ function Cooldowns:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -777,7 +788,7 @@ function Cooldowns:GetOptions()
|
||||
cooldowns = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Cooldowns",
|
||||
name = L["Cooldowns"],
|
||||
order = 4,
|
||||
args = Cooldowns:GetCooldownOptions(),
|
||||
},
|
||||
|
@ -93,11 +93,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)
|
||||
@ -162,7 +158,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
|
||||
@ -359,14 +355,14 @@ function Diminishings:GetOptions()
|
||||
},
|
||||
drEnabled = Gladdy:option({
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
name = L["Enabled"],
|
||||
desc = L["Enabled DR module"],
|
||||
order = 3,
|
||||
}),
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
icon = {
|
||||
@ -385,8 +381,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 +393,7 @@ function Diminishings:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
drIconPadding = Gladdy:option({
|
||||
type = "range",
|
||||
@ -405,6 +403,7 @@ function Diminishings:GetOptions()
|
||||
min = 0,
|
||||
max = 10,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -422,6 +421,7 @@ function Diminishings:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
drCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -430,6 +430,7 @@ function Diminishings:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 9,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -466,6 +467,7 @@ function Diminishings:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
}
|
||||
},
|
||||
@ -501,6 +503,7 @@ function Diminishings:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
drYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -509,6 +512,7 @@ function Diminishings:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
@ -21,8 +21,6 @@ end
|
||||
local ExportImport = Gladdy:NewModule("Export Import", nil, {
|
||||
})
|
||||
|
||||
|
||||
|
||||
local export = AceGUI:Create("Frame")
|
||||
export:SetWidth(550)
|
||||
export.sizer_se:Hide()
|
||||
@ -85,6 +83,10 @@ end)
|
||||
import:AddChild(importClearButton)
|
||||
import.clearButton = importClearButton
|
||||
|
||||
local deletedOptions = { --TODO backward compatibility Imports on deleted options
|
||||
growUp = true
|
||||
}
|
||||
|
||||
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"
|
||||
@ -98,7 +100,7 @@ function ExportImport:CheckDeserializedOptions(tbl, refTbl, str)
|
||||
end
|
||||
for k,v in pairs(tbl) do
|
||||
if refTbl[k] == nil then
|
||||
return false, str .. "." .. k .. " does not exist"
|
||||
--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)
|
||||
|
@ -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",
|
||||
@ -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
|
||||
@ -164,7 +176,7 @@ function Healthbar:UpdateFrame(unit)
|
||||
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))
|
||||
@ -222,7 +234,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
|
||||
@ -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.LSM:Fetch("border", Gladdy.db.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.LSM:Fetch("border", Gladdy.db.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.LSM:Fetch("border", Gladdy.db.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.LSM:Fetch("border", Gladdy.db.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.LSM:Fetch("border", Gladdy.db.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.LSM:Fetch("border", Gladdy.db.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()
|
||||
@ -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)
|
||||
@ -155,7 +156,7 @@ function Pets:CreateFrame(unitId)
|
||||
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")
|
||||
@ -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",
|
||||
@ -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,9 +140,15 @@ function Powerbar:UpdateFrame(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local healthBar = Gladdy.modules.Healthbar.frames[unit]
|
||||
local healthBar = Gladdy.modules["Health Bar"].frames[unit]
|
||||
|
||||
|
||||
if not Gladdy.db.powerBarEnabled then
|
||||
powerBar:Hide()
|
||||
return
|
||||
else
|
||||
powerBar:Show()
|
||||
end
|
||||
powerBar.bg:SetTexture(Gladdy.LSM:Fetch("statusbar", Gladdy.db.powerBarTexture))
|
||||
powerBar.bg:SetVertexColor(Gladdy.db.powerBarBgColor.r, Gladdy.db.powerBarBgColor.g, Gladdy.db.powerBarBgColor.b, Gladdy.db.powerBarBgColor.a)
|
||||
|
||||
@ -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",
|
||||
|
@ -45,33 +45,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)
|
||||
elseif timeLeft < 60 and timeLeft >= 30 then
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
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)
|
||||
elseif timeLeft < 30 and timeLeft >= 11 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
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
|
||||
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")
|
||||
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("")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -134,7 +123,7 @@ 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 margin = (Gladdy.db.highlightInset and 0 or 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)
|
||||
@ -226,7 +215,7 @@ function Racial:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
general = {
|
||||
@ -237,7 +226,7 @@ function Racial:GetOptions()
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Size"],
|
||||
order = 4,
|
||||
order = 1,
|
||||
},
|
||||
racialSize = Gladdy:option({
|
||||
type = "range",
|
||||
@ -245,7 +234,8 @@ function Racial:GetOptions()
|
||||
min = 5,
|
||||
max = 100,
|
||||
step = 1,
|
||||
order = 4,
|
||||
order = 2,
|
||||
width = "full",
|
||||
}),
|
||||
racialWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -253,7 +243,8 @@ function Racial:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
order = 6,
|
||||
order = 3,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -271,6 +262,7 @@ function Racial:GetOptions()
|
||||
type = "toggle",
|
||||
name = L["No Cooldown Circle"],
|
||||
order = 7,
|
||||
width = "full",
|
||||
}),
|
||||
racialCooldownAlpha = Gladdy:option({
|
||||
type = "range",
|
||||
@ -279,6 +271,7 @@ function Racial:GetOptions()
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
order = 8,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -308,6 +301,7 @@ function Racial:GetOptions()
|
||||
min = 0.1,
|
||||
max = 2,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -318,7 +312,7 @@ function Racial:GetOptions()
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Position"],
|
||||
name = L["Icon position"],
|
||||
order = 4,
|
||||
},
|
||||
racialAnchor = Gladdy:option({
|
||||
@ -335,7 +329,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 +346,7 @@ function Racial:GetOptions()
|
||||
min = -400,
|
||||
max = 400,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
racialYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -360,6 +355,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"] = 20252,
|
||||
["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 = "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 - %dyds", 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 - %dyds", 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
|
178
Modules/ShadowsightTimer.lua
Normal file
178
Modules/ShadowsightTimer.lua
Normal file
@ -0,0 +1,178 @@
|
||||
local floor, str_len, tostring, str_sub, str_find, pairs = math.floor, string.len, tostring, string.sub, 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: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: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)
|
||||
self.timerFrame:Show()
|
||||
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
|
@ -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,7 +113,7 @@ 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",
|
||||
@ -160,8 +167,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(info) return Gladdy.db.npTotemColors["totem" .. indexedList[i].id].customText end,
|
||||
set = function(info, value) Gladdy.db.npTotemColors["totem" .. indexedList[i].id].customText = value Gladdy:UpdateFrame() end
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -220,7 +227,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()
|
||||
@ -247,10 +283,31 @@ function TotemPlates:UpdateFrameOnce()
|
||||
nameplate.gladdyTotemFrame.totemName:SetFont(Gladdy.LSM:Fetch("font", Gladdy.db.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)
|
||||
@ -261,38 +318,12 @@ 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)
|
||||
@ -309,7 +340,113 @@ function TotemPlates:NAME_PLATE_UNIT_ADDED(...)
|
||||
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: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 i,v in ipairs(addonFrames) do
|
||||
v:Show()
|
||||
end
|
||||
else
|
||||
for i,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 +458,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 +521,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 +548,7 @@ function TotemPlates:GetOptions()
|
||||
group = {
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
name = "Frame",
|
||||
name = L["Frame"],
|
||||
order = 4,
|
||||
args = {
|
||||
icon = {
|
||||
@ -432,6 +569,7 @@ function TotemPlates:GetOptions()
|
||||
min = 20,
|
||||
max = 100,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
npTotemPlatesWidthFactor = Gladdy:option({
|
||||
type = "range",
|
||||
@ -441,6 +579,7 @@ function TotemPlates:GetOptions()
|
||||
min = 0.5,
|
||||
max = 2,
|
||||
step = 0.05,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -451,7 +590,7 @@ function TotemPlates:GetOptions()
|
||||
args = {
|
||||
header = {
|
||||
type = "header",
|
||||
name = L["Icon"],
|
||||
name = L["Font"],
|
||||
order = 1,
|
||||
},
|
||||
npTremorFont = Gladdy:option({
|
||||
@ -470,6 +609,7 @@ function TotemPlates:GetOptions()
|
||||
min = 1,
|
||||
max = 50,
|
||||
step = 0.1,
|
||||
width = "full",
|
||||
}),
|
||||
npTremorFontXOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -479,6 +619,7 @@ function TotemPlates:GetOptions()
|
||||
min = -300,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
npTremorFontYOffset = Gladdy:option({
|
||||
type = "range",
|
||||
@ -488,6 +629,7 @@ function TotemPlates:GetOptions()
|
||||
min = -300,
|
||||
max = 300,
|
||||
step = 1,
|
||||
width = "full",
|
||||
}),
|
||||
},
|
||||
},
|
||||
@ -521,7 +663,7 @@ function TotemPlates:GetOptions()
|
||||
min = 0,
|
||||
max = 1,
|
||||
step = 0.1,
|
||||
width = "double",
|
||||
width = "full",
|
||||
order = 23,
|
||||
get = function(info)
|
||||
local alphas = GetTotemOptions()
|
||||
@ -590,7 +732,7 @@ function TotemPlates:GetOptions()
|
||||
},
|
||||
npTotemColors = {
|
||||
order = 50,
|
||||
name = "Customize Totems",
|
||||
name = L["Customize Totems"],
|
||||
type = "group",
|
||||
childGroups = "tree",
|
||||
args = select(2, Gladdy:GetTotemColors())
|
||||
|
@ -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)
|
||||
elseif timeLeft < 60 and timeLeft >= 30 then
|
||||
self.cooldownFont:SetTextColor(1, 1, 0)
|
||||
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)
|
||||
elseif timeLeft < 30 and timeLeft >= 11 then
|
||||
self.cooldownFont:SetTextColor(1, 0.7, 0)
|
||||
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: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")
|
||||
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("")
|
||||
end
|
||||
Gladdy:FormatTimer(self.cooldownFont, self.timeLeft, self.timeLeft < 10, true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -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,6 +1,8 @@
|
||||
local str_match, tonumber, tostring = string.match, 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
|
||||
@ -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
|
||||
|
@ -34,12 +34,61 @@ function XiconProfiles:ApplyClassic()
|
||||
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: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 +97,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"] .. " No Pet",
|
||||
order = 6,
|
||||
},
|
||||
classicProfileNoPet = {
|
||||
type = "execute",
|
||||
func = function()
|
||||
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
|
||||
XiconProfiles:ApplyClassicNoPet()
|
||||
end,
|
||||
name = " ",
|
||||
desc = "Classic " .. L["Profile"] .. " 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 +135,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 +157,28 @@ 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,
|
||||
},
|
||||
}
|
||||
end
|
104
Options.lua
104
Options.lua
@ -1,4 +1,6 @@
|
||||
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 InterfaceOptionsFrame_OpenToFrame = InterfaceOptionsFrame_OpenToFrame
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
@ -6,21 +8,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 +130,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 +152,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 +190,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()
|
||||
@ -187,16 +226,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 = {
|
||||
@ -238,13 +292,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 +378,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 +559,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 +567,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 +585,7 @@ function Gladdy:SetupOptions()
|
||||
Gladdy.db.cooldownBorderColor = rgb
|
||||
Gladdy.db.drBorderColor = rgb
|
||||
Gladdy.db.trinketBorderColor = rgb
|
||||
Gladdy.db.racialBorderColor = rgb
|
||||
Gladdy:UpdateFrame()
|
||||
end,
|
||||
},
|
||||
|
125
README.md
125
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.17-Beta Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.17-Beta/Gladdy_TBC-Classic_v1.17-Beta.zip)
|
||||
|
||||
###### <a target="_blank" rel="noopener noreferrer" href="https://www.paypal.me/xiconqoo/10"><img src="https://raw.githubusercontent.com/XiconQoo/Gladdy/readme-media/Paypal-Donate.png" height="30" style="margin-top:-30px;position:relative;top:20px;"></a> Please consider donating if you like my work
|
||||
|
||||
### 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,85 @@ 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.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