Thank you so much for continuing to work on this routine I love this routine because it seems to be the only actual tanking routine!!! much love <3
If you could add 2 more hotkey's that would be amazing. Also make the overlay size a bit bigger, when I customized it for my own it could barley fit the 2 new overlays labels without them being cut off.
Hi wolfrain62, I will be adding the new overlay that arrived in Rebornbuddy 1-2 months ago this weekend, I'll add a short guide / template inside the source code when I've added it.
Core Update is coming along well. Overlay is working, GUI has been remade from scratch. I've added 2 more SpecialKeys + some minor documentation on how to edit the name on the keys for Overlay Text + inside the Hotkey Tab. Overlay Picture (NOT fully complete)
It's already live, but I haven't made any guides yet. Editing the SpecialKeys you need to go to following :: Interface.cs (Look under Paladin job for examples) and HotkeyManager (There should be an example there)
So, I've been working on a bit of a warrior routine designed to be able to be swapped between stances manually. It takes advantage of the warrior debuffs, aiming for 100% uptime on Storm's Eye and Storm's Path on your primary target, however, this does mean as the target changes, it can have a bit of a painful time as it reapplies both of these. If another warrior already has them up, it won't attempt to apply, and goes straight into a DPS rotation. This is designed with several cross-classes in mind, including Internal Release, Provoke (Manual use only), Convalescence, Flash, Awareness. At 75% health it triggers off Foresight/Awareness for defense while healers heal you, at 35%, it kicks off Thrill of Battle, Convalescenese, equib if you're in tank stance, infuriate, blood bath, and inner beast if you're infuriated and in tank stance. I've mostly been running as an i180 warrior tank in A1-A3, and it's allowed me to keep up threat pretty closely with the current rounds of i200-i210 geared DPS in the raids. This also supports some basic AoE rotations, taking advantage of Decimate or Steel Cyclone, and will use Infuriate if you're at 3 stacks or below of Wrath/Abandon to trigger these two off. Out of ApE, it prefers to use it on Fell Cleave if you're in DPS stance, to keep your aggro high. At my current iLevel, whacking the training dummies, I'm around 650 DPS in DPS stance, 350-400 in Tank, though my gear is awful, so take it as you will. This also tends to keep my TP relatively high, completely whacking the training dummy, I'm hitting around 4-5 minutes before I run out of TP, and DPS is stable through that time. Running in A1-A3, I'm not having any TP issues at all, likely because of the phase changes and buffs from the various people around me. Comments and suggestions are welcome, and I'm glad to try out other rotations that may be suggested. Code: using System.Net.Configuration; 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() { return await MainRotation(); } public static async Task<bool> HotkeyMode() { return await MainRotation(); } public static async Task<bool> MainRotation() { if (!Me.CurrentTarget.IsViable()) return false; if (Me.CurrentHealthPercent < 75) await MitigationRotation(); if (Me.CurrentHealthPercent < 35) await HealingRotation(); if (VariableBook.HkmMultiTarget && await AoeRotation()) return true; if (await Spell.CastSpell("Fell Cleave", () => Me.HasAura("Uncontrollable") && (Actionmanager.LastSpell.Name == "Skull Sunder" || Actionmanager.LastSpell.Name == "Butcher's Block"))) return true; if (!Me.CurrentTarget.HasAura("Storm's Eye") && await StormEyeRotation()) return true; if (!Me.CurrentTarget.HasAura("Storm's Path") && await StormPathRotation()) return true; // if (await Spell.CastSpell("Fracture", () => !Me.CurrentTarget.HasAura("Fracture"))) return true; return await DpsRotation(); } public static async Task<bool> StormEyeRotation() { if (await Spell.CastSpell("Storm's Eye", () => Actionmanager.LastSpell.Name == "Maim")) return true; if (await Spell.CastSpell("Maim", () => Actionmanager.LastSpell.Name == "Heavy Swing")) return true; if (await Spell.CastSpell("Heavy Swing", () => true)) return true; return false; } public static async Task<bool> StormPathRotation() { if (await Spell.CastSpell("Storm's Path", () => Actionmanager.LastSpell.Name == "Maim")) return true; if (await Spell.CastSpell("Maim", () => Actionmanager.LastSpell.Name == "Heavy Swing")) return true; if (await Spell.CastSpell("Heavy Swing", () => true)) return true; return false; } // Me.HasAura("Deliverance") ; !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") ; Me.HasAura("Uncontrollable") // Me.HasAura("Defiance") ; !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") ; Me.HasAura("Infuriated") public static async Task<bool> DpsRotation() { await Spell.CastSpell("Internal Release", Me, () => true); await Spell.CastSpell("Berserk", Me, () => Me.HasAura("Deliverance")); if (await Spell.CastSpell("Flash", Me, () => Me.HasAura("Defiance") && Me.CurrentMana > 800)) return true; await Spell.CastSpell("Unchained", Me, () => Me.HasAura("Infuriated")); if (await Spell.CastSpell("Steel Cyclone", Me, () => Me.HasAura("Infuriated"))) return true; await Spell.CastSpell("Brutal Swing", () => true); await Spell.CastSpell("Mercy Stroke", () => Me.CurrentTarget.CurrentHealthPercent < 20 && Me.CurrentTarget != null && (Actionmanager.LastSpell.Name == "Skull Sunder" || Actionmanager.LastSpell.Name == "Butcher's Block")); await Spell.CastSpell("Infuriate", Me, () => (Me.HasAura("Abandon") || Me.HasAura("Abandon II") || Me.HasAura("Abandon III")) && (Actionmanager.LastSpell.Name == "Skull Sunder" || Actionmanager.LastSpell.Name == "Butcher's Block")); if (await Spell.CastSpell("Fell Cleave", () => Me.HasAura("Uncontrollable") && (Actionmanager.LastSpell.Name == "Skull Sunder" || Actionmanager.LastSpell.Name == "Butcher's Block"))) return true; if (await Spell.CastSpell("Butcher's Block", () => Actionmanager.LastSpell.Name == "Skull Sunder")) return true; if (await Spell.CastSpell("Skull Sunder", () => Actionmanager.LastSpell.Name == "Heavy Swing")) return true; if (await Spell.CastSpell("Heavy Swing", () => true)) return true; return false; } public static async Task<bool> AoeRotation() { if (Me.HasAura("Deliverance")) { await Spell.CastSpell("Infuriate", Me, () => Me.HasAura("Abandon") || Me.HasAura("Abandon II") || Me.HasAura("Abandon III")); if (await Spell.CastSpell("Decimate", () => Me.HasAura(734))) return true; } else if (Me.HasAura("Defiance")) { await Spell.CastSpell("Infuriate", Me, () => Me.HasAura("Wrath") || Me.HasAura("Wrath II") || Me.HasAura("Wrath III")); if (await Spell.CastSpell("Steel Cyclone", () => Me.HasAura("Infuriated"))) return true; } return false; } public static async Task<bool> MitigationRotation() { await Spell.CastSpell("Foresight", Me, () => true); await Spell.CastSpell("Awareness", Me, () => true); return true; } public static async Task<bool> HealingRotation() { await Spell.CastSpell("Thrill of Battle", Me, () => true); await Spell.CastSpell("Convalescence", Me, () => true); await Spell.CastSpell("Equilibrium", Me, () => Me.HasAura("Defiance")); await Spell.CastSpell("Infuriate", Me, () => true); await Spell.CastSpell("Bloodbath", Me, () => true); await Spell.CastSpell("Inner Beast", Me, () => Me.HasAura("Infuriated")); return true; } #endregion } }
Wolfrain, Love your ninja profile. Thank you very much for it. One question, can you add HP check for suiton?
Yea Np, as soon as i find out how to fix the overlay refresh ill upload the updated ninja cr and new overlay files.
@Xcesius gonna need some help on the overlay, I got it working but the logs will spam [19:58:21.205 N] [YourRaidingBuddy] Overlay: Rendering the overlay (YRBNinjutsu). Here is the log: View attachment 11688 2015-12-30 13.57.txt Here is the overlaycontrol file I changed: View attachment OverlayControl.cs I know it has to do with the overlayrefresh but it should work just like the others that do not spam the log.
wolfrain62, Please create a get; set for OverlayRefreshSpecialKey in VariableBook VariableBook.OverlayRefreshCooldowns = false; Then edit this line under YRBNinjutsu to VariableBook.OverlayRefreshSpecialKey = false;
awesome its fixed tnx. Ninja Changelog: Updated Overlay with the new overlay Added Sution HP setting Hotkey Settings: Cooldowns include Internal Release, Blood for Blood, Mug, and Dream within a Dream Specialkey = Ninjutsu and Kassatsu Specialkey1 = Juggulate Specialkey2= Suiton Specialkey3 = Dancing Edge Ninja.cs goes into YourRaidingBuddy > Rotations > Jobs NinjaSettings.cs goes into YourRaidingBuddy > Core > Settings > Jobs OverlayControl.cs goes into YourRaidingBuddy > Core > Interface > Overlay
thank you very much wolfrain and xcesius. awesome addition. donated ps; can i join discord? i am learning, altho very slowly, to trying to make a monk routine.
Can anyone guide me a little please? I'm trying to make a very simple profile to learn. But, It does not use any spells. Could anyone point me my mistake, and help me figure it some please? thank you very much in advance.
Added wolfrain62's latest ninja rotation files. Added Krahandas's latest warrior rotation files Added fakeangels3 Monk rotation. Added Monk into Behaviors.cs so that the rotation executes. Also fakeangels3, I have pm'ed both you and wolfrain62 the discord server.
Is the progress bar on the front page still accurate? Judging by recent posts it looks like you're quite a bit further along .