• Visit Rebornbuddy
  • Default Combat Discussion

    Discussion in 'Combat Routines' started by Ama, Jan 5, 2015.

    1. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Put that Sawbones.cs file I posted just above your post and it works perfectly.
       
    2. wired203

      wired203 Community Developer

      Joined:
      Jan 22, 2015
      Messages:
      391
      Likes Received:
      1
      Trophy Points:
      18
      Sweet glad to see it's coming along and working, I recall everyone saying setting the tank hasn't worked in forever but it's good now my companion had constant Kolto probes. You found out the companion targeting before, could you see if what you did for that would fix the companion detection under the set tank? I recall you found it was being called out incorrectly before.
       
    3. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      I think it was because the rotation was looking for TorPlayers but the companion is a TorNPC. They are both under the umbrella of TorCharacters though.

      btw, here's Sage/Seer:
      PHP:
      // Copyright (C) 2011-2015 Bossland GmbH
      // See the file LICENSE for the source code's detailed license

      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;

      namespace 
      DefaultCombat.Routines
      {
          
      internal class Seer RotationBase
          
      {
              public 
      override string Name
              
      {
                  
      get { return "Sage Seer"; }
              }

              public 
      override Composite Buffs
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Force Valor")
                          );
                  }
              }

              public 
      override Composite Cooldowns
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Force Potency"ret => Targeting.ShouldAoeHeal),
                          
      Spell.Buff("Mental Alacrity"ret => Targeting.ShouldAoeHeal),
                          
      Spell.Buff("Vindicate"ret => NeedForce()),
                          
      Spell.Buff("Force Mend"ret => Me.HealthPercent <= 75)
                          );
                  }
              }

              public 
      override Composite SingleTarget
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      //Movement
                          
      CombatMovement.CloseDistance(Distance.Ranged),
                          
      Spell.Cast("Mind Snap"ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                          
      Spell.Cast("Force Stun"ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                          
      Spell.Cast("Forcequake"ret => Targeting.ShouldAoe),
                          
      Spell.Cast("Mind Crush"),
                          
      Spell.DoT("Weaken Mind""Weaken Mind"),
                          
      Spell.Cast("Project"),
                          
      Spell.Cast("Telekinetic Throw"),
                          
      Spell.Cast("Disturbance")
                          );
                  }
              }

              public 
      override Composite AreaOfEffect
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      //Cleanse if needed
                          
      Spell.Cleanse("Restoration"),

                          
      //Emergency Heal (Insta-cast)
                          
      Spell.Heal("Benevolence"80ret => Me.HasBuff("Altruism")),

                          
      //Aoe Heal
                          
      Spell.HealGround("Salvation"ret => Targeting.ShouldAoeHeal),

                          
      //Single Target Healing
                          
      Spell.Heal("Healing Trance"80),
                          
      Spell.HoT("Force Armor"90ret => HealTarget != null && !HealTarget.HasDebuff("Force-imbalance")),

                          
      //Buff Tank
                          
      Spell.HoT("Force Armor"onUnit => Tank100ret => Tank != null && Tank.InCombat && !Tank.HasDebuff("Force-imbalance")),
                          
      Spell.Heal("Wandering Mend"onUnit => Tank100,
                              
      ret => Tank != null && Tank.InCombat && Me.BuffCount("Wandering Mend Charges") <= 1),

                          
      //Use Force Bending
                          
      new Decorator(ret => Me.HasBuff("Conveyance"),
                              new 
      PrioritySelector(
                                  
      Spell.Heal("Healing Trance"90),
                                  
      Spell.Heal("Deliverance"50)
                                  )),

                          
      //Build Force Bending
                          
      Spell.HoT("Rejuvenate"80),
                          
      Spell.HoT("Rejuvenate"onUnit => Tank100ret => Tank != null && Tank.InCombat),

                          
      //Single Target Healing                  
                          
      Spell.Heal("Benevolence"35),
                          
      Spell.Heal("Deliverance"80)
                          );
                  }
              }

              private 
      bool NeedForce()
              {
                  if (
      Me.ForcePercent <= 20)
                      return 
      true;
                  if (
      Me.HasBuff("Resplendence") && Me.ForcePercent 80 && !Me.HasBuff("Amnesty"))
                      return 
      true;
                  return 
      false;
              }
          }
      }
      and Commando/CombatMedic:
      PHP:
      // Copyright (C) 2011-2015 Bossland GmbH
      // See the file LICENSE for the source code's detailed license

      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;

      namespace 
      DefaultCombat.Routines
      {
          
      internal class CombatMedic RotationBase
          
      {
              public 
      override string Name
              
      {
                  
      get { return "Commando Combat Medic"; }
              }

              public 
      override Composite Buffs
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Fortification"),
                          
      Spell.Buff("Combat Support Cell")
                          );
                  }
              }

              public 
      override Composite Cooldowns
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Tenacity"),
                          
      Spell.Buff("Supercharged Cell",
                              
      ret =>
                                  
      Me.ResourceStat >= 20 && HealTarget != null && HealTarget.HealthPercent <= 80 &&
                                  
      Me.BuffCount("Supercharge") == 10),
                          
      Spell.Buff("Adrenaline Rush"ret => Me.HealthPercent <= 30),
                          
      Spell.Buff("Reactive Shield"ret => Me.HealthPercent <= 70),
                          
      Spell.Buff("Reserve Powercell"ret => Me.ResourceStat <= 60),
                          
      Spell.Buff("Recharge Cells"ret => Me.ResourceStat <= 50),
                          
      Spell.Cast("Tech Override"ret => Tank != null && Tank.HealthPercent <= 50)
                          );
                  }
              }

              public 
      override Composite SingleTarget
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      //Movement
                          
      CombatMovement.CloseDistance(Distance.Ranged),
                          
      Spell.Cast("Disabling Shot"ret => Me.CurrentTarget.IsCasting),
                          
      Spell.Cast("High Impact Bolt"),
                          
      Spell.Cast("Full Auto"),
                          
      Spell.Cast("Charged Bolts"ret => Me.ResourceStat >= 70),
                          
      Spell.Cast("Hammer Shot")
                          );
                  }
              }

              public 
      override Composite AreaOfEffect
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(

                          new 
      Decorator(ret => Me.HasBuff("Supercharged Cell"),
                              new 
      PrioritySelector(
                                  
      Spell.HealGround("Kolto Bomb"ret => !Tank.HasBuff("Kolto Residue")),
                                  
      Spell.Heal("Bacta Infusion"60),
                                  
      Spell.Heal("Advanced Medical Probe"85)
                                  )),

                          
      //Dispel
                          
      Spell.Cleanse("Field Aid"),

                          
      //AoE Healing
                          
      Spell.HealAoe("Successive Treatment"ret => Targeting.ShouldAoeHeal),
                          
      Spell.HealGround("Kolto Bomb"ret => !Tank.HasBuff("Kolto Residue")),

                          
      //Single Target Healing
                          
      Spell.Heal("Bacta Infusion"80),
                          
      Spell.Heal("Advanced Medical Probe"80),
                          
      Spell.Heal("Medical Probe"75),

                          
      //Keep Trauma Probe on Tank
                          
      Spell.HoT("Trauma Probe"100),

                          
      //To keep Supercharge buff up; filler heal
                          
      Spell.Heal("Med Shot"onUnit => Tank100ret => Tank != null && Me.InCombat)
                          );
                  }
              }
          }
      }
       
    4. wired203

      wired203 Community Developer

      Joined:
      Jan 22, 2015
      Messages:
      391
      Likes Received:
      1
      Trophy Points:
      18
      Thanks to Alltrueist for making some updated routines we now have Sawbones, Seer, and CombatMedic updates. I keep having to make updates so I'm going to roll a new thread to keep track of all the testing. If we can make sure these fixes are solid for BOTH heals and DPS then we can get them added to GitHub and they will come down with a buddywing update. Thread started, if all checks out and works and is put into general circulation then we will close that thread down and resume back here.

      Some people were trying to keep up with the last so many pages and this should make it easier to track.

      https://www.thebuddyforum.com/buddy...-default-combat-test-edition.html#post2173809
       
    5. Bighurt23

      Bighurt23 New Member

      Joined:
      Nov 10, 2012
      Messages:
      20
      Likes Received:
      0
      Trophy Points:
      1
      Anyone else having a problem with Watchmen routine? Stops attacking about 2 minutes in. Have to manually start it back
       
    6. Cass

      Cass New Member

      Joined:
      Jan 24, 2014
      Messages:
      98
      Likes Received:
      2
      Trophy Points:
      0
      deadly saber interrupts ravage

      Hello there folks

      i did some tweaks on mara anihi rotation would like some feedbacks

      PHP:
      // Copyright (C) 2011-2015 Bossland GmbH
      // See the file LICENSE for the source code's detailed license

      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      using Buddy.Swtor.Objects;
      using Buddy.Swtor;

      namespace 
      DefaultCombat.Routines
      {
          
      internal class Annihilation RotationBase
          
      {
              public 
      override string Name
              
      {
                  
      get { return "Marauder Annihilation"; }
              }

              public 
      override Composite Buffs
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Juyo Form"),
                          
      Spell.Buff("Unnatural Might")
                          );
                  }
              }

              public 
      override Composite Cooldowns
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
      Spell.Buff("Cloak of Pain"ret => Me.HealthPercent <= 90),
                          
      Spell.Buff("Undying Rage"ret => Me.HealthPercent <= 20),
                          
      Spell.Buff("Saber Ward"ret => Me.HealthPercent <= 50),
                          
      Spell.Buff("Frenzy"ret => Me.BuffCount("Fury") < 5),
                          
      Spell.Buff("Berserk"ret => Me.BuffCount("Fury") > 29)
                          );
                  }
              }

              public 
      override Composite SingleTarget
              
      {
                  
      get
                  
      {
                      return new 
      PrioritySelector(
                          
                          
      //Rotation
                          
      Spell.Cast("Deadly Saber"
                              
      ret => 
                              !
      Me.HasBuff("Deadly Saber") &&
                              !
      BuddyTor.Me.IsCasting),
                          
      Spell.Cast("Battering Assault"
                              
      ret => 
                              
      Me.ActionPoints <= 6),
                          
      Spell.Cast("Force Rend"
                              
      ret => 
                              !
      Me.CurrentTarget.HasDebuff("Force Rend")),
                          
      Spell.Cast("Rupture"
                              
      ret => 
                              !
      Me.CurrentTarget.HasDebuff("Bleeding (Rupture)")),
                          
      Spell.Cast("Dual Saber Throw"
                              
      ret => 
                              
      Me.HasBuff("Pulverize")),
                          
      Spell.Cast("Annihilate"),
                          
      Spell.Cast("Vicious Throw"
                              
      ret => 
                              
      Me.CurrentTarget.HealthPercent <= 30),
                          
      Spell.Cast("Ravage"),
                          
      Spell.Cast("Vicious Slash"
                              
      ret => 
                              
      Me.ActionPoints >= &&
                              !
      Me.HasBuff("Pulverize") &&
                              
      Me.CurrentTarget.HasDebuff("Force Rend") &&
                              
      Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") &&
                              !
      Buddy.CommonBot.AbilityManager.CanCast("Vicious Throw"Me.CurrentTarget) &&
                              !
      Buddy.CommonBot.AbilityManager.CanCast("Ravage"Me.CurrentTarget) &&
                              !
      Buddy.CommonBot.AbilityManager.CanCast("Annihilate"Me.CurrentTarget)),
                          
      Spell.Cast("Assault"
                              
      ret => 
                              
      Me.ActionPoints 7)
                          );
                  }
              }

              public 
      override Composite AreaOfEffect
              
      {
                  
      get
                  
      {
                      return new 
      Decorator(ret => Targeting.ShouldPbaoe,
                          new 
      PrioritySelector(
                              
      Spell.Cast("Dual Saber Throw",
                                  
      ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),
                              
      Spell.Cast("Smash",
                                  
      ret => Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") && Me.CurrentTarget.HasDebuff("Force Rend")),
                              
      Spell.DoT("Force Rend""Force Rend"),
                              
      Spell.DoT("Rupture""Bleeding (Rupture)"),
                              
      Spell.Cast("Sweeping Slash")
                              ));
                  }
              }
          }
      }
      One thing i tried to fix but couldnt its that deadlysaber casts in the middle of ravage sometimes, interupting it.
      I tried using deadly saber as buff, as spell.cast and finnaly put a check for iscasting but none of them worked so far.
      Anyone have any ideia what could i do to fix this?
       
    7. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      That's weird because there is a built-in check for the entire bot Spell.WaitForCast() that won't fire off an ability while we're casting. Hmm.
       
    8. Cryogenesis

      Cryogenesis Moderator Moderator

      Joined:
      Jul 13, 2010
      Messages:
      2,128
      Likes Received:
      13
      Trophy Points:
      38
      Maybe its because the lockselectors are gone, it might not read the correct state of casting.
       
    9. Cryogenesis

      Cryogenesis Moderator Moderator

      Joined:
      Jul 13, 2010
      Messages:
      2,128
      Likes Received:
      13
      Trophy Points:
      38
      Ok so i updated my Rest.cs to use Stims and XP Boosters.
      For testing purposes:
      Code:
              private static Composite Stims
              {
                  get
                  {
                      bool StimBuffed = false;
                      bool StimUsed = false;
                      TorItem tiu = null;
      
                      using (BuddyTor.Memory.AcquireFrame())
                      {
                          return new Action(delegate
                          {
                              foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Stim")) { StimBuffed = true; break; }
                              if (!StimBuffed)
                              {
                                  var Attrs = ("Command;Fortitude;Versatile;Skill;Might;Resolve;Reflex").Split(';');
                                  foreach (TorItem ti in Me.InventoryEquipment)
                                  {
                                      bool AttrIn = false;
                                      foreach (string attr in Attrs) if (ti != null && !ti.IsDeleted && ti.Name.Contains(attr)) { AttrIn = true; break; }
                                      if (AttrIn && ti != null && !ti.IsDeleted && ti.Name != null && ti.Name.Contains(" Stim"))
                                      {
                                          bool UseIt = false;
                                          if (ti.Name.Contains("Command") || ti.Name.Contains("Fortitude") || ti.Name.Contains("Versatile") || ti.Name.Contains("Skill") || ti.Name.Contains("Might") || ti.Name.Contains("Resolve") || ti.Name.Contains("Reflex"))
                                          {
                                              UseIt = true;
                                              if (UseIt)
                                              {
                                                  ti.Use();
                                                  ti.Interact();
                                                  tiu = ti;
                                                  StimUsed = true;
                                                  Thread.Sleep(500);
                                                  break;
                                              }
                                          }
                                      }
                                  }
                              }
                              if (StimUsed)
                              {
                                  Logger.Write("Stim -" + tiu.Name + "- found in inventory and used.");
                                  StimUsed = false;
                                  return RunStatus.Success;
                              }
                              return RunStatus.Failure;
                          });
                      }
                  }
              }
      
              private static Composite XPBoost
              {
                  get
                  {
                      bool XPBuffed = false;
                      bool XPUsed = false;
                      TorItem tiu = null;
      
                      using (BuddyTor.Memory.AcquireFrame())
                      {
                          return new Action(delegate
                          {
                              foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Experience Boost")) { XPBuffed = true; break; }
                              if (!XPBuffed && Me.Level < 65)
                              {
                                  foreach (TorItem ti in Me.InventoryEquipment)
                                  {
                                      bool UseIt = false;
                                      if (ti.Name.Contains("Experience Boost"))
                                      {
                                          UseIt = true;
                                          if (UseIt)
                                          {
                                              ti.Use();
                                              ti.Interact();
                                              tiu = ti;
                                              XPUsed = true;
                                              Thread.Sleep(500);
                                              break;
                                          }
                                      }
                                  }
                              }
                              if (XPUsed)
                              {
                                  Logger.Write("XP Booster -" + tiu.Name + "- found in inventory and used.");
                                  XPUsed = false;
                                  return RunStatus.Success;
                              }
                              return RunStatus.Failure;
                          });
                      }
                  }
              }
      
              public static Composite HandleRest
      		{
      			get
      			{
      				return new PrioritySelector(
      					ReviveCompanion,
      					Rejuvenate,
                          Stims,
                          XPBoost
      					);
      			}
      		}
      
      Past it under Rejuvenate and overwrite public static Composite HandleRest.
      Do note XP booster will be used if you have any and are below lvl 65, but will not always report what booster is used.
       
      Last edited: Mar 25, 2016
    10. Xanathos

      Xanathos Active Member

      Joined:
      Jul 25, 2010
      Messages:
      1,030
      Likes Received:
      6
      Trophy Points:
      38
      Made some changes to the Marksman Routine:

      Added popping Crouch if you weren't already crouched as most abilities need that to work and it wasn't doing that.
      Added low health Ballistic Shield.
      Added Cover Pulse on point blank StrongOrGreater targets (to get them out of your face).

      Code:
      // Copyright (C) 2011-2016 Bossland GmbH
      // See the file LICENSE for the source code's detailed license
      
      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      
      namespace DefaultCombat.Routines
      {
          internal class Marksmanship : RotationBase
          {
              public override string Name
              {
                  get { return "Sniper Marksmanship"; }
              }
      
              public override Composite Buffs
              {
                  get
                  {
                      return new PrioritySelector(
                          Spell.Buff("Coordination")
                          );
                  }
              }
      
              public override Composite Cooldowns
              {
                  get
                  {
                      return new PrioritySelector(
                          Spell.Buff("Escape", ret => Me.IsStunned),
                          Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 70),
                          Spell.Buff("Evasion", ret => Me.HealthPercent <= 30),
                          Spell.Buff("Ballstic Shield", ret => Me.HealthPercent <=15),
                          Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 40),
                          Spell.Buff("Sniper Volley", ret => Me.EnergyPercent <= 60),
                          Spell.Buff("Entrench", ret => Me.CurrentTarget.StrongOrGreater() && Me.IsInCover()),
                          Spell.Buff("Cover Pulse", ret => Me.CurrentTarget.Distance <= 1f && Me.CurrentTarget.StrongOrGreater()),
                          Spell.Buff("Crouch"),
                          Spell.Buff("Laze Target"),
                          Spell.Buff("Target Acquired")
                          );
                  }
              }
      
              public override Composite SingleTarget
              {
                  get
                  {
                      return new PrioritySelector(
                          //Movement
                          CombatMovement.CloseDistance(Distance.Ranged),
      
                          //Low Energy
                          new Decorator(ret => Me.EnergyPercent < 60,
                              new PrioritySelector(
                                  Spell.Cast("Rifle Shot")
                                  )),
      
                          //Rotation
                          Spell.Cast("Distraction", ret => Me.CurrentTarget.IsCasting),
                          Spell.Cast("Followthrough"),
                          Spell.Cast("Penetrating Blasts", ret => Me.Level >= 26),
                          Spell.Cast("Series of Shots", ret => Me.Level < 26),
                          Spell.DoT("Corrosive Dart", "Corrosive Dart"),
                          Spell.Cast("Ambush", ret => Me.BuffCount("Zeroing Shots") == 2),
                          Spell.Cast("Takedown", ret => Me.CurrentTarget.HealthPercent <= 30),
                          Spell.Cast("Snipe")
                          );
                  }
              }
      
              public override Composite AreaOfEffect
              {
                  get
                  {
                      return new Decorator(ret => Targeting.ShouldAoe,
                          new PrioritySelector(
                              Spell.CastOnGround("Orbital Strike"),
                              Spell.Cast("Fragmentation Grenade"),
                              Spell.CastOnGround("Suppressive Fire")
                              ));
                  }
              }
          }
      }
      Will work on the Rotations as I get more familiar with the updated game. I'm still in the pre-60 stuff so we'll see what needs to change.
       
    11. LaoArchAngel

      LaoArchAngel Member

      Joined:
      Oct 14, 2010
      Messages:
      101
      Likes Received:
      1
      Trophy Points:
      18
      Changed the Kinetic Combat routine. I did not fix the misspelling.

      http://pastebin.com/ZAHETVwn

      The main changes are based around using Telekinetic Throw / Cascading Debris correctly, as well as fixing some bugs that caused the bot to stop functioning properly (eg, Kinetic Ward should use Spell.Cast instead of Spell.Debuff if you want to refresh before the last stack falls)
       
      Last edited: May 26, 2016
    12. Cybs

      Cybs Member

      Joined:
      Aug 23, 2015
      Messages:
      56
      Likes Received:
      0
      Trophy Points:
      6
      Thank you for that but is there any way we can make the profile stop looting and harvesting, especially running to nods on the map.
       
    13. Praline

      Praline Member

      Joined:
      Aug 17, 2015
      Messages:
      150
      Likes Received:
      2
      Trophy Points:
      18
      Not sure if it still works, but we used to simply edit the "BuddyWingSettings.XML" file that you will find in the "Settings" folder under your character's name.
      Look for :

      <LootNpcs>true</LootNpcs> and change that to "false"

      same with :

      LootProfessionHarvestables>true</LootProfessionHarvestables>
       
    14. Cybs

      Cybs Member

      Joined:
      Aug 23, 2015
      Messages:
      56
      Likes Received:
      0
      Trophy Points:
      6
      Thanks that sometimes work sometimes the bot still loots and harvests. Why he does that I have no idea
       
    15. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Got some updates, since I've been playing DvL lately:

      Vanguard/Tactics:
      Code:
      // Copyright (C) 2011-2016 Bossland GmbH
      // See the file LICENSE for the source code's detailed license
      
      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      
      namespace DefaultCombat.Routines
      {
      	public class Tactics : RotationBase
      	{
      		public override string Name
      		{
      			get { return "Vanguard Tactics"; }
      		}
      
      		public override Composite Buffs
      		{
      			get
      			{
      				return new PrioritySelector(
      					Spell.Buff("High Energy Cell"),
      					Spell.Buff("Fortification")
      					);
      			}
      		}
      
      		public override Composite Cooldowns
      		{
      			get
      			{
      				return new PrioritySelector(
      					Spell.Buff("Tenacity"),
                          Spell.Buff("Shoulder Cannon", ret => Me.CurrentTarget.BossOrGreater()),
                          Spell.Buff("Recharge Cells", ret => Me.ResourcePercent() <= 50),
      					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 60),
      					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
      					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
      					Spell.Buff("Battle Focus")
      					);
      			}
      		}
      
      		public override Composite SingleTarget
      		{
      			get
      			{
      				return new PrioritySelector(
      					//Movement
      					Spell.Cast("Storm", ret => Me.CurrentTarget.Distance >= 1f && !DefaultCombat.MovementDisabled),
      					CombatMovement.CloseDistance(Distance.Melee),
                          Spell.Cast("Shoulder Cannon", ret => Me.HasBuff("Shoulder Cannon") && Me.CurrentTarget.BossOrGreater()),
                          new Decorator(ret => Me.ResourcePercent() < 60,
      						new PrioritySelector(
      							Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Tactical Accelerator")),
      							Spell.Cast("Hammer Shot")
      							)),
      					Spell.Cast("Riot Strike", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
      					Spell.Cast("Cell Burst", ret => Me.BuffCount("Energy Lode") == 4),
      					Spell.Cast("High Impact Bolt",
      						ret => Me.CurrentTarget.HasDebuff("Bleeding") && Me.HasBuff("Tactical Accelerator")),
      					Spell.DoT("Gut", "Bleeding"),
      					Spell.Cast("Assault Plastique", ret => Me.CurrentTarget.StrongOrGreater()),
      					Spell.Cast("Stockstrike", ret => Me.ResourcePercent() >= 60),
      					Spell.Cast("Tactical Surge", ret => Me.Level >= 26 && Me.ResourcePercent() >= 60),
      					Spell.Cast("Ion Pulse", ret => Me.Level < 26 && Me.ResourcePercent() >= 60)
      					);
      			}
      		}
      
      		public override Composite AreaOfEffect
      		{
      			get
      			{
      				return new PrioritySelector(
      					new Decorator(ret => Targeting.ShouldAoe,
      						new PrioritySelector(
      							Spell.CastOnGround("Mortar Volley"),
      							Spell.Cast("Sticky Grenade", ret => Me.CurrentTarget.HasDebuff("Bleeding"))
      							)),
      					new Decorator(ret => Targeting.ShouldPbaoe,
      						new PrioritySelector(
      							Spell.Cast("Explosive Surge", ret => Me.ResourcePercent() >= 60))
      						));
      			}
      		}
      	}
      }
      Juggernaut/Vengeance:
      Code:
      // Copyright (C) 2011-2016 Bossland GmbH
      // See the file LICENSE for the source code's detailed license
      
      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      
      namespace DefaultCombat.Routines
      {
      	internal class Vengeance : RotationBase
      	{
      		public override string Name
      		{
      			get { return "Juggernaut Vengeance"; }
      		}
      
      		public override Composite Buffs
      		{
      			get
      			{
      				return new PrioritySelector(
      					Spell.Buff("Shien Form"),
      					Spell.Buff("Unnatural Might")
      					);
      			}
      		}
      
      		public override Composite Cooldowns
      		{
      			get
      			{
      				return new PrioritySelector(
      					Spell.Buff("Unleash", ret => Me.IsStunned),
      					Spell.Buff("Enraged Defense", ret => Me.HealthPercent <= 50),
      					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 90),
      					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 70),
      					Spell.Buff("Endure Pain", ret => Me.HealthPercent <= 30),
      					Spell.Buff("Enrage", ret => Me.ActionPoints <= 6)
      					);
      			}
      		}
      
      		public override Composite SingleTarget
      		{
      			get
      			{
      				return new PrioritySelector(
      					Spell.Cast("Saber Throw",
      						ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 0.5f && Me.CurrentTarget.Distance <= 3f),
      					Spell.Cast("Force Charge",
      						ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),
      
      					//Movement
      					CombatMovement.CloseDistance(Distance.Melee),
      
      					//Rotation
      					Spell.Cast("Disruption", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
      					Spell.Cast("Force Scream", ret => Me.BuffCount("Savagery") == 2),
      					Spell.Cast("Vicious Throw", ret => Me.HasBuff("Destroyer") || Me.CurrentTarget.HealthPercent <= 30),
      					Spell.Cast("Shatter"),
      					Spell.Cast("Impale"),
      					Spell.Cast("Sundering Assault", ret => Me.ActionPoints <= 7),
      					Spell.Cast("Ravage"),
      					Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 9),
      					Spell.Cast("Assault", ret => Me.ActionPoints < 9),
      					Spell.Cast("Retaliation")
      					);
      			}
      		}
      
      		public override Composite AreaOfEffect
      		{
      			get
      			{
      				return new Decorator(ret => Targeting.ShouldPbaoe,
      					new PrioritySelector(
      						Spell.Cast("Vengeful Slam"),
      						Spell.Cast("Smash"),
      						Spell.Cast("Sweeping Slash")
      						));
      			}
      		}
      	}
      }
      Both work great, tested over many hours solo and in Flashpoints. Tactics especially destroys stuff in good gear. If anyone still has GIT rights (I lost my login info) please upload these to the base bot.
       
    16. mulga73

      mulga73 Member

      Joined:
      Jan 4, 2013
      Messages:
      113
      Likes Received:
      1
      Trophy Points:
      18


      has this been tested in a grp ?
       
    17. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      The code will work 100% if we ever get the health issue fixed. Right now, the bot can't read other players' health numbers, so it always thinks everyone is at 0 health.
       
    18. mulga73

      mulga73 Member

      Joined:
      Jan 4, 2013
      Messages:
      113
      Likes Received:
      1
      Trophy Points:
      18
      ahhh dam that kinda really sucks. im sure you will figure it out haha.
       
    19. exaccuss

      exaccuss Active Member

      Joined:
      Nov 10, 2013
      Messages:
      1,021
      Likes Received:
      6
      Trophy Points:
      38
      For combat, i was referring to this guide: it seems to be pretty up to date and he is quite known in the swtor community. Hayete
      I honestly dont know when the changes regarding saber throw being removed were changed. I only started playing swtor on patch 5.0. After doing a google search, it was before the latest expansion though. If you are not following a guide, how do you know the combat routines do at least half decent dps?
       
    20. Karik

      Karik New Member

      Joined:
      Mar 25, 2013
      Messages:
      29
      Likes Received:
      1
      Trophy Points:
      3
      Sorry if i am being stupid guys but where can i find the SVN for the default with the latest updates ?!?!? it seems i am not able to find it anywhere
      Thanks in advance
       

    Share This Page