From d412383429fe24c8080dc323dc4495fa7a96e90d Mon Sep 17 00:00:00 2001 From: "Ashley (CuteOne)" Date: Sun, 25 Aug 2024 15:58:42 -0400 Subject: [PATCH] Hunter - Updated Marksmanship Hunter to TWW 11.0.2 --- .../Marksmanship/MarksmanshipCuteOne.lua | 409 +++++++----------- System/Functions/Cast.lua | 12 +- System/Lists/Spells.lua | 325 ++++++++------ 3 files changed, 367 insertions(+), 379 deletions(-) diff --git a/Rotations/Hunter/Marksmanship/MarksmanshipCuteOne.lua b/Rotations/Hunter/Marksmanship/MarksmanshipCuteOne.lua index ef0fa92c3..68e7e1a40 100644 --- a/Rotations/Hunter/Marksmanship/MarksmanshipCuteOne.lua +++ b/Rotations/Hunter/Marksmanship/MarksmanshipCuteOne.lua @@ -1,6 +1,6 @@ ------------------------------------------------------- -- Author = CuteOne --- Patch = 10.2 +-- Patch = 11.0.2 -- Patch should be the latest patch you've updated the rotation for (i.e., 9.2.5) -- Coverage = 100% -- Coverage should be your estimated percent coverage for class mechanics (i.e., 100%) @@ -111,15 +111,10 @@ local function createOptions() br.ui:createCheckbox(section, "Racial") -- Barrage br.ui:createDropdownWithout(section, "Barrage", alwaysCdAoENever, 1, "|cffFFFFFFSet when to use ability.") - -- Death Chakram - br.ui:createDropdownWithout(section, "Death Chakram", alwaysCdAoENever, 1, - "|cffFFFFFFSet when to use ability.") -- Explosive Shot br.ui:createDropdownWithout(section, "Explosive Shot", alwaysCdAoENever, 1, "|cffFFFFFFSet when to use ability.") -- Salvo br.ui:createDropdownWithout(section, "Salvo", alwaysCdAoENever, 1, "|cffFFFFFFSet when to use ability.") - -- Stampede - br.ui:createDropdownWithout(section, "Stampede", alwaysCdAoENever, 1, "|cffFFFFFFSet when to use ability.") -- Trueshot br.ui:createDropdownWithout(section, "Trueshot", alwaysCdAoENever, 1, "|cffFFFFFFSet when to use ability.") -- Volley @@ -470,6 +465,29 @@ actionList.Cooldowns = function() end end -- End Action List - Cooldowns +-- Action List - Trinkets +actionList.Trinkets = function() + -- Variable - Sync Ready + -- variable,name=sync_ready,value=variable.trueshot_ready + var.syncReady = var.trueshotReady + + -- Variable - Sync Active + -- variable,name=sync_active,value=buff.trueshot.up + var.syncActive = buff.trueshot.exists() + + -- Variable - Sync Remains + -- variable,name=sync_remains,value=cooldown.trueshot.remains_guess + -- TODO + + -- Use Item - Use Off Gcd=1 + -- use_item,use_off_gcd=1,slot=trinket1,if=trinket.1.has_use_buff&(variable.sync_ready&(variable.trinket_1_stronger|trinket.2.cooldown.remains)|!variable.sync_ready&(variable.trinket_1_stronger&(variable.sync_remains>trinket.1.cooldown.duration%3&fight_remains>trinket.1.cooldown.duration+20|trinket.2.has_use_buff&trinket.2.cooldown.remains>variable.sync_remains-15&trinket.2.cooldown.remains-5fight_remains)|variable.trinket_2_stronger&(trinket.2.cooldown.remains&(trinket.2.cooldown.remains-5=20|trinket.2.cooldown.remains-5>=variable.sync_remains&(variable.sync_remains>trinket.1.cooldown.duration%3|trinket.1.cooldown.durationfight_remains)))|trinket.2.cooldown.ready&variable.sync_remains>20&variable.sync_remains20|trinket.2.cooldown.remains>20))|fight_remains<25&(variable.trinket_1_stronger|trinket.2.cooldown.remains) + -- TODO + + -- Use Item - Use Off Gcd=1 + -- use_item,use_off_gcd=1,slot=trinket2,if=trinket.2.has_use_buff&(variable.sync_ready&(variable.trinket_2_stronger|trinket.1.cooldown.remains)|!variable.sync_ready&(variable.trinket_2_stronger&(variable.sync_remains>trinket.2.cooldown.duration%3&fight_remains>trinket.2.cooldown.duration+20|trinket.1.has_use_buff&trinket.1.cooldown.remains>variable.sync_remains-15&trinket.1.cooldown.remains-5fight_remains)|variable.trinket_1_stronger&(trinket.1.cooldown.remains&(trinket.1.cooldown.remains-5=20|trinket.1.cooldown.remains-5>=variable.sync_remains&(variable.sync_remains>trinket.2.cooldown.duration%3|trinket.2.cooldown.durationfight_remains)))|trinket.1.cooldown.ready&variable.sync_remains>20&variable.sync_remains20|trinket.1.cooldown.remains>20))|fight_remains<25&(variable.trinket_2_stronger|trinket.1.cooldown.remains) + -- TODO +end -- End Action List - Trinkets + -- Action List - Trickshots actionList.Trickshots = function() -- Steady Shot @@ -482,14 +500,6 @@ actionList.Trickshots = function() return true end end - -- Kill Shot - -- kill_shot,if=buff.razor_fragments.up - if cast.able.killShot(var.lowestHPUnit) and var.useKillShot and buff.razorFragments.exists() then - if cast.killShot(var.lowestHPUnit) then - ui.debug("Casting Kill Shot [Trickshots - Razor Fragments]") - return true - end - end -- Explosive Shot -- explosive_shot if ui.alwaysCdAoENever("Explosive Shot", 3, #enemies.yards8t) and cast.able.explosiveShot(units.dyn40, "aoe", 3, 8) @@ -500,48 +510,6 @@ actionList.Trickshots = function() return true end end - -- Death Chakram - -- death_chakram - if ui.alwaysCdAoENever("Death Chakram", 3, #enemies.yards8t) and cast.able.deathChakram() then - if cast.deathChakram() then - ui.debug("Casting Death Chakram [Trickshots]") - return true - end - end - -- Stampede - -- stampede - if ui.alwaysCdAoENever("Stampede", 3, #enemies.yards40f) and cast.able.stampede() then - if cast.stampede() then - ui.debug("Casting Stampede [Trickshots]") - return true - end - end - -- Wailing Arrow - -- wailing_arrow - if ui.alwaysCdAoENever("Wailing Arrow", 3, #enemies.yards40f) and cast.able.wailingArrow(units.dyn40, "aoe", 3, 8) then - if cast.wailingArrow(units.dyn40, "aoe", 3, 8) then - ui.debug("Casting Wailing Arrow [Trickshots]") - return true - end - end - -- Serpent Sting - -- serpent_sting,target_if=min:dot.serpent_sting.remains,if=refreshable&talent.hydras_bite&!talent.serpentstalkers_trickery - if cast.able.serpentSting(var.lowestSerpentSting) and talent.serpentSting and debuff.serpentSting.refresh(var.lowestSerpentSting) - and talent.hydrasBite and not talent.serpentstalkersTrickery - then - if cast.serpentSting(var.lowestSerpentSting) then - ui.debug("Casting Serpent Sting [Trickshots - Hydra's Bite]") - return true - end - end - -- Barrage - -- barrage,if=active_enemies>7 - if ui.alwaysCdAoENever("Barrage", 3, #enemies.yards8t) and cast.able.barrage() and talent.barrage and #enemies.yards40f > 7 then - if cast.barrage() then - ui.debug("Casting Barrage [Trickshots]") - return true - end - end -- Volley -- volley if ui.alwaysCdAoENever("Volley", ui.value("Volley Units"), 8) and cast.able.volley("target", "ground", ui.value("Volley Units"), 8) @@ -552,39 +520,13 @@ actionList.Trickshots = function() return true end end - -- Rapid Fire - -- rapid_fire,if=buff.trick_shots.remains>=execute_time&talent.surging_shots - if cast.able.rapidFire() and buff.trickShots.remains() >= cast.time.rapidFire() and talent.surgingShots then - if cast.rapidFire() then - ui.debug("Casting Rapid Fire [Trickshots]") - return true - end - end - -- Trueshot - -- trueshot,if=variable.trueshot_ready - if ui.alwaysCdAoENever("Trueshot", 3, #enemies.yards40) and cast.able.trueshot("player") and var.trueshotReady then - if cast.trueshot("player") then - ui.debug("Casting Trueshot [Trickshots]") - return true - end - end - -- Aimed Shot - -- aimed_shot,target_if=min:dot.serpent_sting.remains+action.serpent_sting.in_flight_to_target*99,if=talent.serpentstalkers_trickery&(buff.trick_shots.remains>=execute_time&(buff.precise_shots.down|buff.trueshot.up|full_recharge_time= cast.time.aimedShot() - and (not buff.preciseShots.exists() or buff.trueshot.exists() or charges.aimedShot.timeTillFull() < cast.time.aimedShot() + unit.gcd())))) - then - if cast.aimedShot(var.minSerpentStingInFlightUnit) then - ui.debug("Casting Aimed Shot [Trickshots - Serpentstalker's Trickery]") - return true - end - end - -- Aimed Shot - -- aimed_shot,target_if=max:debuff.latent_poison.stack,if=(buff.trick_shots.remains>=execute_time&(buff.precise_shots.down|buff.trueshot.up|full_recharge_time= cast.time.aimedShot() - and (not buff.preciseShots.exists() or buff.trueshot.exists() or charges.aimedShot.timeTillFull() < cast.time.aimedShot() + unit.gcd())))) + -- Barrage + -- barrage,if=talent.rapid_fire_barrage&buff.trick_shots.remains>=execute_time + if ui.alwaysCdAoENever("Barrage", 3, #enemies.yards8t) and cast.able.barrage() and talent.barrage and talent.rapidFireBarrage + and buff.trickShots.remains() >= cast.time.barrage() then - if cast.aimedShot(var.maxLatentPoisonUnit) then - ui.debug("Casting Aimed Shot [Trickshots]") + if cast.barrage() then + ui.debug("Casting Barrage [Trickshots]") return true end end @@ -596,53 +538,53 @@ actionList.Trickshots = function() return true end end - -- Chimaera Shot - -- chimaera_shot,if=buff.trick_shots.up&buff.precise_shots.up&focus>cost+action.aimed_shot.cost&active_enemies<4 - if cast.able.chimaeraShot() and buff.trickShots.exists() and buff.preciseShots.exists() - and focus() > var.chimaeraCost + var.aimedShotCost and #enemies.yards40f < 4 - then - if cast.chimaeraShot() then - ui.debug("Casting Chimaera Shot [Trickshots]") + -- Kill Shot + -- kill_shot,if=buff.razor_fragments.up + if cast.able.killShot(var.lowestHPUnit) and var.useKillShot and buff.razorFragments.exists() then + if cast.killShot(var.lowestHPUnit) then + ui.debug("Casting Kill Shot [Trickshots - Razor Fragments]") return true end end - -- Multishot - -- multishot,if=buff.trick_shots.down|(buff.precise_shots.up|buff.bulletstorm.stack=10)&focus>cost+action.aimed_shot.cost - if cast.able.multishot(units.dyn40, "aoe", 1, 10) and ((not buff.trickShots.exists() or (buff.preciseShots.exists() - or buff.bulletstorm.stack() == 10) and focus() > var.multishotCost + var.aimedShotCost)) - then - if cast.multishot(units.dyn40, "aoe", 1, 10) then - ui.debug("Casting Multishot [Trickshots - No Trick Shorts | Precise Shots / Bulletstorm]") + -- Black Arrow + -- black_arrow + if cast.able.blackArrow() then + if cast.blackArrow() then + ui.debug("Casting Black Arrow [Trickshots]") return true end end - -- Serpent Sting - -- serpent_sting,target_if=min:dot.serpent_sting.remains,if=refreshable&talent.poison_injection&!talent.serpentstalkers_trickery - if cast.able.serpentSting(var.lowestSerpentSting) and debuff.serpentSting.refresh(var.lowestSerpentSting) and talent.poisonInjection and not talent.serpentstalkersTrickery then - if cast.serpentSting(var.lowestSerpentSting) then - ui.debug("Casting Serpent Sting [Trickshots]") + -- Wailing Arrow + -- wailing_arrow,if=buff.precise_shots.down + if ui.alwaysCdAoENever("Wailing Arrow", 3, #enemies.yards40f) and talent.wailingArrow and cast.able.wailingArrow(units.dyn40, "aoe", 3, 8) and not buff.preciseShots.exists() then + if cast.wailingArrow(units.dyn40, "aoe", 3, 8) then + ui.debug("Casting Wailing Arrow [Trickshots]") return true end end - -- Steel Trap - -- steel_trap,if=buff.trueshot.down - if cast.able.steelTrap() and not buff.trueshot.exists() then - if cast.steelTrap() then - ui.debug("Casting Steel Trap [Trickshots]") + -- Trueshot + -- trueshot,if=variable.trueshot_ready + if ui.alwaysCdAoENever("Trueshot", 3, #enemies.yards40) and cast.able.trueshot("player") and var.trueshotReady then + if cast.trueshot("player") then + ui.debug("Casting Trueshot [Trickshots]") return true end end - -- Kill Shot - -- kill_shot,if=focus>cost+action.aimed_shot.cost - if cast.able.killShot(var.lowestHPUnit) and var.useKillShot and focus() > cast.cost.killShot() + var.aimedShotCost then - if cast.killShot(var.lowestHPUnit) then - ui.debug("Casting Kill Shot [Trickshots]") + -- Aimed Shot + -- aimed_shot,target_if=min:dot.serpent_sting.remains+action.serpent_sting.in_flight_to_target*99,if=buff.trick_shots.remains>=execute_time&buff.precise_shots.down + if cast.able.aimedShot(var.minSerpentStingInFlightUnit) and not unit.moving("player") + and buff.trickShots.remains() >= cast.time.aimedShot() and not buff.preciseShots.exists() + then + if cast.aimedShot(var.minSerpentStingInFlightUnit) then + ui.debug("Casting Aimed Shot [Trickshots]") return true end end -- Multishot - -- multishot,if=focus>cost+action.aimed_shot.cost - if cast.able.multishot(units.dyn40, "aoe", 1, 10) and focus() > var.multishotCost + var.aimedShotCost then + -- multishot,if=buff.trick_shots.down|buff.precise_shots.up|focus>cost+action.aimed_shot.cost + if cast.able.multishot(units.dyn40, "aoe", 1, 10) + and (not buff.trickShots.exists() or buff.preciseShots.exists() or focus() > var.multishotCost + var.aimedShotCost) + then if cast.multishot(units.dyn40, "aoe", 1, 10) then ui.debug("Casting Multishot [Trickshots]") return true @@ -650,12 +592,18 @@ actionList.Trickshots = function() end -- Bag Of Tricks -- bag_of_tricks,if=buff.trueshot.down + if ui.checked("Racial") and unit.race() == "Vulpera" and cast.able.bagOfTricks() and not buff.trueshot.exists() then + if cast.bagOfTricks() then + ui.debug("Casting Bag Of Tricks [St]") + return true + end + end -- Steady Shot -- steady_shot if cast.able.steadyShot() and unit.ttd(units.dyn40) > cast.time.steadyShot() and ((not buff.preciseShots.exists() or focus() < 20) and focus() <= var.multishotCost + var.aimedShotCost) and cast.timeSinceLast.steadyShot() > unit.gcd("true") and not cast.current.steadyShot() - then -- and power.focus.amount() <= cast.cost.arcaneShot() + var.aimedShotCost then + then if cast.steadyShot() then ui.debug("Casting Steady Shot [Trickshots]") return true @@ -666,91 +614,53 @@ end -- End Action List - Trickshots -- Action List - St actionList.St = function() -- Steady Shot - -- steady_shot,if=talent.steady_focus&steady_focus_count&(buff.steady_focus.remains<8|buff.steady_focus.down&!buff.trueshot.up) + -- steady_shot,if=talent.steady_focus&steady_focus_count&buff.steady_focus.remains<8 if cast.able.steadyShot() and cast.timeSinceLast.steadyShot() > unit.gcd("true") and not cast.current.steadyShot() - and ((talent.steadyFocus and buff.steadyFocus.count() < 2 and (buff.steadyFocus.remains() < 8 or not buff.steadyFocus.exists() and not buff.trueshot.exists()))) + and talent.steadyFocus and buff.steadyFocus.count() < 2 and buff.steadyFocus.remains() < 8 then if cast.steadyShot() then ui.debug("Casting Steady Shot [St - Steady Focus]") return true end end - -- Rapid Fire - -- rapid_fire,if=buff.trick_shots.remains45|fight_remains<12 - if ui.alwaysCdAoENever("Volley", ui.value("Volley Units"), 8) and cast.able.volley("target", "ground", ui.value("Volley Units"), 8) - and ui.mode.volley == 1 and (#enemies.yards8t >= ui.value("Volley Units")) - and ((buff.salvo.exists() or var.trueshotReady or cd.trueshot.remains() > 45 --[[or unit.ttdGroup(40) < 12]])) - then - if cast.volley("target", "ground", ui.value("Volley Units"), 8) then - ui.debug("Casting Volley [St]") - return true - end - end - -- Serpent Sting - -- serpent_sting,target_if=min:dot.serpent_sting.remains,if=refreshable&!talent.serpentstalkers_trickery&buff.trueshot.down - if cast.able.serpentSting(var.lowestSerpentSting) and debuff.serpentSting.refresh(units.dyn40) and not talent.serpentstalkersTrickery and not buff.trueshot.exists() then - if cast.serpentSting(var.lowestSerpentSting) then - ui.debug("Casting Serpent Sting [St]") + -- Black Arrow + -- black_arrow + if cast.able.blackArrow() then + if cast.blackArrow() then + ui.debug("Casting Black Arrow [St]") return true end end -- Explosive Shot - -- explosive_shot - if ui.alwaysCdAoENever("Explosive Shot", 1, #enemies.yards8t) and cast.able.explosiveShot(units.dyn40, "aoe", 1, 8) and talent.explosiveShot and unit.ttd(units.dyn40) > 3 then + -- explosive_shot,if=active_enemies>1 + if ui.alwaysCdAoENever("Explosive Shot", 1, #enemies.yards8t) and cast.able.explosiveShot(units.dyn40, "aoe", 1, 8) + and talent.explosiveShot and unit.ttd(units.dyn40) > 3 and #enemies.yards8t > 1 then if cast.explosiveShot(units.dyn40, "aoe", 1, 8) then - ui.debug("Casting Explosive Shot [St]") - return true - end - end - -- Stampede - -- stampede - if ui.alwaysCdAoENever("Stampede", 1, #enemies.yards40f) and cast.able.stampede() then - if cast.stampede() then - ui.debug("Casting Stampede [St]") + ui.debug("Casting Explosive Shot [St - Multiple Targets]") return true end end - -- Death Chakram - -- death_chakram - if ui.alwaysCdAoENever("Death Chakram", 1, #enemies.yards8t) and cast.able.deathChakram() then - if cast.deathChakram() then - ui.debug("Casting Death Chakram [St]") - return true - end - end - -- Wailing Arrow - -- wailing_arrow,if=active_enemies>1 - if ui.alwaysCdAoENever("Wailing Arrow", 2, #enemies.yards40f) - and cast.able.wailingArrow(units.dyn40, "aoe", 2, 8) and #enemies.yards40f > 1 - then - if cast.wailingArrow(units.dyn40, "aoe", 2, 8) then - ui.debug("Casting Wailing Arrow [St]") + -- Volley + -- volley + if ui.alwaysCdAoENever("Volley", 1, 8) and cast.able.volley("target", "ground", 1, 8) and ui.mode.volley == 1 then + if cast.volley("target", "ground", 1, 8) then + ui.debug("Casting Volley [St]") return true end end -- Rapid Fire - -- rapid_fire,if=(talent.surging_shots|action.aimed_shot.full_recharge_time>action.aimed_shot.cast_time+cast_time)&(focus+cast_regen cast.time.aimedShot() + cast.time.rapidFire()) - and (focus() + cast.regen.rapidFire() < focus.max()))) - then + -- rapid_fire,if=!talent.lunar_storm|(!cooldown.lunar_storm.remains|cooldown.lunar_storm.remains>5) + if cast.able.rapidFire() and (not talent.lunarStorm or (not cd.lunarStorm.exists() or cd.lunarStorm.remains() > 5)) then if cast.rapidFire() then - ui.debug("Casting Rapid Fire [St]") + ui.debug("Casting Rapid Fire [St - No Lunar Storm]") return true end end @@ -770,70 +680,91 @@ actionList.St = function() return true end end + -- Wailing Arrow + -- wailing_arrow + if ui.alwaysCdAoENever("Wailing Arrow", 1, #enemies.yards40f) and talent.wailingArrow and cast.able.wailingArrow(units.dyn40, "aoe", 1, 8) then + if cast.wailingArrow(units.dyn40, "aoe", 1, 8) then + ui.debug("Casting Wailing Arrow [St]") + return true + end + end -- Aimed Shot - -- aimed_shot,target_if=min:dot.serpent_sting.remains+action.serpent_sting.in_flight_to_target*99,if=talent.serpentstalkers_trickery&(buff.precise_shots.down|(buff.trueshot.up|full_recharge_timeexecute_time&active_enemies>1) - if cast.able.aimedShot(var.minSerpentStingInFlightUnit) and not unit.moving("player") and ((talent.serpentstalkersTrickery - and (not buff.preciseShots.exists() or (buff.trueshot.exists() or charges.aimedShot.timeTillFull() < unit.gcd() + cast.time.aimedShot()) - and (not talent.chimaeraShot or #enemies.yards40f < 2 or var.caActive) or buff.trickShots.remains() > cast.time.aimedShot() and #enemies.yards40f > 1))) + -- aimed_shot,target_if=min:dot.serpent_sting.remains+action.serpent_sting.in_flight_to_target*99,if=buff.precise_shots.down|(buff.trueshot.up|full_recharge_timeexecute_time&active_enemies>1) + if cast.able.aimedShot(var.minSerpentStingInFlightUnit) and not unit.moving("player") + and (not buff.preciseShots.exists() or (buff.trueshot.exists() or charges.aimedShot.timeTillFull() < unit.gcd() + cast.time.aimedShot()) + and (#enemies.yards40f < 2 or not talent.chimaeraShot) or (buff.trickShots.remains() > cast.time.aimedShot() and #enemies.yards40f > 1)) then if cast.aimedShot(var.minSerpentStingInFlightUnit) then - ui.debug("Casting Aimed Shot [St - Serpentstalker's Trickery]") + ui.debug("Casting Aimed Shot [St]") return true end end - -- Aimed Shot - -- aimed_shot,target_if=max:debuff.latent_poison.stack,if=buff.precise_shots.down|(buff.trueshot.up|full_recharge_timeexecute_time&active_enemies>1 - if cast.able.aimedShot(var.maxLatentPoisonUnit) and not unit.moving("player") and ((not buff.preciseShots.exists() or (buff.trueshot.exists() or charges.aimedShot.timeTillFull() < unit.gcd() + cast.time.aimedShot()) - and (not talent.chimaeraShot or #enemies.yards40f < 2 or var.caActive) or buff.trickShots.remains() > cast.time.aimedShot() and #enemies.yards40f > 1)) + -- Steady Shot + -- steady_shot,if=talent.steady_focus&buff.steady_focus.down&buff.trueshot.down + if cast.able.steadyShot() and cast.timeSinceLast.steadyShot() > unit.gcd("true") and not cast.current.steadyShot() + and talent.steadyFocus and not buff.steadyFocus.exists() and not buff.trueshot.exists() then - if cast.aimedShot(var.maxLatentPoisonUnit) then - ui.debug("Casting Aimed Shot [St]") + if cast.steadyShot() then + ui.debug("Casting Steady Shot [St - No Steady Focus]") return true end end - -- Wailing Arrow - -- wailing_arrow,if=buff.trueshot.down - if ui.alwaysCdAoENever("Wailing Arrow", 1, #enemies.yards40f) - and cast.able.wailingArrow(units.dyn40, "aoe", 1, 8) and not buff.trueshot.exists() then - if cast.wailingArrow(units.dyn40, "aoe", 1, 8) then - ui.debug("Casting Wailing Arrow [St - No Trueshot]") + -- Chimaera Shot + -- chimaera_shot,if=buff.precise_shots.up + if cast.able.chimaeraShot() and buff.preciseShots.exists() then + if cast.chimaeraShot() then + ui.debug("Casting Chimaera Shot [St]") return true end end - -- Kill Command - -- kill_command,if=buff.trueshot.down - if cast.able.killCommand() and not buff.trueshot.exists() then - if cast.killCommand() then - ui.debug("Casting Kill Command [St]") + -- Arcane Shot + -- arcane_shot,if=buff.precise_shots.up + if cast.able.arcaneShot() and buff.preciseShots.exists() then + if cast.arcaneShot() then + ui.debug("Casting Arcane Shot [St - Precise Shots]") return true end end - -- Steel Trap - -- steel_trap - if cast.able.steelTrap() then - if cast.steelTrap() then - ui.debug("Casting Steel Trap [St]") + -- Kill Shot + -- kill_shot + if cast.able.killShot(var.lowestHPUnit) and var.useKillShot then + if cast.killShot(var.lowestHPUnit) then + ui.debug("Casting Kill Shot [St]") return true end end - -- Chimaera Shot - -- chimaera_shot,if=buff.precise_shots.up|focus>cost+action.aimed_shot.cost - if cast.able.chimaeraShot() and ((buff.preciseShots.exists() or focus() > var.chimaeraCost + var.aimedShotCost)) then - if cast.chimaeraShot() then - ui.debug("Casting Chimaera Shot [St]") + -- Barrage + -- barrage,if=talent.rapid_fire_barrage + if ui.alwaysCdAoENever("Barrage", 1, #enemies.yards8t) and cast.able.barrage() and talent.barrage and talent.rapidFireBarrage then + if cast.barrage() then + ui.debug("Casting Barrage [St]") + return true + end + end + -- Explosive Shot + -- explosive_shot + if ui.alwaysCdAoENever("Explosive Shot", 1, #enemies.yards8t) and cast.able.explosiveShot(units.dyn40, "aoe", 1, 8) and talent.explosiveShot and unit.ttd(units.dyn40) > 3 then + if cast.explosiveShot(units.dyn40, "aoe", 1, 8) then + ui.debug("Casting Explosive Shot [St]") return true end end -- Arcane Shot - -- arcane_shot,if=buff.precise_shots.up|focus>cost+action.aimed_shot.cost - if cast.able.arcaneShot() and ((buff.preciseShots.exists() or focus() > cast.cost.arcaneShot() + var.aimedShotCost)) then + -- arcane_shot,if=focus>cost+action.aimed_shot.cost + if cast.able.arcaneShot() and focus() > cast.cost.arcaneShot() + var.aimedShotCost then if cast.arcaneShot() then - ui.debug("Casting Arcane Shot [St]") + ui.debug("Casting Arcane Shot [St - High Focus]") return true end end -- Bag Of Tricks -- bag_of_tricks,if=buff.trueshot.down + if ui.checked("Racial") and unit.race() == "Vulpera" and cast.able.bagOfTricks() and not buff.trueshot.exists() then + if cast.bagOfTricks() then + ui.debug("Casting Bag Of Tricks [St]") + return true + end + end -- Steady Shot -- steady_shot if cast.able.steadyShot() and unit.ttd(units.dyn40) > cast.time.steadyShot() @@ -849,8 +780,14 @@ end -- End Action List - St -- Action List - Pre-Combat actionList.PreCombat = function() if not unit.inCombat() and not buff.feignDeath.exists() then + -- Module - Phial Up + -- flask + module.PhialUp() + -- Module - Imbue Up + -- augmentation + module.ImbueUp() -- Summon Pet - -- summon_pet + -- summon_pet,if=!talent.lone_wolf if actionList.PetManagement() then ui.debug("") return true @@ -864,14 +801,6 @@ actionList.PreCombat = function() return true end end - -- Use Item - Algethar Puzzle Box - -- use_item,name=algethar_puzzle_box - if use.able.algetharPuzzleBox() then - if use.algetharPuzzleBox() then - ui.debug("Using Algethar Puzzle Box [Precombat]") - return true - end - end -- Aimed Shot -- aimed_shot,if=active_enemies<3&(!talent.volley|active_enemies<2) if cast.able.aimedShot("target") and not unit.moving("player") @@ -883,16 +812,6 @@ actionList.PreCombat = function() return true end end - -- Wailing Arrow - -- wailing_arrow,if=active_enemies>2|!talent.steady_focus - if ui.alwaysCdAoENever("Wailing Arrow", 1, #enemies.yards40f) and cast.able.wailingArrow("target") and not unit.moving("player") - and ((#enemies.yards40f > 2 or not talent.steadyFocus)) - then - if cast.wailingArrow("target") then - ui.debug("Casting Wailing Arrow [Precombat]") - return true - end - end -- Steady Shot -- steady_shot,if=active_enemies>2|talent.volley&active_enemies=2 if cast.able.steadyShot("target") and ((#enemies.yards40f > 2 or talent.volley and #enemies.yards40f == 2)) then @@ -929,6 +848,9 @@ actionList.Combat = function() -- Call Action List - Cds -- call_action_list,name=cds if actionList.Cooldowns() then return true end + -- Call Action List - Trinkets + -- call_action_list,name=trinkets + if actionList.Trinkets() then return true end -- Call Action List - St -- call_action_list,name=st,if=active_enemies<3|!talent.trick_shots if (ui.useST(10, 3, "target") or not talent.trickShots) then @@ -982,12 +904,8 @@ local function runRotation() if var.profileStop == nil then var.profileStop = false end var.haltProfile = (unit.inCombat() and var.profileStop) or (unit.mounted() or unit.flying()) or ui.pause() or buff.feignDeath.exists() or ui.mode.rotation == 4 - var.caActive = talent.carefulAim and unit.hp(units.dyn40) > 70 - -- target_if=min:dot.serpent_sting.remains - var.lowestSerpentSting = debuff.serpentSting.lowest(40, "remain") or "target" - var.serpentInFlight = cast.inFlight.serpentSting() and 1 or 0 + var.serpentInFlight = 0 --cast.inFlight.serpentSting() and 1 or 0 var.aimedShotCost = talent.aimedShot and cast.cost.aimedShot() or 0 - var.chimaeraCost = talent.chimaeraShot and cast.cost.chimaeraShot() or 0 var.multishotCost = talent.multishot and cast.cost.multishot() or 0 -- Variable - Trueshot Ready @@ -1009,18 +927,6 @@ local function runRotation() end end - -- target_if=max:debuff.latent_poison.stack - var.maxLatentPoison = 0 - var.maxLatentPoisonUnit = "target" - for i = 1, #enemies.yards40f do - local thisUnit = enemies.yards40f[i] - local thisCondition = debuff.latentPoison.count(thisUnit) - if thisCondition > var.maxLatentPoison then - var.maxLatentPoison = thisCondition - var.maxLatentPoisonUnit = thisUnit - end - end - var.lowestHP = 100 var.lowestHPUnit = "target" for i = 1, #enemies.yards40f do @@ -1034,7 +940,6 @@ local function runRotation() var.useKillShot = unit.hp(var.lowestHPUnit) < 20 or buff.deathblow.exists() - -- ui.chatOverlay("Is Target: "..tostring(unit.isUnit(var.lowestHPUnit,"target")).." - Name: "..tostring(unit.name(var.lowestHPUnit))) --------------------- --- Begin Profile --- --------------------- diff --git a/System/Functions/Cast.lua b/System/Functions/Cast.lua index 402ff495d..4b23743b8 100644 --- a/System/Functions/Cast.lua +++ b/System/Functions/Cast.lua @@ -887,12 +887,12 @@ function br.createCastFunction(thisUnit, castType, minUnits, effectRng, spellID, or (castType == "rect" and br.getEnemiesInRect(effectRng, maxRange)) or 0 if enemyCount >= minUnits and (br.isSafeToAoE(spellID, thisUnit, effectRng, minUnits, castType, enemyCount) or br.isDummy("target")) then - if castType == "ground" then - if debug then return true end - return br.castGround(thisUnit, spellCast, maxRange, minRange, effectRng, castTime) - else - return castingSpell(thisUnit, spellID, spellName, icon, castType, printReport, debug) - end + -- if castType == "ground" then + -- if debug then return true end + -- return br.castGround(thisUnit, spellCast, maxRange, minRange, effectRng, castTime) + -- else + return castingSpell(thisUnit, spellID, spellName, icon, castType, printReport, debug) + -- end else if castType == "cone" then return printReport(false, "Below Min Units Cone", enemyCount) end if castType == "rect" then return printReport(false, "Below Min Units Rect", enemyCount) end diff --git a/System/Lists/Spells.lua b/System/Lists/Spells.lua index 581bf5d40..6c1b79a88 100644 --- a/System/Lists/Spells.lua +++ b/System/Lists/Spells.lua @@ -1761,20 +1761,48 @@ br.lists.spells = { }, talents = { - animalCompanion = 267116, - barrage = 120360, - bindingShot = 109248, - bloodshed = 321530, - direBeast = 120679, - killerCobra = 199532, - killerInstinct = 273887, - oneWithThePack = 199528, - scentOfBlood = 193532, - stampede = 201430, - stomp = 199530, - thrillOfTheHunt = 257944, - killCleave = 378207, - wailingArrow = 392060, + animalCompanion = 267116, + barrage = 120360, + beastOfOpportunity = 445700, + bindingShot = 109248, + blackArrow = 430703, + bloodshed = 321530, + corneredPrey = 445702, + coveringFire = 445715, + cullTheHerd = 445717, + darkChains = 430712, + darkEmpowerment = 430718, + darknessCalls = 430722, + deathShade = 430711, + denRecovery = 445710, + direBeast = 120679, + embraceTheShadows = 430704, + frenziedTear = 445696, + furiousAssault = 445699, + graveReaper = 430719, + killCleave = 378207, + killerCobra = 199532, + killerInstinct = 273887, + howlOfThePack = 445707, + oneWithThePack = 199528, + overshadow = 430716, + packAssault = 445721, + packCoordination = 445505, + scatteredPrey = 445768, + scentOfBlood = 193532, + shadowErasure = 430720, + shadowHounds = 430707, + shadowLash = 430717, + shadowSurge = 430714, + smokeScreen = 430709, + stampede = 201430, + stomp = 199530, + thrillOfTheHunt = 257944, + tirelessHunt = 445701, + viciousHunt = 445404, + wailingArrow = 392060, + wildAttacks = 445708, + witheringFire = 430715, }, traits = { danceOfDeath = 274441, @@ -1817,49 +1845,80 @@ br.lists.spells = { counterShot = 147362, }, talents = { - aimedShot = 19434, -- - bombardment = 405804, -- - bulletstorm = 389019, -- - bullseye = 204089, -- - burstingShot = 186387, -- - callingTheShots = 260404, -- - carefulAim = 260228, -- - chimaeraShot = 342049, -- - crackshot = 321293, -- - deadEye = 321460, -- - deathblow = 378769, -- - eagletalonsTrueFocus = 389449, -- - focusedAim = 378767, -- - heavyAmmo = 378910, -- - huntersKnowledge = 378766, -- - improvedSteadyShot = 321018, -- - inTheRhythm = 407404, -- - killerAccuracy = 378765, -- - legacyOfTheWindrunners = 406425, -- - lightAmmo = 378913, -- - lockAndLoad = 194595, -- - loneWolf = 155228, -- - multishot = 257620, -- - preciseShots = 260240, -- - quickLoad = 378771, -- - rapidFire = 257044, -- - razorFragments = 384790, -- - readiness = 389865, -- - salvo = 400456, -- - serpentstalkersTrickery = 378888, -- - sharpshooter = 378907, -- - steadyFocus = 193533, -- - streamline = 260367, -- - surgingShots = 391559, -- - tacticalReload = 400472, -- - targetPractice = 321287, -- - trickShots = 257621, -- - trueshot = 288613, -- - unerringVision = 386878, -- - volley = 260243, -- - wailingArrow = 392060, -- - windrunnersBarrage = 389866, -- - windrunnersGuidance = 378905, -- + aimedShot = 19434, + barrage = 120360, + bindingShackles = 321468, + blackArrow = 430703, + bulletstorm = 389019, + bullseye = 204089, + callingTheShots = 260404, + carefulAim = 260228, + catchOut = 451516, + chimaeraShot = 342049, + crackshot = 321293, + crescentSteel = 451530, + darkChains = 430712, + darkEmpowerment = 430718, + darknessCalls = 430722, + deathShade = 430711, + deathblow = 378769, + dontLookBack = 450373, + eagletalonsTrueFocus = 389449, + embraceTheShadows = 430704, + explosiveShot = 212431, + extrapolatedShots = 450374, + eyesClosed = 450381, + fanTheHammer = 459794, + focusedAim = 378767, + graveReaper = 430719, + heavyAmmo = 378910, + hydrasBite = 260241, + improvedSteadyShot = 321018, + inTheRhythm = 407404, + invigoratingPulse = 450379, + killShot = 53351, + killZone = 459921, + killerAccuracy = 378765, + legacyOfTheWindrunners = 406425, + lightAmmo = 378913, + lockAndLoad = 194595, + loneWolf = 155228, + lunarStorm = 450385, + masterMarksman = 260309, + multishot = 257620, + nightHunter = 378766, + overshadow = 430716, + overwatch = 450384, + penetratingShots = 459783, + preciseShots = 260240, + rapidFire = 257044, + rapidFireBarrage = 459800, + razorFragments = 384790, + readiness = 389865, + releaseAndReload = 450376, + salvo = 400456, + sentinel = 450369, + sentinelPrecision = 450375, + sentinelWatch = 451546, + serpentstalkersTrickery = 378888, + shadowErasure = 430720, + shadowHounds = 430707, + shadowLash = 430717, + shadowSurge = 430714, + sideline = 450378, + smallGameHunter = 459802, + smokeScreen = 430709, + steadyFocus = 193533, + streamline = 260367, + surgingShots = 391559, + symphonicArsenal = 450383, + tacticalReload = 400472, + trickShots = 257621, + trueshot = 288613, + unerringVision = 386878, + volley = 260243, + wailingArrow = 459806, + witheringFire = 430715, }, traits = { focusedFire = 278531, @@ -1914,21 +1973,50 @@ br.lists.spells = { }, talents = { - alphaPredator = 269737, - bindingShot = 109248, - birdsOfPrey = 260331, - bloodseeker = 260248, - butchery = 212436, - flankingStrike = 269751, - furyOfTheEagle = 203415, - guerrillaTactics = 264332, - hydrasBite = 260241, - mongooseBite = 259387, - steelTrap = 162488, - termsOfEngagement = 265895, - tipOfTheSpear = 260285, - vipersVenom = 268501, - wildfireInfusion = 271014, + alphaPredator = 269737, + beastOfOpportunity = 445700, + bindingShot = 109248, + birdsOfPrey = 260331, + bloodseeker = 260248, + butchery = 212436, + catchOut = 451516, + corneredPrey = 445702, + coveringFire = 445715, + crackShot = 321293, + crescentSteel = 451530, + cullTheHerd = 445717, + denRecovery = 445710, + dontLookBack = 450373, + extrapolatedShots = 450374, + eyesClosed = 450381, + flankingStrike = 269751, + frenziedTear = 445696, + furiousAssault = 445699, + furyOfTheEagle = 203415, + guerrillaTactics = 264332, + howlOfThePack = 445707, + hydrasBite = 260241, + invigoratingPulse = 450379, + lunarStorm = 450385, + mongooseBite = 259387, + overwatch = 450384, + packAssault = 445721, + packCoordination = 445505, + releaseAndReload = 450376, + scatteredPrey = 445768, + sentinel = 450369, + sentinelPrecision = 450375, + sentinelWatch = 451546, + sideline = 450378, + steelTrap = 162488, + symphonicArsenal = 450383, + termsOfEngagement = 265895, + tirelessHunt = 445701, + tipOfTheSpear = 260285, + viciousHunt = 445404, + vipersVenom = 268501, + wildAttacks = 445708, + wildfireInfusion = 271014, }, traits = { blurOfTalons = 277653, @@ -2140,55 +2228,50 @@ br.lists.spells = { qaplaEredunWarOrder = 336830, }, talents = { - alphaPredator = 269737, -- - arcticBola = 390231, -- - barrage = 120360, -- - beastMaster = 378007, -- - bindingShackles = 321468, -- - bindingShot = 109248, -- - bornToBeWild = 266921, -- - camouflage = 199483, -- - concussiveShot = 5116, -- - counterShot = 147362, -- - deathChakram = 375891, -- - entrapment = 393344, -- - explosiveShot = 212431, -- - highExplosiveTrap = 236776, -- - huntersAvoidance = 384799, -- - hydrasBite = 260241, -- - improvedKillCommand = 378010, -- - improvedKillShot = 343248, -- - improvedTranquilShot = 343244, -- - improvedTraps = 343247, -- - intimidation = 19577, -- - keenEyesight = 378004, -- - killCommand = 34026, -- - killerInstinct = 273887, -- - killShot = 53351, -- - loneSurvivor = 388039, -- - masterMarksman = 260309, -- - misdirection = 34477, -- - naturalMending = 270581, -- - naturesEndurance = 388042, -- - pathfinding = 378002, -- - poisonInjection = 378014, -- - posthaste = 109215, -- - rejuvenatingWind = 385539, -- - roarOfSacrifice = 53480, -- - scareBeast = 1513, -- - scatterShot = 213691, -- - sentinelOwl = 388045, -- - sentinelsPerception = 388056, -- - sentinelsProtection = 388057, -- - serpentSting = 271788, -- - serratedShots = 389882, -- - stampede = 201430, -- - steelTrap = 162488, -- - survivalOfTheFittest = 264735, -- - tarTrap = 187698, -- - trailblazer = 199921, -- - tranquilizingShot = 19801, -- - wildernessMedicine = 343242, -- + blackrockMunitions = 462036, + bornToBeWild = 266921, + burstingShot = 186387, + camouflage = 199483, + concussiveShot = 5116, + counterShot = 147362, + devilsaurTranquilizer = 459991, + disruptiveRounds = 343244, + emergencySalve = 459517, + entrapment = 393344, + ghillieSuit = 459466, + highExplosiveTrap = 236776, + huntersAvoidance = 384799, + implosiveTrap = 462031, + improvedKillShot = 343248, + improvedTraps = 343247, + intimidation = 19577, + keenEyesight = 378004, + kindlingFlare = 459506, + kodoTranquilizer = 459983, + loneSurvivor = 388039, + misdirection = 34477, + naturalMending = 270581, + noHardFeelings = 459546, + paddedArmor = 459450, + pathfinding = 378002, + posthaste = 109215, + quickLoad = 378771, + rejuvenatingWind = 385539, + roarOfSacrifice = 53480, + scareBeast = 1513, + scatterShot = 213691, + scoutsInstincts = 459455, + scrappy = 459533, + serratedTips = 459502, + specializedArsenal = 459542, + tarTrap = 187698, + tarCoatedBindings = 459460, + territorialInstincts = 459507, + trailblazer = 199921, + tranquilizingShot = 19801, + triggerFinger = 459534, + unnaturalCauses = 459527, + wildernessMedicine = 343242, }, }, },