Get an Epic Experience with Premium

Bitten's SpellFlash Library

Libraries Login to Add Favorites
  • World of Warcraft
  • 323,392 Monthly Downloads
  • Supports: 6.0.3
  • 6,248,279 Total Downloads
  • Updated 01/25/2015
  • Created 04/28/2012
  • 518 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: All Rights Reserved
  • Newest File: 60000.20

About Bitten's SpellFlash Library

When you download one of Bitten's SpellFlash class modules, it comes with a copy of this addon. You do not need to download this addon separately. If you have it installed, you can delete it. That is, of course, unless you like to install the "nolib" versions of addons - but in that case you should know what you are doing and I don't need to give you any more instruction. :)

This is a library to make SpellFlash modules easier to create. Please see the FAQ before posting a question. If that doesn't address your issue, or you have a suggestion to improve this addon, please either leave a comment or create a ticket.

If you are an addon author and want to learn more, read on. If you are not an addon author, there is nothing here you need to worry about - read on only only if you're curious.

Help with cooldown and (de)buff timing

There are often times when want to know whether a certain (de)buff will be present when it's time to cast the next spell. If you use a naive approach of simply checking for the presence of a buff now, and it falls off half way through your current cast, you may have been flashing the wrong spell. There are clones of many (de)buff and cooldown checking functions that allow you to get the information you need easily. For example this library function:

function c.GetMyDebuffDuration(name, noGCD)
    return s.MyDebuffDuration(c.GetID(name)) - c.GetBusyTime(noGCD)

Passing a value for noGCD will cause it to ignore the global cooldown, which is useful for spells that are not on the gcd. Otherwise it uses the longer of the gcd and your current cast.

International support without cluttering your code with spell IDs

There are clones of several often-used SpellFlash functions that translate from the spell name you pass to their spell id. For example, you can replace calls that look like

s.Buff(74434--[[Soulburn]], "player")

With calls that look like


Without fear of your code breaking when used on a non-English client. There is also a function, c.GetID("name"), that you can use if a cloned function does not exist in the library. Note that for these functions to work, you must have the spell or buff defined in a.spells.

Estimated Harm and Heal Target Counts

During your rotation function you will have access to the estimated harm and heal targets, to smoothly ramp through AoE rotatinos:

if c.EstimatedHarmTargets > 2 then
if c.EstimatedHealTargets > 5 then
Learning More

There are several other little features, like simplifying your Spam function while supporting options to turn rotations on and off. Feel free to browse the source to learn more. All of Bitten's SpellFlash modules use this library, so any of them provide examples of how to use it.

r364 | slippycheeze | 2015-01-25 20:06:26 +0000 (Sun, 25 Jan 2015) | 1 line
Changed paths:
   A /tags/60000.20 (from /trunk:363)

Create tag 60000.20
r363 | slippycheeze | 2015-01-25 20:06:09 +0000 (Sun, 25 Jan 2015) | 5 lines
Changed paths:
   M /trunk/src/Flashing.lua

Support Combo Points and multiple power types, including secondary power types.

This extends the core support for power management in DelayPriorityFlash
to include secondary power types (Combo Points, specifically) as well as
Energy and Rage, and to correctly handle delays for them.
r362 | slippycheeze | 2015-01-25 20:06:04 +0000 (Sun, 25 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/Flashing.lua

Add energy support to power delay calculations
r360 | slippycheeze | 2015-01-24 07:03:34 +0000 (Sat, 24 Jan 2015) | 9 lines
Changed paths:
   M /trunk/src/Events.lua

Support event handles at the class addon level, not just rotations

More and more classes share various logic across their specs; in many
cases it makes more sense to have a "class rotation addon" level handler
for various events that captures information for later use than to
duplicate the same code across all three rotations.

This adds that capability to the core, calling the addon event hook
prior to the rotation event hook.  Both are dispatched if present.
r357 | slippycheeze | 2015-01-20 21:54:15 +0000 (Tue, 20 Jan 2015) | 9 lines
Changed paths:
   M /trunk/src/Flashing.lua

Move (primary) power check and wait into core

Many specs use some form of power that regenerates -- energy, focus,
mana (eg: pally) -- that is in limited supply.  Everyone had to
implement their own checks for power, and delay implementation for "how
long will this take".

This moves support into the core, and uses it for rage checks on
warriors, which is as good a test case as anything.
r356 | slippycheeze | 2015-01-20 21:54:11 +0000 (Tue, 20 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/Flashing.lua

Always check cooldown wait, even without annotation
r355 | slippycheeze | 2015-01-20 21:54:07 +0000 (Tue, 20 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/Events.lua

Implement event for entering combat.
r354 | slippycheeze | 2015-01-20 21:54:03 +0000 (Tue, 20 Jan 2015) | 12 lines
Changed paths:
   M /trunk/src/Events.lua

Expose "canLandWithin" to test if a spell can land in a duration

This is useful for various specs, who want to cast a spell while a
debuff is present on the target, but don't actually trigger it.

For example, the frost Mage pet applies a debuff that generates frost
charges, so you want to put priority on Frostbolt, if it will land
before the debuff expires.

Right now this exposes the raw mechanic, not a high level interface to
"cast with this debuff", because the source of the debuff is usually
going to be less than simple -- or you wouldn't be doing this.
r353 | slippycheeze | 2015-01-20 21:53:59 +0000 (Tue, 20 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/BittensSpellFlashLibrary.lua
   M /trunk/src/Events.lua

Handle moved tinsert => table.insert in WoD
r350 | slippycheeze | 2015-01-17 04:47:49 +0000 (Sat, 17 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/Flashing.lua

Handle nil rotation in finding flash color
r348 | slippycheeze | 2015-01-12 06:55:30 +0000 (Mon, 12 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/BittensSpellFlashLibrary.lua

Add c.Form, to wrap s.Form without needing to do manual ID traslation
r346 | slippycheeze | 2015-01-12 05:29:36 +0000 (Mon, 12 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/BittensSpellFlashLibrary.lua
   M /trunk/src/Events.lua
   M /trunk/src/Flashing.lua
   M /trunk/src/Foods.lua
   M /trunk/src/OptionsFrames.lua
   D /trunk/src/Simulations.lua

Clean up luacheck warnings and errors
r345 | slippycheeze | 2015-01-12 05:29:32 +0000 (Mon, 12 Jan 2015) | 5 lines
Changed paths:
   M /trunk/src/Flashing.lua
   M /trunk/src/SlashCommands.lua

Remove AoE mode, add rotation default flash color overrides

This is used in the pally module, since every spell is gold, and that
has low contrast with the default flashing color.  Since this is a
significant change, the new feature is optional.
r344 | slippycheeze | 2015-01-12 05:29:27 +0000 (Mon, 12 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/BittensSpellFlashLibrary.lua

Whitespace cleanup, no function change
r342 | slippycheeze | 2015-01-03 09:30:51 +0000 (Sat, 03 Jan 2015) | 10 lines
Changed paths:
   M /trunk/src/Flashing.lua

Add support for spell.Debug to dig into why a spell failed to flash

This is something I have written, and deleted, about a dozen times while
trying to figure out Blizzard bugs (like "this spell has range, but is
never, ever in range" on Earthquake).

This codifies it, and makes it reasonably efficient, in that it returns
one extra value from a function, a constant string, and performs one
extra conditional dereference, load, check set, without function calls
if debugging is not enabled.
r340 | slippycheeze | 2015-01-01 22:59:53 +0000 (Thu, 01 Jan 2015) | 1 line
Changed paths:
   M /trunk/src/BittensSpellFlashLibrary.lua

Don't print messages about "nil" spells being undefined.
r338 | slippycheeze | 2015-01-01 00:28:23 +0000 (Thu, 01 Jan 2015) | 9 lines
Changed paths:
   M /trunk/src/Flashing.lua

Support spell charges natively in rotation flashing

This extends the PriorityFlash and DelayPriorityFlash code to natively
support spells that use charges, such that they will be treated as
unflashable when there are no charges available.

This allows all the hand-coded implementations of the same (or the bugs
where they should have been considered and were not) to be replaced with
the core just doing the right thing™.


First Previous Page 7 of 14 Next Last
  • #133

    My addon doesn't seem to work properly. Most of the time, Its on, but it doesnt respond like it does. No spellflashing..nothing..This is puzzling. Reloading UI doesnt seem to fix this problem 

    EDIT: When I restart the behaves properly, but thats the only time it does. 

    Last edited by Keelendis on 2/26/2013 11:34:30 AM
  • #134

    When does it stop working?  Are you getting a Lua error?  (See this question for instructions on checking for a Lua error.)

    Author of Bitten's SpellFlash.

  • #131

    Is there a way to install an other skin of the flashings? like it looks like normal blizz procs?

    Last edited by kaosly on 2/6/2013 10:04:52 PM
  • #132

    Not to my knowledge.  I did not make the part that does the flashing animation, BigRedBrent did.  He is the author of SpellFlash.

    Author of Bitten's SpellFlash.

  • #129

    After installing the update I've got nothing but errors. Here is the latest error message I received just by opening the talent box.

    Message: ...rface\AddOns\BittensSpellFlashLibrary\src\Events.lua:285: attempt to index upvalue 'u' (a nil value)

    Time: 01/31/13 14:25:46

    Count: 1

    Stack: ...rface\AddOns\BittensSpellFlashLibrary\src\Events.lua:285: in function <...rface\AddOns\BittensSpellFlashLibrary\src\Events.lua:279>
    [C]: in function `LoadAddOn'
    Interface\FrameXML\UIParent.lua:299: in function `UIParentLoadAddOn'
    Interface\FrameXML\UIParent.lua:349: in function <Interface\FrameXML\UIParent.lua:348>
    [C]: in function `TalentFrame_LoadUI'
    Interface\FrameXML\UIParent.lua:477: in function <Interface\FrameXML\UIParent.lua:472>

    Locals: self = <unnamed> {
     0 = <userdata>

    event = "ADDON_LOADED"
    (*temporary) = nil
    (*temporary) = "BittensSpellFlashLibrary"
    (*temporary) = "Blizzard_TalentUI"
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = "attempt to index upvalue 'u' (a nil value)"
    select = <function> defined =[C]:-1
    libName = "BittensSpellFlashLibrary"
    u = nil
    hookLAB = <function> defined @Interface\AddOns\BittensSpellFlashLibrary\src\Events.lua:145
    s = <table> {
     GetPrimaryThreatTarget = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2274
     CastingOrChanneling = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2035
     InParty = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2111
     RangedItemBuffDuration = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2694
     Debuff = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2637
     Shooting = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2845
     UsesMana = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2547
     DebuffStack = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2641
     BreakOnDamageCC = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3538
     Equipped = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2814
     HasSpell = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1722
     CopyTable = <function> defined @Interface\AddOns\SpellFlashCore\SpellFlashCore.lua:79
     Poisoned = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3581
     FlashPet = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3686
     AuraDelay = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1619
     InRaidOrParty = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2119
     InGroup = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2119
     CrowedControlled = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3558
     GetModuleFlashable = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1430
     Buff = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2608
     Class = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1853
     TestFlashSettings = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:622
     Dummy = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:305
     RegisterModuleOptionsWindow = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1426
     ClearAllModuleConfigs = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1465
     MainHandItemBuffDuration = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:2670
     CheckIfVehicleSpellCastable = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3231
     UnregisterModuleEvent = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1499
     FlashForm = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:3690
     UpdatedVariables = <table> {
     Spec = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1709
     Moving = <function> defined @Interface\AddOns\SpellFlash\SpellFlash.lua:1845
     RegisterOtherAurasFunction = <function> defi

  • #130

    That is a puzzling error.  It seems to me this particular error must be caused by either a bad installation (you could try deleting and re-installing the library), or by an earlier error.  When you login or /reloadui, the first time the error pops up, could you please make sure you are viewing the first error for SpellFlash (using the Previous/Next buttons), and send me that text?  You could create a ticket so not everybody has to look at these error logs.

    Author of Bitten's SpellFlash.

  • #127

    does spell flash change on the execution phase

  • #128

    If you're using Bitten's modules, then yes they should.  You can consult the description of each individual module for an explanation of how exactly they change.

    Author of Bitten's SpellFlash.

  • #126

    Quick note for tanks: the latest version adds small green flashes on your mitigation/healing cooldowns.  Those are just for information (like all small green flashes in my modules), telling you that cooldown is up next if you take enough damage to warrant using it.

    Author of Bitten's SpellFlash.

  • #124

    Is there any chance we can get an option to disable the Red Outline for Spell Procs. I love spell flash but I prefer the orignial blizzard one over the red one.

    Last edited by Olaf4862 on 12/2/2012 4:31:37 PM
  • #125

    Short answer: no.  Frown

    Long answer: Many people never understood the difference between spellflash flashes and default blizzard flashes, so I disabled them in order to make my modules more foolproof.  Also, even for a skilled user it requires less attention to determine which spell is flashing when Blizzard is not also flashing the border of other spells.

    If you can think of a better way to indicate procs than the red border that does not involve making them flashy, I would definitely consider it.

    Author of Bitten's SpellFlash.

  • #118

    I love your class-specific SpellFlash addons. My only (minor) problem that I discovered today is that the dependencies didn't automatically download with the Curse client on my MacBook Pro. My Curse client on my Windows desktop computer correctly grabs them all, though.

    I wonder if it has anything to do with the fact that the Mac Curse client is still version 4 -- Version Beta (, to be specific (per a Curse post on their forums, they're working on a version 5 for Mac now, to catch it up to the Windows version, but no ETA at the moment).

    Not a huge deal, I guess just more of an FYI at this point.

    Thanks for the awesome addons!

  • #120

    Yes i have them but it says now dependency out of date

  • #123

    Thanks got it working. :)


  • #122
    Quote from Icanmack »

    Having the same problem as Xiebinrui

    If you have all the dependancies I mentioned on your post in the monk thread, then they all downloaded.  Sounds like you need to check the "Load out-of date addons" box.

    Author of Bitten's SpellFlash.

  • To post a comment, please login or register a new account.
Login to Curse

Don't have an account? Create One.

Get an epic experience with Curse Premium
  • Faster addon downloads
  • Premium-Only Beta Giveaways
  • Ad-Free Curse experience
  • Premium Curse Client
  • and many More Features
  • Learn More »

Gamepedia Free-shirt Giveaway