• Visit Rebornbuddy
  • Simple Legion rotation

    Discussion in 'Paladin' started by munakfreak, Aug 7, 2016.

    1. munakfreak

      munakfreak New Member

      Joined:
      Jan 10, 2015
      Messages:
      11
      Likes Received:
      0
      Trophy Points:
      0
      Simple Legion Ret rotation

      Wrote this up quickly because Singular wasn't giving me the results i wanted. I used https://www.thebuddyforum.com/honor...paladin/241633-pve-winifix-retri-paladin.html as a base, removed the contents of it and added in the current skills i use. This got me up from 15k-ish to to 25k-ish on the training dummies and up near 30k during Archimonde.

      Probably not ideal but it works for me.

      It will make sure you always have Greater Blessing of Might on you and will pop wings whenever it is on cooldown. I am using Final Verdict, Zeal, Blinding Light, Blade of Wrath, Justicar's Vengeance, Cavalier and Divine Purpose. If anyone has any suggestions feel free to send them to me or post below.

      Updated Copy (Waits for Judgment before using abilities. Need feedback on this)
      PHP:
      using System.Threading.Tasks;
      using CommonBehaviors.Actions;
      using Styx;
      using Styx.Common;
      using Styx.CommonBot;
      using Styx.CommonBot.Coroutines;
      using Styx.CommonBot.Routines;
      using Styx.TreeSharp;
      using Styx.WoWInternals.WoWObjects;
      //using System.Windows.Media;
      using System.Collections.Generic;
      using Styx.WoWInternals;
      using System.Linq;

      namespace 
      SimpleRetRotation
      {
          public class 
      SimpleRetRotation CombatRoutine
          
      {
              public 
      override WoWClass Class { get { return StyxWoW.Me.Specialization == WoWSpec.PaladinRetribution WoWClass.Paladin WoWClass.None; } }
              public 
      override string Name get { return "[munakfreak] Simple Pally Ret"; } }

              public 
      override Composite CombatBehavior get { return new ActionRunCoroutine(ctx => CombatCoroutine()); } }
              public 
      override Composite PreCombatBuffBehavior get { return new ActionRunCoroutine(ctx => PreCombatCoroutine()); } }

              
      #region Behaviors   
              
      private static async Task<boolPreCombatCoroutine()
              {
                  
      // Pause while casting, dead, mounted etc   
                  
      if (StyxWoW.Me.IsCasting || SpellManager.GlobalCooldown || !StyxWoW.Me.IsAlive || StyxWoW.Me.Mounted || StyxWoW.Me.IsOnTransport)
                      return 
      true;

                  
      // Return false at the end of the buffing logic   
                  // If we don't return false, then it'll prevent moving further down the 'global' tree. I.e. it won't call CombatBehavior etc.   
                  
      return false;
              }

              static 
      IEnumerable<WoWUnitUnfriendlyUnits
              
      {
                  
      get
                  
      {
                      return 
      ObjectManager.GetObjectsOfType<WoWUnit>(truefalse).
                        
      Where(=> !u.IsDead &&
                              
      u.CanSelect &&
                              
      u.Attackable &&
                              !
      u.IsFriendly &&
                              
      u.IsWithinMeleeRange);
                  }
              }

              private static 
      async Task<boolCombatCoroutine()
              {
                  
      // Pause while casting etc   
                  
      if (StyxWoW.Me.IsCasting || SpellManager.GlobalCooldown)
                      return 
      true;

                  if (!
      StyxWoW.Me.CurrentTarget.IsAlive || !StyxWoW.Me.CurrentTarget.IsWithinMeleeRange)
                      return 
      true;

                  if (!
      StyxWoW.Me.HasAura("Avenging Wrath"))
                      if (
      await SpellCast("Avenging Wrath")) return true;

                  if (
      await SpellCast("Judgment")) return true;

                  if (
      StyxWoW.Me.CurrentHolyPower >= || StyxWoW.Me.HasAura("Divine Purpose"))
                  {
                      if (
      StyxWoW.Me.HasAura("Divine Purpose") && StyxWoW.Me.CurrentTarget.HasAura("Judgment"))
                          if (
      await SpellCast("Justicar's Vengeance")) return true;

                      if (
      UnfriendlyUnits.Count() >= 3)
                          if (
      StyxWoW.Me.CurrentHolyPower >= && await SpellCast("Divine Storm")) return true;

                      if (
      StyxWoW.Me.CurrentTarget.HasAura("Judgment"))
                          if (
      StyxWoW.Me.CurrentHolyPower >= && await SpellCast("Templar's Verdict")) return true;
                  }

                  if (
      await SpellCast("Blade of Justice")) return true;

                  if (
      await SpellCast("Crusader Strike")) return true;

                  return 
      false;
              }
              
      #endregion

              #region Casting Tasks   
              
      private static async Task<boolSpellCast(string spellWoWUnit target)
              {
                  
      // Return false if we can't cast the spell   
                  
      if (!SpellManager.CanCast(spell))
                      return 
      false;

                  
      // Cast spell, return false if it fails to cast   
                  
      if (!SpellManager.Cast(spelltarget))
                      return 
      false;

                  
      //Logging.Write("[Retri] Cast {0} on {1}", spell, target.SafeName);  

                  // Wait for lag   
                  
      await CommonCoroutines.SleepForLagDuration();

                  
      // return true - we've cast the spell successfully.   
                  
      return true;
              }

              private static 
      async Task<boolSpellCast(string spell)
              {
                  return 
      await SpellCast(spellStyxWoW.Me.CurrentTarget);
              }
              
      #endregion
          
      }
      }

      Older Copy
      PHP:
      using System.Threading.Tasks;
      using CommonBehaviors.Actions;
      using Styx;
      using Styx.Common;
      using Styx.CommonBot;
      using Styx.CommonBot.Coroutines;
      using Styx.CommonBot.Routines;
      using Styx.TreeSharp;
      using Styx.WoWInternals.WoWObjects;
      using System.Windows.Media;
      using System.Collections.Generic;
      using Styx.WoWInternals;
      using System.Linq;

      namespace 
      SimpleRetRotation
      {
          public class 
      SimpleRetRotation CombatRoutine
          
      {
              public 
      override WoWClass Class { get { return StyxWoW.Me.Specialization == WoWSpec.PaladinRetribution WoWClass.Paladin WoWClass.None; } }
              public 
      override string Name get { return "[munakfreak] Simple Pally Ret"; } }

              public 
      override Composite CombatBehavior get { return new ActionRunCoroutine(ctx => CombatCoroutine()); } }
              public 
      override Composite PreCombatBuffBehavior get { return new ActionRunCoroutine(ctx => PreCombatCoroutine()); } }

              
      #region Behaviors 
              
      private static async Task<boolPreCombatCoroutine()
              {
                  
      // Pause while casting, dead, mounted etc 
                  
      if (StyxWoW.Me.IsCasting || SpellManager.GlobalCooldown || !StyxWoW.Me.IsAlive || StyxWoW.Me.Mounted || StyxWoW.Me.IsOnTransport)
                      return 
      true;

                  
      // Check if we have our self buff on
                  
      if (!StyxWoW.Me.HasAura("Greater Blessing of Might") && await SpellCast("Greater Blessing of Might"))
                      return 
      true;

                  
      // Return false at the end of the buffing logic 
                  // If we don't return false, then it'll prevent moving further down the 'global' tree. I.e. it won't call CombatBehavior etc. 
                  
      return false;
              }

              static 
      IEnumerable<WoWUnitUnfriendlyUnits
              
      {
                  
      get
                  
      {
                      return 
      ObjectManager.GetObjectsOfType<WoWUnit>(truefalse).
                        
      Where(=> !u.IsDead &&
                              
      u.CanSelect &&
                              
      u.Attackable &&
                              !
      u.IsFriendly &&
                              
      u.IsWithinMeleeRange);
                  }
              }

              private static 
      async Task<boolCombatCoroutine()
              {
                  
      // Pause while casting etc 
                  
      if (StyxWoW.Me.IsCasting || SpellManager.GlobalCooldown)
                      return 
      true;

                  if (!
      StyxWoW.Me.CurrentTarget.IsAlive || !StyxWoW.Me.CurrentTarget.IsWithinMeleeRange)
                      return 
      true;

                  
      // We don't have a delay on interrupting so we place it after global cd checking 
                  
      if (StyxWoW.Me.CurrentTarget.IsCasting && StyxWoW.Me.CurrentTarget.CanInterruptCurrentSpellCast && await SpellCast("Rebuke"))
                      return 
      true;
                  
                  if (!
      StyxWoW.Me.HasAura("Avenging Wrath"))
                      if (
      await SpellCast("Avenging Wrath")) return true;

                  if (
      await SpellCast("Judgment")) return true;
                  
                  if (
      UnfriendlyUnits.Count() >= 3) {
                      if (
      StyxWoW.Me.CurrentHolyPower >= && await SpellCast("Divine Storm")) return true;
                  } else {
                      if (
      StyxWoW.Me.HasAura("Divine Purpose") && await SpellCast("Justicar's Vengeance")) return true;
                      if (
      StyxWoW.Me.CurrentHolyPower >= && await SpellCast("Templar's Verdict")) return true;
                  }

                  if (
      await SpellCast("Blade of Justice")) return true;

                  if (
      await SpellCast("Crusader Strike")) return true;

                  return 
      false;
              }
              
      #endregion

              #region Casting Tasks 
              
      private static async Task<boolSpellCast(string spellWoWUnit target)
              {
                  
      // Return false if we can't cast the spell 
                  
      if (!SpellManager.CanCast(spell))
                      return 
      false;

                  
      // Cast spell, return false if it fails to cast 
                  
      if (!SpellManager.Cast(spelltarget))
                      return 
      false;

                  
      //Logging.Write("[Retri] Cast {0} on {1}", spell, target.SafeName);

                  // Wait for lag 
                  
      await CommonCoroutines.SleepForLagDuration();

                  
      // return true - we've cast the spell successfully. 
                  
      return true;
              }

              private static 
      async Task<boolSpellCast(string spell)
              {
                  return 
      await SpellCast(spellStyxWoW.Me.CurrentTarget);
              }
              
      #endregion
          
      }
      }
       
      Last edited: Aug 15, 2016
    2. munakfreak

      munakfreak New Member

      Joined:
      Jan 10, 2015
      Messages:
      11
      Likes Received:
      0
      Trophy Points:
      0
      Updated with changes to spending holy power. Should now wait for Judgment debuff.
       
    3. Rynno

      Rynno Member

      Joined:
      Aug 6, 2011
      Messages:
      30
      Likes Received:
      0
      Trophy Points:
      6
      your older code works fine but when i replace it with your newer code i get Compiler Error
       

      Attached Files:

    4. munakfreak

      munakfreak New Member

      Joined:
      Jan 10, 2015
      Messages:
      11
      Likes Received:
      0
      Trophy Points:
      0
      i copied an old one i did before testing so it is actually wrong. I will update it when i get home with the correct one.
       
    5. munakfreak

      munakfreak New Member

      Joined:
      Jan 10, 2015
      Messages:
      11
      Likes Received:
      0
      Trophy Points:
      0
      Fixed it. Newer one should work. Would like some feedback on what one works out better.
       
    6. Informer

      Informer New Member

      Joined:
      Nov 24, 2012
      Messages:
      100
      Likes Received:
      1
      Trophy Points:
      0
      maybe it just me but I cant get it to show up as a routine.
       
    7. speshulk926

      speshulk926 Community Developer

      Joined:
      Dec 8, 2014
      Messages:
      911
      Likes Received:
      17
      Trophy Points:
      18
      FYI - This will only show up if you are Retribution spec when you load it based on:

      Code:
      public override WoWClass Class { get { return StyxWoW.Me.Specialization == WoWSpec.PaladinRetribution ? WoWClass.Paladin : WoWClass.None; } } 
      
      What that is saying is "Return WoWClass.Paladin if my spec = Retribution. Else, return no class.
       

    Share This Page