Ok, i am using one of fredalbob's dragoon profile, but it always seems to just spam disembowel over and over. What needs to be changed?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using ff14bot;
using ff14bot.Enums;
using ff14bot.Managers;
using ff14bot.Navigation;
using ff14bot.Objects;
using TreeSharp;
using Action = TreeSharp.Action;
namespace Kupo.Rotations
{
public class LancerDragoon : KupoRoutine
{
public override int PullRange
{
get { return 5; }
}
public override ClassJobType[] Class
{
get { return new ClassJobType[]{ClassJobType.Dragoon, ClassJobType.Lancer, };}
}
protected override Composite CreatePreCombatBuffs()
{
return SummonChocobo();
}
protected override Composite CreateRest()
{
return DefaultRestBehavior(r => Core.Player.CurrentTPPercent);
}
private string[] PullSpells = new[] { "Heavy Thrust", "True Thrust" };
private string _BestPullSpell;
private string BestPullSpell
{
get
{
if (string.IsNullOrEmpty(_BestPullSpell))
{
foreach (var spell in PullSpells)
{
if (Actionmanager.HasSpell(spell))
{
_BestPullSpell = spell;
return spell;
}
}
_BestPullSpell = "Heavy Thrust";
return "Heavy Thrust";
}
else
{
return _BestPullSpell;
}
}
}
protected override Composite CreatePull()
{
return new PrioritySelector(
new Decorator(r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.ErrorNotInRange, new Action(r => Navigator.MoveTo(Core.Target.Location))),
new Decorator(r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.ErrorNotInFront, new Action(r => Core.Target.Face())),
Apply(r => BestPullSpell, r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.Success)
);
}
protected override Composite CreateCombat()
{
return new PrioritySelector(
Apply("Internal Release", r=> true, r => Core.Player),
Apply("Fracture"),
Apply("Plebotomize", r => Core.Player.ClassLevel >= 30),
Apply("Blood for Blood", r=> Core.Player.ClassLevel >= 12),
Cast("Impulse Drive", r => Core.Player.IsBehind == true),
Cast("Disembowel", r=> Core.Player.ClassLevel >= 38),
Cast("Chaos Thrust", r=> Core.Player.ClassLevel >= 50),
Cast("True Thrust", r => true),
Cast("Power Surge", r=> Core.Player.ClassLevel >= 45),
Cast("Jump", r=> Core.Player.ClassLevel >= 30),
Cast("Dragonfire Dive", r=> Core.Player.ClassLevel >= 50),
Cast("Full Thrust", r => Actionmanager.LastSpell.Name == "Vorpal Thrust"),
Cast("Vorpal Thrust", r => Actionmanager.LastSpell.Name == "True Thrust"),
Cast("Heavy Thrust", r => Core.Player.ClassLevel >= 12)// r => Actionmanager.LastSpellId == 0 || Actionmanager.LastSpell.Name == "Full Thrust" )
);
}
}
}
The priority should be: Internal Release (CD) > Blood for Blood (CD) > Heavy Thrust > Impulse Drive > Disembowel > Chaos Thrust > Plebotomize > Power Surge > Jump > Dragonfire Dive > True Thrust Combo Rotaiton
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using ff14bot;
using ff14bot.Enums;
using ff14bot.Managers;
using ff14bot.Navigation;
using ff14bot.Objects;
using TreeSharp;
using Action = TreeSharp.Action;
namespace Kupo.Rotations
{
public class LancerDragoon : KupoRoutine
{
public override int PullRange
{
get { return 5; }
}
public override ClassJobType[] Class
{
get { return new ClassJobType[]{ClassJobType.Dragoon, ClassJobType.Lancer, };}
}
protected override Composite CreatePreCombatBuffs()
{
return SummonChocobo();
}
protected override Composite CreateRest()
{
return DefaultRestBehavior(r => Core.Player.CurrentTPPercent);
}
private string[] PullSpells = new[] { "Heavy Thrust", "True Thrust" };
private string _BestPullSpell;
private string BestPullSpell
{
get
{
if (string.IsNullOrEmpty(_BestPullSpell))
{
foreach (var spell in PullSpells)
{
if (Actionmanager.HasSpell(spell))
{
_BestPullSpell = spell;
return spell;
}
}
_BestPullSpell = "Heavy Thrust";
return "Heavy Thrust";
}
else
{
return _BestPullSpell;
}
}
}
protected override Composite CreatePull()
{
return new PrioritySelector(
new Decorator(r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.ErrorNotInRange, new Action(r => Navigator.MoveTo(Core.Target.Location))),
new Decorator(r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.ErrorNotInFront, new Action(r => Core.Target.Face())),
Apply(r => BestPullSpell, r => Actionmanager.InSpellInRangeLOS(BestPullSpell, Core.Target) == SpellRangeCheck.Success)
);
}
protected override Composite CreateCombat()
{
return new PrioritySelector(
Apply("Internal Release", r=> true, r => Core.Player),
Apply("Fracture"),
Apply("Plebotomize", r => Core.Player.ClassLevel >= 30),
Apply("Blood for Blood", r=> Core.Player.ClassLevel >= 12),
Cast("Impulse Drive", r => Core.Player.IsBehind == true),
Cast("Disembowel", r=> Core.Player.ClassLevel >= 38),
Cast("Chaos Thrust", r=> Core.Player.ClassLevel >= 50),
Cast("True Thrust", r => true),
Cast("Power Surge", r=> Core.Player.ClassLevel >= 45),
Cast("Jump", r=> Core.Player.ClassLevel >= 30),
Cast("Dragonfire Dive", r=> Core.Player.ClassLevel >= 50),
Cast("Full Thrust", r => Actionmanager.LastSpell.Name == "Vorpal Thrust"),
Cast("Vorpal Thrust", r => Actionmanager.LastSpell.Name == "True Thrust"),
Cast("Heavy Thrust", r => Core.Player.ClassLevel >= 12)// r => Actionmanager.LastSpellId == 0 || Actionmanager.LastSpell.Name == "Full Thrust" )
);
}
}
}
The priority should be: Internal Release (CD) > Blood for Blood (CD) > Heavy Thrust > Impulse Drive > Disembowel > Chaos Thrust > Plebotomize > Power Surge > Jump > Dragonfire Dive > True Thrust Combo Rotaiton