SHOW:
|
|
- or go back to the newest paste.
1 | -- SpellNotReadyYet v1.1. Created by Shadowmagé - Stormrage EU | |
2 | ||
3 | -- CONFIG | |
4 | local iconsize; | |
5 | local xoff; | |
6 | local yoff; | |
7 | local tfont; | |
8 | local fontsize = 16; | |
9 | local fdur = 0.7; | |
10 | ||
11 | local function snr_saveall() | |
12 | saved = {} | |
13 | saved["iconsize"] = iconsize | |
14 | saved["xoff"] = xoff | |
15 | saved["yoff"] = yoff | |
16 | saved["tfont"] = tfont | |
17 | saved["fontsize"] = fontsize | |
18 | saved["fdur"] = fdur | |
19 | end | |
20 | ||
21 | iconsize = 40 -- Changes the size of the icon | |
22 | xoff = 0 -- Increase to move right, decrease to move left (note: you can go into minus numbers) | |
23 | yoff = 0 -- Increase to move up, decrease to move down (note: you can go into minus numbers) | |
24 | tfont = "Fonts\\FRIZQT__.TTF" -- The file path for the font you wish to use | |
25 | fontsize = 16 -- Font size | |
26 | fdur = 0.7 -- Duration of the icon appearing on the screen (range between 0.1 and 1, anything above 1 and stuff gets funky) | |
27 | ||
28 | SLASH_SNR1 = '/snr'; | |
29 | function SlashCmdList.SNR(msg) | |
30 | local command, rest = msg:match("^(%S*)%s*(.-)$"); | |
31 | print(command.."-"..rest); | |
32 | if command == "x" and rest ~= "" then | |
33 | xoff = tonumber(rest); | |
34 | elseif command == "y" and rest ~= "" then | |
35 | yoff = tonumber(rest); | |
36 | end | |
37 | snr_saveall(); | |
38 | end | |
39 | ||
40 | ----------------- | |
41 | ||
42 | local _; | |
43 | ||
44 | ||
45 | local frameFlashManager = CreateFrame("FRAME"); | |
46 | ||
47 | local FLASHFRAMES = {}; | |
48 | local UIFrameFlashTimers = {}; | |
49 | local UIFrameFlashTimerRefCount = {}; | |
50 | ||
51 | -- Function to see if a frame is already flashing | |
52 | local function UIFrameIsFlashing(frame) | |
53 | for index, value in pairs(FLASHFRAMES) do | |
54 | if ( value == frame ) then | |
55 | return 1; | |
56 | end | |
57 | end | |
58 | return nil; | |
59 | end | |
60 | ||
61 | -- Function to stop flashing | |
62 | local function UIFrameFlashStop(frame) | |
63 | tDeleteItem(FLASHFRAMES, frame); | |
64 | frame:SetAlpha(1.0); | |
65 | frame.flashTimer = nil; | |
66 | if (frame.syncId) then | |
67 | UIFrameFlashTimerRefCount[frame.syncId] = UIFrameFlashTimerRefCount[frame.syncId]-1; | |
68 | if (UIFrameFlashTimerRefCount[frame.syncId] == 0) then | |
69 | UIFrameFlashTimers[frame.syncId] = nil; | |
70 | UIFrameFlashTimerRefCount[frame.syncId] = nil; | |
71 | end | |
72 | frame.syncId = nil; | |
73 | end | |
74 | if ( frame.showWhenDone ) then | |
75 | frame:Show(); | |
76 | else | |
77 | frame:Hide(); | |
78 | end | |
79 | end | |
80 | ||
81 | -- Called every frame to update flashing frames | |
82 | local function UIFrameFlash_OnUpdate(self, elapsed) | |
83 | local frame; | |
84 | local index = #FLASHFRAMES; | |
85 | ||
86 | -- Update timers for all synced frames | |
87 | for syncId, timer in pairs(UIFrameFlashTimers) do | |
88 | UIFrameFlashTimers[syncId] = timer + elapsed; | |
89 | end | |
90 | ||
91 | while FLASHFRAMES[index] do | |
92 | frame = FLASHFRAMES[index]; | |
93 | frame.flashTimer = frame.flashTimer + elapsed; | |
94 | ||
95 | if ( (frame.flashTimer > frame.flashDuration) and frame.flashDuration ~= -1 ) then | |
96 | UIFrameFlashStop(frame); | |
97 | else | |
98 | local flashTime = frame.flashTimer; | |
99 | local alpha; | |
100 | ||
101 | if (frame.syncId) then | |
102 | flashTime = UIFrameFlashTimers[frame.syncId]; | |
103 | end | |
104 | ||
105 | flashTime = flashTime%(frame.fadeInTime+frame.fadeOutTime+(frame.flashInHoldTime or 0)+(frame.flashOutHoldTime or 0)); | |
106 | if (flashTime < frame.fadeInTime) then | |
107 | alpha = flashTime/frame.fadeInTime; | |
108 | elseif (flashTime < frame.fadeInTime+(frame.flashInHoldTime or 0)) then | |
109 | alpha = 1; | |
110 | elseif (flashTime < frame.fadeInTime+(frame.flashInHoldTime or 0)+frame.fadeOutTime) then | |
111 | alpha = 1 - ((flashTime - frame.fadeInTime - (frame.flashInHoldTime or 0))/frame.fadeOutTime); | |
112 | else | |
113 | alpha = 0; | |
114 | end | |
115 | ||
116 | frame:SetAlpha(alpha); | |
117 | frame:Show(); | |
118 | end | |
119 | ||
120 | -- Loop in reverse so that removing frames is safe | |
121 | index = index - 1; | |
122 | end | |
123 | ||
124 | if ( #FLASHFRAMES == 0 ) then | |
125 | self:SetScript("OnUpdate", nil); | |
126 | end | |
127 | end | |
128 | ||
129 | -- Function to start a frame flashing | |
130 | local function UIFrameFlash(frame, fadeInTime, fadeOutTime, flashDuration, showWhenDone, flashInHoldTime, flashOutHoldTime, syncId) | |
131 | if ( frame ) then | |
132 | local index = 1; | |
133 | -- If frame is already set to flash then return | |
134 | while FLASHFRAMES[index] do | |
135 | if ( FLASHFRAMES[index] == frame ) then | |
136 | return; | |
137 | end | |
138 | index = index + 1; | |
139 | end | |
140 | ||
141 | if (syncId) then | |
142 | frame.syncId = syncId; | |
143 | if (UIFrameFlashTimers[syncId] == nil) then | |
144 | UIFrameFlashTimers[syncId] = 0; | |
145 | UIFrameFlashTimerRefCount[syncId] = 0; | |
146 | end | |
147 | UIFrameFlashTimerRefCount[syncId] = UIFrameFlashTimerRefCount[syncId]+1; | |
148 | else | |
149 | frame.syncId = nil; | |
150 | end | |
151 | ||
152 | -- Time it takes to fade in a flashing frame | |
153 | frame.fadeInTime = fadeInTime; | |
154 | -- Time it takes to fade out a flashing frame | |
155 | frame.fadeOutTime = fadeOutTime; | |
156 | -- How long to keep the frame flashing | |
157 | frame.flashDuration = flashDuration; | |
158 | -- Show the flashing frame when the fadeOutTime has passed | |
159 | frame.showWhenDone = showWhenDone; | |
160 | -- Internal timer | |
161 | frame.flashTimer = 0; | |
162 | -- How long to hold the faded in state | |
163 | frame.flashInHoldTime = flashInHoldTime; | |
164 | -- How long to hold the faded out state | |
165 | frame.flashOutHoldTime = flashOutHoldTime; | |
166 | ||
167 | tinsert(FLASHFRAMES, frame); | |
168 | ||
169 | frameFlashManager:SetScript("OnUpdate", UIFrameFlash_OnUpdate); | |
170 | end | |
171 | end | |
172 | ||
173 | ||
174 | ||
175 | ||
176 | local formatTime = function(s) | |
177 | local day, hour, minute = 86400, 3600, 60 | |
178 | if s >= day then | |
179 | return format("%dd", floor(s/day + 0.5)), s % day | |
180 | elseif s >= hour then | |
181 | return format("%dh", floor(s/hour + 0.5)), s % hour | |
182 | elseif s >= minute then | |
183 | return format("%dm", floor(s/minute + 0.5)), s % minute | |
184 | elseif s >= minute / 12 then | |
185 | return floor(s + 0.5), (s * 100 - floor(s * 100))/100 | |
186 | end | |
187 | return format("%.1f", s), (s * 100 - floor(s * 100))/100 | |
188 | end | |
189 | ||
190 | -- Hides standard UI error spam frame, since we are | |
191 | -- replacing it by our icons | |
192 | UIErrorsFrame:Hide(); | |
193 | ||
194 | local frame = CreateFrame("Frame"); | |
195 | frame:RegisterEvent("UNIT_SPELLCAST_FAILED"); | |
196 | frame:RegisterEvent("UI_ERROR_MESSAGE"); | |
197 | - | frame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED"); |
197 | + | -- frame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED"); |
198 | frame:RegisterEvent("ADDON_LOADED"); | |
199 | ||
200 | local function eventHandler(self, event, ...) | |
201 | ||
202 | -- Fires on spellcast (either suceeded or failed because of cooldown, etc) | |
203 | if event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_SUCCEEDED" then | |
204 | local unit, spellname, spellrank, spellidcounter, id = ...; | |
205 | local start, duration, enabled = GetSpellCooldown(id); | |
206 | local name, rank, icon, cost, isFunnel, powerType, castTime, minRange, maxRange = GetSpellInfo(id) | |
207 | local seconds = GetTime(); | |
208 | local timeleft = (start + duration - seconds); | |
209 | ||
210 | if name == "Synapse Springs" then else | |
211 | if unit == "player" then | |
212 | local iconframe = CreateFrame("Frame", nil, UIParent) | |
213 | UIFrameFlash(iconframe, 0, fdur, fdur, false, 0, 0) | |
214 | iconframe:SetPoint("CENTER", xoff, yoff) | |
215 | iconframe:SetSize(iconsize, iconsize) | |
216 | iconframe:SetBackdrop({ | |
217 | bgFile = icon | |
218 | }) | |
219 | if event == "UNIT_SPELLCAST_FAILED" then | |
220 | iconframe:SetBackdropColor(1,0.2,0.2); | |
221 | local tr = iconframe:CreateFontString() | |
222 | tr:SetPoint("BOTTOM", 0, 0) | |
223 | tr:SetSize(40, 40) | |
224 | tr:SetFont(tfont, fontsize, "OUTLINE") | |
225 | tr:SetTextColor(1,0.7,0.7) | |
226 | if timeleft < 0 then | |
227 | tr:SetText("ERR") | |
228 | else | |
229 | tr:SetText(formatTime(timeleft)) | |
230 | end | |
231 | end | |
232 | iconframe:SetFrameStrata("BACKGROUND") | |
233 | end | |
234 | end | |
235 | ||
236 | -- fires on UI Error "I need a target!" | |
237 | elseif event == "UI_ERROR_MESSAGE" then | |
238 | local iconframe = CreateFrame("Frame", nil, UIParent) | |
239 | UIFrameFlash(iconframe, 0, fdur, fdur, false, 0, 0) | |
240 | iconframe:SetPoint("CENTER", xoff, yoff) | |
241 | iconframe:SetSize(iconsize, iconsize) | |
242 | iconframe:SetBackdrop({ | |
243 | bgFile = "Interface\\TargetingFrame\\UI-RaidTargetingIcon_7" | |
244 | }) | |
245 | -- iconframe:SetBackdropColor(1,0.2,0.2); | |
246 | iconframe:SetFrameStrata("BACKGROUND") | |
247 | ||
248 | -- load options | |
249 | elseif event == "ADDON_LOADED" then | |
250 | if saved then | |
251 | iconsize = saved["iconsize"] | |
252 | xoff = saved["xoff"] | |
253 | yoff = saved["yoff"] | |
254 | tfont = saved["tfont"] | |
255 | fontsize = saved["fontsize"] | |
256 | fdur = saved["fdur"] | |
257 | end | |
258 | end | |
259 | end | |
260 | ||
261 | frame:SetScript("OnEvent", eventHandler); |