Advertisement
Guest User

Untitled

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