Advertisement
Guest User

Shmoo Feral script with extra options

a guest
Feb 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.84 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. # Elune's Guidance finisher prediction - Places the correct finisher in the main action box when EG is usable.
  15. # This will block the rest of the action list till you use EG so don't use if you're going to save EG.
  16. # Tiger's Fury multiplier prediction - Applies the Tiger's Fury multiplier if Tiger's Fury is ready.
  17. # e.g. If TF is being suggested, any Rip suggestions will assume you use TF first.
  18. # Only suggest Brutal Slash when Tiger's Fury is up
  19. # Good for Mythic+ to get the most damage out of your charges.
  20. # The setting below will ignore SR/TF constraints and suggest BS at 3 charges regardless.
  21. # Always use BS at 3 charges - Will suggest Brutal Slash if you are about to reach max charges.
  22. # Advantage: Helps not waste charges.
  23. # Disadvantage: Will probably not have 3 charges when AoE for the encounter shows up.
  24. # Min targets to suggest Brutal Slash - Minimum number of targets to suggest using Brutal Slash.
  25. # This will use all available Brutal Slash charges.
  26. # Following setting will affect when these are used.
  27. # Rip/Rake/Moonfire/Savage Roar at x seconds - Refresh dots/buffs within a given window
  28. # Refreshing earlier allows for more flexability and probably uptimes, Refreshing closer to pandemic could increase dps slightly
  29. # Ashamane's only when TF is up - Only suggest Ashamane's when Tiger's Fury is active
  30. # Maybe not a dps increase
  31. # Suggest Trinket use on Cooldown - instead of syncing with damage buffs
  32. # Good for trinkets that don't get buffed (Kil'jaeden's for instance)
  33. # Suggest Maul instead of Ironfur
  34. # Bad for mitigation, good for dps
  35. # Suggest Shred at 5 cp with Berserk - While zerk/incarnation is active, spam shred, only stopping to refresh rake or rip (with BT), nothing else
  36. # Something to try @Nanaki - http://www.fluiddruid.net/forum/viewtopic.php?f=3&t=5709&sid=ba81b3ad75462b66a14c8486c19d7123&start=375#p36492
  37.  
  38. Include(ovale_common)
  39. Include(ovale_trinkets_mop)
  40. Include(ovale_trinkets_wod)
  41. Include(ovale_druid_spells)
  42. SpellAddTargetDebuff(ferocious_bite rip_debuff=refresh_keep_snapshot)
  43. SpellInfo(incarnation_king_of_the_jungle unusable=1 talent=!incarnation_talent)
  44.  
  45.  
  46. AddCheckBox(opt_thrash_on_st "Suggest Thrash if using 4pc/Luffa/Ooc proc" specialization=feral)
  47. AddCheckBox(opt_shred_spam "Suggest Shred at 5 cp with Berserk" specialization=feral)
  48. AddCheckBox(opt_trinket_on_cd "Suggest trinket use on cooldown" specialization=feral)
  49. AddCheckBox(opt_tf_for_ashamanes "Ashamane's only when TF is up" specialization=feral)
  50. AddCheckBox(opt_interrupt L(interrupt) default specialization=feral)
  51. AddCheckBox(opt_melee_range L(not_in_melee_range) specialization=feral)
  52. AddCheckBox(opt_ashamanes_frenzy_main_action "Ashamane's Frenzy as a main action" default specialization=feral)
  53. AddCheckBox(opt_shadowmeld_main_action "Shadowmeld as a main action" specialization=feral)
  54. # AddCheckBox(opt_elunes_guidance_predict "Elune's Guidance finisher prediction" default specialization=feral)
  55. AddCheckBox(opt_tigers_fury_multiplier_predict "Tiger's Fury multiplier prediction" default specialization=feral)
  56. AddCheckBox(opt_brutal_slash_use_at_three_always "Always use BS at 3 charges" specialization=feral)
  57. AddCheckBox(opt_burtal_slash_use_with_tigers_fury "Only suggest BS when TF is up" specialization=feral)
  58. AddListItem(opt_desired_targets dt_2 "Brutal Slash at 2 targets" specialization=feral)
  59. AddListItem(opt_desired_targets dt_3 "Brutal Slash at 3 targets" specialization=feral default)
  60. AddListItem(opt_desired_targets dt_4 "Brutal Slash at 4 targets" specialization=feral)
  61. AddListItem(opt_desired_targets dt_5 "Brutal Slash at 5 targets" specialization=feral)
  62. AddListItem(opt_desired_targets dt_6 "Brutal Slash at 6 targets" specialization=feral)
  63. AddListItem(opt_desired_targets dt_7 "Brutal Slash at 7 targets" specialization=feral)
  64. AddListItem(opt_desired_targets dt_8 "Brutal Slash at 8 targets" specialization=feral)
  65. AddListItem(opt_desired_targets dt_9 "Brutal Slash at 9 targets" specialization=feral)
  66. AddListItem(opt_rip_timer ript_1 "Rip at pandemic" specialization=feral)
  67. AddListItem(opt_rip_timer ript_5 "Rip at 5 seconds" specialization=feral)
  68. AddListItem(opt_rip_timer ript_6 "Rip at 6 seconds" specialization=feral)
  69. AddListItem(opt_rip_timer ript_7 "Rip at 7 seconds" specialization=feral)
  70. AddListItem(opt_rip_timer ript_8 "Rip at 8 seconds" specialization=feral)
  71. AddListItem(opt_rip_timer ript_9 "Rip at 9 seconds (default)" specialization=feral default)
  72. AddListItem(opt_rake_timer raket_0 "Rake at defaults" specialization=feral default)
  73. AddListItem(opt_rake_timer raket_1 "Rake at pandemic" specialization=feral)
  74. AddListItem(opt_rake_timer raket_3 "Rake at 3 seconds" specialization=feral)
  75. AddListItem(opt_rake_timer raket_4 "Rake at 4 seconds" specialization=feral)
  76. AddListItem(opt_rake_timer raket_5 "Rake at 5 seconds" specialization=feral)
  77. AddListItem(opt_rake_timer raket_6 "Rake at 6 seconds" specialization=feral)
  78. AddListItem(opt_rake_timer raket_7 "Rake at 7 seconds" specialization=feral)
  79. AddListItem(opt_rake_timer raket_8 "Rake at 8 seconds" specialization=feral)
  80. AddListItem(opt_rake_timer raket_9 "Rake at 9 seconds" specialization=feral)
  81. AddListItem(opt_savage_roar_timer srt_1 "Savage Roar at pandemic" specialization=feral)
  82. AddListItem(opt_savage_roar_timer srt_8 "Savage Roar at 8 seconds" specialization=feral)
  83. AddListItem(opt_savage_roar_timer srt_9 "Savage Roar at 9 seconds" specialization=feral)
  84. AddListItem(opt_savage_roar_timer srt_10 "Savage Roar at 10 seconds" specialization=feral)
  85. AddListItem(opt_savage_roar_timer srt_11 "Savage Roar at 11 seconds" specialization=feral)
  86. AddListItem(opt_savage_roar_timer srt_12 "Savage Roar at 12 seconds" specialization=feral)
  87. AddListItem(opt_savage_roar_timer srt_13 "Savage Roar at 13 seconds (default)" specialization=feral default)
  88. AddListItem(opt_moonfire_timer mt_1 "Moonfire at pandemic" specialization=feral)
  89. AddListItem(opt_moonfire_timer mt_5 "Moonfire at 5 seconds" specialization=feral)
  90. AddListItem(opt_moonfire_timer mt_6 "Moonfire at 6 seconds" specialization=feral)
  91. AddListItem(opt_moonfire_timer mt_7 "Moonfire at 7 seconds" specialization=feral)
  92. AddListItem(opt_moonfire_timer mt_8 "Moonfire at 8 seconds" specialization=feral)
  93. AddListItem(opt_moonfire_timer mt_9 "Moonfire at 9 seconds" specialization=feral default)
  94.  
  95. AddFunction RipTimer asvalue=1
  96. {
  97. if List(opt_rip_timer ript_1) BaseDuration(rip_debuff) * 0.3
  98. if List(opt_rip_timer ript_5) 5
  99. if List(opt_rip_timer ript_6) 6
  100. if List(opt_rip_timer ript_7) 7
  101. if List(opt_rip_timer ript_8) 8
  102. if List(opt_rip_timer ript_9) 9
  103. }
  104.  
  105. AddFunction SotfRakeTimer asvalue=1
  106. {
  107. if List(opt_rake_timer raket_0) 5
  108. if List(opt_rake_timer raket_1) BaseDuration(rake_debuff) * 0.3
  109. if List(opt_rake_timer raket_3) 3
  110. if List(opt_rake_timer raket_4) 4
  111. if List(opt_rake_timer raket_5) 5
  112. if List(opt_rake_timer raket_6) 6
  113. if List(opt_rake_timer raket_7) 7
  114. if List(opt_rake_timer raket_8) 8
  115. if List(opt_rake_timer raket_9) 9
  116.  
  117. }
  118.  
  119. AddFunction RakeTimer asvalue=1
  120. {
  121. if List(opt_rake_timer raket_0) 9
  122. if List(opt_rake_timer raket_1) BaseDuration(rake_debuff) * 0.3
  123. if List(opt_rake_timer raket_3) 3
  124. if List(opt_rake_timer raket_4) 4
  125. if List(opt_rake_timer raket_5) 5
  126. if List(opt_rake_timer raket_6) 6
  127. if List(opt_rake_timer raket_7) 7
  128. if List(opt_rake_timer raket_8) 8
  129. if List(opt_rake_timer raket_9) 9
  130. }
  131.  
  132. AddFunction SavageRoarTimer asvalue=1
  133. {
  134. if List(opt_savage_roar_timer srt_1) 7.2
  135. if List(opt_savage_roar_timer srt_8) 8
  136. if List(opt_savage_roar_timer srt_9) 9
  137. if List(opt_savage_roar_timer srt_10) 10
  138. if List(opt_savage_roar_timer srt_11) 11
  139. if List(opt_savage_roar_timer srt_12) 12
  140. if List(opt_savage_roar_timer srt_13) 13
  141. }
  142.  
  143. AddFunction MoonfireTimer asvalue=1
  144. {
  145. if List(opt_moonfire_timer mt_1) 4.2
  146. if List(opt_moonfire_timer mt_5) 5
  147. if List(opt_moonfire_timer mt_6) 6
  148. if List(opt_moonfire_timer mt_7) 7
  149. if List(opt_moonfire_timer mt_8) 8
  150. if List(opt_moonfire_timer mt_9) 9
  151. }
  152.  
  153. AddFunction BrutalSlashDesiredTargets asvalue=1
  154. {
  155. if List(opt_desired_targets dt_2) 2
  156. if List(opt_desired_targets dt_3) 3
  157. if List(opt_desired_targets dt_4) 4
  158. if List(opt_desired_targets dt_5) 5
  159. if List(opt_desired_targets dt_6) 6
  160. if List(opt_desired_targets dt_7) 7
  161. if List(opt_desired_targets dt_8) 8
  162. if List(opt_desired_targets dt_9) 9
  163. }
  164.  
  165. AddFunction TFMultPred asvalue=1
  166. {
  167. if CheckBoxOn(opt_tigers_fury_multiplier_predict)
  168. and SpellCooldown(tigers_fury) < GCDRemaining()
  169. and BuffExpires(tigers_fury_buff)
  170. and { BuffExpires(clearcasting_buff) and EnergyDeficit() >= 60
  171. or EnergyDeficit() >= 80
  172. or HasTrinket(t18_class_trinket) and BuffPresent(berserk_cat_buff) } 1.15
  173. 1
  174. }
  175.  
  176. AddFunction FeralUseItemActions
  177. {
  178. Item(Trinket0Slot usable=1)
  179. Item(Trinket1Slot usable=1)
  180. }
  181.  
  182. AddFunction FeralGetInMeleeRange
  183. {
  184. if CheckBoxOn(opt_melee_range) and target.InRange(shred no)
  185. {
  186. #wild_charge
  187. if target.InRange(wild_charge) Spell(wild_charge)
  188. #displacer_beast,if=movement.distance>25
  189. if target.distance() > 25 Spell(displacer_beast)
  190. #dash,if=movement.distance>25&buff.displacer_beast.down&buff.wild_charge_movement.down
  191. if target.distance() > 25 and BuffExpires(displacer_beast_buff) Spell(dash)
  192. Texture(misc_arrowlup help=L(not_in_melee_range))
  193. }
  194. }
  195.  
  196. AddFunction FeralInterruptActions
  197. {
  198. if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
  199. {
  200. if target.InRange(skull_bash) Spell(skull_bash)
  201. if not target.Classification(worldboss)
  202. {
  203. if target.InRange(mighty_bash) Spell(mighty_bash)
  204. Spell(typhoon)
  205. if target.InRange(maim) Spell(maim)
  206. Spell(war_stomp)
  207. }
  208. }
  209. }
  210.  
  211. # Assumes Open Wounds trait
  212. AddFunction DamageAfterArmor asvalue=1
  213. {
  214.  
  215. if target.DebuffPresent(rip_debuff) 0.7282
  216. 0.6802
  217. }
  218.  
  219. # Capped at 5 minutes
  220. AddFunction CappedTargetTimeToDie asvalue=1
  221. {
  222. if target.TimeToDie() > 300 300
  223. target.TimeToDie()
  224. }
  225.  
  226. # Damage in thousands
  227. AddFunction CurrentRipDamageTillDeath asvalue=1
  228. {
  229. if target.DebuffPresent(rip_debuff) and target.TimeToDie() < 7200 target.DebuffPersistentMultiplier(rip_debuff) * { 1 + MeleeCritChance() } * { 1 + MasteryEffect() * 0.01 } * AttackPower() * 0.0008 * CappedTargetTimeToDie() / TickTime(rip_debuff)
  230. 0
  231. }
  232.  
  233. # Damage in thousands
  234. AddFunction NewRipDamageTillDeath asvalue=1
  235. {
  236. PersistentMultiplier(rip_debuff) * { 1 + MeleeCritChance() * 0.01 } * { 1 + MasteryEffect() * 0.01} * AttackPower() * 0.0008 * 5.32 / TickTime(rip_debuff)
  237. }
  238.  
  239. # Damage in thousands
  240. AddFunction FerociousBiteDamage asvalue=1
  241. {
  242. PersistentMultiplier(ferocious_bite) * { 1 + MeleeCritChance() * 0.013 } * AttackPower() * 0.00749 * DamageAfterArmor()
  243. }
  244.  
  245. AddFunction TigersFuryConditions
  246. {
  247. { BuffExpires(clearcasting_buff) and EnergyDeficit() >= 60 or EnergyDeficit() >= 80 or HasTrinket(t18_class_trinket) and BuffPresent(berserk_cat_buff) and BuffExpires(tigers_fury_buff) } and Spell(tigers_fury)
  248. }
  249.  
  250. AddFunction ElunesGuidancePrediction
  251. {
  252. if Talent(elunes_guidance_talent) and SpellCooldown(elunes_guidance less 1) and ComboPoints(equal 0) and Energy() >= EnergyCost(ferocious_bite) + 25
  253. {
  254. #regrowth
  255. if Talent(bloodtalons_talent) and BuffPresent(predatory_swiftness_buff) Spell(regrowth)
  256. #ferocious_bite,cycle_targets=1,if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die-dot.rip.remains>action.rip.tick_time&(target.health.pct<25|talent.sabertooth.enabled)
  257. if target.DebuffPresent(rip_debuff) and target.DebuffRemaining(rip_debuff less 3) and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) and { target.HealthPercent(atMost 25) or Talent(sabertooth_talent) } Texture(ability_druid_ferociousbite)
  258. #savage_roar,if=buff.savage_roar.remains<gcd
  259. if BuffRemaining(savage_roar_buff less 1) Texture(ability_druid_skinteeth)
  260. #rip,cycle_targets=1,if=(!ticking|(remains<8&target.health.pct>25&!talent.sabertooth.enabled)|persistent_multiplier>dot.rip.pmultiplier)&target.time_to_die-remains>tick_time*4
  261. if { target.DebuffExpires(rip_debuff) or target.DebuffRemaining(rip_debuff less 8) and target.HealthPercent(more 25) and Talent(sabertooth_talent no) or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) } and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4 Texture(ability_ghoulfrenzy)
  262. #savage_roar,if=buff.savage_roar.remains<=7.2
  263. if BuffRemaining(savage_roar_buff atMost 7.2) Texture(ability_druid_skinteeth)
  264. #ferocious_bite,max_energy=1,cycle_targets=1
  265. if Energy() >= EnergyCost(ferocious_bite) + 25 Texture(ability_druid_ferociousbite)
  266. }
  267. }
  268.  
  269. ### actions.default
  270.  
  271. AddFunction FeralDefaultMainActions
  272. {
  273. #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|set_bonus.tier18_4pc|buff.clearcasting.react|talent.soul_of_the_forest.enabled|!dot.rip.ticking|(dot.rake.remains<1.5&spell_targets.swipe_cat<6))
  274. #cat_form
  275. Spell(cat_form)
  276. #rake,if=buff.prowl.up|buff.shadowmeld.up
  277. if BuffPresent(prowl_buff)
  278. or BuffPresent(shadowmeld_buff) Spell(rake)
  279. #call_action_list,name=zerker
  280. FeralBerserkActions()
  281. #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)
  282. if target.DebuffPresent(rip_debuff)
  283. and target.DebuffRemaining(rip_debuff) < 3
  284. and target.TimeToDie() > 3
  285. and { target.HealthPercent() < 25 or Talent(sabertooth_talent) } Spell(ferocious_bite)
  286. #regrowth,if=talent.bloodtalons.enabled&buff.predatory_swiftness.up&(combo_points>=5|buff.predatory_swiftness.remains<1.5|(talent.bloodtalons.enabled&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))))
  287. if Talent(bloodtalons_talent)
  288. and BuffPresent(predatory_swiftness_buff)
  289. and BuffStacks(bloodtalons_buff) < 2
  290. and { ComboPoints() >= 5 and { BuffExpires(bloodtalons_buff) or not HasEquippedItem(ailuro_pouncers slot=FeetSlot) }
  291. or BuffRemaining(predatory_swiftness_buff) < 1.5
  292. or Talent(bloodtalons_talent) and ComboPoints() == 2 and BuffExpires(bloodtalons_buff) and SpellCooldown(ashamanes_frenzy) < GCD() and { BuffRemaining(savage_roar_buff) > GCD() or not Talent(savage_roar_talent) } and target.TimeToDie(more 21) and CheckBoxOn(opt_ashamanes_frenzy_main_action)
  293. or Talent(elunes_guidance_talent) and { SpellCooldown(elunes_guidance) < GCD() and ComboPoints() == 0 or BuffPresent(elunes_guidance_buff) and ComboPoints() >= 4 } } Spell(regrowth)
  294. #regrowth,if=equipped.ailuro_pouncers&talent.bloodtalons.enabled&buff.predatory_swiftness.stack>1&buff.bloodtalons.down
  295. if HasEquippedItem(ailuro_pouncers slot=FeetSlot)
  296. and Talent(bloodtalons_talent)
  297. and BuffStacks(predatory_swiftness_buff) > 1 and BuffExpires(bloodtalons_buff) Spell(regrowth)
  298. #call_action_list,name=finisher
  299. FeralFinisherMainActions()
  300. #call_action_list,name=generator
  301. FeralGeneratorMainActions()
  302. }
  303.  
  304.  
  305. AddFunction finisher_conditions
  306. {
  307. ComboPoints() == 5
  308. and { TimeToMaxEnergy() < 1
  309. or BuffPresent(berserk_cat_buff)
  310. or BuffPresent(incarnation_king_of_the_jungle_buff)
  311. or BuffPresent(elunes_guidance_buff)
  312. or SpellCooldown(tigers_fury) < 3
  313. or ArmorSetBonus(T18 4)
  314. or BuffPresent(clearcasting_buff)
  315. or Talent(soul_of_the_forest_talent)
  316. or not target.DebuffPresent(rip_debuff)
  317. or target.DebuffRemaining(rake_debuff) < 1.5 and Enemies() < 6 }
  318. }
  319.  
  320. ### actions.zerker
  321. AddFunction FeralBerserkActions
  322. {
  323. # If berserk or incarnation and the checkbox for shred spam is active: refresh rip and rake inside pandemic, spam shred despite combo points, try to get them BT buffed.
  324. if { BuffPresent(berserk_cat_buff) or BuffPresent(incarnation_king_of_the_jungle_buff) } and CheckBoxOn(opt_shred_spam)
  325. {
  326. # Regrowth before Biting
  327. if target.DebuffPresent(rip_debuff)
  328. and target.DebuffRemaining(rip_debuff) < 3
  329. and target.TimeToDie() > 3
  330. and { target.HealthPercent() < 25 or Talent(sabertooth_talent) }
  331. and { Talent(bloodtalons_talent)
  332. and BuffPresent(predatory_swiftness_buff)
  333. and BuffStacks(bloodtalons_buff) < 1 } Spell(regrowth)
  334. #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)
  335. if target.DebuffPresent(rip_debuff)
  336. and target.DebuffRemaining(rip_debuff) < 3
  337. and target.TimeToDie() > 3
  338. and { target.HealthPercent() < 25 or Talent(sabertooth_talent) } Spell(ferocious_bite)
  339. #savage_roar,if=(buff.savage_roar.remains<=7.2|(buff.savage_roar.remains<SavageRoarTimer&talent.jagged_wounds.enabled&target.health.pct>=25))&variable.finisher_conditions
  340. if { BuffRemaining(savage_roar_buff) <= 7.2
  341. or BuffRemaining(savage_roar_buff) < SavageRoarTimer() and Talent(jagged_wounds_talent) and target.HealthPercent() >= 25 }
  342. and finisher_conditions() Spell(savage_roar)
  343. # Regrowth one second before ripping
  344. if { not target.DebuffPresent(rip_debuff)
  345. or target.DebuffRemaining(rip_debuff) < RipTimer() + 1 and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  346. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  347. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  348. and finisher_conditions()
  349. and { Talent(bloodtalons_talent)
  350. and BuffPresent(predatory_swiftness_buff)
  351. and BuffStacks(bloodtalons_buff) < 1 } Spell(regrowth)
  352. #rip,cycle_targets=1,if=(!ticking|(remains<RipTimer()&target.health.pct>25&!talent.sabertooth.enabled)|persistent_multiplier>dot.rip.pmultiplier)&target.time_to_die-remains>tick_time*4&variable.finisher_conditions
  353. if { not target.DebuffPresent(rip_debuff)
  354. or target.DebuffRemaining(rip_debuff) < RipTimer() and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  355. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  356. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  357. and finisher_conditions() Spell(rip)
  358. # Regrowth, one second before raking
  359. if { not target.DebuffPresent(rake_debuff)
  360. or target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3 + 1 }
  361. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff)
  362. and { Talent(bloodtalons_talent)
  363. and BuffPresent(predatory_swiftness_buff)
  364. and BuffStacks(bloodtalons_buff) < 1 } Spell(regrowth)
  365. #rake,cycle_targets=1,if=combo_points<5&(!ticking|(!talent.bloodtalons.enabled&remains<duration*0.3)|(talent.bloodtalons.enabled&buff.bloodtalons.up&(!talent.soul_of_the_forest.enabled&remains<=RakeTimer()|remains<=SotfRakeTimer())&persistent_multiplier>dot.rake.pmultiplier*0.80))&target.time_to_die-remains>tick_time
  366. if { not target.DebuffPresent(rake_debuff)
  367. or target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3
  368. and PersistentMultiplier(rake_debuff) > target.DebuffPersistentMultiplier(rake_debuff) * 0.8 }
  369. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff) Spell(rake pool_resource=1)
  370. Spell(shred)
  371. }
  372. }
  373.  
  374. ### actions.finisher
  375.  
  376. AddFunction FeralFinisherMainActions
  377. {
  378. #pool_resource,for_next=1
  379. #savage_roar,if=!buff.savage_roar.up&(combo_points=5|time<8|(talent.brutal_slash.enabled&spell_targets.brutal_slash>desired_targets&action.brutal_slash.charges>0))
  380. if not BuffPresent(savage_roar_buff)
  381. and { ComboPoints() == 5
  382. or TimeInCombat() < 8
  383. or Enemies() >= 8 and BuffRemaining(savage_roar_buff) < 7.2
  384. or Talent(brutal_slash_talent)
  385. and Enemies() >= BrutalSlashDesiredTargets()
  386. and Charges(brutal_slash) > 0
  387. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_burtal_slash_use_with_tigers_fury) } } Spell(savage_roar pool_resource=1)
  388. #pool_resource,for_next=1
  389. #thrash_cat,cycle_targets=1,if=remains<=duration*0.3&spell_targets.thrash_cat>=5
  390. if target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3 and Enemies() >= 5 Spell(thrash_cat pool_resource=1)
  391. #pool_resource,for_next=1
  392. #swipe_cat,if=spell_targets.swipe_cat>=8
  393. if Enemies() >= 8 Spell(swipe_cat pool_resource=1)
  394. #rip,cycle_targets=1,if=(!ticking|(remains<RipTimer()&target.health.pct>25&!talent.sabertooth.enabled)|persistent_multiplier>dot.rip.pmultiplier)&target.time_to_die-remains>tick_time*4&variable.finisher_conditions
  395. if { not target.DebuffPresent(rip_debuff)
  396. or target.DebuffRemaining(rip_debuff) < RipTimer() and target.HealthPercent() > 25 and not Talent(sabertooth_talent)
  397. or TFMultPred() * PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) }
  398. and target.TimeToDie() - target.DebuffRemaining(rip_debuff) > target.TickTime(rip_debuff) * 4
  399. and finisher_conditions() Spell(rip)
  400. #savage_roar,if=(buff.savage_roar.remains<=7.2|(buff.savage_roar.remains<SavageRoarTimer&talent.jagged_wounds.enabled&target.health.pct>=25))&variable.finisher_conditions
  401. if { BuffRemaining(savage_roar_buff) <= 7.2
  402. or BuffRemaining(savage_roar_buff) < SavageRoarTimer() and Talent(jagged_wounds_talent) and target.HealthPercent() >= 25 }
  403. and finisher_conditions() Spell(savage_roar)
  404. #swipe_cat,if=combo_points=5&(spell_targets.swipe_cat>=6|(spell_targets.swipe_cat>=3&!talent.bloodtalons.enabled))&variable.finisher_conditions
  405. if ComboPoints() == 5
  406. and { Enemies() >= 6
  407. or Enemies() >= 3 and not Talent(bloodtalons_talent) }
  408. and finisher_conditions() Spell(swipe_cat)
  409. #ferocious_bite,max_energy=1,cycle_targets=1,if=variable.finisher_conditions
  410. if finisher_conditions() Spell(ferocious_bite extra_amount=25)
  411. }
  412.  
  413. ### actions.generator
  414.  
  415. AddFunction FeralGeneratorMainActions
  416. {
  417. #brutal_slash,if=spell_targets.brutal_slash>desired_targets&combo_points<5
  418. if { Charges(brutal_slash) == 3 and CheckBoxOn(opt_brutal_slash_use_at_three_always) } Spell(brutal_slash)
  419. if Enemies() >= BrutalSlashDesiredTargets()
  420. and ComboPoints() < 5
  421. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_burtal_slash_use_with_tigers_fury) } Spell(brutal_slash)
  422. #ashamanes_frenzy,if=combo_points<=2&buff.elunes_guidance.down&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(buff.savage_roar.up|!talent.savage_roar.enabled)
  423. if CheckBoxOn(opt_ashamanes_frenzy_main_action)
  424. and ComboPoints() <= 2
  425. and BuffExpires(elunes_guidance_buff)
  426. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_tf_for_ashamanes) }
  427. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  428. and { BuffPresent(savage_roar_buff) or not Talent(savage_roar_talent) }
  429. and target.TimeToDie(more 20) Spell(ashamanes_frenzy)
  430. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  431. unless Talent(elunes_guidance_talent) and ComboPoints() == 0 and Energy() < PowerCost(ferocious_bite) + 25 - EnergyRegenRate() * SpellCooldown(elunes_guidance)
  432. {
  433. #pool_resource,for_next=1
  434. #thrash_cat,if=talent.brutal_slash.enabled&spell_targets.thrash_cat>=9
  435. if Talent(brutal_slash_talent) and Enemies() >= 9 Spell(thrash_cat pool_resource=1)
  436. #pool_resource,for_next=1
  437. #swipe_cat,if=spell_targets.swipe_cat>=6
  438. if Enemies() >= 6 Spell(swipe_cat pool_resource=1)
  439. #shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
  440. if CheckBoxOn(opt_shadowmeld_main_action)
  441. and ComboPoints() < 5
  442. and Energy() >= PowerCost(rake)
  443. and target.DebuffPersistentMultiplier(rake_debuff) < 2.1
  444. and BuffPresent(tigers_fury_buff)
  445. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  446. and { not Talent(incarnation_talent) or SpellCooldown(incarnation_king_of_the_jungle) > 18 }
  447. and not BuffPresent(incarnation_king_of_the_jungle_buff)
  448. and target.TimeToDie() > BaseDuration(rake_debuff) + 5
  449. and target.InRange(rake) Spell(shadowmeld)
  450. #pool_resource,for_next=1
  451. #thrash_cat,cycle_targets=1,if=remains<=duration*0.3&ComboPoints()<5&spell_targets.swipe_cat>=3|(hasT194Pc&Luffas&OocProc)
  452. if target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3 and ComboPoints() < 5
  453. and Enemies() >= 3 Spell(thrash_cat pool_resource=1)
  454. #pool_resource,for_next=1
  455. #rake,cycle_targets=1,if=combo_points<5&(!ticking|(!talent.bloodtalons.enabled&remains<duration*0.3)|(talent.bloodtalons.enabled&buff.bloodtalons.up&(!talent.soul_of_the_forest.enabled&remains<=RakeTimer()|remains<=SotfRakeTimer())&persistent_multiplier>dot.rake.pmultiplier*0.80))&target.time_to_die-remains>tick_time
  456. if ComboPoints() < 5
  457. and { not target.DebuffPresent(rake_debuff)
  458. or not Talent(bloodtalons_talent) and target.DebuffRemaining(rake_debuff) < BaseDuration(rake_debuff) * 0.3
  459. or Talent(bloodtalons_talent) and BuffPresent(bloodtalons_buff) and { not Talent(soul_of_the_forest_talent) and target.DebuffRemaining(rake_debuff) <= RakeTimer()
  460. or target.DebuffRemaining(rake_debuff) <= SotfRakeTimer() }
  461. and PersistentMultiplier(rake_debuff) > target.DebuffPersistentMultiplier(rake_debuff) * 0.8 }
  462. and target.TimeToDie() - target.DebuffRemaining(rake_debuff) > target.TickTime(rake_debuff) Spell(rake pool_resource=1)
  463. #moonfire_cat,cycle_targets=1,if=combo_points<5&(remains<=4.2|(combo_points>2&remains<=MoonfireTimer))&target.time_to_die-remains>tick_time*2
  464. if ComboPoints() < 5 and { target.DebuffRemaining(moonfire_cat_debuff) <= 4.2 or ComboPoints() > 2 and target.DebuffRemaining(moonfire_cat_debuff) <= MoonfireTimer() } and target.TimeToDie() - target.DebuffRemaining(moonfire_cat_debuff) > target.TickTime(moonfire_cat_debuff) * 2 Spell(moonfire_cat)
  465. #pool_resource,for_next=1
  466. #thrash_cat,cycle_targets=1,if=remains<=duration*0.3&spell_targets.swipe_cat>=2
  467. if target.DebuffRemaining(thrash_cat_debuff) <= BaseDuration(thrash_cat_debuff) * 0.3 and ComboPoints() < 5
  468. and { Enemies() >= 2
  469. or { CheckBoxOn(opt_thrash_on_st) and ArmorSetBonus(T19 4) and HasEquippedItem(luffa_wrappings slot=WristSlot) and BuffPresent(clearcasting_buff) } } Spell(thrash_cat pool_resource=1)
  470. #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))
  471. # if ComboPoints() < 5 and { False(raid_event_adds_exists) and 600 > { 1 + SpellMaxCharges(brutal_slash) - Charges(brutal_slash count=0) } * 15 or not False(raid_event_adds_exists) and BuffPresent(tigers_fury_buff) } Spell(brutal_slash)
  472. #swipe_cat,if=combo_points<5&spell_targets.swipe_cat>=3
  473. if ComboPoints() < 5
  474. and Enemies() >= 3 Spell(swipe_cat)
  475. #shred,if=combo_points<5&(spell_targets.swipe_cat<3|talent.brutal_slash.enabled)&(energy.time_to_max<1|(dot.rake.remains>(action.shred.cost+action.rake.cost-energy)%energy.regen)|buff.clearcasting.react|buff.berserk.up|buff.incarnation.up|cooldown.tigers_fury.remains<3|talent.soul_of_the_forest.enabled)
  476. if ComboPoints() < 5
  477. and { Enemies() < 3 or Talent(brutal_slash_talent) }
  478. and { TimeToMaxEnergy() < 1
  479. or target.DebuffRemaining(rake_debuff) > { PowerCost(shred) + PowerCost(rake) - Energy() } / EnergyRegenRate() or BuffPresent(clearcasting_buff) or BuffPresent(berserk_cat_buff) or BuffPresent(incarnation_king_of_the_jungle_buff) or SpellCooldown(tigers_fury) < 3 or Talent(soul_of_the_forest_talent) } Spell(shred)
  480. }
  481. }
  482.  
  483.  
  484. ### actions.precombat
  485.  
  486. AddFunction FeralPrecombatMainActions
  487. {
  488. #flask,type=flask_of_the_seventh_demon
  489. #food,type=the_hungry_magister
  490. #regrowth,if=talent.bloodtalons.enabled
  491. if Talent(bloodtalons_talent) and BuffRemaining(bloodtalons_buff) < 15 and BuffExpires(prowl_buff) Spell(regrowth)
  492. #prowl
  493. Spell(prowl)
  494. #cat_form
  495. Spell(cat_form)
  496. #savage_roar
  497. if BuffRemaining(savage_roar_buff) < 4 + 2 * ComboPoints() Spell(savage_roar)
  498. 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)
  499. }
  500.  
  501. AddFunction FeralPrecombatMainPostConditions
  502. {
  503. }
  504.  
  505.  
  506.  
  507. AddFunction FeralDefaultShortCdActions
  508. {
  509. #wild_charge
  510. #auto_attack
  511. FeralGetInMeleeRange()
  512. #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
  513. #tigers_fury,if=(!buff.clearcasting.react&energy.deficit>=60)|energy.deficit>=80|(t18_class_trinket&buff.berserk.up&buff.tigers_fury.down)
  514. if TigersFuryConditions() Spell(tigers_fury)
  515. #tigers_fury,if=talent.sabertooth.enabled&time<20&!dot.rip.ticking&combo_points=5
  516. if Talent(sabertooth_talent) and TimeInCombat() < 20 and not target.DebuffPresent(rip_debuff) and ComboPoints() == 5 Spell(tigers_fury)
  517.  
  518. #call_action_list,name=generator
  519. #ashamanes_frenzy,if=combo_points<=2&buff.elunes_guidance.down&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(buff.savage_roar.up|!talent.savage_roar.enabled)
  520. if CheckBoxOff(opt_ashamanes_frenzy_main_action)
  521. and ComboPoints() <= 2
  522. and BuffExpires(elunes_guidance_buff)
  523. and { BuffPresent(tigers_fury_buff) or CheckBoxOff(opt_tf_for_ashamanes) }
  524. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  525. and { BuffPresent(savage_roar_buff) or not Talent(savage_roar_talent) } Spell(ashamanes_frenzy)
  526. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  527. unless Talent(elunes_guidance_talent) and ComboPoints() == 0 and Energy() < PowerCost(ferocious_bite) + 25 - EnergyRegenRate() * SpellCooldown(elunes_guidance)
  528. {
  529. #elunes_guidance,if=talent.elunes_guidance.enabled&combo_points=0&energy>=action.ferocious_bite.cost+25
  530. if Talent(elunes_guidance_talent) and ComboPoints() == 0 and Energy() >= PowerCost(ferocious_bite) + 25 Spell(elunes_guidance)
  531. }
  532. }
  533.  
  534. AddFunction FeralPrecombatShortCdActions
  535. {
  536. unless Spell(cat_form) or Spell(prowl)
  537. {
  538. #elunes_guidance,if=talent.savage_roar.enabled
  539. if Talent(savage_roar_talent) Spell(elunes_guidance)
  540. }
  541. }
  542.  
  543. AddFunction FeralPrecombatShortCdPostConditions
  544. {
  545. Talent(bloodtalons_talent) and Spell(regrowth) or Spell(cat_form) or Spell(prowl) or Spell(savage_roar)
  546. }
  547.  
  548. AddFunction FeralDefaultCdActions
  549. {
  550. #skull_bash
  551. FeralInterruptActions()
  552. #berserk,if=buff.tigers_fury.up
  553. #incarnation,if=buff.tigers_fury.up
  554. if TigersFuryConditions()
  555. or BuffPresent(tigers_fury_buff)
  556. {
  557. Spell(berserk_cat)
  558. Spell(incarnation_king_of_the_jungle)
  559. }
  560. #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
  561. if BuffPresent(tigers_fury_buff)
  562. and { target.TimeToDie() > BuffCooldownDuration(trinket_stat_any_buff) or target.TimeToDie() < 45 }
  563. or BuffRemaining(incarnation_king_of_the_jungle_buff) > 20
  564. or CheckBoxOn(opt_trinket_on_cd) FeralUseItemActions()
  565. #call_action_list,name=generator
  566. unless Enemies() > Enemies(tagged=1) and ComboPoints() < 5 and Spell(brutal_slash) or ComboPoints() <= 2 and BuffExpires(elunes_guidance_buff) and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) } and { BuffPresent(savage_roar_buff) or not Talent(savage_roar_talent) } and Spell(ashamanes_frenzy)
  567. {
  568. #pool_resource,if=talent.elunes_guidance.enabled&combo_points=0&energy<action.ferocious_bite.cost+25-energy.regen*cooldown.elunes_guidance.remains
  569. unless Talent(elunes_guidance_talent) and ComboPoints() == 0 and Energy() < PowerCost(ferocious_bite) + 25 - EnergyRegenRate() * SpellCooldown(elunes_guidance)
  570. {
  571. unless Talent(elunes_guidance_talent) and ComboPoints() == 0 and Energy() >= PowerCost(ferocious_bite) + 25 and Spell(elunes_guidance)
  572. {
  573. #pool_resource,for_next=1
  574. #thrash_cat,if=talent.brutal_slash.enabled&spell_targets.thrash_cat>=9
  575. unless Talent(brutal_slash_talent) and Enemies() >= 9 and SpellUsable(thrash_cat) and SpellCooldown(thrash_cat) < TimeToEnergyFor(thrash_cat)
  576. {
  577. #pool_resource,for_next=1
  578. #swipe_cat,if=spell_targets.swipe_cat>=6
  579. unless Enemies() >= 6 and SpellUsable(swipe_cat) and SpellCooldown(swipe_cat) < TimeToEnergyFor(swipe_cat)
  580. {
  581. #shadowmeld,if=combo_points<5&energy>=action.rake.cost&dot.rake.pmultiplier<2.1&buff.tigers_fury.up&(buff.bloodtalons.up|!talent.bloodtalons.enabled)&(!talent.incarnation.enabled|cooldown.incarnation.remains>18)&!buff.incarnation.up
  582. if CheckBoxOff(opt_shadowmeld_main_action)
  583. and ComboPoints() < 5
  584. and Energy() >= PowerCost(rake)
  585. and target.DebuffPersistentMultiplier(rake_debuff) < 2.1
  586. and BuffPresent(tigers_fury_buff)
  587. and { BuffPresent(bloodtalons_buff) or not Talent(bloodtalons_talent) }
  588. and { not Talent(incarnation_talent) or SpellCooldown(incarnation_king_of_the_jungle) > 18 }
  589. and not BuffPresent(incarnation_king_of_the_jungle_buff)
  590. and target.InRange(rake) Spell(shadowmeld)
  591. }
  592. }
  593. }
  594. }
  595. }
  596. }
  597.  
  598. AddFunction FeralPrecombatCdActions
  599. {
  600. }
  601.  
  602. AddFunction FeralPrecombatCdPostConditions
  603. {
  604. Spell(augmentation) or Talent(bloodtalons_talent) and Spell(regrowth) or Spell(cat_form)
  605. }
  606.  
  607. ### Feral icons.
  608.  
  609. AddCheckBox(opt_druid_feral_aoe L(AOE) default specialization=feral)
  610.  
  611. AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=shortcd specialization=feral
  612. {
  613. if not InCombat() FeralPrecombatShortCdActions()
  614. unless not InCombat() and FeralPrecombatShortCdPostConditions()
  615. {
  616. FeralDefaultShortCdActions()
  617. }
  618. }
  619.  
  620. AddIcon checkbox=opt_druid_feral_aoe help=shortcd specialization=feral
  621. {
  622. if not InCombat() FeralPrecombatShortCdActions()
  623. unless not InCombat() and FeralPrecombatShortCdPostConditions()
  624. {
  625. FeralDefaultShortCdActions()
  626. }
  627. }
  628.  
  629. AddIcon enemies=1 help=main specialization=feral
  630. {
  631. if not InCombat() FeralPrecombatMainActions()
  632. unless not InCombat() and FeralPrecombatMainPostConditions()
  633. {
  634. FeralDefaultMainActions()
  635. }
  636. }
  637.  
  638. AddIcon checkbox=opt_druid_feral_aoe help=aoe specialization=feral
  639. {
  640. if not InCombat() FeralPrecombatMainActions()
  641. unless not InCombat() and FeralPrecombatMainPostConditions()
  642. {
  643. FeralDefaultMainActions()
  644. }
  645. }
  646.  
  647. AddIcon checkbox=!opt_druid_feral_aoe enemies=1 help=cd specialization=feral
  648. {
  649. if not InCombat() FeralPrecombatCdActions()
  650. unless not InCombat() and FeralPrecombatCdPostConditions()
  651. {
  652. FeralDefaultCdActions()
  653. }
  654. }
  655.  
  656. AddIcon checkbox=opt_druid_feral_aoe help=cd specialization=feral
  657. {
  658. if not InCombat() FeralPrecombatCdActions()
  659. unless not InCombat() and FeralPrecombatCdPostConditions()
  660. {
  661. FeralDefaultCdActions()
  662. }
  663. }
  664.  
  665. ### Required symbols
  666. # luffa_wrappings
  667. # ailuro_pouncers
  668. # ashamanes_frenzy
  669. # augmentation
  670. # berserk_cat
  671. # berserk_cat_buff
  672. # bloodtalons_buff
  673. # bloodtalons_talent
  674. # brutal_slash
  675. # brutal_slash_talent
  676. # cat_form
  677. # cat_form_buff
  678. # clearcasting_buff
  679. # dash
  680. # displacer_beast
  681. # displacer_beast_buff
  682. # elunes_guidance
  683. # elunes_guidance_buff
  684. # elunes_guidance_talent
  685. # ferocious_bite
  686. # regrowth
  687. # incarnation_king_of_the_jungle
  688. # incarnation_king_of_the_jungle_buff
  689. # incarnation_talent
  690. # jagged_wounds_talent
  691. # maim
  692. # mangle
  693. # mighty_bash
  694. # moonfire_cat
  695. # moonfire_cat_debuff
  696. # predatory_swiftness_buff
  697. # prowl
  698. # prowl_buff
  699. # rake
  700. # rake_debuff
  701. # regrowth
  702. # rip
  703. # rip_debuff
  704. # sabertooth_talent
  705. # savage_roar
  706. # savage_roar_buff
  707. # savage_roar_talent
  708. # shadowmeld
  709. # shadowmeld_buff
  710. # shred
  711. # skull_bash
  712. # soul_of_the_forest_talent
  713. # swipe_cat
  714. # t18_class_trinket
  715. # thrash_cat
  716. # thrash_cat_debuff
  717. # tigers_fury
  718. # tigers_fury_buff
  719. # typhoon
  720. # war_stomp
  721. # wild_charge
  722. # wild_charge_bear
  723. # wild_charge_cat
  724.  
  725.  
  726. # Based on SimulationCraft profile "Druid_Guardian_T19P".
  727. # class=druid
  728. # spec=guardian
  729. # talents=3133323
  730.  
  731. AddCheckBox(opt_interrupt L(interrupt) default specialization=guardian)
  732. AddCheckBox(opt_melee_range L(not_in_melee_range) specialization=guardian)
  733. AddCheckBox(opt_suggest_maul "Suggest Maul instead of IronFur" specialization=guardian)
  734.  
  735. AddFunction GuardianUseItemActions
  736. {
  737. Item(Trinket0Slot usable=1)
  738. Item(Trinket1Slot usable=1)
  739. }
  740.  
  741. AddFunction GuardianGetInMeleeRange
  742. {
  743. 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)
  744. {
  745. if target.InRange(wild_charge) Spell(wild_charge)
  746. Texture(misc_arrowlup help=L(not_in_melee_range))
  747. }
  748. }
  749.  
  750. AddFunction GuardianInterruptActions
  751. {
  752. if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
  753. {
  754. if target.InRange(skull_bash) Spell(skull_bash)
  755. if not target.Classification(worldboss)
  756. {
  757. if target.InRange(mighty_bash) Spell(mighty_bash)
  758. Spell(typhoon)
  759. if target.InRange(maim) Spell(maim)
  760. Spell(war_stomp)
  761. }
  762. }
  763. }
  764.  
  765. ### actions.default
  766.  
  767. AddFunction GuardianDefaultMainActions
  768. {
  769. #pulverize,cycle_targets=1,if=buff.pulverize.down
  770. if BuffExpires(pulverize_buff) and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  771. #thrash_bear,if=dot.thrash_bear.remains<4.5
  772. if target.DebuffRemaining(thrash_bear_debuff) < 4.5 Spell(thrash_bear)
  773. #mangle
  774. Spell(mangle)
  775. #pulverize,cycle_targets=1,if=buff.pulverize.remains<gcd
  776. if BuffRemaining(pulverize_buff) < GCD() and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  777. #thrash_bear
  778. Spell(thrash_bear)
  779. #pulverize,cycle_targets=1,if=buff.pulverize.remains<3.6
  780. if BuffRemaining(pulverize_buff) < 3.6 and target.DebuffGain(thrash_bear_debuff) <= BaseDuration(thrash_bear_debuff) Spell(pulverize)
  781. #moonfire,if=!ticking|buff.galactic_guardian.up
  782. if not target.DebuffPresent(moonfire_debuff) or BuffPresent(galactic_guardian_buff) Spell(moonfire)
  783. #swipe_bear
  784. Spell(swipe_bear)
  785. }
  786.  
  787. AddFunction GuardianDefaultShortCdActions
  788. {
  789. #auto_attack
  790. GuardianGetInMeleeRange()
  791. #ironfur,if=buff.ironfur.down|rage.deficit<25
  792. if target.IsAggroed()
  793. and { BuffExpires(ironfur_buff) or RageDeficit() < 25 }
  794. and CheckBoxOff(opt_suggest_maul) Spell(ironfur)
  795. #maul
  796. if not target.IsAggroed()
  797. and RageDeficit() < 25
  798. or CheckBoxOn(opt_suggest_maul) Spell(maul)
  799. #frenzied_regeneration,if=!ticking&incoming_damage_6s%health.max>0.25+(2-charges_fractional)*0.15
  800. if not BuffPresent(frenzied_regeneration_buff) and IncomingDamage(5) / MaxHealth() > 0.25 + { 2 - Charges(frenzied_regeneration count=0) } * 0.15 Spell(frenzied_regeneration)
  801. #bristling_fur,if=buff.ironfur.remains<2&rage<40
  802. if BuffRemaining(ironfur_buff) < 2 and Rage() < 40 Spell(bristling_fur)
  803. }
  804.  
  805. AddFunction GuardianDefaultCdActions
  806. {
  807. #skull_bash
  808. GuardianInterruptActions()
  809. #blood_fury
  810. Spell(blood_fury_apsp)
  811. #berserking
  812. Spell(berserking)
  813. #arcane_torrent
  814. Spell(arcane_torrent_energy)
  815. #use_item,slot=trinket2
  816. GuardianUseItemActions()
  817.  
  818. unless { BuffExpires(ironfur_buff) or RageDeficit() < 25 } and Spell(ironfur) or not BuffPresent(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)
  819. {
  820. #incarnation
  821. Spell(incarnation_son_of_ursoc)
  822. }
  823. }
  824.  
  825. ### actions.precombat
  826.  
  827. AddFunction GuardianPrecombatMainActions
  828. {
  829. #flask,type=flask_of_the_seventh_demon
  830. #food,type=azshari_salad
  831. #bear_form
  832. Spell(bear_form)
  833. }
  834.  
  835. AddFunction GuardianPrecombatShortCdPostConditions
  836. {
  837. Spell(bear_form)
  838. }
  839.  
  840. AddFunction GuardianPrecombatCdPostConditions
  841. {
  842. Spell(bear_form)
  843. }
  844.  
  845. ### Guardian icons.
  846.  
  847. AddCheckBox(opt_druid_guardian_aoe L(AOE) default specialization=guardian)
  848.  
  849. AddIcon checkbox=!opt_druid_guardian_aoe enemies=1 help=shortcd specialization=guardian
  850. {
  851. unless not InCombat() and GuardianPrecombatShortCdPostConditions()
  852. {
  853. GuardianDefaultShortCdActions()
  854. }
  855. }
  856.  
  857. AddIcon checkbox=opt_druid_guardian_aoe help=shortcd specialization=guardian
  858. {
  859. unless not InCombat() and GuardianPrecombatShortCdPostConditions()
  860. {
  861. GuardianDefaultShortCdActions()
  862. }
  863. }
  864.  
  865. AddIcon enemies=1 help=main specialization=guardian
  866. {
  867. if not InCombat() GuardianPrecombatMainActions()
  868. GuardianDefaultMainActions()
  869. }
  870.  
  871. AddIcon checkbox=opt_druid_guardian_aoe help=aoe specialization=guardian
  872. {
  873. if not InCombat() GuardianPrecombatMainActions()
  874. GuardianDefaultMainActions()
  875. }
  876.  
  877. AddIcon checkbox=!opt_druid_guardian_aoe enemies=1 help=cd specialization=guardian
  878. {
  879. unless not InCombat() and GuardianPrecombatCdPostConditions()
  880. {
  881. GuardianDefaultCdActions()
  882. }
  883. }
  884.  
  885. AddIcon checkbox=opt_druid_guardian_aoe help=cd specialization=guardian
  886. {
  887. unless not InCombat() and GuardianPrecombatCdPostConditions()
  888. {
  889. GuardianDefaultCdActions()
  890. }
  891. }
  892.  
  893. ### Required symbols
  894. # arcane_torrent_energy
  895. # bear_form
  896. # berserking
  897. # blood_fury_apsp
  898. # bristling_fur
  899. # frenzied_regeneration
  900. # frenzied_regeneration_buff
  901. # galactic_guardian_buff
  902. # incarnation_son_of_ursoc
  903. # ironfur
  904. # ironfur_buff
  905. # thrash_bear_debuff
  906. # maim
  907. # mangle
  908. # mighty_bash
  909. # moonfire
  910. # moonfire_debuff
  911. # pulverize
  912. # pulverize_buff
  913. # shred
  914. # skull_bash
  915. # swipe_bear
  916. # thrash_bear
  917. # thrash_bear_debuff
  918. # typhoon
  919. # war_stomp
  920. # wild_charge
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement