Advertisement
LaoArchAngel

Kinetic Combat Rotation

May 26th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.37 KB | None | 0 0
  1. // Copyright (C) 2011-2016 Bossland GmbH
  2. // See the file LICENSE for the source code's detailed license
  3.  
  4. using System.Linq;
  5. using Buddy.BehaviorTree;
  6. using Buddy.CommonBot;
  7. using DefaultCombat.Core;
  8. using DefaultCombat.Helpers;
  9. using Targeting = DefaultCombat.Core.Targeting;
  10.  
  11. namespace DefaultCombat.Routines
  12. {
  13.     internal class KeneticCombat : RotationBase
  14.     {
  15.         private const string TelekineticThrow = "Telekinetic Throw";
  16.         private const string CascadingDebris = "Cascading Debris";
  17.         private const string SlowTime = "Slow Time";
  18.         private const string ForceBreach = "Force Breach";
  19.         private const string WhirlingBlow = "Whirling Blow";
  20.         private const string Project = "Project";
  21.         private const string HarnessedShadows = "Harnessed Shadows";
  22.         private const string SaberStrike = "Saber Strike";
  23.         private const string KineticWard = "Kinetic Ward";
  24.  
  25.         public override string Name
  26.         {
  27.             get { return "Shadow Kenetic Combat"; }
  28.         }
  29.  
  30.         public override Composite Buffs
  31.         {
  32.             get
  33.             {
  34.                 return new PrioritySelector(
  35.                     Spell.Buff("Combat Technique"),
  36.                     Spell.Buff("Force Valor"),
  37.                     Spell.Cast("Guard", on => Me.Companion,
  38.                         ret => Me.Companion != null && !Me.Companion.IsDead && !Me.Companion.HasBuff("Guard")),
  39.                     Spell.Buff("Stealth", ret => !Rest.KeepResting() && !DefaultCombat.MovementDisabled)
  40.                     );
  41.             }
  42.         }
  43.  
  44.         public override Composite Cooldowns
  45.         {
  46.             get
  47.             {
  48.                 return new PrioritySelector(
  49.                     Spell.Cast(KineticWard, ret => Me.BuffCount(KineticWard) <= 1 || Me.BuffTimeLeft(KineticWard) < 3),
  50.                     Spell.Buff("Force of Will"),
  51.                     Spell.Buff("Battle Readiness", ret => Me.HealthPercent <= 85),
  52.                     Spell.Buff("Deflection", ret => Me.HealthPercent <= 60),
  53.                     Spell.Buff("Resilience", ret => Me.HealthPercent <= 50),
  54.                     Spell.Buff("Force Potency")
  55.                     );
  56.             }
  57.         }
  58.  
  59.         private Decorator UseHarnessedShadows
  60.         {
  61.             get
  62.             {
  63.                 return new Decorator(
  64.                     ctx => HSCount > 2,
  65.                     new PrioritySelector(
  66.                         Spell.Cast(CascadingDebris, context => Me.Energy >= 30),
  67.                         Spell.Cast(TelekineticThrow, context => Me.Energy >= 30),
  68.                         Spell.Cast(SaberStrike)
  69.                         )
  70.                     );
  71.             }
  72.         }
  73.  
  74.         private Decorator BuildingHarnessedShadows
  75.         {
  76.             get
  77.             {
  78.                 return new Decorator(
  79.                     ret => HSCount < 3 || !CanUseHS,
  80.                     new PrioritySelector(
  81.                         Spell.Cast(Project),
  82.                         Spell.Cast(SlowTime)
  83.                         )
  84.                     );
  85.             }
  86.         }
  87.  
  88.         private Decorator DownTime
  89.         {
  90.             get
  91.             {
  92.                 return new Decorator(
  93.                     ctx => HSCount < 3 && !CanStackHS,
  94.                     new PrioritySelector(
  95.                         Spell.Cast(ForceBreach),
  96.                         StandardAttacks,
  97.                         Spell.Cast("Spinning Strike", ret => Me.CurrentTarget.HealthPercent <= 30f),
  98.                         Spell.Cast(SaberStrike)
  99.                         )
  100.                     );
  101.             }
  102.         }
  103.  
  104.         private Decorator StandardAttacks
  105.         {
  106.             get
  107.             {
  108.                 return new Decorator(
  109.                     ret => Me.CurrentTarget != null && Me.CurrentTarget.HealthPercent > 30f,
  110.                     new PrioritySelector(
  111.                         Spell.Cast("Shadow Strike", ret => Me.HasBuff("Shadow Wrap")),
  112.                         Spell.Cast("Double Strike")
  113.                         )
  114.                     );
  115.             }
  116.         }
  117.  
  118.         public override Composite SingleTarget
  119.         {
  120.             get
  121.             {
  122.                 return new LockSelector(
  123.                     Spell.Buff("Force Speed",
  124.                         ret =>
  125.                             !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f &&
  126.                             Me.CurrentTarget.Distance <= 3f),
  127.  
  128.                     //Movement
  129.                     CombatMovement.CloseDistance(Distance.Melee),
  130.  
  131.                     //Rotation
  132.                     Spell.Cast("Mind Snap", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
  133.                     Spell.Cast("Force Stun", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
  134.                     UseHarnessedShadows,
  135.                     BuildingHarnessedShadows,
  136.                     DownTime,
  137.                     Spell.Cast("Force Speed", ret => Me.CurrentTarget.Distance >= 1.1f && Me.IsMoving && Me.InCombat)
  138.                     );
  139.             }
  140.         }
  141.  
  142.         public override Composite AreaOfEffect
  143.         {
  144.             get
  145.             {
  146.                 return new Decorator(ret => Targeting.ShouldPbaoe,
  147.                     new PrioritySelector(
  148.                         RefreshDarkProtection,
  149.                         Spell.Cast(SlowTime),
  150.                         Spell.Cast(ForceBreach),
  151.                         Spell.Cast(Project,
  152.                             ctx => Me.HasBuff("Particle Acceleration") && HSCount < 3),
  153.                         Spell.Cast(WhirlingBlow),
  154.                         Spell.Cast(SaberStrike)
  155.                         ));
  156.             }
  157.         }
  158.  
  159.         private static Decorator RefreshDarkProtection
  160.         {
  161.             get
  162.             {
  163.                 return new Decorator(
  164.                     ctx => Me.BuffTimeLeft("Dark Protection") < 2,
  165.                     new PrioritySelector(
  166.                         Spell.Cast(TelekineticThrow),
  167.                         Spell.Cast(CascadingDebris)));
  168.             }
  169.         }
  170.  
  171.         private static bool CanStackHS
  172.         {
  173.             get
  174.             {
  175.                 return AbilityManager.CanCast(Project, Me.CurrentTarget) ||
  176.                        AbilityManager.CanCast(SlowTime, Me.CurrentTarget);
  177.             }
  178.         }
  179.  
  180.         private static bool CanUseHS
  181.         {
  182.             get
  183.             {
  184.                 return AbilityManager.CanCast(CascadingDebris, Me.CurrentTarget) ||
  185.                        AbilityManager.CanCast(TelekineticThrow, Me.CurrentTarget);
  186.             }
  187.         }
  188.  
  189.         private static int HSCount
  190.         {
  191.             get
  192.             {
  193.                 var hsBuff =
  194.                     Me.Buffs.SingleOrDefault(
  195.                         effect =>
  196.                             effect.Name.Equals(HarnessedShadows) &&
  197.                             effect.EffectNumber == 2);
  198.  
  199.                 return hsBuff == null ? 0 : hsBuff.GetStacks();
  200.             }
  201.         }
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement