Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- SpellNotReadyYet v1.1. Created by Shadowmagé - Stormrage EU
- -- CONFIG
- local iconsize;
- local xoff;
- local yoff;
- local tfont;
- local fontsize = 16;
- local fdur = 0.7;
- local function snr_saveall()
- saved = {}
- saved["iconsize"] = iconsize
- saved["xoff"] = xoff
- saved["yoff"] = yoff
- saved["tfont"] = tfont
- saved["fontsize"] = fontsize
- saved["fdur"] = fdur
- end
- iconsize = 40 -- Changes the size of the icon
- xoff = 0 -- Increase to move right, decrease to move left (note: you can go into minus numbers)
- yoff = 0 -- Increase to move up, decrease to move down (note: you can go into minus numbers)
- tfont = "Fonts\\FRIZQT__.TTF" -- The file path for the font you wish to use
- fontsize = 16 -- Font size
- fdur = 0.7 -- Duration of the icon appearing on the screen (range between 0.1 and 1, anything above 1 and stuff gets funky)
- SLASH_SNR1 = '/snr';
- function SlashCmdList.SNR(msg)
- local command, rest = msg:match("^(%S*)%s*(.-)$");
- print(command.."-"..rest);
- if command == "x" and rest ~= "" then
- xoff = tonumber(rest);
- elseif command == "y" and rest ~= "" then
- yoff = tonumber(rest);
- end
- snr_saveall();
- end
- -----------------
- local _;
- local frameFlashManager = CreateFrame("FRAME");
- local FLASHFRAMES = {};
- local UIFrameFlashTimers = {};
- local UIFrameFlashTimerRefCount = {};
- -- Function to see if a frame is already flashing
- local function UIFrameIsFlashing(frame)
- for index, value in pairs(FLASHFRAMES) do
- if ( value == frame ) then
- return 1;
- end
- end
- return nil;
- end
- -- Function to stop flashing
- local function UIFrameFlashStop(frame)
- tDeleteItem(FLASHFRAMES, frame);
- frame:SetAlpha(1.0);
- frame.flashTimer = nil;
- if (frame.syncId) then
- UIFrameFlashTimerRefCount[frame.syncId] = UIFrameFlashTimerRefCount[frame.syncId]-1;
- if (UIFrameFlashTimerRefCount[frame.syncId] == 0) then
- UIFrameFlashTimers[frame.syncId] = nil;
- UIFrameFlashTimerRefCount[frame.syncId] = nil;
- end
- frame.syncId = nil;
- end
- if ( frame.showWhenDone ) then
- frame:Show();
- else
- frame:Hide();
- end
- end
- -- Called every frame to update flashing frames
- local function UIFrameFlash_OnUpdate(self, elapsed)
- local frame;
- local index = #FLASHFRAMES;
- -- Update timers for all synced frames
- for syncId, timer in pairs(UIFrameFlashTimers) do
- UIFrameFlashTimers[syncId] = timer + elapsed;
- end
- while FLASHFRAMES[index] do
- frame = FLASHFRAMES[index];
- frame.flashTimer = frame.flashTimer + elapsed;
- if ( (frame.flashTimer > frame.flashDuration) and frame.flashDuration ~= -1 ) then
- UIFrameFlashStop(frame);
- else
- local flashTime = frame.flashTimer;
- local alpha;
- if (frame.syncId) then
- flashTime = UIFrameFlashTimers[frame.syncId];
- end
- flashTime = flashTime%(frame.fadeInTime+frame.fadeOutTime+(frame.flashInHoldTime or 0)+(frame.flashOutHoldTime or 0));
- if (flashTime < frame.fadeInTime) then
- alpha = flashTime/frame.fadeInTime;
- elseif (flashTime < frame.fadeInTime+(frame.flashInHoldTime or 0)) then
- alpha = 1;
- elseif (flashTime < frame.fadeInTime+(frame.flashInHoldTime or 0)+frame.fadeOutTime) then
- alpha = 1 - ((flashTime - frame.fadeInTime - (frame.flashInHoldTime or 0))/frame.fadeOutTime);
- else
- alpha = 0;
- end
- frame:SetAlpha(alpha);
- frame:Show();
- end
- -- Loop in reverse so that removing frames is safe
- index = index - 1;
- end
- if ( #FLASHFRAMES == 0 ) then
- self:SetScript("OnUpdate", nil);
- end
- end
- -- Function to start a frame flashing
- local function UIFrameFlash(frame, fadeInTime, fadeOutTime, flashDuration, showWhenDone, flashInHoldTime, flashOutHoldTime, syncId)
- if ( frame ) then
- local index = 1;
- -- If frame is already set to flash then return
- while FLASHFRAMES[index] do
- if ( FLASHFRAMES[index] == frame ) then
- return;
- end
- index = index + 1;
- end
- if (syncId) then
- frame.syncId = syncId;
- if (UIFrameFlashTimers[syncId] == nil) then
- UIFrameFlashTimers[syncId] = 0;
- UIFrameFlashTimerRefCount[syncId] = 0;
- end
- UIFrameFlashTimerRefCount[syncId] = UIFrameFlashTimerRefCount[syncId]+1;
- else
- frame.syncId = nil;
- end
- -- Time it takes to fade in a flashing frame
- frame.fadeInTime = fadeInTime;
- -- Time it takes to fade out a flashing frame
- frame.fadeOutTime = fadeOutTime;
- -- How long to keep the frame flashing
- frame.flashDuration = flashDuration;
- -- Show the flashing frame when the fadeOutTime has passed
- frame.showWhenDone = showWhenDone;
- -- Internal timer
- frame.flashTimer = 0;
- -- How long to hold the faded in state
- frame.flashInHoldTime = flashInHoldTime;
- -- How long to hold the faded out state
- frame.flashOutHoldTime = flashOutHoldTime;
- tinsert(FLASHFRAMES, frame);
- frameFlashManager:SetScript("OnUpdate", UIFrameFlash_OnUpdate);
- end
- end
- local formatTime = function(s)
- local day, hour, minute = 86400, 3600, 60
- if s >= day then
- return format("%dd", floor(s/day + 0.5)), s % day
- elseif s >= hour then
- return format("%dh", floor(s/hour + 0.5)), s % hour
- elseif s >= minute then
- return format("%dm", floor(s/minute + 0.5)), s % minute
- elseif s >= minute / 12 then
- return floor(s + 0.5), (s * 100 - floor(s * 100))/100
- end
- return format("%.1f", s), (s * 100 - floor(s * 100))/100
- end
- -- Hides standard UI error spam frame, since we are
- -- replacing it by our icons
- UIErrorsFrame:Hide();
- local frame = CreateFrame("Frame");
- frame:RegisterEvent("UNIT_SPELLCAST_FAILED");
- frame:RegisterEvent("UI_ERROR_MESSAGE");
- -- frame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED");
- frame:RegisterEvent("ADDON_LOADED");
- local function eventHandler(self, event, ...)
- -- Fires on spellcast (either suceeded or failed because of cooldown, etc)
- if event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_SUCCEEDED" then
- local unit, spellname, spellrank, spellidcounter, id = ...;
- local start, duration, enabled = GetSpellCooldown(id);
- local name, rank, icon, cost, isFunnel, powerType, castTime, minRange, maxRange = GetSpellInfo(id)
- local seconds = GetTime();
- local timeleft = (start + duration - seconds);
- if name == "Synapse Springs" then else
- if unit == "player" then
- local iconframe = CreateFrame("Frame", nil, UIParent)
- UIFrameFlash(iconframe, 0, fdur, fdur, false, 0, 0)
- iconframe:SetPoint("CENTER", xoff, yoff)
- iconframe:SetSize(iconsize, iconsize)
- iconframe:SetBackdrop({
- bgFile = icon
- })
- if event == "UNIT_SPELLCAST_FAILED" then
- iconframe:SetBackdropColor(1,0.2,0.2);
- local tr = iconframe:CreateFontString()
- tr:SetPoint("BOTTOM", 0, 0)
- tr:SetSize(40, 40)
- tr:SetFont(tfont, fontsize, "OUTLINE")
- tr:SetTextColor(1,0.7,0.7)
- if timeleft < 0 then
- tr:SetText("ERR")
- else
- tr:SetText(formatTime(timeleft))
- end
- end
- iconframe:SetFrameStrata("BACKGROUND")
- end
- end
- -- fires on UI Error "I need a target!"
- elseif event == "UI_ERROR_MESSAGE" then
- local iconframe = CreateFrame("Frame", nil, UIParent)
- UIFrameFlash(iconframe, 0, fdur, fdur, false, 0, 0)
- iconframe:SetPoint("CENTER", xoff, yoff)
- iconframe:SetSize(iconsize, iconsize)
- iconframe:SetBackdrop({
- bgFile = "Interface\\TargetingFrame\\UI-RaidTargetingIcon_7"
- })
- -- iconframe:SetBackdropColor(1,0.2,0.2);
- iconframe:SetFrameStrata("BACKGROUND")
- -- load options
- elseif event == "ADDON_LOADED" then
- if saved then
- iconsize = saved["iconsize"]
- xoff = saved["xoff"]
- yoff = saved["yoff"]
- tfont = saved["tfont"]
- fontsize = saved["fontsize"]
- fdur = saved["fdur"]
- end
- end
- end
- frame:SetScript("OnEvent", eventHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement