Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 49.95 KB | None | 0 0
  1. ### ShmooDude Feral and Guardian script
  2. ###
  3. ### Options:
  4. # Interrupt - Suggests use of interuptting abilities, including stuns/knockbacks on non-boss targets.
  5. #
  6. # Not in Melee Range - Suggests movement abilities if available or a forward arrow if you're out of range.
  7. #
  8. # Ashamane's Frenzy as main action - Puts the Ashamane's Frenzy suggestion in the main action box.
  9. # Requires TimeToDie of 20 seconds or more
  10. # If this is off, Ovale will not suggest Healing Touch at 2 Combo Points.
  11. # Shadowmeld as main action - Puts the Shadowmeld suggestion in the main action box.
  12. # Requires TimeToDie of 15 seconds or more
  13. # Suggested off except on (raid) bosses.
  14. # Tiger's Fury multiplier prediction - Applies the Tiger's Fury multiplier if Tiger's Fury is ready.
  15. # e.g. If TF is being suggested, any Rip suggestions will assume you use TF first.
  16. # Only suggest Brutal Slash when Tiger's Fury is up
  17. # Good for Mythic+ to get the most damage out of your charges.
  18. # The setting below will ignore SR/TF constraints and suggest BS at 3 charges regardless.
  19. # Always use BS at 3 charges - Will suggest Brutal Slash if you are about to reach max charges.
  20. # Advantage: Helps not waste charges.
  21. # Disadvantage: Will probably not have 3 charges when AoE for the encounter shows up.
  22. # Min targets to suggest Brutal Slash - Minimum number of targets to suggest using Brutal Slash.
  23. # This will use all available Brutal Slash charges.
  24. # Following setting will affect when these are used.
  25. # Rip/Savage Roar at x seconds - Refresh dots/buffs within a given window
  26. # Refreshing earlier allows for more flexability and probably uptimes, Refreshing closer to pandemic could increase dps slightly
  27. # Try to sync Ashamane's with TF - Allow Ashamane's only if TF is active, or on cooldown for more than 5 seconds
  28. # Maybe not a dps increase
  29. # Suggest Trinket use on Cooldown - instead of syncing with damage buffs
  30. # Good for trinkets that don't get buffed (Kil'jaeden's for instance)
  31. # Suggest Maul instead of Ironfur
  32. # Bad for mitigation, good for dps
  33. # Conditions for Single Target Thrash - Conditions for suggesting Thrash during the single target rotation
  34. # Experiment to find the best dps for your gear
  35. # Suggest Shred at 5 cp with Incarn and 4pc - When Incarnation is active, spam Shred even at 5cp's instead of biting.
  36. # Dps increase
  37. # Suggest Maim with Fiery Red Maimers - Suggest Maim when using Fiery Red Maimers
  38. # Might not be worth the complication....
  39.  
  40. Include(ovale_common)
  41. Include(ovale_trinkets_mop)
  42. Include(ovale_trinkets_wod)
  43. Include(ovale_druid_spells)
  44.  
  45. # Temporary Defines till next Ovale version
  46. Define(ashamanes_energy_buff 210583)
  47. SpellInfo(ashamanes_energy_buff duration=3)
  48. SpellAddBuff(tigers_fury ashamanes_energy_buff=1)
  49. Define(scent_of_blood_buff 210664)
  50. SpellInfo(scent_of_blood_buff duration=4)
  51. SpellAddBuff(thrash_cat scent_of_blood_buff=1)
  52. Define(luffa_wrappings 137056)
  53. Define(fiery_red_maimers_buff 236757)
  54. Define(fiery_red_maimers 144354)
  55.  
  56. AddCheckBox(opt_sync_af_tf "Try to sync Ashamane's with TF" specialization=feral)
  57. AddCheckBox(opt_maimers "Suggest Maim with Fiery Red Maimers" specialization=feral)
  58. AddCheckBox(opt_shred_spam "Suggest Shred at 5 cp with Incarn and 4pc" specialization=feral default)
  59. AddCheckBox(opt_trinket_on_cd "Suggest trinket use on cooldown" specialization=feral)
  60. AddCheckBox(opt_pool_at_three "Pool at 3 CPs with The Wildshaper's Clutch" specialization=feral)
  61.  
  62. AddCheckBox(opt_interrupt L(interrupt) default specialization=feral)
  63. AddCheckBox(opt_melee_range L(not_in_melee_range) specialization=feral)
  64. AddCheckBox(opt_druid_feral_aoe L(AOE) default specialization=feral)
  65.  
  66. AddCheckBox(opt_ashamanes_frenzy_main_action "Ashamane's Frenzy as a main action" default specialization=feral)
  67. AddCheckBox(opt_shadowmeld_main_action "Shadowmeld as a main action" specialization=feral)
  68.  
  69. AddCheckBox(opt_tigers_fury_multiplier_predict "Tiger's Fury multiplier prediction" default specialization=feral)
  70.  
  71. AddCheckBox(opt_brutal_slash_use_at_three_always "Always use BrS at 3 charges" specialization=feral)
  72. AddCheckBox(opt_burtal_slash_use_with_tigers_fury "Only suggest BrS when TF is up" specialization=feral)
  73.  
  74. AddListItem(opt_desired_targets dt_1 "BrS at 1 targets (bad)" specialization=feral)
  75. AddListItem(opt_desired_targets dt_2 "BrS at 2 targets" specialization=feral)
  76. AddListItem(opt_desired_targets dt_3 "BrS at 3 targets" specialization=feral default)
  77. AddListItem(opt_desired_targets dt_4 "BrS at 4 targets" specialization=feral)
  78. AddListItem(opt_desired_targets dt_5 "BrS at 5 targets" specialization=feral)
  79. AddListItem(opt_desired_targets dt_6 "BrS at 6 targets" specialization=feral)
  80. AddListItem(opt_desired_targets dt_7 "BrS at 7 targets" specialization=feral)
  81. AddListItem(opt_desired_targets dt_8 "BrS at 8 targets" specialization=feral)
  82. AddListItem(opt_desired_targets dt_9 "BrS at 9 targets" specialization=feral)
  83.  
  84. AddListItem(opt_rip_timer ript_1 "Rip at pandemic" specialization=feral)
  85. AddListItem(opt_rip_timer ript_5 "Rip at 5 seconds" specialization=feral)
  86. AddListItem(opt_rip_timer ript_6 "Rip at 6 seconds" specialization=feral)
  87. AddListItem(opt_rip_timer ript_7 "Rip at 7 seconds" specialization=feral)
  88. AddListItem(opt_rip_timer ript_8 "Rip at 8 seconds" specialization=feral)
  89. AddListItem(opt_rip_timer ript_9 "Rip at 9 seconds (default)" specialization=feral default)
  90.  
  91. AddListItem(opt_savage_roar_timer srt_1 "Savage Roar at pandemic" specialization=feral)
  92. AddListItem(opt_savage_roar_timer srt_8 "Savage Roar at 8 seconds" specialization=feral)
  93. AddListItem(opt_savage_roar_timer srt_9 "Savage Roar at 9 seconds" specialization=feral)
  94. AddListItem(opt_savage_roar_timer srt_10 "Savage Roar at 10 seconds" specialization=feral)
  95. AddListItem(opt_savage_roar_timer srt_11 "Savage Roar at 11 seconds" specialization=feral)
  96. AddListItem(opt_savage_roar_timer srt_12 "Savage Roar at 12 seconds" specialization=feral)
  97. AddListItem(opt_savage_roar_timer srt_13 "Savage Roar at 13 seconds (default)" specialization=feral default)
  98.  
  99. AddListItem(opt_st_thrash stt_1 "No st Thrash" specialization=feral)
  100. AddListItem(opt_st_thrash stt_2 "st Thrash with Luffas/Ooc" specialization=feral default)
  101. AddListItem(opt_st_thrash stt_3 "st Thrash with T19 4pc/Ooc" specialization=feral)
  102. AddListItem(opt_st_thrash stt_4 "st Thrash only with both" specialization=feral)
  103. AddListItem(opt_st_thrash stt_5 "st Thrash Ooc only (bad)" specialization=feral)
  104.  
  105. AddFunction RipTimer asvalue=1
  106. {
  107. if List(opt_rip_timer ript_1) BaseDuration(rip_debuff) * 0.3
  108. if List(opt_rip_timer ript_5) 5
  109. if List(opt_rip_timer ript_6) 6
  110. if List(opt_rip_timer ript_7) 7
  111. if List(opt_rip_timer ript_8) 8
  112. if List(opt_rip_timer ript_9) 9
  113. }
  114.  
  115. AddFunction SavageRoarTimer asvalue=1
  116. {
  117. if List(opt_savage_roar_timer srt_1) 7.2
  118. if List(opt_savage_roar_timer srt_8) 8
  119. if List(opt_savage_roar_timer srt_9) 9
  120. if List(opt_savage_roar_timer srt_10) 10
  121. if List(opt_savage_roar_timer srt_11) 11
  122. if List(opt_savage_roar_timer srt_12) 12
  123. if List(opt_savage_roar_timer srt_13) 13
  124. }
  125.  
  126. AddFunction FeralUseItemActions
  127. {
  128. Item(Trinket0Slot usable=1)
  129. Item(Trinket1Slot usable=1)
  130. }
  131.  
  132. AddFunction FeralInterruptActions
  133. {
  134. if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
  135. {
  136. if target.InRange(skull_bash) Spell(skull_bash)
  137. if not target.Classification(worldboss)
  138. {
  139. if target.InRange(mighty_bash) Spell(mighty_bash)
  140. Spell(typhoon)
  141. if target.InRange(maim) Spell(maim)
  142. Spell(war_stomp)
  143. }
  144. }
  145. }
  146.  
  147. AddFunction FeralGetInMeleeRange
  148. {
  149. if CheckBoxOn(opt_melee_range) and target.InRange(shred no)
  150. {
  151. #wild_charge
  152. if target.InRange(wild_charge) Spell(wild_charge)
  153. #displacer_beast,if=movement.distance>25
  154. if target.distance() > 25 Spell(displacer_beast)
  155. #dash,if=movement.distance>25&buff.displacer_beast.down&buff.wild_charge_movement.down
  156. if target.distance() > 25 and BuffExpires(displacer_beast_buff) Spell(dash)
  157. Texture(misc_arrowlup help=L(not_in_melee_range))
  158. }
  159. }
  160.  
  161. AddFunction BrutalSlashDesiredTargets asvalue=1
  162. {
  163. if List(opt_desired_targets dt_1) 1
  164. if List(opt_desired_targets dt_2) 2
  165. if List(opt_desired_targets dt_3) 3
  166. if List(opt_desired_targets dt_4) 4
  167. if List(opt_desired_targets dt_5) 5
  168. if List(opt_desired_targets dt_6) 6
  169. if List(opt_desired_targets dt_7) 7
  170. if List(opt_desired_targets dt_8) 8
  171. if List(opt_desired_targets dt_9) 9
  172. }
  173.  
  174. AddFunction TFMultPred asvalue=1
  175. {
  176. if CheckBoxOn(opt_tigers_fury_multiplier_predict)
  177. and SpellCooldown(tigers_fury) <= 0
  178. and BuffExpires(clearcasting_buff)
  179. and EnergyDeficit() >= 60
  180. or EnergyDeficit() >= 80
  181. or Talent(sabertooth_talent)
  182. and target.DebuffExpires(rip_debuff)
  183. and ComboPoints() == 5
  184. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) } 1.15
  185. 1
  186. }
  187.  
  188. #variable,name=energy_pooling,value=(energy.time_to_max<1|buff.clearcasting.react|buff.berserk.up|buff.incarnation.up|buff.ashamanes_energy.up|cooldown.tigers_fury.remains<3|talent.soul_of_the_forest.enabled)
  189. AddFunction energy_pooling
  190. {
  191. TimeToMaxEnergy() < 1
  192. or BuffPresent(clearcasting_buff)
  193. or BuffPresent(berserk_cat_buff)
  194. or BuffPresent(incarnation_king_of_the_jungle_buff)
  195. or BuffPresent(ashamanes_energy_buff)
  196. or SpellCooldown(tigers_fury) < 3
  197. or Talent(soul_of_the_forest_talent)
  198. }
  199. #variable,name=finisher_conditions,value=combo_points=5&(energy.time_to_max<1|buff.berserk.up|buff.incarnation.up|buff.elunes_guidance.up|cooldown.tigers_fury.remains<3|talent.soul_of_the_forest.enabled|!dot.rip.ticking|(dot.rake.remains<1.5&spell_targets.swipe_cat<6))
  200. AddFunction finisher_conditions
  201. {
  202. ComboPoints() == 5
  203. and { TimeToMaxEnergy() < 1
  204. or BuffPresent(berserk_cat_buff)
  205. or BuffPresent(incarnation_king_of_the_jungle_buff)
  206. or BuffPresent(elunes_guidance_buff)
  207. or SpellCooldown(tigers_fury) < 3
  208. or Talent(soul_of_the_forest_talent)
  209. or target.DebuffExpires(rip_debuff)
  210. or target.DebuffRemaining(rake_debuff) < 1.5 and Enemies() < 6 }
  211. }
  212. #rake,if=buff.prowl.up|buff.shadowmeld.up
  213. AddFunction Rake_Prowl
  214. {
  215. BuffPresent(prowl_buff)
  216. or BuffPresent(shadowmeld_buff)
  217. }
  218. #berserk,if=buff.ashamanes_energy.up
  219. #incarnation,if=buff.ashamanes_energy.up
  220. AddFunction Berserk
  221. {
  222. BuffPresent(ashamanes_energy_buff) or TigersFury() and SpellCooldown(tigers_fury) <= 0
  223. }
  224. #tigers_fury,if=(!buff.clearcasting.react&energy.deficit>=60)|energy.deficit>=80|(talent.sabertooth.enabled&!dot.rip.ticking&combo_points=5&(buff.bloodtalons.up|!talent.bloodtalons.enabled))
  225. AddFunction TigersFury
  226. { BuffExpires(clearcasting_buff) and EnergyDeficit() >= 60
  227. or EnergyDeficit() >= 80
  228. or Talent(sabertooth_talent)
  229. and target.DebuffExpires(rip_debuff)
  230. and ComboPoints() == 5
  231. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  232. }
  233. #ferocious_bite,cycle_targets=1,if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>3&(target.health.pct<25|talent.sabertooth.enabled)
  234. AddFunction FerociousBite_3SecondRefresh
  235. {
  236. target.DebuffPresent(rip_debuff)
  237. and target.DebuffRemaining(rip_debuff) < 3
  238. and target.TimeToDie() > 3
  239. and { target.HealthPercent() < 25 or Talent(sabertooth_talent) }
  240. }
  241. AddFunction Maim
  242. {
  243. Energy() >= EnergyCost(maim)
  244. and { BuffPresent(fiery_red_maimers_buff) and CheckBoxOn(opt_maimers) }
  245. and finisher_conditions()
  246. }
  247. #regrowth,if=talent.bloodtalons.enabled&(buff.predatory_swiftness.up|(talent.sabertooth.enabled&combo_points=5&!buff.bloodtalons.up&!dot.rip.ticking))&((buff.bloodtalons.stack<2&!equipped.ailuro_pouncers)|buff.bloodtalons.down)&(combo_points>=5|buff.predatory_swiftness.remains<1.5|buff.predatory_swiftness.stack>1|(combo_points=2&buff.bloodtalons.down&cooldown.ashamanes_frenzy.remains<gcd&(buff.savage_roar.remains>gcd|!talent.savage_roar.enabled))|(talent.elunes_guidance.enabled&((cooldown.elunes_guidance.remains<gcd&combo_points=0)|(buff.elunes_guidance.up&combo_points>=4))))
  248. AddFunction Regrowth_AshamanesFrenzy
  249. {
  250. Talent(bloodtalons_talent)
  251. and BuffPresent(predatory_swiftness_buff)
  252. and { BuffStacks(bloodtalons_buff) < 2 and not HasEquippedItem(ailuro_pouncers)
  253. or BuffExpires(bloodtalons_buff) }
  254. and ComboPoints() == 2
  255. and BuffExpires(bloodtalons_buff)
  256. and SpellCooldown(ashamanes_frenzy) < GCD()
  257. and { BuffRemaining(savage_roar_buff) > GCD() or not Talent(savage_roar_talent) }
  258. }
  259. AddFunction Regrowth
  260. {
  261. Talent(bloodtalons_talent)
  262. and { BuffPresent(predatory_swiftness_buff)
  263. or Talent(sabertooth_talent) and ComboPoints() == 5 and BuffExpires(bloodtalons_buff) and target.DebuffExpires(rip_debuff) }
  264. and { BuffStacks(bloodtalons_buff) < 2 and not HasEquippedItem(ailuro_pouncers) or BuffExpires(bloodtalons_buff) }
  265. and { ComboPoints() >= 5
  266. or BuffRemaining(predatory_swiftness_buff) < 1.5
  267. or BuffStacks(predatory_swiftness_buff) > 1
  268. or ComboPoints() == 2
  269. and BuffExpires(bloodtalons_buff)
  270. and SpellCooldown(ashamanes_frenzy) < GCD()
  271. and { BuffRemaining(savage_roar_buff) > GCD() or not Talent(savage_roar_talent) }
  272. and CheckBoxOn(opt_ashamanes_frenzy_main_action)
  273. or Talent(elunes_guidance_talent)
  274. and { SpellCooldown(elunes_guidance) < GCD() and ComboPoints() == 0
  275. or BuffPresent(elunes_guidance_buff) and ComboPoints() >= 4 } }
  276. }
  277. #ashamanes_frenzy,if=combo_points<=2&buff.elunes_guidance.down&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(buff.savage_roar.up|!talent.savage_roar.enabled)
  278. AddFunction AshamanesFrenzy
  279. {
  280. ComboPoints() <= 3
  281. and BuffExpires(elunes_guidance_buff)
  282. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  283. and { BuffPresent(savage_roar_buff) or not Talent(savage_roar_talent) }
  284. and target.TimeToDie() > 20
  285. and { CheckBoxOn(opt_sync_af_tf) and { BuffPresent(tigers_fury_buff) or SpellCooldown(tigers_fury) > 5 } or CheckBoxOff(opt_sync_af_tf) }
  286. }
  287. #shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(buff.savage_roar.up|!talent.savage_roar.enabled)&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
  288. AddFunction Shadowmeld
  289. {
  290. ComboPoints() < 5
  291. and Energy() >= PowerCost(rake)
  292. and target.DebuffPersistentMultiplier(rake_debuff) < 2.1
  293. and BuffPresent(tigers_fury_buff)
  294. and { BuffPresent(savage_roar_buff) or not Talent(savage_roar_talent) }
  295. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  296. and { not Talent(incarnation_talent) or SpellCooldown(incarnation_king_of_the_jungle) > 18 }
  297. and BuffExpires(incarnation_king_of_the_jungle_buff)
  298. and target.TimeToDie() > BaseDuration(rake_debuff) + 5
  299. and target.InRange(rake)
  300. }
  301. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  302. AddFunction ElunesGuidance_Pooling
  303. {
  304. Talent(elunes_guidance_talent)
  305. and ComboPoints() == 0
  306. and Energy() < PowerCost(ferocious_bite) + 25 - EnergyRegenRate() * SpellCooldown(elunes_guidance)
  307. }
  308. #elunes_guidance,if=talent.elunes_guidance.enabled&combo_points=0&energy>=action.ferocious_bite.cost+25
  309. AddFunction ElunesGuidance
  310. {
  311. Talent(elunes_guidance_talent)
  312. and ComboPoints() == 0
  313. and Energy() >= PowerCost(ferocious_bite) + 25
  314. }
  315. #pool_resource,for_next=1
  316. #savage_roar,if=!buff.savage_roar.up&(variable.finisher_conditions|time<8|(talent.brutal_slash.enabled&spell_targets.brutal_slash>desired_targets&action.brutal_slash.charges>0))
  317. AddFunction SavageRoar_Expired
  318. {
  319. BuffExpires(savage_roar_buff)
  320. and { finisher_conditions()
  321. or TimeInCombat() < 8
  322. or Talent(brutal_slash_talent)
  323. and Enemies() >= BrutalSlashDesiredTargets()
  324. and Charges(brutal_slash) > 0
  325. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_burtal_slash_use_with_tigers_fury) }
  326. }
  327.  
  328. }
  329. #pool_resource,for_next=1
  330. #thrash_cat,cycle_targets=1,if=remains<=duration*0.3&spell_targets.thrash_cat>=5&(!ticking|variable.energy_pooling)
  331. AddFunction ThrashCat_5Targets
  332. {
  333. target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3
  334. and Enemies() >= 5
  335. and { target.DebuffExpires(thrash_cat_debuff) or energy_pooling() }
  336. }
  337. #pool_resource,for_next=1
  338. #swipe_cat,if=spell_targets.swipe_cat>=8&(buff.scent_of_blood.up|variable.energy_pooling)
  339. AddFunction SwipeCat_8Targets
  340. {
  341. Enemies() >= 8
  342. and { BuffPresent(scent_of_blood_buff) or energy_pooling() }
  343. }
  344. #rip,cycle_targets=1,if=(!ticking|(remains<9&target.health.pct>25&!talent.sabertooth.enabled)|persistent_multiplier>dot.rip.pmultiplier)&target.time_to_die-remains>tick_time*4&variable.finisher_conditions
  345. AddFunction Rip
  346. {
  347. { target.DebuffExpires(rip_debuff)
  348. or target.DebuffRemaining(rip_debuff) < RipTimer() and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  349. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  350. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  351. and finisher_conditions()
  352. }
  353. #pool_resource,for_next=1
  354. #ferocious_bite,max_energy=1,cycle_targets=1,if=dot.rip.remains<9&target.health.pct<25&variable.finisher_conditions
  355. AddFunction FerociousBite_5ComboRipRefresh
  356. { Energy() >= EnergyCost(ferocious_bite max=1)
  357. and target.DebuffRemaining(rip_debuff) < 9
  358. and target.HealthPercent() < 25
  359. and finisher_conditions()
  360. }
  361. #pool_resource,for_next=1
  362. #savage_roar,if=(buff.savage_roar.remains<=7.2|(buff.savage_roar.remains<13&talent.jagged_wounds.enabled&target.health.pct>=25))&variable.finisher_conditions
  363. AddFunction SavageRoar_Refresh
  364. { { BuffRemaining(savage_roar_buff) <= 7.2
  365. or BuffRemaining(savage_roar_buff) < SavageRoarTimer() and Talent(jagged_wounds_talent) and target.HealthPercent() >= 25 }
  366. and finisher_conditions()
  367. }
  368. #pool_resource,for_next=1
  369. #swipe_cat,if=combo_points=5&(spell_targets.swipe_cat>=6|(spell_targets.swipe_cat>=3&!talent.bloodtalons.enabled))&(buff.scent_of_blood.up|variable.energy_pooling)
  370. AddFunction SwipeCat_6Targets
  371. {
  372. ComboPoints() == 5
  373. and { Enemies() >= 6 or Enemies() >= 3 and not Talent(bloodtalons_talent) }
  374. and { BuffPresent(scent_of_blood_buff) or energy_pooling() }
  375. }
  376. #pool_resource,for_next=1
  377. #ferocious_bite,max_energy=1,cycle_targets=1,if=variable.finisher_conditions
  378. AddFunction FerociousBite
  379. {
  380. finisher_conditions()
  381. }
  382. #brutal_slash,if=spell_targets.brutal_slash>desired_targets&combo_points<5
  383. AddFunction BrutalSlash_DesiredTargets
  384. {
  385. Enemies() >= BrutalSlashDesiredTargets() and not Talent(bloodtalons_talent)
  386. and ComboPoints() < 5
  387. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_burtal_slash_use_with_tigers_fury) }
  388. }
  389. #pool_resource,for_next=1
  390. #swipe_cat,if=spell_targets.swipe_cat>=5&(buff.scent_of_blood.up|variable.energy_pooling)
  391. AddFunction SwipeCat_5Targets
  392. {
  393. Enemies() >= 5
  394. and { BuffPresent(scent_of_blood_buff) or energy_pooling() }
  395. }
  396. #pool_resource,for_next=1
  397. #thrash_cat,cycle_targets=1,if=combo_points<5&remains<=duration*0.3&spell_targets.thrash_cat>=3&(!ticking|variable.energy_pooling)
  398. AddFunction ThrashCat_3Targets
  399. {
  400. ComboPoints() < 5
  401. and target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3
  402. and Enemies() >= 3
  403. and { target.DebuffExpires(thrash_cat_debuff) or energy_pooling() }
  404. }
  405. #pool_resource,for_next=1
  406. #rake,cycle_targets=1,if=combo_points<5&(!ticking|(!talent.bloodtalons.enabled&remains<duration*0.3)|(talent.bloodtalons.enabled&buff.bloodtalons.up&(remains<=5|(!talent.soul_of_the_forest.enabled&!equipped.ailuro_pouncers&remains<=7))&persistent_multiplier>dot.rake.pmultiplier*0.80))&target.time_to_die-remains>tick_time
  407. AddFunction Rake
  408. {
  409. ComboPoints() < 5
  410. and { target.DebuffExpires(rake_debuff)
  411. or not Talent(bloodtalons_talent) and target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3
  412. or Talent(bloodtalons_talent)
  413. and BuffPresent(bloodtalons_buff)
  414. and { target.DebuffRemaining(rake_debuff) <= 5
  415. or not Talent(soul_of_the_forest_talent) and not HasEquippedItem(ailuro_pouncers) and target.DebuffRemaining(rake_debuff) <= 7 }
  416. and PersistentMultiplier(rake_debuff) > target.DebuffPersistentMultiplier(rake_debuff) * 0.8 }
  417. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff)
  418. }
  419. #moonfire_cat,cycle_targets=1,if=combo_points<5&remains<=4.2&target.time_to_die-remains>tick_time*2
  420. AddFunction MoonfireCat
  421. {
  422. ComboPoints() < 5
  423. and target.DebuffRemaining(moonfire_cat_debuff) <= 4.2
  424. and target.TimeToDie() - target.DebuffRemaining(moonfire_cat_debuff) > target.TickTime(moonfire_cat_debuff) * 2
  425. }
  426. #pool_resource,for_next=1
  427. #thrash_cat,cycle_targets=1,if=combo_points<5&remains<=duration*0.3&(spell_targets.thrash_cat>=2|(buff.clearcasting.up&equipped.luffa_wrappings))&(!ticking|variable.energy_pooling)
  428. AddFunction ThrashCat_2Targets
  429. {
  430. ComboPoints() < 5
  431. and target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3
  432. and { Enemies() >= 2
  433. or { { BuffPresent(clearcasting_buff)
  434. or TimeToMaxEnergy() < 1
  435. or Energy() > 100
  436. or BuffPresent(berserk_cat_buff)
  437. or BuffPresent(incarnation_king_of_the_jungle_buff)
  438. or SpellCooldown(tigers_fury) < 3 }
  439. and { not List(opt_st_thrash stt_1)
  440. or List(opt_st_thrash stt_5)
  441. or HasEquippedItem(luffa_wrappings) and List(opt_st_thrash stt_2)
  442. or ArmorSetBonus(T19 4) and List(opt_st_thrash stt_3)
  443. or ArmorSetBonus(T19 4) and HasEquippedItem(luffa_wrappings) and List(opt_st_thrash stt_4) } } }
  444. and { target.DebuffExpires(thrash_cat_debuff) or energy_pooling() }
  445. }
  446. #brutal_slash,if=combo_points<5&((raid_event.adds.exists&raid_event.adds.in>(1+max_charges-charges_fractional)*15)|(!raid_event.adds.exists&buff.tigers_fury.up))
  447. AddFunction BrutalSlash_MaxCharges
  448. {
  449. ComboPoints() < 5 and not Talent(bloodtalons_talent)
  450. and Charges(brutal_slash) == 3
  451. and CheckBoxOn(opt_brutal_slash_use_at_three_always)
  452. }
  453. #swipe_cat,if=combo_points<5&spell_targets.swipe_cat>=3&(buff.scent_of_blood.up|variable.energy_pooling)
  454. AddFunction SwipeCat_3Targets
  455. {
  456. ComboPoints() < 5
  457. and Enemies() >= 3
  458. and { BuffPresent(scent_of_blood_buff) or energy_pooling() }
  459. }
  460. #shred,if=combo_points<5&(spell_targets.swipe_cat<3|talent.brutal_slash.enabled)&((dot.rake.remains>(action.shred.cost+action.rake.cost-energy)%energy.regen)|variable.energy_pooling)
  461. AddFunction Shred
  462. {
  463. { ComboPoints() < 5 and { CheckBoxOff(opt_pool_at_three) or { CheckBoxOn(opt_pool_at_three) and not HasEquippedItem(the_wildshapers_clutch) } } } or { CheckBoxOn(opt_pool_at_three) and HasEquippedItem(the_wildshapers_clutch) and { ComboPoints() < 3 or { ComboPoints() < 5 and energy_pooling() } } }
  464. and { Enemies() < 3 or Talent(brutal_slash_talent) }
  465. and { target.DebuffRemaining(rake_debuff) > { PowerCost(shred) + PowerCost(rake) - Energy() } / EnergyRegenRate() or energy_pooling() }
  466. }
  467. AddFunction FeralBerserkActions
  468. {
  469. if BuffPresent(incarnation_king_of_the_jungle_buff) and CheckBoxOn(opt_shred_spam) and ArmorSetBonus(T19 4)
  470. {
  471. if { { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  472. and target.TimeToDie() > 20 } Spell(ashamanes_frenzy)
  473. if Talent(bloodtalons_talent)
  474. and BuffExpires(predatory_swiftness_buff)
  475. and BuffExpires(bloodtalons_buff)
  476. and ComboPoints() >= 5
  477. and { { target.DebuffExpires(rake_debuff)
  478. or not Talent(bloodtalons_talent) and target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3 + GCD() * 2
  479. or { Talent(bloodtalons_talent)
  480. and target.DebuffRemaining(rake_debuff) <= 3 + GCD() * 2 }
  481. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff) }
  482. or { { target.DebuffExpires(rip_debuff)
  483. or target.DebuffRemaining(rip_debuff) < RipTimer() + GCD() * 2 and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  484. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  485. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  486. and ComboPoints() >= 5 } } Spell(ferocious_bite)
  487. if Talent(bloodtalons_talent)
  488. and BuffPresent(predatory_swiftness_buff)
  489. and BuffExpires(bloodtalons_buff)
  490. and { { target.DebuffExpires(rake_debuff)
  491. or not Talent(bloodtalons_talent) and target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3 + GCD()
  492. or { Talent(bloodtalons_talent)
  493. and target.DebuffRemaining(rake_debuff) <= 3 + GCD() }
  494. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff) }
  495. or { { target.DebuffExpires(rip_debuff)
  496. or target.DebuffRemaining(rip_debuff) < RipTimer() + GCD() and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  497. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  498. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  499. and ComboPoints() >= 5 } } Spell(regrowth)
  500. if ThrashCat_5Targets() Spell(thrash_cat)
  501. if SwipeCat_8Targets() Spell(swipe_cat)
  502. if Rip() Spell(rip)
  503. if Enemies() >= BrutalSlashDesiredTargets() Spell(brutal_slash)
  504. if SwipeCat_5Targets() Spell(swipe_cat)
  505. if { target.DebuffExpires(rake_debuff)
  506. or not Talent(bloodtalons_talent) and target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3
  507. or { Talent(bloodtalons_talent)
  508. and BuffPresent(bloodtalons_buff)
  509. and { target.DebuffRemaining(rake_debuff) <= 5
  510. or not Talent(soul_of_the_forest_talent) and not HasEquippedItem(ailuro_pouncers) and target.DebuffRemaining(rake_debuff) <= 7 }
  511. and PersistentMultiplier(rake_debuff) > target.DebuffPersistentMultiplier(rake_debuff) * 0.8 }
  512. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff) } Spell(rake)
  513. if { { target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3 or target.DebuffExpires(thrash_cat_debuff) }
  514. and { not Talent(bloodtalons_talent) or BuffExpires(bloodtalons_buff) }
  515. and { Enemies() >= 2
  516. or { { BuffPresent(clearcasting_buff)
  517. or TimeToMaxEnergy() < 1
  518. or Energy() > 100
  519. or BuffPresent(berserk_cat_buff)
  520. or BuffPresent(incarnation_king_of_the_jungle_buff)
  521. or SpellCooldown(tigers_fury) < 3 }
  522. and { not List(opt_st_thrash stt_1)
  523. or List(opt_st_thrash stt_5)
  524. or HasEquippedItem(luffa_wrappings) and List(opt_st_thrash stt_2)
  525. or ArmorSetBonus(T19 4) and List(opt_st_thrash stt_3)
  526. or ArmorSetBonus(T19 4) and HasEquippedItem(luffa_wrappings) and List(opt_st_thrash stt_4) } } } } Spell(thrash_cat)
  527. if Charges(brutal_slash) == 3 and CheckBoxOn(opt_brutal_slash_use_at_three_always) Spell(brutal_slash)
  528. if Enemies() >= 3 Spell(swipe_cat)
  529. Spell(shred)
  530. }
  531. }
  532.  
  533. ### actions.default
  534.  
  535. AddFunction FeralDefaultMainActions
  536. {
  537. #variable,name=finisher_conditions,value=combo_points=5&(energy.time_to_max<1|buff.berserk.up|buff.incarnation.up|buff.elunes_guidance.up|cooldown.tigers_fury.remains<3|talent.soul_of_the_forest.enabled|!dot.rip.ticking|(dot.rake.remains<1.5&spell_targets.swipe_cat<6))
  538. #variable,name=energy_pooling,value=(energy.time_to_max<1|buff.clearcasting.react|buff.berserk.up|buff.incarnation.up|buff.ashamanes_energy.up|cooldown.tigers_fury.remains<3|talent.soul_of_the_forest.enabled)
  539.  
  540. #cat_form
  541. Spell(cat_form)
  542. #rake,if=buff.prowl.up|buff.shadowmeld.up
  543. if Rake_Prowl() Spell(rake)
  544.  
  545. FeralBerserkActions()
  546.  
  547. #ferocious_bite,cycle_targets=1,if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>3&(target.health.pct<25|talent.sabertooth.enabled)
  548. if FerociousBite_3SecondRefresh() Spell(ferocious_bite)
  549.  
  550. #regrowth,if=talent.bloodtalons.enabled&(buff.predatory_swiftness.up|(talent.sabertooth.enabled&combo_points=5&!buff.bloodtalons.up&!dot.rip.ticking))&((buff.bloodtalons.stack<2&!equipped.ailuro_pouncers)|buff.bloodtalons.down)&(combo_points>=5|buff.predatory_swiftness.remains<1.5|buff.predatory_swiftness.stack>1|(combo_points=2&buff.bloodtalons.down&cooldown.ashamanes_frenzy.remains<gcd&(buff.savage_roar.remains>gcd|!talent.savage_roar.enabled))|(talent.elunes_guidance.enabled&((cooldown.elunes_guidance.remains<gcd&combo_points=0)|(buff.elunes_guidance.up&combo_points>=4))))
  551. if Regrowth() Spell(regrowth)
  552.  
  553. #ashamanes_frenzy,if=combo_points<=2&buff.elunes_guidance.down&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(buff.savage_roar.up|!talent.savage_roar.enabled)
  554. if AshamanesFrenzy() and CheckBoxOn(opt_ashamanes_frenzy_main_action) Spell(ashamanes_frenzy)
  555.  
  556. #shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(buff.savage_roar.up|!talent.savage_roar.enabled)&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
  557. if Shadowmeld() and CheckBoxOn(opt_shadowmeld_main_action) Spell(shadowmeld)
  558.  
  559. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  560. unless ElunesGuidance_Pooling() {
  561.  
  562. #pool_resource,for_next=1
  563. #savage_roar,if=!buff.savage_roar.up&(variable.finisher_conditions|time<8|(talent.brutal_slash.enabled&spell_targets.brutal_slash>desired_targets&action.brutal_slash.charges>0))
  564. if SavageRoar_Expired() Spell(savage_roar)
  565. unless SavageRoar_Expired() and SpellUsable(savage_roar) and SpellCooldown(savage_roar) < TimeToEnergyFor(savage_roar) {
  566.  
  567. #pool_resource,for_next=1
  568. #thrash_cat,cycle_targets=1,if=remains<=duration*0.3&spell_targets.thrash_cat>=5&(!ticking|variable.energy_pooling)
  569. if ThrashCat_5Targets() Spell(thrash_cat)
  570. unless ThrashCat_5Targets() and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat) {
  571.  
  572. #pool_resource,for_next=1
  573. #swipe_cat,if=spell_targets.swipe_cat>=8&(buff.scent_of_blood.up|variable.energy_pooling)
  574. if SwipeCat_8Targets() Spell(swipe_cat)
  575. unless SwipeCat_8Targets() and SpellUsable(swipe_cat) and SpellCooldown(swipe_cat) < TimeToEnergyFor(swipe_cat) {
  576.  
  577. #rip,cycle_targets=1,if=(!ticking|(remains<9&target.health.pct>25&!talent.sabertooth.enabled)|persistent_multiplier>dot.rip.pmultiplier)&target.time_to_die-remains>tick_time*4&variable.finisher_conditions
  578. if Rip() Spell(rip)
  579.  
  580. if Maim() Spell(maim)
  581.  
  582. #pool_resource,for_next=1
  583. #ferocious_bite,max_energy=1,cycle_targets=1,if=dot.rip.remains<9&target.health.pct<25&variable.finisher_conditions
  584. if FerociousBite_5ComboRipRefresh() Spell(ferocious_bite extra_amount=25)
  585. unless FerociousBite_5ComboRipRefresh() and SpellUsable(ferocious_bite) and SpellCooldown(ferocious_bite) < TimeToEnergy(50) {
  586.  
  587. #pool_resource,for_next=1
  588. #savage_roar,if=(buff.savage_roar.remains<=7.2|(buff.savage_roar.remains<13&talent.jagged_wounds.enabled&target.health.pct>=25))&variable.finisher_conditions
  589. if SavageRoar_Refresh() Spell(savage_roar)
  590. unless SavageRoar_Refresh() and SpellUsable(savage_roar) and SpellCooldown(savage_roar) < TimeToEnergyFor(savage_roar) {
  591.  
  592. #pool_resource,for_next=1
  593. #swipe_cat,if=combo_points=5&(spell_targets.swipe_cat>=6|(spell_targets.swipe_cat>=3&!talent.bloodtalons.enabled))&(buff.scent_of_blood.up|variable.energy_pooling)
  594. if SwipeCat_6Targets() Spell(swipe_cat)
  595. unless SwipeCat_6Targets() and SpellUsable(swipe_cat) and SpellCooldown(swipe_cat) < TimeToEnergyFor(swipe_cat) {
  596.  
  597. #pool_resource,for_next=1
  598. #ferocious_bite,max_energy=1,cycle_targets=1,if=variable.finisher_conditions
  599. if FerociousBite() Spell(ferocious_bite extra_amount=25)
  600. unless FerociousBite() and SpellUsable(ferocious_bite) and SpellCooldown(ferocious_bite extra_amount=25) < TimeToEnergy(50) {
  601.  
  602. #brutal_slash,if=spell_targets.brutal_slash>desired_targets&combo_points<5
  603. if BrutalSlash_DesiredTargets() Spell(brutal_slash)
  604.  
  605. #pool_resource,for_next=1
  606. #swipe_cat,if=spell_targets.swipe_cat>=5&(buff.scent_of_blood.up|variable.energy_pooling)
  607. if SwipeCat_5Targets() Spell(swipe_cat)
  608. unless SwipeCat_5Targets() and SpellUsable(swipe_cat) and SpellCooldown(swipe_cat) < TimeToEnergyFor(swipe_cat) {
  609.  
  610. #pool_resource,for_next=1
  611. #thrash_cat,cycle_targets=1,if=combo_points<5&remains<=duration*0.3&spell_targets.thrash_cat>=3&(!ticking|variable.energy_pooling)
  612. if ThrashCat_3Targets() Spell(thrash_cat)
  613. unless ThrashCat_3Targets() and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat) {
  614.  
  615. #pool_resource,for_next=1
  616. #rake,cycle_targets=1,if=combo_points<5&(!ticking|(!talent.bloodtalons.enabled&remains<duration*0.3)|(talent.bloodtalons.enabled&buff.bloodtalons.up&(remains<=5|(!talent.soul_of_the_forest.enabled&!equipped.ailuro_pouncers&remains<=7))&persistent_multiplier>dot.rake.pmultiplier*0.80))&target.time_to_die-remains>tick_time
  617. if Rake() Spell(rake)
  618. unless Rake() and SpellUsable(rake) and SpellCooldown(rake) < TimeToEnergyFor(rake) {
  619.  
  620. #moonfire_cat,cycle_targets=1,if=combo_points<5&remains<=4.2&target.time_to_die-remains>tick_time*2
  621. if MoonfireCat() Spell(moonfire_cat)
  622.  
  623. #pool_resource,for_next=1
  624. #thrash_cat,cycle_targets=1,if=combo_points<5&remains<=duration*0.3&(spell_targets.thrash_cat>=2|(buff.clearcasting.up&equipped.luffa_wrappings))&(!ticking|variable.energy_pooling)
  625. if ThrashCat_2Targets() Spell(thrash_cat)
  626. unless ThrashCat_2Targets() and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat) {
  627.  
  628. #brutal_slash,if=combo_points<5&((raid_event.adds.exists&raid_event.adds.in>(1+max_charges-charges_fractional)*15)|(!raid_event.adds.exists&buff.tigers_fury.up))
  629. if BrutalSlash_MaxCharges() Spell(brutal_slash)
  630. #swipe_cat,if=combo_points<5&spell_targets.swipe_cat>=3&(buff.scent_of_blood.up|variable.energy_pooling)
  631. if SwipeCat_3Targets() Spell(swipe_cat)
  632. #shred,if=combo_points<5&(spell_targets.swipe_cat<3|talent.brutal_slash.enabled)&((dot.rake.remains>(action.shred.cost+action.rake.cost-energy)%energy.regen)|variable.energy_pooling)
  633. if Shred() Spell(shred)
  634. }}}}}}}}}}}}
  635. }
  636.  
  637. AddFunction FeralDefaultMainPostConditions
  638. {
  639. }
  640.  
  641. AddFunction FeralDefaultShortCdActions
  642. {
  643. unless Spell(cat_form) {
  644.  
  645. #dash,if=!buff.cat_form.up
  646. if BuffExpires(cat_form_buff) Spell(dash)
  647.  
  648. #wild_charge
  649. #displacer_beast,if=movement.distance>10
  650. FeralGetInMeleeRange()
  651.  
  652. unless Rake_Prowl() and Spell(rake) {
  653.  
  654. #potion,name=old_war,if=((buff.berserk.remains>10|buff.incarnation.remains>20)&(target.time_to_die<180|(trinket.proc.all.react&target.health.pct<25)))|target.time_to_die<=40
  655. #tigers_fury,if=(!buff.clearcasting.react&energy.deficit>=60)|energy.deficit>=80|(talent.sabertooth.enabled&!dot.rip.ticking&combo_points=5&(buff.bloodtalons.up|!talent.bloodtalons.enabled))
  656. if TigersFury() Spell(tigers_fury)
  657.  
  658. unless FerociousBite_3SecondRefresh() and Spell(ferocious_bite) or Regrowth() and Spell(regrowth) {
  659.  
  660. #ashamanes_frenzy,if=combo_points<=2&buff.elunes_guidance.down&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(buff.savage_roar.up|!talent.savage_roar.enabled)
  661. if CheckBoxOff(opt_ashamanes_frenzy_main_action)
  662. {
  663. if Regrowth_AshamanesFrenzy() Spell(regrowth)
  664. if AshamanesFrenzy() Spell(ashamanes_frenzy)
  665. }
  666.  
  667. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  668. unless ElunesGuidance_Pooling() {
  669. #elunes_guidance,if=talent.elunes_guidance.enabled&combo_points=0&energy>=action.ferocious_bite.cost+25
  670. if ElunesGuidance() Spell(elunes_guidance)
  671. }}}}
  672. }
  673.  
  674. AddFunction FeralDefaultCdActions
  675. {
  676. unless Spell(cat_form) and Rake_Prowl() and Spell(rake) {
  677. #auto_attack
  678. #skull_bash
  679. FeralInterruptActions()
  680.  
  681. #berserk,if=buff.tigers_fury.up
  682. #incarnation,if=buff.tigers_fury.up
  683. if Berserk() Spell(berserk_cat)
  684.  
  685. #use_item,slot=trinket2,if=(buff.tigers_fury.up&(target.time_to_die>trinket.stat.any.cooldown|target.time_to_die<45))|buff.incarnation.remains>20
  686. if BuffPresent(tigers_fury_buff)
  687. and { target.TimeToDie() > BuffCooldownDuration(trinket_stat_any_buff) or target.TimeToDie() < 45 }
  688. or BuffRemaining(incarnation_king_of_the_jungle_buff) > 20
  689. or CheckBoxOn(opt_trinket_on_cd) FeralUseItemActions()
  690.  
  691. unless FerociousBite_3SecondRefresh() and Spell(ferocious_bite) or Regrowth() and Spell(regrowth) or AshamanesFrenzy() and Spell(ashamanes_frenzy) {
  692.  
  693. #shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(buff.savage_roar.up|!talent.savage_roar.enabled)&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
  694. if Shadowmeld() and CheckBoxOff(opt_shadowmeld_main_action) Spell(shadowmeld)
  695. }}
  696. }
  697.  
  698.  
  699. ### actions.precombat
  700.  
  701. AddFunction FeralPrecombatMainActions
  702. {
  703. #flask,type=flask_of_the_seventh_demon
  704. #food,type=the_hungry_magister
  705. #regrowth,if=talent.bloodtalons.enabled
  706. if Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) Spell(regrowth)
  707. #prowl
  708. Spell(prowl)
  709. #cat_form
  710. Spell(cat_form)
  711. #savage_roar
  712. if BuffRemaining(savage_roar_buff) < 4 + 2 * ComboPoints() Spell(savage_roar)
  713. if Talent(savage_roar_talent) and Talent(elunes_guidance_talent) and BuffPresent(prowl_buff) and BuffExpires(savage_roar) and SpellUsable(elunes_guidance) Texture(ability_druid_skinteeth)
  714. }
  715.  
  716. AddFunction FeralPrecombatMainPostConditions
  717. {
  718. }
  719.  
  720. AddFunction FeralPrecombatShortCdActions
  721. {
  722. unless Spell(cat_form) or Spell(prowl)
  723. {
  724. #elunes_guidance,if=talent.savage_roar.enabled
  725. if Talent(savage_roar_talent) Spell(elunes_guidance)
  726. }
  727. }
  728.  
  729. AddFunction FeralPrecombatShortCdPostConditions
  730. {
  731. Talent(bloodtalons_talent) and Spell(regrowth) or Spell(cat_form) or Spell(prowl) or Spell(savage_roar)
  732. }
  733.  
  734. AddFunction FeralPrecombatCdActions
  735. {
  736. }
  737.  
  738. AddFunction FeralPrecombatCdPostConditions
  739. {
  740. Talent(bloodtalons_talent) and Spell(regrowth) or Spell(cat_form)
  741. }
  742.  
  743. ### Feral icons.
  744.  
  745. AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=shortcd specialization=feral
  746. {
  747. if not InCombat() FeralPrecombatShortCdActions()
  748. unless not InCombat() and FeralPrecombatShortCdPostConditions()
  749. {
  750. FeralDefaultShortCdActions()
  751. }
  752. }
  753.  
  754. AddIcon checkbox=opt_druid_feral_aoe help=shortcd specialization=feral
  755. {
  756. if not InCombat() FeralPrecombatShortCdActions()
  757. unless not InCombat() and FeralPrecombatShortCdPostConditions()
  758. {
  759. FeralDefaultShortCdActions()
  760. }
  761. }
  762.  
  763. AddIcon enemies=1 help=main specialization=feral
  764. {
  765. if not InCombat() FeralPrecombatMainActions()
  766. unless not InCombat() and FeralPrecombatMainPostConditions()
  767. {
  768. FeralDefaultMainActions()
  769. }
  770. }
  771.  
  772. AddIcon checkbox=opt_druid_feral_aoe help=aoe specialization=feral
  773. {
  774. if not InCombat() FeralPrecombatMainActions()
  775. unless not InCombat() and FeralPrecombatMainPostConditions()
  776. {
  777. FeralDefaultMainActions()
  778. }
  779. }
  780.  
  781. AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=cd specialization=feral
  782. {
  783. if not InCombat() FeralPrecombatCdActions()
  784. unless not InCombat() and FeralPrecombatCdPostConditions()
  785. {
  786. FeralDefaultCdActions()
  787. }
  788. }
  789.  
  790. AddIcon checkbox=opt_druid_feral_aoe help=cd specialization=feral
  791. {
  792. if not InCombat() FeralPrecombatCdActions()
  793. unless not InCombat() and FeralPrecombatCdPostConditions()
  794. {
  795. FeralDefaultCdActions()
  796. }
  797. }
  798.  
  799. ### Required symbols
  800. # ailuro_pouncers
  801. # ashamanes_energy_buff
  802. # ashamanes_frenzy
  803. # augmentation
  804. # berserk_cat
  805. # berserk_cat_buff
  806. # bloodtalons_buff
  807. # bloodtalons_talent
  808. # brutal_slash
  809. # brutal_slash_talent
  810. # cat_form
  811. # cat_form_buff
  812. # clearcasting_buff
  813. # dash
  814. # displacer_beast
  815. # displacer_beast_buff
  816. # elunes_guidance
  817. # elunes_guidance_buff
  818. # elunes_guidance_talent
  819. # ferocious_bite
  820. # fiery_red_maimers_buff
  821. # incarnation_king_of_the_jungle
  822. # incarnation_king_of_the_jungle_buff
  823. # incarnation_talent
  824. # jagged_wounds_talent
  825. # luffa_wrappings
  826. # maim
  827. # mighty_bash
  828. # moonfire_cat
  829. # moonfire_cat_debuff
  830. # predatory_swiftness_buff
  831. # prowl
  832. # prowl_buff
  833. # rake
  834. # rake_debuff
  835. # regrowth
  836. # rip
  837. # rip_debuff
  838. # sabertooth_talent
  839. # savage_roar
  840. # savage_roar_buff
  841. # savage_roar_talent
  842. # scent_of_blood_buff
  843. # shadowmeld
  844. # shadowmeld_buff
  845. # shred
  846. # skull_bash
  847. # soul_of_the_forest_talent
  848. # swipe_cat
  849. # the_wildshapers_clutch
  850. # thrash_cat
  851. # thrash_cat_debuff
  852. # tigers_fury
  853. # tigers_fury_buff
  854. # typhoon
  855. # war_stomp
  856.  
  857. # Based on SimulationCraft profile "Druid_Guardian_T19P".
  858. # class=druid
  859. # spec=guardian
  860. # talents=3133323
  861.  
  862. AddCheckBox(opt_interrupt L(interrupt) default specialization=guardian)
  863. AddCheckBox(opt_melee_range L(not_in_melee_range) specialization=guardian)
  864. AddCheckBox(opt_suggest_maul "Suggest Maul instead of IronFur" specialization=guardian)
  865. AddCheckBox(opt_catweave "Suggest CatWeaving rotation" specialization=guardian)
  866.  
  867. AddFunction GuardianUseItemActions
  868. {
  869. Item(Trinket0Slot usable=1)
  870. Item(Trinket1Slot usable=1)
  871. }
  872.  
  873. AddFunction GuardianGetInMeleeRange
  874. {
  875. if CheckBoxOn(opt_melee_range) and Stance(druid_bear_form) and not target.InRange(mangle) or Stance(druid_cat_form) and not target.InRange(shred)
  876. {
  877. if target.InRange(wild_charge) Spell(wild_charge)
  878. Texture(misc_arrowlup help=L(not_in_melee_range))
  879. }
  880. }
  881.  
  882. AddFunction GuardianInterruptActions
  883. {
  884. if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
  885. {
  886. if target.InRange(skull_bash) Spell(skull_bash)
  887. if not target.Classification(worldboss)
  888. {
  889. if target.InRange(mighty_bash) Spell(mighty_bash)
  890. Spell(typhoon)
  891. if target.InRange(maim) Spell(maim)
  892. Spell(war_stomp)
  893. }
  894. }
  895. }
  896.  
  897. ### actions.default
  898.  
  899. AddFunction GuardianDefaultMainActions
  900. {
  901. if Stance(druid_bear_form)
  902. {
  903. #pulverize,cycle_targets=1,if=buff.pulverize.down
  904. if BuffExpires(pulverize_buff) and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  905. #thrash_bear,if=dot.thrash_bear.remains<4.5
  906. if target.DebuffRemaining(thrash_bear_debuff) < 4.5 Spell(thrash_bear)
  907. #mangle
  908. Spell(mangle)
  909. #pulverize,cycle_targets=1,if=buff.pulverize.remains<gcd
  910. if BuffRemaining(pulverize_buff) < GCD() and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  911. #thrash_bear
  912. Spell(thrash_bear)
  913. #pulverize,cycle_targets=1,if=buff.pulverize.remains<3.6
  914. if BuffRemaining(pulverize_buff) < 3.6 and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  915. #moonfire,if=!ticking|buff.galactic_guardian.up
  916. if target.DebuffExpires(moonfire_debuff) or BuffPresent(galactic_guardian_buff) Spell(moonfire)
  917. }
  918. if CheckBoxOn(opt_catweave) and not target.IsAggroed() and Talent(feral_affinity_talent) GuardianCatWeaveActions()
  919. if Stance(druid_bear_form)
  920. {
  921. #swipe_bear
  922. Spell(swipe_bear)
  923. }
  924. }
  925.  
  926. AddFunction GuardianCatWeaveActions
  927. {
  928. Spell(cat_form)
  929. if Energy() > 20
  930. {
  931. if ComboPoints() == 5
  932. {
  933. if target.DebuffExpires(rip_debuff) or target.DebuffRemaining(rip_debuff) < BaseDuration(rip_debuff) * 0.3 + 5 Spell(rip)
  934. if Energy() > 50 and target.DebuffRemaining(rip_debuff) > 15 Spell(ferocious_bite)
  935. }
  936. if target.DebuffExpires(rake_debuff) or target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3 + 3 Spell(rake)
  937. Spell(shred)
  938. }
  939. Spell(bear_form)
  940. }
  941.  
  942. AddFunction GuardianDefaultShortCdActions
  943. {
  944. #auto_attack
  945. GuardianGetInMeleeRange()
  946. if target.IsAggroed() and IncomingDamage(10 physical=1) < IncomingDamage(10 magic=1) and BuffRefreshable(mark_of_ursol_buff) and CheckBoxOff(opt_suggest_maul) Spell(mark_of_ursol)
  947. #ironfur,if=buff.ironfur.down|rage.deficit<25
  948. if target.IsAggroed() and IncomingDamage(3 physical=1) and { BuffExpires(ironfur_buff) or RageDeficit() < 25 } and CheckBoxOff(opt_suggest_maul) Spell(ironfur)
  949. #maul
  950. if not target.IsAggroed() and RageDeficit() < 25 or CheckBoxOn(opt_suggest_maul) Spell(maul)
  951. #frenzied_regeneration,if=!ticking&incoming_damage_6s%health.max>0.25+(2-charges_fractional)*0.15
  952. if BuffExpires(frenzied_regeneration_buff) and IncomingDamage(5) / MaxHealth() > 0.25 + { 2 - Charges(frenzied_regeneration count=0) } * 0.15 Spell(frenzied_regeneration)
  953. #bristling_fur,if=buff.ironfur.remains<2&rage<40
  954. if BuffRemaining(ironfur_buff) < 2 and Rage() < 40 Spell(bristling_fur)
  955. }
  956.  
  957. AddFunction GuardianDefaultCdActions
  958. {
  959. #skull_bash
  960. GuardianInterruptActions()
  961. #blood_fury
  962. Spell(blood_fury_apsp)
  963. #berserking
  964. Spell(berserking)
  965. #arcane_torrent
  966. Spell(arcane_torrent_energy)
  967. #use_item,slot=trinket2
  968. GuardianUseItemActions()
  969.  
  970. unless { BuffExpires(ironfur_buff) or RageDeficit() < 25 } and Spell(ironfur) or BuffExpires(frenzied_regeneration_buff) and IncomingDamage(6) / MaxHealth() > 0.25 + { 2 - Charges(frenzied_regeneration count=0) } * 0.15 and Spell(frenzied_regeneration) or BuffExpires(pulverize_buff) and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) and Spell(pulverize) or target.DebuffRemaining(thrash_bear_debuff) < 4.5 and Spell(thrash_bear) or Spell(mangle) or BuffRemaining(pulverize_buff) < GCD() and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) and Spell(pulverize)
  971. {
  972. #incarnation
  973. Spell(incarnation_guardian_of_ursoc)
  974. }
  975. }
  976.  
  977. ### actions.precombat
  978.  
  979. AddFunction GuardianPrecombatMainActions
  980. {
  981. #flask,type=flask_of_the_seventh_demon
  982. #food,type=azshari_salad
  983. #bear_form
  984. Spell(bear_form)
  985. }
  986.  
  987. AddFunction GuardianPrecombatShortCdPostConditions
  988. {
  989. Spell(bear_form)
  990. }
  991.  
  992. AddFunction GuardianPrecombatCdPostConditions
  993. {
  994. Spell(bear_form)
  995. }
  996.  
  997. ### Guardian icons.
  998.  
  999. AddCheckBox(opt_druid_guardian_aoe L(AOE) default specialization=guardian)
  1000.  
  1001. AddIcon checkbox=!opt_druid_guardian_aoe enemies=1 help=shortcd specialization=guardian
  1002. {
  1003. unless not InCombat() and GuardianPrecombatShortCdPostConditions()
  1004. {
  1005. GuardianDefaultShortCdActions()
  1006. }
  1007. }
  1008.  
  1009. AddIcon checkbox=opt_druid_guardian_aoe help=shortcd specialization=guardian
  1010. {
  1011. unless not InCombat() and GuardianPrecombatShortCdPostConditions()
  1012. {
  1013. GuardianDefaultShortCdActions()
  1014. }
  1015. }
  1016.  
  1017. AddIcon enemies=1 help=main specialization=guardian
  1018. {
  1019. if not InCombat() GuardianPrecombatMainActions()
  1020. GuardianDefaultMainActions()
  1021. }
  1022.  
  1023. AddIcon checkbox=opt_druid_guardian_aoe help=aoe specialization=guardian
  1024. {
  1025. if not InCombat() GuardianPrecombatMainActions()
  1026. GuardianDefaultMainActions()
  1027. }
  1028.  
  1029. AddIcon checkbox=!opt_druid_guardian_aoe enemies=1 help=cd specialization=guardian
  1030. {
  1031. unless not InCombat() and GuardianPrecombatCdPostConditions()
  1032. {
  1033. GuardianDefaultCdActions()
  1034. }
  1035. }
  1036.  
  1037. AddIcon checkbox=opt_druid_guardian_aoe help=cd specialization=guardian
  1038. {
  1039. unless not InCombat() and GuardianPrecombatCdPostConditions()
  1040. {
  1041. GuardianDefaultCdActions()
  1042. }
  1043. }
  1044.  
  1045. ### Required symbols
  1046. # arcane_torrent_energy
  1047. # bear_form
  1048. # berserking
  1049. # blood_fury_apsp
  1050. # bristling_fur
  1051. # frenzied_regeneration
  1052. # frenzied_regeneration_buff
  1053. # galactic_guardian_buff
  1054. # incarnation_guardian_of_ursoc
  1055. # ironfur
  1056. # ironfur_buff
  1057. # thrash_bear_debuff
  1058. # maim
  1059. # mangle
  1060. # mighty_bash
  1061. # moonfire
  1062. # moonfire_debuff
  1063. # pulverize
  1064. # pulverize_buff
  1065. # shred
  1066. # skull_bash
  1067. # swipe_bear
  1068. # thrash_bear
  1069. # thrash_bear_debuff
  1070. # typhoon
  1071. # war_stomp
  1072. # wild_charge
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement