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

Singular - A community driven All-In-One CC - It Just Plain Works - (Pt. 2)

Alrighty, I did some testing on the MM hunter and there are a couple very buggy things going on.

First is the new trapping logic. Once in a while it works, most of the time it does not. The only time I've seen it work is when there are exactly 3 adds clumped together and no other adds on combat. When it works, Trap Launcher is buffed, the trap is selected, and the correct target area is selected (resulting in the actual cast). When it does not work, the priority selector just hangs so that the hunter never even casts Multi-shot (or any of the other spells in the selector past the trap behavior). My feeling is that it has something to do with the target selection logic in the trap behavior.

The other issue is Serpent Sting. In the current revision there's an exception that gets thrown pertaining to Chimaera Shot checking the cooldown of SrS - but I have that fixed. The issue I haven't gotten through yet is using the HasMyAura helper. Here's what I'm currently testing with:
Spell.Cast("Serpent Sting", ret => !StyxWoW.Me.CurrentTarget.HasMyAura("Serpent Sting")),

The problem with this is that the HasMyAura method always returns false, so I constantly get the "A more powerful spell is already active" error message as it continuously tries to fire SrS. I'd also like to get this solved for the Frost DK (and a bunch of other dot classes) - keeping our own DoTs up rather than just making sure anyone has that DoT up on the target is extremely important for a lot of dps classes, meaning we can't simply use the Buff() helper. My feeling is that the issue lies in the HasAura method on line 149 of Unit.cs, but I'm not quite sure how to solve it.

Any ideas? I'd be happy to do the testing and whatnot, I'm just not sure where to go with the code next.

- Ben
 
Last edited:
Trying to edit the druid behaviour.
It's for farming in a spot with groups of mobs which are fighting other mobs.
When it has killed 1 of the mobs in the group, it's still in combat and then it ignores all the other mobs until it either runs into a mob that it aggroes (which means something is attacking and targeting me), or runs around until it's out of combat before it'll pull a new mob.

Isn't it possible to make something like if my target dies, and I'm still in combat - just pull a new nearby target?
 
Trying to edit the druid behaviour.
It's for farming in a spot with groups of mobs which are fighting other mobs.
When it has killed 1 of the mobs in the group, it's still in combat and then it ignores all the other mobs until it either runs into a mob that it aggroes (which means something is attacking and targeting me), or runs around until it's out of combat before it'll pull a new mob.

Isn't it possible to make something like if my target dies, and I'm still in combat - just pull a new nearby target?

To try to correct this, and add added ability to Swipe, we've implemented the following:
Code:
        public static Composite CreateClusterTargeting()
        {
            var clusterTarget = Clusters.GetBestUnitForCluster(Unit.UnfriendlyUnitsNearTarget, ClusterType.Radius, 10f);

            return new PrioritySelector(
                new Decorator(ret => StyxWoW.Me.GotTarget && StyxWoW.Me.Combat,
                    new Decorator(ret => clusterTarget != null,
                        new Decorator(ret => StyxWoW.Me.CurrentTarget != clusterTarget,
                            new Action(o => clusterTarget.Target())))));
        }

        public static Composite CreateNonPussyCombat()
        {
            var nearbyNiggas = Unit.NearbyUnfriendlyUnits.Where(o => o.Distance < 15).OrderBy(o => o.Distance);

            return new PrioritySelector(
                new Decorator(ret => StyxWoW.Me.CurrentTarget == null && StyxWoW.Me.Combat,
                    new Decorator(ret => nearbyNiggas.Count() > 0,
                        new Decorator(ret => nearbyNiggas.FirstOrDefault() != null,
                            new Action(o => nearbyNiggas.FirstOrDefault().Target())))));
        }
 
evade bug in action r471

View attachment 15-12-2011_8.40 2824 Log.txt

at 8:59 to 9:00 I stopped the bot, clicked again on start and let it fight for around 30 seconds with the bugged mob

checked the window to see how the bot was doing and found it fighting the bugged mob but I have no idea for how much time he had been fighting there (was testing a profile so it could be from less than a minute to 10 minutes)


maybe a timeout for evade check didn't tick out?
 
Last edited:
im still getting problems with evades as well, for now im just adding blackspots around the mobs
 
Alrighty, I did some testing on the MM hunter and there are a couple very buggy things going on.

First is the new trapping logic. Once in a while it works, most of the time it does not. The only time I've seen it work is when there are exactly 3 adds clumped together and no other adds on combat. When it works, Trap Launcher is buffed, the trap is selected, and the correct target area is selected (resulting in the actual cast). When it does not work, the priority selector just hangs so that the hunter never even casts Multi-shot (or any of the other spells in the selector past the trap behavior). My feeling is that it has something to do with the target selection logic in the trap behavior.

The other issue is Serpent Sting. In the current revision there's an exception that gets thrown pertaining to Chimaera Shot checking the cooldown of SrS - but I have that fixed. The issue I haven't gotten through yet is using the HasMyAura helper. Here's what I'm currently testing with:


The problem with this is that the HasMyAura method always returns false, so I constantly get the "A more powerful spell is already active" error message as it continuously tries to fire SrS. I'd also like to get this solved for the Frost DK (and a bunch of other dot classes) - keeping our own DoTs up rather than just making sure anyone has that DoT up on the target is extremely important for a lot of dps classes, meaning we can't simply use the Buff() helper. My feeling is that the issue lies in the HasAura method on line 149 of Unit.cs, but I'm not quite sure how to solve it.

Any ideas? I'd be happy to do the testing and whatnot, I'm just not sure where to go with the code next.

- Ben

hasaura is broken for me too
 
hasaura is broken for me too

You mean HasMyAura, correct? Apoc or Raphus, could you look into this issue when you get the chance? I think issue effects almost all classes and specs, especially now that people are using the bot for LFR where there are other players applying the same debuffs. Let me know if there's anything I can do to help.

- Ben
 
HasMyAura should work fine. (You can try passing 1 for the stack count, to ensure its up, and not just an old aura laying in WoW's list)

Code:
        private static bool HasAura(this WoWUnit unit, string aura, int stacks, WoWUnit creator)        {
            //Logger.WriteDebug("Looking for aura: " + aura);
            var auras = unit.GetAllAuras();
            return (from a in auras
                    where a.Name == aura
                    select a.StackCount >= stacks && (creator == null || a.CreatorGuid == creator.Guid)).FirstOrDefault();
        }

Code:
unit.HasMyAura("Serpent Sting", 1)
 
HasMyAura should work fine. (You can try passing 1 for the stack count, to ensure its up, and not just an old aura laying in WoW's list)

Code:
        private static bool HasAura(this WoWUnit unit, string aura, int stacks, WoWUnit creator)        {
            //Logger.WriteDebug("Looking for aura: " + aura);
            var auras = unit.GetAllAuras();
            return (from a in auras
                    where a.Name == aura
                    select a.StackCount >= stacks && (creator == null || a.CreatorGuid == creator.Guid)).FirstOrDefault();
        }

Code:
unit.HasMyAura("Serpent Sting", 1)

This is still always returning false for me and resulting in a spam of the debuff-applying ability. I'll attach the full code I'm using to test (see diseases) and attacking a target dummy.

Code:
Spell.Cast("Howling Blast", ret => !StyxWoW.Me.CurrentTarget.HasMyAura("Frost Fever", 1)),
 

Attachments

Hellfire for leveling Destruction Warlocks is a death sentence with the way it's set up right now. Gotta add the instance check:

new Decorator(ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 10*10) >= 3 && StyxWoW.Me.IsInInstance, Spell.BuffSelf("Hellfire")
),
 
Retribution Paladin - Keep casting Holy Light

Yesterday during a LFR, my DPS was very low and my pally kept casting Holy Light when he was at around 90%. I reinstalled HonorBuddy today (2.0.0.5494), deleted everything from the CustomClasses folder and added Singular and updated it to version 482. I started the questing profile [A - Rep Quest] TB Peninsula Dailies [Kick] and it still does the same thing. I'm using the default settings.

View attachment 2011-12-15_18_17 5032 Log.txt
 
Last edited:
How updated is the list in the second/third post showing the current status? I've been working on pretty good rules for Holy Paladins.. but I am looking at the code and imagine by the time I figure it out next year it will need to be updated. :eek:
 
@Apoc / @Raphus: Here's the most effective way for a Frost DK to use Blood Tap (rather than just on blind cooldown):

Spell.Cast("Blood Tap", ret => StyxWoW.Me.UnholyRuneCount >= 1 && StyxWoW.Me.FrostRuneCount == 0 && StyxWoW.Me.DeathRuneCount == 0 && StyxWoW.Me.CurrentTarget.Distance <= 10),
 
>.<" Not to say what I said 2 posts above myself...but it's a serious issue within the new heroics...Blood DKs need to stop interrupting the uninterruptable...r483...

On the upside...LOVING this CC...haven't come across any other issues...amazing work everyone! :D

Edit: Warriors are using thunderstomp the second they target an enemy...before they're even in range...><"
 
Last edited:
Trying to edit the druid behaviour.
It's for farming in a spot with groups of mobs which are fighting other mobs.
When it has killed 1 of the mobs in the group, it's still in combat and then it ignores all the other mobs until it either runs into a mob that it aggroes (which means something is attacking and targeting me), or runs around until it's out of combat before it'll pull a new mob.

Isn't it possible to make something like if my target dies, and I'm still in combat - just pull a new nearby target?
To try to correct this, and add added ability to Swipe, we've implemented the following:
Code:
        public static Composite CreateClusterTargeting()
        {
            var clusterTarget = Clusters.GetBestUnitForCluster(Unit.UnfriendlyUnitsNearTarget, ClusterType.Radius, 10f);

            return new PrioritySelector(
                new Decorator(ret => StyxWoW.Me.GotTarget && StyxWoW.Me.Combat,
                    new Decorator(ret => clusterTarget != null,
                        new Decorator(ret => StyxWoW.Me.CurrentTarget != clusterTarget,
                            new Action(o => clusterTarget.Target())))));
        }

        public static Composite CreateNonPussyCombat()
        {
            var nearbyNiggas = Unit.NearbyUnfriendlyUnits.Where(o => o.Distance < 15).OrderBy(o => o.Distance);

            return new PrioritySelector(
                new Decorator(ret => StyxWoW.Me.CurrentTarget == null && StyxWoW.Me.Combat,
                    new Decorator(ret => nearbyNiggas.Count() > 0,
                        new Decorator(ret => nearbyNiggas.FirstOrDefault() != null,
                            new Action(o => nearbyNiggas.FirstOrDefault().Target())))));
        }

Bump
 
Code:
using System.Linq;
using Singular.Dynamics;
using Singular.Helpers;
using Singular.Managers;
using Singular.Settings;
using Styx;
using Styx.Combat.CombatRoutine;
using Styx.Logic.Combat;

using TreeSharp;

namespace Singular.ClassSpecific.Paladin
{
    public class Retribution
    {
        #region Combat

        [Class(WoWClass.Paladin)]
        [Spec(TalentSpec.RetributionPaladin)]
        [Behavior(BehaviorType.Combat)]
        [Behavior(BehaviorType.Heal)]
        [Context(WoWContext.All)]
        public static Composite CreateRetributionPaladinCombat()
        {			
            return
                new PrioritySelector(
                    Safers.EnsureTarget(),
                    Holy.CreatePaladinHealBehavior(true),
                    Movement.CreateMoveToLosBehavior(),
                    Movement.CreateFaceTargetBehavior(),
                    Helpers.Common.CreateAutoAttack(true),

                    // Interrupt the first unit casting near us. Huzzah!
                    Helpers.Common.CreateInterruptSpellCast(
                        ret => Unit.NearbyUnfriendlyUnits.FirstOrDefault(u => u.IsCasting && u.CanInterruptCurrentSpellCast)),

                    // Inquisition, even if AoE. This should give it a 99%+ uptime
                    Spell.Cast(
						"Inquisition",
						ret =>
						!StyxWoW.Me.ActiveAuras.ContainsKey("Inquisition") ||
						GetAuraTimeLeft(StyxWoW.Me, "Inquisition", true).Seconds <= 3),
					
                    // Pop Crusader if we're in single-target mode and we have less than 3 holy power and don't have Divine Purpose (3 Holy Power)
                    Spell.Cast(
						"Crusader Strike", 
						ret => 
						(Unit.NearbyUnfriendlyUnits.Count(u => u.Distance <= 8) < 4 || !SpellManager.HasSpell("Divine Storm")) && 
						StyxWoW.Me.CurrentHolyPower != 3 && !StyxWoW.Me.HasAura("Divine Purpose")),
						
                    // Pop Divine Storm if we're trying to AoE.
                    Spell.Cast("Divine Storm", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.Distance <= 8) >= 4),
					
					Spell.Cast("Templar's Verdict", ret => StyxWoW.Me.CurrentHolyPower == 3 || StyxWoW.Me.HasAura("Divine Purpose")),
                    Spell.Cast("Exorcism", ret => StyxWoW.Me.ActiveAuras.ContainsKey("The Art of War")),
                    Spell.Cast("Hammer of Wrath", ret => StyxWoW.Me.CurrentTarget.HealthPercent <= 20 || StyxWoW.Me.ActiveAuras.ContainsKey("Avenging Wrath")),
                    Spell.Cast("Judgement"),
					
                    Spell.Cast("Holy Wrath", ret => StyxWoW.Me.ManaPercent > 35),
                    Spell.Cast("Consecration", ret => StyxWoW.Me.ManaPercent > 75),

                    // Move to melee is LAST. Period.
                    Movement.CreateMoveToMeleeBehavior(true)
                    );
        }

        #endregion

        #region Pull

        [Class(WoWClass.Paladin)]
        [Spec(TalentSpec.RetributionPaladin)]
        [Behavior(BehaviorType.Pull)]
        [Context(WoWContext.All)]
        public static Composite CreateRetributionPaladinPull()
        {
            return
                new PrioritySelector(
                    Movement.CreateMoveToLosBehavior(),
                    Movement.CreateFaceTargetBehavior(),
                    Spell.Cast("Judgement"),
                    Helpers.Common.CreateAutoAttack(true),
                    Movement.CreateMoveToTargetBehavior(true,5f)
                    );
        }

        #endregion

        #region Combat Buffs

        [Class(WoWClass.Paladin)]
        [Spec(TalentSpec.RetributionPaladin)]
        [Behavior(BehaviorType.CombatBuffs)]
        [Context(WoWContext.All)]
        public static Composite CreateRetributionPaladinCombatBuffs()
        {
            return
                new PrioritySelector(
					Spell.BuffSelf(Unit.NearbyUnfriendlyUnits.Count(u => u.Distance <= 8) >= 4 ? "Seal of Righteousness" : "Seal of Truth"),
					//We don't pop Zealotry if Avenging Wrath is active and vice versa					
                    Spell.BuffSelf("Zealotry", ret => Unit.IsBoss(StyxWoW.Me.CurrentTarget) && !StyxWoW.Me.ActiveAuras.ContainsKey("Avenging Wrath")),
                    Spell.BuffSelf("Avenging Wrath", ret => Unit.IsBoss(StyxWoW.Me.CurrentTarget) && !StyxWoW.Me.ActiveAuras.ContainsKey("Zealotry")),
                    Spell.BuffSelf("Divine Protection", ret => StyxWoW.Me.HealthPercent <= SingularSettings.Instance.Paladin.DivineProtectionHealthRet),
					Spell.BuffSelf("Divine Plea", ret => StyxWoW.Me.ManaPercent < 90)
                    );
        }

        #endregion
    }
}

Retribution Paladin, using this I got an output of 28k DPS in 378 gear. Indenting in the code tags itself is weird sorry about that.

Attached file: View attachment Retribution.cs
 
Last edited:
Back
Top