Advertisement
Guest User

Untitled

a guest
May 25th, 2013
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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");
  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);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement