What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Simple Legion rotation

munakfreak

New Member
Joined
Jan 10, 2015
Messages
11
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<bool> PreCombatCoroutine()
        {
            // 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<WoWUnit> UnfriendlyUnits
        {
            get
            {
                return ObjectManager.GetObjectsOfType<WoWUnit>(true, false).
                  Where(u => !u.IsDead &&
                        u.CanSelect &&
                        u.Attackable &&
                        !u.IsFriendly &&
                        u.IsWithinMeleeRange);
            }
        }

        private static async Task<bool> CombatCoroutine()
        {
            // 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 >= 3 || 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 >= 3 && await SpellCast("Divine Storm")) return true;

                if (StyxWoW.Me.CurrentTarget.HasAura("Judgment"))
                    if (StyxWoW.Me.CurrentHolyPower >= 3 && 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<bool> SpellCast(string spell, WoWUnit 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(spell, target))
                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<bool> SpellCast(string spell)
        {
            return await SpellCast(spell, StyxWoW.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<bool> PreCombatCoroutine()
        {
            // 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<WoWUnit> UnfriendlyUnits
        {
            get
            {
                return ObjectManager.GetObjectsOfType<WoWUnit>(true, false).
                  Where(u => !u.IsDead &&
                        u.CanSelect &&
                        u.Attackable &&
                        !u.IsFriendly &&
                        u.IsWithinMeleeRange);
            }
        }

        private static async Task<bool> CombatCoroutine()
        {
            // 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 >= 3 && await SpellCast("Divine Storm")) return true;
			} else {
				if (StyxWoW.Me.HasAura("Divine Purpose") && await SpellCast("Justicar's Vengeance")) return true;
				if (StyxWoW.Me.CurrentHolyPower >= 3 && 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<bool> SpellCast(string spell, WoWUnit 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(spell, target))
                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<bool> SpellCast(string spell)
        {
            return await SpellCast(spell, StyxWoW.Me.CurrentTarget);
        }
        #endregion
    }
}
 
Last edited:
your older code works fine but when i replace it with your newer code i get Compiler Error

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.
 
maybe it just me but I cant get it to show up as a routine.
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.
 
Back
Top