Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 53.58 KB | None | 0 0
  1. local rotationName = "immy"
  2. immy = true
  3.  
  4. ---------------
  5. --- Toggles ---
  6. ---------------
  7. local function createToggles()
  8. -- Rotation Button
  9. RotationModes = {
  10. [1] = { mode = "", value = 1 , overlay = "DPS Rotation Enabled", tip = "Enable DPS Rotation", highlight = 1, icon = br.player.spell.toxicBlade},
  11. [2] = { mode = "", value = 2 , overlay = "DPS Rotation Disabled", tip = "Disable DPS Rotation", highlight = 0, icon = br.player.spell.crimsonVial}
  12. };
  13. CreateButton("Rotation",1,0)
  14. -- Cooldown Button
  15.  
  16. -- Blade Flurry Button
  17. CleaveModes = {
  18. [1] = { mode = "", value = 1 , overlay = "", tip = "Cleave on.", highlight = 1, icon = br.player.spell.rupture},
  19. [2] = { mode = "", value = 2 , overlay = "", tip = "Cleave off.", highlight = 0, icon = br.player.spell.rupture}
  20. };
  21. CreateButton("Cleave",2,0)
  22. -- Interrupt Button
  23. InterruptModes = {
  24. [1] = { mode = "", value = 1 , overlay = "Interrupts Enabled", tip = "Includes Basic Interrupts.", highlight = 1, icon = br.player.spell.kick},
  25. [2] = { mode = "", value = 2 , overlay = "Interrupts Disabled", tip = "No Interrupts will be used.", highlight = 0, icon = br.player.spell.kick}
  26. };
  27. CreateButton("Interrupt",3,0)
  28. SpecialModes = {
  29. [1] = { mode = "", value = 1 , overlay = "", tip = "", highlight = 1, icon = br.player.spell.vendetta},
  30. [2] = { mode = "", value = 2 , overlay = "", tip = "", highlight = 0, icon = br.player.spell.vendetta},
  31. };
  32. CreateButton("Special",4,0)
  33.  
  34. OpenerModes = {
  35. [1] = { mode = "", value = 1 , overlay = "", tip = "", highlight = 1, icon = br.player.spell.garrote},
  36. [2] = { mode = "", value = 2 , overlay = "", tip = "", highlight = 0, icon = br.player.spell.garrote},
  37. };
  38. CreateButton("Opener",4,1)
  39.  
  40. FeintModes = {
  41. [1] = { mode = "", value = 1 , overlay = "", tip = "", highlight = 1, icon = br.player.spell.feint},
  42. [2] = { mode = "", value = 2 , overlay = "", tip = "", highlight = 0, icon = br.player.spell.feint},
  43. };
  44. CreateButton("Feint",5,1)
  45.  
  46. TBExModes = {
  47. [1] = { mode = "", value = 1 , overlay = "", tip = "", highlight = 1, icon = br.player.spell.exsanguinate},
  48. [2] = { mode = "", value = 2 , overlay = "", tip = "", highlight = 0, icon = br.player.spell.exsanguinate},
  49. };
  50. CreateButton("TBEx",5,0)
  51.  
  52.  
  53. end
  54.  
  55. ---------------
  56. --- OPTIONS ---
  57. ---------------
  58. local function createOptions()
  59. local optionTable
  60.  
  61. local function rotationOptions()
  62. -----------------------
  63. --- GENERAL OPTIONS ---
  64. -----------------------
  65. section = br.ui:createSection(br.ui.window.profile, "General")
  66. br.ui:createDropdown(section, "Stealth", {"|cff00FF00Always", "|cffFF000020Yards"}, 2, "Stealthing method.")
  67. br.ui:createCheckbox(section, "Debug")
  68. br.ui:checkSectionState(section)
  69. ------------------------
  70. --- OFFENSIVE OPTIONS ---
  71. ------------------------
  72. section = br.ui:createSection(br.ui.window.profile, "Offensive")
  73. -- Trinkets
  74. br.ui:createCheckbox(section, "Trinkets")
  75. br.ui:createCheckbox(section, "Galecaller")
  76. br.ui:createCheckbox(section, "Racial")
  77. br.ui:createCheckbox(section, "Apply Deadly Poison in melee")
  78. --br.ui:createCheckbox(section, "Toxic Blade/Exsa")
  79. br.ui:createCheckbox(section, "Opener refresh")
  80. --br.ui:createCheckbox(section, "Toxic Blade on cd")
  81. br.ui:createSpinnerWithout(section, "Dots HP Limit", 15, 0, 105, 1, "|cffFFFFFFHP *10k hp for dots to be AOE casted/refreshed on.")
  82. br.ui:createSpinnerWithout(section, "Max Garrotes refresh SS", 3, 1, 6, 1, "max garrotes ss")
  83. br.ui:checkSectionState(section)
  84. -------------------------
  85. --- DEFENSIVE OPTIONS ---
  86. -------------------------
  87. section = br.ui:createSection(br.ui.window.profile, "Defensive")
  88. br.ui:createSpinner(section, "Healing Potion/Healthstone", 60, 0, 100, 5, "|cffFFBB00Health Percentage to use at.")
  89. br.ui:createSpinner(section, "Crimson Vial", 50, 0, 100, 5, "|cffFFBB00Health Percentage to use at.")
  90. br.ui:createSpinner(section, "Feint", 75, 0, 100, 5, "|cffFFBB00Health Percentage to use at.")
  91. br.ui:createSpinner(section, "Evasion", 50, 0, 100, 5, "|cffFFBB00Health Percentage to use at.")
  92. br.ui:checkSectionState(section)
  93. -------------------------
  94. --- INTERRUPT OPTIONS ---
  95. -------------------------
  96. section = br.ui:createSection(br.ui.window.profile, "Interrupts")
  97. br.ui:createCheckbox(section, "Kick")
  98. br.ui:createCheckbox(section, "Kidneyshot")
  99. br.ui:createCheckbox(section, "Blind")
  100. br.ui:createSpinner(section, "Interrupt At", 0, 0, 95, 5, "|cffFFBB00Cast Percentage to use at.")
  101. br.ui:checkSectionState(section)
  102. ----------------------
  103. --- TOGGLE OPTIONS ---
  104. ----------------------
  105. section = br.ui:createSection(br.ui.window.profile, "Toggle Keys")
  106. -- Single/Multi Toggle
  107. br.ui:createDropdown(section, "Rotation Mode", br.dropOptions.Toggle, 4)
  108. --Cooldown Key Toggle
  109. br.ui:createDropdown(section, "Cooldown Mode", br.dropOptions.Toggle, 3)
  110. --Defensive Key Toggle
  111. br.ui:createDropdown(section, "Defensive Mode", br.dropOptions.Toggle, 6)
  112. -- Interrupts Key Toggle
  113. br.ui:createDropdown(section, "Interrupt Mode", br.dropOptions.Toggle, 6)
  114. br.ui:createDropdown(section, "Pause Mode", br.dropOptions.Toggle, 6)
  115. br.ui:checkSectionState(section)
  116. end
  117. optionTable = {{
  118. [1] = "Rotation Options",
  119. [2] = rotationOptions,
  120. }}
  121. return optionTable
  122. end
  123.  
  124.  
  125.  
  126. ----------------
  127. --- ROTATION ---
  128. ----------------
  129. local function runRotation()
  130. --Print("Running: "..rotationName)
  131.  
  132. ---------------
  133. --- Toggles ---
  134. ---------------
  135. UpdateToggle("Rotation",0.25)
  136. UpdateToggle("Interrupt",0.25)
  137. br.player.mode.interrupt = br.data.settings[br.selectedSpec].toggles["Interrupt"]
  138. UpdateToggle("Cleave",0.25)
  139. br.player.mode.cleave = br.data.settings[br.selectedSpec].toggles["Cleave"]
  140. UpdateToggle("Opener",0.25)
  141. br.player.mode.opener = br.data.settings[br.selectedSpec].toggles["Opener"]
  142. UpdateToggle("Feint",0.25)
  143. br.player.mode.feint = br.data.settings[br.selectedSpec].toggles["Feint"]
  144. UpdateToggle("TBEx",0.25)
  145. br.player.mode.tbex = br.data.settings[br.selectedSpec].toggles["TBEx"]
  146. UpdateToggle("Special",0.25)
  147. br.player.mode.special = br.data.settings[br.selectedSpec].toggles["Special"]
  148.  
  149. --------------
  150. --- Locals ---
  151. --------------
  152. if profileStop == nil then profileStop = false end
  153. local attacktar = UnitCanAttack("target","player")
  154. local buff = br.player.buff
  155. local cast = br.player.cast
  156. local cd = br.player.cd
  157. local combo, comboDeficit, comboMax = br.player.power.comboPoints.amount(), br.player.power.comboPoints.deficit(), br.player.power.comboPoints.max()
  158. local combospend = ComboMaxSpend()
  159. local cTime = getCombatTime()
  160. local debuff = br.player.debuff
  161. local enemies = br.player.enemies
  162. local gcd = getSpellCD(61304)
  163. local hastar = GetObjectExists("target")
  164. local healPot = getHealthPot()
  165. local inCombat = isInCombat("player")
  166. local lastSpell = lastSpellCast
  167. local level = br.player.level
  168. local mode = br.player.mode
  169. local multidot = (br.player.mode.cleave == 1 or br.player.mode.rotation == 2) and br.player.mode.rotation ~= 3
  170. local php = br.player.health
  171. local power, powerDeficit, powerRegen = br.player.power.energy.amount(), br.player.power.energy.deficit(), br.player.power.energy.regen()
  172. local race = br.player.race
  173. local racial = br.player.getRacial()
  174. local solo = #br.friend < 2
  175. local spell = br.player.spell
  176. local stealth = br.player.buff.stealth.exists()
  177. local stealthingAll = br.player.buff.stealth.exists() or br.player.buff.vanish.exists() or br.player.buff.shadowmeld.exists()
  178. local stealthingRogue = br.player.buff.stealth.exists() or br.player.buff.vanish.exists() or (br.player.buff.subterfuge.exists() and br.player.buff.subterfuge.remain() >= 0.3)
  179. local stealthingMantle = br.player.buff.stealth.exists() or br.player.buff.vanish.exists()
  180. local talent = br.player.talent
  181. local trait = br.player.traits
  182. local ttd = getTTD
  183. local ttm = br.player.power.energy.ttm()
  184. local units = br.player.units
  185. local lootDelay = getOptionValue("LootDelay")
  186.  
  187.  
  188.  
  189. --if stealthingRogue then print(br.player.buff.subterfuge.remain()) end
  190.  
  191. dotHPLimit = getOptionValue("Dots HP Limit") * 10000
  192.  
  193. -- Get Best Unit for Range
  194. -- units.get(range, aoe)
  195.  
  196. units.get(5)
  197. units.get(20)
  198. -- Get List of Enemies for Range
  199. -- enemies.get(range, from unit, no combat, variable)
  200. -- makes enemies.yards40
  201.  
  202. enemies.get(5)
  203. enemies.get(9)
  204. enemies.get(20)
  205. enemies.get(40)
  206.  
  207. if GetUnitExists("target") and #br.player.enemies.yards5 > 1 then
  208. table.sort(br.player.enemies.yards5, function(x,y)
  209. return UnitHealth(x) > UnitHealth(y)
  210. end)
  211.  
  212. table.sort(br.player.enemies.yards5, function(x)
  213. if GetUnitIsUnit(x, "target") then
  214. return true
  215. else
  216. return false
  217. end
  218. end)
  219. end
  220. --if ssbug == nil then ssbug = 0 end
  221. local singleTarget = ((mode.rotation == 1 and #enemies.yards9 < 2) or (mode.rotation == 3 and #enemies.yards9 > 0))
  222.  
  223. local bleeds = debuff.garrote.count() + debuff.rupture.count()
  224. --Energy_Regen_Combined = Player:EnergyRegen() + Rogue.PoisonedBleeds() * 7 / (2 * Player:SpellHaste());
  225.  
  226. local energyRegenCombined = powerRegen + bleeds * 7 / (2*1/(1+(GetHaste()/100)))
  227. --print(energyRegenCombined)
  228. local BleedTickTime, ExsanguinatedBleedTickTime = 2 / GetHaste(), 1 / GetHaste()
  229.  
  230. if mode.opener == 2 or opener == nil then
  231. RUP1 = false
  232. GAR1 = false
  233. VEN1 = false
  234. MUTI1 = false
  235. RUP2 = false
  236. EXS1 = false
  237. opener = false
  238. if isChecked("Opener refresh") then
  239. toggle("Opener",1)
  240. end
  241. end
  242.  
  243.  
  244. -- if ssbuggy ~= nil then
  245. -- print(ssbuggy)
  246. -- end
  247. -- if ssbuggytime ~= nil then
  248. -- if GetTime() >= ssbuggytime + ssbuggytime1
  249. -- then ssbug = 0
  250. -- end
  251. -- end
  252.  
  253.  
  254. -- local function ngs()
  255. -- local counter = 0
  256. -- for i = 1, #enemies.yards40 do
  257. -- local thisUnit = enemies.yards40[i]
  258. -- if debuff.garrote.applied(thisUnit) > 1 and debuff.garrote.exists(thisUnit) then
  259. -- counter = counter + 1
  260. -- end
  261. -- end
  262. -- return tonumber(counter)
  263. -- end
  264. -- print(ngs())
  265. --if ngs() == 0 then ssbug = false end
  266.  
  267. local ttdval = #enemies.yards9 <= 1 and 4 or 12
  268. --if getCombatTime() == 0 or cast.last.vanish() then garrotecountbuff = debuff.garrote.remainCount(1) end
  269.  
  270. local function waitshit()
  271. if (mode.special == 2 and (not isBoss() or isDummy())) or mode.special == 1 then
  272. return true
  273. else
  274. return false
  275. end
  276. end
  277.  
  278.  
  279.  
  280.  
  281. -- local function Evaluate_Garrote_Target(unit)
  282. -- return TargetUnit:DebuffRefreshableP(S.Garrote, 5.4)
  283. -- and (TargetUnit:PMultiplier(S.Garrote) <= 1 or TargetUnit:DebuffRemainsP(S.Garrote) <= (HL.Exsanguinated(TargetUnit, "Garrote") and ExsanguinatedBleedTickTime or BleedTickTime) and EmpoweredDotRefresh())
  284. -- and (not HL.Exsanguinated(TargetUnit, "Garrote") or TargetUnit:DebuffRemainsP(S.Garrote) <= 1.5 and EmpoweredDotRefresh())
  285. -- and Rogue.CanDoTUnit(TargetUnit, GarroteDMGThreshold);
  286. -- end
  287. --local lowestDot = debuff.garrote.lowest(5,"remain")
  288.  
  289. local function EmpoweredDotRefresh()
  290. return true --#enemies.get(8.5,"player") >= 3 + (trait.shroudedSuffocation.active() and 1 or 0)
  291. end
  292.  
  293. SLASH_SPECIAL1 = "/bursterino"
  294. SlashCmdList["SPECIAL"] = function(msg)
  295. if mode.special == 2 then
  296. if toggle("Special",1) then return true end
  297. end
  298. end
  299.  
  300.  
  301. local function usefiller()
  302. -- return ((comboDeficit > 1 and debuff.garrote.remain("target") > 4) or powerDeficit <= 25 + energyRegenCombined or not singleTarget) and true or false
  303. return (comboDeficit > 1 or powerDeficit <= 25 + energyRegenCombined or not singleTarget) and true or false
  304. end
  305.  
  306. -- local function bfrange()
  307. -- if talent.acrobaticStikes then return #enemies.get(9) end
  308. -- else return #enemies.get(6) end
  309. -- end
  310.  
  311. if leftCombat == nil then leftCombat = GetTime() end
  312. --if vanishTime == nil then vanishTime = GetTime() end
  313.  
  314.  
  315.  
  316.  
  317. --------------------
  318. --- Action Lists ---
  319. --------------------
  320. -- Action List - Extras
  321. --[[local function actionList_Extras()
  322. end -- End Action List - Extras]]
  323. -- Action List - DefensiveModes
  324. local function actionList_Defensive()
  325. SLASH_FEINT1 = "/feinterino"
  326. SlashCmdList["FEINT"] = function(msg)
  327. if not buff.feint.exists() or (buff.feint.exists() and buff.feint.remain() <= 0.8) or isDeBuffed("player", 230139) and mode.feint == 2 then
  328. if toggle("Feint",1) then return end
  329. end
  330. end
  331. -- Feint
  332. if mode.feint == 1 and not buff.feint.exists() then
  333. if cast.feint() and toggle("Feint",2) then return end
  334. end
  335.  
  336. if useDefensive() and not stealth then
  337. -- Health Pot/Healthstone
  338. if isChecked("Healing Potion/Healthstone") and php <= getOptionValue("Healing Potion/Healthstone")
  339. and inCombat and (hasHealthPot() or hasItem(5512))
  340. then
  341. if canUse(5512) then
  342. useItem(5512)
  343. elseif canUse(healPot) then
  344. useItem(healPot)
  345. end
  346. end
  347. -- Crimson Vial
  348. if cast.able.crimsonVial() and isChecked("Crimson Vial") and php < getOptionValue("Crimson Vial") then
  349. if cast.crimsonVial() then return end
  350. end
  351. -- Feint
  352. if cast.able.feint() and isChecked("Feint") and php <= getOptionValue("Feint") and inCombat and not buff.feint then
  353. if cast.feint() then return end
  354. end
  355. -- Evasion
  356. if cast.able.evasion() and isChecked("Evasion") and php <= getOptionValue("Evasion") and inCombat then
  357. if cast.evasion() then return end
  358. end
  359. end
  360. end -- End Action List - Defensive
  361.  
  362. local function actionList_Stealthed()
  363.  
  364.  
  365.  
  366. if talent.subterfuge then
  367. if cast.able.garrote() then
  368.  
  369. -- if buff.subterfuge.remain() <= 1.4 and buff.subterfuge.remain() >= 0.4 and debuff.garrote.remain() < 18 and debuff.garrote.exists() and cd.vanish.remain() >= 110 then
  370. -- if cast.garrote("target") then print("last sec subt garr"); return true end
  371. -- end
  372. -- --# Subterfuge: Override normal Garrotes with snapshot versions
  373. -- --actions.stealthed+=/garrote,cycle_targets=1,if=talent.subterfuge.enabled&remains<=10&pmultiplier<=1&target.time_to_die-remains>2
  374. -- if buff.subterfuge.remain() <= 1.2 and buff.subterfuge.remain() >= 0.4 and debuff.garrote.remain() < 5.4 and debuff.garrote.exists() then
  375. -- if cast.garrote() then print("last sec subt garrote target"); return true end
  376. -- end
  377.  
  378. for i = 1, #enemies.yards5 do
  379. local thisUnit = enemies.yards5[i]
  380. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  381. if debuff.garrote.remain(thisUnit) < 5.4 and debuff.garrote.exists(thisUnit)
  382. and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 5 or true)
  383. then
  384. if cast.garrote(thisUnit) then
  385. if isChecked("Debug") then print("refresh garrote stealth") end
  386. return true end
  387. end
  388. end
  389. end
  390.  
  391. -- # Subterfuge + Shrouded Suffocation: Apply early Rupture that will be refreshed for pandemic.
  392. -- actions.stealthed+=/rupture,if=talent.subterfuge.enabled&azerite.shrouded_suffocation.enabled&!dot.rupture.ticking
  393.  
  394. -- if buff.subterfuge.remain() <= 1.2 and buff.subterfuge.remain() >= 0.2 and not debuff.garrote.exists() then
  395. -- if cast.garrote() then
  396. -- if isChecked("Debug") then print("apply new garrote target") end
  397. -- return true end
  398. -- end
  399.  
  400. for i = 1, #enemies.yards5 do
  401. local thisUnit = enemies.yards5[i]
  402. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  403. if not debuff.garrote.exists(thisUnit)
  404. and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 5 or true)
  405. then
  406. if cast.garrote(thisUnit) then
  407. if isChecked("Debug") then print("apply new garrote target stealth") end
  408. return true end
  409. end
  410. end
  411. end
  412.  
  413.  
  414. end
  415. end
  416.  
  417. if cast.able.rupture() and combo >=4 and ((cd.exsanguinate.remain() <= 2 and talent.exsanguinate and mode.special == 1) or not debuff.rupture.exists()) then
  418. if isChecked("Debug") then print("refresh rupture subt cds toggle on") end
  419. if cast.rupture() then return true end
  420. end
  421.  
  422. for i = 1, #enemies.yards5 do
  423. local thisUnit = enemies.yards5[i]
  424. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  425. if (combo == 4 and debuff.rupture.remain(thisUnit) < 6 or combo == 5 and debuff.rupture.remain(thisUnit) < 7.2 ) and cast.able.rupture()
  426. and (not debuff.rupture.exsang(thisUnit) or debuff.rupture.remain(thisUnit) <= ExsanguinatedBleedTickTime*2 and EmpoweredDotRefresh())
  427. and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 12 or true) --and (ttd(thisUnit) > 4 - debuff.rupture.remain(thisUnit) or ttd(thisUnit) > 9999)
  428. then
  429. if cast.able.rupture() then
  430. if cast.rupture(thisUnit) then
  431. if isChecked("Debug") then print("rupture refresh subt") end
  432. return true end
  433. end
  434. end
  435. end
  436. end
  437.  
  438.  
  439. for i = 1, #enemies.yards5 do
  440. local thisUnit = enemies.yards5[i]
  441. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  442. if combo >= 3 and not debuff.rupture.exists(thisUnit) and cast.able.rupture()
  443. and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 12 or true) --and (ttd(thisUnit) > 4 - debuff.rupture.remain(thisUnit) or ttd(thisUnit) > 9999)
  444. then
  445. if cast.able.rupture() then
  446. if cast.rupture(thisUnit) then
  447. if isChecked("Debug") then print("rupture cp>=3 no rupt subt") end
  448. return true end
  449. end
  450. end
  451. end
  452. end
  453.  
  454. for i = 1, #enemies.yards5 do
  455. local thisUnit = enemies.yards5[i]
  456. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  457. if debuff.garrote.exists(thisUnit) and cast.able.garrote()
  458. then
  459. if cast.garrote(thisUnit) then
  460. if isChecked("Debug") then print("apply garrote on rupt subt") end
  461. return true end
  462. end
  463. end
  464. end
  465.  
  466. if cast.able.envenom() and combo == ComboMaxSpend()-1 then
  467. if cast.envenom() then return true end
  468. if isChecked("Debug") then print("envenom stealth") end
  469. end
  470.  
  471.  
  472. end
  473. -- Action List - Interrupts
  474. local function actionList_Interrupts()
  475. for i = 1, #enemies.yards20 do
  476. local thisUnit = enemies.yards20[i]
  477. local distance = getDistance(thisUnit)
  478. if canInterrupt(thisUnit,getOptionValue("Interrupt At")) and hasThreat(thisUnit) then
  479. if distance < 5 then
  480. if cast.able.kick() and isChecked("Kick") then
  481. if cast.kick(thisUnit) then return end
  482. end
  483. if cd.kick.remain() ~= 0 or not cast.able.kick() then
  484. if cast.able.kidneyShot() and combo > 0 and isChecked("Kidneyshot") then
  485. if cast.kidneyShot(thisUnit) then return end
  486. end
  487. end
  488. end
  489. if (distance >= 5 and distance < 15) or (not cast.able.kick() and not cast.able.kidneyShot())
  490. then
  491. if cast.able.blind() and isChecked("Blind") then
  492. if cast.blind(thisUnit) then return end
  493. end
  494. end
  495. end
  496. end
  497. end -- End Action List - Interrupts
  498. local function actionList_Special()
  499.  
  500.  
  501. if mode.tbex == 1 then
  502. if cast.able.toxicBlade() and not stealthingRogue then
  503. if cast.toxicBlade() then return end
  504. end
  505. end
  506.  
  507. if isChecked("Toxic Blade on cd") and getDistance("target") <= 5 then
  508.  
  509. if not cd.vanish.exists() and debuff.garrote.remain() <= 5.4 and not cd.garrote.exists() and (isBoss("target") or isDummy("target")) then
  510. if gcd > 0.2 or power < 40 then return true end
  511. if cast.vanish() then return end
  512. end
  513.  
  514. if cast.able.toxicBlade() then
  515. if cast.toxicBlade() then return end
  516. end
  517.  
  518. if not stealthingRogue and debuff.rupture.exists("target") and cast.able.vendetta() and (isBoss("target") or isDummy("target")) then
  519. if cast.vendetta() then return end
  520. end
  521.  
  522. end
  523.  
  524.  
  525. if isChecked("Apply Deadly Poison in melee") then
  526. for i = 1, #enemies.yards5 do
  527. local thisUnit = enemies.yards5[i]
  528. if UnitDebuffID(thisUnit,268756) or
  529. ((debuff.garrote.exists(thisUnit) or debuff.rupture.exists(thisUnit)) and not debuff.deadlyPoison.exists(thisUnit))
  530. then
  531. --print("refresh poison melee")
  532. local firsttarget = GetObjectWithGUID(UnitGUID("target"))
  533. CastSpellByID(6603,thisUnit)
  534. CastSpellByID(6603,firsttarget)
  535. end
  536. end
  537. end
  538.  
  539.  
  540. -- if getDistance(units.dyn5) <= 5 then
  541.  
  542. -- if not debuff.garrote.exists("target") and comboDeficit >= 2 then
  543. -- if cast.vanish() then end
  544. -- if cast.garrote() then return end
  545. -- end
  546. -- --pool for vanish
  547. -- if cd.vendetta.remain() > 0 and cd.exsanguinate.remain() > 0 and not cd.garrote.exists() and ((debuff.garrote.applied("target") > 1 and debuff.garrote.remain("target") < gcd) or not debuff.garrote.exists("target")) and comboDeficit >= 2 then
  548. -- if debuff.garrote.remain("target") > 0 then return true end
  549.  
  550. -- end
  551.  
  552.  
  553.  
  554.  
  555.  
  556. -- end
  557. -- if cd.vendetta.remain() > 0 and cd.exsanguinate.remain() > 0 and not cd.garrote.exists() and not debuff.garrote.exists("target") then
  558. -- if comboDeficit >= 2 and not debuff.garrote.exists() then
  559.  
  560. -- end
  561.  
  562.  
  563.  
  564. -- if stealthingRogue and debuff.garrote.exists() and combo==ComboMaxSpend() and debuff.rupture.refresh() then
  565. -- if cast.rupture() then return end
  566. -- end
  567.  
  568. -- if stealthingRogue and (cast.last.rupture() or comboDeficit >= 2) then
  569. -- if cast.garrote() then return end
  570. -- end
  571. end
  572. local function actionList_Open()
  573. --if (opener == false and time < 1) and (isDummy("target") or isBoss("target")) and (cd.vanish > 0 or not buff.shadowBlades.exists()) then Print("Opener failed due do cds"); opener = true end
  574. if trait.shroudedSuffocation.rank() > 0 then
  575. if talent.exsanguinate then
  576. if not RUP1 and cast.able.rupture() then
  577. if cast.rupture() then RUP1 = true; end
  578. elseif RUP1 and not GAR1 and cast.able.garrote() then
  579. if cast.garrote() then GAR1 = true; end
  580. elseif GAR1 and not VEN1 and cast.able.vendetta() then
  581. useItem(13)
  582. useItem(14)
  583. if cast.vendetta() then VEN1 = true; end
  584. elseif VEN1 and not MUTI1 and cast.able.mutilate() then
  585. if cast.mutilate() then MUTI1 = true; end
  586. elseif MUTI1 and not RUP2 and cast.able.rupture() then
  587. if cast.rupture() then RUP2 = true; end
  588. elseif RUP2 and not EXS1 and cast.able.exsanguinate() then
  589. if cast.exsanguinate() then EXS1 = true; end
  590. Print("Opener Complete")
  591. opener = true
  592. toggle("Opener",2)
  593. return true
  594. end
  595. end
  596. if talent.toxicBlade then
  597. if not RUP1 and cast.able.rupture() then
  598. if cast.rupture() then RUP1 = true; end
  599. elseif RUP1 and not GAR1 and cast.able.garrote() then
  600. if cast.garrote() then GAR1 = true; end
  601. elseif GAR1 and not VEN1 and cast.able.vendetta() then
  602. useItem(13)
  603. useItem(14)
  604. if cast.vendetta() then VEN1 = true; end
  605. elseif VEN1 and not MUTI1 and cast.able.toxicBlade() then
  606. if cast.toxicBlade() then MUTI1 = true; end
  607. elseif MUTI1 and not RUP2 and cast.able.envenom() then
  608. if cast.envenom() then RUP2 = true; end
  609. elseif RUP2 and not EXS1 and cast.able.mutilate() then
  610. if cast.mutilate() then EXS1 = true; end
  611. Print("Opener Complete")
  612. opener = true
  613. toggle("Opener",2)
  614. return true
  615. end
  616. end
  617. end
  618.  
  619. if trait.shroudedSuffocation.rank() <= 0 then
  620. if talent.exsanguinate then
  621. if not RUP1 and cast.able.rupture() then
  622. if cast.rupture() then RUP1 = true; end
  623. elseif RUP1 and not GAR1 and cast.able.garrote() then
  624. if cast.garrote() then GAR1 = true;
  625. end
  626. elseif GAR1 and not VEN1 and cast.able.vendetta() then
  627. useItem(13)
  628. useItem(14)
  629. if cast.vendetta() then VEN1 = true; end
  630. elseif VEN1 and not MUTI1 and cast.able.mutilate() then
  631. if cast.mutilate() then MUTI1 = true; end
  632. elseif MUTI1 and not RUP2 and cast.able.rupture() then
  633. if cast.rupture() then RUP2 = true; end
  634. elseif RUP2 and not EXS1 and cast.able.exsanguinate() then
  635. if cast.exsanguinate() then EXS1 = true; end
  636. Print("Opener Complete")
  637. opener = true
  638. toggle("Opener",2)
  639. return true
  640. end
  641. end
  642. if talent.toxicBlade then
  643. if combo < 4 and not GAR1 and cast.able.mutilate() then
  644. if cast.mutilate() then RUP1 = true; end
  645. elseif not GAR1 and combo >= 4 and cast.able.rupture() then
  646. if cast.rupture() then GAR1 = true; end
  647. elseif GAR1 and not VEN1 and cast.able.vendetta() then
  648. useItem(13)
  649. useItem(14)
  650. if cast.vendetta() then VEN1 = true; end
  651. elseif VEN1 and not MUTI1 and cast.able.mutilate() then
  652. if cast.mutilate() then MUTI1 = true; end
  653. elseif MUTI1 and not RUP2 and cast.able.toxicBlade() then
  654. if cast.toxicBlade() then RUP2 = true; end
  655. Print("Opener Complete")
  656. opener = true
  657. toggle("Opener",2)
  658. return true
  659. end
  660. end
  661. end
  662.  
  663. end
  664. -- Action List - Cooldowns
  665. local function actionList_Cooldowns()
  666. if getDistance("target") < 5 then
  667. -- Potion
  668. -- potion,if=buff.bloodlust.react|target.time_to_die<=60|debuff.vendetta.up&cooldown.vanish.remains<5
  669.  
  670. -- Vendetta
  671. -- vendetta,if=!stealthed.rogue&dot.rupture.ticking&(!talent.subterfuge.enabled|!azerite.shrouded_suffocation.enabled|dot.garrote.pmultiplier>1)
  672. if mode.special == 1 then
  673. if talent.exsanguinate then
  674.  
  675.  
  676. if not debuff.rupture.exists() and combo >= 2 then
  677. if isChecked("Debug") then print("new rupt cd") end
  678. if cast.rupture() then return true end
  679. end
  680.  
  681. if cast.able.garrote() and debuff.garrote.applied(GetObjectWithGUID(UnitGUID("target"))) <= 1 and debuff.garrote.remain() <= 12 and cd.vanish.remain() >= 5 then
  682. if isChecked("Debug") then print("garrote new cd") end
  683. if cast.garrote() then return true end
  684. end
  685.  
  686. if cd.exsanguinate.remain() <= 5 and debuff.garrote.remain() > 10 and combo >= 4 then
  687. if isChecked("Debug") then print("rupt before exsa cd") end
  688. if cast.rupture() then return true end
  689. end
  690.  
  691. if power <= 30 and cast.able.vendetta() then
  692. if isChecked("Trinkets") then
  693. if canUse(13) then
  694. useItem(13)
  695. end
  696. if canUse(14) then
  697. useItem(14)
  698. end
  699. end
  700. if isChecked("Debug") then print("vendetta power use cd") end
  701. if cast.vendetta() then return true end
  702. end
  703.  
  704. if not cd.garrote.exists() and (debuff.garrote.applied(GetObjectWithGUID(UnitGUID("target"))) <= 1 or debuff.garrote.remain() <= 5.4) and cast.able.vanish() then
  705. if gcd >= 0.2 then return true end
  706. if isChecked("Debug") then print("vanish cd exsa") end
  707. if cast.vanish() then
  708. if actionList_Stealthed() then return true end
  709. end
  710. end
  711.  
  712. if debuff.garrote.remain() >= 5.4 and debuff.rupture.remain() >= 4 + (4 * comboMax) and (debuff.vendetta.exists() or cd.vendetta.remain() >=5) and (debuff.garrote.applied(GetObjectWithGUID(UnitGUID("target"))) <= 1 or cd.vanish.remain() >= 5) then
  713. if isChecked("Galecaller") then
  714. -- use_item,name=galecallers_boon,if=cooldown.vendetta.remains<=1&(!talent.subterfuge.enabled|dot.garrote.pmultiplier>1)|cooldown.vendetta.remains>45
  715. if canUse(13) and hasEquiped(159614, 13) then
  716. useItem(13)
  717. end
  718. if canUse(14) and hasEquiped(159614, 14) then
  719. useItem(14)
  720. end
  721. end
  722. if isChecked("Debug") then print("exsa cd") end
  723. if cast.exsanguinate() then return true end
  724. end
  725.  
  726. if cast.able.vendetta() then
  727. if isChecked("Trinkets") then
  728. if canUse(13) then
  729. useItem(13)
  730. end
  731. if canUse(14) then
  732. useItem(14)
  733. end
  734. end
  735. if isChecked("Debug") then print("vendetta cd") end
  736. if cast.vendetta() then return true end
  737. end
  738.  
  739. if cd.vanish.remain() >= 5 and cd.vendetta.remain() >= 5 and cd.exsanguinate.remain() >= 5 then
  740. toggle("Special",2)
  741. end
  742. end
  743.  
  744. if talent.toxicBlade then
  745.  
  746. if cast.able.vendetta() then
  747. if isChecked("Trinkets") then
  748. if canUse(13) then
  749. useItem(13)
  750. end
  751. if canUse(14) then
  752. useItem(14)
  753. end
  754. end
  755. if isChecked("Debug") then print("vendetta tb talent cd") end
  756. if cast.vendetta() then return true end
  757. end
  758.  
  759. if cast.able.toxicBlade() then
  760. if isChecked("Debug") then print("tb cd") end
  761. if cast.toxicBlade() then return true end
  762. end
  763.  
  764. if not cd.garrote.exists() and (debuff.garrote.applied(GetObjectWithGUID(UnitGUID("target"))) <= 1 or debuff.garrote.remain() <= 5.4) and cast.able.vanish() then
  765. if gcd >= 0.5 then return true end
  766. if power <= 70 then return true end
  767. if isChecked("Debug") then print("vanish tb cd") end
  768. if cast.vanish() then
  769. if actionList_Stealthed() then return end
  770. end
  771. end
  772.  
  773. if cd.vanish.remain() >= 5 and cd.vendetta.remain() >= 5 and cd.toxicBlade.remain() >= 5 then
  774. toggle("Special",2)
  775. end
  776. end
  777. end
  778. end
  779.  
  780. end -- End Action List - Cooldowns
  781. -- Action List - PreCombat
  782. local function actionList_PreCombat()
  783. if not inCombat and not stealth and cast.able.stealth() then
  784. if isChecked("Stealth") and (not IsResting() or isDummy("target")) then
  785. if getOptionValue("Stealth") == 1 then
  786. if cast.stealth("player") then return end
  787. end
  788. if #enemies.yards20 > 0 and getOptionValue("Stealth") == 2 and not IsResting() and GetTime()-leftCombat > lootDelay then
  789. for i = 1, #enemies.yards20 do
  790. local thisUnit = enemies.yards20[i]
  791. if UnitIsEnemy(thisUnit,"player") or isDummy("target") then
  792. if cast.stealth("player") then return end
  793. end
  794. end
  795. end
  796. end
  797. end
  798.  
  799.  
  800.  
  801. if not inCombat and buff.deadlyPoison.remain() <= 600 then
  802. if cast.deadlyPoison("player") then return end
  803. end
  804. end -- End Action List - PreCombat
  805. -- Action List - Finishers
  806.  
  807. -- Action List - Build
  808. local function actionList_Dot()
  809.  
  810. if not cd.garrote.exists() then
  811. for i = 1, #enemies.yards5 do
  812. local thisUnit = enemies.yards5[i]
  813. --print(debuff.garrote.remain(thisUnit))
  814. if debuff.garrote.remain(thisUnit) < 5.4
  815. and debuff.garrote.applied(thisUnit) <= 1
  816. and (not debuff.garrote.exsang(thisUnit) or (debuff.garrote.remain(thisUnit) <= 1.5 and EmpoweredDotRefresh()))
  817. --and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 12 or true)
  818. --and (mode.special == 2 or (mode.special == 1 and cd.vanish.exists())) --and (ttd(thisUnit) > ttdval - debuff.garrote.remain(thisUnit) or ttd(thisUnit) > 9999)
  819. then
  820. if comboDeficit >= 1 then
  821. if cast.pool.garrote() and debuff.garrote.count() <= 1 then return true end
  822. if isChecked("Debug") then print("garrote dot") end
  823. if cast.garrote(thisUnit) then return true end
  824. -- elseif comboDeficit <= 0 and debuff.rupture.remain(thisUnit) <= 7.2 and #enemies.yards9 <= 1 then
  825. -- if cast.rupture(thisUnit) then return end
  826. -- elseif comboDeficit <= 0 and #enemies.yards9 <= 1 then
  827. -- if cast.envenom("target") then return end
  828. end
  829. end
  830. end
  831. end
  832.  
  833.  
  834.  
  835. -- actions.dot+=/crimson_tempest,if=spell_targets>=2&remains<2+(spell_targets>=5)&combo_points>=4
  836.  
  837. if cast.able.crimsonTempest() and talent.crimsonTempest and combo >=4 and #enemies.yards9 >=2 and debuff.crimsonTempest.remain(units.dyn5) < 2 + (#enemies.yards9 >= 5 and 1 or 0) then
  838. for i = 1, #enemies.yards5 do
  839. local thisUnit = enemies.yards5[i]
  840. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  841. if power < 35 then return true end
  842. if getDistance(thisUnit) < 5 then
  843. if isChecked("Debug") then print("ct dot") end
  844. if cast.crimsonTempest("player") then return true end
  845. end
  846. end
  847. end
  848. end
  849.  
  850. if combo >= 4 then
  851.  
  852. for i = 1, #enemies.yards5 do
  853. local thisUnit = enemies.yards5[i]
  854. if multidot or (GetUnitIsUnit(thisUnit,units.dyn5) and not multidot) then
  855. if (combo == 4 and debuff.rupture.remain(thisUnit) < 6 or combo == 5 and debuff.rupture.remain(thisUnit) < 7.2 ) and UnitHealth(thisUnit) >= dotHPLimit
  856. and (debuff.rupture.applied(thisUnit) <= 1 or (debuff.rupture.remain(thisUnit) <= (debuff.rupture.exsang(thisUnit) and ExsanguinatedBleedTickTime or BleedTickTime) and EmpoweredDotRefresh()))
  857. and (not debuff.rupture.exsang(thisUnit) or debuff.rupture.remain(thisUnit) <= ExsanguinatedBleedTickTime*2 and EmpoweredDotRefresh()) --and (ttd(thisUnit) > 4 - debuff.rupture.remain(thisUnit) or ttd(thisUnit) > 9999)
  858. and (getOptionCheck("Enhanced Time to Die") and ttd(thisUnit) > 6 or true)
  859. then
  860. if cast.able.rupture() then
  861. if isChecked("Debug") then print("rupture dot") end
  862. if cast.rupture(thisUnit) then return true end
  863. end
  864. end
  865. end
  866. end
  867. end
  868.  
  869. if cast.able.envenom() and combo >= ComboMaxSpend() - 1 and (debuff.vendetta.exists("target") or debuff.rupture.exsang(units.dyn5) or debuff.toxicBlade.exists("target") or
  870. (talent.elaboratePlanning and buff.elaboratePlanning.exists() and buff.elaboratePlanning.remain() <= 0.3) or powerDeficit <= 25 + energyRegenCombined or #enemies.yards9 >= 2)
  871. and (not talent.exsanguinate or cd.exsanguinate.remain() > 2 or mode.special == 2)
  872. then
  873. if isChecked("Debug") then print("envenom dot") end
  874. if cast.envenom() then return true end
  875. end
  876.  
  877. end -- End Action List - Build
  878.  
  879. local function actionList_Direct()
  880. -- actions.direct=envenom,if=combo_points>=4+talent.deeper_stratagem.enabled&(debuff.vendetta.up|debuff.toxic_blade.up|energy.deficit<=25+variable.energy_regen_combined|spell_targets.fan_of_knives>=2)&(!talent.exsanguinate.enabled|cooldown.exsanguinate.remains>2)
  881.  
  882.  
  883. --pooling shit
  884.  
  885. if cast.able.fanOfKnives() and (buff.hiddenBlades.stack() >= 19 or #enemies.yards9 >= 4 + (stealthingRogue and 1 or 0) + (trait.DoubleDose.rank() > 2 and 1 or 0 )) then
  886. if isChecked("Debug") then print("fok aoe") end
  887. if cast.fanOfKnives("player") then return end
  888. end
  889. -- actions.direct+=/fan_of_knives,if=variable.use_filler&(buff.hidden_blades.stack>=19|spell_targets.fan_of_knives>=2+stealthed.rogue|buff.the_dreadlords_deceit.stack>=29)
  890. -- if cast.able.fanOfKnives() and (#enemies.yards9 >= 2 + (stealthingRogue and 1 or 0) or buff.hiddenBlades.stack() >= 19) then
  891. -- if cast.fanOfKnives() then return end
  892. -- end
  893.  
  894. if cast.able.fanOfKnives() and #enemies.yards9 >= 3 then
  895. for i = 1, #enemies.yards9 do
  896. local thisUnit = enemies.yards9[i]
  897. if not debuff.woundPoison.exists(thisUnit) then
  898. if isChecked("Debug") then print("fok refresh poison") end
  899. if cast.fanOfKnives("player") then return end
  900. end
  901. end
  902. end
  903.  
  904. if cast.able.mutilate() and #enemies.yards5 == 2 then
  905. for i = 1, #enemies.yards5 do
  906. local thisUnit = enemies.yards5[i]
  907. if not debuff.woundPoison.exists(thisUnit) then
  908. if isChecked("Debug") then print("muti refresh poison") end
  909. if cast.mutilate(thisUnit) then return end
  910. end
  911. end
  912. end
  913.  
  914. --muti
  915. if cast.able.mutilate() then
  916. if isChecked("Debug") then print("muti") end
  917. if cast.mutilate() then return end
  918. end
  919.  
  920. end -- End Action List - Finishers
  921. -- Action List - Opener
  922. -- local function actionList_Opener()
  923. -- -- Opener
  924.  
  925.  
  926. -- end
  927. -- Action List - Stealth
  928.  
  929. ---------------------
  930. --- Begin Profile ---
  931. ---------------------
  932. --Profile Stop | Pause
  933. if not inCombat and not hastar and profileStop==true then
  934. profileStop = false
  935. elseif (inCombat and profileStop == true) or (mode.opener == 1 and inCombat and buff.stealth.exists()) or pause() or (IsMounted() or IsFlying()) or mode.rotation == 2 then
  936. return true
  937. else
  938. --print(debuff.garrote.exsang("target"))
  939. -- print("RUP1 is "..tostring(RUP1))
  940. -- print("GAR1 is "..tostring(GAR1))
  941. -- print("VEN1 is "..tostring(VEN1))
  942. --print(trait.shroudedSuffocation.rank())
  943. --print(debuff.garrote.applied(units.dyn5))
  944. --print(waitshit())
  945. -- if ssbuggy ~= nil then
  946. -- print("___________________")
  947. --ngs()
  948. --print(gcd)
  949. ---print(getDistance("target"))
  950. --print(isInRange(1329,"target"))
  951. --print(ssbug)
  952. -- print(ssbuggytime1)
  953. -- if debuff.rupture.exsang["target"] or debuff.garrote.exsang["target"] then
  954. -- print("exsanguinated")
  955. -- end
  956. -- print("below rupt")
  957. -- print(debuff.rupture.exsang("target"))
  958. -- print("below garrote")
  959. --print(debuff.rupture.exsang(units.dyn5))
  960. -- end
  961. --print(#enemies.yards5)
  962. --print("target Distance is - "..getDistance("target")..". Current dist is - "..currentDist)
  963. --print(debuff.rupture.exsang(units.dyn5).."exsang rupt")
  964. --print(debuff.garrote.exsang(units.dyn5).."exsang garrote")
  965. -- print(tostring(Evaluate_Garrote_Target("target")).."evaluate")
  966. -- print(tostring(debuff.rupture.refresh(units.dyn5)).."rupture")
  967. -- print(energyRegenCombined)
  968. -- print(debuff.garrote.applied(units.dyn5).." garrote coef")
  969. -- print(debuff.rupture.applied(units.dyn5).." ruptu coef")
  970. --print("Garrote calc"..debuff.garrote.calc()..". Rupture calc: "..debuff.rupture.calc()..".Print applied garrote"..debuff.rupture.applied())
  971. --print(bleeds)
  972. -- print(debuff.rupture.remain())
  973. --print(rtbReroll())
  974. --print(br.player.power.energy.ttm())
  975. -- if cast.sinisterStrike() then return end
  976. -- print(getDistance("target"))
  977. --print(inRange(193315,"target"))
  978. -- print(IsSpellInRange(193315,"target"))
  979. --if castSpell("target",193315,true,false,false,true,false,true,false,false) then return end
  980. --RunMacroText("/cast Коварный удар")
  981. -----------------------
  982. --- Extras Rotation ---
  983. -----------------------
  984. --if actionList_Extras() then return end
  985. --------------------------
  986. --- Defensive Rotation ---
  987. --------------------------
  988. if actionList_Defensive() then return end
  989. ------------------------------
  990. --- Out of Combat Rotation ---
  991. ------------------------------
  992. if actionList_PreCombat() then return end
  993. ----------------------------
  994. --- Out of Combat Opener ---
  995. ----------------------------
  996.  
  997.  
  998. --print(singleTarget)
  999.  
  1000.  
  1001.  
  1002. -- if isValidUnit("target") and isChecked("Opener") then
  1003. -- if actionList_Opener() then return end
  1004. -- end
  1005. --------------------------------
  1006. --- In Combat - Blade Flurry ---
  1007. --------------------------------
  1008. -- Blade Flurry
  1009.  
  1010. --------------------------
  1011. --- In Combat Rotation ---
  1012. --------------------------
  1013. if inCombat or (isDummy("target") and cast.last.vanish()) then
  1014.  
  1015. print(#br.player.enemies.yards5)
  1016.  
  1017. --print(stealthingRogue)
  1018. if mode.opener == 1 then
  1019. if actionList_Open() then return true end
  1020.  
  1021. end
  1022.  
  1023. if not stealth and getDistance() <= 5 then
  1024. StartAttack(units.dyn5)
  1025. end
  1026.  
  1027.  
  1028. if not stealth and mode.opener == 2 then
  1029. if actionList_Special() then return end
  1030. if mode.interrupt == 1 then
  1031. if actionList_Interrupts() then return end
  1032. end
  1033. --StartAttack()
  1034. end
  1035. --print(garrotecountbuff.."garrote........"..getCombatTime())
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042. if stealthingRogue then
  1043. if actionList_Stealthed() then return true end
  1044. end
  1045.  
  1046. if not stealthingRogue and mode.special == 1 then
  1047. if actionList_Cooldowns() then return end
  1048. end
  1049.  
  1050.  
  1051. if not stealthingRogue then
  1052. if actionList_Dot() then return end
  1053.  
  1054. if usefiller() then
  1055. if actionList_Direct() then return end
  1056. end
  1057.  
  1058. if isChecked("Racial") and cast.able.racial() and ((race == "Nightborne" or race == "LightforgedDraenei")
  1059. or (race == "BloodElf" and br.player.power.energy.deficit() >= 15 + energyRegenCombined))
  1060. then
  1061. if cast.racial() then return true end
  1062. end
  1063. end
  1064.  
  1065. end -- End In Combat
  1066. end -- End Profile
  1067. end -- runRotation
  1068. local id = 259
  1069. if br.rotations[id] == nil then br.rotations[id] = {} end
  1070. tinsert(br.rotations[id],{
  1071. name = rotationName,
  1072. toggles = createToggles,
  1073. options = createOptions,
  1074. run = runRotation,
  1075. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement