Get an Epic Experience with Premium

Ovale Spell Priority

Buffs & Debuffs Login to Add Favorites
  • World of Warcraft
  • 18,965 Monthly Downloads
  • Supports: 5.4.8
  • 1,691,675 Total Downloads
  • Updated 09/05/2014
  • Created 08/17/2008
  • 678 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: GNU General Public License version 2 (GPLv2)
  • Newest File: 5.4.34

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.

Default scripts are available for all dps classes and specializations, 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.


  • Default scripts for every DPS class and talent specialization.
  • Tracks DoTs, buffs, debuffs, cooldowns, combo points, runes, mana, everything that a player would need to choose what to do.
  • Adapts to your talent points and glyphs.
  • Change quickly the configuration at any time with configurable checkboxes and drop-down lists that can be shown/hidden by clicking on the icons, e.g. switching between single and multi-target damage, setting the curse to cast.
  • Multi-target DoT tracking: remember which target had a DoT and when the DoT will expire, allowing the script author to support multi-target dotting.
  • Compatible with the action icon skinning library Masque.
  • 100% configurable: everything is in an easy-to-understand script that you can modify and test in real-time without reloading your UI.
  • Can be used to track crowd-control spells on your focus.
  • Scoring system: evaluate how well you followed the script. Add a new Ovale panel in Recount and Skada, with a score between 0 (very bad) and 1000 (perfect).
  • Up to two-spells-ahead accuracy with some classes.


Why does it not work for me?

Try to reset your Profile in the Ovale settings. Most problems come from faulty scripts.

Why is the key binding displayed for an action wrong?

The action may be in several action bars, e.g., the bars that you can cycle through or the bars that appear in special cases like Shadowform or Cat Form.

Why is the key binding not displayed at all?

The action must be in your standard Blizzard action bar in order for Ovale to know which key binding is used.

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.

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.

There is no bane or curse (or whatever) in the rotation.

Click the icon and select the bane or curse that you want to use from the dropdown menu list.

tag 5.4.34
Johnny C. Lam <>
2014-08-18 17:49:05 -0400

Tagging as 5.4.34 release.


Johnny C. Lam:
    - Druid: Increase ratio threshold before refreshing Balance DoTs early.
    The latest SimulationCraft uses 30% increase as the threshold so match it
    in the default script.
    - Information that's queried with GetItemInfo() might not be available.
    Wait for the GET_ITEM_INFO_RECEIVED event and query again for meta-gem and
    weapon information.
    This fixes ticket 403 by @Dhanir.
    - Rogue: Premeditation requires stealth.
    - Death Knight: Fix Dark Transformation usage.
    Dark Transformation requires 5 stacks of Shadow Infusion on the player and
    applies a buff to the pet.
    This fixes ticket 379 by @bamabandit.
    - Allow specifying a cooldown time for buffs.
    This cooldown time is how long to expect between when the buff is gained
    and can be used to note the internal cooldown of a trinket that applies a
    Decorate trinket buffs with approximate internal cooldown times.  The
    syntax is "buff_cd=N" where N is the number of seconds.
    Add a BuffCooldown(id) script condition to return the remaining time
    before the buff can be gained again.
    - Add additional spells used in SimulationCraft action lists.
    - Add haste buff from legendary caster meta-gem.
    - Allow setting and getting variables within the simulator from the script.
    This feature can be used to keep state from the script.
        SetState(name, value) sets the named variable to the given value.
        GetState(name) gets the value of the named variable or 0 if missing.
    Internally, a new action "SetState" was added that always returns true.
    This new state action has no output.
    OvaleFrame has been adjusted to avoid flickering if a state action is the
    best action.
    - Fix debuff spell list names used in GetAura.
    - Rename *Remains() script conditions to *Remaining() for readability.
    The old names are still usable as aliases of the recommended condition
    - Put all script condition definitions into a single file.
    This reverses a design decision to split up conditions into smaller files
    that ended up making this addon harder to update for users.  Keeping all
    conditions in a single file reduces the likelihood of files being added or
    removed, which allows for updating the addon without needing a full
    restart of the WoW client.
    This does make the conditions.lua file harder to maintain, but a clean
    internal code layout should alleviate this concern.
    - Rename TicksRemain() to TicksRemaining() for better readability.
    - Add PrimaryResource() script condition for the current power level.
    PrimaryResource(id) returns the current amount of the player's primary
    resource for the given spell.
    - When unparsing Ovale ASTs into scripts, avoid unnecessary whitespace.
    - Teach OvaleAST unparser to automatically insert parentheses as needed.
    The AST structure implies that parentheses are needed when unparsing
    expressions, based on the relative precedence of the operators involved.
    Any existing parentheses that are extraneous due to precedence are
    ignored when unparsing.
    - Fix operator precedence bug with "and" and "or".
    "And" binds more tightly than "or" in most logical operator precedence
    - Add ExecuteTime() script condition to match SimC's "execute_time".
    This condition returns the larger of a spell's cast time or the GCD.
    - Add "amplified" buff from the Amplification trinkets.
    - Add "stealthed_buff" spell list for common rogue and druid stealth buffs.
    - Add "_buff" and "_debuff" to the default raid buff names for consistency.
    - Rogue: Fix spell information to add to the correct spell IDs.
    The spell information for the Crimson Tempest DoT wasn't correctly being
    added due to the wrong name reference being used.
    - Warrior: Fix rage cost of Impending Victory after landing a killing blow.
    - Druid: Don't cast bear Berserk with Incarnation is active.
    The name of the buff referenced in the script was incorrectly
    "son_of_ursoc" instead of "son_of_ursoc_buff".  Fix by @Wiljo.


First Previous Page 15 of 67 Next Last
  • #816

    This sounds like an Ovale bug.  Can you file a ticket with this information?

  • #814

    I've released a 5.1.7 beta version of Ovale that has a few fixes and some updated default scripts from the latest SimC profiles.  Note that these default scripts are mechanically generated by a program and may have bugs.  If you find any, please report via the ticket system.

  • #813

    Your simcraft importing link seems to be broken. Any alternatives or eta on fix?

  • #819

    I don't have direct access to the server running the SimC importer, so I can't test fixes to it.  It will have to wait until I can set up something locally.

  • #811

    Would you be able to help me, I keep getting this error when using Ovale:

    Date: 2013-01-02 16:50:05
    ID: 2
    Error occured in: Global
    Count: 1
    Message: ..\AddOns\Ovale\OvaleBestAction.lua line 118:
    attempt to compare number with nil
    Ovale\OvaleBestAction.lua:118: GetActionInfo()
    Ovale\OvaleBestAction.lua:218: Compute()
    Ovale\OvaleBestAction.lua:414: Compute()
    Ovale\OvaleBestAction.lua:683: Compute()
    Ovale\OvaleFrame.lua:174: OnUpdate()
    self = <table> {
    GetActionInfo = <function> defined @Interface\AddOns\Ovale\OvaleBestAction.lua:78
    Compute = <function> defined @Interface\AddOns\Ovale\OvaleBestAction.lua:204
    ComputeBool = <function> defined @Interface\AddOns\Ovale\OvaleBestAction.lua:194
    StartNewAction = <function> defined @Interface\AddOns\Ovale\OvaleBestAction.lua:73
    element = <table> {
    type = "function"
    castTime = 0
    nodeId = 18
    func = "spell"
    params = <table> {
    spellId = 49998
    action = nil
    actionTexture = nil
    actionInRange = nil
    actionCooldownStart = 3712.019
    actionCooldownDuration = 1.5
    actionUsable = nil
    actionShortcut = nil
    actionIsCurrent = nil
    actionEnable = 1
    target = "target"
    si = <table> {
    1 = 49998
    xxx = 0
    frost = 1
    aura = <table> {
    runicpower = -200
    damageAura = <table> {
    unholy = 1
    runecd = nil
    (*temporary) = 3713.519
    (*temporary) = nil
    (*temporary) = 1
    (*temporary) = 1
    (*temporary) = nil
    (*temporary) = false
    (*temporary) = 0
    (*temporary) = 0
    (*temporary) = 0
    (*temporary) = 3
    (*temporary) = "attempt to compare number with nil"
    pairs = <function> defined =[C]:-1
    GetSpellInfo = <function> defined =[C]:-1
    GetSpellTexture = <function> defined =[C]:-1
    IsSpellInRange = <function> defined =[C]:-1
    IsUsableSpell = <function> defined =[C]:-1
    GetActionTexture = <function> defined =[C]:-1
    IsActionInRange = <function> defined =[C]:-1
    GetActionCooldown = <function> defined =[C]:-1
    IsUsableAction = <function> defined =[C]:-1
    IsCurrentAction = <function> defined =[C]:-1
    strfind = <function> defined =[C]:-1
    GetInventorySlotInfo = <function> defined =[C]:-1
    tonumber = <function> defined =[C]:-1
    tostring = <function> defined =[C]:-1
    GetItemSpell = <function> defined =[C]:-1
    GetItemIcon = <function> defined =[C]:-1
    IsItemInRange = <function> defined =[C]:-1
    GetItemCooldown = <function> defined =[C]:-1

    Swatter, v5.15.5383 (LikeableLyrebird)
    NPCScan, v5.0.0.5
    NPCScanOverlay, v5.0.0.3
    ACP, v3.4.1
    AtlasLootLoader, vv7.04.01
    AucAdvanced, v5.15.5383 (LikeableLyrebird)
    AucFilterBasic, v5.15.5383 (LikeableLyrebird)
    AucFilterOutlier, v5.15.5383.5381(5.15/embedded)
    AucMatchUndercut, v5.15.5383.5381(5.15/embedded)
    AucScanData, v5.15.5383 (LikeableLyrebird)
    AucStatHistogram, v5.15.5383 (LikeableLyrebird)
    AucStatiLevel, v5.15.5383 (LikeableLyrebird)
    AucStatPurchased, v5.15.5383 (LikeableLyrebird)
    AucStatSales, v5.15.5383.5381(5.15/embedded)
    AucStatSimple, v5.15.5383 (LikeableLyrebird)
    AucStatStdDev, v5.15.5383 (LikeableLyrebird)
    AucStatWOWEcon, v5.15.5383.5323(5.15/embedded)
    AucUtilAHWindowControl, v5.15.5383.5381(5.15/embedded)
    AucUtilAppraiser, v5.15.5383.5381(5.15/embedded)
    AucUtilAskPrice, v5.15.5383.5381(5.15/embedded)
    AucUtilAutoMagic, v5.15.5383.5381(5.15/embedded)
    AucUtilCompactUI, v5.15.5383.5381(5.15/embedded)
    AucUtilEasyBuyout, v5.15.5383.5381(5.15/embedded)
    AucUtilFixAH, v5.15.5383 (LikeableLyrebird)
    AucUtilItemSuggest, v5.15.5383.5381(5.15/embedded)
    AucUtilPriceLevel, v5.15.5383.5381(5.15/embedded)
    AucUtilScanButton, v5.15.5383.5320(5.15/embedded)
    AucUtilScanFinish, v5.15.5383.5381(5.15/embedded)
    AucUtilScanProgress, v5.15.5383.4979(5.15/embedded)
    AucUtilScanStart, v5.15.5383.5381(5.15/embedded)
    AucUtilSearchUI, v5.15.5383.5381(5.15/embedded)
    AucUtilSimpleAuction, v5.15.5383.5381(5.15/embedded)
    AucUtilVendMarkup, v5.15.5383.4828(5.15/embedded)
    Babylonian, v5.1.DEV.332(/embedded)
    BeanCounter, v5.15.5383 (LikeableLyrebird)
    Configator, v5.1.DEV.344(/embedded)
    DBMCore, v
    DebugLib, v5.1.DEV.337(/embedded)
    ElvUI, v5.16
    Enchantrix, v5.15.5383 (LikeableLyrebird)
    EnchantrixBarker, v5.15.5383 (LikeableLyrebird)
    GatherMate2, v1.23.1
    GTFO, v4.18.1
    Informant, v5.15.5383 (LikeableLyrebird)
    LibAboutPanel, v1.6.0
    LibExtraTip, v5.12.DEV.342(/embedded)
    MikScrollingBattleText, v5.7.125
    MogIt, v3.0.6
    NerienOvaleScripts, v2.1.11
    OmniCC, v5.1.3
    Ovale, v5.1.6
    Overachiever, v0.70
    Postal, v3.5.1
    RaidAchieveFilter, v1.6
    RaidAchievement, v1.110
    RaidAchievementAchieveReminder, v
    Recount, v
    Routes, vv1.4.2-4-gafa7d39
    SharedMediaAdditionalFonts, v1.0.13
    SlideBar, v5.15.5383 (LikeableLyrebird)
    Stubby, v5.15.5383 (LikeableLyrebird)
    TidyPlates, v6.8.2 (R559)
    TidyPlatesGraphite, v
    TidyPlatesGrey, v
    TidyPlatesNeon, v
    TidyPlatesQuatre, v
    TidyPlatesThreatPlates, v6.008
    TidyPlatesHub, v
    TidyPlatesWidgets, v
    TipHelper, v5.12.DEV.343(/embedded)
    ZygorGuidesViewer, v4.0
    BlizRuntimeLib_enUS v5.1.0.50100 <us>



  • #810

    Where is the ability to choose another script to use?

    when I type "/ovale config", I get the options window, but there is absolutely NO button or anythign that I can identify to choose another script.  I've read that its' at the bottom of the config window, but it's NOT there.

    Please help, thanks. :)

  • #812

    type: /ovale code

  • #809

    Very usefull to learn a rotation for a new class :) or after 2 years without playing :)


  • #808

    When I log onto my Monk Ovale just doesn't seem to show up, no matter what command I type in or w/e options I mess with. Is the Monk simply not available yet for Ovale?

  • #807

    Error:  (I use it with Nerien's Ovale Scripts)

    1x Ovale-5.1.4\OvaleCompile.lua:457: script ran too long
    Ovale-5.1.4\OvaleCompile.lua:457: in function <Ovale\OvaleCompile.lua:439>
    Ovale-5.1.4\OvaleCompile.lua:619: in function "Compile"
    Ovale\Ovale-5.1.4.lua:94: in function "CompileAll"
    Ovale-5.1.4\OvaleFrame.lua:150: in function "OnUpdate"
    Ovale-5.1.4\OvaleFrame.lua:70: in function <Ovale\OvaleFrame.lua:69>

    self = <table> {
    CompileComments = <func> @Ovale\OvaleCompile.lua:554
    CompileDeclarations = <func> @Ovale\OvaleCompile.lua:569
    CompileInputs = <func> @Ovale\OvaleCompile.lua:560
    Compile = <func> @Ovale\OvaleCompile.lua:599
    DebugNode = <func> @Ovale\OvaleCompile.lua:644
    text = " SpellList(savage_roar_buff 52610 127538) AddFunction FFF { if TalentPoints(7) Spell(102355) if not TalentPoints(7) Spell(770) } AddFunction SavageRoar { if Glyph(127540) Spell(127538) if Glyph(127540 no) and ComboPoints(more 0) Spell(52610) } AddFunction TimeUntilTargetIsDead { target.TimeToDie() } AddFunction MinRatioForRipOverwrite { if {TimeUntilTargetIsDead() >120} 112 if {TimeUntilTargetIsDead() <=120} {{0.002*{180.00-TimeUntilTargetIsDead()}} + 1.00} * 100 } AddFunction RakeTickDamage { Damage(1822) * {1 + Mastery()/100} } AddFunction LastRakeTickDamage { LastSpellEstimatedDamage(1822) * {1 + LastSpellMastery(1822)/100} } AddFunction RakeTickDamageRatio { if TargetDebuffPresent(1822) {100 * RakeTickDamage()/LastRakeTickDamage()} unless TargetDebuffPresent(1822) 100.0 } AddFunction RipTickDamage { Damage(1079) * {1 + Mastery()/100} } AddFunction LastRipTickDamage { LastSpellEstimatedDamage(1079) * {1 + LastSpellMastery(1079)/100} } AddFunction RipTickDamageRatio { if TargetDebuffPresent(for generator) = <func> =[C]:-1
    (for state) = nil
    (for control) = "MainRotation"
    p = "MainRotation"
    t = "{ if BITWRange() and ComboPoints(more 0) and TargetDebuffPresent(1079) and TargetDebuffExpires(1079 2.9) Spell(22568) if CheckBoxOn(lucioles) and target.DebuffStacks(113746 any=1) <3 FFF() if TimeUntilTargetIsDead() >=6 and BuffPresent(135700) and TargetDebuffExpires(106830 3) and BuffExpires(108381) Spell(106830) if BITWRange() { if BuffRemains(savage_roar_buff) <=3 and ComboPoints(more 0) and BuffExpires(108381) SavageRoar() if TalentPoints(17) and BuffExpires(108381) and BuffExpires(69369) and ComboPoints() >=5 Spell(132158) if ComboPoints() >=5 and TimeUntilTargetIsDead() >30 and RipTickDamageRatio() >=114 Spell(1079) if TargetDebuffPresent(1079) and ComboPoints() >=5 Spell(22568) } if BuffPresent(108381) and ComboPoints() >=5 and TimeUntilTargetIsDead() >6 and {TargetDebuffExpires(1079 2) or {TargetDebuffExpires(1079 6) and RipTickDamageRatio() >=100 and not BITWRange()}} Spell(1079) if BuffRemains(savage_roar_buff) <=3 and ComboPoints(more 0) and BuffExpires(108381) and TalentPoints(17) SavageRoarnode = <table> {
    1 = <table> {}
    2 = <table> {}
    3 = <table> {}
    4 = <table> {}
    5 = <table> {}
    6 = <table> {}
    7 = <table> {}
    8 = <table> {}
    9 = <table> {}
    10 = <table> {}
    11 = <table> {}
    12 = <table> {}
    13 = <table> {}
    14 = <table> {}
    15 = <table> {}
    16 = <table> {}
    17 = <table> {}
    18 = <table> {}
    19 = <table> {}
    20 = <table> {}
    21 = <table> {}
    22 = <table> {}
    23 = <table> {}
    24 = <table> {}
    25 = <table> {}
    26 = <table> {}
    27 = <table> {}
    28 = <table> {}
    29 = <table> {}
    30 = <table> {}
    31 = <table> {}
    32 = <table> {}
    33 = <table> {}
    34 = <table> {}
    35 = <table> {}
    36 = <table> {}
    37 = <table> {}
    38 = <table> {}
    39 = <table> {}
    40 = <table> {}
    41 = <table> {}
    42 = <table> {}
    43 = <table> {}
    44 = <table> {}
    45 = <table> {}
    46 = <table> {}
    47 = <table> {}
    48 = <table> {}
    49 = <table> {}
    50 = <table> {}
    51 = <table> {}
    52 = <table> {}
    53 = <table> {}
    54 = <table> {}
    55 = <table> {}
    56 = <table> {}
    57 = <table> {}
    58 = <table> {}
    59 = <table> {}
    60 = <table> {}
    61 = <table> {}
    62 = <table> {}
    63 = <table> {}
    64 = <table> {}
    65 = <table> {}
    66 = <table> {}
    67 = <table> {}
    68 = <table> {}
    69 = <table> {}
    70 = <table> {}
    71 = <table> {}
    72 = <table> {}
    73 = <table> {}
    74 = <table> {}
    75 = <table> {}
    76 = <table> {}
    77 = <table> {}
    78 = <table> {}
    79 = <table> {}
    80 =

    Last edited by Aisenfaire on 12/7/2012 10:41:18 PM
  • #805

    Since Ovale doesn't have a dual profile option, is there a macro that can be made that switches the Ovale profile on command?

    For ex, I like having Ovale on in my secondary feral cat form, but don't want it on when im tanking. But I'd like if when I hit my macro that switches to my primary bear spec (which also switches a few things that I have built in like switching gear manager), I could also switch Ovale profiles at the same time.

  • #804

    All of my frames are showing the word "Focus" and nothing else.  Any idea what's up?

  • #806

    Logged in today and it is all fixed.  Strange.

  • #803

    I've decided to move the "unknown spells" warning so that it only appears if you ask for it explicitly by setting debug options for Ovale.  If you're a script author and want to verify your script, please enter the following into your chat window:

    /ovale toggledebug unknown_spells
  • #801

    50x Ovale-5.1.1\OvaleState.lua:83: attempt to index global "OvaleComboPoints" (a nil value) Ovale-5.1.1\OvaleState.lua:83: in function "Reset" Ovale-5.1.1\OvaleBestAction.lua:74: in function "StartNewAction" Ovale-5.1.1\OvaleFrame.lua:173: in function "OnUpdate" Ovale-5.1.1\OvaleFrame.lua:70: in function <Ovale\OvaleFrame.lua:69>

    Locals: self = <table> {  GetActionInfo = <func> @Ovale\OvaleBestAction.lua:78  Compute = <func> @Ovale\OvaleBestAction.lua:204  ComputeBool = <func> @Ovale\OvaleBestAction.lua:194  StartNewAction = <func> @Ovale\OvaleBestAction.lua:73 }

  • 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 »

Marriland Furious Fists Giveaway!