Feral Script needs tweaking
Huufa opened this issue ยท 1 comments
Sorry, I am not a pro at sims so I have used Shmoos script. See below....... Comments at bottom.
ShmooDude Feral and Guardian script
Options:
Interrupt - Suggests use of interuptting abilities, including stuns/knockbacks on non-boss targets.
Not in Melee Range - Suggests movement abilities if available or a forward arrow if you're out of range.
Multiple-targets rotation - If this is disabled, the AoE icon is removed
Ashamane's Frenzy as main action - Puts the Ashamane's Frenzy suggestion in the main action box.
Requires TimeToDie of 20 seconds or more
If this is off, Ovale will suggest 2 CP Regrowths in the Short CD box.
Shadowmeld as main action - Puts the Shadowmeld suggestion in the main action box.
Requires TimeToDie of 20 seconds or more
Suggested off except on (raid) bosses.
Tiger's Fury multiplier prediction - Applies the Tiger's Fury multiplier if Tiger's Fury is ready.
e.g. If TF is being suggested, any Rip suggestions will assume you use TF first.
Prevent capping BrS charges - Will suggest Brutal Slash if you are about to reach max charges.
Advantage: Helps not waste charges.
Disadvantage: Will probably not have 3 charges when AoE for the encounter shows up.
BrS at X targets - Minimum number of targets to suggest using Brutal Slash.
This will use all available Brutal Slash charges.
Only suggest BrS when TF is up
Good for Mythic+ to get the most out of your Brutal Slash charges
Too much haste makes this sub-optimal
Rip - At how many seconds to overwrite a Rip
Default Pandemic
Rake - At how many seconds to overwrite a Rake
Default 7 or
Pandemic with Ailuro Pouncers Legendary or you are not speced into Bloodtalons
Savage Roar - At how many seconds to overwrite Savage Roar
Default Pandemic
Include(ovale_common)
Include(ovale_trinkets_mop)
Include(ovale_trinkets_wod)
Include(ovale_druid_spells)
AddCheckBox(opt_melee_range L(not_in_melee_range) specialization=feral)
AddCheckBox(opt_use_consumables "Suggest Prolonged Power Potion" default specialization=feral)
AddCheckBox(opt_interrupt L(interrupt) default specialization=feral)
AddCheckBox(opt_ashamanes_frenzy_main_action "Ashamane's Frenzy as a main action" default specialization=feral)
AddCheckBox(opt_shadowmeld_main_action "Shadowmeld as a main action" specialization=feral)
AddCheckBox(opt_tigers_fury_multiplier_predict "Tiger's Fury multiplier prediction" default specialization=feral)
AddCheckBox(opt_brutal_slash_use_at_three_always "Prevent capping BrS charges" specialization=feral)
AddCheckBox(opt_brutal_slash_use_with_tigers_fury "Only suggest BrS when TF is up" specialization=feral)
AddCheckBox(opt_sync_af_tf "Try to sync Ashamane's with TF" specialization=feral)
AddListItem(opt_10_rake_refresh rake_00_default "Rake: Default (7 w/ BT)" specialization=feral default)
AddListItem(opt_10_rake_refresh rake_01_pandemic "Rake at Pandemic (duration*0.3)" specialization=feral)
AddListItem(opt_10_rake_refresh rake_05 "Rake at 5 seconds" specialization=feral)
AddListItem(opt_10_rake_refresh rake_06 "Rake at 6 seconds" specialization=feral)
AddListItem(opt_10_rake_refresh rake_07 "Rake at 7 seconds" specialization=feral)
AddListItem(opt_10_rake_refresh rake_08 "Rake at 8 seconds" specialization=feral)
AddListItem(opt_10_rake_refresh rake_09 "Rake at 9 seconds" specialization=feral)
AddListItem(opt_11_rip_refresh rip_00_default "Rip: Default (Pandemic)" specialization=feral default)
AddListItem(opt_11_rip_refresh rip_01_pandemic "Rip at Pandemic (duration*0.3)" specialization=feral)
AddListItem(opt_11_rip_refresh rip_07 "Rip at 7 seconds" specialization=feral)
AddListItem(opt_11_rip_refresh rip_08 "Rip at 8 seconds" specialization=feral)
AddListItem(opt_11_rip_refresh rip_09 "Rip at 9 seconds" specialization=feral)
AddListItem(opt_11_rip_refresh rip_10 "Rip at 10 seconds" specialization=feral)
AddListItem(opt_11_rip_refresh rip_11 "Rip at 11 seconds" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_00_default "Savage Roar: Default (Pandemic)" specialization=feral default)
AddListItem(opt_12_savage_roar_refresh savage_roar_01_pandemic "Savage Roar Pandemic (duration*0.3)" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_12 "Savage Roar at 12 seconds" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_13 "Savage Roar at 13 seconds" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_14 "Savage Roar at 14 seconds" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_15 "Savage Roar at 15 seconds" specialization=feral)
AddListItem(opt_12_savage_roar_refresh savage_roar_16 "Savage Roar at 16 seconds" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_01 "BrS at 1 target" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_02 "BrS at 2 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_03 "BrS at 3 targets" specialization=feral default)
AddListItem(opt_09_desired_targets desired_targets_04 "BrS at 4 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_05 "BrS at 5 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_06 "BrS at 6 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_07 "BrS at 7 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_08 "BrS at 8 targets" specialization=feral)
AddListItem(opt_09_desired_targets desired_targets_09 "BrS at 9 targets" specialization=feral)
########################################
Helper Variables (Functions)
########################################
#variable,name=rake_refresh,value=4.5
#variable,name=rake_refresh,op=mul,value=0.8,if=talent.jagged_wounds.enabled
#variable,name=rake_refresh,value=7,if=talent.bloodtalons.enabled&!equipped.ailuro_pouncers
AddFunction rake_refresh
{
unless List(opt_10_rake_refresh rake_00_default)
{
if List(opt_10_rake_refresh rake_01_pandemic) target.DebuffDuration(rake_debuff) * 0.3
if List(opt_10_rake_refresh rake_05) 5
if List(opt_10_rake_refresh rake_06) 6
if List(opt_10_rake_refresh rake_07) 7
if List(opt_10_rake_refresh rake_08) 8
if List(opt_10_rake_refresh rake_09) 9
}
if HasEquippedItem(ailuro_pouncers) or not Talent(bloodtalons_talent) target.DebuffDuration(rake_debuff) * 0.3
7
}
#variable,name=savage_roar_refresh,value=10.8
AddFunction savage_roar_refresh
{
unless List(opt_12_savage_roar_refresh savage_roar_00_default)
{
if List(opt_12_savage_roar_refresh savage_roar_01_pandemic) BaseDuration(savage_roar_buff) * 0.3
if List(opt_12_savage_roar_refresh savage_roar_12) 12
if List(opt_12_savage_roar_refresh savage_roar_13) 13
if List(opt_12_savage_roar_refresh savage_roar_14) 14
if List(opt_12_savage_roar_refresh savage_roar_15) 15
if List(opt_12_savage_roar_refresh savage_roar_16) 16
}
BaseDuration(savage_roar_buff) * 0.3
}
#variable,name=rip_refresh,value=7.2
#variable,name=rip_refresh,op=add,value=1.2,if=set_bonus.tier20_4pc
#variable,name=rip_refresh,op=mul,value=0.8,if=talent.jagged_wounds.enabled
AddFunction rip_refresh
{
unless List(opt_11_rip_refresh rip_00_default)
{
if List(opt_11_rip_refresh rip_01_pandemic) target.DebuffDuration(rip_debuff) * 0.3
if List(opt_11_rip_refresh rip_07) 7
if List(opt_11_rip_refresh rip_08) 8
if List(opt_11_rip_refresh rip_09) 9
if List(opt_11_rip_refresh rip_10) 10
if List(opt_11_rip_refresh rip_11) 11
}
target.DebuffDuration(rip_debuff) * 0.3
}
#variable,name=execute_range,value=25
#variable,name=execute_range,value=100,if=talent.sabertooth.enabled
AddFunction execute_range
{
if Talent(sabertooth_talent) 100
25
}
#variable,name=use_thrash,value=0
#variable,name=use_thrash,value=1,if=equipped.luffa_wrappings
AddFunction use_thrash
{
if HasEquippedItem(luffa_wrappings) 1
0
}
#variable,name=bt_stack,value=2
#variable,name=bt_stack,value=1,if=equipped.ailuro_pouncers
AddFunction bt_stack
{
if HasEquippedItem(ailuro_pouncers) 1
2
}
#desired_targets
AddFunction BrutalSlashDesiredTargets asvalue=1
{
if List(opt_09_desired_targets desired_targets_02) 2
if List(opt_09_desired_targets desired_targets_03) 3
if List(opt_09_desired_targets desired_targets_04) 4
if List(opt_09_desired_targets desired_targets_05) 5
if List(opt_09_desired_targets desired_targets_06) 6
if List(opt_09_desired_targets desired_targets_07) 7
if List(opt_09_desired_targets desired_targets_08) 8
if List(opt_09_desired_targets desired_targets_09) 9
}
#trinket
AddFunction FeralUseItemActions
{
Item(Trinket0Slot text=13 usable=1)
Item(Trinket1Slot text=14 usable=1)
}
#melee_range
AddFunction FeralGetInMeleeRange
{
if CheckBoxOn(opt_melee_range) and target.InRange(shred no)
{
#wild_charge
if target.InRange(wild_charge) Spell(wild_charge)
#displacer_beast,if=movement.distance>25
if target.distance() > 25 Spell(displacer_beast)
#dash,if=movement.distance>25&buff.displacer_beast.down&buff.wild_charge_movement.down
if target.distance() > 25 and BuffExpires(displacer_beast_buff) Spell(dash)
Texture(misc_arrowlup help=L(not_in_melee_range))
}
}
#interrupt
AddFunction FeralInterruptActions
{
if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
{
if target.InRange(skull_bash) Spell(skull_bash)
if not target.Classification(worldboss)
{
if target.InRange(mighty_bash) Spell(mighty_bash)
if target.distance() < 20 Spell(typhoon)
if target.InRange(maim) Spell(maim)
if target.distance() < 8 Spell(war_stomp)
}
}
}
#Tiger's Fury multiplier prediction
AddFunction TFMultPred asvalue=1
{
if CheckBoxOn(opt_tigers_fury_multiplier_predict)
and BuffExpires(tigers_fury_buff)
and SpellCooldown(tigers_fury) <= 0
and ShortCd_TigersFury() 1.15
1
}
########################################
Main Action List
########################################
#rake,if=buff.prowl.up|buff.shadowmeld.up
AddFunction Main_Rake_Prowl
{
BuffPresent(prowl_buff)
or BuffPresent(shadowmeld_buff)
}
#dash,if=buff.cat_form.down
#AddFunction Main_Dash_CatForm #### Unused
#{
BuffExpires(cat_form_buff)
#}
#cat_form,if=buff.cat_form.down
#AddFunction Main_CatForm #### Unused
#{
BuffExpires(cat_form_buff)
#}
#######call_action_list,name=opener,if=!dot.rip.ticking&time<8
MODIFICATION: Add target.Classification(worldboss)
REASON: Only use opener on bosses.
AddFunction Main_Opener_Conditions
{
target.DebuffExpires(rip_debuff)
and TimeInCombat() < 8
and target.Classification(worldboss)
}
#######call_action_list,name=cooldowns
#AddFunction Main_Cooldowns_Conditions #### Unused
#{
#}
#tigers_fury,if=energy.deficit>=60
AddFunction ShortCd_TigersFury
{
EnergyDeficit() >= 60
}
MODIFICATION: Predator TF
REASON: Suggest TF anytime its ready if TF is already up to maximize buff uptime.
AddFunction ShortCd_TigersFury_Predator
{
UnitInRaid()
and Talent(predator_talent)
and BuffPresent(tigers_fury_buff)
}
#berserk,if=energy>=30&(cooldown.tigers_fury.remains>5|buff.tigers_fury.up)
MODIFICATION: SpellCooldown(tigers_fury) <= 0 and ShortCd_TigersFury()
REASON: Make Berserk show up if Tiger's Fury conditions are met
AddFunction Cd_Berserk
{
Energy() >= 30
and { SpellCooldown(tigers_fury) > 5
or BuffPresent(tigers_fury_buff) or TFMultPred() > 1 }
}
#incarnation,if=energy>=30&(cooldown.tigers_fury.remains>15|buff.tigers_fury.up)
MODIFICATION: SpellCooldown(tigers_fury) <= 0 and ShortCd_TigersFury()
REASON: Make Incarnation show up if Tiger's Fury conditions are met
AddFunction Cd_Incarnation
{
Energy() >= 30
and { SpellCooldown(tigers_fury) > 15
or BuffPresent(tigers_fury_buff) or TFMultPred() > 1 }
}
#elunes_guidance,if=combo_points=0&energy>=50
AddFunction ShortCd_ElunesGuidance
{
ComboPoints() == 0
and Energy() >= 50
}
#potion,name=prolonged_power,if=target.time_to_die<65|(time_to_die<180&(buff.berserk.up|buff.incarnation.up))
AddFunction Cd_Potion
{
{ target.TimeToDie() < 65
or target.TimeToDie() < 180
and { BuffPresent(berserk_cat_buff) or BuffPresent(incarnation_king_of_the_jungle_buff) } }
and CheckBoxOn(opt_use_consumables)
and target.Classification(worldboss)
}
#ashamanes_frenzy,if=combo_points<=2&(!talent.bloodtalons.enabled|buff.bloodtalons.up)
MODIFICATION: AshamanesFrenzy_Main for CheckBoxOn(opt_ashamanes_frenzy_main_action)
REASON: Allows player to choose via checkbox whether to add Azshamane's Frenzy to the Main Icon
MODIFICATION: target.TimeToDie() > 20
REASON: Does not use Regrowth for Ashamane's Frenzy on targets with less than 20 seconds to live
AddFunction Cooldowns_AshamanesFrenzy
{
CheckBoxOn(opt_ashamanes_frenzy_main_action)
and ComboPoints() <= 2
and { not Talent(bloodtalons_talent) or BuffPresent(bloodtalons_buff) }
and target.TimeToDie() > 20
}
MODIFICATION: ShortCd_AshamanesFrenzy for CheckBoxOff(opt_ashamanes_frenzy_main_action)
REASON: Allows player to choose via checkbox whether to add Azshamane's Frenzy to the Main Icon
AddFunction ShortCd_AshamanesFrenzy
{
CheckBoxOff(opt_ashamanes_frenzy_main_action)
and ComboPoints() <= 2
and { not Talent(bloodtalons_talent) or BuffPresent(bloodtalons_buff) }
}
#shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(!talent.bloodtalons.enabled|buff.bloodtalons.up)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
MODIFICATION: Cooldowns_Shadowmeld for CheckBoxOn(opt_shadowmeld_main_action)
REASON: Allows player to choose via checkbox whether to add Shadowmeld to the Main Icon
MODIFICATION: target.TimeToDie() > BaseDuration(rake_debuff) + 5
REASON: Does not use Shadowmeld on targets with less than BaseDuration(rake_debuff) + 5 seconds to live
MODIFICATION: target.InRange(rake)
REASON: Cannot move after Shadowmeld so add range check before suggesting
AddFunction Cooldowns_Shadowmeld
{
CheckBoxOn(opt_shadowmeld_main_action)
and ComboPoints() < 5
and Energy() >= PowerCost(rake)
and target.DebuffPersistentMultiplier(rake_debuff) < 2.1
and { BuffPresent(tigers_fury_buff) or TFMultPred() > 1 }
and { not Talent(bloodtalons_talent) or BuffPresent(bloodtalons_buff) }
and { not Talent(incarnation_talent) or SpellCooldown(incarnation_king_of_the_jungle) > 18 }
and BuffExpires(incarnation_king_of_the_jungle_buff)
and target.TimeToDie() > BaseDuration(rake_debuff) + 5
and target.InRange(rake)
}
MODIFICATION: Cd_Shadowmeld for CheckBoxOff(opt_shadowmeld_main_action)
REASON: Allows player to choose via checkbox whether to add Shadowmeld to the Main Icon
AddFunction Cd_Shadowmeld
{
CheckBoxOff(opt_shadowmeld_main_action)
and ComboPoints() < 5
and Energy() >= PowerCost(rake)
and target.DebuffPersistentMultiplier(rake_debuff) < 2.1
and { BuffPresent(tigers_fury_buff) or TFMultPred() > 1 }
and { not Talent(bloodtalons_talent) or BuffPresent(bloodtalons_buff) }
and { not Talent(incarnation_talent) or SpellCooldown(incarnation_king_of_the_jungle) > 18 }
and BuffExpires(incarnation_king_of_the_jungle_buff)
and target.TimeToDie() > BaseDuration(rake_debuff) + 5
and target.InRange(rake)
}
#use_items
#AddFunction Cooldowns_Trinket #### Unused
#{
#}
#regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&buff.bloodtalons.stack<variable.bt_stack&(buff.predatory_swiftness.remains<1.5|(combo_points=5&(!buff.incarnation.up|dot.rip.remains<8|dot.rake.remains<5)))
AddFunction Main_Regrowth_Expires_or_5CP
{
Talent(bloodtalons_talent)
and BuffPresent(predatory_swiftness_buff)
and BuffStacks(bloodtalons_buff) < bt_stack()
and { BuffRemaining(predatory_swiftness_buff) < 1.5
or ComboPoints() == 5
and { BuffExpires(incarnation_king_of_the_jungle_buff)
or target.DebuffRemaining(rip_debuff) < 8
or target.DebuffRemaining(rake_debuff) < 5 } }
}
#ferocious_bite,cycle_targets=1,if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>10&target.health.pct<variable.execute_range
AddFunction Main_FerociousBite_3SecondRefresh
{
target.DebuffPresent(rip_debuff)
and target.DebuffRemaining(rip_debuff) < 3
and target.TimeToDie() > 10
and target.HealthPercent() < execute_range()
}
#######run_action_list,name=finishers,if=combo_points>4
AddFunction Main_Finishers_Conditions
{
ComboPoints() > 4
}
#savage_roar,if=buff.savage_roar.down
AddFunction Finishers_SavageRoarExpires
{
BuffExpires(savage_roar_buff)
}
#rip,target_if=(!ticking|remains<=variable.rip_refresh&target.health.pct>variable.execute_range|(remains<=duration0.8&persistent_multiplier>dot.rip.pmultiplier))&target.time_to_die>6+2active_enemies+remains
MODIFICATION: TFMultPred when CheckBoxOn(opt_tigers_fury_multiplier_predict)
REASON: When Tiger's Fury is suggested, treat Rip as if it is already up even if it hasn't been cast yet.
AddFunction Finishers_Rip
{
{ target.DebuffExpires(rip_debuff)
or target.DebuffRemaining(rip_debuff) <= rip_refresh()
and target.HealthPercent() > execute_range()
or target.DebuffRemaining(rip_debuff) <= BaseDuration(rip_debuff) * 0.8
and TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
and target.TimeToDie() > 6 + 2 * Enemies() + target.DebuffRemaining(rip_debuff)
}
#savage_roar,if=buff.savage_roar.remains<variable.savage_roar_refresh
AddFunction Finishers_SavageRoarRefresh
{
BuffRemaining(savage_roar_buff) < savage_roar_refresh()
}
#maim,if=buff.fiery_red_maimers.up
AddFunction Finishers_Maimers
{
BuffPresent(fiery_red_maimers_buff)
}
#regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&buff.bloodtalons.down&((combo_points=2&&cooldown.ashamanes_frenzy.remains<gcd)|(combo_points=4&dot.rake.remains<4))
MODIFICATION: CheckBoxOn(opt_ashamanes_frenzy_main_action) in Main_Regrowth_AshamanesFrenzy
REASON: Allows player to choose via checkbox whether to add Ashamane's Frenzy to the Main Icon
MODIFICATION: target.TimeToDie() > 21
REASON: Does not use Regrowth for Ashamane's Frenzy on targets with less than 21 seconds to live
AddFunction Main_Regrowth_AshamanesFrenzy
{
CheckBoxOn(opt_ashamanes_frenzy_main_action)
and Talent(bloodtalons_talent)
and BuffPresent(predatory_swiftness_buff)
and BuffExpires(bloodtalons_buff)
and ComboPoints() == 2
and SpellCooldown(ashamanes_frenzy) < 0.75
and target.TimeToDie() > 21
}
MODIFICATION: ShortCd_Regrowth_AshamanesFrenzy for CheckBoxOff(opt_ashamanes_frenzy_main_action)
REASON: Allows player to choose via checkbox whether to add Ashamane's Frenzy to the Main Icon
AddFunction ShortCd_Regrowth_AshamanesFrenzy
{
CheckBoxOff(opt_ashamanes_frenzy_main_action)
and Talent(bloodtalons_talent)
and BuffPresent(predatory_swiftness_buff)
and BuffExpires(bloodtalons_buff)
and ComboPoints() == 2
and SpellCooldown(ashamanes_frenzy) < 0.75
}
#regrowth,if=equipped.ailuro_pouncers&talent.bloodtalons.enabled&buff.bloodtalons.down&(buff.predatory_swiftness.stack>2|(buff.predatory_swiftness.stack>1&dot.rake.remains<3))
AddFunction Main_Regrowth_Pouncers
{
HasEquippedItem(ailuro_pouncers)
and Talent(bloodtalons_talent)
and BuffExpires(bloodtalons_buff)
and { BuffStacks(predatory_swiftness_buff) > 2
or BuffStacks(predatory_swiftness_buff) > 1 and target.DebuffRemaining(rake_debuff) < 3 }
}
#######run_action_list,name=generators
#AddFunction Main_Generators_Conditions
#{
#}
#brutal_slash,if=spell_targets.brutal_slash>desired_targets
AddFunction Generators_BrutalSlash_DesiredTargets
{
Enemies() >= BrutalSlashDesiredTargets()
and { BuffPresent(tigers_fury_buff) or TFMultPred() > 1 or CheckBoxOff(opt_brutal_slash_use_with_tigers_fury) }
}
#pool_resource,for_next=1
#thrash_cat,if=refreshable&spell_targets.thrash_cat>2
AddFunction Generators_ThrashCat_3Targets
{
target.Refreshable(thrash_cat_debuff)
and Enemies() > 2
}
#rake,target_if=(!ticking|(!talent.bloodtalons.enabled|buff.bloodtalons.up)&remains<=variable.rake_refresh&persistent_multiplier>dot.rake.pmultiplier*0.85)&target.time_to_die>6+remains
AddFunction Generators_Rake
{
{ not target.DebuffPresent(rake_debuff)
or { not Talent(bloodtalons_talent) or BuffPresent(bloodtalons_buff) }
and target.DebuffRemaining(rake_debuff) <= rake_refresh()
and PersistentMultiplier(rake_debuff) > target.DebuffPersistentMultiplier(rake_debuff) * 0.85 }
and target.TimeToDie() > 6 + target.DebuffRemaining(rake_debuff)
}
#brutal_slash,if=(buff.tigers_fury.up&(raid_event.adds.in>(1+max_charges-charges_fractional)*recharge_time))
AddFunction Generators_BrutalSlash_3Charges
{
CheckBoxOn(opt_brutal_slash_use_at_three_always)
and Charges(brutal_slash count=0) > 2.66
}
#moonfire_cat,target_if=refreshable&target.time_to_die>4+remains
AddFunction Generators_MoonfireCat
{
target.Refreshable(moonfire_cat_debuff)
and target.TimeToDie() > 4 + target.DebuffRemaining(moonfire_cat_debuff)
}
#pool_resource,for_next=1
#thrash_cat,if=refreshable&(variable.use_thrash=1|spell_targets.thrash_cat>1)
AddFunction Generators_ThrashCat_Luffa_or_2Targets
{
target.Refreshable(thrash_cat_debuff)
and { use_thrash() == 1 or Enemies() > 1 }
}
#pool_resource,for_next=1
#swipe_cat,if=spell_targets.swipe_cat>1
AddFunction Generators_SwipeCat
{
Enemies() > 1
}
#shred,if=dot.rake.remains>(action.shred.cost+action.rake.cost-energy)%energy.regen|buff.clearcasting.react
AddFunction Generators_Shred
{
target.DebuffRemaining(rake_debuff) > { PowerCost(shred) + PowerCost(rake) - Energy() } / EnergyRegenRate()
or BuffPresent(clearcasting_buff)
or target.TimeToDie() <= 6 + target.DebuffRemaining(rake_debuff)
}
actions.default
AddFunction FeralDefaultMainActions
{
#rake,if=buff.prowl.up|buff.shadowmeld.up
if Main_Rake_Prowl() Spell(rake)
#dash,if=buff.cat_form.down
if BuffExpires(cat_form_buff) Spell(dash)
#cat_form,if=buff.cat_form.down
if BuffExpires(cat_form_buff) Spell(cat_form)
#call_action_list,name=opener,if=!dot.rip.ticking&time<8
if Main_Opener_Conditions() FeralOpenerMainActions()
#call_action_list,name=cooldowns
FeralCooldownsMainActions()
#regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&buff.bloodtalons.stack<variable.bt_stack&(buff.predatory_swiftness.remains<1.5|(combo_points=5&(!buff.incarnation.up|dot.rip.remains<8|dot.rake.remains<5)))
if Main_Regrowth_Expires_or_5CP() Spell(regrowth)
#ferocious_bite,cycle_targets=1,if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>10&target.health.pct<variable.execute_range
if Main_FerociousBite_3SecondRefresh() Spell(ferocious_bite text=Refresh)
#run_action_list,name=finishers,if=combo_points>4
if Main_Finishers_Conditions() FeralFinishersMainActions()
unless Main_Finishers_Conditions()
{
#regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&buff.bloodtalons.down&((combo_points=2&&cooldown.ashamanes_frenzy.remains<gcd)|(combo_points=4&dot.rake.remains<4&buff.bloodtalons.down))
# MODIFICATION: CheckBoxOn(opt_ashamanes_frenzy_main_action) in Main_Regrowth_AshamanesFrenzy
# REASON: Allows player to choose via checkbox whether to add Ashamane's Frenzy to the Main Icon
if Main_Regrowth_AshamanesFrenzy() Spell(regrowth text=AF)
#regrowth,if=equipped.ailuro_pouncers&talent.bloodtalons.enabled&buff.bloodtalons.down&(buff.predatory_swiftness.stack>2|(buff.predatory_swiftness.stack>1&dot.rake.remains<3))
if Main_Regrowth_Pouncers() Spell(regrowth text=Pouncers)
#run_action_list,name=generators
FeralGeneratorsMainActions()
}
}
AddFunction FeralDefaultShortCdActions
{
unless Main_Rake_Prowl() and Spell(rake) or BuffExpires(cat_form_buff) and Spell(cat_form)
{
#auto_attack
FeralGetInMeleeRange()
#call_action_list,name=opener,if=!dot.rip.ticking&time<8
#if Main_Opener_Conditions() FeralOpenerShortCdActions()
unless Main_Opener_Conditions() and FeralOpenerShortCdPostConditions()
{
#call_action_list,name=cooldowns
FeralCooldownsShortCdActions()
unless Main_Finishers_Conditions()
{
# MODIFICATION: ShortCd_Regrowth_AshamanesFrenzy for CheckBoxOff(opt_ashamanes_frenzy_main_action)
# REASON: Allows player to choose via checkbox whether to add Ashamane's Frenzy to the Main Icon
#regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&buff.bloodtalons.down&((combo_points=2&&cooldown.ashamanes_frenzy.remains<gcd)|(combo_points=4&dot.rake.remains<4&buff.bloodtalons.down))
if ShortCd_Regrowth_AshamanesFrenzy() Spell(regrowth text=AF)
}
}
}
}
AddFunction FeralDefaultCdActions
{
unless Main_Rake_Prowl() and Spell(rake) or BuffExpires(cat_form_buff) and Spell(cat_form)
{
#skull_bash
FeralInterruptActions()
#call_action_list,name=opener,if=!dot.rip.ticking&time<8
if Main_Opener_Conditions() FeralOpenerCdActions()
unless Main_Opener_Conditions() and FeralOpenerCdPostConditions()
{
#call_action_list,name=cooldowns
FeralCooldownsCdActions()
}
}
}
actions.cooldowns
AddFunction FeralCooldownsMainActions
{
#ashamanes_frenzy,if=combo_points<=2&(!talent.bloodtalons.enabled|buff.bloodtalons.up)
# MODIFICATION: Cooldowns_AshamanesFrenzy for CheckBoxOn(opt_ashamanes_frenzy_main_action)
# REASON: Allows player to choose via checkbox whether to add Azshamane's Frenzy to the Main Icon
if Cooldowns_AshamanesFrenzy() Spell(ashamanes_frenzy)
#shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(!talent.bloodtalons.enabled|buff.bloodtalons.up)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
# MODIFICATION: Cooldowns_Shadowmeld for CheckBoxOn(opt_shadowmeld_main_action)
# REASON: Allows player to choose via checkbox whether to add Shadowmeld to the Main Icon
if Cooldowns_Shadowmeld() Spell(shadowmeld)
}
AddFunction FeralCooldownsShortCdActions
{
#elunes_guidance,if=combo_points=0&energy>=50
if ShortCd_ElunesGuidance() Spell(elunes_guidance)
# MODIFICATION: Show "+TF" text on AF if you should also cast TF
# REASON: Instead of TF blocking AF suggestion.
#ashamanes_frenzy,if=combo_points<=2&(!talent.bloodtalons.enabled|buff.bloodtalons.up)
if ShortCd_AshamanesFrenzy()
{
if SpellCooldown(tigers_fury) <= 0 and ShortCd_TigersFury() Spell(ashamanes_frenzy text="+TF")
Spell(ashamanes_frenzy)
}
# MODIFICATION: Moved both tigers_fury to below ashamanes_frenzy
# REASON: Instead show AF with "+TF" text.
#tigers_fury,if=energy.deficit>=60
if ShortCd_TigersFury() Spell(tigers_fury)
# MODIFICATION: ShortCd_TigersFury_Predator
# REASON: Spam Tiger's Fury with predator in raid to maximize raid uptime of versatility buff
if ShortCd_TigersFury_Predator() Spell(tigers_fury text=Pred)
}
AddFunction FeralCooldownsCdActions
{
#berserk,if=energy>=30&(cooldown.tigers_fury.remains>5|buff.tigers_fury.up)
# MODIFICATION: Display potion if it is time to use your DPS potion with your cooldowns
# REASON: Potion won't show up till after Berserk is cast normally
if Cd_Berserk()
{
if Cd_Potion() and Item(prolonged_power_potion usable=1) Spell(berserk_cat text=potion)
Spell(berserk_cat)
}
#incarnation,if=energy>=30&(cooldown.tigers_fury.remains>15|buff.tigers_fury.up)
# MODIFICATION: Display potion if it is time to use your DPS potion with your cooldowns
# REASON: Potion won't show up till after Incarnation is cast normally
if Cd_Incarnation()
{
if Cd_Potion() and Item(prolonged_power_potion usable=1) Spell(incarnation_king_of_the_jungle text=potion)
Spell(incarnation_king_of_the_jungle)
}
unless ShortCd_ElunesGuidance() and Spell(elunes_guidance)
{
#potion,name=prolonged_power,if=target.time_to_die<65|(time_to_die<180&(buff.berserk.up|buff.incarnation.up))
if Cd_Potion() Item(prolonged_power_potion usable=1)
unless Cooldowns_AshamanesFrenzy() and Spell(ashamanes_frenzy)
{
#shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(!talent.bloodtalons.enabled|buff.bloodtalons.up)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
# MODIFICATION: Cd_Shadowmeld for CheckBoxOff(opt_shadowmeld_main_action)
# REASON: Allows player to choose via checkbox whether to add Shadowmeld to the Main Icon
if Cd_Shadowmeld() Spell(shadowmeld)
#use_items
FeralUseItemActions()
}
}
}
actions.finishers
AddFunction FeralFinishersMainActions
{
#pool_resource,for_next=1
#savage_roar,if=buff.savage_roar.down
if Finishers_SavageRoarExpires() Spell(savage_roar)
unless Finishers_SavageRoarExpires() and SpellUsable(savage_roar) and SpellCooldown(savage_roar) < TimeToEnergyFor(savage_roar)
{
#pool_resource,for_next=1
#rip,target_if=(!ticking|remains<=variable.rip_refresh&target.health.pct>variable.execute_range|(remains<=duration0.8&persistent_multiplier>dot.rip.pmultiplier))&target.time_to_die>6+2active_enemies+remains
if Finishers_Rip() Spell(rip)
unless Finishers_Rip() and SpellUsable(rip) and SpellCooldown(rip) < TimeToEnergyFor(rip)
{
#pool_resource,for_next=1
#savage_roar,if=buff.savage_roar.remains<variable.savage_roar_refresh
if Finishers_SavageRoarRefresh() Spell(savage_roar)
unless Finishers_SavageRoarRefresh() and SpellUsable(savage_roar) and SpellCooldown(savage_roar) < TimeToEnergyFor(savage_roar)
{
#maim,if=buff.fiery_red_maimers.up
if Finishers_Maimers() Spell(maim)
#ferocious_bite,max_energy=1
if Energy() >= EnergyCost(ferocious_bite max=1) Spell(ferocious_bite)
}
}
}
}
actions.generators
AddFunction FeralGeneratorsMainActions
{
#brutal_slash,if=spell_targets.brutal_slash>desired_targets
if Generators_BrutalSlash_DesiredTargets() Spell(brutal_slash)
#pool_resource,for_next=1
#thrash_cat,if=refreshable&spell_targets.thrash_cat>2
if Generators_ThrashCat_3Targets() Spell(thrash_cat)
unless Generators_ThrashCat_3Targets() and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat)
{
#pool_resource,for_next=1
#rake,target_if=(!ticking|(!talent.bloodtalons.enabled|buff.bloodtalons.up)&remains<=variable.rake_refresh&persistent_multiplier>dot.rake.pmultiplier*0.85)&target.time_to_die>6+remains
if Generators_Rake() Spell(rake)
unless Generators_Rake() and SpellUsable(rake) and SpellCooldown(rake) < TimeToEnergyFor(rake)
{
#brutal_slash,if=(buff.tigers_fury.up&(raid_event.adds.in>(1+max_charges-charges_fractional)*recharge_time))
if Generators_BrutalSlash_3Charges() Spell(brutal_slash)
#moonfire_cat,target_if=refreshable&target.time_to_die>4+remains
if Generators_MoonfireCat() Spell(moonfire_cat)
#pool_resource,for_next=1
#thrash_cat,if=refreshable&(variable.use_thrash=1|spell_targets.thrash_cat>1)
if Generators_ThrashCat_Luffa_or_2Targets() Spell(thrash_cat)
unless Generators_ThrashCat_Luffa_or_2Targets() and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat)
{
#pool_resource,for_next=1
#swipe_cat,if=spell_targets.swipe_cat>1
if Generators_SwipeCat() Spell(swipe_cat)
unless Generators_SwipeCat() and SpellUsable(swipe_cat) and SpellCooldown(swipe_cat) < TimeToEnergyFor(swipe_cat)
{
#shred,if=dot.rake.remains>(action.shred.cost+action.rake.cost-energy)%energy.regen|buff.clearcasting.react
if Generators_Shred() Spell(shred)
}
}
}
}
}
actions.opener
AddFunction FeralOpenerMainActions
{
#moonfire_cat,if=talent.lunar_inspiration.enabled&!ticking
if Talent(lunar_inspiration_talent) and not target.DebuffPresent(moonfire_cat_debuff) Spell(moonfire_cat)
#savage_roar,if=buff.savage_roar.down
if BuffExpires(savage_roar_buff) Spell(savage_roar)
#regrowth,if=talent.sabertooth.enabled&talent.bloodtalons.enabled&buff.bloodtalons.down&combo_points=5
if Talent(sabertooth_talent) and Talent(bloodtalons_talent) and BuffExpires(predatory_swiftness_buff) and BuffExpires(bloodtalons_buff) and ComboPoints() == 5 Spell(regrowth text=hardcast)
}
AddFunction FeralOpenerShortCdActions
{
unless Talent(lunar_inspiration_talent) and not target.DebuffPresent(moonfire_cat_debuff) and Spell(moonfire_cat)
or Finishers_SavageRoarExpires() and Spell(savage_roar)
{
# MODIFICATION: Remove TF display from the opener
# REASON: Shows AF instead.
#tigers_fury,if=buff.savage_roar.up
#if BuffPresent(savage_roar_buff) Spell(tigers_fury)
}
}
AddFunction FeralOpenerShortCdPostConditions
{
Talent(lunar_inspiration_talent) and not target.DebuffPresent(moonfire_cat_debuff) and Spell(moonfire_cat)
or Finishers_SavageRoarExpires() and Spell(savage_roar)
or Talent(sabertooth_talent) and Talent(bloodtalons_talent) and BuffExpires(bloodtalons_buff) and ComboPoints() == 5 and Spell(regrowth)
}
AddFunction FeralOpenerCdActions
{
unless Talent(lunar_inspiration_talent) and not target.DebuffPresent(moonfire_cat_debuff) and Spell(moonfire_cat)
or Finishers_SavageRoarExpires() and Spell(savage_roar)
{
# MODIFICATION: if BuffPresent(savage_roar_buff)
# REASON: Make Berserk/Incarnation show up for the opener
#berserk,if=buff.savage_roar.up
if BuffPresent(savage_roar_buff) Spell(berserk_cat text="+TF")
#incarnation,if=buff.savage_roar.up
if BuffPresent(savage_roar_buff) Spell(incarnation_king_of_the_jungle text="+TF")
}
}
AddFunction FeralOpenerCdPostConditions
{
Talent(lunar_inspiration_talent) and not target.DebuffPresent(moonfire_cat_debuff) and Spell(moonfire_cat)
or Finishers_SavageRoarExpires() and Spell(savage_roar)
or Talent(sabertooth_talent) and Talent(bloodtalons_talent) and BuffExpires(bloodtalons_buff) and ComboPoints() == 5 and Spell(regrowth)
}
actions.precombat
AddFunction FeralPrecombatMainActions
{
#flask
#food
#augmentation
#regrowth,if=talent.bloodtalons.enabled
# MODIFICATION: Talent(bloodtalons_talent) to Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff)
# REASON: Only suggest Regrowth out of stealth and if there's <15 seconds remaining
if Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) Spell(regrowth)
#cat_form
Spell(cat_form)
#savage_roar
if BuffRefreshable(savage_roar_buff) Spell(savage_roar)
}
AddFunction FeralPrecombatMainPostConditions
{
}
AddFunction FeralPrecombatShortCdActions
{
# MODIFICATION: Talent(bloodtalons_talent) to Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff)
# REASON: Only suggest Regrowth out of stealth and if there's <15 seconds remaining
# MODIFICATION: Remove or Spell(cat_form)
# REASON: Blocks Prowl from showing up
unless Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) and Spell(regrowth)
{
#prowl
Spell(prowl)
}
}
AddFunction FeralPrecombatShortCdPostConditions
{
# MODIFICATION: Talent(bloodtalons_talent) to Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff)
# REASON: Only suggest Regrowth out of stealth and if there's <15 seconds remaining
# MODIFICATION: Remove or Spell(cat_form)
# REASON: Blocks Prowl from showing up
Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) and Spell(regrowth)
}
AddFunction FeralPrecombatCdActions
{
unless Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) and Spell(regrowth)
{
#snapshot_stats
#potion
if CheckBoxOn(opt_use_consumables) and target.Classification(worldboss) Item(prolonged_power_potion usable=1)
}
}
AddFunction FeralPrecombatCdPostConditions
{
# MODIFICATION: Talent(bloodtalons_talent) to Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff)
# REASON: Only suggest Regrowth out of stealth and if there's <15 seconds remaining
# MODIFICATION: Remove or Spell(cat_form)
# REASON: Blocks Prowl from showing up
Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) and Spell(regrowth)
}
Feral icons.
AddCheckBox(opt_druid_feral_aoe L(AOE) default specialization=feral)
AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=shortcd specialization=feral
{
if not InCombat() FeralPrecombatShortCdActions()
unless not InCombat() and FeralPrecombatShortCdPostConditions()
{
FeralDefaultShortCdActions()
}
}
AddIcon checkbox=opt_druid_feral_aoe help=shortcd specialization=feral
{
if not InCombat() FeralPrecombatShortCdActions()
unless not InCombat() and FeralPrecombatShortCdPostConditions()
{
FeralDefaultShortCdActions()
}
}
AddIcon enemies=1 help=main specialization=feral
{
if not InCombat() FeralPrecombatMainActions()
unless not InCombat() and FeralPrecombatMainPostConditions()
{
FeralDefaultMainActions()
}
}
AddIcon checkbox=opt_druid_feral_aoe help=aoe specialization=feral
{
if not InCombat() FeralPrecombatMainActions()
unless not InCombat() and FeralPrecombatMainPostConditions()
{
FeralDefaultMainActions()
}
}
AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=cd specialization=feral
{
if not InCombat() FeralPrecombatCdActions()
unless not InCombat() and FeralPrecombatCdPostConditions()
{
FeralDefaultCdActions()
}
}
AddIcon checkbox=opt_druid_feral_aoe help=cd specialization=feral
{
if not InCombat() FeralPrecombatCdActions()
unless not InCombat() and FeralPrecombatCdPostConditions()
{
FeralDefaultCdActions()
}
}
Required symbols
ailuro_pouncers
ashamanes_frenzy
berserk_cat
berserk_cat_buff
bloodtalons_buff
bloodtalons_talent
brutal_slash
cat_form
cat_form_buff
clearcasting_buff
dash
elunes_guidance
ferocious_bite
fiery_red_maimers_buff
incarnation_king_of_the_jungle
incarnation_king_of_the_jungle_buff
incarnation_talent
luffa_wrappings
lunar_inspiration_talent
maim
mangle
moonfire_cat
moonfire_cat_debuff
predatory_swiftness_buff
prolonged_power_potion
prowl
prowl_buff
rake
rake_debuff
regrowth
rip
rip_debuff
sabertooth_talent
savage_roar
savage_roar_buff
shadowmeld
shadowmeld_buff
shred
swipe_cat
thrash_cat
thrash_cat_debuff
tigers_fury
tigers_fury_buff
wild_charge
wild_charge_bear
wild_charge_cat
This was a fix to my issue:
OvaleAST: Syntax error: unexpected token '#' when parsing DECLARATION; declaration keyword expected.
OvaleAST: Next tokens: # wild_charge_cat
So Ovale works but have Prowl stuck in my first icon and I only get Ashamanes Frenzy, Shred and Rake as spell options. I used to get an array of spells.
Thanks for the help