Compare commits

...

140 Commits

Author SHA1 Message Date
90b146e433 Merge branch 'release/v1.17' into main 2021-07-26 17:47:22 +02:00
61f79adda2 bump version and update readme 2021-07-26 17:46:32 +02:00
9b8c6a1426 allow import of values not in db... will be ignored anyways 2021-07-26 17:34:36 +02:00
d44ac29f43 cleanup 2021-07-26 17:32:25 +02:00
751e84c61d added single background for all frames 2021-07-26 17:30:46 +02:00
f92b3a4964 fix taint (Gladdy show in combat) 2021-07-26 17:01:04 +02:00
c2fec39202 update Klimp BLP 2021-07-26 14:55:38 +02:00
9f1bda3e80 ArenaX to X 2021-07-26 14:55:23 +02:00
fdeea258be Rukk1 profile added to XiconProfiles 2021-07-26 14:35:46 +02:00
960a98d244 Rukk1 profile added to XiconProfiles 2021-07-26 14:35:37 +02:00
82ec1460f8 fix feign death 2021-07-26 14:35:20 +02:00
23b9e2dfae buffs debuffs updated testmode - only show auras that are enabled 2021-07-26 14:35:01 +02:00
755a3e52b5 fix entering arena in combat bug 2021-07-26 12:58:40 +02:00
5767bc7ae3 updated klimp profile + added rukk1 profile 2021-07-26 12:51:23 +02:00
b1070d070a added banish to auras 2021-07-26 12:50:52 +02:00
5f4ab71a5a enhanced totemplates functionality 2021-07-26 11:46:30 +02:00
c43228f0b9 hide blizzard frames 2021-07-26 11:30:24 +02:00
b54ed1cda1 add evasion to auras 2021-07-26 11:28:57 +02:00
19d0460501 add all modifier to clicks module 2021-07-26 11:28:41 +02:00
cb6e519afe add MSBT to Announcements 2021-07-26 11:28:04 +02:00
d9f0c1491a option show seconds or milliseconds added 2021-07-26 11:27:32 +02:00
17a983fad6 Shadowshight timer lockable 2021-07-26 11:20:54 +02:00
4e0ea70bfa Merge tag 'ci-disable' into develop
ci-disable hotfix
2021-06-22 12:19:19 +02:00
da54c659bc Merge branch 'hotfix/ci-disable' into main 2021-06-22 12:19:11 +02:00
6be94215b9 CI disable hotfix 2021-06-22 12:18:45 +02:00
964a4b4f88 Merge tag 'v1.16' into develop
v1.16
2021-06-22 12:08:00 +02:00
03a55395b8 Merge branch 'release/v1.16' into main 2021-06-22 12:07:50 +02:00
8409ac1b96 bump version + readme 2021-06-22 12:07:15 +02:00
d653c76e37 stealth unit when rangecheck disabled 2021-06-22 12:04:59 +02:00
984c22a861 Merge tag 'entangling-roots-ng' into develop
v1.15-Beta hotfix nature's grasp
2021-06-20 14:03:06 +02:00
ede4b93ad8 Merge branch 'hotfix/entangling-roots-ng' into main 2021-06-20 14:02:49 +02:00
ca211e047f bump version and readme 2021-06-20 14:02:26 +02:00
8121cf3c6c nature's grasp added to auras 2021-06-20 14:01:03 +02:00
5b348b760c Merge tag 'button-fix-up' into develop
v1.14-Beta hotfix
2021-06-20 13:16:05 +02:00
6a66bcb0ca Merge branch 'hotfix/button-fix-up' into main 2021-06-20 13:15:51 +02:00
50716f3f63 fix button secure grow direction up 2021-06-20 13:15:27 +02:00
9dab6b7299 Merge tag 'miraage-mention' into develop
miraage readme
2021-06-20 11:12:43 +02:00
43bd5af2cc Merge branch 'hotfix/miraage-mention' into main 2021-06-20 11:12:32 +02:00
9780922fec readme - miraage 2021-06-20 11:12:06 +02:00
2c21a6e770 Merge tag 'v1.13-Beta' into develop
v1.13-Beta
2021-06-20 02:57:50 +02:00
88b769c12d Merge branch 'release/v1.13-Beta' into main 2021-06-20 02:57:40 +02:00
4ff3ed487b bump version and edit readme 2021-06-20 02:57:04 +02:00
92dc847909 show xiconprofiles on first login 2021-06-20 02:46:52 +02:00
fa01d38989 add interrupts to auras 2021-06-20 02:30:28 +02:00
326af8e796 fix cooldowns trigger 2021-06-20 02:30:03 +02:00
af17c7e1b9 fix clicks 2021-06-20 02:27:27 +02:00
4148e775a9 shadowsight announce option added 2021-06-20 01:00:55 +02:00
0d7bd3c688 clicks fix 2021-06-20 00:55:06 +02:00
2988177128 adding cooldowns Swiftmend & Berserker Rage 2021-06-20 00:54:31 +02:00
b17e58f558 pets mouseover macros enabled 2021-06-20 00:50:06 +02:00
9edb632efc compressed blps 2021-06-17 19:15:24 +02:00
56de506ef1 buffs debuffs force test auras 2021-06-17 16:59:22 +02:00
6c471a0fad RangeCheck added ENEMY_SPOTTED 2021-06-17 16:43:28 +02:00
6f5cb0498b DR bigger icons possible 2021-06-17 16:40:19 +02:00
df2ff4c9e7 castbar arena4-5 2021-06-17 16:40:02 +02:00
b03b05b2bb classic profile no pet added 2021-06-17 16:39:40 +02:00
09a07c7201 safe unit death on UNIT_HEALTH events 2021-06-16 14:34:17 +02:00
152573124f reset powerType on Gladdy:Reset 2021-06-16 14:33:48 +02:00
3378cfcd0b import string classic profile updated 2021-06-16 14:12:49 +02:00
53228a0e39 leader highlight commented out 2021-06-16 14:12:11 +02:00
cbf8c1a13b totem plates fix UpdateFrameOnce 2021-06-16 14:11:34 +02:00
993de572cd range check fix class colors 2021-06-16 14:10:49 +02:00
f0c0286708 cooldowns enable/disable in testmode 2021-06-16 14:10:09 +02:00
20a654c810 Merge tag 'classic-profile' into develop
v1.12-Beta
2021-06-16 10:07:15 +02:00
c5f2ee1eff Merge branch 'hotfix/classic-profile' into main 2021-06-16 10:07:06 +02:00
4eda8cea8f bump version 2021-06-16 10:06:33 +02:00
fb953530b6 fix classic profile 2021-06-16 10:05:33 +02:00
bc1a617b6e Clicks description example for macro 2021-06-16 02:08:00 +02:00
505154e699 adding Clicks module again 2021-06-16 01:14:11 +02:00
5776dde270 fix aura UpdateFrame 2021-06-16 00:14:18 +02:00
0b9c33b867 mouseover macros now possible 2021-06-15 17:10:31 +02:00
d7f31dbdab Merge branch 'feature/totemplates-compatibility' into develop 2021-06-15 17:09:51 +02:00
b363df73a3 TotemPlates compatible with:
- Plater
- KUI Nameplates
- NeatPlates
- TidyPlates ThreatPlates
- TukUI
- ElvUI
2021-06-15 17:09:25 +02:00
54e0aa4a47 Auras sorting by name and alt textures 2021-06-15 12:20:33 +02:00
c970fe576f Auras add altName, altTexture and
- Blackout Stun
- Charge Stun
- Intercept Stun
- Improved Hamstring
- Mace Stun
- Storm Herald Stun
- Shadowsight Buff
2021-06-15 12:19:55 +02:00
2be103fb88 readme 2021-06-15 11:01:15 +02:00
4cd4ff982c Merge tag 'totemplates-fix' into develop
v1.11-Beta
2021-06-15 09:11:04 +02:00
9d26713dc1 Merge branch 'hotfix/totemplates-fix' into main 2021-06-15 09:10:55 +02:00
db1e3da6fc totemplates fix & bump version 2021-06-15 09:10:27 +02:00
5cad55e91a honorable mentions 2021-06-15 09:07:23 +02:00
5972ef8c05 cleanup 2021-06-15 09:06:50 +02:00
779e81727c performance tweaks 2021-06-15 09:06:40 +02:00
0c4409fe16 hide blizzard 2021-06-15 09:06:32 +02:00
85f63e590b fix aura border hide in testmode 2021-06-15 09:06:21 +02:00
da5a8ea67d powerbar enable/disable 2021-06-15 09:06:05 +02:00
4f370f4e63 send version check by group type 2021-06-15 09:05:50 +02:00
06884ae043 shadowsight timer added 2021-06-15 09:05:32 +02:00
7b0bf921c4 Range Check added 2021-06-15 09:05:20 +02:00
a83c1ad0c2 castbar enable/disable 2021-06-15 09:05:07 +02:00
8ba1f84047 Merge tag 'v1.10-Beta' into develop
v1.10-Beta
2021-05-24 13:12:19 +02:00
4721324a2a Merge branch 'release/v1.10-Beta' into main 2021-05-24 13:12:12 +02:00
51e484eadd minor fixes module names 2021-05-24 13:11:36 +02:00
46f379c1e4 bump version v1.10-Beta 2021-05-24 12:54:36 +02:00
5e42a9b51f fix ArenaX option being overwritten by unit name 2021-05-24 12:53:33 +02:00
df58544f6e cleanup 2021-05-24 12:44:23 +02:00
43518055f0 Localization 2021-05-24 12:41:21 +02:00
9ef174e290 Merge tag 'v1.09-Beta' into develop
v1.09-Beta
2021-05-22 15:02:42 +02:00
a60119caa2 Merge branch 'release/v1.09-Beta' into main 2021-05-22 15:02:35 +02:00
1546e3db6e bump version 2021-05-22 15:02:12 +02:00
82a9a014e4 - fix Blizzard Profile 2021-05-22 15:00:35 +02:00
a9a1a77dd3 Merge tag 'v1.08-Beta' into develop
v1.08-Beta
2021-05-22 14:25:00 +02:00
084fad0074 Merge branch 'release/v1.08-Beta' into main 2021-05-22 14:24:51 +02:00
2b9e219839 - added blizzard profile
- bump version
2021-05-22 14:24:20 +02:00
ba8ea87863 klimp profile aura border colors reset to default 2021-05-22 13:52:59 +02:00
f498a0dde1 TODO 2021-05-22 13:42:55 +02:00
673dc72b3b minor bugfixes 2021-05-22 13:42:47 +02:00
6da33b6c68 grow direction added 2021-05-22 13:41:42 +02:00
0c6cae0b04 highlight inset option added 2021-05-22 13:41:31 +02:00
ded321e772 fix AuraModule not showing Buffs 2021-05-22 13:29:48 +02:00
7015bb989e Announcement default options changed 2021-05-22 13:28:46 +02:00
eaeccf5595 CombatIndicator set border properly 2021-05-22 13:28:27 +02:00
c7d07c62ee Merge tag 'v1.07-Beta' into develop
v1.07-Beta
2021-05-20 01:32:45 +02:00
cf804546c2 Merge branch 'release/v1.07-Beta' into main 2021-05-20 01:32:35 +02:00
467b459898 bump version and update readme 2021-05-20 01:32:08 +02:00
0d9cbc8f45 DRData cleanup 2021-05-20 01:24:20 +02:00
2c858e1c84 XiconProfile image update 2021-05-20 01:23:55 +02:00
ffc5d32b80 delete Bindings.xml 2021-05-20 01:11:03 +02:00
1956b3a568 BuffDebuff options width for icons updated 2021-05-20 01:07:20 +02:00
84f542b3b8 add a couple buffs to LibClassAuras 2021-05-20 01:06:42 +02:00
ccf7d08832 add blessing of sacrifice and intervene to auras 2021-05-20 01:06:03 +02:00
2e093950e2 cleanup 2021-05-20 00:16:18 +02:00
2f9356f8de classicon warrior slight change 2021-05-20 00:16:09 +02:00
8c4a70fd04 general options updated to apply font/borders/etc for all frames 2021-05-20 00:15:50 +02:00
cac0124f1a XiconProfiles updated 2021-05-20 00:15:06 +02:00
cef9de3819 cleanup 2021-05-19 19:33:22 +02:00
a84178edbf /gladdy test1-5 now possible 2021-05-19 19:33:13 +02:00
c05fab9454 spec icon option added to Classicon module 2021-05-19 19:32:31 +02:00
be54619576 arena1-5 for name option added 2021-05-19 19:31:13 +02:00
c70560e66a Highlight remove framestrata 2021-05-19 19:30:54 +02:00
de4adaec16 fix PowerBar text updates 2021-05-19 19:30:46 +02:00
01d748f37e combat indicator fix anchoring 2021-05-19 19:30:40 +02:00
ad130af188 click through frames health/power bar 2021-05-19 19:30:32 +02:00
67edecf8d1 arena countdown refactor 2021-05-19 19:29:59 +02:00
e01b86e1e6 cleanup Totemplates 2021-05-19 16:35:45 +02:00
8b69f5ef93 CombatIndicator module added 2021-05-19 16:35:26 +02:00
4f774b1ddb mask applied to icons 2021-05-19 14:57:29 +02:00
3a846add3b totem icons removed and mask applied 2021-05-19 14:56:38 +02:00
9dfec29f16 add mask texture for icons 2021-05-19 13:55:55 +02:00
28d33d2f9a Merge tag 'aura-fix' into develop
v1.06-Beta hotfix
2021-05-18 18:31:33 +02:00
ee1a78000e Merge tag 'v1.05-Beta' into develop
v1.05-Beta
2021-05-18 16:47:54 +02:00
52 changed files with 4873 additions and 2055 deletions

View File

@ -1,38 +1,31 @@
<Bindings>
<Binding name="GLADDYBUTTON1_LEFT" header="GLADDY" category="ADDONS"/>
<Binding name="GLADDYBUTTON2_LEFT" category="ADDONS"/>
<Binding name="GLADDYBUTTON3_LEFT" category="ADDONS"/>
<Binding name="GLADDYBUTTON4_LEFT" category="ADDONS"/>
<Binding name="GLADDYBUTTON5_LEFT" category="ADDONS"/>
<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="ADDONS"/>
<Binding name="GLADDYBUTTON2_RIGHT" category="ADDONS"/>
<Binding name="GLADDYBUTTON3_RIGHT" category="ADDONS"/>
<Binding name="GLADDYBUTTON4_RIGHT" category="ADDONS"/>
<Binding name="GLADDYBUTTON5_RIGHT" category="ADDONS"/>
<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="ADDONS"/>
<Binding name="GLADDYBUTTON2_MIDDLE" category="ADDONS"/>
<Binding name="GLADDYBUTTON3_MIDDLE" category="ADDONS"/>
<Binding name="GLADDYBUTTON4_MIDDLE" category="ADDONS"/>
<Binding name="GLADDYBUTTON5_MIDDLE" category="ADDONS"/>
<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="ADDONS"/>
<Binding name="GLADDYBUTTON2_BUTTON4" category="ADDONS"/>
<Binding name="GLADDYBUTTON3_BUTTON4" category="ADDONS"/>
<Binding name="GLADDYBUTTON4_BUTTON4" category="ADDONS"/>
<Binding name="GLADDYBUTTON5_BUTTON4" category="ADDONS"/>
<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="ADDONS"/>
<Binding name="GLADDYBUTTON2_BUTTON5" category="ADDONS"/>
<Binding name="GLADDYBUTTON3_BUTTON5" category="ADDONS"/>
<Binding name="GLADDYBUTTON4_BUTTON5" category="ADDONS"/>
<Binding name="GLADDYBUTTON5_BUTTON5" category="ADDONS"/>
<Binding header="GLADDYTRINKET" name="GLADDYTRINKET1" category="ADDONS"/>
<Binding name="GLADDYTRINKET2" category="ADDONS"/>
<Binding name="GLADDYTRINKET3" category="ADDONS"/>
<Binding name="GLADDYTRINKET4" category="ADDONS"/>
<Binding name="GLADDYTRINKET5" category="ADDONS"/>
<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>

View File

@ -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
@ -69,11 +74,12 @@ function Gladdy:GetSpecBuffs()
[GetSpellInfo(29838)] = L["Arms"], -- Second Wind
[GetSpellInfo(12292)] = L["Arms"], -- Death Wish
}
}
function Gladdy:GetSpecBuffs()
return specBuffs
end
function Gladdy:GetSpecSpells()
return {
local specSpells = {
-- DRUID
[GetSpellInfo(33831)] = L["Balance"], -- Force of Nature
[GetSpellInfo(33983)] = L["Feral"], -- Mangle (Cat)
@ -145,11 +151,12 @@ function Gladdy:GetSpecSpells()
[GetSpellInfo(30335)] = L["Fury"], -- Bloodthirst
[GetSpellInfo(12809)] = L["Protection"], -- Concussion Blow
[GetSpellInfo(30022)] = L["Protection"], -- Devastation
}
}
function Gladdy:GetSpecSpells()
return specSpells
end
function Gladdy:GetImportantAuras()
return {
local importantAuras = {
-- Cyclone
[GetSpellInfo(33786)] = {
track = AURA_TYPE_DEBUFF,
@ -175,6 +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,
@ -366,6 +380,13 @@ function Gladdy:GetImportantAuras()
priority = 10,
spellID = 1044,
},
-- Blessing of Sacrifice
[GetSpellInfo(6940)] = {
track = AURA_TYPE_BUFF,
duration = 30,
priority = 12,
spellID = 6940,
},
-- Divine Shield
[GetSpellInfo(642)] = {
track = AURA_TYPE_BUFF,
@ -401,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,
@ -479,6 +508,13 @@ function Gladdy:GetImportantAuras()
priority = 20,
spellID = 31224,
},
-- Evasion
[GetSpellInfo(26669)] = {
track = AURA_TYPE_BUFF,
duration = 15,
priority = 10,
spellID = 26669,
},
-- Fear
@ -498,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,
@ -538,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,
@ -567,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)] = {
@ -599,7 +652,41 @@ function Gladdy:GetImportantAuras()
priority = 20,
spellID = 8178
},
--Intervene
[GetSpellInfo(3411)] = {
track = AURA_TYPE_BUFF,
duration = 10,
priority = 10,
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)] = {
@ -616,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"] = {
@ -671,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
},
@ -738,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
@ -826,11 +962,12 @@ function Gladdy:GetCooldownList()
["Dwarf"] = {
[13908] = { cd = 600, spec = L["Discipline"], }, -- Desperate Prayer
},
}
}
function Gladdy:GetCooldownList()
return cooldownList
end
function Gladdy:Racials()
return {
local racials = {
["Scourge"] = {
[7744] = true, -- Will of the Forsaken
duration = 120,
@ -895,5 +1032,78 @@ function Gladdy:Racials()
spellName = select(1, GetSpellInfo(20594)),
texture = select(3, GetSpellInfo(20594))
},
}
}
function Gladdy:Racials()
return racials
end
local arenaTimer = {
["default"] = {
[61] = "One minute until the Arena battle begins!",
[31] = "Thirty seconds until the Arena battle begins!",
[16] = "Fifteen seconds until the Arena battle begins!",
[0] = "The Arena battle has begun!",
},
["esES"] = {
[61] = "¡Un minuto hasta que dé comienzo la batalla en arena!",
[31] = "¡Treinta segundos hasta que comience la batalla en arena!",
[16] = "¡Quince segundos hasta que comience la batalla en arena!",
[0] = "¡La batalla en arena ha comenzado!",
},
["ptBR"] = {
[61] = "Um minuto até a batalha na Arena começar!",
[31] = "Trinta segundos até a batalha na Arena começar!",
[16] = "Quinze segundos até a batalha na Arena começar!",
[0] = "A batalha na Arena começou!",
},
["deDE"] = {
[61] = "Noch eine Minute bis der Arenakampf beginnt!",
[31] = "Noch dreißig Sekunden bis der Arenakampf beginnt!",
[16] = "Noch fünfzehn Sekunden bis der Arenakampf beginnt!",
[0] = "Der Arenakampf hat begonnen!",
},
["frFR"] = {
[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

View File

@ -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

189
Frame.lua
View File

@ -26,13 +26,24 @@ 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(true)
self.frame:EnableMouse(false)
self.frame:SetMovable(true)
self.frame:RegisterForDrag("LeftButton")
@ -99,137 +110,182 @@ 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 + extraBarWidth)
button.secure:SetHeight(self.db.healthBarHeight + extraBarHeight)
button.secure:SetWidth(self.db.barWidth)
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.secure: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("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.secure: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", 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 k, v in self:IterModules() do
self:Call(v, "UpdateFrame", button.unit)
for _, v in self:IterModules() do
self:Call(v, "UpdateFrame", "arena" .. i)
end
end
for k, v in self:IterModules() do
for _, v in self:IterModules() do
self:Call(v, "UpdateFrameOnce")
end
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
@ -257,33 +315,44 @@ function Gladdy:CreateButton(i)
end
local button = CreateFrame("Frame", "GladdyButtonFrame" .. i, self.frame)
button:SetAlpha(0)
button:EnableMouse(false)
--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)
button:RegisterEvent("UNIT_NAME_UPDATE")
button:RegisterEvent("ARENA_OPPONENT_UPDATE")
button:RegisterEvent("ARENA_COOLDOWNS_UPDATE")
button:RegisterEvent("ARENA_CROWD_CONTROL_SPELL_UPDATE")
button:RegisterUnitEvent("UNIT_CONNECTION", "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 k, v in self:IterModules() do
self:Call(v, "CreateFrame", button.unit)
for _, v in self:IterModules() do
self:Call(v, "CreateFrame", "arena" .. i)
end
self:ResetButton("arena" .. i)
end
function Gladdy:GetAnchor(unit, position)

View File

@ -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.06
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

View File

@ -1,6 +1,6 @@
## Interface: 20501
## Title: Gladdy - TBC
## Version: 1.06-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
@ -34,4 +35,7 @@ Modules\VersionCheck.lua
Modules\XiconProfiles.lua
Modules\Pets.lua
Modules\ExportImport.lua
Modules\CombatIndicator.lua
Modules\RangeCheck.lua
Modules\ShadowsightTimer.lua
EventListener.lua

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Images/Square_FullWhite.tga Normal file

Binary file not shown.

BIN
Images/mask.blp Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

593
Lang.lua
View File

@ -1,33 +1,34 @@
local setmetatable = setmetatable
local C_CreatureInfo = C_CreatureInfo
local GetLocale = GetLocale
local L = {}
-- Classes
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
-- 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"] = "Воин"
-- 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)

View File

@ -6,8 +6,6 @@ assert(LibStub, string.format("%s requires LibStub.", major))
local Data = LibStub:NewLibrary(major, minor)
if( not Data ) then return end
if( IS_WRATH_BUILD == nil ) then IS_WRATH_BUILD = (select(4, GetBuildInfo()) >= 30000) end
-- How long before DR resets
Data.RESET_TIME = 18
@ -234,42 +232,6 @@ Data.spells = {
[10912] = "charm",
}
-- Add WoTLK spells
if( IS_WRATH_BUILD ) then
-- Death Coil
Data.spells[47859] = "dc"
Data.spells[47860] = "dc"
-- Wyvern Sting
Data.spells[49011] = "sleep"
Data.spells[49012] = "sleep"
-- Entangling Roots
Data.spells[53308] = "root"
-- Frost Nova
Data.spells[42917] = "root"
-- Intercept (Remove all except this one come WoTLK)
Data.spells[20252] = "ctrlstun"
-- Pounce
Data.spells[49803] = "ctrlstun"
-- Polymorph
Data.spells[61305] = "disorient"
Data.spells[61025] = "disorient"
-- Sap
Data.spells[51724] = "disorient"
-- Maim
Data.spells[49802] = "disorient"
-- Hex (Guessing)
Data.spells[51514] = "disorient"
end
-- DR Category names
Data.typeNames = {
["disorient"] = "Disorients",

View File

@ -59,41 +59,107 @@ Buff({ 33891 }, { buffType = "form"}, "DRUID") -- Tree of Life
Buff({ 16864 }, { buffType = "magic"}, "DRUID") -- Omen of Clarity
Buff({ 16689, 16810, 16811, 16812, 16813, 17329, 27009 }, { buffType = "magic"}, "DRUID") -- Nature's Grasp
Buff({ 45281, 45282, 45283 }, { buffType = "magic"}, "DRUID") -- Natural Perfection
Buff({ 16188 }, { buffType = "magic"}, "DRUID") -- Nature's Swiftness
Buff({ 17116 }, { buffType = "magic"}, "DRUID") -- Nature's Swiftness
Buff({ 17007 }, { buffType = "aura"}, "DRUID") -- Leader of the Pack
-------------
-- WARRIOR
-- WARRIOR -- TODO
-------------
--Buff({ 29703 }, { buffType = "physical"}, "WARRIOR") -- Dazed
Buff({ 29838 }, { buffType = "physical"}, "WARRIOR") -- Second Wind
Buff({ 12292 }, { buffType = "physical"}, "WARRIOR") -- Death Wish
Buff({ 6673 }, { buffType = "physical"}, "WARRIOR") -- Battle Shout
Buff({ 469 }, { buffType = "physical"}, "WARRIOR") -- Commanding Shout
Buff({ 12328 }, { buffType = "physical"}, "WARRIOR") -- Sweeping Strikes
Buff({ 30032 }, { buffType = "physical"}, "WARRIOR") -- Rampage
Buff({ 2687 }, { buffType = "physical"}, "WARRIOR") -- Blood Rage
Buff({ 20230 }, { buffType = "physical"}, "WARRIOR") -- Retaliation
Buff({ 871 }, { buffType = "physical"}, "WARRIOR") -- Shield Wall
Buff({ 18499 }, { buffType = "physical"}, "WARRIOR") -- Berserker Rage
Buff({ 23885 }, { buffType = "physical"}, "WARRIOR") -- Bloodthirst
Buff({ 3411 }, { buffType = "physical"}, "WARRIOR") -- Intervene
--------------
-- ROGUE
-- ROGUE -- TODO
--------------
Buff({ 2983 }, { buffType = "physical" }, "ROGUE") -- Sprint
Buff({ 5277 }, { buffType = "physical" }, "ROGUE") -- Evasion
Buff({ 31224 }, { buffType = "physical" }, "ROGUE") -- Cloak of Shadows
Buff({ 14278 }, { buffType = "physical" }, "ROGUE") -- Ghostly Strike
------------
-- WARLOCK
-- WARLOCK --TODO
------------
Buff({ 19028 }, { buffType = "immune"}, "WARLOCK") -- Soul Link
Buff({ 23759 }, { buffType = "immune"}, "WARLOCK") -- Master Demonologist
Buff({ 19028 }, { buffType = "aura"}, "WARLOCK") -- Soul Link
Buff({ 696 }, { buffType = "aura"}, "WARLOCK") -- Demon Skin
Buff({ 706 }, { buffType = "aura"}, "WARLOCK") -- Demon Armor
Buff({ 28176 }, { buffType = "aura"}, "WARLOCK") -- Fel Armor
Buff({ 23759 }, { buffType = "aura"}, "WARLOCK") -- Master Demonologist
Buff({ 34936 }, { buffType = "magic"}, "WARLOCK") -- Backlash
Buff({ 5697 }, { buffType = "magic"}, "WARLOCK") -- Unending Breath
Buff({ 132 }, { buffType = "magic"}, "WARLOCK") -- Detect Invisibility
Buff({ 1949 }, { buffType = "aura"}, "WARLOCK") -- Hellfire
Buff({ 6229 }, { buffType = "magic"}, "WARLOCK") -- Shadow Ward
Buff({ 19480 }, { buffType = "magic"}, "WARLOCK") -- Paranoia
Buff({ 7812 }, { buffType = "magic"}, "WARLOCK") -- Sacrifice
Buff({ 2947 }, { buffType = "magic"}, "WARLOCK") -- Fire Shield
---------------
-- SHAMAN
---------------
Buff({ 8178 } ,{ buffType = "magic" }, "SHAMAN") -- Grounding Totem Effect
Buff({ 30823 } ,{ buffType = "magic" }, "SHAMAN") -- Shamanistic Rage
Buff({ 32182 } ,{ buffType = "magic" }, "SHAMAN") -- Heroism
Buff({ 2825 } ,{ buffType = "magic" }, "SHAMAN") -- Bloodlust
Buff({ 974 } ,{ buffType = "magic" }, "SHAMAN") -- Earth Shield
Buff({ 24398 } ,{ buffType = "magic" }, "SHAMAN") -- Water Shield
Buff({ 324 } ,{ buffType = "magic" }, "SHAMAN") -- Lightning Shield
Buff({ 16188 } ,{ buffType = "magic" }, "SHAMAN") -- Nature's Swiftness
Buff({ 16166 } ,{ buffType = "magic" }, "SHAMAN") -- Elemental Mastery
--------------
-- PALADIN
-- PALADIN --TODO
--------------
--Buff( { 25771 }, { buffType = "immune"}, "PALADIN") -- Forbearance
--Blessings
Buff( { 1022, 5599, 10278 }, { buffType = "magic"}, "PALADIN") -- Blessing of Protection
Buff( { 6940 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sacrifice
Buff( { 1044 }, { buffType = "magic"}, "PALADIN") -- Blessing of Freedom
Buff( { 19740, 19834, 19835, 19836, 19837, 19838, 25291, 27140 }, { buffType = "magic"}, "PALADIN") -- Blessing of Might
Buff( { 19742 }, { buffType = "magic"}, "PALADIN") -- Blessing of Wisdom
Buff( { 20217 }, { buffType = "magic"}, "PALADIN") -- Blessing of Kings
Buff( { 19977 }, { buffType = "magic"}, "PALADIN") -- Blessing of Light
Buff( { 1038 }, { buffType = "magic"}, "PALADIN") -- Blessing of Salvation
Buff( { 20911 }, { buffType = "magic"}, "PALADIN") -- Blessing of Sanctuary
Buff( { 25898 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Kings
Buff( { 25890 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Light
Buff( { 25782 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Might
Buff( { 25895 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Salvation
Buff( { 25899 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Sanctuary
Buff( { 25894 }, { buffType = "magic"}, "PALADIN") -- Greater Blessing of Wisdom
Buff( { 642 }, { buffType = "magic"}, "PALADIN") -- Divine Shield
--Auras
Buff( { 465, 10290, 643, 10291, 1032, 10292, 10293, 27149 }, { buffType = "aura"}, "PALADIN") -- Devotion Aura
Buff( { 7294 }, { buffType = "aura"}, "PALADIN") -- Retribution Aura
Buff( { 19746 }, { buffType = "aura"}, "PALADIN") -- Concentration Aura
Buff( { 19876 }, { buffType = "aura"}, "PALADIN") -- Shadow Resistance Aura
Buff( { 20218 }, { buffType = "aura"}, "PALADIN") -- Sanctity Aura
Buff( { 19888 }, { buffType = "aura"}, "PALADIN") -- Frost Resistance Aura
Buff( { 19891 }, { buffType = "aura"}, "PALADIN") -- Fire Resistance Aura
Buff( { 32223 }, { buffType = "aura"}, "PALADIN") -- Crusader Aura
--Seals
Buff( { 20154, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 27155 }, { buffType = "magic"}, "PALADIN") -- Seal of Righteousness
Buff( { 31892 }, { buffType = "magic"}, "PALADIN") -- Seal of Blood
Buff( { 20375 }, { buffType = "magic"}, "PALADIN") -- Seal of Command
Buff( { 20164 }, { buffType = "magic"}, "PALADIN") -- Seal of Justice
Buff( { 20165 }, { buffType = "magic"}, "PALADIN") -- Seal of Light
Buff( { 15277 }, { buffType = "magic"}, "PALADIN") -- Seal of Reckoning
Buff( { 31801 }, { buffType = "magic"}, "PALADIN") -- Seal of Vengeance
Buff( { 20166 }, { buffType = "magic"}, "PALADIN") -- Seal of Wisdom
Buff( { 21082 }, { buffType = "magic"}, "PALADIN") -- Seal of the Crusade
-------------

View 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

View 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)
```

View File

@ -0,0 +1,3 @@
<Ui>
<Script file="LibSpellRange-1.0.lua"/>
</Ui>

View File

@ -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 {

View File

@ -1,54 +1,57 @@
local select, floor, str_len, tostring, str_sub, str_find = select, math.floor, string.len, tostring, string.sub, string.find
local IsInInstance = IsInInstance
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
})
function ACDFrame:OnEvent(event, ...)
self[event](self, ...)
end
function ACDFrame:Initialize()
self.locale = Gladdy:GetArenaTimer()
self.hidden = false
self.countdown = -1
self.texturePath = "Interface\\AddOns\\Gladdy\\Images\\Countdown\\";
ACDFrame:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
ACDFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
local ACDNumFrame = CreateFrame("Frame", "ACDNumFrame", UIParent)
ACDNumFrame:EnableMouse(false)
ACDNumFrame:SetHeight(256)
ACDNumFrame:SetWidth(256)
ACDNumFrame:SetPoint("CENTER", 0, 128)
ACDNumFrame:Show()
self.ACDNumFrame = ACDNumFrame
local ACDNumTens = ACDNumFrame:CreateTexture("ACDNumTens", "HIGH")
ACDNumTens:SetWidth(256)
ACDNumTens:SetHeight(128)
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -48, 0)
self.ACDNumTens = ACDNumTens
local ACDNumOnes = ACDNumFrame:CreateTexture("ACDNumOnes", "HIGH")
ACDNumOnes:SetWidth(256)
ACDNumOnes:SetHeight(128)
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 48, 0)
self.ACDNumOnes = ACDNumOnes
local ACDNumOne = ACDNumFrame:CreateTexture("ACDNumOne", "HIGH")
ACDNumOne:SetWidth(256)
ACDNumOne:SetHeight(128)
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
self.ACDNumOne = ACDNumOne
self:RegisterMessage("JOINED_ARENA")
self:RegisterMessage("ENEMY_SPOTTED")
self:RegisterMessage("UNIT_SPEC")
end
function ACDFrame:OnEvent(event, ...)
-- functions created in "object:method"-style have an implicit first parameter of "self", which points to object
self[event](self, ...) -- route event parameters to LoseControl:event methods
end
ACDFrame:SetScript("OnEvent", ACDFrame.OnEvent)
local ACDNumFrame = CreateFrame("Frame", "ACDNumFrame", UIParent)
ACDNumFrame:SetHeight(256)
ACDNumFrame:SetWidth(256)
ACDNumFrame:SetPoint("CENTER", 0, 128)
ACDNumFrame:Show()
local ACDNumTens = ACDNumFrame:CreateTexture("ACDNumTens", "HIGH")
ACDNumTens:SetWidth(256)
ACDNumTens:SetHeight(128)
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -48, 0)
local ACDNumOnes = ACDNumFrame:CreateTexture("ACDNumOnes", "HIGH")
ACDNumOnes:SetWidth(256)
ACDNumOnes:SetHeight(128)
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", 48, 0)
local ACDNumOne = ACDNumFrame:CreateTexture("ACDNumOne", "HIGH")
ACDNumOne:SetWidth(256)
ACDNumOne:SetHeight(128)
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
function ACDFrame:PLAYER_ENTERING_WORLD()
local instanceType = select(2, IsInInstance())
if (( instanceType == "arena" )) then
ACDFrame:SetScript("OnUpdate", function(self, elapse)
function ACDFrame.OnUpdate(self, elapse)
if (self.countdown > 0 and Gladdy.db.countdown) then
self.hidden = false;
@ -56,102 +59,98 @@ function ACDFrame:PLAYER_ENTERING_WORLD()
local str = tostring(floor(self.countdown - elapse));
if (floor(self.countdown - elapse) == 0) then
ACDNumTens:Hide();
ACDNumOnes:Hide();
ACDNumOne:Hide();
self.ACDNumTens:Hide();
self.ACDNumOnes:Hide();
self.ACDNumOne:Hide();
elseif (str_len(str) == 2) then
-- Display has 2 digits
ACDNumOne:Hide();
ACDNumTens:Show();
ACDNumOnes:Show();
self.ACDNumOne:Hide();
self.ACDNumTens:Show();
self.ACDNumOnes:Show();
ACDNumTens:SetTexture(self.texturePath .. str_sub(str, 0, 1));
ACDNumOnes:SetTexture(self.texturePath .. str_sub(str, 2, 2));
ACDNumFrame:SetScale(0.7)
self.ACDNumTens:SetTexture(self.texturePath .. str_sub(str, 0, 1));
self.ACDNumOnes:SetTexture(self.texturePath .. str_sub(str, 2, 2));
self.ACDNumFrame:SetScale(0.7)
elseif (str_len(str) == 1) then
-- Display has 1 digit
ACDNumOne:Show();
ACDNumOne:SetTexture(self.texturePath .. str_sub(str, 0, 1));
ACDNumOnes:Hide();
ACDNumTens:Hide();
ACDNumFrame:SetScale(1.0)
self.ACDNumOne:Show();
self.ACDNumOne:SetTexture(self.texturePath .. str_sub(str, 0, 1));
self.ACDNumOnes:Hide();
self.ACDNumTens:Hide();
self.ACDNumFrame:SetScale(1.0)
end
end
self.countdown = self.countdown - elapse;
else
self.hidden = true;
ACDNumTens:Hide();
ACDNumOnes:Hide();
ACDNumOne:Hide();
self.ACDNumTens:Hide();
self.ACDNumOnes:Hide();
self.ACDNumOne:Hide();
end
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
function ACDFrame:UpdateFrame()
ACDNumFrame:SetHeight(Gladdy.db.arenaCountdownSize)
ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
ACDNumFrame:SetPoint("CENTER", 0, 128)
self.ACDNumFrame:SetHeight(Gladdy.db.arenaCountdownSize)
self.ACDNumFrame:SetWidth(Gladdy.db.arenaCountdownSize)
self.ACDNumFrame:SetPoint("CENTER", 0, 128)
ACDNumTens:SetWidth(Gladdy.db.arenaCountdownSize)
ACDNumTens:SetHeight(Gladdy.db.arenaCountdownSize/2)
ACDNumTens:SetPoint("CENTER", ACDNumFrame, "CENTER", -(Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
self.ACDNumTens:SetWidth(Gladdy.db.arenaCountdownSize)
self.ACDNumTens:SetHeight(Gladdy.db.arenaCountdownSize/2)
self.ACDNumTens:SetPoint("CENTER", self.ACDNumFrame, "CENTER", -(Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
ACDNumOnes:SetWidth(Gladdy.db.arenaCountdownSize)
ACDNumOnes:SetHeight(Gladdy.db.arenaCountdownSize/2)
ACDNumOnes:SetPoint("CENTER", ACDNumFrame, "CENTER", (Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
self.ACDNumOnes:SetWidth(Gladdy.db.arenaCountdownSize)
self.ACDNumOnes:SetHeight(Gladdy.db.arenaCountdownSize/2)
self.ACDNumOnes:SetPoint("CENTER", self.ACDNumFrame, "CENTER", (Gladdy.db.arenaCountdownSize/8 + Gladdy.db.arenaCountdownSize/8/2), 0)
ACDNumOne:SetWidth(Gladdy.db.arenaCountdownSize)
ACDNumOne:SetHeight(Gladdy.db.arenaCountdownSize/2)
ACDNumOne:SetPoint("CENTER", ACDNumFrame, "CENTER", 0, 0)
self.ACDNumOne:SetWidth(Gladdy.db.arenaCountdownSize)
self.ACDNumOne:SetHeight(Gladdy.db.arenaCountdownSize/2)
self.ACDNumOne:SetPoint("CENTER", self.ACDNumFrame, "CENTER", 0, 0)
end
function ACDFrame:Test()
self.countdown = 30
self:JOINED_ARENA()
end
function ACDFrame:Reset()
self.endTime = 0
self.countdown = 0
self:UnregisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL")
self:SetScript("OnUpdate", nil)
self.hidden = true;
self.ACDNumTens:Hide();
self.ACDNumOnes:Hide();
self.ACDNumOne:Hide();
end
function ACDFrame:GetOptions()
@ -163,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",
@ -175,6 +174,7 @@ function ACDFrame:GetOptions()
min = 64,
max = 512,
step = 16,
width = "full",
}),
}
end

View File

@ -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,12 @@ 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)
@ -59,25 +75,16 @@ function Auras:CreateFrame(unit)
auraFrame.cooldownFrame:SetFrameLevel(5)
auraFrame.icon = auraFrame:CreateTexture(nil, "BACKGROUND")
auraFrame.icon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
auraFrame.icon:SetAllPoints(auraFrame)
auraFrame.icon.overlay = auraFrame.cooldownFrame:CreateTexture(nil, "OVERLAY")
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")
@ -88,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
@ -102,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)
@ -121,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
@ -153,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)
@ -192,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
@ -209,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"],
@ -308,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
}
}
},
@ -325,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
@ -334,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
@ -345,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
@ -360,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
@ -395,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",
}
}
}

View File

@ -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
@ -506,8 +501,10 @@ function BuffsDebuffs:AddAura(unit, spellID, auraType, duration, timeLeft, stack
aura = tremove(self.framePool, #self.framePool)
else
aura = CreateFrame("Frame")
aura:EnableMouse(false)
aura:SetFrameLevel(3)
aura.texture = aura:CreateTexture(nil, "BACKGROUND")
aura.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
aura.texture:SetAllPoints(aura)
aura.cooldowncircle = CreateFrame("Cooldown", nil, aura, "CooldownFrameTemplate")
aura.cooldowncircle:SetFrameLevel(4)
@ -617,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,
}),
@ -630,7 +627,7 @@ function BuffsDebuffs:GetOptions()
group = {
type = "group",
childGroups = "tree",
name = "Frame",
name = L["Frame"],
order = 5,
args = {
buffs = {
@ -640,7 +637,7 @@ function BuffsDebuffs:GetOptions()
args = {
size = {
type = "group",
name = "Size & Padding",
name = L["Size & Padding"],
order = 1,
args = {
header = {
@ -656,6 +653,7 @@ function BuffsDebuffs:GetOptions()
min = 5,
max = 50,
step = 1,
width = "full",
}),
buffsBuffsWidthFactor = Gladdy:option({
type = "range",
@ -665,6 +663,7 @@ function BuffsDebuffs:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
width = "full",
}),
buffsBuffsIconPadding = Gladdy:option({
type = "range",
@ -674,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 = {
@ -716,6 +716,7 @@ function BuffsDebuffs:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
buffsBuffsYOffset = Gladdy:option({
type = "range",
@ -724,6 +725,7 @@ function BuffsDebuffs:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},
@ -744,6 +746,7 @@ function BuffsDebuffs:GetOptions()
min = 0,
max = 1,
step = 0.05,
width = "full",
}),
}
}
@ -756,7 +759,7 @@ function BuffsDebuffs:GetOptions()
args = {
size = {
type = "group",
name = "Size & Padding",
name = L["Size & Padding"],
order = 1,
args = {
header = {
@ -772,6 +775,7 @@ function BuffsDebuffs:GetOptions()
min = 5,
max = 50,
step = 1,
width = "full",
}),
buffsWidthFactor = Gladdy:option({
type = "range",
@ -781,6 +785,7 @@ function BuffsDebuffs:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
width = "full",
}),
buffsIconPadding = Gladdy:option({
type = "range",
@ -790,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 = {
@ -832,6 +838,7 @@ function BuffsDebuffs:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
buffsYOffset = Gladdy:option({
type = "range",
@ -840,6 +847,7 @@ function BuffsDebuffs:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},
@ -860,6 +868,7 @@ function BuffsDebuffs:GetOptions()
min = 0,
max = 1,
step = 0.05,
width = "full",
}),
}
}
@ -867,7 +876,7 @@ function BuffsDebuffs:GetOptions()
},
cooldown = {
type = "group",
name = "Cooldown",
name = L["Cooldown"],
order = 3,
args = {
header = {
@ -879,6 +888,7 @@ function BuffsDebuffs:GetOptions()
type = "toggle",
name = L["No Cooldown Circle"],
order = 9,
width = "full",
}),
buffsCooldownAlpha = Gladdy:option({
type = "range",
@ -887,6 +897,7 @@ function BuffsDebuffs:GetOptions()
max = 1,
step = 0.1,
order = 10,
width = "full",
}),
},
},
@ -916,6 +927,7 @@ function BuffsDebuffs:GetOptions()
min = 0.1,
max = 2,
step = 0.1,
width = "full",
}),
buffsDynamicColor = Gladdy:option({
type = "toggle",

View File

@ -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,
@ -57,6 +58,7 @@ end
function Castbar:CreateFrame(unit)
local castBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
castBar:EnableMouse(false)
castBar.unit = unit
castBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.castBarBorderStyle),
@ -85,6 +87,7 @@ function Castbar:CreateFrame(unit)
castBar.icon = CreateFrame("Frame", nil, castBar)
castBar.icon.texture = castBar.icon:CreateTexture(nil, "BACKGROUND")
castBar.icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
castBar.icon.texture:SetAllPoints(castBar.icon)
castBar.icon.texture.overlay = castBar.icon:CreateTexture(nil, "BORDER")
castBar.icon.texture.overlay:SetAllPoints(castBar.icon.texture)
@ -163,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
@ -437,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]
@ -455,24 +459,22 @@ function Castbar:JOINED_ARENA()
self:CAST_STOP(unit)
--Castbar.OnEvent(castBar, "PLAYER_ENTERING_WORLD")
end
end
end
function Castbar:ResetUnit(unit)
local castBar = self.frames[unit]
castBar:UnregisterEvent("UNIT_SPELLCAST_INTERRUPTED")
castBar:UnregisterEvent("UNIT_SPELLCAST_DELAYED")
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_START")
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE")
castBar:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_STOP")
castBar:UnregisterEvent("UNIT_SPELLCAST_START")
castBar:UnregisterEvent("UNIT_SPELLCAST_STOP")
castBar:UnregisterEvent("UNIT_SPELLCAST_FAILED")
castBar:UnregisterAllEvents()
castBar:SetScript("OnEvent", nil)
castBar:SetScript("OnUpdate", nil)
castBar.fadeOut = nil
self:CAST_STOP(unit)
end
function Castbar:Reset()
self.test = nil
end
---------------------------
-- TEST
@ -480,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
@ -492,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
@ -500,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
---------------------------
@ -517,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
@ -539,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 = {
@ -563,6 +576,7 @@ function Castbar:GetOptions()
min = 0,
max = 50,
step = 1,
width = "full",
}),
castBarWidth = option({
type = "range",
@ -572,6 +586,7 @@ function Castbar:GetOptions()
min = 0,
max = 300,
step = 1,
width = "full",
}),
headerTexture = {
type = "header",
@ -612,6 +627,7 @@ function Castbar:GetOptions()
min = 0.5,
max = Gladdy.db.castBarHeight/2,
step = 0.5,
width = "full",
}),
castBarBorderStyle = option({
type = "select",
@ -630,7 +646,7 @@ function Castbar:GetOptions()
},
icon = {
type = "group",
name = "Icon",
name = L["Icon"],
order = 2,
args = {
headerSize = {
@ -645,6 +661,7 @@ function Castbar:GetOptions()
min = 0,
max = 100,
step = 1,
width = "full",
}),
headerBorder = {
type = "header",
@ -667,7 +684,7 @@ function Castbar:GetOptions()
},
spark = {
type = "group",
name = "Spark",
name = L["Spark"],
order = 3,
args = {
header = {
@ -691,7 +708,7 @@ function Castbar:GetOptions()
},
font = {
type = "group",
name = "Font",
name = L["Font"],
order = 4,
args = {
header = {
@ -721,6 +738,7 @@ function Castbar:GetOptions()
order = 4,
min = 1,
max = 20,
width = "full",
}),
headerFormat = {
type = "header",
@ -741,7 +759,7 @@ function Castbar:GetOptions()
},
position = {
type = "group",
name = "Position",
name = L["Position"],
order = 5,
args = {
header = {
@ -779,6 +797,7 @@ function Castbar:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
castBarYOffset = option({
type = "range",
@ -787,6 +806,7 @@ function Castbar:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
}
},

View File

@ -1,27 +1,96 @@
local select = select
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,
classIconBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
classIconBorderColor = { r = 0, g = 0, b = 0, a = 1 },
classIconSpecIcon = false,
})
local classIconPath = "Interface\\Addons\\Gladdy\\Images\\Classes\\"
local classIcons = {
["DRUID"] = classIconPath .. "inv_misc_monsterclaw_04",
["HUNTER"] = classIconPath .. "inv_weapon_bow_07",
["MAGE"] = classIconPath .. "inv_staff_13",
["PALADIN"] = classIconPath .. "inv_hammer_01",
["PRIEST"] = classIconPath .. "inv_staff_30",
["ROGUE"] = classIconPath .. "inv_throwingknife_04",
["SHAMAN"] = classIconPath .. "inv_jewelry_talisman_04",
["WARLOCK"] = classIconPath .. "spell_nature_drowsy",
["WARRIOR"] = classIconPath .. "inv_sword_27",
}
local specIcons = {
--DRUID
["DRUID"] = {
[L["Balance"]] = select(3, GetSpellInfo(8921)), -- Moonfire
[L["Feral"]] = select(3, GetSpellInfo(27545)), -- Cat Form
[L["Restoration"]] = select(3, GetSpellInfo(5185)), -- Healing Touch
},
["HUNTER"] = {
[L["Beast Mastery"]] = select(3, GetSpellInfo(1515)), -- Tame Beast
[L["Marksmanship"]] = select(3, GetSpellInfo(42243)), -- Volley
[L["Survival"]] = select(3, GetSpellInfo(1495)), -- Mongoose Bite
},
["MAGE"] = {
[L["Arcane"]] = select(3, GetSpellInfo(1459)), -- Arcane Intellect
[L["Fire"]] = select(3, GetSpellInfo(133)), -- Fireball
[L["Frost"]] = select(3, GetSpellInfo(116)), -- Frostbolt
},
["PALADIN"] = {
[L["Holy"]] = select(3, GetSpellInfo(635)), -- Holy Light
[L["Retribution"]] = select(3, GetSpellInfo(7294)), -- Retribution Aura
[L["Protection"]] = select(3, GetSpellInfo(32828)), -- Protection Aura
},
["PRIEST"] = {
[L["Discipline"]] = select(3, GetSpellInfo(1243)), -- Power Word: Fortitude
[L["Shadow"]] = select(3, GetSpellInfo(589)), -- Shadow Word: Pain
[L["Holy"]] = select(3, GetSpellInfo(635)), -- Holy Light
},
["ROGUE"] = {
[L["Assassination"]] = select(3, GetSpellInfo(1329)), -- Mutilate (Eviscerate? 2098)
[L["Combat"]] = select(3, GetSpellInfo(53)), -- Backstab
[L["Subtlety"]] = select(3, GetSpellInfo(1784)), -- Stealth
},
["SHAMAN"] = {
[L["Elemental"]] = select(3, GetSpellInfo(403)), -- Lightning Bolt
[L["Enhancement"]] = select(3, GetSpellInfo(324)), -- Lightning Shield
[L["Restoration"]] = select(3, GetSpellInfo(331)), -- Healing Wave
},
["WARLOCK"] = {
[L["Affliction"]] = select(3, GetSpellInfo(6789)), -- Affliction
[L["Demonology"]] = select(3, GetSpellInfo(5500)), -- Sense Demons
[L["Destruction"]] = select(3, GetSpellInfo(5740)), -- Rain of Fire
},
["WARRIOR"] = {
[L["Arms"]] = select(3, GetSpellInfo(12294)), -- Mortal Strike
[L["Fury"]] = select(3, GetSpellInfo(12325)), -- Inner Rage
[L["Protection"]] = select(3, GetSpellInfo(71)), -- Defensive Stance
},
}
function Classicon:Initialize()
self.frames = {}
self:RegisterMessage("ENEMY_SPOTTED")
self:RegisterMessage("UNIT_DEATH")
self:RegisterMessage("UNIT_SPEC")
end
function Classicon:CreateFrame(unit)
local classIcon = CreateFrame("Frame", nil, Gladdy.buttons[unit])
classIcon:EnableMouse(false)
classIcon:SetFrameStrata("MEDIUM")
classIcon:SetFrameLevel(1)
classIcon.texture = classIcon:CreateTexture(nil, "BACKGROUND")
classIcon.texture:SetAllPoints(classIcon)
classIcon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
classIcon.texture.overlay = classIcon:CreateTexture(nil, "BORDER")
classIcon.texture.overlay:SetAllPoints(classIcon)
@ -51,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
@ -65,6 +134,25 @@ function Classicon:UpdateFrame(unit)
classIcon.texture.overlay:SetVertexColor(Gladdy.db.classIconBorderColor.r, Gladdy.db.classIconBorderColor.g, Gladdy.db.classIconBorderColor.b, Gladdy.db.classIconBorderColor.a)
end
function Classicon:ENEMY_SPOTTED(unit)
local classIcon = self.frames[unit]
if (not classIcon) then
return
end
classIcon.texture:SetTexture(classIcons[Gladdy.buttons[unit].class])
--classIcon.texture:SetTexCoord(unpack(CLASS_BUTTONS[Gladdy.buttons[unit].class]))
classIcon.texture:SetAllPoints(classIcon)
end
function Classicon:UNIT_SPEC(unit, spec)
local classIcon = self.frames[unit]
if (not Gladdy.db.classIconSpecIcon or not classIcon) then
return
end
classIcon.texture:SetTexture(specIcons[Gladdy.buttons[unit].class][spec])
end
function Classicon:Test(unit)
self:ENEMY_SPOTTED(unit)
end
@ -85,17 +173,41 @@ function Classicon:GetOptions()
name = L["Class Icon"],
order = 2,
},
classIconSpecIcon = {
type = "toggle",
name = L["Show Spec Icon"],
desc = L["Shows Spec Icon once spec is detected"],
order = 3,
get = function(info) return Gladdy.db.classIconSpecIcon end,
set = function(info, value)
Gladdy.db.classIconSpecIcon = value
if Gladdy.curBracket and Gladdy.curBracket > 0 then
for i=1,Gladdy.curBracket do
local unit = "arena" .. i
if (Gladdy.buttons[unit] and Gladdy.buttons[unit].spec) then
self:ENEMY_SPOTTED(unit)
self:UNIT_SPEC(unit, Gladdy.buttons[unit].spec)
end
end
end
end
},
group = {
type = "group",
childGroups = "tree",
name = "Frame",
order = 3,
name = L["Frame"],
order = 4,
args = {
size = {
type = "group",
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"],
@ -103,6 +215,7 @@ function Classicon:GetOptions()
max = 100,
step = 1,
order = 3,
width = "full",
}),
classIconWidthFactor = Gladdy:option({
type = "range",
@ -111,6 +224,7 @@ function Classicon:GetOptions()
max = 2,
step = 0.05,
order = 4,
width = "full",
}),
},
},
@ -165,38 +279,3 @@ function Classicon:GetOptions()
},
}
end
local function getClassIcon(class)
-- see https://wow.gamepedia.com/Class_icon
local classIcon = "Interface\\Addons\\Gladdy\\Images\\Classes\\"
if class == "DRUID" then
return classIcon .. "inv_misc_monsterclaw_04"
elseif class == "HUNTER" then
return classIcon .. "inv_weapon_bow_07"
elseif class == "MAGE" then
return classIcon .. "inv_staff_13"
elseif class == "PALADIN" then
return classIcon .. "inv_hammer_01"
elseif class == "PRIEST" then
return classIcon .. "inv_staff_30"
elseif class == "ROGUE" then
return classIcon .. "inv_throwingknife_04"
elseif class == "SHAMAN" then
return classIcon .. "inv_jewelry_talisman_04"
elseif class == "WARLOCK" then
return classIcon .. "spell_nature_drowsy"
elseif class == "WARRIOR" then
return classIcon .. "inv_sword_27"
end
end
function Classicon:ENEMY_SPOTTED(unit)
local classIcon = self.frames[unit]
if (not classIcon) then
return
end
classIcon.texture:SetTexture(getClassIcon(Gladdy.buttons[unit].class))
--classIcon.texture:SetTexCoord(unpack(CLASS_BUTTONS[Gladdy.buttons[unit].class]))
classIcon.texture:SetAllPoints(classIcon)
end

217
Modules/Clicks.lua Normal file
View 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

248
Modules/CombatIndicator.lua Normal file
View File

@ -0,0 +1,248 @@
local select = select
local UnitExists, UnitAffectingCombat, GetSpellInfo = UnitExists, UnitAffectingCombat, GetSpellInfo
local CreateFrame = CreateFrame
local ANCHORS = { ["LEFT"] = "RIGHT", ["RIGHT"] = "LEFT", ["BOTTOM"] = "TOP", ["TOP"] = "BOTTOM"}
local Gladdy = LibStub("Gladdy")
local L = Gladdy.L
local CombatIndicator = Gladdy:NewModule("Combat Indicator", nil, {
ciEnabled = true,
ciSize = 20,
ciAlpha = 1,
ciWidthFactor = 1,
ciAnchor = "healthBar",
ciPos = "TOP",
ciXOffset = 0,
ciYOffset = -31,
ciBorderStyle = "Interface\\AddOns\\Gladdy\\Images\\Border_rounded_blp",
ciBorderColor = { r = 0, g = 0, b = 0, a = 1 },
})
function CombatIndicator:Initialize()
self.frames = {}
self:RegisterMessage("JOINED_ARENA")
self.updateInterval = 0.05
self.combatIndicatorIcon = select(3, GetSpellInfo(674))
end
function CombatIndicator:JOINED_ARENA()
self:SetScript("OnUpdate", CombatIndicator.OnEvent)
self.lastTimeUpdated = 0
end
function CombatIndicator:CreateFrame(unit)
local button = Gladdy.buttons[unit]
if not button then
return
end
local ciFrame = CreateFrame("Frame", "GladdyCombatindicator" .. unit, button)
ciFrame:EnableMouse(false)
ciFrame:SetFrameStrata("HIGH")
ciFrame:SetHeight(Gladdy.db.ciSize)
ciFrame:SetWidth(Gladdy.db.ciSize * Gladdy.db.ciWidthFactor)
ciFrame.texture = ciFrame:CreateTexture(nil, "OVERLAY")
ciFrame.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
ciFrame.texture:SetTexture(self.combatIndicatorIcon)
ciFrame.texture:SetAllPoints(ciFrame)
ciFrame.border = ciFrame:CreateTexture(nil, "OVERLAY")
ciFrame.border:SetAllPoints(ciFrame)
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)
self.frames[unit] = ciFrame
button.ciFrame = ciFrame
end
function CombatIndicator:UpdateFrame(unit)
local button = Gladdy.buttons[unit]
local ciFrame = self.frames[unit]
if (not button or not ciFrame) then
return
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()
ciFrame:SetPoint(ANCHORS[Gladdy.db.ciPos], Gladdy.buttons[unit][Gladdy.db.ciAnchor], Gladdy.db.ciPos, Gladdy.db.ciXOffset, Gladdy.db.ciYOffset)
ciFrame:SetAlpha(Gladdy.db.ciAlpha)
if (Gladdy.db.ciEnabled == false) then
ciFrame:Hide()
else
ciFrame:Show()
end
end
function CombatIndicator:Test()
self.test = true
self:JOINED_ARENA()
end
function CombatIndicator:Reset()
self:SetScript("OnUpdate", nil)
self.test = false
end
function CombatIndicator.OnEvent(self, elapsed)
self.lastTimeUpdated = self.lastTimeUpdated + elapsed
if (self.lastTimeUpdated > self.updateInterval) then
for i=1,Gladdy.curBracket do
local unit = "arena" .. i
if Gladdy.db.ciEnabled and (CombatIndicator.test or (UnitExists(unit) and UnitAffectingCombat(unit))) then
CombatIndicator.frames[unit]:Show()
else
CombatIndicator.frames[unit]:Hide()
end
end
self.lastTimeUpdated = 0
end
end
function CombatIndicator:GetOptions()
return {
header = {
type = "header",
name = L["Combat Indicator"],
order = 2,
},
ciEnabled = Gladdy:option({
type = "toggle",
name = L["Enabled"],
desc = L["Enable Combat Indicator icon"],
order = 3,
}),
group = {
type = "group",
childGroups = "tree",
name = L["Frame"],
order = 4,
args = {
general = {
type = "group",
name = L["Frame"],
order = 1,
args = {
header = {
type = "header",
name = L["Frame"],
order = 1,
},
ciSize = Gladdy:option({
type = "range",
name = L["Icon size"],
min = 5,
max = 100,
step = 1,
order = 2,
width = "full",
}),
ciWidthFactor = Gladdy:option({
type = "range",
name = L["Icon width factor"],
min = 0.5,
max = 2,
step = 0.05,
order = 3,
width = "full",
}),
ciAlpha = Gladdy:option({
type = "range",
name = L["Alpha"],
min = 0,
max = 1,
step = 0.05,
order = 4,
width = "full",
}),
},
},
position = {
type = "group",
name = L["Position"],
order = 4,
args = {
header = {
type = "header",
name = L["Position"],
order = 4,
},
ciAnchor = Gladdy:option({
type = "select",
name = L["Anchor"],
desc = L["This changes the anchor of the ci icon"],
order = 20,
values = {
["trinket"] = L["Trinket"],
["classIcon"] = L["Class Icon"],
["healthBar"] = L["Health Bar"],
["powerBar"] = L["Power Bar"],
},
}),
ciPos = Gladdy:option({
type = "select",
name = L["Position"],
desc = L["This changes position relative to its anchor of the ci icon"],
order = 21,
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"],
["TOP"] = L["Top"],
["BOTTOM"] = L["Bottom"],
},
}),
ciXOffset = Gladdy:option({
type = "range",
name = L["Horizontal offset"],
order = 23,
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
ciYOffset = Gladdy:option({
type = "range",
name = L["Vertical offset"],
order = 24,
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},
border = {
type = "group",
name = L["Border"],
order = 4,
args = {
header = {
type = "header",
name = L["Border"],
order = 4,
},
ciBorderStyle = Gladdy:option({
type = "select",
name = L["Border style"],
order = 31,
values = Gladdy:GetIconStyles()
}),
ciBorderColor = Gladdy:colorOption({
type = "color",
name = L["Border color"],
desc = L["Color of the border"],
order = 32,
hasAlpha = true,
}),
},
},
},
},
}
end

View File

@ -93,11 +93,13 @@ function Cooldowns:CreateFrame(unit)
local button = Gladdy.buttons[unit]
-- Cooldown frame
local spellCooldownFrame = CreateFrame("Frame", nil, button)
spellCooldownFrame:EnableMouse(false)
for x = 1, 14 do
local icon = CreateFrame("Frame", nil, spellCooldownFrame)
icon:EnableMouse(false)
icon:SetFrameLevel(3)
icon.texture = icon:CreateTexture(nil, "BACKGROUND")
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
icon.texture:SetAllPoints(icon)
icon.cooldown = CreateFrame("Cooldown", nil, icon, "CooldownFrameTemplate")
@ -132,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
@ -235,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)
@ -285,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
@ -573,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 = {
@ -599,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",
@ -609,6 +614,7 @@ function Cooldowns:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
width = "full",
}),
cooldownIconPadding = Gladdy:option({
type = "range",
@ -618,6 +624,7 @@ function Cooldowns:GetOptions()
min = 0,
max = 10,
step = 0.1,
width = "full",
}),
cooldownMaxIconsPerLine = Gladdy:option({
type = "range",
@ -626,6 +633,7 @@ function Cooldowns:GetOptions()
min = 3,
max = 14,
step = 1,
width = "full",
}),
},
},
@ -643,6 +651,7 @@ function Cooldowns:GetOptions()
type = "toggle",
name = L["No Cooldown Circle"],
order = 8,
width = "full",
}),
cooldownCooldownAlpha = Gladdy:option({
type = "range",
@ -651,6 +660,7 @@ function Cooldowns:GetOptions()
max = 1,
step = 0.1,
order = 9,
width = "full",
}),
},
},
@ -680,6 +690,7 @@ function Cooldowns:GetOptions()
min = 0.1,
max = 2,
step = 0.1,
width = "full",
}),
cooldownFontColor = Gladdy:colorOption({
type = "color",
@ -734,6 +745,7 @@ function Cooldowns:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
cooldownYOffset = Gladdy:option({
type = "range",
@ -742,6 +754,7 @@ function Cooldowns:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},
@ -775,7 +788,7 @@ function Cooldowns:GetOptions()
cooldowns = {
type = "group",
childGroups = "tree",
name = "Cooldowns",
name = L["Cooldowns"],
order = 4,
args = Cooldowns:GetCooldownOptions(),
},

View File

@ -67,6 +67,7 @@ end
function Diminishings:CreateFrame(unit)
local drFrame = CreateFrame("Frame", nil, Gladdy.buttons[unit])
drFrame:EnableMouse(false)
for i = 1, 16 do
local icon = CreateFrame("Frame", "GladdyDr" .. unit .. "Icon" .. i, drFrame)
@ -74,6 +75,7 @@ function Diminishings:CreateFrame(unit)
icon:EnableMouse(false)
icon:SetFrameLevel(3)
icon.texture = icon:CreateTexture(nil, "BACKGROUND")
icon.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
icon.texture:SetAllPoints(icon)
icon:SetScript("OnUpdate", function(self, elapsed)
if (self.active) then
@ -91,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)
@ -160,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
@ -229,9 +227,9 @@ function Diminishings:UpdateFrame(unit)
icon.border:SetTexture(Gladdy.db.drBorderStyle)
end
icon.texture:SetTexCoord(.1, .9, .1, .9)
icon.texture:SetPoint("TOPLEFT", icon, "TOPLEFT", 2, -2)
icon.texture:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT", -2, 2)
--icon.texture:SetTexCoord(.1, .9, .1, .9)
--icon.texture:SetPoint("TOPLEFT", icon, "TOPLEFT", 2, -2)
--icon.texture:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT", -2, 2)
end
end
@ -357,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 = {
@ -383,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",
@ -394,6 +393,7 @@ function Diminishings:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
width = "full",
}),
drIconPadding = Gladdy:option({
type = "range",
@ -403,6 +403,7 @@ function Diminishings:GetOptions()
min = 0,
max = 10,
step = 0.1,
width = "full",
}),
},
},
@ -420,6 +421,7 @@ function Diminishings:GetOptions()
type = "toggle",
name = L["No Cooldown Circle"],
order = 8,
width = "full",
}),
drCooldownAlpha = Gladdy:option({
type = "range",
@ -428,6 +430,7 @@ function Diminishings:GetOptions()
max = 1,
step = 0.1,
order = 9,
width = "full",
}),
},
},
@ -464,6 +467,7 @@ function Diminishings:GetOptions()
min = 0.1,
max = 2,
step = 0.1,
width = "full",
}),
}
},
@ -499,6 +503,7 @@ function Diminishings:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
drYOffset = Gladdy:option({
type = "range",
@ -507,6 +512,7 @@ function Diminishings:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},

View File

@ -18,11 +18,9 @@ local function table_copy(t)
return t2;
end
local ExportImport = Gladdy:NewModule("ExportImport", nil, {
local ExportImport = Gladdy:NewModule("Export Import", nil, {
})
local export = AceGUI:Create("Frame")
export:SetWidth(550)
export.sizer_se:Hide()
@ -85,6 +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)

View File

@ -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",
@ -19,6 +19,7 @@ local Healthbar = Gladdy:NewModule("Healthbar", 100, {
healthBarFontColor = { r = 1, g = 1, b = 1, a = 1 },
healthBarNameFontSize = 12,
healthBarHealthFontSize = 12,
healthNameToArenaId = false,
healthName = true,
healthActual = false,
healthMax = true,
@ -27,6 +28,7 @@ local Healthbar = Gladdy:NewModule("Healthbar", 100, {
function Healthbar:Initialize()
self.frames = {}
self:RegisterMessage("JOINED_ARENA")
self:RegisterMessage("ENEMY_SPOTTED")
self:RegisterMessage("UNIT_DESTROYED")
self:RegisterMessage("UNIT_DEATH")
@ -36,6 +38,7 @@ function Healthbar:CreateFrame(unit)
local button = Gladdy.buttons[unit]
local healthBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
healthBar:EnableMouse(false)
healthBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.healthBarBorderStyle),
edgeSize = Gladdy.db.healthBarBorderSize })
healthBar:SetBackdropBorderColor(Gladdy.db.healthBarBorderColor.r, Gladdy.db.healthBarBorderColor.g, Gladdy.db.healthBarBorderColor.b, Gladdy.db.healthBarBorderColor.a)
@ -92,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)
@ -106,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
@ -117,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
@ -161,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))
@ -210,10 +225,20 @@ function Healthbar:Test(unit)
return
end
self:JOINED_ARENA()
self:ENEMY_SPOTTED(unit)
self:UNIT_HEALTH(unit, button.health, button.healthMax)
end
function Healthbar:JOINED_ARENA()
if Gladdy.db.healthNameToArenaId and Gladdy.db.healthName then
for i=1,Gladdy.curBracket do
local healthBar = self.frames["arena" .. i]
healthBar.nameText:SetText(i)
end
end
end
function Healthbar:ENEMY_SPOTTED(unit)
local healthBar = self.frames[unit]
local button = Gladdy.buttons[unit]
@ -228,7 +253,10 @@ function Healthbar:ENEMY_SPOTTED(unit)
healthBar.hp:SetValue(health)
Healthbar:SetHealthText(healthBar, health, healthMax)
end
if Gladdy.db.healthName and not Gladdy.db.healthNameToArenaId then
healthBar.nameText:SetText(button.name)
end
healthBar.hp:SetStatusBarColor(RAID_CLASS_COLORS[button.class].r, RAID_CLASS_COLORS[button.class].g, RAID_CLASS_COLORS[button.class].b, 1)
end
@ -300,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
@ -328,7 +356,7 @@ function Healthbar:GetOptions()
group = {
type = "group",
childGroups = "tree",
name = "Frame",
name = L["Frame"],
order = 3,
args = {
general = {
@ -349,6 +377,7 @@ function Healthbar:GetOptions()
min = 10,
max = 100,
step = 1,
width = "full",
}),
healthBarTexture = option({
type = "select",
@ -400,6 +429,7 @@ function Healthbar:GetOptions()
step = 0.1,
min = 0,
max = 20,
width = "full",
}),
healthBarHealthFontSize = option({
type = "range",
@ -409,6 +439,7 @@ function Healthbar:GetOptions()
step = 0.1,
min = 0,
max = 20,
width = "full",
}),
},
},
@ -437,6 +468,7 @@ function Healthbar:GetOptions()
min = 0.5,
max = Gladdy.db.healthBarHeight/2,
step = 0.5,
width = "full",
}),
healthBarBorderColor = Gladdy:colorOption({
type = "color",
@ -459,27 +491,39 @@ function Healthbar:GetOptions()
},
healthName = option({
type = "toggle",
name = L["Show the name"],
name = L["Show name text"],
desc = L["Show the units name"],
order = 30,
order = 2,
width = "full",
}),
healthNameToArenaId = option({
type = "toggle",
name = L["Show ArenaX"],
desc = L["Show 1-5 as name instead"],
order = 3,
width = "full",
disabled = function() return not Gladdy.db.healthName end
}),
healthActual = option({
type = "toggle",
name = L["Show the actual health"],
desc = L["Show the actual health on the health bar"],
order = 31,
order = 4,
width = "full",
}),
healthMax = option({
type = "toggle",
name = L["Show max health"],
desc = L["Show max health on the health bar"],
order = 32,
order = 5,
width = "full",
}),
healthPercentage = option({
type = "toggle",
name = L["Show health percentage"],
desc = L["Show health percentage on the health bar"],
order = 33,
order = 6,
width = "full",
}),
},
},

View File

@ -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,21 +52,21 @@ 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:SetFrameStrata("HIGH")
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:SetFrameStrata("LOW")
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:SetFrameStrata("MEDIUM")
leaderBorder:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.highlightBorderStyle), edgeSize = Gladdy.db.highlightBorderSize })
--leaderBorder:SetFrameStrata("MEDIUM")
leaderBorder:Hide()
local highlight = healthBar:CreateTexture(nil, "OVERLAY")
@ -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

View File

@ -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",
}),
}
},

View File

@ -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",
@ -36,6 +37,7 @@ function Powerbar:CreateFrame(unit)
local button = Gladdy.buttons[unit]
local powerBar = CreateFrame("Frame", nil, Gladdy.buttons[unit], BackdropTemplateMixin and "BackdropTemplate")
powerBar:EnableMouse(false)
powerBar:SetBackdrop({ edgeFile = Gladdy.LSM:Fetch("border", Gladdy.db.powerBarBorderStyle),
edgeSize = Gladdy.db.powerBarBorderSize })
powerBar:SetBackdropBorderColor(Gladdy.db.powerBarBorderColor.r, Gladdy.db.powerBarBorderColor.g, Gladdy.db.powerBarBorderColor.b, Gladdy.db.powerBarBorderColor.a)
@ -112,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)
@ -131,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)
@ -168,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)
@ -206,8 +223,13 @@ function Powerbar:UNIT_SPEC(unit, spec)
if (not powerBar or not button) then
return
end
local raceText = Gladdy.db.powerShowRace and button.raceLoc or ""
powerBar.raceText:SetText(spec .. " " .. button.raceLoc)
if (button.spec and Gladdy.db.powerShowSpec) then
raceText = spec .. " " .. raceText
end
powerBar.raceText:SetText(raceText)
end
function Powerbar:UNIT_POWER(unit, power, powerMax, powerType)
@ -246,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)
@ -284,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
@ -309,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",
@ -333,6 +363,7 @@ function Powerbar:GetOptions()
min = 0,
max = 50,
step = 1,
width = "full",
}),
powerBarTexture = option({
type = "select",
@ -384,6 +415,7 @@ function Powerbar:GetOptions()
step = 0.1,
min = 1,
max = 20,
width = "full",
}),
},
},
@ -412,6 +444,7 @@ function Powerbar:GetOptions()
min = 0.5,
max = Gladdy.db.powerBarHeight/2,
step = 0.5,
width = "full",
}),
powerBarBorderColor = Gladdy:colorOption({
type = "color",

View File

@ -45,40 +45,31 @@ 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
function Racial:CreateFrame(unit)
local racial = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit])
racial:EnableMouse(false)
racial.texture = racial:CreateTexture(nil, "BACKGROUND")
racial.texture:SetAllPoints(racial)
racial.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
--racial.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
racial.cooldown = CreateFrame("Cooldown", nil, racial, "CooldownFrameTemplate")
@ -132,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)
@ -224,7 +215,7 @@ function Racial:GetOptions()
group = {
type = "group",
childGroups = "tree",
name = "Frame",
name = L["Frame"],
order = 4,
args = {
general = {
@ -235,7 +226,7 @@ function Racial:GetOptions()
header = {
type = "header",
name = L["Size"],
order = 4,
order = 1,
},
racialSize = Gladdy:option({
type = "range",
@ -243,7 +234,8 @@ function Racial:GetOptions()
min = 5,
max = 100,
step = 1,
order = 4,
order = 2,
width = "full",
}),
racialWidthFactor = Gladdy:option({
type = "range",
@ -251,7 +243,8 @@ function Racial:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
order = 6,
order = 3,
width = "full",
}),
},
},
@ -269,6 +262,7 @@ function Racial:GetOptions()
type = "toggle",
name = L["No Cooldown Circle"],
order = 7,
width = "full",
}),
racialCooldownAlpha = Gladdy:option({
type = "range",
@ -277,6 +271,7 @@ function Racial:GetOptions()
max = 1,
step = 0.1,
order = 8,
width = "full",
}),
},
},
@ -306,6 +301,7 @@ function Racial:GetOptions()
min = 0.1,
max = 2,
step = 0.1,
width = "full",
}),
},
},
@ -316,7 +312,7 @@ function Racial:GetOptions()
args = {
header = {
type = "header",
name = L["Position"],
name = L["Icon position"],
order = 4,
},
racialAnchor = Gladdy:option({
@ -333,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 = {
@ -350,6 +346,7 @@ function Racial:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
racialYOffset = Gladdy:option({
type = "range",
@ -358,6 +355,7 @@ function Racial:GetOptions()
min = -400,
max = 400,
step = 0.1,
width = "full",
}),
},
},

421
Modules/RangeCheck.lua Normal file
View 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

View 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

View File

@ -26,7 +26,7 @@ local totemData = {
[string_lower("Disease Cleansing Totem")] = {id = 8170,texture = select(3, GetSpellInfo(8170)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Disease Cleansing Totem
[string_lower("Healing Stream Totem")] = {id = 5394,texture = select(3, GetSpellInfo(5394)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Healing Stream Totem
[string_lower("Mana Tide Totem")] = {id = 16190,texture = select(3, GetSpellInfo(16190)), color = {r = 0.078, g = 0.9, b = 0.16, a = 1}, enabled = true, priority = 3}, -- Mana Tide Totem
[string_lower("Mana Spring Totem")] = {id = 5675,texture = "Interface\\AddOns\\Gladdy\\Images\\Totems\\Spell_Nature_ManaRegenTotem_edit", color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 1}, -- Mana Spring Totem
[string_lower("Mana Spring Totem")] = {id = 5675,texture = select(3, GetSpellInfo(5675)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 1}, -- Mana Spring Totem
-- Earth
[string_lower("Earthbind Totem")] = {id = 2484,texture = select(3, GetSpellInfo(2484)), color = {r = 0.5, g = 0.5, b = 0.5, a = 1}, enabled = true, priority = 1}, -- Earthbind Totem
[string_lower("Stoneclaw Totem")] = {id = 5730,texture = select(3, GetSpellInfo(5730)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Stoneclaw Totem
@ -36,13 +36,13 @@ local totemData = {
[string_lower("Tremor Totem")] = {id = 8143,texture = select(3, GetSpellInfo(8143)), color = {r = 1, g = 0.9, b = 0.1, a = 1}, enabled = true, priority = 3}, -- Tremor Totem
-- Air
[string_lower("Grounding Totem")] = {id = 8177,texture = select(3, GetSpellInfo(8177)), color = {r = 0, g = 0.53, b = 0.92, a = 1}, enabled = true, priority = 3}, -- Grounding Totem
[string_lower("Grace of Air Totem")] = {id = 8835,texture = "Interface\\AddOns\\Gladdy\\Images\\Totems\\Spell_Nature_InvisibilityTotem_edit", color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Grace of Air Totem
[string_lower("Grace of Air Totem")] = {id = 8835,texture = select(3, GetSpellInfo(8835)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Grace of Air Totem
[string_lower("Nature Resistance Totem")] = {id = 10595,texture = select(3, GetSpellInfo(10595)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Nature Resistance Totem
[string_lower("Windfury Totem")] = {id = 8512,texture = "Interface\\AddOns\\Gladdy\\Images\\Totems\\Spell_Nature_Windfury_edit", color = {r = 0.96, g = 0, b = 0.07, a = 1}, enabled = true, priority = 2}, -- Windfury Totem
[string_lower("Sentry Totem")] = {id = 6495, texture = "Interface\\AddOns\\Gladdy\\Images\\Totems\\Spell_Nature_RemoveCurse_edit", color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Sentry Totem
[string_lower("Windfury Totem")] = {id = 8512,texture = select(3, GetSpellInfo(8512)), color = {r = 0.96, g = 0, b = 0.07, a = 1}, enabled = true, priority = 2}, -- Windfury Totem
[string_lower("Sentry Totem")] = {id = 6495, texture = select(3, GetSpellInfo(6495)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Sentry Totem
[string_lower("Windwall Totem")] = {id = 15107,texture = select(3, GetSpellInfo(15107)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Windwall Totem
[string_lower("Wrath of Air Totem")] = {id = 3738,texture = "Interface\\AddOns\\Gladdy\\Images\\Totems\\Spell_Nature_SlowingTotem_edit", color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Wrath of Air Totem
[string_lower("Tranquil Air Totem")] = {id = 25908,texture = "Interface\\Icons\\INV_Staff_07", color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Tranquil Air Totem
[string_lower("Wrath of Air Totem")] = {id = 3738,texture = select(3, GetSpellInfo(3738)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Wrath of Air Totem
[string_lower("Tranquil Air Totem")] = {id = 25908,texture = select(3, GetSpellInfo(25908)), color = {r = 0, g = 0, b = 0, a = 1}, enabled = true, priority = 0}, -- Tranquil Air Totem
}
local localizedTotemData = {
["default"] = {
@ -78,36 +78,11 @@ local localizedTotemData = {
[string_lower(select(1, GetSpellInfo(25908)))] = totemData[string_lower("Tranquil Air Totem")], -- Tranquil Air Totem
},
["frFR"] = {
[string_lower("Totem incendiaire")] = totemData[string_lower("Searing Totem")],
[string_lower("Totem Langue de feu")] = totemData[string_lower("Flametongue Totem")],
[string_lower("Totem de lien terrestre")] = totemData[string_lower("Earthbind Totem")],
[string_lower("Totem de Griffes de pierre")] = totemData[string_lower("Stoneclaw Totem")],
[string_lower("Totem Nova de feu")] = totemData[string_lower("Fire Nova Totem")],
[string_lower("Totem de Magma")] = totemData[string_lower("Magma Totem")],
[string_lower("Totem de courroux")] = totemData[string_lower("Totem of Wrath")],
[string_lower("Totem d'\195\169lementaire de feu")] = totemData[string_lower("Fire Elemental Totem")],
[string_lower("Totem d'\195\169l\195\169mentaire de feu")] = totemData[string_lower("Fire Elemental Totem")],
[string_lower("Totem de Peau de pierre")] = totemData[string_lower("Stoneskin Totem")],
[string_lower("Totem d'\195\169lementaire de terre")] = totemData[string_lower("Earth Elemental Totem")],
[string_lower("Totem d'\195\169l\195\169mentaire de terre")] = totemData[string_lower("Earth Elemental Totem")],
[string_lower("Totem de Force de la Terre")] = totemData[string_lower("Strength of Earth Totem")],
[string_lower("Totem de r\195\169sistance au Givre")] = totemData[string_lower("Frost Resistance Totem")],
[string_lower("Totem de r\195\169sistance au Feu")] = totemData[string_lower("Fire Resistance Totem")],
[string_lower("Totem de Gl\195\168be")] = totemData[string_lower("Grounding Totem")],
[string_lower("Totem de Gr\195\162ce a\195\169rienne")] = totemData[string_lower("Grace of Air Totem")],
[string_lower("Totem de R\195\169sistance \195\160 la Nature")] = totemData[string_lower("Nature Resistance Totem")],
[string_lower("Totem Furie-des-vents")] = totemData[string_lower("Windfury Totem")],
[string_lower("Totem Sentinelle")] = totemData[string_lower("Sentry Totem")],
[string_lower("Totem de Mur des vents")] = totemData[string_lower("Windwall Totem")],
[string_lower("Totem de courroux de l'air")] = totemData[string_lower("Wrath of Air Totem")],
[string_lower("Totem de S\195\169isme")] = totemData[string_lower("Tremor Totem")],
[string_lower("Totem gu\195\169risseur")] = totemData[string_lower("Healing Stream Totem")],
[string_lower("Totem de Purification du poison")] = totemData[string_lower("Poison Cleansing Totem")],
[string_lower("Totem Fontaine de mana")] = totemData[string_lower("Mana Spring Totem")],
[string_lower("Totem de Purification des maladies")] = totemData[string_lower("Disease Cleansing Totem")],
[string_lower("Totem de purification")] = totemData[string_lower("Disease Cleansing Totem")],
[string_lower("Totem de Vague de mana")] = totemData[string_lower("Mana Tide Totem")],
[string_lower("Totem de Tranquillit\195\169 de l'air")] = totemData[string_lower("Tranquil Air Totem")],
[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
}
}
@ -122,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)),
@ -138,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",
@ -192,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 +195,7 @@ end
---------------------------------------------------
local TotemPlates = Gladdy:NewModule("TotemPlates", nil, {
local TotemPlates = Gladdy:NewModule("Totem Plates", nil, {
npTotems = true,
npTotemsShowFriendly = true,
npTotemsShowEnemy = true,
@ -252,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()
@ -279,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)
@ -293,42 +318,17 @@ 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)
nameplate.gladdyTotemFrame.totemIcon = nameplate.gladdyTotemFrame:CreateTexture(nil, "BACKGROUND")
nameplate.gladdyTotemFrame.totemIcon:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
nameplate.gladdyTotemFrame.totemIcon:ClearAllPoints()
nameplate.gladdyTotemFrame.totemIcon:SetPoint("TOPLEFT", nameplate.gladdyTotemFrame, "TOPLEFT")
nameplate.gladdyTotemFrame.totemIcon:SetPoint("BOTTOMRIGHT", nameplate.gladdyTotemFrame, "BOTTOMRIGHT")
@ -340,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)
@ -352,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)
@ -415,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,
@ -442,7 +548,7 @@ function TotemPlates:GetOptions()
group = {
type = "group",
childGroups = "tree",
name = "Frame",
name = L["Frame"],
order = 4,
args = {
icon = {
@ -463,6 +569,7 @@ function TotemPlates:GetOptions()
min = 20,
max = 100,
step = 1,
width = "full",
}),
npTotemPlatesWidthFactor = Gladdy:option({
type = "range",
@ -472,6 +579,7 @@ function TotemPlates:GetOptions()
min = 0.5,
max = 2,
step = 0.05,
width = "full",
}),
},
},
@ -482,7 +590,7 @@ function TotemPlates:GetOptions()
args = {
header = {
type = "header",
name = L["Icon"],
name = L["Font"],
order = 1,
},
npTremorFont = Gladdy:option({
@ -501,6 +609,7 @@ function TotemPlates:GetOptions()
min = 1,
max = 50,
step = 0.1,
width = "full",
}),
npTremorFontXOffset = Gladdy:option({
type = "range",
@ -510,6 +619,7 @@ function TotemPlates:GetOptions()
min = -300,
max = 300,
step = 1,
width = "full",
}),
npTremorFontYOffset = Gladdy:option({
type = "range",
@ -519,6 +629,7 @@ function TotemPlates:GetOptions()
min = -300,
max = 300,
step = 1,
width = "full",
}),
},
},
@ -552,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()
@ -621,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())

View File

@ -39,41 +39,32 @@ 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
function Trinket:CreateFrame(unit)
local trinket = CreateFrame("Button", "GladdyTrinketButton" .. unit, Gladdy.buttons[unit])
trinket:EnableMouse(false)
trinket.texture = trinket:CreateTexture(nil, "BACKGROUND")
trinket.texture:SetAllPoints(trinket)
trinket.texture:SetTexture("Interface\\Icons\\INV_Jewelry_TrinketPVP_02")
trinket.texture:SetMask("Interface\\AddOns\\Gladdy\\Images\\mask")
trinket.cooldown = CreateFrame("Cooldown", nil, trinket, "CooldownFrameTemplate")
trinket.cooldown.noCooldownCount = true --Gladdy.db.trinketDisableOmniCC
@ -128,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)
@ -227,7 +218,7 @@ function Trinket:GetOptions()
group = {
type = "group",
childGroups = "tree",
name = "Frame",
name = L["Frame"],
order = 4,
args = {
general = {
@ -238,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",
@ -255,6 +247,7 @@ function Trinket:GetOptions()
max = 2,
step = 0.05,
order = 6,
width = "full",
}),
},
},
@ -272,6 +265,7 @@ function Trinket:GetOptions()
type = "toggle",
name = L["No Cooldown Circle"],
order = 7,
width = "full",
}),
trinketCooldownAlpha = Gladdy:option({
type = "range",
@ -280,6 +274,7 @@ function Trinket:GetOptions()
max = 1,
step = 0.1,
order = 8,
width = "full",
}),
},
},
@ -309,6 +304,7 @@ function Trinket:GetOptions()
min = 0.1,
max = 2,
step = 0.1,
width = "full",
}),
},
},
@ -319,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 = {

View File

@ -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

View File

@ -5,9 +5,9 @@ local XiconProfiles = Gladdy:NewModule("XiconProfiles", nil, {
})
function XiconProfiles:ApplyKlimp()
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetKlimpProfile())
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKlimpProfile())
if deserialized then
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
@ -15,9 +15,9 @@ function XiconProfiles:ApplyKlimp()
end
function XiconProfiles:ApplyKnall()
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetKnallProfile())
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetKnallProfile())
if deserialized then
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
@ -25,9 +25,39 @@ function XiconProfiles:ApplyKnall()
end
function XiconProfiles:ApplyClassic()
local deserialized = Gladdy.modules["ExportImport"]:Decode(Gladdy:GetClassicProfile())
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfile())
if deserialized then
Gladdy.modules["ExportImport"]:ApplyImport(deserialized, Gladdy.db)
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
Gladdy:ToggleFrame(3)
end
function XiconProfiles:ApplyClassicNoPet()
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetClassicProfileNoPet())
if deserialized then
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
Gladdy:ToggleFrame(3)
end
function XiconProfiles:ApplyBlizz()
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetBlizzardProfile())
if deserialized then
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
Gladdy:ToggleFrame(3)
end
function XiconProfiles:ApplyRukk()
local deserialized = Gladdy.modules["Export Import"]:Decode(Gladdy:GetRukkProfile())
if deserialized then
Gladdy.modules["Export Import"]:ApplyImport(deserialized, Gladdy.db)
end
Gladdy:Reset()
Gladdy:HideFrame()
@ -36,10 +66,29 @@ end
function XiconProfiles:GetOptions()
return {
headerProfileBlizzard = {
type = "header",
name = "Blizzard " .. L["Profile"],
order = 2,
},
blizzardProfile = {
type = "execute",
func = function()
Gladdy.dbi:ResetProfile(Gladdy.dbi:GetCurrentProfile())
XiconProfiles:ApplyBlizz()
end,
name = " ",
desc = "Blizzard " .. L["Profile"],
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Blizz1.blp",
imageWidth = 350,
imageHeight = 175,
width = "full",
order = 3,
},
headerProfileClassic = {
type = "header",
name = L["Classic Profile"],
order = 2,
name = "Classic " .. L["Profile"],
order = 4,
},
classicProfile = {
type = "execute",
@ -48,17 +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 = 256,
imageHeight = 128,
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 = 256,
imageHeight = 128,
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",
@ -86,12 +154,31 @@ function XiconProfiles:GetOptions()
XiconProfiles:ApplyKlimp()
end,
image = "Interface\\AddOns\\Gladdy\\Images\\BasicProfiles\\Klimp1.blp",
imageWidth = 256,
imageHeight = 128,
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

View File

@ -1,4 +1,6 @@
local type, pairs, tinsert, tsort, tostring = type, pairs, table.insert, table.sort, tostring
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,35 +8,65 @@ 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,
statusbarBorderOffset = 7,
bottomMargin = 2,
statusbarBorderOffset = 6,
timerFormat = Gladdy.TIMER_FORMAT.tenths,
backgroundColor = {r = 0, g = 0, b = 0, a = 0},
},
}
SLASH_GLADDY1 = "/gladdy"
SlashCmdList["GLADDY"] = function(msg)
if (msg == "test2") then
Gladdy:ToggleFrame(2)
elseif (msg == "test5") then
Gladdy:ToggleFrame(5)
elseif (msg:find("test")) then
if (str_match(msg, "test[1-5]")) then
local _, num = str_match(msg, "(test)([1-5])")
Gladdy:ToggleFrame(tonumber(num))
elseif (msg == "test") then
Gladdy:ToggleFrame(3)
elseif (msg == "ui" or msg == "options" or msg == "config") then
LibStub("AceConfigDialog-3.0"):Open("Gladdy")
--Gladdy:ShowOptions()
elseif (msg == "reset") then
Gladdy.dbi:ResetProfile()
elseif (msg == "hide") then
@ -43,7 +75,8 @@ SlashCmdList["GLADDY"] = function(msg)
else
Gladdy:Print(L["Valid slash commands are:"])
Gladdy:Print("/gladdy ui")
Gladdy:Print("/gladdy test2-5")
Gladdy:Print("/gladdy test")
Gladdy:Print("/gladdy test1-5")
Gladdy:Print("/gladdy hide")
Gladdy:Print("/gladdy reset")
end
@ -97,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]
@ -114,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 = {},
@ -152,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()
@ -188,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 = {
@ -239,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 = {
@ -268,7 +330,8 @@ function Gladdy:SetupOptions()
local c = Gladdy.db.trinketDisableCircle
local d = Gladdy.db.drDisableCircle
local e = Gladdy.db.buffsDisableCircle
if (a == b and a == c and a == d and a == e) then
local f = Gladdy.db.racialDisableCircle
if (a == b and a == c and a == d and a == e and a == f) then
return a
else
return ""
@ -280,6 +343,7 @@ function Gladdy:SetupOptions()
Gladdy.db.trinketDisableCircle = value
Gladdy.db.drDisableCircle = value
Gladdy.db.buffsDisableCircle = value
Gladdy.db.racialDisableCircle = value
Gladdy:UpdateFrame()
end,
width= "full",
@ -297,7 +361,8 @@ function Gladdy:SetupOptions()
local c = Gladdy.db.auraCooldownAlpha
local d = Gladdy.db.trinketCooldownAlpha
local e = Gladdy.db.buffsCooldownAlpha
if (a == b and a == c and a == d and a == e) then
local f = Gladdy.db.racialCooldownAlpha
if (a == b and a == c and a == d and a == e and a == f) then
return a
else
return ""
@ -309,9 +374,16 @@ function Gladdy:SetupOptions()
Gladdy.db.auraCooldownAlpha = value
Gladdy.db.trinketCooldownAlpha = value
Gladdy.db.buffsCooldownAlpha = value
Gladdy.db.racialCooldownAlpha = value
Gladdy:UpdateFrame()
end
},
timerFormat = Gladdy:option({
type = "select",
name = L["Timer Format"],
order = 11,
values = Gladdy.TIMER_FORMAT.values
})
},
},
fontGeneral = {
@ -332,33 +404,42 @@ function Gladdy:SetupOptions()
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font,
get = function(info)
local a = Gladdy.db.castBarFont
local b = Gladdy.db.healthBarFont
local c = Gladdy.db.powerBarFont
local a = Gladdy.db.auraFont
local b = Gladdy.db.buffsFont
local c = Gladdy.db.castBarFont
local d = Gladdy.db.cooldownFont
local e = Gladdy.db.drFont
local f = Gladdy.db.auraFont
local g = Gladdy.db.buffsFont
if (a == b and a == c and a == d and a == e and a == f and a == g) then
local f = Gladdy.db.healthBarFont
local g = Gladdy.db.petHealthBarFont
local h = Gladdy.db.powerBarFont
local i = Gladdy.db.racialFont
local j = Gladdy.db.npTremorFont
local k = Gladdy.db.trinketFont
if (a == b and a == c and a == d and a == e and a == f
and a == g and a == h and a == i and a == j and a == k) then
return a
else
return ""
end
end,
set = function(info, value)
Gladdy.db.castBarFont = value
Gladdy.db.healthBarFont = value
Gladdy.db.powerBarFont = value
Gladdy.db.cooldownFont = value
Gladdy.db.drFont = value
Gladdy.db.auraFont = value
Gladdy.db.buffsFont = value
Gladdy.db.castBarFont = value
Gladdy.db.cooldownFont = value
Gladdy.db.drFont = value
Gladdy.db.healthBarFont = value
Gladdy.db.petHealthBarFont = value
Gladdy.db.powerBarFont = value
Gladdy.db.racialFont = value
Gladdy.db.npTremorFont = value
Gladdy.db.trinketFont = value
Gladdy:UpdateFrame()
end,
},
fontColor = {
type = "color",
name = L["Font color"],
name = L["Font color text"],
desc = L["Color of the text"],
order = 12,
hasAlpha = true,
@ -366,8 +447,10 @@ function Gladdy:SetupOptions()
local a = Gladdy.db.healthBarFontColor
local b = Gladdy.db.powerBarFontColor
local c = Gladdy.db.castBarFontColor
local d = Gladdy.db.petHealthBarFontColor
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) then
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) then
return a.r, a.g, a.b, a.a
else
return { r = 0, g = 0, b = 0, a = 0 }
@ -378,6 +461,35 @@ function Gladdy:SetupOptions()
Gladdy.db.healthBarFontColor = rgb
Gladdy.db.powerBarFontColor = rgb
Gladdy.db.castBarFontColor = rgb
Gladdy.db.petHealthBarFontColor = rgb
Gladdy:UpdateFrame()
end,
},
fontColorCD = {
type = "color",
name = L["Font color timer"],
desc = L["Color of the timers"],
order = 12,
hasAlpha = true,
get = function(info)
local a = Gladdy.db.auraFontColor
local b = Gladdy.db.buffsFontColor
local c = Gladdy.db.cooldownFontColor
local d = Gladdy.db.drFontColor
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) then
return a.r, a.g, a.b, a.a
else
return { r = 0, g = 0, b = 0, a = 0 }
end
end,
set = function(info, r, g, b, a)
local rgb = {r = r, g = g, b = b, a = a}
Gladdy.db.auraFontColor = rgb
Gladdy.db.buffsFontColor = rgb
Gladdy.db.cooldownFontColor = rgb
Gladdy.db.drFontColor = rgb
Gladdy:UpdateFrame()
end,
},
@ -400,27 +512,34 @@ function Gladdy:SetupOptions()
order = 14,
values = Gladdy:GetIconStyles(),
get = function(info)
if (Gladdy.db.classIconBorderStyle == Gladdy.db.trinketBorderStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.castBarIconStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.auraBorderStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.cooldownBorderStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.buffsBorderStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.drBorderStyle
and Gladdy.db.classIconBorderStyle == Gladdy.db.npTotemPlatesBorderStyle) then
return Gladdy.db.classIconBorderStyle
if (Gladdy.db.auraBorderStyle == Gladdy.db.buffsBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.castBarIconStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.classIconBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.cooldownBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.ciBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.cooldownBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.drBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.racialBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.npTotemPlatesBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.petPortraitBorderStyle
and Gladdy.db.auraBorderStyle == Gladdy.db.trinketBorderStyle) then
return Gladdy.db.auraBorderStyle
else
return ""
end
end,
set = function(info, value)
Gladdy.db.classIconBorderStyle = value
Gladdy.db.trinketBorderStyle = value
Gladdy.db.castBarIconStyle = value
Gladdy.db.auraBorderStyle = value
Gladdy.db.npTotemPlatesBorderStyle = value
Gladdy.db.cooldownBorderStyle = value
Gladdy.db.buffsBorderStyle = value
Gladdy.db.castBarIconStyle = value
Gladdy.db.classIconBorderStyle = value
Gladdy.db.ciBorderStyle = value
Gladdy.db.cooldownBorderStyle = value
Gladdy.db.drBorderStyle = value
Gladdy.db.racialBorderStyle = value
Gladdy.db.npTotemPlatesBorderStyle = value
Gladdy.db.petPortraitBorderStyle = value
Gladdy.db.trinketBorderStyle = value
Gladdy:UpdateFrame()
end,
},
@ -431,11 +550,25 @@ function Gladdy:SetupOptions()
order = 15,
hasAlpha = true,
get = function(info)
local a = Gladdy.db.classIconBorderColor
local b = Gladdy.db.trinketBorderColor
local c = Gladdy.db.castBarIconColor
local a = Gladdy.db.auraBuffBorderColor
local b = Gladdy.db.auraDebuffBorderColor
local c = Gladdy.db.buffsBorderColor
local d = Gladdy.db.castBarIconColor
local e = Gladdy.db.classIconBorderColor
local f = Gladdy.db.ciBorderColor
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) then
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
and a.r == e.r and a.g == e.g and a.b == e.b and a.a == e.a
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
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 }
@ -443,13 +576,16 @@ function Gladdy:SetupOptions()
end,
set = function(info, r, g, b, a)
local rgb = {r = r, g = g, b = b, a = a}
Gladdy.db.classIconBorderColor = rgb
Gladdy.db.trinketBorderColor = rgb
Gladdy.db.castBarIconColor = rgb
Gladdy.db.npTotemPlatesBorderColor = rgb
Gladdy.db.drBorderColor = rgb
Gladdy.db.cooldownBorderColor = rgb
Gladdy.db.auraBuffBorderColor = rgb
Gladdy.db.auraDebuffBorderColor = rgb
Gladdy.db.buffsBorderColor = rgb
Gladdy.db.castBarIconColor = rgb
Gladdy.db.classIconBorderColor = rgb
Gladdy.db.ciBorderColor = rgb
Gladdy.db.cooldownBorderColor = rgb
Gladdy.db.drBorderColor = rgb
Gladdy.db.trinketBorderColor = rgb
Gladdy.db.racialBorderColor = rgb
Gladdy:UpdateFrame()
end,
},
@ -476,7 +612,8 @@ function Gladdy:SetupOptions()
local a = Gladdy.db.healthBarTexture
local b = Gladdy.db.powerBarTexture
local c = Gladdy.db.castBarTexture
if (a == b and a == c) then
local d = Gladdy.db.petHealthBarTexture
if (a == b and a == c and a == d) then
return a
else
return ""
@ -486,6 +623,7 @@ function Gladdy:SetupOptions()
Gladdy.db.healthBarTexture = value
Gladdy.db.powerBarTexture = value
Gladdy.db.castBarTexture = value
Gladdy.db.petHealthBarTexture = value
Gladdy:UpdateFrame()
end,
width= "full",
@ -501,7 +639,8 @@ function Gladdy:SetupOptions()
local a = Gladdy.db.healthBarBorderStyle
local b = Gladdy.db.powerBarBorderStyle
local c = Gladdy.db.castBarBorderStyle
if (a == b and a == c) then
local d = Gladdy.db.petHealthBarBorderStyle
if (a == b and a == c and a == d) then
return a
else
return ""
@ -511,6 +650,7 @@ function Gladdy:SetupOptions()
Gladdy.db.healthBarBorderStyle = value
Gladdy.db.powerBarBorderStyle = value
Gladdy.db.castBarBorderStyle = value
Gladdy.db.petHealthBarBorderStyle = value
Gladdy:UpdateFrame()
end,
},
@ -532,8 +672,10 @@ function Gladdy:SetupOptions()
local a = Gladdy.db.castBarBorderColor
local b = Gladdy.db.healthBarBorderColor
local c = Gladdy.db.powerBarBorderColor
local d = Gladdy.db.petHealthBarBorderColor
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) then
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) then
return a.r, a.g, a.b, a.a
else
return { r = 0, g = 0, b = 0, a = 0 }
@ -544,6 +686,7 @@ function Gladdy:SetupOptions()
Gladdy.db.castBarBorderColor = rgb
Gladdy.db.healthBarBorderColor = rgb
Gladdy.db.powerBarBorderColor = rgb
Gladdy.db.petHealthBarBorderColor = rgb
Gladdy:UpdateFrame()
end,
},
@ -716,7 +859,7 @@ function Gladdy:GetAuras(auraType)
name = classSpells[i].name,
type = "toggle",
image = texture,
width = "2",
width = "full",
arg = tostring(classSpells[i].id[1])
}
defaultDebuffs[tostring(classSpells[i].id[1])] = true

135
README.md
View File

@ -1,31 +1,47 @@
# Gladdy - TBC
### The most powerful arena addon for WoW TBC 2.5.1
## [v1.06-Beta Download Here](https://github.com/XiconQoo/Gladdy-TBC/releases/download/v1.06-Beta/Gladdy_TBC-Classic_v1.06-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)
- 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)
- 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
@ -33,8 +49,99 @@ 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
- spec icon option added to Classicon module
- arena1-5 for name option added
- add a couple buffs to LibClassAuras
- add blessing of sacrifice and intervene to auras
- general options updated to apply font/borders/etc for all frames
- XiconProfiles updated
- /gladdy test1-5 now possible
- fix PowerBar text updates
- click through frames exept health/power bar
- add mask texture for icons
#### v1.06-Beta
- fixed BuffsDebuff module
- fix racial texture reset

View File

@ -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>