Get an Epic Experience with Premium

Ovale Spell Priority

Buffs & Debuffs Login to Add Favorites
  • World of Warcraft
  • 174,593 Monthly Downloads
  • Supports: 6.0.3
  • 2,246,282 Total Downloads
  • Updated 01/30/2015
  • Created 08/17/2008
  • 767 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: MIT License
  • Newest File: 6.0.53

About Ovale Spell Priority

Ovale Spell Priority is a rotation-helper addon that shows you what spell or ability you should use in order to maximize your damage.

It displays one or more icons that show the cooldown of an action. The action is conditionally defined through a user-defined script, e.g. you may display either Corruption if the DoT is not on your target or Shadow Bolt if the Corruption DoT is already on your target.

The current release of Ovale provides default scripts for the following classes for Warlords of Draenor:

  • Death Knight: Blood, Frost, Unholy
  • Druid: Feral, Guardian, Restoration (Balance is NOT currently supported)
  • Hunter: Beast Mastery, Marksmanship, Survival
  • Mage: Arcane, Fire, Frost
  • Monk: Brewmaster, Windwalker
  • Paladin: Protection, Retribution
  • Priest: Shadow
  • Rogue: Assassination, Combat, Subtlety
  • Shaman: Elemental, Enhancement, Restoration
  • Warlock: Affliction, Demonology, Destruction
  • Warrior: Arms, Fury, Protection

Default scripts are based on SimulationCraft. You may also customize the default script to suit your needs (see Documentation) or use scripts made by other users.

See the video of a survival hunter using Ovale during Wrath of the Lich King.

Please use the forums to submit scripts or discuss them. If you want to report bugs, use the ticket manager.


  • Tracks DoTs, buffs, debuffs, cooldowns, combo points, runes, mana -- everything that a player would need to decide what to do.
  • Adapts to your talent points and glyphs.
  • 100% configurable: everything is in an easy-to-understand script that you can modify and test in real-time without reloading your UI.
  • Compatible with the action icon skinning library Masque.
  • Use SpellFlashCore to flash abilities on action bars in addition, or as an alternative, to displaying the ability icons.


How closely are the default scripts based on SimulationCraft?

The SimulationCraft APL language and the Ovale script language are functionally very similar and concepts from one can be translated into the other in a very direct and mechanical way. For all intents and purposes, the default scripts are the SimulationCraft APLs imported into the game and displayed visually.

Why is the key binding displayed for an action wrong?

You may be running an action bar addon, e.g., Bartender4, etc., that does not use the Blizzard action bar frames.

Why is the icon sometimes red?

The cooldown that is displayed in an icon is not always the true action cooldown. If this cooldown is longer than the action cooldown, then the icon is red. In most cases, it means that if you use this action too soon, then you will overwrite or clip a DoT, which may not be what you want.

How do I make the spells flash on the action bar?

Simply install SpellFlashCore (included if you install SpellFlash) and Ovale will use it to flash the spell to cast on the action bar in addition to displaying the spell in the Ovale icon bar.

Why can't I click on the icon to cast the spell?

Blizzard does not allow this. Only a predefined sequence of spells can be bound to an action icon and this sequence can not change in combat.

On my low-level character, there is nothing at all.

You need to reach level 10 and choose a specialization. However, be aware that the default Ovale scripts are tuned for max-level characters and you may be missing key abilities at low levels that are assumed to exist. If the default script is not working for you, you will need to find or write a script more appropriate for your character's level.

Ovale Spell Priority 6.0.53

Changes from version 6.0.52:

  • Implement Assassination 4pT17 set bonus for rogues.

    The Assassination 4pT17 set bonus causes Envenom to refund one combo
    point, so detect when Envenom is cast and create a pending combo point

  • Restrict the tier set bonuses to the correct specialization.

    The same tier gear is worn by all specializations of the same class, and
    some abilities are used by more than one specialization, so we need to
    restrict the set bonus to the proper specialization.

  • Merge branch 'simulationcraft'.

    Pull in changes from MMO-Champion rogue forums from 2015-01-29.

  • Import profiles from MMO-Champion rogue forum, updated 2015-01-29.

    • Updated combat and subtlety profiles.
  • Default to not suggesting Time Warp and Bloodlust/Heroism.

    Change the default toggles for Time Warp and Bloodlust/Heroism to
    unchecked since these are raid cooldowns that are usually meant to be used
    at specific times.

    As a side effect, this fixes ticket 535 by @thejourney. Thanks to
    @Reason2012 for the analysis and identification of the problem.

  • Regenerate reference and default scripts after translator changes.

  • Translate SimulationCraft's "righteous_fury" action.

    Wrap the action with a check for an "opt_righteous_fury_check" toggle.
    Remove the RighteousFury() and RighteousFuryOff() functions and rely on
    the SimC APLs to properly execute "righteous_fury".

  • Warlock: Insert a "life_tap" action earlier in the APL for Ovale.

    Ovale doesn't track mana costs of caster spells, so it doesn't ever fall
    through to the "life_tap" action at the end of the APL.

  • Paladin: Directly toggle Righteous Fury appropriately in precombat list.

    Holy and retribution toggle Righteous Fury off by default, while
    protection toggles it on.

  • Use class-unique names for all functions in generated scripts.

    This allows for separate scripts to be combined together into a single
    script without name collisions for functions or controls.

  • Translate SimulationCraft's "cooldown" property for trinkets.

  • Add BuffCooldownDuration() script condition.

    BuffCooldownDuration(id) returns the duration in seconds of the cooldown
    before a buff can be gained again. It can be used to return the cooldown
    duration of a trinket by checking the cooldown duration of the
    corresponding trinket buff.

  • Fully describe MoP and WoD trinkets in the spell database.

    Add durations to the trinket auras, and sprinkle "buff" and "stat"
    properties into the ItemInfo() for trinkets so that the correct buff lists
    are added to.

    Add some missing 615+ trinkets and remove unimplemented trinkets.

  • Only Include() scripts if the including script declares icons.

    Don't Include() scripts if the including script only defines functions and
    script controls. This guideline makes it easier to pick and choose what
    code is included in the final script.

  • Split trinket definitions into their own scripts.

  • Fix trinket buff IDs that have changed since the initial data-mining.

  • Add trinket buffs to the appropriate buff lists after script evaluation.

    After the script has been evaluated, check for the equipped trinkets and
    search for the associated buffs to add to the appropriate buff lists.

    For example:

    Define(lucky_double_sided_coin 118876) ItemInfo(lucky_double_sided_coin buff=lucky_flip_buff) Define(lucky_flip_buff 177597) SpellInfo(lucky_flip_buff duration=20 stat=agility)

    This causes the "Lucky" Flip buff to be added to the following buff lists:

    • trinket_proc_agility_buff
    • trinket_proc_agi_buff
    • trinket_proc_any_buff
    • trinket_stat_agility_buff
    • trinket_stat_agi_buff
    • trinket_stat_any_buff

    The "buff" and "stat" properties can be comma-separated values to list
    more than one buff or one stat.

    Remove trinket buff lists from OvaleData since they are dynamically
    managed during script evaluation.

  • Add GetEquippedTrinkets() method to OvaleEquipment.

    GetEquippedTrinkets() returns the item IDs of the trinkets in the two
    trinket slots as a tuple.

  • Extend some OvaleEquipment methods to take a list of item slots.

    The following methods are modified to accept a list of item slots instead
    of a single or no parameters:

    • GetEquippedItem(...)
    • GetEquippedItemLevel(...)

    The return value is the list of the item IDs in those slots, in order.

    • HasEquippedItem(itemId, ...)

    Returns true if the item is in any of the listed slots, or check all of
    the slots if none are given.

  • Enhance OvaleData to store information from ItemInfo() at compile-time.

  • Import latest from curseforge-packager project.


First Previous Page 84 of 86 Next Last
  • #37
    Date: 2009-12-06 09:37:04
    ID: 1
    Error occured in: Global
    Count: 40
    Message: ..\AddOns\Ovale\Ovale.lua line 553:
    attempt to index upvalue 'Recount' (a nil value)
    (tail call): ?
    Ovale\Ovale.lua:553: ?()
    [string "safecall Dispatcher[5]"]:4:
    [string "safecall Dispatcher[5]"]:4
    [C]: ?
    [string "safecall Dispatcher[5]"]:13: ?()
    ...Ons\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua:91: Fire()
    Swatter, v3.1.14 ()
    WowheadLooter, v30203
    Ace3, v
    AckisRecipeList, v1.0 2722
    Align, v
    Altoholic, v3.2.003b
    ArkInventory, v3.02
    AucAdvanced, v5.1.DEV.2530
    AucDb, v5.1.DEV.3583
    AucFilterBasic, v5.1.DEV.4432
    AucFilterOutlier, v5.1.DEV.4432
    AucMatchUndercut, v5.1.DEV.2531
    AucScanData, v5.1.DEV.4432
    AucStatClassic, v5.1.DEV.4432
    AucStatHistogram, v5.1.DEV.4466
    AucStatiLevel, v5.1.DEV.4536
    AucStatPurchased, v5.1.DEV.4474
    AucStatSales, v5.1.DEV.2842
    AucStatSimple, v5.1.DEV.4472
    AucStatStdDev, v5.1.DEV.4549
    AucStatWOWEcon, v5.1.DEV.2530
    AucUtilAHWindowControl, v5.1.DEV.3311
    AucUtilAppraiser, v5.1.DEV.2530
    AucUtilAskPrice, v5.1.DEV.3175
    AucUtilAutoMagic, v5.1.DEV.3142
    AucUtilBroker, v0.9.0c
    AucUtilCompactUI, v5.1.DEV.2530
    AucUtilEasyBuyout, v5.1.DEV.3583
    AucUtilFixAH, v ()
    AucUtilGlypher, v5.1.DEV.2545
    AucUtilItemSuggest, v5.1.DEV.3108
    AucUtilPriceLevel, v5.1.DEV.2545
    AucUtilScanButton, v5.1.DEV.2530
    AucUtilScanFinish, v5.1.DEV.2530
    AucUtilScanProgress, v5.1.DEV.2530
    AucUtilSearchUI, v5.1.DEV.3655
    AucUtilSimpleAuction, v5.1.DEV.4546
    AucUtilVendMarkup, v5.1.DEV.2530
    AutoBar, vv3.2.0.787
    AutoRoller, v1.1
    Babylonian, v5.1.DEV.130
    BadBoy, v4.0.1.4
    BadBoyCCleaner, v2.2.0
    BadBoyLevels, v2.1.4
    Bartender4, v4.4.1
    Bazooka, v1.7.0
    BeanCounter, v5.1.DEV.4548
    BrokerAllXP, vr36
    Brokerrepair, v2.1
    BunnyHunter, v1.2
    Carbonite, v3.23
    CarboniteTransfer, v1.01
    Chatter, v1.0
    ClassLoot, vr110
    Collectinator, vBeta 3
    Configator, v5.1.DEV.130
    Congratz, vv0.4.3
    Constructor, v ()
    CurseProfiler, v
    DataStore, v3.2.003
    DataStoreAchievements, v3.2.003
    DataStoreAuctions, v3.2.003
    DataStoreCharacters, v3.2.003
    DataStoreContainers, v3.2.003
    DataStoreCrafts, v3.2.003
    DataStoreCurrencies, v3.2.003
    DataStoreInventory, v3.2.003
    DataStoreMails, v3.2.003
    DataStorePets, v3.2.003
    DataStoreQuests, v3.2.003
    DataStoreReputations, v3.2.003
    DataStoreSkills, v3.2.003
    DataStoreSpells, v3.2.003
    DataStoreStats, v3.2.003
    DataStoreTalents, v3.2.003
    DBMBurningCrusade, v
    DBMCore, v
    DBMLDB, v
    DBMPartyWotLK, v
    DebugLib, v5.1.DEV.130
    Enchantrix, v5.1.DEV.4432
    FishingBuddy, v0.9.8b
    Gatherer, v3.1.14
    GathererDBWowhead, v1.0.2009-02-18
    GearScore, v3.0.012 - Release
    GFWLinkerator, v3.2
    GroupCalendar5, v5.0.1
    GuildDonationHelper, v1.0.4
    Informant, v5.1.DEV.3721
    InspectEquip, v1.7.0
    LibExtraTip, v1.1
    LibHealComm40, v
    LightHeaded, v298
    LightHeadedDataE, v298
    LightHeadedDataQIDNames, v298
    LilSparkysWorkshop, v1.00
    LinkWrangler, v1.79
    OptionHouse, v
    Outfitter, v4.9
    Ovale, v3.2.24
    Overachiever, v0.50
    OverachieverTrade, v0.50
    Postal, v3.2.2
    Quartz, v1.0
    QuartzBuff, v1.0
    QuartzFlight, v1.0
    QuartzFocus, v1.0
    QuartzGCD, v1.0
    QuartzInterrupt, v1.0
    QuartzLatency, v1.0
    QuartzMirror, v1.0
    QuartzPet, v1.0
    QuartzPlayer, v1.0
    QuartzRange, v1.0
    QuartzSwing, v1.0
    QuartzTarget, v1.0
    QuartzTimer, v1.0
    QuartzTradeskill, v1.0
    RatingBuster, v
    ShadowedUnitFrames, v
    SickOfClickingDailies, vv6.3.3d-beta
    SickOfClickingDailiesAltTracking, vv6.3.3d-beta
    Skada, v1.2-22
    SkadaAbsorbs, v1.0
    SkadaCC, v1.0
    SkadaDamage, v1.0
    SkadaDamageTaken, v1.0
    SkadaDeaths, v1.0
    SkadaDebuffs, v1.0
    SkadaDispels, v1.0
    SkadaEnemies, v1.0
    SkadaFailbot, v1.0
    SkadaHealing, v1.0
    SkadaPower, v1.0
    SkadaThreat, v1.0
    Skillet, v
    SlideBar, v3.1.14 ()
    SpellFlash, v2.19
    Stubby, v5.1.DEV.130
    TipHelper, v ()
    WIM, v3.2.2
    XBar, v3.27
    XBuffBar, v3.10
    XCompanionBar, v3.07
    XCustomBar, v3.05
    XTrackBar, v3.03
    XTradeBar, v3.07
    BlizRuntimeLib_enUS v3.2.2.30200

  • #42
    Thank you, fixed in 3.2.26
  • #35
    Hi, I just started using this addon on my DK which even though i'm getting an error i can already tell will do wonders for my rotation. As Unholy i get when Scourge Strike is suppose to come up:
    Message: Interface\AddOns\Ovale\OvaleIcone.lua:40: attempt to perform arithmetic on local 'actionCooldownStart' (a nil value)
    Time: 12/06/09 00:49:38
    Count: 2445

    [C]: ?
    Interface\AddOns\Ovale\OvaleIcone.lua:40: in function `Update'
    Interface\AddOns\Ovale\OvaleFrame.lua:162: in function `OnUpdate'
    Interface\AddOns\Ovale\OvaleFrame.lua:60: in function

    Locals: self = Icon1n1 {
    0 =
    SetHelp = defined @Interface\AddOns\Ovale\OvaleIcone.lua:144
    __bf_framelevel = {
    Update = defined @Interface\AddOns\Ovale\OvaleIcone.lua:4
    cd = Icon1n1Cooldown {
    icone = Icon1n1Icon {
    SetSize = defined @Interface\AddOns\Ovale\OvaleIcone.lua:133
    shouldClick = false
    __bf_normaltexture = Icon1n1NormalTexture {
    aPortee = Icon1n1Count {
    remains = Icon1n1Name {
    debutAction = 32676.853
    actionCourante = "Interface\Icons\Spell_Deathknight_ClassIcon"
    finAction = 32676.853
    ancienneAttente = 32678.306
    shortcut = Icon1n1HotKey {
    __bf_skinlayer = {
    help = "main"
    focusText = {
    normalTexture = Icon1n1NormalTexture {
    skinGroup = {
    SetSkinGroup = defined @Interface\AddOns\Ovale\OvaleIcone.lua:128
    SetNormalTexture = defined =[C]:-1
    minAttente = 32678.306
    actionTexture = "Interface\Icons\Spell_Deathknight_ClassIcon"
    actionInRange = 1
    actionCooldownStart = nil
    actionCooldownDuration = nil
    actionUsable = 1
    actionShortcut = nil
    actionIsCurrent = nil
    actionEnable = 1
    spellName = "Obliterate"
    actionTarget = "target"
    red = nil
    (*temporary) = Icon1n1Icon {
    0 =
    (*temporary) = 1
    (*temporary) =
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = "attempt to perform arithmetic on local 'actionCooldownStart' (a nil value)"

    and as blood when heart strike it up:
    Message: Interface\AddOns\Ovale\OvaleIcone.lua:40: attempt to perform arithmetic on local 'actionCooldownStart' (a nil value)
    Time: 12/06/09 00:51:09
    Count: 2665

    [C]: ?
    Interface\AddOns\Ovale\OvaleIcone.lua:40: in function `Update'
    Interface\AddOns\Ovale\OvaleFrame.lua:162: in function `OnUpdate'
    Interface\AddOns\Ovale\OvaleFrame.lua:60: in function

    Locals: self = Icon1n1 {
    0 =
    SetHelp = defined @Interface\AddOns\Ovale\OvaleIcone.lua:144
    __bf_framelevel = {
    Update = defined @Interface\AddOns\Ovale\OvaleIcone.lua:4
    cd = Icon1n1Cooldown {
    icone = Icon1n1Icon {
    SetSize = defined @Interface\AddOns\Ovale\OvaleIcone.lua:133
    shouldClick = false
    __bf_normaltexture = Icon1n1NormalTexture {
    aPortee = Icon1n1Count {
    remains = Icon1n1Name {
    debutAction = 32768.716
    actionCourante = "Interface\Icons\Spell_Deathknight_DeathStrike"
    finAction = 32768.716
    ancienneAttente = 32768.969
    shortcut = Icon1n1HotKey {
    __bf_skinlayer = {
    help = "main"
    focusText = {
    normalTexture = Icon1n1NormalTexture {
    skinGroup = {
    SetSkinGroup = defined @Interface\AddOns\Ovale\OvaleIcone.lua:128
    SetNormalTexture = defined =[C]:-1
    minAttente = 32768.969
    actionTexture = "Interface\Icons\Spell_Deathknight_DeathStrike"
    actionInRange = 1
    actionCooldownStart = nil
    actionCooldownDuration = nil
    actionUsable = 1
    actionShortcut = nil
    actionIsCurrent = nil
    actionEnable = 1
    spellName = "Blood Strike"
    actionTarget = "target"
    red = nil
    (*temporary) = Icon1n1Icon {
    0 =
    (*temporary) = 1
    (*temporary) =
    (*temporary) = nil
    (*temporary) = nil
    (*temporary) = "attempt to perform arithmetic on local 'actionCooldownStart' (a nil value)"

    Sorry if i'm just noobing it up but any help would be great and keep up the good work with this addon.
  • #36
    Please try 3.2.24 and tell me if it solves your problem. If so, does it ever ask you to cast Death Coil?
  • #44
    Yes no more errors with .24! It does ask me to Deathcoil too, so so far so good. Thanks for the help! It really cuts close on Pestilence but maybe that's just my timing. If i can provide anymore help let me know.
  • #45
    Yes, in some rare occurrence it does not ask to refresh the diseases with Pestilence and the glyph. I suspect that there may be no blood rune available at this time, but I did not play long enough to be sure. Somebody that knows the Death Knight better than me may tell me if that is a problem: should one blood rune be spared some time before the diseases expire? It may not worth it.
  • #32
    How do you add weapon enchants? There seems to be support for this according to the documentation but I must be doing something wrong. It is always showing that the enchant is not preset.

    Script Below

    Define(FLAMETHONG 8024)
    #Added WINDFURY to the defined spells (Tried both Rank 1 and Rank 8 spellids)
    Define(WINDFURY 8232)

    if WeaponEnchantExpires(WINDFURY mainhand 2) Spell(WINDFURY)
    if WeaponEnchantExpires(FLAMETHONG offhand 2) Spell(FLAMETHONG)

    # All of the below seems to work fine.
    if BuffPresent(MAELSTROMWEAPON stacks=5) Spell(LIGHTNINGBOLT)
    if ManaPercent(less 25) Spell(SHAMANISTICRAGE)
    if TotemExpires(fire) Spell(MAGMATOTEM)
  • #33
    You can not specify which weapon enchant expires. You should write this:
    if WeaponEnchantExpires(mainhand 2) Spell(WINDFURY)
    if WeaponEnchantExpires(offhand 2) Spell(FLAMETHONG)
  • #34
    That fixed the issue. Thanks for the help!
  • #25
    First off I want to say very nice addon!
    I have a few questions though.

    1. Would it be possible to make it show only "if has target" and taget is hostile and not dead? I don't really need to see what spells to cast on a friendly- or a dead- target.
    2. is it possible to get an icon that tells you what spell to cast after the next - icon 1 = cast now, icon 2 = cast next, 3 = fillers (for warriors heroic strike or cleave)?

    Also the icon that shows HS/Cleave always has the border shown, and there's a ? between the 2 first icons, what is that supposed to do?

  • #26
    1. I may do that in a future version. Thank you for the suggestion.
    2. I tried that (the option is still here in the appearence menu, check "Predictive (EXPERIMENTAL)"), but I found that the result was more confusing than useful. You may test it if you want, I could use some feedback.

    It is a feature to show the border of the HS/Cleave button even if there is nothing to cast. If thought it was weird if the button kept disappearing/appearing every two seconds. If a majority of people don't like that, I may change it.

    I don't know what you mean about the question mark, I don't have it. It is likely a bug. Did you change the default script? Could you show me a screenshot?
  • #28
    For the "Predictive" fuction you can see what I mean if you have the posibility to test CLCRet addon ( for ret pallies, has some nice features, but yours is just so much cooler because it's usable for all classes.
  • #27

    Thanks for the reply

    I have tested the "Predictive (EXPERIMENTAL)" feature, and yeah it seems a bit more confusing than helpful. Maybe make both icons visible, so there are 2 icons at all times instead of the scrolling feature (a small icon for next skill and a normal sized icon for the skill you should use now?)

    Here's a screenshot of the ? I talked about ( They turn red if I'm out of range of the target.

    As for the iconborder on cleave/hs - it seems a little odd that the border is there without anything to cast imo. Maybe you could change it so that the hs/cleave icon has it's own size-scroller, and make it possible to move it individualy from the other icons?
  • #29
    I will add the option to remove the borders.

    About the ?, it looks that it is the keyboard shortcut that is not displayed properly. I see that you use ButtonFacade. Which skin it is? And what addon do you use to move the icons?
  • #30
    I use apathy skin for button facade, but I don't have keyboard shortcuts activated.

    What do you mean by: "And what addon do you use to move the icons?" if you mean action bars I am using Dominos.
  • 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