I think the problem is no one really working on rotations, haven't really encountered any bugs with anything "core" related.
Quick question for anyone that knows how the coding works better than I, basically on the MCH routine I want to have it auto summon, but at the moment it summons at current target's location. What/which do I change to have it summon it beside my current location? I found the code calls that appear to be for it, can anyone help me by just telling what to change? I'd really appreciate it, sorry I don't know enough to figure it out on my own, it's too far out of my common knowledge sadly. Code: // This is one of the lines, these are not in order, just the only lines of code I can find calling/talking about the turret(s) public static Vector3 RookPosition = new Vector3(0.3f, 0f, .5f); //couple more lines down public override void OnInitialize() { //Summon Companion if (Core.Player.Pet == null && VariableBook.HostileUnitsCount < 2 && InternalSettings.Instance.Machinist.EnableAutoSummon && Me.CurrentTarget != null) Actionmanager.DoActionLocation(2864, (Core.Target.Location + RookPosition)); if (Core.Player.Pet == null && VariableBook.HostileUnitsCount > 2 && InternalSettings.Instance.Machinist.EnableAutoSummon && Me.CurrentTarget != null) Actionmanager.DoActionLocation(2865, (Core.Target.Location + RookPosition)); //a little further down about 50 lines in the rotation if (Core.Player.Pet == null && VariableBook.HostileUnitsCount < 2 && InternalSettings.Instance.Machinist.EnableAutoSummon && Me.CurrentTarget != null) Actionmanager.DoActionLocation(2864, (Core.Target.Location + RookPosition)); if (Core.Player.Pet == null && VariableBook.HostileUnitsCount > 2 && InternalSettings.Instance.Machinist.EnableAutoSummon && Me.CurrentTarget != null) Actionmanager.DoActionLocation(2865, (Core.Target.Location + RookPosition)); These are the only lines I could find referring to the turret(s) in the mch.cs
I'm new to RebornBuddy been using FFXIVminion for while so I going to try contributing to this great community Adding some Warrior function to UI and global AoE settings and the Overlay AoE setting now will take effect as Warrior Not an expert in coding so feel free to correct me for the rotation I just modify and add whats there Minion have great rotation for all class too bad its coded in lua so need someone who's good at coding to port it maybe I can help showing the rotation logic from minion to a spreadsheet. So if someone willing to do it so RB have a finished YRB or any CR plugin just pm me WarriorSettings.cs Code: using ff14bot.Helpers; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.IO; using YourRaidingBuddy.Interfaces.Settings; namespace YourRaidingBuddy.Settings { public class WarriorSetting : JsonSettings { public WarriorSetting() : base(InternalSettings.RoutineSettingsPath + "_Warrior.json") { } // Cross Class [Setting] [DefaultValue(true)] [Category("Cross Class")] [DisplayName("Use InternalRelease")] public bool UseInternalRelease { get; set; } // off GCD Attack Buffs [Setting] [DefaultValue(true)] [Category("Warrior - Off GCD Attack Buffs")] [DisplayName("Use Bloodbath")] public bool UseBloodbath { get; set; } [Setting] [DefaultValue(70)] [Category("Warrior - Off GCD Attack Buffs")] [DisplayName("Bloodbath HP%")] public int BloodbathHpPercentage { get; set; } // off GCD Defensive Buffs [Setting] [DefaultValue(true)] [Category("Warrior - Off GCD Defense Buffs")] [DisplayName("Use Equilibrium")] public bool UseEquilibrium { get; set; } [Setting] [DefaultValue(60)] [Category("Warrior - Off GCD Defense Buffs")] [DisplayName("Equilibrium HP%")] public int EquilibriumHpPercentage { get; set; } [Setting] [DefaultValue(50)] [Category("Warrior - Off GCD Defense Buffs")] [DisplayName("Equilibrium TP%")] public int EquilibriumTpPercentage { get; set; } [Setting] [DefaultValue(true)] [Category("Warrior - Off GCD Defense Buffs")] [DisplayName("Use Featherfoot")] public bool UseFeatherfoot { get; set; } [Setting] [DefaultValue(85)] [Category("Warrior - Off GCD Defense Buffs")] [DisplayName("Featherfoot HP%")] public int FeatherfootHpPercentage { get; set; } // Attacks [Setting] [DefaultValue(true)] [Category("Warrior - Attacks")] [DisplayName("Use Mercy Stroke")] public bool UseMercyStroke { get; set; } } } Warrior.cs Code: using System.Threading.Tasks; using System.Windows.Forms; using ff14bot; using ff14bot.Enums; using ff14bot.Managers; using ff14bot.Objects; using YourRaidingBuddy.Books; using YourRaidingBuddy.Helpers; using YourRaidingBuddy.Interfaces.Settings; using YourRaidingBuddy.Settings; using HotkeyManager = YourRaidingBuddy.Managers.HotkeyManager; namespace YourRaidingBuddy.Rotations { public class Warrior : Root { private static LocalPlayer Me { get { return Core.Player; } } public override ClassJobType[] Class { get { return new[] { ClassJobType.Warrior }; } } public static SettingsG GeneralSettings { get { return InternalSettings.Instance.General; } } public static WarriorSetting WarriorSettings { get { return InternalSettings.Instance.Warrior; } } public override void OnInitialize() { ; } #region NewRotation public static async Task<bool> AutoMode() { if (!Me.CurrentTarget.IsViable()) return false; return await WarriorRotation(); } private static async Task<bool> Aoe(bool force) { if (!force && !GeneralSettings.Aoe) return false; return await Spell.CastSpell("Overpower", Me, () => ((Me.CurrentManaPercent > 50 && ShouldAoe()) || Me.HasAura("Defiance") || force)); } private static bool ShouldAoe() { return VariableBook.HostileUnitsCount >= GeneralSettings.AoeCount; } public static async Task<bool> WarriorDefiance() { await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV")); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.NoneGcdCast("Bloodbath", Me, () => WarriorSettings.UseBloodbath && TargetIsNear() && Me.CurrentHealthPercent < WarriorSettings.BloodbathHpPercentage); await Spell.NoneGcdCast("Equilibrium", Me, () => WarriorSettings.UseEquilibrium && Me.CurrentHealthPercent < WarriorSettings.EquilibriumHpPercentage && UnitIsTargettingMe()); await Spell.NoneGcdCast("Featherfoot", Me, () => WarriorSettings.UseFeatherfoot && Me.CurrentHealthPercent < WarriorSettings.FeatherfootHpPercentage && UnitIsTargettingMe()); await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget, () => WarriorSettings.UseMercyStroke && (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20)); await Spell.NoneGcdCast("Internal Release", Me, () => WarriorSettings.UseInternalRelease && !Me.HasAura("Internal Release")); await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget, () => WarriorSettings.UseMercyStroke && (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20)); return false; } public static async Task<bool> WarriorDeliverance() { await Spell.CastSpell("Deliverance", Me, () => !Me.HasAura("Deliverance")); await Spell.ApplyCast("Fracture", Me.CurrentTarget, () => !Me.CurrentTarget.HasAura("Fracture", true, 4000) && Actionmanager.LastSpell.Name != ("Heavy Swing") && Actionmanager.LastSpell.Name != ("Skull Sunder") && Actionmanager.LastSpell.Name != ("Maim")); await Spell.CastSpell("Fell Cleave", Me.CurrentTarget, () => Me.CurrentTarget.CurrentHealthPercent >= 0); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV")); await Spell.CastSpell("Storm's Eye", () => Actionmanager.LastSpell.Name == "Maim"); await Spell.CastSpell("Maim", () => !Me.HasAura("Maim", true, 7000) && !Me.CurrentTarget.HasAura("Storm's Eye", true, 7000) && Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.NoneGcdCast("Equilibrium", Me, () => WarriorSettings.UseEquilibrium && Me.CurrentTPPercent < WarriorSettings.EquilibriumTpPercentage); await Spell.NoneGcdCast("Internal Release", Me, () => WarriorSettings.UseInternalRelease && !Me.HasAura("Internal Release")); await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget, () => WarriorSettings.UseMercyStroke && (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20)); return false; } public static async Task<bool> WarriorDefianceAoE() { // work in progress await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Steel Cyclone", Me, () => Me.HasAura("Infuriated")); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV")); await Spell.CastSpell("Overpower", Me.CurrentTarget, () => Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent >= 0); await Spell.CastSpell("Flash", Me, () => true); // off the Gcd weaving (pops light cds while tanking multiple mobs) await Spell.CastSpell("Bloodbath", Me, () => Me.CurrentHealthPercent <= 95); await Spell.CastSpell("Equilibrium", Me, () => Me.CurrentHealthPercent <= 60); await Spell.CastSpell("Featherfoot", Me, () => Me.CurrentHealthPercent <= 85); await Spell.CastSpell("Mercy Stroke", Me.CurrentTarget, () => Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20); return false; } public static async Task<bool> WarriorRotation() { if (!Me.CurrentTarget.IsViable()) await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV")); await Spell.ApplyCast("Fracture", Me.CurrentTarget, () => !Me.CurrentTarget.HasAura("Fracture", true, 4000) && Actionmanager.LastSpell.Name != ("Heavy Swing") && Actionmanager.LastSpell.Name != ("Skull Sunder") && Actionmanager.LastSpell.Name != ("Maim")); await Spell.CastSpell("Storm's Path", () => !Me.CurrentTarget.HasAura("Storm's Path", true, 4000) && Actionmanager.LastSpell.Name == "Maim"); await Spell.CastSpell("Storm's Eye", () => !Me.CurrentTarget.HasAura("Storm's Eye", true, 4000) && Actionmanager.LastSpell.Name == "Maim"); await Spell.CastSpell("Maim", () => !Me.CurrentTarget.HasAura("Storm's Eye", true, 15000) && Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.NoneGcdCast("Bloodbath", Me, () => WarriorSettings.UseBloodbath && TargetIsNear() && Me.CurrentHealthPercent < WarriorSettings.BloodbathHpPercentage); await Spell.NoneGcdCast("Equilibrium", Me, () => WarriorSettings.UseEquilibrium && Me.CurrentHealthPercent < WarriorSettings.EquilibriumHpPercentage && UnitIsTargettingMe()); await Spell.NoneGcdCast("Featherfoot", Me, () => WarriorSettings.UseFeatherfoot && Me.CurrentHealthPercent < WarriorSettings.FeatherfootHpPercentage && UnitIsTargettingMe()); await Spell.NoneGcdCast("Internal Release", Me, () => WarriorSettings.UseInternalRelease && !Me.HasAura("Internal Release")); await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget, () => WarriorSettings.UseMercyStroke && (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20)); return false; } public static async Task<bool> HotkeyMode() { if (!Me.CurrentTarget.IsViable()) return false; if (VariableBook.HkmSpecialKey) await WarriorDefiance(); if (VariableBook.HkmSpecialKey1) await WarriorDeliverance(); if (VariableBook.HkmMultiTarget) await WarriorDefianceAoE(); return await WarriorRotation(); } private static bool UnitIsTargettingMe() { return VariableBook.HostileUnitsTargettingMeCount > 0; } private static bool TargetIsNear() { return Me.CurrentTarget.Distance(Me) - Me.CurrentTarget.CombatReach < 3; } #endregion } }
For optimal performance with YRB as warrior you do not want it to use any cd's at all, you want to control that yourself because it can't differnate when jumps for example in a1s and so on comes, i'll pm you a modified rotation if you want that pushes well above 1100dps even when starting to maintank, however you gotta use every cd manually, which is where you gain alot of dps vs having automatic cd usage that might use cd's 5seconds before phase changes and thus wasting cd completly.
Hi everyone! I will see if I can add the Overlay stuff into the core along with new type of hotkeys. (no modifier required) Let me know if you're developing on YRB core, you can then PM me with your skype details. I'll see if I can create a group for you guys if you have ideas / stuff you want to see added into the core
I just modified it so we have working GCD UI for Warrior same as DRK and those rotation is not mine. I never tried to make rotation with buddy as I'm new here. But would love to try it, maybe your rotation will be useful for me to learn reborn C# and how to make rotation and optimize it
[HIDE] Put this into your warrior.cs file, for A3S i suggest removing brutal swing from each section and manually using it on cd until add phase and from then on using it when you need to interrupt adds/stunning them. Code: using System.Threading.Tasks; using ff14bot; using ff14bot.Enums; using ff14bot.Managers; using ff14bot.Objects; using YourRaidingBuddy.Helpers; using YourRaidingBuddy.Settings; using YourRaidingBuddy.Books; namespace YourRaidingBuddy.Rotations { public class Warrior : Root { private static LocalPlayer Me { get { return Core.Player; } } //Core.Player.CurrentTarget as BattleCharacter public override ClassJobType[] Class { get { return new[] { ClassJobType.Warrior }; } } public override void OnInitialize() { ; } #region NewRotation public static async Task<bool> AutoMode() { if (!Me.CurrentTarget.IsViable()) return false; return await WarriorRotation(); } public static async Task<bool> WarriorDefiance() { await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Inner Beast", Me, () => Me.CurrentHealthPercent <= 85); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.CastSpell("Mercy Stroke", Me.CurrentTarget, () => Me.CurrentTarget.CurrentHealthPercent <= 20); return false; } public static async Task<bool> WarriorDeliverance() { await Spell.CastSpell("Deliverance", Me, () => !Me.HasAura("Deliverance")); await Spell.CastSpell("Storm's Eye", () => Actionmanager.LastSpell.Name == "Maim"); await Spell.CastSpell("Maim", () => !Me.HasAura("Maim", true, 4000) && !Me.CurrentTarget.HasAura("Storm's Eye", true, 10000) && Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Fell Cleave", () => true); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => !Me.HasAura("Maim", true, 10000) && !Me.CurrentTarget.HasAura("Storm's Eye", true, 14000) && Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.CastSpell("Mercy Stroke", Me.CurrentTarget, () => Me.CurrentTarget.CurrentHealthPercent <= 20); await Spell.CastSpell("Brutal Swing", () => true); return false; } public static async Task<bool> WarriorDefianceAoE() { // work in progress await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV")); await Spell.CastSpell("Steel Cyclone", Me, () => Me.HasAura("Infuriated")); await Spell.CastSpell("Overpower", Me.CurrentTarget, () => Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent >= 75); await Spell.CastSpell("Flash", Me, () => true); // off the Gcd weaving (pops light cds while tanking multiple mobs) await Spell.CastSpell("Mercy Stroke", Me.CurrentTarget, () => Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20); await Spell.CastSpell("Brutal Swing", () => true); return false; } public static async Task<bool> WarriorRotation() { if (!Me.CurrentTarget.IsViable()) await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Storm's Eye", () => !Me.CurrentTarget.HasAura("Storm's Eye", true, 9000) && Actionmanager.LastSpell.Name == "Maim"); await Spell.CastSpell("Maim", () => !Me.CurrentTarget.HasAura("Storm's Eye", true, 10000) && Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Fell Cleave", () => true); await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder"); await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing"); await Spell.CastSpell("Heavy Swing", () => true); // off the Gcd weaving await Spell.CastSpell("Mercy Stroke", Me.CurrentTarget, () => Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20); await Spell.CastSpell("Brutal Swing", () => true); return false; } public static async Task<bool> HotkeyMode() { if (!Me.CurrentTarget.IsViable()) return false; if (VariableBook.HkmSpecialKey) await WarriorDefiance(); if (VariableBook.HkmSpecialKey1) await WarriorDeliverance(); if (VariableBook.HkmMultiTarget) await WarriorDefianceAoE(); return await WarriorRotation(); } #endregion } } [/HIDE]
Anyone know how to add the overlay into the rotations? I have it enabled in settings but when i press the hotkeys it does not change the status. Ninja Rotation: A Opener will not be created since I do that manually Goad Helper will not be added since I do this manually also AoE will be added at some point when I get it working. NOTE: Cast huton manually before pull NOTE: Kassatsu will mess up on A2 because the way it is setup it will cast if Vulnerability Up is on the target which will happen all the time. When I do A2 i am on the gob walker so I do not have to worry about this. I will eventually find a better way to deal with it. Current Rotation Priority 1. Keeping Huton Up with AC (Less then 15 sec left) 2. Dancing Edge if Storms Eye is not up 3. Shadow Fang 4. Mutilate 5. Armor Crush if you have dots and debuffs up and less then 40sec's on Huton 6. Aeolian Edge Ninjutsu Priority 1. Huton (Should never fall off since we use AC) 2. Suiton (If trick attack is available or about to come off CD within 1.3 sec) 3. Raiton or Fuma (Depends on your settings) 4. Will cast Kassatsu if vulnerability up is on the target (AKA TA) Features: Will cast dancing edge instead of AC or AE if you are in front of the boss Will Cast AC instead of AE if you are on flank Will Cast AE only if your behind the boss Weaves GCD as best as I could Auto rotation or Hotkey rotation (Personally I use hotkey for A3 and A4 Savage) If you are using hotkey rotation make sure you press the hotkey's for cooldown, Specialkey and Specialkey1 they are defaulted to off. Cooldown hotkey = TA, IR, BfB, Mug, DwaD Specialkey = Ninjutsu Specialkey1 = Juggulate (in case you need to interrupt like in A3) Settings (Will rename them later for better understanding) Huton Recast (default set to 6 sec's) ShurikenAlways = Only casts Shuriken instead of Raiton (Default Off) Use Kassatsu (Default On) BuffHP = Will only casts buff if target is above this HP MobHP = Will only Casts Dots if target is above this HP DancingEdge = Toggle on or off if your warrior is a little slow I turn it off DancingEdgeClip = timer left on dancing edge to recast MutilationClip = timer left on mutilation to recast ShadowfangClip = timer left on shadow fang to recast EmergencyHutonClip = timer left when to prioritize AC TrickIsBehindadjustment = do not touch this setting If you have more settings you want added let me know.
Ninja Changelog Hopefully Fixed Kassatsu single target for A2 and if you have another Ninja in the group, it should only be casted if Vulnerability is up and Trick Attack is on CD. Added AoE 1. If target is above 60%hp and has Kassatsu available it will cast Katon, Kass, then Doton 2. If target is below 60%hp and has Kassatsu available it will cast Katon, Kass, Katon 3. Will use Deathblossom if 5+ mobs are near (Disabled in settings by default) New Settings added and renamed some settings to make it more understandable 1. AoE Toggle 2. Death Blossom Toggle 3. Kassatsue in AoE Toggle Overlay Added for hotkeys (Hope u dont have OCD since the labels are off alignment) 1. Added Juggulate Label (Specialkey1 for hotkey rotation) 2. Added Ninjutsu Label (Specialkey for hotkey rotation) To turn on overlay (will need to be done everytime you boot up YourRaidingBuddy) click combat settings and then in the bottom left you should see the overlay button. Ninja.cs goes into YourRaidingBuddy > Rotations > Jobs NinjaSettigns.cs goes into YourRaidingBuddy > Core > Settings > Jobs Overlay.cs and Overlay.Designer.cs goes into YourRaidingBuddy > Core > Interface > GUI
Thanks for the great rotation Noxy, I was just wondering, can you tell me how you open with this in terms of buffs please?
Just let it do its opener until you're at 4stacks and about to get 5th stack, squeeze in berserk and internal release between the gcd's and use your vengeance or raw intuition for 5th stack to get 9gcd 3 fell cleave opener, pretty standard, i've peaked at 2200dps with this on thordan extreme for example.
So if anyone still developing on this routine, please give me a pm so I can give you the discord server for more direct approach to contact me etc.