aggixx

Untitled

Aug 29th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 54.48 KB | None | 0 0
  1. # ShmooDude's modified Leafkiller's Feral/Guardian druid script.
  2. # Support/Discussion thread: http://fluiddruid.net/forum/viewtopic.php?f=3&t=857
  3. # 8/29/13 version 5.4.x.x
  4. # Defined buffs and ItemLists for new SoO trinkets
  5. # Removed old FoN code, added FoN usage logic to "extraCD" box
  6. # Changed BAD_JUJU and SOUL_CHARM to 10 second durations
  7. # Updated DoC damage modifier to 1.30
  8. # Added DoC as a damage buff to some damage-dealing abilities
  9. # 8/02/13 version 5.3.8.5
  10. # Added TimeToEnergy to end of rip refreshes and added back waiting on TF when the CD is close
  11. # Will allow Rake to expire if the new rake will be significantly weaker than the current Rake
  12. # Increased required duration of Rip/Savage Roar needed to apply Thrash
  13. # 7/25/13 version 5.3.8.4
  14. # Fixed Faerie Swarm asking for Faerie Fire's cooldown data
  15. # Applied same fix to Savage Roar
  16. # 7/23/13 version 5.3.8.3
  17. # Fixed Rake ratios
  18. # Fixed double tanking icons
  19. # 7/23/13 version 5.3.8.2
  20. # Changed Rake logic back to strict damage and ratio based.
  21. # Fixed Non-doc predictive box
  22. # 7/20/13 version 5.3.8.1
  23. # Switched from berserk testing to the new built in EnergyCost(ability) function for determining the energy for abilities.
  24. # Switched from (EnergyCost - CurrentEnergy) / EnergyRegen to the new built in function TimeToEnergyFor(ability).
  25. # Slight code reorganization to make it easier to browse.
  26. # More things in functions for better efficiency.
  27. # Allowed the user to customize the safety margin around expiring buffs via a list item.
  28. # Removed the "Use Healing CDs for damage" checkbox as its not currently used.
  29. # Rake will now compare with ravage instead of mangle if incarnation is up (modified by the difference in energy cost).
  30. # Added bug catching code for target based rip damage.
  31. # Added a "Debug Mode" checkbox for testing the target.Debuff data vs the LastSpell data.
  32. # 7/19/13 Version 5.3.7.3
  33.  
  34.  
  35. ############################
  36. ## Define Spells, Buffs, Items, Talents ##
  37. ############################
  38.  
  39. # Shared spells
  40. Define(BARKSKIN 22812)
  41. SpellInfo(BARKSKIN cd=60)
  42. Define(FERAL_SPIRIT 110807)
  43. SpellInfo(FERAL_SPIRIT cd=120)
  44. Define(HEALING_TOUCH 5185)
  45. Define(MARK_OF_THE_WILD 1126)
  46. SpellInfo(MARK_OF_THE_WILD duration=3600)
  47. SpellAddBuff(MARK_OF_THE_WILD MARK_OF_THE_WILD=1)
  48. Define(SYMBIOSIS 110309)
  49. SpellAddBuff(SYMBIOSIS SYMBIOSIS=1)
  50. Define(WRATH 5176)
  51.  
  52. # Shared buffs
  53. Define(DREAM_OF_CENARIUS 145152)
  54. SpellInfo(DREAM_OF_CENARIUS duration=30)
  55. Define(NATURES_VIGIL 124974)
  56. SpellInfo(NATURES_VIGIL cd=180)
  57. SpellAddBuff(NATURES_VIGIL NATURES_VIGIL=1)
  58. Define(PREDATORY_SWIFTNESS 69369)
  59. SpellAddBuff(PREDATORY_SWIFTNESS PREDATORY_SWIFTNESS=1)
  60. Define(PRIMAL_FURY 16961)
  61. Define(TRICKS 57933)
  62. SpellAddBuff(TRICKS TRICKS=1)
  63. Define(WEAKENED_ARMOR 113746)
  64. SpellInfo(WEAKENED_ARMOR duration=30)
  65. Define(WEAKENED_BLOWS 115798)
  66. SpellInfo(WEAKENED_BLOWS duration=30)
  67. Define(CLEARCASTING 135700)
  68.  
  69. # Trinket and Weapon Enchant buffs
  70. Define(ROR_CRIT 139117)
  71. SpellInfo(ROR_CRIT duration=10)
  72. Define(ROR_MASTERY 139120)
  73. SpellInfo(ROR_MASTERY duration=10)
  74. Define(ROR_HASTE 139121)
  75. SpellInfo(ROR_HASTE duration=10)
  76. SpellList(ROR ROR_CRIT ROR_MASTERY ROR_HASTE)
  77. Define(DANCING_STEEL 120032)
  78. SpellInfo(DANCING_STEEL duration=12)
  79. Define(SOUL_CHARM 138756)
  80. SpellInfo(SOUL_CHARM duration=10)
  81. Define(BLADES 138737)
  82. Define(BAD_JUJU 138939)
  83. SpellInfo(BAD_JUJU duration=10)
  84. Define(VICIOUS_TALISMAN 138700)
  85. SpellInfo(VICIOUS_TALISMAN duration=20)
  86. Define(ASSURANCE_OF_CONSEQUENCE 146309)
  87. SpellInfo(ASSURANCE_OF_CONSEQUENCE duration=20)
  88. Define(HAROMMS_TALISMAN 148904)
  89. SpellInfo(HAROMMS_TALISMAN duration=10)
  90. Define(SIGIL_OF_RAMPAGE 148895)
  91. SpellInfo(SIGIL_OF_RAMPAGE duration=15)
  92. Define(TICKING_EBON_DETONATOR 146311)
  93. SpellInfo(TICKING_EBON_DETONATOR duration=10)
  94.  
  95. # Shared items
  96. ItemList(ROR_ITEM 94532 95802 96174 96546 96918)
  97. ItemList(SOUL_CHARM_ITEM 96741 96369 95997 94512 95625)
  98. ItemList(BAD_JUJU_ITEM 96781 96409 96037 94523 95665)
  99. ItemList(VICIOUS_TALISMAN_ITEM 94511)
  100. ItemList(ASSURANCE_OF_CONSEQUENCE_ITEM 104974 104725 102292 105223 104476 105472)
  101. ItemList(HAROMMS_TALISMAN_ITEM 105029 104780 102301 105278 104531 105527)
  102. ItemList(SIGIL_OF_RAMPAGE_ITEM 105082 104833 102302 105331 104584 105580)
  103. ItemList(TICKING_EBON_DETONATOR_ITEM 105114 104865 102311 105363 104616 105612)
  104.  
  105. # Talents
  106. Define(NATURES_SWIFTNESS_TALENT 4)
  107. Define(RENEWAL_TALENT 5)
  108. Define(CENARION_WARD_TALENT 6)
  109. Define(FAERIE_SWARM_TALENT 7)
  110. Define(TYPHOON_TALENT 9)
  111. Define(SOUL_OF_THE_FOREST 10)
  112. Define(INCARNATION_TALENT 11)
  113. Define(FORCE_OF_NATURE_TALENT 12)
  114. Define(MIGHTY_BASH_TALENT 15)
  115. Define(HEART_OF_THE_WILD_TALENT 16)
  116. Define(DREAM_OF_CENARIUS_TALENT 17)
  117. Define(NATURES_VIGIL_TALENT 18)
  118.  
  119. # Talent spells
  120. Define(CENARION_WARD 102351)
  121. SpellInfo(CENARION_WARD cd=30)
  122. Define(FORCE_OF_NATURE 106737)
  123. SpellInfo(FORCE_OF_NATURE duration=15 cd=60)
  124. Define(HEART_OF_THE_WILD 108292)
  125. SpellInfo(HEART_OF_THE_WILD cd=360)
  126. SpellAddBuff(HEART_OF_THE_WILD HEART_OF_THE_WILD=1)
  127. Define(INCARNATION 106731)
  128. SpellInfo(INCARNATION cd=180)
  129. Define(MIGHTY_BASH 5211)
  130. SpellInfo(MIGHTY_BASH cd=50)
  131. Define(NATURES_SWIFTNESS 132158)
  132. SpellInfo(NATURES_SWIFTNESS cd=60)
  133. SpellAddBuff(NATURES_SWIFTNESS NATURES_SWIFTNESS=1)
  134. Define(RENEWAL 108238)
  135. SpellInfo(RENEWAL cd=120)
  136. Define(TYPHOON 132469)
  137. SpellInfo(TYPHOON cd=20)
  138. Define(WILD_CHARGE 102401)
  139. SpellInfo(WILD_CHARGE cd=15)
  140.  
  141. #Glyphs
  142. Define(GLYPH_OF_SHRED 114234)
  143. Define(GLYPH_OF_SAVAGERY 127540)
  144.  
  145. # Shared spells
  146. Define(FAERIE_FERAL 770)
  147. SpellInfo(FAERIE_FERAL duration=300 cd=6)
  148. SpellAddTargetDebuff(FAERIE_FERAL FAERIE_FERAL=1 WEAKENED_ARMOR=1)
  149. Define(FAERIE_SWARM 102355)
  150. SpellInfo(FAERIE_SWARM duration=300 cd=6)
  151. SpellAddTargetDebuff(FAERIE_SWARM FAERIE_SWARM=1 WEAKENED_ARMOR=1)
  152.  
  153. # Cat spells
  154. Define(BERSERK_CAT 106951) #cat cd buff
  155. SpellInfo(BERSERK_CAT duration=15 cd=180)
  156. SpellAddBuff(BERSERK_CAT BERSERK_CAT=1)
  157. Define(CAT_FORM 768)
  158. SpellAddBuff(CAT_FORM CAT_FORM=1)
  159. Define(FEROCIOUS_BITE 22568) #cat finish 25-50 energy
  160. SpellInfo(FEROCIOUS_BITE energy=25 combo=0)
  161. SpellDamageBuff(FEROCIOUS_BITE DREAM_OF_CENARIUS=1.30)
  162. Define(INCARNATION_CAT 102543)
  163. SpellInfo(INCARNATION_CAT duration=30 cd=180)
  164. Define(MAIM 22570) #cat interrupt
  165. SpellInfo(MAIM cd=10 energy=35 combo=0)
  166. SpellDamageBuff(MAIM DREAM_OF_CENARIUS=1.30)
  167. Define(MANGLE_CAT 33876) #cat bleed+debuff
  168. SpellInfo(MANGLE_CAT inccounter=ripshreds energy=35 combo=1)
  169. SpellInfo(MANGLE_CAT critcombo=1 if_spell=PRIMAL_FURY)
  170. SpellDamageBuff(MANGLE_CAT DREAM_OF_CENARIUS=1.30)
  171. Define(RAKE 1822) #cat bleed
  172. SpellInfo(RAKE combo=1 duration=15 energy=35 tick=3)
  173. SpellInfo(RAKE critcombo=1 if_spell=PRIMAL_FURY)
  174. SpellAddTargetDebuff(RAKE RAKE=1)
  175. SpellDamageBuff(RAKE DREAM_OF_CENARIUS=1.30)
  176. Define(RAVAGE 6785)
  177. SpellInfo(RAVAGE inccounter=ripshreds energy=45 combo=1)
  178. SpellInfo(RAVAGE critcombo=1 if_spell=PRIMAL_FURY)
  179. SpellDamageBuff(RAVAGE DREAM_OF_CENARIUS=1.30)
  180. Define(RAVAGE_BANG 102545)
  181. SpellInfo(RAVAGE_BANG inccounter=ripshreds energy=0 combo=1)
  182. SpellInfo(RAVAGE_BANG critcombo=1 if_spell=PRIMAL_FURY)
  183. SpellDamageBuff(RAVAGE_BANG DREAM_OF_CENARIUS=1.30)
  184. Define(RIP 1079) #cat bleed
  185. SpellInfo(RIP resetcounter=ripshreds duration=16 energy=30 tick=2 combo=0)
  186. SpellAddTargetDebuff(RIP RIP=1)
  187. SpellDamageBuff(RIP DREAM_OF_CENARIUS=1.40)
  188. Define(SAVAGE_ROAR_OLD 52610)
  189. SpellInfo(SAVAGE_ROAR_OLD duration=18 combo=0 energy=25)
  190. SpellAddBuff(SAVAGE_ROAR_OLD SAVAGE_ROAR_OLD=1)
  191. Define(SAVAGE_ROAR_GLYPHED 127538)
  192. SpellInfo(SAVAGE_ROAR_GLYPHED duration=12 combo=-5 energy=25)
  193. SpellAddBuff(SAVAGE_ROAR_GLYPHED SAVAGE_ROAR_GLYPHED=1)
  194. SpellList(SAVAGE_ROAR 52610 127538)
  195. Define(SHRED 5221) #cat behind
  196. SpellInfo(SHRED inccounter=ripshreds energy=40 combo=1)
  197. SpellInfo(SHRED critcombo=1 if_spell=PRIMAL_FURY)
  198. SpellDamageBuff(SHRED DREAM_OF_CENARIUS=1.30)
  199. Define(SHRED_BANG 114236)
  200. SpellInfo(SHRED_BANG inccounter=ripshreds energy=40 combo=1)
  201. SpellInfo(SHRED_BANG critcombo=1 if_spell=PRIMAL_FURY)
  202. SpellDamageBuff(SHRED_BANG DREAM_OF_CENARIUS=1.30)
  203. Define(STAMPEDE 81022)
  204. SpellAddBuff(STAMPEDE STAMPEDE=1)
  205. Define(SKULL_BASH_CAT 80965) #cat interrupt
  206. SpellInfo(SKULL_BASH_CAT cd=15 energy=15)
  207. Define(THRASH_CAT 106830)
  208. SpellInfo(THRASH_CAT duration=15 energy=50 tick=3)
  209. SpellAddTargetDebuff(THRASH_CAT THRASH_CAT=1 WEAKENED_BLOWS=1)
  210. SpellDamageBuff(THRASH_CAT DREAM_OF_CENARIUS=1.30)
  211. Define(TIGERS_FURY 5217) #cat buff
  212. SpellInfo(TIGERS_FURY duration=6 energy=-60 cd=30)
  213. SpellAddBuff(TIGERS_FURY TIGERS_FURY=1)
  214.  
  215. # Bear spells
  216. Define(BEAR_FORM 5487)
  217. SpellAddBuff(BEAR_FORM BEAR_FORM=1)
  218. Define(BERSERK_BEAR 106952) #cat+bear cd buff
  219. SpellInfo(BERSERK_BEAR duration=10 cd=180 )
  220. SpellAddBuff(BERSERK_BEAR BERSERK_BEAR=1)
  221. Define(ENRAGE 5229)
  222. Define(FRENZIED_REGEN 22842)
  223. Define(INCARNATION_BEAR 102558)
  224. SpellInfo(INCARNATION_BEAR duration=30 cd=180 )
  225. Define(LACERATE 33745)
  226. Define(MANGLE_BEAR 33878)
  227. SpellInfo(MANGLE_BEAR cd=3 buffnocd=INCARNATION_BEAR buffnocd=BERSERK_BEAR)
  228. Define(MAUL 6807)
  229. Define(MIGHT_OF_URSOC 106922)
  230. Define(SAVAGE_DEFENSE 62606)
  231. Define(SURVIVAL_INSTINCTS 61336)
  232. Define(SWIPE_BEAR 779)
  233. Define(THRASH_BEAR 77758)
  234. Define(TOOTH_AND_CLAW 135286)
  235. SpellAddBuff(TOOTH_AND_CLAW TOOTH_AND_CLAW=1)
  236. Define(TOOTH_AND_CLAW_DEBUFF 135601)
  237. SpellAddTargetDebuff(TOOTH_AND_CLAW_DEBUFF TOOTH_AND_CLAW_DEBUFF=1)
  238.  
  239. ###############
  240. ## Define Settings ##
  241. ###############
  242.  
  243. AddCheckBox(cooldownsL "Show Left Rotation Boxes" default)
  244. AddCheckBox(cooldownsR "Show Right Cooldown Boxes" default)
  245. AddCheckBox(altpredictive "Alternate predictive box")
  246. AddCheckBox(bearaoe "Bear AOE Rotation")
  247. AddCheckBox(cooldownsRatio "Show Rake and Rip Ratio Boxes" mastery=2)
  248. AddCheckBox(lucioles SpellName(FAERIE_FERAL) default mastery=2)
  249. AddCheckBox(berserk "Cat Berserk" default mastery=2)
  250. AddCheckBox(infront "Frontal attack" mastery=2)
  251. AddCheckBox(predictive "Hide predictive box" mastery=2)
  252. AddCheckBox(zdebugmode "Debug Mode" mastery=2)
  253. # AddCheckBox(nvbounce "Use healing CDs for damage" mastery=2) # Currently unused
  254. AddListItem(expbuffsafetymargin point0 "0.0 seconds")
  255. AddListItem(expbuffsafetymargin point1 "0.1 seconds")
  256. AddListItem(expbuffsafetymargin point2 "0.2 seconds")
  257. AddListItem(expbuffsafetymargin point3 "0.3 seconds" default)
  258. AddListItem(expbuffsafetymargin point4 "0.4 seconds")
  259. AddListItem(expbuffsafetymargin point5 "0.5 seconds")
  260.  
  261. ################
  262. # Static Variables
  263. ################
  264. AddFunction HeartOfTheWildAgiModifier { 1.06 }
  265. AddFunction LeatherSpecAgiModifier { 1.05 }
  266. AddFunction StatsBuffBonus { 0.05 }
  267. AddFunction RakeBaseDamage { 99 }
  268. AddFunction RakeDamagePerAttackPower { 0.3 }
  269. AddFunction RipBaseDamage { 113 }
  270. AddFunction RipDamagePerComboPoint { 320 }
  271. AddFunction RipDamagePerComboPointAttackPower { 0.0484 }
  272. AddFunction ThrashBaseDamage { 4662 }
  273. AddFunction ThrashDamagePerAttackPower { 1.121 }
  274. AddFunction FerociousBiteBaseDamage { 500 }
  275. AddFunction FerociousBiteDamagePerComboPoint { 762 }
  276. AddFunction FerociousBiteDamagePerComboPointAttackPower { 0.196 }
  277. AddFunction FerociousBiteCritChanceBonus { 25 }
  278. AddFunction MangleCatBaseDamage { 78 }
  279. AddFunction MangleCatWeaponDamageMultiplier { 5 }
  280. AddFunction RavageBaseDamage { 78 }
  281. AddFunction RavageWeaponDamageMultiplier { 9.5 }
  282. AddFunction RavageCritChanceBonus { 50 }
  283. AddFunction CritPerAttackPower { 2519.04 }
  284. AddFunction ExpiringBuffSafetyMargin
  285. {
  286. if List(expbuffsafetymargin point0) 0.0
  287. if List(expbuffsafetymargin point1) 0.1
  288. if List(expbuffsafetymargin point2) 0.2
  289. if List(expbuffsafetymargin point3) 0.3
  290. if List(expbuffsafetymargin point4) 0.4
  291. if List(expbuffsafetymargin point5) 0.5
  292. 0.3
  293. }
  294.  
  295. ################
  296. # Trinket/Proc values
  297. ################
  298. AddFunction TigersFuryMultiplier { 1.15 }
  299. AddFunction RuneMultiplier { 2 } # Not the actual amount like the rest, but given the power of the rune buff the script should still function properly
  300. AddFunction DancingSteelAttackPower { 3300 }
  301. AddFunction SoulCharmAttackPower
  302. {
  303. if HasTrinket(96741) 3430 # Heroic TF 2/2 upgrade
  304. if HasTrinket(96369) 3244 # Heroic 2/2 upgrade
  305. if HasTrinket(95997) 3038 # Normal TF 2/2 upgrade
  306. if HasTrinket(94512) 2874 # Normal 2/2 upgrade
  307. if HasTrinket(95625) 2384 # LFR 2/2 upgrade
  308. }
  309. AddFunction BadJujuAttackPower
  310. {
  311. if HasTrinket(96781) 18864 # Heroic TF 2/2 upgrade
  312. if HasTrinket(96409) 17840 # Heroic 2/2 upgrade
  313. if HasTrinket(96037) 16712 # Normal TF 2/2 upgrade
  314. if HasTrinket(94523) 15806 # Normal 2/2 upgrade
  315. if HasTrinket(95665) 13118 # LFR 2/2 upgrade
  316. }
  317. AddFunction ViciousTalismanAttackPower
  318. {
  319. 17600 # 2/2 upgrade
  320. }
  321.  
  322. ################
  323. # Energy related functions
  324. ################
  325. AddFunction EnergyForThrash { EnergyCost(THRASH_CAT) }
  326. AddFunction EnergyForRake { EnergyCost(RAKE) }
  327. AddFunction EnergyForRip { EnergyCost(RIP) }
  328. AddFunction EnergyForMangle { EnergyCost(MANGLE_CAT) }
  329. AddFunction EnergyForShred { EnergyCost(SHRED) }
  330. AddFunction EnergyForRavage { EnergyCost(RAVAGE) }
  331. AddFunction EnergyForFerociousBite { EnergyCost(FEROCIOUS_BITE)*2 }
  332. AddFunction HasEnergyForRake { Energy() >= EnergyForRake() }
  333. AddFunction HasEnergyForRip { Energy() >= EnergyForRip() }
  334. AddFunction HasEnergyForFerociousBite { Energy() >= EnergyForFerociousBite() }
  335. AddFunction HasEnergyForThrash { Energy() >= EnergyForThrash() }
  336.  
  337. ################
  338. # Combo Point related functions
  339. ################
  340. AddFunction MaxComboPoints { ComboPoints() >= 5 }
  341. AddFunction HasAnyComboPoints { ComboPoints() > 0 }
  342. AddFunction NoComboPoints { ComboPoints() == 0 }
  343.  
  344. ################
  345. # Armor Functions
  346. ################
  347. AddFunction ArmorReduction
  348. {
  349. if target.DebuffPresent(WEAKENED_ARMOR any=1)
  350. {
  351. if target.Level(less 1) 0.679
  352. 0.698
  353. }
  354. if target.Level(less 1) 0.651
  355. 0.671
  356. }
  357.  
  358. ################
  359. # Time till energy for abilities functions (must come before Rune functions)
  360. # Moved energy check from functions to main code to fix predictive algorithm bug within ovale
  361. # Always use an energy check when utilizing these functions or you will have a disappearing icon problem
  362. # Example:
  363. # if HasEnergyForRake() and target.DebuffRemains(RAKE) < 3
  364. # or not HasEnergyForRake() and target.DebuffRemains(RAKE) < 3 + TimeTilEnergyForRake()
  365. ################
  366. AddFunction TigersFuryCooldown { if SpellCooldown(TIGERS_FURY) >= 0 SpellCooldown(TIGERS_FURY) 0 }
  367. AddFunction TimeTilEnergyForThrash
  368. {
  369. if TimeToEnergyFor(THRASH_CAT) < TigersFuryCooldown()
  370. TimeToEnergyFor(THRASH_CAT)
  371. TigersFuryCooldown()
  372. }
  373. AddFunction TimeTilEnergyForRake
  374. {
  375. if TimeToEnergyFor(RAKE) < TigersFuryCooldown()
  376. TimeToEnergyFor(RAKE)
  377. TigersFuryCooldown()
  378. }
  379. AddFunction TimeTilEnergyForRip
  380. {
  381. if TimeToEnergyFor(RIP) < TigersFuryCooldown()
  382. TimeToEnergyFor(RIP)
  383. TigersFuryCooldown()
  384. }
  385.  
  386. ################
  387. # Buff Calculation assistnace functions
  388. ################
  389. AddFunction AttackPowerToCrit { 1/CritPerAttackPower()/{1+0.1*BuffStacks(attack_power_multiplier any=1)} }
  390. AddFunction PrimordiusStats { {1 + 0.05 * DebuffStacks(136184)} * {1 - 0.1 * DebuffStacks(136185)} } # Thick and Fragile bones
  391. AddFunction StatsMultiplier # Leatherwearer, Heart of the Wild, Mark of the Wild/Blessing of Kings, Primordius Buffs
  392. {
  393. if TalentPoints(HEART_OF_THE_WILD)
  394. LeatherSpecAgiModifier() * HeartOfTheWildAgiModifier() * {1 + StatsBuffBonus() * BuffStacks(str_agi_int any=1)} * PrimordiusStats()
  395. LeatherSpecAgiModifier() * {1 + StatsBuffBonus() * BuffStacks(str_agi_int any=1)} * PrimordiusStats()
  396. }
  397. AddFunction DancingSteelAttackPowerIncrease { DancingSteelAttackPower()*StatsMultiplier() }
  398. AddFunction SoulCharmAttackPowerIncrease { SoulCharmAttackPower()*BuffStacks(BLADES)*StatsMultiplier() }
  399. AddFunction BadJujuAttackPowerIncrease { BadJujuAttackPower()*StatsMultiplier() }
  400. AddFunction ViciousTalismanAttackPowerIncrease { ViciousTalismanAttackPower()*StatsMultiplier() }
  401.  
  402. ################
  403. # Rake Buff related functions; Checks to ensure you can use a Rake before a buff expires
  404. ################
  405. AddFunction RakeCooldownSafetyMargin { SpellCooldown(RAKE)+ExpiringBuffSafetyMargin() }
  406. AddFunction RakeEnergySafetyMargin { TimeTilEnergyForRake()+ExpiringBuffSafetyMargin() }
  407. AddFunction RuneRakeUsableBeforeExpire
  408. {
  409. if BuffRemains(ROR_MASTERY) > RakeCooldownSafetyMargin()
  410. {
  411. if HasEnergyForRake()
  412. BuffRemains(ROR_MASTERY) > ExpiringBuffSafetyMargin()
  413. BuffRemains(ROR_MASTERY) > RakeEnergySafetyMargin()
  414. }
  415. }
  416. AddFunction RuneExpiresRakeMultiplier
  417. {
  418. if BuffPresent(ROR_MASTERY)
  419. {
  420. if RuneRakeUsableBeforeExpire() 1
  421. RuneMultiplier()
  422. }
  423. 1
  424. }
  425. AddFunction TigersFuryRakeUsableBeforeExpire
  426. {
  427. if BuffRemains(TIGERS_FURY) > RakeCooldownSafetyMargin()
  428. {
  429. if HasEnergyForRake()
  430. BuffRemains(TIGERS_FURY) > ExpiringBuffSafetyMargin()
  431. BuffRemains(TIGERS_FURY) > RakeEnergySafetyMargin()
  432. }
  433. }
  434. AddFunction TigersFuryExpiresRakeMultiplier
  435. {
  436. if BuffPresent(TIGERS_FURY)
  437. {
  438. if TigersFuryRakeUsableBeforeExpire() 1
  439. TigersFuryMultiplier()
  440. }
  441. 1
  442. }
  443. AddFunction DancingSteelRakeUsableBeforeExpire
  444. {
  445. if BuffRemains(DANCING_STEEL any=1) > RakeCooldownSafetyMargin()
  446. {
  447. if HasEnergyForRake()
  448. BuffRemains(DANCING_STEEL any=1) > ExpiringBuffSafetyMargin()
  449. BuffRemains(DANCING_STEEL any=1) > RakeEnergySafetyMargin()
  450. }
  451. }
  452. AddFunction DancingSteelExpiresRakeAttackPower
  453. {
  454. if BuffPresent(DANCING_STEEL any=1)
  455. {
  456. if DancingSteelRakeUsableBeforeExpire() 0
  457. DancingSteelAttackPowerIncrease()
  458. }
  459. 0
  460. }
  461. AddFunction SoulCharmRakeUsableBeforeExpire
  462. {
  463. if BuffRemains(SOUL_CHARM any=1) > RakeCooldownSafetyMargin()
  464. {
  465. if HasEnergyForRake()
  466. BuffRemains(SOUL_CHARM any=1) > ExpiringBuffSafetyMargin()
  467. BuffRemains(SOUL_CHARM any=1) > RakeEnergySafetyMargin()
  468. }
  469. }
  470. AddFunction SoulCharmExpiresRakeAttackPower
  471. {
  472. if BuffPresent(SOUL_CHARM any=1)
  473. {
  474. if SoulCharmRakeUsableBeforeExpire() 0
  475. SoulCharmAttackPowerIncrease()
  476. }
  477. 0
  478. }
  479. AddFunction BadJujuRakeUsableBeforeExpire
  480. {
  481. if BuffRemains(BAD_JUJU any=1) > RakeCooldownSafetyMargin()
  482. {
  483. if HasEnergyForRake()
  484. BuffRemains(BAD_JUJU any=1) > ExpiringBuffSafetyMargin()
  485. BuffRemains(BAD_JUJU any=1) > RakeEnergySafetyMargin()
  486. }
  487. }
  488. AddFunction BadJujuExpiresRakeAttackPower
  489. {
  490. if BuffPresent(BAD_JUJU any=1)
  491. {
  492. if BadJujuRakeUsableBeforeExpire() 0
  493. BadJujuAttackPowerIncrease()
  494. }
  495. 0
  496. }
  497. AddFunction ViciousTalismanRakeUsableBeforeExpire
  498. {
  499. if BuffRemains(VICIOUS_TALISMAN any=1) > RakeCooldownSafetyMargin()
  500. {
  501. if HasEnergyForRake()
  502. BuffRemains(VICIOUS_TALISMAN any=1) > ExpiringBuffSafetyMargin()
  503. BuffRemains(VICIOUS_TALISMAN any=1) > RakeEnergySafetyMargin()
  504. }
  505. }
  506. AddFunction ViciousTalismanExpiresRakeAttackPower
  507. {
  508. if BuffPresent(VICIOUS_TALISMAN any=1)
  509. {
  510. if ViciousTalismanRakeUsableBeforeExpire() 0
  511. ViciousTalismanAttackPowerIncrease()
  512. }
  513. 0
  514. }
  515.  
  516. ################
  517. # Rip Buff related functions; Checks to ensure you can use a Rip before a buff expires
  518. ################
  519. AddFunction RipCooldownSafetyMargin { SpellCooldown(RIP)+ExpiringBuffSafetyMargin() }
  520. AddFunction RipEnergySafetyMargin { TimeTilEnergyForRip()+ExpiringBuffSafetyMargin() }
  521. AddFunction RuneRipUsableBeforeExpire
  522. {
  523. if BuffRemains(ROR_MASTERY) > RipCooldownSafetyMargin()
  524. {
  525. if HasEnergyForRip()
  526. BuffRemains(ROR_MASTERY) > ExpiringBuffSafetyMargin()
  527. BuffRemains(ROR_MASTERY) > RipEnergySafetyMargin()
  528. }
  529. }
  530. AddFunction RuneExpiresRipMultiplier
  531. {
  532. if BuffPresent(ROR_MASTERY)
  533. {
  534. if RuneRipUsableBeforeExpire() 1
  535. RuneMultiplier()
  536. }
  537. 1
  538. }
  539. AddFunction TigersFuryRipUsableBeforeExpire
  540. {
  541. if BuffRemains(TIGERS_FURY) > RipCooldownSafetyMargin()
  542. {
  543. if HasEnergyForRip()
  544. BuffRemains(TIGERS_FURY) > ExpiringBuffSafetyMargin()
  545. BuffPresent(TIGERS_FURY) and BuffRemains(TIGERS_FURY) > RipEnergySafetyMargin()
  546. }
  547. }
  548. AddFunction TigersFuryExpiresRipMultiplier
  549. {
  550. if BuffPresent(TIGERS_FURY)
  551. {
  552. if TigersFuryRipUsableBeforeExpire() 1
  553. TigersFuryMultiplier()
  554. }
  555. 1
  556. }
  557. AddFunction DancingSteelRipUsableBeforeExpire
  558. {
  559. if BuffRemains(DANCING_STEEL any=1) > RipCooldownSafetyMargin()
  560. {
  561. if HasEnergyForRip()
  562. BuffRemains(DANCING_STEEL any=1) > ExpiringBuffSafetyMargin()
  563. BuffRemains(DANCING_STEEL any=1) > RipEnergySafetyMargin()
  564. }
  565. }
  566. AddFunction DancingSteelExpiresRipAttackPower
  567. {
  568. if BuffPresent(DANCING_STEEL any=1)
  569. {
  570. if DancingSteelRipUsableBeforeExpire() 0
  571. DancingSteelAttackPowerIncrease()
  572. }
  573. 0
  574. }
  575. AddFunction SoulCharmRipUsableBeforeExpire
  576. {
  577. if BuffRemains(SOUL_CHARM any=1) > RipCooldownSafetyMargin()
  578. {
  579. if HasEnergyForRip()
  580. BuffRemains(SOUL_CHARM any=1) > ExpiringBuffSafetyMargin()
  581. BuffRemains(SOUL_CHARM any=1) > RipEnergySafetyMargin()
  582. }
  583. }
  584. AddFunction SoulCharmExpiresRipAttackPower
  585. {
  586. if BuffPresent(SOUL_CHARM any=1)
  587. {
  588. if SoulCharmRipUsableBeforeExpire() 0
  589. SoulCharmAttackPowerIncrease()
  590. }
  591. 0
  592. }
  593. AddFunction BadJujuRipUsableBeforeExpire
  594. {
  595. if BuffRemains(BAD_JUJU any=1) > RipCooldownSafetyMargin()
  596. {
  597. if HasEnergyForRip()
  598. BuffRemains(BAD_JUJU any=1) > ExpiringBuffSafetyMargin()
  599. BuffRemains(BAD_JUJU any=1) > RipEnergySafetyMargin()
  600. }
  601. }
  602. AddFunction BadJujuExpiresRipAttackPower
  603. {
  604. if BuffPresent(BAD_JUJU any=1)
  605. {
  606. if BadJujuRipUsableBeforeExpire() 0
  607. BadJujuAttackPowerIncrease()
  608. }
  609. 0
  610. }
  611. AddFunction ViciousTalismanRipUsableBeforeExpire
  612. {
  613. if BuffRemains(VICIOUS_TALISMAN any=1) > RipCooldownSafetyMargin()
  614. {
  615. if HasEnergyForRip()
  616. BuffRemains(VICIOUS_TALISMAN any=1) > ExpiringBuffSafetyMargin()
  617. BuffRemains(VICIOUS_TALISMAN any=1) > RipEnergySafetyMargin()
  618. }
  619. }
  620. AddFunction ViciousTalismanExpiresRipAttackPower
  621. {
  622. if BuffPresent(VICIOUS_TALISMAN any=1)
  623. {
  624. if ViciousTalismanRipUsableBeforeExpire() 0
  625. ViciousTalismanAttackPowerIncrease()
  626. }
  627. 0
  628.  
  629. }
  630.  
  631. ################
  632. # Rake Damage functions
  633. ################
  634. AddFunction RakeTickDamage # Switched to raw numbers in place of Damage(RAKE) for 5.3.4+ compatibility
  635. {
  636. {RakeBaseDamage() + AttackPower()*RakeDamagePerAttackPower()} * DamageMultiplier(RAKE) * {1+MeleeCritChance()/100} * {1+Mastery()/100}
  637. }
  638. AddFunction LastRakeTickDamage
  639. {
  640. {RakeBaseDamage() + target.DebuffAttackPower(RAKE)*RakeDamagePerAttackPower()} * target.DebuffDamageMultiplier(RAKE) * {1+target.DebuffMeleeCritChance(RAKE)/100} * {1+target.DebuffMastery(RAKE)/100}
  641. }
  642. AddFunction TotalRakeMultiplier
  643. {
  644. RuneExpiresRakeMultiplier()*TigersFuryExpiresRakeMultiplier()
  645. }
  646. AddFunction TotalRakeAttackPower
  647. {
  648. DancingSteelExpiresRakeAttackPower() + SoulCharmExpiresRakeAttackPower() + BadJujuExpiresRakeAttackPower() + ViciousTalismanExpiresRakeAttackPower()
  649. }
  650. AddFunction FutureRakeTickDamage
  651. {
  652. {RakeBaseDamage() + {AttackPower() - TotalRakeAttackPower()} * RakeDamagePerAttackPower()}
  653. * DamageMultiplier(RAKE) / TotalRakeMultiplier()
  654. * {1 + {MeleeCritChance() - TotalRakeAttackPower()*AttackPowerToCrit()} / 100}
  655. * {1 + Mastery() / 100}
  656. }
  657. AddFunction RakeRatio
  658. {
  659. if TargetDebuffPresent(RAKE) 100 * FutureRakeTickDamage()/LastRakeTickDamage()
  660. 100.0
  661. }
  662.  
  663. ################
  664. # Rip Damage functions
  665. ################
  666. AddFunction RipTickDamage
  667. {
  668. {RipBaseDamage() + {{RipDamagePerComboPoint() + {RipDamagePerComboPointAttackPower() * AttackPower()}} * ComboPoints()}} * DamageMultiplier(RIP) * {1+MeleeCritChance()/100} * {1 + Mastery()/100}
  669. }
  670. AddFunction LastRipTickDamage
  671. {
  672. if target.DebuffAttackPower(RIP) > 0 # catches ovale forgetting target.Debuff values
  673. {
  674. if target.DebuffComboPoints(RIP) > 1 # catches when DebuffComboPoints is fixed (broken as of 5.3.8)
  675. {RipBaseDamage() + {{RipDamagePerComboPoint() + {RipDamagePerComboPointAttackPower() * target.DebuffAttackPower(RIP)}} * target.DebuffComboPoints(RIP)}} * target.DebuffDamageMultiplier(RIP) * {1+target.DebuffMeleeCritChance(RIP)/100} * {1 + target.DebuffMastery(RIP)/100}
  676. {RipBaseDamage() + {{RipDamagePerComboPoint() + {RipDamagePerComboPointAttackPower() * target.DebuffAttackPower(RIP)}} * LastComboPoints(RIP)}} * target.DebuffDamageMultiplier(RIP) * {1+target.DebuffMeleeCritChance(RIP)/100} * {1 + target.DebuffMastery(RIP)/100}
  677. }
  678. {RipBaseDamage() + {{RipDamagePerComboPoint() + {RipDamagePerComboPointAttackPower() * LastAttackPower(RIP)}} * LastComboPoints(RIP)}} * LastDamageMultiplier(RIP) * {1+LastMeleeCritChance(RIP)/100} * {1 + LastMastery(RIP)/100}
  679. }
  680. AddFunction TotalRipMultiplier
  681. {
  682. RuneExpiresRipMultiplier()*TigersFuryExpiresRipMultiplier()
  683. }
  684. AddFunction TotalRipAttackPower
  685. {
  686. DancingSteelExpiresRipAttackPower() + SoulCharmExpiresRipAttackPower() + BadJujuExpiresRipAttackPower() + ViciousTalismanExpiresRipAttackPower()
  687. }
  688. AddFunction FutureRipTickDamage
  689. {
  690. {RipBaseDamage() + {{RipDamagePerComboPoint() + {RipDamagePerComboPointAttackPower() * {AttackPower() - TotalRipAttackPower()}}} * ComboPoints()}}
  691. * DamageMultiplier(RIP) / TotalRipMultiplier()
  692. * {1 + {MeleeCritChance() - TotalRipAttackPower()*AttackPowerToCrit() }/100}
  693. * {1 + Mastery()/100}
  694. }
  695. AddFunction RipDamageTillDead
  696. {
  697. # The damage from Rip that is cast under the current conditions and lasting till target is dead.
  698. # Multiply the damage per tick with the number of ticks that can fit into the time to die.
  699. FutureRipTickDamage() * {target.TimeToDie() / 2}
  700. }
  701. AddFunction ExistingRipDamageTillDead
  702. {
  703. # The damage from Rip that is already on the target and lasting till target is dead.
  704. if target.DebuffPresent(RIP)
  705. {
  706. # Multiply the damage per tick with the number of ticks that can fit into the time to die.
  707. LastRipTickDamage() * {target.TimeToDie() / 2}
  708. }
  709. 0
  710. }
  711. AddFunction RipRatio
  712. {
  713. if TargetDebuffPresent(RIP) 100 * FutureRipTickDamage()/LastRipTickDamage()
  714. 100.0
  715. }
  716.  
  717. ################
  718. # Ability damage functions
  719. ################
  720. AddFunction FerociousBiteCritChanceRaw { FerociousBiteCritChanceBonus()+MeleeCritChance() }
  721. AddFunction FerociousBiteCritChance { if FerociousBiteCritChanceRaw() > 100 100 FerociousBiteCritChanceRaw() }
  722. AddFunction FerociousBiteDamage # Switched to raw numbers in place of Damage(FEROCIOUS_BITE) for 5.3.4+ compatibility
  723. {
  724. {FerociousBiteBaseDamage() + {FerociousBiteDamagePerComboPoint() + FerociousBiteDamagePerComboPointAttackPower() * AttackPower()} * ComboPoints()} * DamageMultiplier(FEROCIOUS_BITE) * {1+FerociousBiteCritChance()/100} * 2 * ArmorReduction()
  725. }
  726. AddFunction MangleCatDamage
  727. {
  728. {{MangleCatBaseDamage() + WeaponDamage(MH)} * MangleCatWeaponDamageMultiplier()} * DamageMultiplier(MANGLE_CAT) * {1+MeleeCritChance()/100} * ArmorReduction()
  729. }
  730. #AddFunction ThrashCatDamage # Currently unused
  731. #{
  732. # {ThrashBaseDamage() + AttackPower()*ThrashDamagePerAttackPower()} * DamageMultiplier(THRASH_CAT) * {1+MeleeCritChance()/100} * {1+Mastery()/100}
  733. #}
  734. AddFunction ShredDamage
  735. {
  736. MangleCatDamage()*1.2
  737. }
  738. AddFunction RavageCritChanceRaw { RavageCritChanceBonus()+MeleeCritChance() }
  739. AddFunction RavageCritChance
  740. {
  741. if target.HealthPercent() >=80
  742. {
  743. if RavageCritChanceRaw() > 100 100
  744. RavageCritChanceRaw()
  745. }
  746. MeleeCritChance()
  747. }
  748. AddFunction RavageDamage
  749. {
  750. {{RavageBaseDamage() + WeaponDamage(MH)} * RavageWeaponDamageMultiplier()} * DamageMultiplier(RAVAGE) * {1+RavageCritChance()/100} * ArmorReduction()
  751. }
  752. AddFunction FillerActionDamagePerEnergyVsRake
  753. {
  754. if BuffPresent(INCARNATION_CAT)
  755. RavageDamage() * EnergyForRake() / EnergyForRavage()
  756. MangleCatDamage()
  757. }
  758.  
  759. ################
  760. # Misc functions
  761. ################
  762. AddFunction FaerieFire
  763. {
  764. if TalentPoints(FAERIE_SWARM_TALENT) Spell(FAERIE_SWARM)
  765. unless TalentPoints(FAERIE_SWARM_TALENT) Spell(FAERIE_FERAL)
  766. }
  767. AddFunction SavageRoar
  768. {
  769. if Glyph(GLYPH_OF_SAVAGERY) Spell(SAVAGE_ROAR_GLYPHED)
  770. if Glyph(GLYPH_OF_SAVAGERY no) and ComboPoints(more 0) Spell(SAVAGE_ROAR_OLD)
  771. }
  772. AddFunction UsePotion
  773. {
  774. #virmens_bite_potion
  775. if CheckBoxOn(potions) and target.Classification(worldboss) Item(virmens_bite_potion)
  776. }
  777. AddFunction TreantTimeThreshold
  778. {
  779. 1+{Charges(FORCE_OF_NATURE)-1}*0.33
  780. }
  781.  
  782. #############################
  783. ## Feral rotation functions (Mastery=2) ##
  784. #############################
  785.  
  786. AddFunction NotInCombat
  787. {
  788. unless InCombat() {
  789. if BuffExpires(str_agi_int 400 any=1) Spell(MARK_OF_THE_WILD)
  790. if BuffExpires(DREAM_OF_CENARIUS) and TalentPoints(DREAM_OF_CENARIUS_TALENT) Spell(HEALING_TOUCH)
  791. unless Stance(3) Spell(CAT_FORM)
  792. if Glyph(GLYPH_OF_SAVAGERY) and NoComboPoints() {
  793. if BuffRemains(SAVAGE_ROAR_GLYPHED) <15 and TimeToMaxEnergy() < BuffRemains(SAVAGE_ROAR_GLYPHED)-11.5
  794. or BuffRemains(SAVAGE_ROAR_GLYPHED) <9 and TimeToMaxEnergy() < BuffRemains(SAVAGE_ROAR_GLYPHED)-8.5
  795. or BuffRemains(SAVAGE_ROAR_GLYPHED) <6 and TimeToMaxEnergy() < BuffRemains(SAVAGE_ROAR_GLYPHED)-5.5
  796. or BuffRemains(SAVAGE_ROAR_GLYPHED) <3 and TimeToMaxEnergy() < BuffRemains(SAVAGE_ROAR_GLYPHED)-2.5
  797. or BuffExpires(SAVAGE_ROAR_GLYPHED) {
  798. SavageRoar()
  799. }
  800. }
  801. if TalentPoints(FORCE_OF_NATURE_TALENT) Spell(FORCE_OF_NATURE)
  802. }
  803. }
  804.  
  805. AddFunction SpareGcdCooldowns {
  806. # Spirit Wolves goes here when symbiosis is supported appropriately.
  807. }
  808.  
  809. AddFunction SavageRoarOrWeakenedArmorMissing
  810. {
  811. #savage_roar,if=buff.savage_roar.down
  812. if BuffExpires(SAVAGE_ROAR) SavageRoar()
  813.  
  814. #faerie_fire,if=debuff.weakened_armor.stack<3
  815. if target.DebuffStacks(WEAKENED_ARMOR any=1) <3 and CheckBoxOn(lucioles) FaerieFire()
  816. }
  817.  
  818. AddFunction RangeCheck
  819. {
  820. #range check
  821. unless target.InRange(MANGLE_CAT) Texture(ability_druid_catformattack)
  822. }
  823.  
  824. AddFunction IncarnationBerserkTigersFuryLogic
  825. {
  826. #incarnation,if=energy<=35&!buff.omen_of_clarity.react&cooldown.tigers_fury.remains=0&cooldown.berserk.remains=0
  827. #use_item,slot=hands,if=buff.tigers_fury.up
  828. #tigers_fury,if=(energy<=35&!buff.omen_of_clarity.react)|buff.king_of_the_jungle.up
  829. #berserk,if=buff.tigers_fury.up|(target.time_to_die<15&cooldown.tigers_fury.remains>6)
  830. if {{Energy() <=35 and BuffExpires(CLEARCASTING)} or BuffPresent(INCARNATION_CAT)} and Spell(TIGERS_FURY)
  831. {
  832. if CheckBoxOn(berserk) and Spell(BERSERK_CAT)
  833. {
  834. if TalentPoints(INCARNATION_TALENT) Spell(INCARNATION)
  835. if not TalentPoints(INCARNATION_TALENT) or BuffPresent(INCARNATION_CAT) Spell(BERSERK_CAT)
  836. }
  837. unless BuffPresent(BERSERK_CAT) Spell(TIGERS_FURY)
  838. }
  839. if CheckBoxOn(berserk) and TalentPoints(INCARNATION_TALENT) and BuffPresent(BERSERK_CAT) Spell(INCARNATION_CAT)
  840. }
  841.  
  842. AddFunction ExecuteRangeRipFerociousBiteLogic # Left one Doc line in here and added a talent check, normally tried to take them out but this one was annoyingly in a bad place so left here for simplicities sake
  843. {
  844. #ferocious_bite,if=combo_points>=1&dot.rip.ticking&dot.rip.remains<=3&target.health.pct<=25
  845. if target.HealthPercent() <=25 and HasAnyComboPoints()
  846. and target.DebuffPresent(RIP) and target.DebuffRemains(RIP) <=4 # is 4 instead of 3 because the remaining time on rip can be inaccurate upto 2 seconds
  847. {
  848. Spell(FEROCIOUS_BITE)
  849. }
  850.  
  851. #thrash_cat,if=target.time_to_die>=6&buff.omen_of_clarity.react&dot.thrash_cat.remains<3
  852. if target.TimeToDie() >=9 and BuffPresent(CLEARCASTING)
  853. and target.DebuffRemains(THRASH_CAT) <3
  854. {
  855. Spell(THRASH_CAT)
  856. }
  857.  
  858. #ferocious_bite,if=target.time_to_die<=1&combo_points>=3
  859. if target.TimeToDie() <=1 and ComboPoints() >=3 Spell(FEROCIOUS_BITE)
  860.  
  861. if target.HealthPercent() <=25
  862. {
  863. #savage_roar,if=buff.savage_roar.remains<=3&combo_points>0&target.health.pct<25
  864. if BuffRemains(SAVAGE_ROAR) <=3 and HasAnyComboPoints()
  865. {
  866. SavageRoar()
  867. }
  868.  
  869. if MaxComboPoints()
  870. {
  871. #natures_swiftness,if=buff.dream_of_cenarius_damage.down&buff.predatory_swiftness.down&combo_points>=5&target.health.pct<=25
  872. if TalentPoints(DREAM_OF_CENARIUS_TALENT) and TalentPoints(NATURES_SWIFTNESS_TALENT)
  873. and BuffExpires(DREAM_OF_CENARIUS) and BuffExpires(PREDATORY_SWIFTNESS)
  874. and BuffRemains(SAVAGE_ROAR) >5
  875. {
  876. Spell(NATURES_SWIFTNESS)
  877. }
  878.  
  879. #virmens_bite_potion,if=combo_points>=5&$(time_til_bitw)<15&$(rip_ratio)>=1.15&buff.dream_of_cenarius_damage.up
  880. # if not HasTrinket(ROR_ITEM) and MaxComboPoints() and BuffPresent(DREAM_OF_CENARIUS) and RipRatio() >=115 UsePotion()
  881.  
  882. #virmens_bite_potion,if=combo_points>=5&$(time_til_bitw)<15&buff.rune_of_reorigination.up&buff.dream_of_cenarius_damage.up
  883. # if HasTrinket(ROR_ITEM) and MaxComboPoints() and BuffPresent(DREAM_OF_CENARIUS) and BuffPresent(ROR_MASTERY) UsePotion()
  884.  
  885. #virmens_bite_potion,if=target.time_to_die<=40
  886. # if target.TimeToDie() <=40 UsePotion()
  887.  
  888. #rip,if=combo_points>=5&(tick_damage*(1+crit_pct_current)-tick_dmg*(1+crit_pct))*target.time_to_die%2>=action.ferocious_bite.hit_damage*(1+action.ferocious_bite.crit_pct_current)*2&target.health.pct<=25
  889. if RipDamageTillDead() > {ExistingRipDamageTillDead() + FerociousBiteDamage()}
  890. {
  891. Spell(RIP)
  892. }
  893.  
  894. #pool_resource,wait=0.25,if=combo_points>=5&dot.rip.ticking&target.health.pct<=25&((energy<50&buff.berserk.down)|(energy<25&buff.berserk.remains>1))
  895. #ferocious_bite,if=combo_points>=5&dot.rip.ticking&target.health.pct<=25
  896. if target.DebuffPresent(RIP)
  897. {
  898. if not HasEnergyForFerociousBite() SpareGcdCooldowns()
  899. wait if HasEnergyForFerociousBite() Spell(FEROCIOUS_BITE)
  900. }
  901. }
  902. }
  903. }
  904.  
  905. AddFunction DocRipLogic ##### If any changes are applicable to NonDoc logic, also make changes there!!!
  906. {
  907. if target.HealthPercent() >25 and MaxComboPoints() and RipRatio() >=92
  908. {
  909. #natures_swiftness,if=enabled&buff.dream_of_cenarius_damage.down&buff.predatory_swiftness.down&combo_points>=5&$(rip_ratio)>=0.92&target.health.pct>25
  910. if TalentPoints(NATURES_SWIFTNESS_TALENT) and BuffExpires(DREAM_OF_CENARIUS) and BuffExpires(PREDATORY_SWIFTNESS)
  911. {
  912. Spell(NATURES_SWIFTNESS)
  913. }
  914.  
  915. #rip,if=combo_points>=5&$(rip_ratio)>=1.15&target.health.pct>25
  916. if RipRatio() >= 115
  917. {
  918. Spell(RIP)
  919. }
  920. }
  921.  
  922. #natures_swiftness,if=talent.natures_swiftness.enabled&talent.dream_of_cenarius.enabled&buff.dream_of_cenarius.down&buff.predatory_swiftness.down&combo_points>=5&dot.rip.remains<3&(buff.berserk.up|dot.rip.remains+1.9<=cooldown.tigers_fury.remains)
  923. if TalentPoints(NATURES_SWIFTNESS_TALENT) and BuffExpires(DREAM_OF_CENARIUS)
  924. and BuffExpires(PREDATORY_SWIFTNESS)
  925. and {{HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <3 and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()}}}
  926. or {not HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <3+TimeToEnergyFor(RIP) and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()+TimeToEnergyFor(RIP)}}}}
  927. {
  928. Spell(NATURES_SWIFTNESS)
  929. }
  930.  
  931. #rip,if=combo_points>=5&dot.rip.remains<2&(buff.berserk.up|dot.rip.remains+1.9<=cooldown.tigers_fury.remains)
  932. if {HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <2 and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()}}}
  933. or {not HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <2+TimeToEnergyFor(RIP) and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()+TimeToEnergyFor(RIP)}}}
  934. {
  935. Spell(RIP)
  936. }
  937. } ##### If any changes are applicable to NonDoc logic, also make changes there!!!
  938.  
  939. AddFunction NonDocRipLogic ##### If any changes are applicable to Doc logic, also make changes there!!!
  940. {
  941. #rip,if=combo_points>=5&$(rip_ratio)>=1.15
  942. if target.HealthPercent() >25 and MaxComboPoints() and RipRatio() >= 115
  943. {
  944. Spell(RIP)
  945. }
  946.  
  947. #rip,if=combo_points>=5&dot.rip.remains<2&(buff.berserk.up|dot.rip.remains+1.9<=cooldown.tigers_fury.remains)
  948. if {HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <2 and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()}}}
  949. or {not HasEnergyForRip() and {MaxComboPoints() and target.DebuffRemains(RIP) <2+TimeTilEnergyForRip() and {BuffPresent(BERSERK_CAT) or {target.DebuffRemains(RIP)+1.9} <=TigersFuryCooldown()+TimeToEnergyFor(RIP)}}}
  950. {
  951. Spell(RIP)
  952. }
  953. } ##### If any changes are applicable to Doc logic, also make changes there!!!
  954.  
  955. AddFunction SavageRoarRefreshLogic
  956. {
  957. #savage_roar,if=buff.savage_roar.remains<=3&combo_points>0&buff.savage_roar.remains+2>dot.rip.remains
  958. #savage_roar,if=buff.savage_roar.remains<=6&combo_points>=5&buff.savage_roar.remains+2<=dot.rip.remains
  959. if {BuffRemains(SAVAGE_ROAR) <=3 and HasAnyComboPoints()} or {BuffRemains(SAVAGE_ROAR) <=6 and MaxComboPoints()}
  960. and {BuffRemains(SAVAGE_ROAR) +2 > target.DebuffRemains(RIP)}
  961. {
  962. SavageRoar()
  963. }
  964. }
  965.  
  966. AddFunction NonExcuteRangeFerociousBiteLogic
  967. {
  968. #actions.doc+=/pool_resource,wait=0.1,if=combo_points>=5&((energy<50&buff.berserk.down)|(energy<25&buff.berserk.remains>1))&dot.rip.ticking&!(dot.rip.remains-2<=energy.time_to_max-1)&!(buff.savage_roar.remains-3<=energy.time_to_max-1)
  969. #actions.doc+=/ferocious_bite,if=combo_points>=5&dot.rip.ticking&!(dot.rip.remains-2<=energy.time_to_max-1)&!(buff.savage_roar.remains-3<=energy.time_to_max-1)&!((buff.savage_roar.remains-6<=energy.time_to_max-1)&buff.savage_roar.remains+2<=$(rip_remains))
  970. if MaxComboPoints() and target.DebuffPresent(RIP) and BuffPresent(SAVAGE_ROAR)
  971. and not target.DebuffRemains(RIP)-2 <= TimeToMaxEnergy()-1
  972. and not BuffRemains(SAVAGE_ROAR)-3 <= TimeToMaxEnergy()-1
  973. and not {BuffRemains(SAVAGE_ROAR)-6 <= TimeToMaxEnergy()-1
  974. and BuffRemains(SAVAGE_ROAR)+2 <= target.DebuffRemains(RIP)}
  975. and target.DebuffRemains(RIP) >=5
  976. {
  977. if not HasEnergyForFerociousBite() SpareGcdCooldowns()
  978. wait if HasEnergyForFerociousBite() Spell(FEROCIOUS_BITE)
  979. }
  980. }
  981.  
  982. AddFunction RakeLogic
  983. {
  984. #rake,if=action.rake.tick_damage>action.mangle_cat.hit_damage&$(rake_ratio)>=0.99&buff.king_of_the_jungle.down
  985. #rake,if=action.rake.tick_damage*(1+action.rake.crit_pct_current)>action.ravage.hit_damage*(1+action.ravage.crit_pct_current)&$(rake_ratio)>=0.99&buff.king_of_the_jungle.up
  986. if FutureRakeTickDamage() >= FillerActionDamagePerEnergyVsRake() and RakeRatio() >= 99
  987. {
  988. Spell(RAKE)
  989. }
  990. if target.TimeToDie() - target.DebuffRemains(RAKE) >3
  991. {
  992. #rake,if=target.time_to_die-dot.rake.remains>3&buff.rune_of_reorigination.up&dot.rake.remains<9&(buff.rune_of_reorigination.remains<=1.5)
  993. if BuffPresent(ROR_MASTERY) and target.DebuffRemains(RAKE) <9
  994. and BuffRemains(ROR_MASTERY) <=1.5
  995. and RakeEnergySafetyMargin() < BuffRemains(ROR_MASTERY)
  996. {
  997. Spell(RAKE)
  998. }
  999.  
  1000. #rake,if=target.time_to_die-dot.rake.remains>3&($(rake_ratio)>1.12|dot.rake.remains<3&$(rake_ratio)>0.75)
  1001. if RakeRatio() > 75 and {{HasEnergyForRake() and target.DebuffRemains(RAKE) < 3}
  1002. or {not HasEnergyForRake() and target.DebuffRemains(RAKE) < 3 + TimeTilEnergyForRake() and BuffExpires(CLEARCASTING)}}
  1003. or RakeRatio() > 112
  1004. {
  1005. Spell(RAKE)
  1006. }
  1007.  
  1008. #rake if its about to fall off. Simcraft doesn't require this line but ovale does for the prediction box.
  1009. if {HasEnergyForRake() and target.DebuffRemains(RAKE) < 0.001}
  1010. or {not HasEnergyForRake() and target.DebuffRemains(RAKE) < 0.001 + TimeTilEnergyForRake() and BuffExpires(CLEARCASTING)}
  1011. {
  1012. Spell(RAKE)
  1013. }
  1014. }
  1015. }
  1016.  
  1017. AddFunction ThrashLogic
  1018. {
  1019. #pool_resource,wait=0.25,for_next=1
  1020. #thrash_cat,if=target.time_to_die>=6&dot.thrash_cat.remains<3&(dot.rip.remains>=8&buff.savage_roar.remains>=12|buff.berserk.up)&dot.rip.ticking
  1021. if {HasEnergyForThrash()
  1022. and target.DebuffRemains(THRASH_CAT) < 3
  1023. and target.TimeToDie() >=9
  1024. and {{target.DebuffRemains(RIP) >=8 and BuffRemains(SAVAGE_ROAR) >=12}
  1025. or BuffPresent(BERSERK_CAT)}}
  1026. or {not HasEnergyForThrash()
  1027. and target.DebuffRemains(THRASH_CAT) < 3 + TimeTilEnergyForThrash() and BuffExpires(CLEARCASTING)
  1028. and target.TimeToDie() - TimeTilEnergyForThrash() >=9
  1029. and {{target.DebuffRemains(RIP) - TimeTilEnergyForThrash() >=8 and BuffRemains(SAVAGE_ROAR) - TimeTilEnergyForThrash() >=12}
  1030. or BuffPresent(BERSERK_CAT)}}
  1031. {
  1032. if TimeTilEnergyForThrash() >=1.5 SpareGcdCooldowns()
  1033. Spell(THRASH_CAT)
  1034. }
  1035. }
  1036.  
  1037. AddFunction FillerActions
  1038. {
  1039. #thrash_cat,if=dot.thrash_cat.remains<3&target.time_to_die>=6&combo_points>=5
  1040. if target.DebuffRemains(THRASH_CAT) <3 and target.TimeToDie() >=9 and MaxComboPoints() Spell(THRASH_CAT)
  1041. if TalentPoints(INCARNATION_TALENT)
  1042. {
  1043. #ravage
  1044. if BuffPresent(INCARNATION_CAT) Spell(RAVAGE)
  1045. }
  1046. if not TalentPoints(INCARNATION_TALENT) or BuffExpires(INCARNATION_CAT)
  1047. {
  1048. #actions.filler+=/shred,if=(buff.omen_of_clarity.react|buff.berserk.up|energy.regen>=15)&buff.king_of_the_jungle.down
  1049. if BuffPresent(CLEARCASTING) or BuffPresent(BERSERK_CAT) or EnergyRegen() >=15
  1050. and {not CheckBoxOn(infront)
  1051. or {Glyph(GLYPH_OF_SHRED) and {BuffPresent(TIGERS_FURY) or BuffPresent(BERSERK_CAT)}}}
  1052. Spell(SHRED)
  1053. #actions.filler+=/mangle_cat,if=buff.king_of_the_jungle.down
  1054. Spell(MANGLE_CAT)
  1055. }
  1056. }
  1057.  
  1058. # Feral rotation for talent builds with "Dream of Cenarius".
  1059.  
  1060. AddFunction MainActionsDoC
  1061. {
  1062. #healing_touch,if=buff.predatory_swiftness.up&buff.predatory_swiftness.remains<=1.5&buff.dream_of_cenarius_damage.down
  1063. if BuffPresent(PREDATORY_SWIFTNESS) and BuffRemains(PREDATORY_SWIFTNESS) <=1.5 and BuffExpires(DREAM_OF_CENARIUS) Spell(HEALING_TOUCH)
  1064.  
  1065. SavageRoarOrWeakenedArmorMissing()
  1066.  
  1067. #healing_touch,if=buff.predatory_swiftness.up&combo_points>=4&buff.dream_of_cenarius_damage.down
  1068. if BuffPresent(PREDATORY_SWIFTNESS) and BuffExpires(DREAM_OF_CENARIUS) and ComboPoints() >=4 Spell(HEALING_TOUCH)
  1069.  
  1070. #healing_touch,if=buff.natures_swiftness.up
  1071. if BuffPresent(NATURES_SWIFTNESS) Spell(HEALING_TOUCH)
  1072.  
  1073. RangeCheck()
  1074.  
  1075. IncarnationBerserkTigersFuryLogic()
  1076.  
  1077. #Also includes Clearcasting Thrash and end of fight Ferocious Bite
  1078. ExecuteRangeRipFerociousBiteLogic()
  1079.  
  1080. DocRipLogic()
  1081.  
  1082. SavageRoarRefreshLogic()
  1083.  
  1084. NonExcuteRangeFerociousBiteLogic()
  1085.  
  1086. #rake,if=target.time_to_die-dot.rake.remains>3&dot.rake.remains<6.0&buff.dream_of_cenarius_damage.up&dot.rake.multiplier<=tick_multiplier
  1087. if target.TimeToDie() - target.DebuffRemains(RAKE) >3 and target.DebuffRemains(RAKE) <6 and BuffPresent(DREAM_OF_CENARIUS) and RakeRatio() >=100 Spell(RAKE)
  1088.  
  1089. RakeLogic()
  1090.  
  1091. ThrashLogic()
  1092.  
  1093. #run_action_list,name=filler,if=buff.predatory_swiftness.remains>1
  1094. if BuffRemains(PREDATORY_SWIFTNESS) >1 FillerActions()
  1095. }
  1096.  
  1097. # Feral rotation for talent builds without "Dream of Cenarius".
  1098.  
  1099. AddFunction FillerConditions
  1100. {
  1101. #run_action_list,name=filler,if=buff.omen_of_clarity.react
  1102. if BuffPresent(CLEARCASTING) FillerActions()
  1103. #run_action_list,name=filler,if=(combo_points<5&dot.rip.remains<3)|(combo_points=0&buff.savage_roar.remains<2)
  1104. if {not MaxComboPoints() and target.DebuffRemains(RIP) <3} or {NoComboPoints() and BuffRemains(SAVAGE_ROAR) <2} FillerActions()
  1105. #run_action_list,name=filler,if=target.time_to_die<=8.5
  1106. if target.TimeToDie() <=8.5 FillerActions()
  1107. #run_action_list,name=filler,if=buff.tigers_fury.up|buff.berserk.up
  1108. if BuffPresent(TIGERS_FURY) or BuffPresent(BERSERK_CAT) FillerActions()
  1109. #run_action_list,name=filler,if=cooldown.tigers_fury.remains<=3
  1110. if TigersFuryCooldown() <=3 FillerActions()
  1111. #run_action_list,name=filler,if=energy.time_to_max<=1
  1112. if TimeToMaxEnergy() <=1 FillerActions()
  1113. #run_action_list,name=filler,if=combo_points<5
  1114. if TalentPoints(HEART_OF_THE_WILD_TALENT) and TalentPoints(SOUL_OF_THE_FOREST_TALENT) and not MaxComboPoints() FillerActions()
  1115. }
  1116.  
  1117. AddFunction MainActionsNonDoC
  1118. {
  1119. SavageRoarOrWeakenedArmorMissing()
  1120.  
  1121. RangeCheck()
  1122.  
  1123. IncarnationBerserkTigersFuryLogic()
  1124.  
  1125. #Also includes Clearcasting Thrash and end of fight Ferocious Bite
  1126. ExecuteRangeRipFerociousBiteLogic()
  1127.  
  1128. NonDocRipLogic()
  1129.  
  1130. SavageRoarRefreshLogic()
  1131.  
  1132. NonExcuteRangeFerociousBiteLogic()
  1133.  
  1134. RakeLogic()
  1135.  
  1136. ThrashLogic()
  1137. }
  1138.  
  1139. AddFunction Prediction
  1140. {
  1141. if Stance(3) {
  1142. if TalentPoints(DREAM_OF_CENARIUS_TALENT)
  1143. {
  1144. MainActionsDoC()
  1145. }
  1146. unless TalentPoints(DREAM_OF_CENARIUS_TALENT)
  1147. {
  1148. MainActionsNonDoC()
  1149. }
  1150. }
  1151. if Stance(1) {
  1152. if BuffPresent(HEART_OF_THE_WILD) Spell(FRENZIED_REGEN)
  1153. unless BuffPresent(HEART_OF_THE_WILD) Spell(CAT_FORM)
  1154. }
  1155. if Stance(0) {
  1156. if BuffPresent(HEART_OF_THE_WILD) {
  1157. if BuffExpires(HEART_OF_THE_WILD) Texture(spell_holy_blessingofagility)
  1158. }
  1159. unless BuffPresent(HEART_OF_THE_WILD) Spell(CAT_FORM)
  1160. }
  1161. if Stance(4) or Stance(2) Spell(CAT_FORM)
  1162. }
  1163.  
  1164. #####################
  1165. ## Feral icons (Mastery=2) ##
  1166. #####################
  1167.  
  1168. AddIcon help=Rake size=small mastery=2 checkboxon=cooldownsRatio
  1169. {
  1170. RakeRatio()
  1171. }
  1172.  
  1173. AddIcon help=Rip size=small mastery=2 checkboxon=cooldownsRatio
  1174. {
  1175. RipRatio()
  1176. }
  1177.  
  1178. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsL {
  1179. if target.InRange(SKULL_BASH_CAT) Spell(SKULL_BASH_CAT)
  1180. unless target.Classification(worldboss)
  1181. {
  1182. if TalentPoints(MIGHTY_BASH_TALENT) and target.InRange(MIGHTY_BASH) Spell(MIGHTY_BASH)
  1183. if TalentPoints(TYPHOON_TALENT) and target.InRange(SKULL_BASH_CAT) Spell(TYPHOON)
  1184. if HasAnyComboPoints() and target.InRange(MAIM) Spell(MAIM)
  1185. }
  1186. Spell(WILD_CHARGE)
  1187. }
  1188.  
  1189. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsL { # Berserk Icon
  1190. if BuffPresent(TIGERS_FURY) Spell(BERSERK_CAT)
  1191. if 0s before Spell(BERSERK_CAT) Texture(Ability_mount_polarbear_white)
  1192. }
  1193.  
  1194.  
  1195. # Predictive rotation
  1196. AddIcon help=predictive size=small mastery=2 checkboxon=altpredictive {
  1197. Prediction()
  1198. }
  1199.  
  1200. AddIcon help=extraCD size=small mastery=2 checkboxon=altpredictive {
  1201. if TalentPoints(FORCE_OF_NATURE_TALENT)
  1202. {
  1203. if Charges(FORCE_OF_NATURE) ==3 or {Charges(FORCE_OF_NATURE) ==2 and SpellChargeCooldown(FORCE_OF_NATURE) <=1} Spell(FORCE_OF_NATURE)
  1204. if HasTrinket(ROR_ITEM) {
  1205. if BuffPresent(ROR_MASTERY) and {
  1206. BuffRemains(ROR_MASTERY) <= TreantTimeThreshold()
  1207. or BuffPresent(TICKING_EBON_DETONATOR)
  1208. or {BuffPresent(SOUL_CHARM) and BuffRemains(SOUL_CHARM) <= TreantTimeThreshold()}
  1209. or {BuffPresent(BAD_JUJU) and {BuffRemains(BAD_JUJU) <= TreantTimeThreshold() or BuffPresent(TIGERS_FURY) or {SpellCooldown(TIGERS_FURY) >=10 and BuffPresent(DANCING_STEEL)}}}
  1210. or {BuffPresent(VICIOUS_TALISMAN) and {BuffRemains(VICIOUS_TALISMAN) <= TreantTimeThreshold() or BuffPresent(TIGERS_FURY) or {SpellCooldown(TIGERS_FURY) >=10 and BuffPresent(DANCING_STEEL)}}}
  1211. or {BuffPresent(SIGIL_OF_RAMPAGE) and {BuffRemains(SIGIL_OF_RAMPAGE) <= TreantTimeThreshold() or BuffPresent(TIGERS_FURY) or {SpellCooldown(TIGERS_FURY) >=10 and BuffPresent(DANCING_STEEL)}}}
  1212. or {BuffPresent(ASSURANCE_OF_CONSEQUENCE) and {BuffRemains(ASSURANCE_OF_CONSEQUENCE) <= TreantTimeThreshold() or BuffPresent(TIGERS_FURY) or {SpellCooldown(TIGERS_FURY) >=10 and BuffPresent(DANCING_STEEL)}}}
  1213. or {BuffPresent(HAROMMS_TALISMAN) and {BuffRemains(HAROMMS_TALISMAN) <= TreantTimeThreshold() or BuffPresent(TIGERS_FURY) or {SpellCooldown(TIGERS_FURY) >=10 and BuffPresent(DANCING_STEEL)}}}
  1214. } Spell(FORCE_OF_NATURE)
  1215. }
  1216. }
  1217. unless TalentPoints(FORCE_OF_NATURE_TALENT)
  1218. {
  1219. if TalentPoints(HEART_OF_THE_WILD_TALENT) Spell(HEART_OF_THE_WILD)
  1220. if TalentPoints(DREAM_OF_CENARIUS_TALENT) {
  1221. if TalentPoints(NATURES_SWIFTNESS_TALENT) Spell(NATURES_SWIFTNESS)
  1222. if TalentPoints(CENARION_WARD_TALENT) Spell(CENARION_WARD)
  1223. if TalentPoints(RENEWAL_TALENT) Spell(RENEWAL)
  1224. }
  1225. if TalentPoints(NATURES_VIGIL_TALENT) Spell(NATURES_VIGIL)
  1226. }
  1227. }
  1228.  
  1229. # Main rotation
  1230. AddIcon help=main mastery=2 {
  1231. NotInCombat()
  1232. if Stance(3) {
  1233. if TalentPoints(DREAM_OF_CENARIUS_TALENT)
  1234. {
  1235. MainActionsDoC()
  1236. FillerConditions()
  1237. SpareGcdCooldowns()
  1238. }
  1239. unless TalentPoints(DREAM_OF_CENARIUS_TALENT)
  1240. {
  1241. MainActionsNonDoC()
  1242. FillerConditions()
  1243. SpareGcdCooldowns()
  1244. }
  1245. }
  1246. if Stance(1) {
  1247. if BuffPresent(HEART_OF_THE_WILD) {
  1248. if CheckBoxOff(bearaoe) BearMain()
  1249. if CheckBoxOn(bearaoe) BearMainAOE()
  1250. }
  1251. unless BuffPresent(HEART_OF_THE_WILD) Spell(CAT_FORM)
  1252. }
  1253. if Stance(0) {
  1254. if BuffPresent(HEART_OF_THE_WILD) {
  1255. if CastTime(WRATH) <BuffRemains(HEART_OF_THE_WILD) Spell(WRATH)
  1256. Spell(CAT_FORM)
  1257. }
  1258. unless BuffPresent(HEART_OF_THE_WILD) Spell(CAT_FORM)
  1259. }
  1260. if Stance(4) or Stance(2) Spell(CAT_FORM)
  1261. }
  1262.  
  1263. # Predictive rotation
  1264. AddIcon help=predictive mastery=2 checkboxoff=predictive {
  1265. Prediction()
  1266. }
  1267.  
  1268. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsR { # Rake
  1269. if BuffExpires(SAVAGE_ROAR) Texture(ability_druid_skinteeth)
  1270. }
  1271. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsR { # Rip
  1272. if TargetDebuffExpires(RIP) Texture(ability_ghoulfrenzy)
  1273. }
  1274. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsR { # Rake
  1275. if TargetDebuffExpires(RAKE) Texture(ability_druid_disembowel)
  1276. }
  1277. AddIcon help=cd size=small mastery=2 checkboxon=cooldownsR {
  1278. Spell(TIGERS_FURY)
  1279. }
  1280.  
  1281. ################################
  1282. ## Guardian rotation functions (Mastery=3) ##
  1283. ################################
  1284.  
  1285. AddFunction BearMain {
  1286. if Threat() <100 and target.DebuffPresent(LACERATE) and target.DebuffRemains(LACERATE) <2 Spell(LACERATE)
  1287. if Threat() <100 and BuffPresent(INCARNATION_BEAR) and target.DebuffRemains(THRASH_BEAR) <2 Spell(THRASH_BEAR)
  1288.  
  1289. Spell(MANGLE_BEAR)
  1290.  
  1291.  
  1292. # Debuff maintenance.
  1293. if target.DebuffRemains(WEAKENED_BLOWS 3 any=1) <=3 Spell(THRASH_BEAR)
  1294. if target.DebuffRemains(WEAKENED_ARMOR 3 any=1) <=3 or target.DebuffStacks(WEAKENED_ARMOR any=1) <3
  1295. {
  1296. FaerieFire()
  1297. }
  1298.  
  1299. Spell(LACERATE)
  1300. if target.DebuffPresent(THRASH_BEAR 6) FaerieFire()
  1301. Spell(THRASH_BEAR)
  1302. }
  1303.  
  1304. AddFunction BearMainAOE {
  1305. Spell(MANGLE_BEAR)
  1306. Spell(THRASH_BEAR)
  1307. Spell(SWIPE_BEAR)
  1308. }
  1309.  
  1310. #######################
  1311. ## Guardian icons (Mastery=3) ##
  1312. #######################
  1313.  
  1314. AddIcon help=Rake size=small mastery=3 checkboxon=cooldownsRatio
  1315. {
  1316. # Offset the guardian icons if the user has bleed ratios enabled
  1317. }
  1318.  
  1319. AddIcon help=Rip size=small mastery=3 checkboxon=cooldownsRatio
  1320. {
  1321. # Offset the guardian icons if the user has bleed ratios enabled
  1322. }
  1323.  
  1324. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsL {
  1325. Spell(BARKSKIN)
  1326. }
  1327.  
  1328. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsL {
  1329. if TalentPoints(NATURES_SWIFTNESS_TALENT) Spell(NATURES_SWIFTNESS)
  1330. if TalentPoints(RENEWAL_TALENT) Spell(RENEWAL)
  1331. if TalentPoints(CENARION_WARD_TALENT) Spell(CENARION_WARD)
  1332. }
  1333.  
  1334. AddIcon mastery=3 size=small checkboxon=altpredictive checkboxoff=cooldownsL {
  1335. if Rage(less 11) Spell(ENRAGE useable=1)
  1336. Spell(SAVAGE_DEFENSE usable=1)
  1337. Spell(FRENZIED_REGEN)
  1338. }
  1339.  
  1340. AddIcon mastery=3 size=small checkboxon=altpredictive checkboxoff=cooldownsL {
  1341. if BuffPresent(TOOTH_AND_CLAW) and target.DebuffExpires(TOOTH_AND_CLAW_DEBUFF) Spell(TOOTH_AND_CLAW)
  1342. unless BuffPresent(TOOTH_AND_CLAW) and target.DebuffExpires(TOOTH_AND_CLAW_DEBUFF) Spell(MAUL)
  1343. }
  1344.  
  1345. # Main rotation
  1346. AddIcon help=main mastery=3 {
  1347. if InCombat(no) and BuffRemains(str_agi_int any=1) <400 Spell(MARK_OF_THE_WILD)
  1348. unless Stance(1) Spell(BEAR_FORM)
  1349.  
  1350. if CheckBoxOff(bearaoe) BearMain()
  1351. if CheckBoxOn(bearaoe) BearMainAOE()
  1352. }
  1353.  
  1354. AddIcon help=defense mastery=3 checkboxoff=altpredictive {
  1355. if Rage(less 11) Spell(ENRAGE useable=1)
  1356. Spell(SAVAGE_DEFENSE usable=1)
  1357. Spell(FRENZIED_REGEN)
  1358. }
  1359.  
  1360. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsR {
  1361. Spell(SURVIVAL_INSTINCTS)
  1362. }
  1363.  
  1364. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsR {
  1365. Spell(MIGHT_OF_URSOC)
  1366. }
  1367.  
  1368. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsR {
  1369. if TalentPoints(INCARNATION_TALENT) Spell(INCARNATION_BEAR)
  1370. if TalentPoints(FORCE_OF_NATURE_TALENT) Spell(FORCE_OF_NATURE)
  1371. }
  1372.  
  1373. AddIcon help=cd size=small mastery=3 checkboxon=cooldownsR {
  1374. Spell(BERSERK_BEAR)
  1375. }
  1376.  
  1377. #######################
  1378. ## Debug Icons
  1379. #######################
  1380. AddIcon size=small checkboxon=zdebugmode { target.DebuffAttackPower(RIP) }
  1381. AddIcon size=small checkboxon=zdebugmode { LastAttackPower(RIP) }
  1382. AddIcon size=small checkboxon=zdebugmode { target.DebuffMeleeCritChance(RIP) }
  1383. AddIcon size=small checkboxon=zdebugmode { LastMeleeCritChance(RIP) }
  1384. AddIcon size=small checkboxon=zdebugmode { target.DebuffDamageMultiplier(RIP) }
  1385. AddIcon size=small checkboxon=zdebugmode { LastDamageMultiplier(RIP) }
  1386. AddIcon size=small checkboxon=zdebugmode { target.DebuffComboPoints(RIP) }
  1387. AddIcon size=small checkboxon=zdebugmode { LastComboPoints(RIP) }
  1388. AddIcon size=small checkboxon=zdebugmode { target.DebuffMastery(RIP) }
  1389. AddIcon size=small checkboxon=zdebugmode { LastMastery(RIP) }
Advertisement
Add Comment
Please, Sign In to add comment