It hasn't been updated for about 2 months.is this even still being updated? Ive seen the core at 90% and ui at 99% for months I think, no?
current svn i just pulled is 1287.
It hasn't been updated for about 2 months.is this even still being updated? Ive seen the core at 90% and ui at 99% for months I think, no?
current svn i just pulled is 1287.
is this even still being updated? Ive seen the core at 90% and ui at 99% for months I think, no?
current svn i just pulled is 1287.
// 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));
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; }
}
}
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
}
}
[HIDE]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
[/HIDE]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.
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] 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.
[/HIDE]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 } }
Thanks for the great rotation Noxy, I was just wondering, can you tell me how you open with this in terms of buffs please?