Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.56 KB | None | 0 0
  1. --- ============================ HEADER ============================
  2. --- ======= LOCALIZE =======
  3. -- Addon
  4. local addonName, addonTable = ...
  5. -- HeroLib
  6. local HL = HeroLib
  7. local Cache = HeroCache
  8. local Unit = HL.Unit
  9. local Player = Unit.Player
  10. local Target = Unit.Target
  11. local Pet = Unit.Pet
  12. local Spell = HL.Spell
  13. local Item = HL.Item
  14. -- HeroRotation
  15. local HR = HeroRotation
  16.  
  17. --- ============================ CONTENT ===========================
  18. --- ======= APL LOCALS =======
  19. -- luacheck: max_line_length 9999
  20.  
  21. -- Spells
  22. if not Spell.Druid then Spell.Druid = {} end
  23. Spell.Druid.Balance = {
  24. StreakingStars = Spell(272871),
  25. ArcanicPulsar = Spell(287773),
  26. StarlordBuff = Spell(279709),
  27. Starlord = Spell(202345),
  28. TwinMoons = Spell(279620),
  29. MoonkinForm = Spell(24858),
  30. MoonkinFormBuff = Spell(24858),
  31. SolarWrath = Spell(190984),
  32. CaIncBuff = Spell(102560),
  33. BloodFury = Spell(20572),
  34. Berserking = Spell(26297),
  35. ArcaneTorrent = Spell(50613),
  36. LightsJudgment = Spell(255647),
  37. Fireblood = Spell(265221),
  38. AncestralCall = Spell(274738),
  39. CaInc = Spell(102560),
  40. WarriorofElune = Spell(202425),
  41. Innervate = Spell(29166),
  42. LivelySpirit = Spell(29166),
  43. Incarnation = Spell(102560),
  44. CelestialAlignment = Spell(194223),
  45. SunfireDebuff = Spell(164815),
  46. MoonfireDebuff = Spell(164812),
  47. StellarFlareDebuff = Spell(202347),
  48. StellarFlare = Spell(202347),
  49. LivelySpiritBuff = Spell(279646),
  50. FuryofElune = Spell(202770),
  51. ForceofNature = Spell(205636),
  52. Starfall = Spell(191034),
  53. Starsurge = Spell(78674),
  54. ArcanicPulsarBuff = Spell(287773),
  55. LunarEmpowermentBuff = Spell(164547),
  56. SolarEmpowermentBuff = Spell(164545),
  57. Sunfire = Spell(93402),
  58. Moonfire = Spell(8921),
  59. NewMoon = Spell(274281),
  60. HalfMoon = Spell(274282),
  61. FullMoon = Spell(274283),
  62. LunarStrike = Spell(194153),
  63. WarriorofEluneBuff = Spell(202425)
  64. };
  65. local S = Spell.Druid.Balance;
  66.  
  67. -- Items
  68. if not Item.Druid then Item.Druid = {} end
  69. Item.Druid.Balance = {
  70. ProlongedPower = Item(142117),
  71. BalefireBranch = Item(00000),
  72. Item159630 = Item(159630),
  73. DreadGladiatorsBadge = Item(00000),
  74. Item161902 = Item(161902),
  75. AzurethosSingedPlumage = Item(00000),
  76. Item161377 = Item(161377),
  77. TidestormCodex = Item(000000),
  78. Item165576 = Item(165576)
  79. };
  80. local I = Item.Druid.Balance;
  81.  
  82. -- Rotation Var
  83. local ShouldReturn; -- Used to get the return string
  84.  
  85. -- GUI Settings
  86. local Everyone = HR.Commons.Everyone;
  87. local Settings = {
  88. General = HR.GUISettings.General,
  89. Commons = HR.GUISettings.APL.Druid.Commons,
  90. Balance = HR.GUISettings.APL.Druid.Balance
  91. };
  92.  
  93. -- Variables
  94. local VarAzSs = 0;
  95. local VarAzAp = 0;
  96. local VarSfTargets = 0;
  97.  
  98. HL:RegisterForEvent(function()
  99. VarAzSs = 0
  100. VarAzAp = 0
  101. VarSfTargets = 0
  102. end, "PLAYER_REGEN_ENABLED")
  103.  
  104. local EnemyRanges = {40,20,15}
  105. local function UpdateRanges()
  106. for _, i in ipairs(EnemyRanges) do
  107. HL.GetEnemies(i);
  108. end
  109. end
  110.  
  111.  
  112. local function num(val)
  113. if val then return 1 else return 0 end
  114. end
  115.  
  116. local function bool(val)
  117. return val ~= 0
  118. end
  119.  
  120. local function FutureAstralPower()
  121. local AstralPower=Player:AstralPower()
  122. if not Player:IsCasting() then
  123. return AstralPower
  124. else
  125. if Player:IsCasting(S.NewnMoon) then
  126. return AstralPower + 10
  127. elseif Player:IsCasting(S.HalfMoon) then
  128. return AstralPower + 20
  129. elseif Player:IsCasting(S.FullMoon) then
  130. return AstralPower + 40
  131. elseif Player:IsCasting(S.StellarFlare) then
  132. return AstralPower + 8
  133. elseif Player:IsCasting(S.SolarWrath) then
  134. return AstralPower + 8
  135. elseif Player:IsCasting(S.LunarStrike) then
  136. return AstralPower + 12
  137. else
  138. return AstralPower
  139. end
  140. end
  141. end
  142.  
  143.  
  144. local function EvaluateCycleSunfire244(TargetUnit)
  145. return (TargetUnit:DebuffRefreshableCP(S.SunfireDebuff)) and (bool(ap_check) and math.floor (TargetUnit:TimeToDie() / (2 * Player:SpellHaste())) * Cache.EnemiesCount[40] >= math.ceil (math.floor (2 / Cache.EnemiesCount[40]) * 1.5) + 2 * Cache.EnemiesCount[40] and (Cache.EnemiesCount[40] > 1 + num(S.TwinMoons:IsAvailable()) or TargetUnit:DebuffP(S.MoonfireDebuff)) and (not bool(VarAzSs) or not Player:BuffP(S.CaIncBuff) or not Player:PrevGCDP(1, S.Sunfire)) and (Player:BuffRemainsP(S.CaIncBuff) > TargetUnit:DebuffRemainsP(S.SunfireDebuff) or not Player:BuffP(S.CaIncBuff)))
  146. end
  147.  
  148. local function EvaluateCycleMoonfire307(TargetUnit)
  149. return (TargetUnit:DebuffRefreshableCP(S.MoonfireDebuff)) and (bool(ap_check) and math.floor (TargetUnit:TimeToDie() / (2 * Player:SpellHaste())) * Cache.EnemiesCount[40] >= 6 and (not bool(VarAzSs) or not Player:BuffP(S.CaIncBuff) or not Player:PrevGCDP(1, S.Moonfire)) and (Player:BuffRemainsP(S.CaIncBuff) > TargetUnit:DebuffRemainsP(S.MoonfireDebuff) or not Player:BuffP(S.CaIncBuff)))
  150. end
  151.  
  152. local function EvaluateCycleStellarFlare342(TargetUnit)
  153. return (TargetUnit:DebuffRefreshableCP(S.StellarFlareDebuff)) and (bool(ap_check) and math.floor (TargetUnit:TimeToDie() / (2 * Player:SpellHaste())) >= 5 and (not bool(VarAzSs) or not Player:BuffP(S.CaIncBuff) or not bool(prev.stellar_flare)))
  154. end
  155. --- ======= ACTION LISTS =======
  156. local function APL()
  157. local Precombat
  158. UpdateRanges()
  159. Everyone.AoEToggleEnemiesUpdate()
  160. Precombat = function()
  161. -- flask
  162. -- food
  163. -- augmentation
  164. -- variable,name=az_ss,value=azerite.streaking_stars.rank
  165.  
  166. -- variable,name=az_ap,value=azerite.arcanic_pulsar.rank
  167. --if (true) then
  168. --VarAzAp = S.ArcanicPulsar:AzeriteRank()
  169. --end
  170. -- variable,name=sf_targets,value=4
  171. if (true) then
  172. VarSfTargets = 5
  173. end
  174. -- variable,name=sf_targets,op=add,value=1,if=azerite.arcanic_pulsar.enabled
  175. --if (S.ArcanicPulsar:AzeriteEnabled()) then
  176. --VarSfTargets = VarSfTargets + 1
  177. --end
  178. -- variable,name=sf_targets,op=add,value=1,if=talent.starlord.enabled
  179. --if (S.Starlord:IsAvailable()) then
  180. --VarSfTargets = VarSfTargets + 1
  181. --end
  182. -- variable,name=sf_targets,op=add,value=1,if=azerite.streaking_stars.rank>2&azerite.arcanic_pulsar.enabled
  183. --if (S.StreakingStars:AzeriteEnabled() and S.ArcanicPulsar:AzeriteEnabled()) then
  184. -- VarSfTargets = VarSfTargets + 1
  185. --end
  186. -- variable,name=sf_targets,op=sub,value=1,if=!talent.twin_moons.enabled
  187. --if (not S.TwinMoons:IsAvailable()) then
  188. --VarSfTargets = VarSfTargets - 1
  189. --end
  190. -- moonkin_form
  191. if S.MoonkinForm:IsCastableP() and not Player:Buff(S.MoonkinFormBuff) then
  192. if HR.Cast(S.MoonkinForm) then return "moonkin_form 33"; end
  193. end
  194. -- snapshot_stats
  195. -- potion
  196. if I.ProlongedPower:IsReady() and Settings.Commons.UsePotions then
  197. if HR.CastSuggested(I.ProlongedPower) then return "prolonged_power 36"; end
  198. end
  199. -- solar_wrath
  200. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and Everyone.TargetIsValid() then
  201. if HR.Cast(S.SolarWrath) then return "solar_wrath 38"; end
  202. end
  203. end
  204.  
  205.  
  206. CD = function()
  207. -- innervate,if=azerite.lively_spirit.enabled&(cooldown.incarnation.remains<2|cooldown.celestial_alignment.remains<12)
  208. if S.Innervate:IsCastableP() and (S.LivelySpirit:AzeriteEnabled() and (S.Incarnation:CooldownRemainsP() < 2 or S.CelestialAlignment:CooldownRemainsP() < 12)) then
  209. if HR.Cast(S.Innervate) then return "innervate 104"; end
  210. end
  211. -- incarnation,if=dot.sunfire.remains>8&dot.moonfire.remains>12&(dot.stellar_flare.remains>6|!talent.stellar_flare.enabled)&ap_check&!buff.ca_inc.up
  212. if HR.CDsON() and S.Incarnation:IsCastableP() and (Target:DebuffRemainsP(S.SunfireDebuff) > 8 and Target:DebuffRemainsP(S.MoonfireDebuff) > 12 and (Target:DebuffRemainsP(S.StellarFlareDebuff) > 6 or not S.StellarFlare:IsAvailable()) and bool(ap_check) and not Player:BuffP(S.CaIncBuff)) then
  213. if HR.Cast(S.Incarnation) then return "incarnation 112"; end
  214. end
  215. -- celestial_alignment,if=astral_power>=40&!buff.ca_inc.up&ap_check&(!azerite.lively_spirit.enabled|buff.lively_spirit.up)&(dot.sunfire.remains>2&dot.moonfire.ticking&(dot.stellar_flare.ticking|!talent.stellar_flare.enabled))
  216. if HR.CDsON() and S.CelestialAlignment:IsCastableP() and (FutureAstralPower() >= 40 and not Player:BuffP(S.CaIncBuff) and bool(ap_check) and (not S.LivelySpirit:AzeriteEnabled() or Player:BuffP(S.LivelySpiritBuff)) and (Target:DebuffRemainsP(S.SunfireDebuff) > 2 and Target:DebuffP(S.MoonfireDebuff) and (Target:DebuffP(S.StellarFlareDebuff) or not S.StellarFlare:IsAvailable()))) then
  217. if HR.Cast(S.CelestialAlignment) then return "celestial_alignment 124"; end
  218. end
  219. -- fury_of_elune,if=(buff.ca_inc.up|cooldown.ca_inc.remains>30)&solar_wrath.ap_check
  220. if HR.CDsON() and S.FuryofElune:IsCastableP() and ((Player:BuffP(S.CaIncBuff) or S.CaInc:CooldownRemainsP() > 30) and Player:AstralPowerDeficit() > 8 ) then
  221. if HR.Cast(S.FuryofElune) then return "fury_of_elune 140"; end
  222. end
  223. end
  224. Dot = function()
  225. -- sunfire,if=buff.ca_inc.up&buff.ca_inc.remains<gcd.max&variable.az_ss&dot.moonfire.remains>remains
  226. if S.Sunfire:IsCastableP() and (Player:BuffP(S.CaIncBuff) and Player:BuffRemainsP(S.CaIncBuff) < Player:GCD() and Target:DebuffRemainsP(S.MoonfireDebuff) > Target:DebuffRemainsP(S.SunfireDebuff)) then
  227. if HR.Cast(S.Sunfire) then return "sunfire 216"; end
  228. end
  229. -- moonfire,if=buff.ca_inc.up&buff.ca_inc.remains<gcd.max&variable.az_ss
  230. if S.Moonfire:IsCastableP() and (Player:BuffP(S.CaIncBuff) and Player:BuffRemainsP(S.CaIncBuff) < Player:GCD() and S.StreakingStars:AzeriteEnabled()) then
  231. if HR.Cast(S.Moonfire) then return "moonfire 232"; end
  232. end
  233. -- sunfire,target_if=refreshable,if=ap_check&floor(target.time_to_die%(2*spell_haste))*spell_targets>=ceil(floor(2%spell_targets)*1.5)+2*spell_targets&(spell_targets>1+talent.twin_moons.enabled|dot.moonfire.ticking)&(!variable.az_ss|!buff.ca_inc.up|!prev.sunfire)&(buff.ca_inc.remains>remains|!buff.ca_inc.up)
  234. if S.Sunfire:IsCastableP() then
  235. if HR.CastCycle(S.Sunfire, 40, EvaluateCycleSunfire244) then return "sunfire 302" end
  236. end
  237. -- moonfire,target_if=refreshable,if=ap_check&floor(target.time_to_die%(2*spell_haste))*spell_targets>=6&(!variable.az_ss|!buff.ca_inc.up|!prev.moonfire)&(buff.ca_inc.remains>remains|!buff.ca_inc.up)
  238. if S.Moonfire:IsCastableP() then
  239. if HR.CastCycle(S.Moonfire, 40, EvaluateCycleMoonfire307) then return "moonfire 337" end
  240. end
  241. -- stellar_flare,target_if=refreshable,if=ap_check&floor(target.time_to_die%(2*spell_haste))>=5&(!variable.az_ss|!buff.ca_inc.up|!prev.stellar_flare)
  242. if S.StellarFlare:IsCastableP() then
  243. if HR.CastCycle(S.StellarFlare, 40, EvaluateCycleStellarFlare342) then return "stellar_flare 354" end
  244. end
  245. end
  246.  
  247. Aoe = function()
  248. if S.Starfall:IsCastableP() and FutureAstralPower() > S.Starfall:Cost() and (Cache.EnemiesCount[20] >=7 and (Target:TimeToDie() + 1) * Cache.EnemiesCount[20] > S.Starfall:Cost() / 2.5) then
  249. if HR.Cast(S.Starfall) then return "starfall 158"; end
  250. end
  251. if S.Starsurge:IsCastableP() and Cache.EnemiesCount[15] < 7 and FutureAstralPower() >= S.Starsurge:Cost() and Player:BuffStackP(S.SolarEmpowermentBuff) < 3 and Player:BuffStackP(S.LunarEmpowermentBuff) < 3 then
  252. if HR.Cast(S.Starsurge) then return "starsurge 182"; end
  253. end
  254. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and Player:BuffStackP(S.LunarEmpowermentBuff) >= 1 and Player:BuffStackP(S.SolarEmpowermentBuff) <= 2 then
  255. if HR.Cast(S.LunarStrike) then return ""; end
  256. end
  257.  
  258. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and Player:BuffStackP(S.SolarEmpowermentBuff) >= 1 and Player:BuffStackP(S.LunarEmpowermentBuff) < 3 then
  259. if HR.Cast(S.SolarWrath) then return ""; end
  260. end
  261. if S.LunarStrike:IsCastableP() and not Player:IsMoving()and Cache.EnemiesCount[15] >=3 and not Player:IsMoving() then
  262. if HR.Cast(S.LunarStrike) then return ""; end
  263. end
  264.  
  265. if S.SolarWrath:IsCastableP() and not Player:IsMoving() then
  266. if HR.Cast(S.SolarWrath) then return ""; end
  267. end
  268. -- sunfire
  269. if S.Sunfire:IsCastableP() then
  270. if HR.Cast(S.Sunfire) then return "sunfire 393"; end
  271. end
  272. end
  273.  
  274.  
  275. local function EmpowermentCapCheck ()
  276. -- TODO(mrdmnd) - add conditions on azerite traits
  277. --actions+=/lunar_strike,
  278. -- if=astral_power.deficit>=16&
  279. -- (buff.lunar_empowerment.stack=3|(spell_targets<3 & astral_power>=40 & (buff.lunar_empowerment.stack=2&buff.solar_empowerment.stack=2)))&
  280. -- !(variable.az_hn=3&active_enemies=1)&
  281. -- !(spell_targets.moonfire>=2&variable.az_potm=3&active_enemies=2)
  282. --actions+=/solar_wrath,
  283. -- if=astral_power.deficit>=12&
  284. -- (buff.solar_empowerment.stack=3|(variable.az_sb>1&spell_targets.starfall<3&astral_power>=32&!buff.sunblaze.up))&
  285. -- !(variable.az_hn=3&active_enemies=1)&
  286. -- !(spell_targets.moonfire>=2&active_enemies<=4&variable.az_potm=3)
  287. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and Player:AstralPowerDeficit() >= 16 and (Player:BuffStackP(S.LunarEmpowermentBuff) == 3 or (Cache.EnemiesCount[15] < 3 and Player:AstralPower() >= 40 and Player:BuffStackP(S.LunarEmpowermentBuff) == 2 and Player:BuffStack(S.SolarEmpowermentBuff) == 2)) then
  288. if HR.Cast(S.LunarStrike) then return "Lunar Strike at Cap"; end
  289. end
  290.  
  291. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and Player:AstralPowerDeficit() >= 12 and (Player:BuffStackP(S.SolarEmpowermentBuff) == 3) then
  292. if HR.Cast(S.SolarWrath) then return "Solar Wrath at Cap"; end
  293. end
  294. end
  295. local function CoreRotation ()
  296. -- TODO(mrdmnd): Implement conditionals on azerite traits. For now, assume all vairable.az_WHATEVER evaluates to zero.
  297. -- actions+=/starsurge,if=(spell_targets.starfall<3&(!buff.starlord.up|buff.starlord.remains>=4)|execute_time*(astral_power%40)>target.time_to_die)&(!buff.celestial_alignment.up&!buff.incarnation.up|variable.az_streak<2|!prev_gcd.1.starsurge)
  298. -- actions+=/starfall,if=spell_targets.starfall>=3&(!buff.starlord.up|buff.starlord.remains>=4)
  299. -- actions+=/new_moon,if=astral_power.deficit>10+execute_time%1.5
  300. -- actions+=/half_moon,if=astral_power.deficit>20+execute_time%1.5
  301. -- actions+=/full_moon,if=astral_power.deficit>40+execute_time%1.5
  302. -- actions+=/lunar_strike,if=((buff.warrior_of_elune.up|buff.lunar_empowerment.up|spell_targets>=3&!buff.solar_empowerment.up)&(!buff.celestial_alignment.up&!buff.incarnation.up|variable.az_streak<2|!prev_gcd.1.lunar_strike)|(variable.az_ds&!buff.dawning_sun.up))&!(spell_targets.moonfire>=2&active_enemies<=4&(variable.az_potm=3|variable.az_potm=2&active_enemies=2))
  303. -- actions+=/solar_wrath,if=(!buff.celestial_alignment.up&!buff.incarnation.up|variable.az_streak<2|!prev_gcd.1.solar_wrath)&!(spell_targets.moonfire>=2&active_enemies<=4&(variable.az_potm=3|variable.az_potm=2&active_enemies=2))
  304. -- actions+=/sunfire,if=(!buff.celestial_alignment.up&!buff.incarnation.up|!variable.az_streak|!prev_gcd.1.sunfire)&!(variable.az_potm>=2&spell_targets.moonfire>=2)
  305. -- actions+=/moonfire
  306. if HR.AoEON() and S.Starfall:IsCastableP() and FutureAstralPower() > S.Starfall:Cost() and (Cache.EnemiesCount[20] > 6 and (Target:TimeToDie() + 1) * Cache.EnemiesCount[20] > S.Starfall:Cost() / 2.5) then
  307. if HR.Cast(S.Starfall) then return "starfall 158"; end
  308. end
  309. if S.Starsurge:IsCastableP() and (not Player:BuffP(S.StarlordBuff) or Player:BuffRemainsP(S.StarlordBuff) >= 4 or (Player:GCD() * (FutureAstralPower() / 40)) > Target:TimeToDie()) and FutureAstralPower() >= 40 then
  310. if HR.Cast(S.Starsurge) then return ""; end
  311. end
  312. -- don't suggest an empowered cast if we're casting the last empowered stack
  313. -- bad assumption: detects cleave targets based on 15yds from caster, centered. cannot do clump detection, i am not clever enough yet
  314. if (Cache.EnemiesCount[15] >= 2) then
  315. -- Cleave situation: prioritize lunar strike empower > solar wrath empower > lunar strike
  316. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and Player:BuffP(S.LunarEmpowermentBuff) and not (Player:BuffStackP(S.LunarEmpowermentBuff) == 1 and Player:IsCasting(S.LunarStrike)) then
  317. if HR.Cast(S.LunarStrike) then return ""; end
  318. end
  319. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and Player:BuffP(S.SolarEmpowermentBuff) and not (Player:BuffStackP(S.SolarEmpowermentBuff) == 1 and Player:IsCasting(S.SolarWrath)) then
  320. if HR.Cast(S.SolarWrath) then return ""; end
  321. end
  322. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and (true) then
  323. if HR.Cast(S.LunarStrike) then return ""; end
  324. end
  325. else
  326. -- ST situation: prioritize solar wrath empower > lunar strike empower > solar wrath
  327. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and Player:BuffP(S.SolarEmpowermentBuff) and not (Player:BuffStackP(S.SolarEmpowermentBuff) == 1 and Player:IsCasting(S.SolarWrath)) then
  328. if HR.Cast(S.SolarWrath) then return ""; end
  329. end
  330. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and Player:BuffP(S.LunarEmpowermentBuff) and not (Player:BuffStackP(S.LunarEmpowermentBuff) == 1 and Player:IsCasting(S.LunarStrike)) then
  331. if HR.Cast(S.LunarStrike) then return ""; end
  332. end
  333. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and (true) then
  334. if HR.Cast(S.SolarWrath) then return ""; end
  335. end
  336. end
  337.  
  338. if S.Moonfire:IsCastableP() and (true) then
  339. if HR.Cast(S.Moonfire) then return ""; end
  340. end
  341. end
  342. Streak = function()
  343. -- starsurge,if=(talent.starlord.enabled&(buff.starlord.stack<3|buff.starlord.remains>=8&buff.arcanic_pulsar.stack<8)|!talent.starlord.enabled&(buff.arcanic_pulsar.stack<8|buff.ca_inc.up))&spell_targets.starfall<variable.sf_targets&buff.lunar_empowerment.stack+buff.solar_empowerment.stack<4&buff.solar_empowerment.stack<3&buff.lunar_empowerment.stack<3&(!variable.az_ss|!buff.ca_inc.up|!prev.starsurge)|target.time_to_die<=execute_time*astral_power%40|!solar_wrath.ap_check
  344. if S.Starsurge:IsCastableP() and FutureAstralPower() >= S.Starsurge:Cost() and (Player:BuffStackP(S.SolarEmpowermentBuff) < 3 and Player:BuffStackP(S.LunarEmpowermentBuff) < 3 and not Player:PrevGCDP(1, S.Starsurge) ) then
  345. if HR.Cast(S.Starsurge) then return "starsurge 182"; end
  346. end
  347.  
  348. -- lunar_strike,if=buff.solar_empowerment.stack<3&(ap_check|buff.lunar_empowerment.stack=3)&((buff.warrior_of_elune.up|buff.lunar_empowerment.up|spell_targets>=2&!buff.solar_empowerment.up)&(!variable.az_ss|!buff.ca_inc.up)|variable.az_ss&buff.ca_inc.up&prev.solar_wrath)
  349. if S.LunarStrike:IsCastableP() and not Player:IsMoving() and not Player:IsCasting(S.LunarStrike) and Player:BuffP(S.CaIncBuff) and Player:BuffStackP(S.SolarEmpowermentBuff) < 3 and not Player:PrevGCDP(1, S.LunarStrike) or Player:PrevGCDP(1, S.SolarWrath) then
  350. if HR.Cast(S.LunarStrike) then return "lunar_strike 361"; end
  351. end
  352.  
  353. -- solar_wrath,if=variable.az_ss<3|!buff.ca_inc.up|!prev.solar_wrath
  354. if S.SolarWrath:IsCastableP() and not Player:IsMoving() and not Player:IsCasting(S.SolarWrath) and Player:BuffP(S.CaIncBuff) and not Player:PrevGCDP(1, S.SolarWrath) then
  355. if HR.Cast(S.SolarWrath) then return "solar_wrath 387"; end
  356. end
  357. end
  358.  
  359. -- call precombat
  360.  
  361. if Everyone.TargetIsValid() then
  362. if not Player:AffectingCombat() then
  363. local ShouldReturn = Precombat(); if ShouldReturn then return ShouldReturn; end
  364. end
  365. if Player:AffectingCombat() then
  366. if S.MoonkinForm:IsCastableP() and not Player:Buff(S.MoonkinFormBuff) and not Player:IsMoving() then
  367. if HR.Cast(S.MoonkinForm) then return "moonkin_form 33"; end
  368. end
  369. end
  370. if (true) then
  371. local ShouldReturn = Dot(); if ShouldReturn then return ShouldReturn; end
  372. end
  373. if (true) then
  374. local ShouldReturn = CD(); if ShouldReturn then return ShouldReturn; end
  375. end
  376. --if HR.AoEON() and Cache.EnemiesCount[15] >= 7 then
  377. --local ShouldReturn = Aoe(); if ShouldReturn then return ShouldReturn; end
  378. --end
  379. if Player:Buff(S.CaInc) then
  380. local ShouldReturn = Streak(); if ShouldReturn then return ShouldReturn; end
  381. end
  382. if not Player:Buff(S.CaInc) then
  383. local ShouldReturn = EmpowermentCapCheck(); if ShouldReturn then return ShouldReturn; end
  384. end
  385.  
  386. if not Player:Buff(S.CaInc) then
  387. local ShouldReturn = CoreRotation(); if ShouldReturn then return ShouldReturn; end
  388. end
  389. if S.Moonfire:IsCastableP() and (true) then
  390. if HR.Cast(S.Moonfire) then return ""; end
  391. end
  392.  
  393.  
  394. --if Player:BuffP(S.CaIncBuff) then
  395. --local ShouldReturn = Streak(); if ShouldReturn then return ShouldReturn; end
  396. --end
  397.  
  398.  
  399.  
  400.  
  401. end
  402. end
  403.  
  404. HR.SetAPL(102, APL)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement