• Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Default Combat Discussion

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

    1. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Hey folks, I will be working my way though the rotations, test each one out and providing some feedback on how they play in RL. I have toons in most every class, so this will take a while, but I thought I would just give basic feedback on missing items in rotations, etc. first, with some raiding notes if folks find those helpful.

      Here are a few suggestions / adds to the Assassin Deception spec:

      Added new ability - Ball Lightning at lvl 57
      Added Shock into rotation, Ball Lightning replaces at lvl 57
      Added Saber Strike into rotation for low resource management, plus it helps proc static charge
      Added InCombat handler for Recklessness, I was finding that it would pop when clicking on my toon

      Code:
      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      
      namespace DefaultCombat.Routines
      {
          class Deception : RotationBase
          {
              public override string Name { get { return "Assassin Deception"; } }
      
              public override Composite Buffs
              {
                  get
                  {
                      return new PrioritySelector(
                          Spell.Buff("Surging Charge"),
                          Spell.Buff("Mark of Power"),
                          Spell.Buff("Stealth", ret => !Rest.KeepResting() && !DefaultCombat.MovementDisabled && !Me.IsMounted)
                          );
                  }
              }
      
              public override Composite Cooldowns
              {
                  get
                  {
                      return new LockSelector(
                          Spell.Buff("Unbreakable Will", ret => Me.IsStunned),
                          Spell.Buff("Overcharge Saber", ret => Me.HealthPercent <= 85),
                          Spell.Buff("Deflection", ret => Me.HealthPercent <= 60),
                          Spell.Buff("Force Shroud", ret => Me.HealthPercent <= 50),
                          Spell.Buff("Recklessness", ret => Me.BuffCount("Static Charge") < 1 && Me.InCombat),
                          Spell.Buff("Blackout", ret => Me.ForcePercent <= 40)
                          );
                  }
              }
      
              public override Composite SingleTarget
              {
                  get
                  {
                      return new LockSelector(
                          Spell.Buff("Force Speed", ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),
      
                          //Movement
                          CombatMovement.CloseDistance(Distance.Melee),
      
                          //Interrupts
                          Spell.Cast("Jolt", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                          Spell.Cast("Electrocute", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                          Spell.Cast("Low Slash", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
      
                          //Rotation
                          Spell.Cast("Discharge", ret => Me.BuffCount("Static Charge") == 3),
      					Spell.Cast("Shock", ret => Me.BuffCount("Induction") == 2 && Me.Level < 57),
      					Spell.Cast("Ball Lightning", ret => Me.BuffCount("Induction") == 2 && Me.Level >= 57),
                          Spell.Cast("Maul", ret => (Me.HasBuff("Stealth") || Me.HasBuff("Duplicity")) && Me.IsBehind(Me.CurrentTarget)),
                          Spell.Cast("Assassinate", ret => Me.CurrentTarget.HealthPercent <= 30),
                          Spell.Cast("Voltaic Slash", ret => Me.Level >= 26),
                          Spell.Cast("Thrash", ret => Me.Level < 26),
      					Spell.Cast("Saber Strike"),
                          Spell.Cast("Force Speed", ret => Me.CurrentTarget.Distance >= 1.1f && Me.IsMoving && Me.InCombat)
                          );
                  }
              }
      
              public override Composite AreaOfEffect
              {
                  get
                  {
                      return new Decorator(ret => Targeting.ShouldPBAOE,
                              Spell.Cast("Lacerate", ret => Me.ForcePercent >= 60)
                      );
                  }
              }
          }
      }
      
      Raiding Notes: (these are just suggestions, you may have to adjust for your style of play - passive abilities, etc.)
      -I typically don't enable force speed options because I like to use it myself when needed and with new Emersion passive, its nice to keep this on cooldown for when you need it most
      -I also disable Force Shroud, it does have some cooldown qualities, but some fights you need to save this at all costs, so I either set the value really low, or just disable and use manually
      -Low Slash I dont use, at max level it really doesn't make sense, unless you are using the passive Hand of Darkness
      -I have slight difference to Maul ability - Spell.Cast("Maul", ret => Me.HasBuff("Duplicity") && Me.IsBehind(Me.CurrentTarget)) - I dont use the "Stealth" buff, found it unreliable
      -I don't use Thrash, too much resource and I have found that Saber Strike, although does less damage and takes longer for animation, makes my resource not tank so quickly, allowing for higher damage output overall

      Thats it, sorry for the book, hope this helps others using this rotation. I have been using Pure rotation for long time, and now moving over to DefaultCombat. My next rotation focus will be Merc - Innovative Ordinance
       
    2. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Good feedback. I'll get it up on the SVN soon, and you'll see it after the next bot update.
       
    3. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Awesome, I am working on Merc IO, will probably be done later today. Out of curiosity, about how often are you guys releasing updates?
       
    4. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      I do it whenever I get around to it, or whenever someone posts an update here. I am taking my doctoral exams on two weeks, so the updates from me will be less frequent for awhile. If you post an update here, I'll try to get it up ASAP.

      EDIT: just pushed your updates to Assassin Deception to the SVN. You can download now to test, or wait until the next auto-update.
       
      Last edited: Jan 23, 2015
    5. ceh430

      ceh430 Member

      Joined:
      Feb 1, 2014
      Messages:
      31
      Likes Received:
      0
      Trophy Points:
      6
      Code:
      Spell.Buff("Dark Ward", ret => Me.BuffCount("Dark Ward") <= 1 || Me.BuffTimeLeft("Dark Ward") < 2),


      this does not work anymore, it will reapply dark ward only when buff completly fall off, tried different amount of buffcounts and timeleft but nothing :) maybe because dark ward name have number of charges inside now?
       
    6. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38

      What is the exact name of the buff?
       
    7. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Here are my suggestions to the Merc Innovative Ordnance rotation: (This is a really difficult rotation, but insane dps numbers if done right)

      -Added Emergency Scan to cooldowns, its fairly cheap (15 heat), and nice for survivability
      -Took out Rail Shot from Low Resource handler, this just may be my own preference, but I like to regain resource as fast as possible
      -Added Mag Shot to rotation - lvl 57 replacement for Railshot
      -Added Missle Blast as a sub 30% ability, used with Volatile Warhead buff only
      -Added a second Mag Shot ability because I didn't know how to create an 'or' contition for the 'Superheated Shot' buff the procs, this could likely be combined with the first Mag Shot line
      -Added Power Shot to instant proc from Speed to Burn buff, alternatively Serrated Shot can be instant proc as well, I just choose power shot for overall damage
      -Added Serrated Shot lvl 41 DOT
      -Added debuff handler to Incendiary Missle
      -Added SuperCharged Gas with InCombat handler
      -Moved up Electo Net to take advantage of SuperCharged Gas buff
      -Added Unload to rotation, this is used to provide crit on Mag Shot every 60 sec, plus its decent dps
      -Disabled Fusion Missle because of low damage output compared to Death from Avove and Sweeping Blasters, however, is useful for Dot spreading, for some fights this is better

      Code:
      using Buddy.BehaviorTree;
      using DefaultCombat.Core;
      using DefaultCombat.Helpers;
      
      namespace DefaultCombat.Routines
      {
          public class InnovativeOrdnance : RotationBase
          {
              public override string Name { get { return "Mercenary Innovative Ordnance"; } }
      
              public override Composite Buffs
              {
                  get
                  {
                      return new PrioritySelector(
                          Spell.Buff("Combustible Gas Cylinder"),
                          Spell.Buff("Hunter's Boon")
                          );
                  }
              }
      
              public override Composite Cooldowns
              {
                  get
                  {
                      return new LockSelector(
                          Spell.Buff("Determination", ret => Me.IsStunned),
                          Spell.Buff("Vent Heat", ret => Me.ResourcePercent() >= 50),
                          Spell.Buff("Energy Shield", ret => Me.HealthPercent <= 40),
      	            Spell.Buff("Emergency Scan", ret => Me.HealthPercent <= 35),
                          Spell.Buff("Kolto Overload", ret => Me.HealthPercent <= 30)
                          );
                  }
              }
      
              public override Composite SingleTarget
              {
                  get
                  {
                      return new LockSelector(
      
                          //Movement
                          CombatMovement.CloseDistance(Distance.Ranged),
      
                          new Decorator(ret => Me.ResourcePercent() > 40,
                              new LockSelector(
                                  //Spell.Cast("Rail Shot", ret => Me.HasBuff("Prototype Particle Accelerator")),
                                  Spell.Cast("Rapid Shots")
                          )),
      
                          //Rotation
      		    Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting && Me.CurrentTarget.Distance <= Distance.Melee && !DefaultCombat.MovementDisabled),
      		    Spell.Cast("Mag Shot", ret => Me.HasBuff("Innovative Particle Accelerator") && Me.Level >= 57),
      		    Spell.Cast("Rail Shot", ret => Me.Level < 57),
      		    Spell.Cast("Missle Blast", ret => Me.CurrentTarget.HealthPercent <= 30 && Me.HasBuff("Volatile Warhead")),
      		    Spell.Cast("Mag Shot", ret => Me.HasBuff("Superheated Shot")),
      		    Spell.Cast("Power Shot", ret => Me.HasBuff("Speed to Burn")),
      		    Spell.DoT("Serrated Shot", "", 15000, ret => !Me.CurrentTarget.HasDebuff("Marked (Physical)")),
      		    Spell.DoT("Incendiary Missile", "", 12000, ret => !Me.CurrentTarget.HasDebuff("Burning (Incendiary Round)")),
      	            Spell.Cast("Supercharged Gas", ret => Me.BuffCount("Supercharge") == 10 && Me.InCombat),
      		    Spell.Cast("Electro Net", ret => Me.HasBuff("Supercharged Gas") && Me.CurrentTarget.HealthPercent > 30),
      		    Spell.Cast("Unload"),
                          Spell.Cast("Thermal Detonator"),
                          Spell.Cast("Power Shot")
                          );
                  }
              }
      
              public override Composite AreaOfEffect
              {
                  get
                  {
                      return new Decorator(ret => Targeting.ShouldAOE,
                          new LockSelector(
                              Spell.CastOnGround("Death from Above", ret => Me.CurrentTarget.Distance > Distance.MeleeAoE),
                              //Spell.Cast("Fusion Missle", ret => Me.HasBuff("Thermal Sensor Override")),
      		        Spell.CastOnGround("Sweeping Blasters", ret => Me.CurrentTarget.Distance > Distance.MeleeAoE),
                              Spell.Cast("Explosive Dart"))
                      );
                  }
              }
          }
      }
      
      Raiding Notes: (these are just suggestions, you may have to adjust for your style of play - passive abilities, etc.)
      -This is one of the most difficult rotations in the game, but can produce insane DPS
      -Resouces management is the biggest issue; you may have to tweek the low resource handler percentage a bit to get better results, however, overall I am pretty satisfied
      -Some fights with lots of adds, Dot spreading with Explosive Dart and Fusion Missle are necessary, so you may want to tweek which AOE's you use
      -I also take the ranged distance check off for the AOE's, this didnt work well in previous versions of Pure, but seem more realiable in the current Default routine.

      Please let me know if anyone figures out how to combine some of my repeated lines. I am not brilliant with code, suggestions welcome :) Thanks

      EDIT: I think I have found a way to combine the Mag Shot lines, still not sure on Power Shot:

      Mag Shot line should look something like this I think:

      Code:
      Spell.Cast("Mag Shot", ret => Me.HasBuff("Innovative Particle Accelerator") || Me.HasBuff("Superheated Shot") && Me.Level >= 57),
      
       
      Last edited: Jan 23, 2015
    8. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Check what I have for Commando/Assault (whatever the mirror is), does that closely resemble what you're looking for?
       
    9. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Yes, I see what you did there in the Assault rotation. I will match up the abilities and repost the IO rotation.
       
    10. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Help me understand how the Spell.DoT works;

      Code:
      Spell.DoT("Serrated Shot", "", 15000),
      
      Does this mean that Serrated Shot will be cast every 15 sec?
       
    11. Altard

      Altard New Member

      Joined:
      Jul 27, 2014
      Messages:
      130
      Likes Received:
      3
      Trophy Points:
      0
      When I boot up Buddy wing I get this error, unable to do anything else, wont let me pick a routine ( as it says) or anything else.

      There are 0 instructions on how to 'install' or get this to work so I plopped them into the routines folder after having to google for awhile to figure out where to put them

      Compiler Error: c:\Users\xxx\Downloads\BuddyWing 1.0.1138.557\Routines\DefaultCombat\DefaultCombat.cs(29,24) : error CS0246: The type or namespace name 'IManItem' could not be found (are you missing a using directive or an assembly reference?)
      Compiler Error: c:\Users\xxx\Downloads\BuddyWing 1.0.1138.557\Routines\DefaultCombat\Core\Targeting.cs(34,49) : error CS0103: The name 'Health' does not exist in the current context
      Compiler Error: c:\Users\Axxs\Downloads\BuddyWing 1.0.1138.557\Routines\DefaultCombat\Core\Targeting.cs(35,49) : error CS0103: The name 'Distance' does not exist in the current context
      Compiler Error: c:\Users\xxx\Downloads\BuddyWing 1.0.1138.557\Routines\DefaultCombat\Core\Targeting.cs(36,49) : error CS0103: The name 'Distance' does not exist in the current context
      Unhandled exception during init: System.InvalidOperationException: No routines were loaded. Please ensure there is a routine for your class before starting the bot.
      at Buddy.CommonBot.BotMain.SetCurrentCombatRoutine()
      at Buddywing.MainWindow.DoInitialization()
      Buddy Wing: The Old Robot is ready!

      I got rid of the errors, when googling (error CS0103) I only found a single thread that said merge it with default combat routines, instead of doing that I just put the Pure swtor folder completely different and didn't get an error when compiling.
       
      Last edited: Jan 24, 2015
    12. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      You don't have to do anything; DefaultCombat ships with Buddywing. Do a fresh install and try again.

      As for instructions for the bot itself, walter has a nice guide on all kinds of minor fixes and improvements you can make, I always recommend it for new users.
       
    13. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Here's a little pro tip that changed my coding abilities when I discovered it: you can find the definition of anything by right-clicking it and selecting "Go To Definition." This requires you to open the entire DefaultCombat project file in Visual Studio, but you should be doing that anyway when you're editing routines.

      When we find the Definition of Spell.DoT, we see
      Code:
      public static Composite DoT(string spell, string debuff, float time = 0, Selection<bool> reqs = null)
              {
                  return DoT(spell, ret => Me.CurrentTarget, debuff, time, reqs);
              }
      So we can look at the available elements for this function. "string spell" means that we need a string (words) with the name of the spell. So you'd use something like "Serrated Shot". Next we have "string debuff," which means we need a string with the EXACT name of the debuff. In your case it's probably something like "Bleeding (Serrated Shot)" but you need to confirm this. Note that in both cases, capitalization and punctuation are CRUCIAL*. You may note that some routines use a blank "" in place of the actual debuff. That is a relic from pre-3.0**; it is always preferable to use the name of the debuff over what comes next. Next you have "float time", which is the amount of time this spell is "blacklisted" for this target. It is a backup in case you can't get the name of the debuff (or the debuff name is shared). You don't ever need to use the float time if you have the debuff name (and the name is unique), and it's always preferable to use the name over the float time. Finally, you have the "reqs", which are any requirements you want to add in. You can add in any normal check you'd use anywhere else. Maybe this dot only needs to be cast on bosses or silvers. Maybe you only when to cast it when you have enough energy/cells/force. Whatever the case, you can add more requirements if necessary.

      Here's how I'd write Serrated Shot:
      Code:
      Spell.DoT("Serrated Shot", "debuff name"),
      *I once spent hours trying to figure out why the bot wasn't casting Slow-release Medpac. I had typed in Slow-Release Medpac. The difference between r and R is enough to fuck the whole thing up.

      **Before 3.0, debuffs frequently shared a name: "Bleeding" or "Burning". This made it impossible for DoT specs to differentiate between debuffs. We were forced to use the float times because there was no other way to make it work.
       
    14. ceh430

      ceh430 Member

      Joined:
      Feb 1, 2014
      Messages:
      31
      Likes Received:
      0
      Trophy Points:
      6
      Dark Ward (15),
      Dark Ward (14),
      .
      .
      .

      Dark Ward (1)


      :(
       
    15. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      Hm, it should be working then. I'm working on my Darkness Assassin next (once my Scoundrel hits 60, he's 59.5 right now), so I'll take a look. My first instinct is maybe some problem with Spell.Buff (which wants to cast on the player) when we should be using Spell.Cast or maybe Spell.HoT instead.

      Like I said, I'll take a look soon and see if I can figure it out, but if you want to try those changes in the interim and report back that would be great.
       
    16. lonestar

      lonestar New Member

      Joined:
      May 15, 2013
      Messages:
      23
      Likes Received:
      0
      Trophy Points:
      0
      Alltrue - thanks for the explanation on the Spell.Dot, I will take a look at that in VS, I don't have it installed on this machine, but I do on another. I figured it was from a previous version, but the 'reqs' section definitely looks intriguing and has some potential. Something I will have to play around with, because, most of the time you want Dots to be up on targets with high HP, but lesser targets that will go down quicker, I don't want a channeled Dot, it would waste too much time. Thank you sir, time to get coding :)
       
    17. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38
      In the past, I would frequently set DoTs to only cast on silver and great mobs, but this expansion has made a lot of abilities and procs dependent on having the bleed/burn/dot on the target. Just watch out for those synergies.
       
    18. tdubs96

      tdubs96 Member

      Joined:
      Aug 10, 2013
      Messages:
      87
      Likes Received:
      3
      Trophy Points:
      8
      So now this is picking up my jedi shadow as a balance sage
       
    19. alltrueist

      alltrueist Active Member

      Joined:
      Dec 10, 2012
      Messages:
      1,424
      Likes Received:
      16
      Trophy Points:
      38

      I can fix this easily, but I need a log and the correct name of the Shadow spec (it's Serenity or something like that I think)
       
    20. tdubs96

      tdubs96 Member

      Joined:
      Aug 10, 2013
      Messages:
      87
      Likes Received:
      3
      Trophy Points:
      8
      Yes i am a Serenity Shadow and here is the log
       

      Attached Files:

    Share This Page