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)
Older Copy
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: