From 6427053479127a5c775cd571fdd16e301c4a6fe5 Mon Sep 17 00:00:00 2001 From: Vae Date: Thu, 24 Nov 2022 22:03:13 -1000 Subject: [PATCH] Updated Rotation for Havoc and Vengeance. --- .gitignore | 1 + ConRO_DemonHunter.toc | 2 +- changes.txt | 377 ------------------------------------------ demonhunter.lua | 248 ++++++++++++++++----------- demonhunter_ids.lua | 3 +- 5 files changed, 152 insertions(+), 479 deletions(-) create mode 100644 .gitignore delete mode 100644 changes.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6f9a44 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode/settings.json diff --git a/ConRO_DemonHunter.toc b/ConRO_DemonHunter.toc index 0065a17..364fbaa 100644 --- a/ConRO_DemonHunter.toc +++ b/ConRO_DemonHunter.toc @@ -1,5 +1,5 @@ ## Title:-|cffFFFFFFConRO|r- |cffA330C9Demon Hunter|r -## Version: 10.0.1 +## Version: 10.0.2 ## Author: Vae ## Interface: 10002 ## Dependencies: ConRO diff --git a/changes.txt b/changes.txt deleted file mode 100644 index 17dd4a9..0000000 --- a/changes.txt +++ /dev/null @@ -1,377 +0,0 @@ -Ver 9.1.7 - -Updated Havoc rotation slightly. - -Ver 9.1.6 - -Updated PvP code. - -Ver 9.1.5 - -Adjusted Eyebeams for Blind Fury and Demonic. - -Fixed Fel Barrage. - -Ver 9.1.4 - -Added support for specialization disabling. - -Ver 9.1.3 - -Slight adjustment for Chaos Theory. Mostly unnoticeable. - -Ver 9.1.2 - -Added Legendaries to library. - -Fixed Elysian Decree issue with Concentrated Sigils buff. - -Adjusted Sigil of Flame when Kyrian and Razelikhs Defilement Legendary Equipped. - -Added Conduits to library. - -Ver 9.1.1 - -Fixed code error for Havoc rotation. - -Ver 9.1.0 - -Code Overhaul (Burst and Full Mode code changes. Local variable cleanup changes. Covenant Conduit framework built.) - -Added Phial of Serenity to defense rotations. - -Added Soulshape to movement. - -Supported under level 10 better. - -Ver 9.0.3 - -Added covenant abilities. - -Added Burst rotation to the Vengeance rotation for long covenant abilities. - -Tweaked rotations for Shadowlands. - -Ver 9.0.2 - -Update Vengeance rotation for prepatch. - -Slight tweak to Havoc talent Unbound Chaos. - -Ver 9.0.1 - -Updated Havoc Rotation for prepatch. - -Vengeance specialization still is weird with melee distance. - -Ver 9.0.0 - -Updated Library for PrePatch. - -Will work on rotation once all classes libraries have a once over. - -DH Vengeance melee abilities are not working with IsSpellInRange. - -Ver 8.3.0 - -Updating TOC - -Ver 8.2.3 - -Implemented Auto Toggle changes. - -Ver 8.2.2 - -Tweaked some momentum issues. - -Ver 8.2.1 - -Updated toc. - -Ver 8.2.0 - -Changed Version Number to better coinside with WoW Client Versions. - -Started Adding Essences to the library. - -Ver 3.1.5 - -Made small change to keep Eye Beamed displayed when casting. - -Ver 3.1.4 - -Added PvPTalents to the IDs. - -Not hardly any changes for Demon Hunters recently. Strong Class. - -Small issue with taunt Icon sometimes showing on Fiery Brand. - -Ver 3.1.3 - -Adjusted for Auto Target detection for Havoc Rotation. - -Ver 3.1.2 - -Reversed a couple carots. - -Ver 3.1.1 - -Fixed error with Fel Rush Cooldown in Havoc rotation. - -Ver 3.1.0 - -Updating for 8.1 - -Ver 3.0.3 - -QoL code changes. - -Changed Vengeance Defense rotation to not suggest Demon Spikes during Metamorphasis or Fiery Brand unless at max charges. - -Added in Arcane Torrent racial for offensive dispells in melee range. - -Made Adjustments to distance closer openers for both Vengeance and Havoc rotations. - -Ver 3.0.2 - -Tweaked Metamorphasis burst tigger for Havoc. - -Added Burst/Full toggle for Havoc. Let me know how it feels. - -Ver 3.0.1 - -Tweaked Soul Cleave in Vengeance rotation. - -Ver 3.0 - -A few people have requested I split ConRO into class modules so you guys can just download and keep updated the classes you want to. - -I apologize for any inconvenience this may cause, but I think once the shift is done. It will be easier for everyone to find the addon and classes they want. - -Ver 2.2b - -Tweaked Vengeance Demon Hunter Damage and Defense rotations. - -Tweaked Frost Death Knight rotation, added Cold Heart and Glacial Advance support. - -Ver 2.2a - -Fixed Moonfire error for Feral Druids. - -Tweaked Retribution Paladin Inquisition. - -Added Burst/Full Toggle support to Affliction Warlock. - -Ver 2.2 - -Starting Tweaks as Raid content is now active, maybe adding in a few pvp talents, but no promises. - -Fixed a few errors with Affliction Warlock, planning on adding Full/Burst toggle to help streamline DarkGlare/Deathbolt usage. - -Added Rotation support for Feral Druid while in Bear Form. - -Ver 2.1g - -Tweaked Subletly Rogue Shadowdance rotation, slightly. - -Ver 2.1f - -Tweaked Blood Death Knight rotation. - -Tuned up Discipline Priests DPS rotation quite a bit. - -Brewmaster Monk Chiwave and Chiburst were backwards in the coding. Funny yet frustrating error, sorry. - -Ver 2.1e - -Removed Rapidfire error in Marksman Hunter rotation. - -Ver 2.1d - -Added Burst toggle to Survival Hunter. - -Added Wildfire Infusion support for Survival Hunter. - -Tweaked Suvival Hunter Rotation and added Aspect of the Eagle Support. - -Slight tweak to Beast Mastery Hunter code for quality of life. - -Adjusted Shadow Priest to not use Dark Void in Voidform. - -Ver 2.1c - -Found fix for BFA spell loading issue. - -Added support for New Moon talent for Balance Druids, though it is not currently recommended to use. - -Added Wild Charge to Feral Druid. - -Gave Retribution Paladin Burst/Full Toggle support. - -Ver 2.1b - -Fixed Warlock error. - -Need to still find fix for low level toons now. - -Ver 2.1a - -Tweaked Hunter Pet attacking feature. - -Fixed part of issue with toggle buttons resetting themselves with loss of control effects. - -Made Assassination Rogue only warn you if you dont have poison while in combat or stealthed. - -Tweaked Vengeance Demon Hunter Spirit Bomb/Soul Cleave relationship. - -Found issue with new BFA spell API changes with logging in as certain specs. - -Ver 2.1 - -Fixed Arms Warrior Massacre Execute error and Added Burst toggle. - -Added Fury Warrior Bladestorm to Burst toggle. - -Fixed error with Elemental Shaman burst toggle and elementals. - -Ver 2.0n - -Fixed Consume Magic for Demon Hunter. - -Tweaked Shadow Priest slightly. - -Fixed Destruction Warlock having issue with incinerate and certain talent chooses. - -Ver 2.0m - -Fixed coding error with prot warrior. - -Ver 2.0l - -Adjusted Beast Mastery Hunter AoE rotation. - -Changed Elite/Trash buttons into Full/Burst Rotation buttons. - -Added Taunt notifier for tanks. With changes to taunt system, thought would be helpful. - -Ver 2.0k - -Fixed inRange issue with different localizations across multiple classes. - -Ver 2.0j - -Fixed localization issue with distance closing abilities. - -Fixed some Guardian Druid issues. - -Ver 2.0i - -Fixed error in Balance and Feral druid specs for Incarnation talents. - -Added reset to default button to options window. - -Ver 2.0h - -Made Earth elemental into a burst cooldown. - -Ver 2.0g - -Adjusted Fire Mage Combustion phase. - -Added Netherportal to Demonology Warlock rotation. - -Added Raid Buff indicator for Priest, Mage, and Warrior. Still trying to figure out best way to party/raid scan. - -Added ability for user to change the alpha of the icons within the color picker. - -Ver 2.0f - -Fixed Raptor Strike for Survival Hunter. - -Ver 2.0e - -Updated Rogue -Subtlety. - -Updated Monk -Brewmaster, Mistweaver and Windwalker. - -Fixed error spam from 2 person mounts. - -Ver 2.0d - -Fixed Stance Buttons not being scanned properly. - -Updated Druid -Balance, Feral, and Guardian. - -Updated Rogue -Assassination and Outlaw. - -Ver 2.0c - -Fixed error spam for pet heals when mounting or using taxi. - -Disabled rotation when player control is lost. - -Updated Mage -Arcane, Fire, and Frost. - -Updated Warrior -Protection. - -Updated Shaman -Elemental and Enhancement. - -Updated Demon Hunter -Havoc and Vengeance. - -Ver 2.0b - -Fixed actionbar issue with Bartender4 and ElvUI. Hopefully - -Fixed issue where changing specs would not reset toggle buttons. - -Fixed a few Shadow Priest errors such as Elite/Trash toggle and delaying swp for to long when in voidform. - -Updated Warlock Affliction AoE and slight quality of life tweaks for Demonology and Destruction. - -Updated Warrior - Arms and Fury. - -Ver 2.0a - -Updated Hunter - Survival and added pet healing suggestions to the defense rotation. (Thank you, Patrik) - -Updated Warlock - Demonology AoE rotation and added demon healing suggestions to the defense rotation. - -Updated Paladin - Protection and Retribution. - -Updated Death Knight - Blood, Frost and Unholy. - -Ver 2.0 - -Updating to 8.0 pre-patch. - -Temporarily disabled hotkey for Display window. So i can focus on fixing more important features. - -Added buttons for all DPS/Tank specs to show whether they have a toggle rotation or not. - -Added support for charges cooldown on spells. - - -Updated Warlock - Affliction, Destruction and Demonology - -Updated Priest - Shadow - -Updated Hunter - Beast Mastery, Marksmanship - -Ver 1.5l - -Fixed error with Balance Druid, Warrior of Elune talent. And empowerment support for under lvl 70. - -Added in Owlkin Frenzy. - -Added support to Frost Mage with Flurry before lvl 100 with Ebonbolt. - -Ver 1.5k - -Fixed error from the Windwalker Monk The Emperor's Capacitor support. - -Ver 1.5j - -Addressed issue with Destruction Warlocks Incinerate spell vs. GCD. It runs a lot smoother now. - -Ver 1.5i - -Fixed error for interrupt and purge overlay hangup. - -Removed some burst overlays during trash toggle on some specs. Just too much. - -Added The Emperor's Capacitor support for Windwalker Monk. - -Added The Dreadlord's Deceit support for Rogue. - -Ver 1.5h - -Added Ironfur to Guardian Druid defense. - -Fixed issue with some talent swapping. - -Tweaked Unholy Death Knight. - -Ver 1.5g - -Updated and Created Vengeance Demon Hunter. - -Updated Havoc Demon Hunter. - -Ver 1.5f - -Tweaked Voidwalker presence in Warlock rotation. - -Fixed Enhancement Shaman, landslide/hothands talent error. - -Ver 1.5e - -Added Overlay scale and toggle support. So if you don't want the notifier for defense or interrupts you can now turn them off. - -Added Overlay color change for those that want to. - -Fixed Demonology Warlock glitch. - -Ver 1.5d - -Fixed Whirling Dragon Punch talent for Windwalker Monk. - -Ver 1.5c - -Adjusted Fury Warrior. - -Adjusted Marksman Hunter. - -Ver 1.5b - -Adjusted Arms Warrior and Protection Warrior. - -Ver 1.5a - -Code error fixes for Destruction Warlock. - -Ver 1.5 - -Added New Feature Boss/Trash Toggle button. Switches whether midrange cooldowns are included in rotation or overlayed as option burst. - -Specs will be updated with new feature slowly. - -Shadow Priest has new Elite Rotation added. - -Tweaked Arcane Mage rotation. Fixed Mark of aluneth and Arcane Missiles. - -Fixed issue with Icelance not not showing immediately following Flurry/BrainFreeze combo. - -Coded Windwalker Monk for better Combo Mastery management. - -Adjusted Havoc Demonhunter slighty. Made Meta into a burst rather than rotation. - -Ver 1.4j - -Started work on Windwalker and Brewmaster monk. - -Also started on major code cleanup and sorting. - -Ver 1.4i - -Fixes for debuff code change. - - -Ver 1.4h - -Removed Assassination Rogue Non-lethal poison missing error. Due to some fight mechanics. Lethals will remain. May add toggle option later on. - -Tweaked Feral druid rotation. - -Added new coding to how the add-on read debuffs. Please bare with any errors this may cause in rotation due to unforeseen aura algorithms. - -Added wait texture to Display window for pooling or waiting periods. - -Demonology and Destruction Warlock checked and tweaked. - - -Ver 1.4g - -Added transparency support to Display window. - -Updated Affliction Warlock. - -Ver 1.4f - -Fixed Monk module issue. Monk has not been updated yet though. - -Fixed Feral Druid Rake-stun issue. - -Ver 1.4e - -Slight Frost Mage tweaks. - -Updated Display Window... Now shows name of Ability to use next as well as your hot key set to it. - -Tweaked Marksman Hunter. - -Tweaked Feral Druid. - -Ver 1.4d - -Updated Shaman rotation. - -Fixed issue with Demon Hunters Deathsweep focus. Which seems to have also fixed the default stance bar issue some were seeing as well. - -Possibly fixed issue with cool-down star burst still showing after cool-down use. - -Checked Hunter code and rotations. Survival needs tweaking still. Marksman and Beast Mastery are good. - -Ver 1.4c - -Checked Death Knight code and rotation. - -Checked Demonhunter code and rotation. Needs more testing. - -Checked Elemental Shaman code and rotation. - -Checked Beast Mastery Hunter code and rotation. - -Ver 1.4b - -Checked Priest code and rotations. - -Updated Subtlety Rogue rotation. Still feels clunky. - -Added Macro, Slash and key binding functionality to the Target rotation toggle button. - -Ver 1.4a - -Checked Paladin code. - -Checked Mage code and updated rotations. - -Checked Druid code and updated rotations. - -Checked Outlaw and Assassination Rogue code and updated rotations. - -Ver 1.4 - -Starting Updates for Classes to game interface 7.3. - -Checked Druid code. - -Ver 1.3d - -Made some adjustments for Unholy Death Knights Soul Reaper talent. - -Cleaned up some unnecessary code. - -Upgraded Toggle Button (added size option). - -Fixed minor chat errors. - -Ver 1.3c - -Updated 7.2 Support - -Outlaw Rogue updated for 7.2 - -Ver 1.3b - -Fixed issue with Feral Druid and not choosing the Savage Roar talent. - -Added Brutal Slash support to AoE rotation. - -Ver 1.3a - -Added AoE Support for Rogue class. - -Added AoE Support for Priest class. - -Added AoE Support for Druid class. - - -Made lock feature unlocked by Default. - -Tweaks to graphic glitch that sometimes happens. - -Fixed some Assassination Rogue bugs. - -Ver 1.3 - -Added AoE Support for Paladin class. - -Added AoE Support for Hunter class. - -Added AoE Support for Warrior class. - - -Refined Beast Mastery Hunter single rotation. Added talents into rotation that were missing. - -Fixed Protection Warrior Intercept bug. \ No newline at end of file diff --git a/demonhunter.lua b/demonhunter.lua index 7478a86..b2ca749 100644 --- a/demonhunter.lua +++ b/demonhunter.lua @@ -185,7 +185,7 @@ function ConRO.DemonHunter.Havoc(_, timeShift, currentSpell, gcd, tChosen, pvpCh local _ThrowGlaive_CHARGES = ConRO:SpellCharges(_ThrowGlaive); local _, _ThrowGlaive_RANGE = ConRO:Targets(Ability.ThrowGlaive); local _VengefulRetreat, _VengefulRetreat_RDY = ConRO:AbilityReady(Ability.VengefulRetreat, timeShift); - + local _Initiative_BUFF = ConRO:Aura(Buff.Initiative, timeShift); local _EssenceBreak, _EssenceBreak_RDY = ConRO:AbilityReady(Ability.EssenceBreak, timeShift); local _FelBarrage, _FelBarrage_RDY = ConRO:AbilityReady(Ability.FelBarrage, timeShift); local _FelEruption, _FelEruption_RDY = ConRO:AbilityReady(Ability.FelEruption, timeShift); @@ -233,76 +233,108 @@ function ConRO.DemonHunter.Havoc(_, timeShift, currentSpell, gcd, tChosen, pvpCh if not _in_combat then if _ImmolationAura_RDY then tinsert(ConRO.SuggestedSpells, _ImmolationAura); + _ImmolationAura_RDY = false; + end + + if _Felblade_RDY and _Fury < 80 then + tinsert(ConRO.SuggestedSpells, _Felblade); + _Felblade_RDY = false; end - if _Metamorphosis_RDY and not _Metamorphosis_BUFF and ConRO:FullMode(_Metamorphosis) then - tinsert(ConRO.SuggestedSpells, _Metamorphosis); + if _FelRush_RDY and _FelRush_CHARGES >= 1 and not _target_in_melee then + tinsert(ConRO.SuggestedSpells, _FelRush); + _FelRush_RDY = false; + end + + if _EyeBeam_RDY and currentSpell ~= _EyeBeam and _Felblade_RANGE then + tinsert(ConRO.SuggestedSpells, _EyeBeam); + _EyeBeam_RDY = false; end end - if _Metamorphosis_RDY and not _Metamorphosis_BUFF and ConRO:FullMode(_Metamorphosis) then + if _Metamorphosis_RDY and not _Metamorphosis_BUFF and (not _EyeBeam_RDY) and ConRO:FullMode(_Metamorphosis) then tinsert(ConRO.SuggestedSpells, _Metamorphosis); + _Metamorphosis_RDY = false; end - if _TheHunt_RDY and ConRO:FullMode(_TheHunt) then - tinsert(ConRO.SuggestedSpells, _TheHunt); + if _FelRush_RDY and _FelRush_CHARGES >= 1 and _UnboundChaos_BUFF then + tinsert(ConRO.SuggestedSpells, _FelRush); + _UnboundChaos_BUFF = false; end - if _ElysianDecree_RDY and ConRO:FullMode(_ElysianDecree) then - tinsert(ConRO.SuggestedSpells, _ElysianDecree); + if _EyeBeam_RDY and currentSpell ~= _EyeBeam and _Felblade_RANGE then + tinsert(ConRO.SuggestedSpells, _EyeBeam); + _EyeBeam_RDY = false; end - if _EssenceBreak_RDY and _Fury >= 80 and _Disrupt_RANGE then - tinsert(ConRO.SuggestedSpells, _EssenceBreak); + if _VengefulRetreat_RDY and tChosen[Passive.Initiative.talentID] and not _Initiative_BUFF then + tinsert(ConRO.SuggestedSpells, _VengefulRetreat); + _VengefulRetreat_RDY = false; end - if _VengefulRetreat_RDY and _target_in_melee and _FelRush_CHARGES >= 1 and ((tChosen[Passive.Momentum.talentID] and not _Momentum_BUFF) or _InnerDemon_BUFF) then - tinsert(ConRO.SuggestedSpells, _VengefulRetreat); + if _EssenceBreak_RDY and _Disrupt_RANGE then + tinsert(ConRO.SuggestedSpells, _EssenceBreak); + _EssenceBreak_RDY = false; end - if _FelRush_RDY and _InnerDemon_BUFF or (tChosen[Passive.Momentum.talentID] and not _Momentum_BUFF) then - tinsert(ConRO.SuggestedSpells, _FelRush); + if _BladeDance_RDY and _Disrupt_RANGE then + tinsert(ConRO.SuggestedSpells, _BladeDance); + _BladeDance_RDY = false; end - if _FelBarrage_RDY and _Disrupt_RANGE and ConRO:FullMode(_FelBarrage) then - tinsert(ConRO.SuggestedSpells, _FelBarrage); + if _FelRush_RDY and tChosen[Passive.Momentum.talentID] and (_FelRush_CHARGES == 2 or not _Momentum_BUFF) then + tinsert(ConRO.SuggestedSpells, _FelRush); + _FelRush_RDY = false; end - if _ThrowGlaive_RDY and _ThrowGlaive_RANGE and not _target_in_melee then + if _ThrowGlaive_RDY and _ThrowGlaive_RANGE and not _target_in_melee and _ThrowGlaive_CHARGES == 2 and tChosen[Passive.Soulrend.talentID] and tChosen[Passive.FuriousThrows.talentID] then tinsert(ConRO.SuggestedSpells, _ThrowGlaive); + _ThrowGlaive_CHARGES = _ThrowGlaive_CHARGES - 1; end - if _BladeDance_RDY and _Metamorphosis_BUFF and ((ConRO_AutoButton:IsVisible() and _enemies_in_melee >= 2) or ConRO_AoEButton:IsVisible() or tChosen[Passive.FirstBlood.talentID]) then - tinsert(ConRO.SuggestedSpells, _BladeDance); + if _TheHunt_RDY and ConRO:FullMode(_TheHunt) then + tinsert(ConRO.SuggestedSpells, _TheHunt); + _TheHunt_RDY = false; end - if _GlaiveTempest_RDY then - tinsert(ConRO.SuggestedSpells, _GlaiveTempest); + if _ElysianDecree_RDY and ConRO:FullMode(_ElysianDecree) then + tinsert(ConRO.SuggestedSpells, _ElysianDecree); + _ElysianDecree_RDY = false; end - if _EyeBeam_RDY and (not tChosen[Passive.BlindFury.talentID] or (tChosen[Passive.BlindFury.talentID] and _Fury <= 50)) and (not tChosen[Passive.Demonic.talentID] or (tChosen[Passive.Demonic.talentID] and (_BladeDance_RDY or _BladeDance_CD <= 2.5))) and currentSpell ~= _EyeBeam then - tinsert(ConRO.SuggestedSpells, _EyeBeam); + if _GlaiveTempest_RDY and _target_in_melee then + tinsert(ConRO.SuggestedSpells, _GlaiveTempest); + _GlaiveTempest_RDY = false; end if _ImmolationAura_RDY then tinsert(ConRO.SuggestedSpells, _ImmolationAura); - end - - if _BladeDance_RDY and ((ConRO_AutoButton:IsVisible() and _enemies_in_melee >= 3) or (ConRO_AutoButton:IsVisible() and tChosen[Passive.TrailofRuin.talentID] and _enemies_in_melee >= 2) or ConRO_AoEButton:IsVisible() or tChosen[Passive.FirstBlood.talentID] ) then - tinsert(ConRO.SuggestedSpells, _BladeDance); + _ImmolationAura_RDY = false; end if _Felblade_RDY and _Fury < 80 then tinsert(ConRO.SuggestedSpells, _Felblade); end - if _ChaosStrike_RDY and (_Fury >= 50 or _ChaoticBlades_BUFF) then + if _ChaosStrike_RDY and _Fury >= 50 and _target_in_melee then tinsert(ConRO.SuggestedSpells, _ChaosStrike); + _Fury = _Fury - 40; + end + + if _SigilofFlame_RDY and _Fury < 40 then + tinsert(ConRO.SuggestedSpells, _SigilofFlame); + _SigilofFlame_RDY = false; end if tChosen[Passive.DemonBlades.talentID] then - if _ThrowGlaive_RDY then + if _FelRush_RDY and _FelRush_CHARGES >= 1 then + tinsert(ConRO.SuggestedSpells, _FelRush); + _FelRush_CHARGES = _FelRush_CHARGES - 1; + end + + if _ThrowGlaive_RDY and _ThrowGlaive_CHARGES >= 1 then tinsert(ConRO.SuggestedSpells, _ThrowGlaive); + _ThrowGlaive_CHARGES = _ThrowGlaive_CHARGES - 1; end else if _DemonsBite_RDY then @@ -354,57 +386,56 @@ function ConRO.DemonHunter.Vengeance(_, timeShift, currentSpell, gcd, tChosen, p wipe(ConRO.SuggestedSpells) local Racial, Ability, Passive, Form, Buff, Debuff, PetAbility, PvPTalent, Glyph = ids.Racial, ids.Ven_Ability, ids.Ven_Passive, ids.Ven_Form, ids.Ven_Buff, ids.Ven_Debuff, ids.Ven_PetAbility, ids.Ven_PvPTalent, ids.Glyph; --Info - local _Player_Level = UnitLevel("player"); - local _Player_Percent_Health = ConRO:PercentHealth('player'); - local _is_PvP = ConRO:IsPvP(); - local _in_combat = UnitAffectingCombat('player'); - local _party_size = GetNumGroupMembers(); + local _Player_Level = UnitLevel("player"); + local _Player_Percent_Health = ConRO:PercentHealth('player'); + local _is_PvP = ConRO:IsPvP(); + local _in_combat = UnitAffectingCombat('player'); + local _party_size = GetNumGroupMembers(); - local _is_PC = UnitPlayerControlled("target"); - local _is_Enemy = ConRO:TarHostile(); - local _Target_Health = UnitHealth('target'); - local _Target_Percent_Health = ConRO:PercentHealth('target'); + local _is_PC = UnitPlayerControlled("target"); + local _is_Enemy = ConRO:TarHostile(); + local _Target_Health = UnitHealth('target'); + local _Target_Percent_Health = ConRO:PercentHealth('target'); --Resources - local _Fury, _Fury_Max, _Fury_Percent = ConRO:PlayerPower('Fury'); - local _, _SoulFragments = ConRO:Form(ids.Ven_Form.SoulFragments); + local _Fury, _Fury_Max, _Fury_Percent = ConRO:PlayerPower('Fury'); + local _, _SoulFragments = ConRO:Form(ids.Ven_Form.SoulFragments); --Racials - local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(Racial.ArcaneTorrent, timeShift); + local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(Racial.ArcaneTorrent, timeShift); --Abilities - local _ConsumeMagic, _ConsumeMagic_RDY = ConRO:AbilityReady(Ability.ConsumeMagic, timeShift); - local _Disrupt, _Disrupt_RDY = ConRO:AbilityReady(Ability.Disrupt, timeShift); - local _FelDevastation, _FelDevastation_RDY = ConRO:AbilityReady(Ability.FelDevastation, timeShift); - local _ImmolationAura, _ImmolationAura_RDY = ConRO:AbilityReady(Ability.ImmolationAura, timeShift); - local _InfernalStrike, _InfernalStrike_RDY = ConRO:AbilityReady(Ability.InfernalStrike, timeShift); - local _InfernalStrike_CHARGES, _, _InfernalStrike_CHARGES_CD = ConRO:SpellCharges(Ability.InfernalStrike); - local _Metamorphosis, _Metamorphosis_RDY = ConRO:AbilityReady(Ability.Metamorphosis, timeShift); - local _Metamorphosis_BUFF = ConRO:Aura(Buff.Metamorphosis, timeShift); - local _Shear, _Shear_RDY = ConRO:AbilityReady(Ability.Shear, timeShift); - local _SigilofFlame, _SigilofFlame_RDY = ConRO:AbilityReady(Ability.SigilofFlame, timeShift); - local _SigilofFlameCS, _SigilofFlameCS_RDY = ConRO:AbilityReady(Ability.SigilofFlameCS, timeShift); - local _SigilofFlame_DEBUFF = ConRO:TargetAura(Debuff.SigilofFlame, timeShift); - local _SoulCleave, _SoulCleave_RDY = ConRO:AbilityReady(Ability.SoulCleave, timeShift); - local _ThrowGlaive, _ThrowGlaive_RDY = ConRO:AbilityReady(Ability.ThrowGlaive, timeShift); - local _, _ThrowGlaive_RANGE = ConRO:Targets(Ability.ThrowGlaive); - local _Torment, _Torment_RDY = ConRO:AbilityReady(Ability.Torment, timeShift); - - local _Felblade, _Felblade_RDY = ConRO:AbilityReady(Ability.Felblade, timeShift); - local _, _Felblade_RANGE = ConRO:Targets(Ability.Felblade); - local _Fracture, _Fracture_RDY = ConRO:AbilityReady(Ability.Fracture, timeShift); - local _Fracture_CHARGES, _, _Fracture_CCD = ConRO:SpellCharges(Ability.Fracture); - local _SpiritBomb, _SpiritBomb_RDY = ConRO:AbilityReady(Ability.SpiritBomb, timeShift); - local _Frailty_DEBUFF = ConRO:TargetAura(Debuff.Frailty, timeShift + 3); - + local _ConsumeMagic, _ConsumeMagic_RDY = ConRO:AbilityReady(Ability.ConsumeMagic, timeShift); + local _Disrupt, _Disrupt_RDY = ConRO:AbilityReady(Ability.Disrupt, timeShift); local _ElysianDecree, _ElysianDecree_RDY = ConRO:AbilityReady(Ability.ElysianDecree, timeShift); -- local _ElysianDecreeCS, _ElysianDecreeCS_RDY = ConRO:AbilityReady(Ability.ElysianDecreeCS, timeShift); + local _FelDevastation, _FelDevastation_RDY = ConRO:AbilityReady(Ability.FelDevastation, timeShift); + local _Felblade, _Felblade_RDY = ConRO:AbilityReady(Ability.Felblade, timeShift); + local _, _Felblade_RANGE = ConRO:Targets(Ability.Felblade); + local _Fracture, _Fracture_RDY = ConRO:AbilityReady(Ability.Fracture, timeShift); + local _Fracture_CHARGES, _, _Fracture_CCD = ConRO:SpellCharges(_Fracture); + local _ImmolationAura, _ImmolationAura_RDY = ConRO:AbilityReady(Ability.ImmolationAura, timeShift); + local _InfernalStrike, _InfernalStrike_RDY = ConRO:AbilityReady(Ability.InfernalStrike, timeShift); + local _InfernalStrike_CHARGES, _, _InfernalStrike_CHARGES_CD = ConRO:SpellCharges(_InfernalStrike); + local _Metamorphosis, _Metamorphosis_RDY = ConRO:AbilityReady(Ability.Metamorphosis, timeShift); + local _Metamorphosis_BUFF = ConRO:Aura(Buff.Metamorphosis, timeShift); + local _Shear, _Shear_RDY = ConRO:AbilityReady(Ability.Shear, timeShift); + local _SigilofFlame, _SigilofFlame_RDY = ConRO:AbilityReady(Ability.SigilofFlame, timeShift); + local _SigilofFlameCS, _SigilofFlameCS_RDY = ConRO:AbilityReady(Ability.SigilofFlameCS, timeShift); + local _SigilofFlame_DEBUFF = ConRO:TargetAura(Debuff.SigilofFlame, timeShift); + local _SpiritBomb, _SpiritBomb_RDY = ConRO:AbilityReady(Ability.SpiritBomb, timeShift); + local _Frailty_DEBUFF, _Frailty_COUNT = ConRO:TargetAura(Debuff.Frailty, timeShift + 3); + local _SoulCarver, _SoulCarver_RDY = ConRO:AbilityReady(Ability.SoulCarver, timeShift); + local _SoulCleave, _SoulCleave_RDY = ConRO:AbilityReady(Ability.SoulCleave, timeShift); local _TheHunt, _TheHunt_RDY = ConRO:AbilityReady(Ability.TheHunt, timeShift); + local _ThrowGlaive, _ThrowGlaive_RDY = ConRO:AbilityReady(Ability.ThrowGlaive, timeShift); + local _, _ThrowGlaive_RANGE = ConRO:Targets(Ability.ThrowGlaive); + local _Torment, _Torment_RDY = ConRO:AbilityReady(Ability.Torment, timeShift); --Conditions - local _is_moving = ConRO:PlayerSpeed(); - local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee"); - local _target_in_10yrds = CheckInteractDistance("target", 3); + local _is_moving = ConRO:PlayerSpeed(); + local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee"); + local _target_in_10yrds = CheckInteractDistance("target", 3); if tChosen[Passive.ConcentratedSigils.talentID] then _SigilofFlame_RDY = _SigilofFlameCS_RDY; @@ -422,8 +453,8 @@ function ConRO.DemonHunter.Vengeance(_, timeShift, currentSpell, gcd, tChosen, p ConRO:AbilityTaunt(_Torment, _Torment_RDY); ConRO:AbilityBurst(_FelDevastation, _FelDevastation_RDY and _Fury >= 50 and ConRO:BurstMode(_FelDevastation)); - ConRO:AbilityBurst(_ElysianDecree, _ElysianDecree_RDY and ConRO:BurstMode(_ElysianDecree)); + ConRO:AbilityBurst(_SoulCarver, _SoulCarver_RDY and ConRO:BurstMode(_SoulCarver)); ConRO:AbilityBurst(_TheHunt, _TheHunt_RDY and ConRO:BurstMode(_TheHunt)); --Rotations @@ -432,51 +463,68 @@ function ConRO.DemonHunter.Vengeance(_, timeShift, currentSpell, gcd, tChosen, p tinsert(ConRO.SuggestedSpells, _ThrowGlaive); elseif _Felblade_RDY and _Felblade_RANGE then tinsert(ConRO.SuggestedSpells, _Felblade); + _Felblade_RDY = false; end end - if _InfernalStrike_RDY and not _SigilofFlame_DEBUFF and (_InfernalStrike_CHARGES == 2 or (_InfernalStrike_CHARGES == 1 and _InfernalStrike_CHARGES_CD <= 1)) and ConRO.lastSpellId ~= _InfernalStrike and ConRO.lastSpellId ~= _SigilofFlame then + if _InfernalStrike_RDY and (_InfernalStrike_CHARGES == 2 or (_InfernalStrike_CHARGES >= 1 and _InfernalStrike_CHARGES_CD < 3)) then tinsert(ConRO.SuggestedSpells, _InfernalStrike); + _InfernalStrike_CHARGES = _InfernalStrike_CHARGES - 1; end - if _ElysianDecree_RDY and ConRO:FullMode(_ElysianDecree) then - tinsert(ConRO.SuggestedSpells, _ElysianDecree); + if _FelDevastation_RDY and _Fury >= 50 and ConRO:FullMode(_FelDevastation) then + tinsert(ConRO.SuggestedSpells, _FelDevastation); + _FelDevastation_RDY = false; end - if _TheHunt_RDY and ConRO:FullMode(_FoddertotheFlame) then - tinsert(ConRO.SuggestedSpells, _TheHunt); + if _ImmolationAura_RDY and _Fury <= (_Fury_Max - 25) and _SoulFragments <= 4 then + tinsert(ConRO.SuggestedSpells, _ImmolationAura); + _ImmolationAura_RDY = false; end - if _SpiritBomb_RDY and _SoulFragments >= 4 and (not _Frailty_DEBUFF or _Player_Percent_Health <= 60) then - tinsert(ConRO.SuggestedSpells, _SpiritBomb); + if _Fracture_RDY and ((_SoulFragments <= 3 and _Fury <= _Fury_Max - 25) or _Fracture_CHARGES == 2 or (_Fracture_CHARGES == 1 and _Fracture_CCD <= 1)) then + tinsert(ConRO.SuggestedSpells, _Fracture); + _Fracture_CHARGES = _Fracture_CHARGES - 1; end - if _FelDevastation_RDY and _Fury >= 50 and ConRO:FullMode(_FelDevastation) then - tinsert(ConRO.SuggestedSpells, _FelDevastation); + if _Shear_RDY and not tChosen[Ability.Fracture.talentID] and (_Fury <= _Fury_Max - 10) and _SoulFragments <= 4 then + tinsert(ConRO.SuggestedSpells, _Shear); end - if _Fracture_RDY and ((_SoulFragments <= 3 and _Fury <= _Fury_Max - 25) or _Fracture_CHARGES == 2 or (_Fracture_CHARGES == 1 and _Fracture_CCD <= 1)) then - tinsert(ConRO.SuggestedSpells, _Fracture); + if _SigilofFlame_RDY then + tinsert(ConRO.SuggestedSpells, _SigilofFlame); + _SigilofFlame_RDY = false; end - if _ImmolationAura_RDY and _SoulFragments <= 4 then - tinsert(ConRO.SuggestedSpells, _ImmolationAura); + if _SpiritBomb_RDY and _SoulFragments >= 4 then + tinsert(ConRO.SuggestedSpells, _SpiritBomb); + _SoulFragments = _SoulFragments - 5; end - if _SoulCleave_RDY and (_Frailty_DEBUFF or not tChosen[Ability.SpiritBomb.talentID]) and (_Player_Percent_Health <= 80 or (_Fury >= _Fury_Max - 10)) then + if _SoulCleave_RDY and (_SoulFragments <= 0 or not tChosen[Ability.SpiritBomb.talentID]) and (_Player_Percent_Health <= 80 or (_Fury >= _Fury_Max - 10)) then tinsert(ConRO.SuggestedSpells, _SoulCleave); + _Fury = _Fury - 30; + _SoulFragments = _SoulFragments - 2; end - if _SigilofFlame_RDY then - tinsert(ConRO.SuggestedSpells, _SigilofFlame); + if _ElysianDecree_RDY and _Frailty_COUNT >= 3 and ConRO:FullMode(_ElysianDecree) then + tinsert(ConRO.SuggestedSpells, _ElysianDecree); + _ElysianDecree_RDY = false; end - if _Felblade_RDY then - tinsert(ConRO.SuggestedSpells, _Felblade); + if _TheHunt_RDY and _Frailty_COUNT >= 3 and ConRO:FullMode(_TheHunt) then + tinsert(ConRO.SuggestedSpells, _TheHunt); + _TheHunt_RDY = false; end - if _Shear_RDY and not tChosen[Ability.Fracture.talentID] and (_Fury <= _Fury_Max - 10) and _SoulFragments <= 4 then - tinsert(ConRO.SuggestedSpells, _Shear); + if _SoulCarver_RDY and _Frailty_COUNT >= 6 and ConRO:FullMode(_SoulCarver) then + tinsert(ConRO.SuggestedSpells, _SoulCarver); + _SoulCarver_RDY = false; + end + + if _Felblade_RDY then + tinsert(ConRO.SuggestedSpells, _Felblade); + _Felblade_RDY = false; end if _ThrowGlaive_RDY then @@ -489,20 +537,20 @@ function ConRO.DemonHunter.VengeanceDef(_, timeShift, currentSpell, gcd, tChosen wipe(ConRO.SuggestedDefSpells) local Racial, Ability, Passive, Form, Buff, Debuff, PetAbility, PvPTalent, Glyph = ids.Racial, ids.Ven_Ability, ids.Ven_Passive, ids.Ven_Form, ids.Ven_Buff, ids.Ven_Debuff, ids.Ven_PetAbility, ids.Ven_PvPTalent, ids.Glyph; --Info - local _Player_Level = UnitLevel("player"); - local _Player_Percent_Health = ConRO:PercentHealth('player'); - local _is_PvP = ConRO:IsPvP(); - local _in_combat = UnitAffectingCombat('player'); - local _party_size = GetNumGroupMembers(); + local _Player_Level = UnitLevel("player"); + local _Player_Percent_Health = ConRO:PercentHealth('player'); + local _is_PvP = ConRO:IsPvP(); + local _in_combat = UnitAffectingCombat('player'); + local _party_size = GetNumGroupMembers(); - local _is_PC = UnitPlayerControlled("target"); - local _is_Enemy = ConRO:TarHostile(); - local _Target_Health = UnitHealth('target'); - local _Target_Percent_Health = ConRO:PercentHealth('target'); + local _is_PC = UnitPlayerControlled("target"); + local _is_Enemy = ConRO:TarHostile(); + local _Target_Health = UnitHealth('target'); + local _Target_Percent_Health = ConRO:PercentHealth('target'); --Resources - local _Fury, _Fury_Max, _Fury_Percent = ConRO:PlayerPower('Fury'); - local _, _SoulFragments = ConRO:Form(Form.SoulFragments); + local _Fury, _Fury_Max, _Fury_Percent = ConRO:PlayerPower('Fury'); + local _, _SoulFragments = ConRO:Form(Form.SoulFragments); --Abilities local _DemonSpikes, _DemonSpikes_RDY = ConRO:AbilityReady(Ability.DemonSpikes, timeShift); diff --git a/demonhunter_ids.lua b/demonhunter_ids.lua index 0b73837..33528d8 100644 --- a/demonhunter_ids.lua +++ b/demonhunter_ids.lua @@ -159,6 +159,7 @@ local ConRO_DemonHunter, ids = ...; } ids.Havoc_Buff = { ChaosBlades = 247938, + Initiative = 391215, InnerDemon = 337313, Metamorphosis = 162264, Momentum = 208628, @@ -187,7 +188,7 @@ local ConRO_DemonHunter, ids = ...; SigilofMisery = {spellID = 207684, talentID = 112859}, SpectralSight = {spellID = 188501}, TheHunt = {spellID = 370965, talentID = 112837}, - ThrowGlaive = {spellID = 185123}, + ThrowGlaive = {spellID = 204157}, Torment = {spellID = 185245}, VengefulRetreat = {spellID = 198793, talentID = 112853}, --Vengeance