-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrinkets.lua
162 lines (141 loc) · 5.4 KB
/
trinkets.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
-- Credit to Starship/Spaceship from AJ for providing original concept.
sArena.Trinkets = CreateFrame("Frame", nil, sArena)
sArena.Defaults.Trinkets = {
enabled = true,
x = 33,
y = 16,
point = "CENTER",
scale = 0.7,
alwaysShow = false,
}
function sArena.Trinkets:Initialize()
if ( not sArenaDB.Trinkets ) then
sArenaDB.Trinkets = CopyTable(sArena.Defaults.Trinkets)
end
for i = 1, MAX_ARENA_ENEMIES do
local ArenaFrame = _G["ArenaEnemyFrame"..i]
self:CreateIcon(ArenaFrame)
end
end
hooksecurefunc(sArena, "Initialize", function() sArena.Trinkets:Initialize() end)
function sArena.Trinkets:CreateIcon(frame)
local trinket = CreateFrame("Cooldown", nil, frame)
trinket:SetFrameLevel(frame:GetFrameLevel() + 3)
if ( sArenaDB.Trinkets.point ) then
trinket:SetPoint(sArenaDB.Trinkets.point, frame, sArenaDB.Trinkets.x, sArenaDB.Trinkets.y)
else
trinket:SetPoint("LEFT", frame, "RIGHT", 0, 0)
end
trinket:SetSize(18, 18)
trinket:SetScale(sArenaDB.Trinkets.scale)
trinket.Icon = CreateFrame("Frame", nil, trinket)
trinket.Icon:SetFrameLevel(trinket:GetFrameLevel() - 1)
trinket.Icon:SetAllPoints()
trinket.Icon.Texture = trinket.Icon:CreateTexture(nil, "BORDER")
trinket.Icon.Texture:SetAllPoints()
SetPortraitToTexture(trinket.Icon.Texture, UnitFactionGroup('player') == "Horde" and "Interface\\Icons\\inv_jewelry_trinketpvp_02" or "Interface\\Icons\\inv_jewelry_trinketpvp_01")
trinket.Icon.Border = CreateFrame("Frame", nil, trinket.Icon)
trinket.Icon.Border:SetFrameLevel(trinket:GetFrameLevel() + 1)
trinket.Icon.Border:SetAllPoints()
trinket.Icon.Border.Texture = trinket.Icon.Border:CreateTexture(nil, "ARTWORK")
trinket.Icon.Border.Texture:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder")
trinket.Icon.Border.Texture:SetPoint("TOPLEFT", -6, 5)
trinket.Icon.Border.Texture:SetSize(50, 50)
trinket:RegisterForDrag("LeftButton")
trinket:SetScript("OnDragStart", function(s) s:StartMoving() end)
trinket:SetScript("OnDragStop", function(s) s:StopMovingOrSizing() self:DragStop(s) end)
if ( not sArenaDB.Trinkets.enabled ) then trinket.Icon:Hide() end
self:AlwaysShow(sArenaDB.Trinkets.alwaysShow, trinket)
local id = frame:GetID()
self["arena"..id] = trinket
end
function sArena.Trinkets:Test(numOpps)
if ( sArena:CombatLockdown() or not sArenaDB.Trinkets.enabled ) then return end
for i = 1, numOpps do
self["arena"..i].Icon:Show()
self["arena"..i]:SetCooldown(0, -1)
self["arena"..i]:EnableMouse(true)
self["arena"..i]:SetMovable(true)
end
end
hooksecurefunc(sArena, "Test", function(obj, arg1) sArena.Trinkets:Test(arg1) end)
function sArena.Trinkets:HideTrinkets()
for i = 1, MAX_ARENA_ENEMIES do
self["arena"..i].Icon:Hide()
self["arena"..i]:Hide()
self["arena"..i]:SetCooldown(0, 0)
self["arena"..i]:EnableMouse(false)
self["arena"..i]:SetMovable(false)
end
end
function sArena.Trinkets:DragStop(s)
-- Zork/Rothar's hack to maintain relativity: Super Cool.
local sX, sY = s:GetCenter()
local pX, pY = s:GetParent():GetCenter()
local scale = s:GetScale()
sX, sY = floor(sX*scale), floor(sY*scale)
pX, pY = floor(pX), floor(pY)
local fX, fY = floor((pX-sX)*(-1)), floor((pY-sY)*(-1))
for i = 1, MAX_ARENA_ENEMIES do
self["arena"..i]:ClearAllPoints()
self["arena"..i]:SetPoint("CENTER",self["arena"..i]:GetParent(),fX/scale,fY/scale)
end
local _
sArenaDB.Trinkets.point, _, _, sArenaDB.Trinkets.x, sArenaDB.Trinkets.y = s:GetPoint()
end
function sArena.Trinkets:Scale(scale)
for i = 1, MAX_ARENA_ENEMIES do
self["arena"..i]:SetScale(scale)
if ( sArenaDB.Trinkets.alwaysShow ) then
self["arena"..i].Icon:SetScale(scale)
else
self["arena"..i].Icon:SetScale(1)
end
end
end
function sArena.Trinkets:AlwaysShow(alwaysShow, ...)
local trinket = ...
if ( trinket ) then
if ( alwaysShow ) then
trinket.Icon:SetParent(trinket:GetParent())
trinket.Icon:SetScale(sArenaDB.Trinkets.scale)
else
trinket.Icon:SetParent(trinket)
trinket.Icon:SetScale(1)
end
trinket.Icon:SetFrameLevel(trinket:GetFrameLevel() - 1)
else
for i = 1, MAX_ARENA_ENEMIES do
trinket = self["arena"..i]
if ( alwaysShow ) then
trinket.Icon:SetParent(trinket:GetParent())
trinket.Icon:SetScale(sArenaDB.Trinkets.scale)
else
trinket.Icon:SetParent(trinket)
trinket.Icon:SetScale(1)
end
trinket.Icon:SetFrameLevel(trinket:GetFrameLevel() - 1)
end
end
end
sArena.Trinkets:SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end)
function sArena.Trinkets:UNIT_SPELLCAST_SUCCEEDED(unitID, spell)
if not sArena.Trinkets[unitID] then return end
if spell == GetSpellInfo(42292) or spell == GetSpellInfo(59752) then -- Trinket and EMFH
CooldownFrame_SetTimer(self[unitID], GetTime(), 120, 1)
--[[elseif spell == GetSpellInfo(7744) then -- WOTF
CooldownFrame_SetTimer(self[unitID], GetTime(), 30, 1)]]
end
end
function sArena.Trinkets:PLAYER_ENTERING_WORLD()
local instanceType = select(2, IsInInstance())
if ( sArenaDB.Trinkets.enabled and instanceType == "arena" ) then
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
for i = 1, MAX_ARENA_ENEMIES do
self["arena"..i]:SetCooldown(0, 0)
end
elseif ( self:IsEventRegistered("UNIT_SPELLCAST_SUCCEEDED") ) then
self:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED")
end
end
sArena.Trinkets:RegisterEvent("PLAYER_ENTERING_WORLD")