示例#1
0
        public static void Generate(WeakAura wa)
        {
            var feral    = new Feral();
            var guardian = new Guardian();
            var resto    = new RestorationDruid();

            feral.Typhoon.Talent = 7;
            guardian.IncapacitatingRoar.Talent = 8;
            resto.UrsolsVortex.Talent          = 9;

            // todo: Lunar Inspiration
            var builder = new SpecBuilder(ClassSpec.Feral);

            builder.AddRightBar(
                feral.Barkskin.Buff(),
                feral.Renewal,
                feral.Typhoon,
                guardian.IncapacitatingRoar.DeBuff(),
                resto.UrsolsVortex.DeBuff(),
                feral.Rebirth,
                feral.Maim.DeBuff(),
                feral.MightyBash.DeBuff(),
                feral.MassEntanglement.DeBuff(),
                feral.Cyclone.DeBuff(),
                // druid.EntanglingRoot1,
                // druid.Hibernate,
                // Glow if target Enraged?
                // druid.Soothe,
                // Glow if target -or- Player is Corrupted?
                // druid.RemoveCorruption,
                feral.HeartOfTheWild.Buff()
                ).AddCoreRotation(
                feral.Thrash.DoT().Passive(),
                feral.Rip.DoT().Passive(),
                feral.TigersFury.Buff(),
                feral.Rake.DoT().Passive()
                ).AddCoreCooldowns(
                feral.Berserk.Buff(),
                feral.BrutalSlash.BigStacks(),
                feral.FeralFrenzy.DeBuff()
                // Incarnation,
                ).AddBottomBar(
                feral.Dash.Buff(),
                // boomkin.TigerDash,
                feral.WildCharge,
                feral.StampedingRoar.Buff(),
                guardian.SkullBash
                ).AddTopBar(
                feral.PredatorySwiftness.Passive(),
                feral.OmenOfClarity.Passive().BigStacks().Buff(),
                feral.Bloodtalons.Passive().Buff(),
                feral.SavageRoar.Buff().Passive(),
                feral.ScentOfBlood.Buff().BigStacks(),
                feral.InfectedWounds.DeBuff().Passive()
                ).AddAlerts(
                feral.CatForm.MissingBuff().Passive(),
                feral.MoonkinForm.Buff().Passive(),
                feral.BearForm.Buff().Passive()
                ).Build(wa);
        }
示例#2
0
        private static void Build(WeakAura bbq)
        {
            // todo: verify that all aura_id's are unique
            //DeathKnightBlood.Generate(bbq);
            //DeathKnightFrost.Generate(bbq);
            //DeathKnightUnholy.Generate(bbq);

            DemonHunterHavoc.Generate(bbq);
            DemonHunterVengeance.Generate(bbq);

            DruidBalance.Generate(bbq);
            DruidFeral.Generate(bbq);
            DruidGuardian.Generate(bbq);
            DruidRestoration.Generate(bbq);

            PriestDiscipline.Generate(bbq);
            PriestHoly.Generate(bbq);
            PriestShadow.Generate(bbq);

            //RogueAssassination.Generate(bbq);
            //RogueOutlaw.Generate(bbq);
            //RogueSubtlety.Generate(bbq);

            //ShamanElemental.Generate(bbq);
            //ShamanEnhancement.Generate(bbq);
            //ShamanRestoration.Generate(bbq);

            //WarlockAffliction.Generate(bbq);
            //WarlockDemonology.Generate(bbq);
            //WarlockDestruction.Generate(bbq);

            bbq.AddPositioningScript();
        }
示例#3
0
        public static void RoundTripTest(string compressedString)
        {
            Directory.CreateDirectory("output");

            var wa = new WeakAura(compressedString);

            // var json = wa.ToString();
            var json = compressedString.DecompressToLuaTable().SerializeToString();

            File.WriteAllText("output/json.txt", json);
            Console.WriteLine("Json Generated");

            var code = wa.GenerateCode();

            File.WriteAllText("output/code.cs", code);
            Console.WriteLine("Code Generated");

            var tableClone = wa.ToLuaTable();
            var jsonClone  = tableClone.SerializeToString();

            File.WriteAllText("output/jsonClone.txt", jsonClone);
            Console.WriteLine("Json Clone Generated");

            var wa2 = wa.ToCompressedString();

            Console.WriteLine(wa2);
        }
示例#4
0
        public static void Generate(WeakAura wa)
        {
            // todo: Beacon of Light missing Alert
            var holy = new HolyPaladin();

            var builder = new SpecBuilder(ClassSpec.Affliction);

            builder.AddOverflow(
                ).AddRightBar(
                holy.AvengingWrath.Buff(),
                holy.LayOnHands,
                holy.BlessingOfSacrifice.Buff(),
                holy.DivineProtection.Buff(),
                holy.AuraMastery.Buff(),
                holy.BlessingOfProtection,
                holy.BlessingOfFreedom
                ).AddCoreRotation(
                holy.HolyShock,
                // with Judgment of Light
                holy.Judgment.DeBuff(),
                holy.BestowFaith, // T
                holy.HolyPrism    // T
                ).AddCoreCooldowns(
                ).AddBottomBar(
                ).AddTopBar(
                ).AddAlerts(
                ).Build(wa);
        }
        public static void AddPositioningScript(this WeakAura weak)
        {
            _sb.Length--;

            // icon = 629054

            // Script
            var script = PositionAurasLua;

            script = script.Replace("-- %auras%", _sb.ToString());

            var scriptAura = AuraIcon.Generate("positioning_script");

            scriptAura.Conditions.Add(new Condition
            {
                Check = new Check
                {
                    Trigger  = -1,
                    Variable = "customcheck",
                    Op       = "PLAYER_TALENT_UPDATE",
                    Value    = script
                },
                Changes = new List <Change>()
            });

            scriptAura.DisplayIcon = 629054;
            scriptAura.IconSource  = 0;

            weak.Table.Children.Add(scriptAura);
        }
        public static void Generate(WeakAura wa)
        {
            var discipline = new Discipline();

            var builder = new SpecBuilder(ClassSpec.Discipline);

            // todo: MindVision Alert

            builder.AddOverflow(
                // Glow when health < 50%?
                discipline.DesperatePrayer,
                discipline.Fade.Buff(),
                discipline.AngelicFeather.AssociateAura(discipline.BodyAndSoul),
                discipline.LeapOfFaith,
                // How many dispels?
                discipline.MassDispel,
                // How many hit by scream?
                discipline.PsychicScream,
                discipline.ShadowWordDeath,
                discipline.ShiningForce.DeBuff()
                ).AddRightBar(
                // Cooldowns
                discipline.PowerWordBarrier.Buff(),
                discipline.PowerInfusion.Buff(),
                discipline.PainSuppression,
                discipline.Rapture.Buff(),
                discipline.Evangelism,
                discipline.SpiritShell.Buff()
                ).AddCoreRotation(
                // Purge the Wicked
                discipline.ShadowWordPain.DoT().Passive(),
                discipline.Schism.DeBuff(),
                discipline.PowerWordSolace,
                discipline.Penance,
                discipline.MindBlast.BigStacks(),
                discipline.PowerWordRadiance.Buff(),
                discipline.ShadowCovenant,
                discipline.Halo,
                discipline.DivineStar,
                discipline.Shadowfiend.Buff()
                ).AddCoreCooldowns(
                ).AddBottomBar(
                // discipline.PowerWordShield.AssociateAura(discipline.BodyAndSoul),
                discipline.Purify
                ).AddTopBar(
                // Weakened Soul on Target? (Tracker for Group?)
                discipline.Levitate.Buff().Passive(),
                discipline.ShackleUndead.Passive().DeBuff(),
                discipline.MindSoothe.Passive().DeBuff()
                // discipline.HungeringVoid.Passive().DeBuff()
                ).AddAlerts(
                // todo: Atonement Tracker!!!!
                discipline.PowerWordFortitude.Passive().MissingBuff(),
                discipline.Rapture.Buff().Passive(),
                discipline.MindControl.Buff().Passive()
                // discipline.MindControl.Buff().Passive(),
                ).Build(wa);
        }
示例#7
0
        public static WeakAura Go()
        {
            // Barbeque is better than Barbecue because BBQ
            var bbq = new WeakAura("BarbequeAuras");

            Build(bbq);

            return(bbq);
        }
示例#8
0
        public static void Generate(WeakAura wa)
        {
            var frost = new Frost();

            var builder = new SpecBuilder(ClassSpec.Frost);

            wa.AddSpell(frost.BreathOfSindragosa, ClassSpec.Frost, -25, 300);

            builder.AddOverflow(
                // todo: move to core when replaced with Night Fae covenant?
                frost.DeathAndDecay.Buff(),
                frost.DarkCommand,
                frost.RaiseAlly,
                frost.RaiseDead,
                frost.SacrificialPact,
                frost.HornOfWinter,
                frost.BlindingSleet.DeBuff(),
                frost.DeathPact.Buff(),
                frost.Permafrost.Passive().Buff()
                // havoc.Torment,
                ).AddRightBar(
                frost.Anti_MagicShell.Buff(),
                frost.Anti_MagicZone.Buff(),
                frost.IceboundFortitude.Buff(),
                frost.Lichborne
                ).AddCoreRotation(
                frost.Rime.Passive().Buff().UseIcon(frost.HowlingBlast),
                frost.KillingMachine.Passive().Buff().UseIcon(frost.Obliterate),
                frost.HypothermicPresence.Buff(),
                frost.GlacialAdvance
                // todo: frost.Frostscythe.
                ).AddCoreCooldowns(
                frost.PillarOfFrost.Buff(),
                frost.EmpowerRuneWeapon.Buff(),
                frost.FrostwyrmsFury.DeBuff(),
                frost.RemorselessWinter.Buff()
                ).AddBottomBar(
                frost.DeathGrip,
                frost.DeathsAdvance.Buff(),
                frost.WraithWalk.Buff(),
                frost.MindFreeze.DeBuff(),
                frost.Asphyxiate.DeBuff()
                ).AddTopBar(
                // todo: add FrostFever?
                frost.ControlUndead.Passive().Buff(),
                frost.DarkSuccor.Buff().Passive().UseIcon(frost.DeathStrike),
                frost.ColdHeart.Buff().Passive().Stacks(20).UseIcon(frost.ChainsOfIce),
                frost.IcyTalons.Buff().Passive().BigStacks(),
                frost.InexorableAssault.Buff().Passive().BigStacks().UseIcon(frost.Obliterate),
                frost.FrozenPulse.Buff().Passive(),
                frost.GatheringStorm.Buff().Passive()
                ).AddAlerts(
                frost.PillarOfFrost.Passive().Buff(),
                frost.PathOfFrost.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var holy = new HolyPriest();

            var builder = new SpecBuilder(ClassSpec.HolyPriest);

            // todo: MindVision Alert

            builder.AddOverflow(
                // Glow when health < 50%?
                holy.DesperatePrayer,
                holy.Fade.Buff(),
                holy.AngelicFeather.AssociateAura(holy.BodyAndSoul),
                holy.LeapOfFaith,
                // How many dispels?
                holy.MassDispel,
                // How many hit by scream?
                holy.PsychicScream,
                holy.ShadowWordDeath,
                holy.ShiningForce.DeBuff()
                ).AddRightBar(
                // Cooldowns
                holy.DivineHymn.Buff(),
                holy.PowerInfusion.Buff(),
                holy.GuardianSpirit,
                holy.Apotheosis.Buff(),
                holy.HolyWordSalvation,
                holy.SymbolOfHope
                ).AddCoreRotation(
                holy.CircleOfHealing,
                holy.PrayerOfMending,
                holy.Halo,
                holy.DivineStar,
                holy.HolyWordSanctify,
                holy.HolyWordSerenity,
                holy.HolyWordChastise,
                holy.ShadowWordPain.DoT().Passive()
                ).AddCoreCooldowns(
                ).AddBottomBar(
                // discipline.PowerWordShield.AssociateAura(discipline.BodyAndSoul),
                holy.Purify
                ).AddTopBar(
                holy.Levitate.Passive().Buff(),
                holy.ShackleUndead.Passive().DeBuff(),
                holy.MindSoothe.Passive().DeBuff(),
                holy.PrayerCircle.Passive().Buff(),
                holy.Apotheosis.Passive().Buff(),
                holy.SurgeOfLight.Passive().Buff()
                ).AddAlerts(
                // Check part for the missing buff?
                holy.PowerWordFortitude.Passive().MissingBuff(),
                holy.MindControl.Passive().Buff(),
                holy.Apotheosis.Passive().Buff(),
                holy.SpiritOfRedemption.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var blood = new Blood();

            var builder = new SpecBuilder(ClassSpec.Blood);

            // todo: Death Strike heal tracker?

            builder.AddOverflow(
                blood.DarkCommand,
                blood.RaiseAlly,
                blood.RaiseDead,
                blood.SacrificialPact,
                blood.Consumption,
                blood.BloodTap,
                // todo: does this change Core Rotation?
                blood.MarkOfBlood.DeBuff(),
                // todo: will this detect a debuff on player?
                blood.DeathPact.Buff()
                // havoc.Torment,
                ).AddRightBar(
                // Cooldowns
                blood.Anti_MagicShell.Buff(),
                blood.Anti_MagicZone.Buff(),
                blood.IceboundFortitude.Buff(),
                blood.Lichborne
                ).AddCoreRotation(
                // todo: probably needs a _missing_ warning \ a _low_ warning
                // todo: associate with Ossuary Buff
                blood.BoneShield.Passive().Buff().BigStacks(),
                blood.RuneTap.Buff(),
                blood.DeathAndDecay.Buff().AssociateAura(blood.CrimsonScourge),
                blood.BloodBoil
                ).AddCoreCooldowns(
                blood.DancingRuneWeapon.Buff(),
                blood.VampiricBlood.Buff(),
                blood.Blooddrinker.Buff(),
                blood.Tombstone.Buff(),
                blood.Bonestorm.Buff()
                ).AddBottomBar(
                blood.DeathGrip,
                blood.GorefiendsGrasp,
                blood.DeathsAdvance.Buff(),
                blood.WraithWalk.Buff(),
                blood.MindFreeze.DeBuff(),
                blood.Asphyxiate.DeBuff()
                ).AddTopBar(
                blood.ControlUndead.Passive().Buff(),
                blood.BloodPlague.Passive().DeBuff(),
                blood.Bloodworms.Passive().Buff().BigStacks()
                ).AddAlerts(
                blood.PathOfFrost.Passive().Buff(),
                blood.Purgatory.Passive().Buff()
                ).Build(wa);
        }
示例#11
0
        public static void Generate(WeakAura wa)
        {
            var unholy = new Unholy();

            var builder = new SpecBuilder(ClassSpec.Unholy);

            // todo: Army of the Dead tracker?

            builder.AddOverflow(
                unholy.DarkCommand,
                unholy.RaiseAlly,
                unholy.RaiseDead,
                unholy.SacrificialPact,
                unholy.UnholyBlight.Buff(),
                unholy.DeathPact.Buff()
                // havoc.Torment,
                ).AddRightBar(
                // Cooldowns
                unholy.Anti_MagicShell.Buff(),
                unholy.Anti_MagicZone.Buff(),
                unholy.IceboundFortitude.Buff(),
                unholy.Lichborne
                ).AddCoreRotation(
                unholy.Epidemic,
                // note: ScourgeStrike could be replaced with ClawingShadows
                unholy.FesteringWound.Passive().DeBuff().UseIcon(unholy.ScourgeStrike),
                unholy.VirulentPlague.Passive().DeBuff().UseIcon(unholy.Outbreak),
                unholy.DeathAndDecay.Buff()
                ).AddCoreCooldowns(
                unholy.Apocalypse,
                unholy.ArmyOfTheDead,
                // todo: track buff on pet
                unholy.DarkTransformation,
                // todo: It says, 'Unholy Frenzy'? is this a separate buff?
                unholy.UnholyAssault.Buff(),
                // todo: likely not a buff, but we should be able to track this pet
                unholy.SummonGargoyle.Buff()
                ).AddBottomBar(
                unholy.DeathGrip,
                unholy.DeathsAdvance.Buff(),
                unholy.WraithWalk.Buff(),
                unholy.MindFreeze.DeBuff(),
                unholy.Asphyxiate.DeBuff()
                ).AddTopBar(
                unholy.ControlUndead.Passive().Buff(),
                unholy.DarkSuccor.Buff().Passive().UseIcon(unholy.DeathStrike),
                unholy.RunicCorruption.Buff().Passive(),
                unholy.UnholyPact.Buff().Passive()
                ).AddAlerts(
                // todo: missing Ghoul pet
                unholy.SuddenDoom.Passive().Buff(),
                unholy.PathOfFrost.Passive().Buff()
                ).Build(wa);
        }
示例#12
0
        public static void GenerateCodeTest(string importString)
        {
            var wa   = new WeakAura(importString);
            var code = ObjectInitGenerator.ToObjectInitializer(wa.Table);

            Console.WriteLine(code);

            var json = importString.DecompressToLuaTable().SerializeToString();

            File.WriteAllText("output/json.txt", json);
            Console.WriteLine("Json Generated");
        }
        public static void Generate(WeakAura wa)
        {
            var elemental = new Elemental();

            var builder = new SpecBuilder(ClassSpec.Elemental);

            Console.WriteLine("Pets and totems!");

            // Lightning Shield, Flametongue Weapon?
            builder.AddOverflow(
                elemental.EarthElemental.Buff(),
                elemental.AstralShift.Buff(),
                elemental.Heroism.Buff(),
                elemental.Hex.DeBuff(),
                elemental.CleanseSpirit,
                // or debuff?
                elemental.NaturesGuardian.Buff() // T5
                ).AddRightBar(
                elemental.Thunderstorm.DeBuff(),
                elemental.SpiritwalkersGrace.Buff(),
                elemental.WindRushTotem.Buff(),    // T5
                elemental.AncestralGuidance.Buff() // T5
                ).AddCoreRotation(
                elemental.FlameShock.DeBuff(),
                elemental.LavaBurst,
                elemental.EchoingShock.Buff(),   // T3
                elemental.ElementalBlast.Buff(), // T3
                elemental.Icefury.Buff()         // T6 (IceFury Overload might be the buff)
                ).AddCoreCooldowns(
                // todo: pet -or- totem tracking?
                elemental.FireElemental.Buff(),
                elemental.StaticDischarge.Buff(),  // T2
                elemental.LiquidMagmaTotem.Buff(), // T4
                elemental.Stormkeeper.Buff(),      // T7
                elemental.Ascendance.Buff()        // T7
                ).AddBottomBar(
                elemental.EarthbindTotem.Buff(),
                elemental.CapacitorTotem.Buff(),
                elemental.HealingStreamTotem.Buff(),
                elemental.TremorTotem.Buff(),
                elemental.WindShear,
                elemental.Purge
                ).AddTopBar(
                elemental.FrostShock.Passive().Buff(),
                elemental.SurgeOfPower.Passive().Buff(), // T6
                elemental.UnlimitedPower.Passive().Buff()
                ).AddAlerts(
                elemental.WaterWalking.Passive().Buff(),
                // todo: any reason not to have Lightning Shield!?
                elemental.LightningShield.Passive().MissingBuff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var restoration = new RestorationShaman();

            var builder = new SpecBuilder(ClassSpec.RestorationShaman);

            builder.AddOverflow(
                restoration.EarthElemental.Buff(),
                restoration.AstralShift.Buff(),
                restoration.Heroism.Buff(),
                restoration.Hex.DeBuff(),
                restoration.LavaBurst,
                restoration.EarthgrabTotem
                ).AddRightBar(
                restoration.HealingTideTotem.Buff(),
                restoration.ManaTideTotem.Buff(),
                restoration.SpiritLinkTotem.Buff(),
                restoration.Ascendance.Buff(),    // T7
                restoration.WindRushTotem.Buff(), // T6
                restoration.SpiritwalkersGrace.Buff()
                ).AddCoreRotation(
                // todo: track charges!
                restoration.EarthShield.Buff(),
                restoration.HealingRain.Buff(),
                restoration.Riptide.Buff(),
                restoration.UnleashLife.Buff(), // T1
                restoration.SurgeOfEarth,
                restoration.Downpour,           // T6
                restoration.Wellspring
                // restoration.CloudburstTotem, // T6 (replaces Healing Stream totem)
                ).AddCoreCooldowns(
                restoration.EarthenWallTotem.Buff(),        // T4
                restoration.AncestralProtectionTotem.Buff() // T4
                ).AddBottomBar(
                restoration.EarthbindTotem.Buff(),
                restoration.CapacitorTotem.Buff(),
                restoration.HealingStreamTotem.Buff(),
                restoration.TremorTotem.Buff(),
                restoration.WindShear,
                restoration.Purge,
                restoration.PurifySpirit
                ).AddTopBar(
                restoration.FrostShock.Passive().Buff(),
                // todo: will this only show up when it's been used? (also enhancement)
                restoration.NaturesGuardian.Passive().Buff(),
                restoration.HighTide.Passive().Buff()
                ).AddAlerts(
                restoration.WaterWalking.Passive().Buff(),
                restoration.WaterShield.Passive().MissingBuff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var enhancement = new Enhancement();

            var builder = new SpecBuilder(ClassSpec.Enhancement);

            builder.AddOverflow(
                enhancement.EarthElemental.Buff(),
                enhancement.AstralShift.Buff(),
                enhancement.Heroism.Buff(),
                enhancement.Hex.DeBuff(),
                enhancement.EarthShield
                ).AddRightBar(
                enhancement.Ascendance.Buff(),     // T7
                enhancement.EarthenSpike.DeBuff(), // T7
                enhancement.Stormkeeper.Buff(),    // T6
                enhancement.Sundering.DeBuff(),    // T6
                enhancement.FeralSpirit.Buff(),
                enhancement.WindRushTotem.Buff()   // T5
                ).AddCoreRotation(
                enhancement.FrostShock.DeBuff(),
                enhancement.FlameShock.DeBuff(),
                enhancement.Stormstrike,
                enhancement.LavaLash,
                enhancement.IceStrike.Buff(),      // T2
                enhancement.ElementalBlast.Buff(), // T1
                enhancement.FireNova.Buff(),       // T4
                enhancement.CrashLightning
                ).AddCoreCooldowns(
                ).AddBottomBar(
                enhancement.FeralLunge, // T5
                enhancement.EarthbindTotem.Buff(),
                enhancement.CapacitorTotem.Buff(),
                enhancement.HealingStreamTotem.Buff(),
                enhancement.TremorTotem.Buff(),
                enhancement.WindShear,
                enhancement.Purge,
                enhancement.CleanseSpirit
                ).AddTopBar(
                enhancement.FrostShock.Passive().Buff(),
                enhancement.MaelstromWeapon.Passive().Buff(),
                enhancement.Stormbringer.Passive().Buff(),
                enhancement.Hailstorm.Passive().Buff(), // T4
                enhancement.NaturesGuardian.Passive().Buff()

                ).AddAlerts(
                enhancement.WaterWalking.Passive().Buff(),
                enhancement.Windfury.Passive().MissingBuff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            // todo: add a check for missing poisons (lethal + non-lethal)
            // todo: add alert for Cheat Death (only while you're taking the reduced damage)
            // todo: some of these poisons on the enemies should pro'lly be DoT's, not just DeBuff's
            var subtlety = new Subtlety();

            var builder = new SpecBuilder(ClassSpec.Subtlety);

            builder.AddOverflow(
                subtlety.Blind.DeBuff(),
                subtlety.CheapShot.RequiresStealth(),
                subtlety.Feint.Buff(),
                subtlety.Distract.DeBuff(),
                subtlety.Evasion.Buff(),
                subtlety.ShroudOfConcealment.Buff().RequiresStealth(),
                // look for buff on friendly target?
                subtlety.TricksOfTheTrade.Buff()
                ).AddRightBar(
                subtlety.MarkedForDeath.DeBuff(), // T3
                subtlety.SecretTechnique.Buff(),  // T7
                subtlety.ShurikenTornado.Buff()   // T7
                ).AddCoreRotation(
                subtlety.Shiv,
                subtlety.SliceAndDice.Buff(),
                subtlety.Rupture.DeBuff()
                ).AddCoreCooldowns(
                subtlety.ShadowBlades.Buff(),
                subtlety.SymbolsOfDeath.Buff(),
                subtlety.ShadowDance.Buff()
                ).AddBottomBar(
                subtlety.Shadowstep.Buff(),
                subtlety.Sprint.Buff(),
                subtlety.CloakOfShadows.Buff(),
                subtlety.Kick.DeBuff(),
                subtlety.CrimsonVial.Buff(),
                subtlety.Vanish.Buff()
                ).AddTopBar(
                subtlety.FindWeakness.Passive().DeBuff(),
                subtlety.ShotInTheDark.Passive().Buff(),   // T5
                subtlety.NightTerrors.Passive().DeBuff(),  // T5
                subtlety.PreyOnTheWeak.Passive().DeBuff(), // T5
                subtlety.Alacrity.Passive().Buff(),        // T6
                subtlety.MasterOfShadows.Passive().Buff()  // T7
                ).AddAlerts(
                subtlety.Stealth.Passive().Buff(),
                subtlety.Subterfuge.Buff(), // T2
                subtlety.ShroudOfConcealment.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            // todo: add a check for missing poisons
            var assassination = new Assassination();

            var builder = new SpecBuilder(ClassSpec.Assassination);

            builder.AddOverflow(
                assassination.Blind.DeBuff(),
                assassination.CheapShot.RequiresStealth(),
                assassination.Feint.Buff(),
                assassination.Distract.DeBuff(),
                assassination.Evasion.Buff(),
                assassination.ShroudOfConcealment.Buff().RequiresStealth(),
                // look for buff on friendly target?
                assassination.TricksOfTheTrade.Buff()
                ).AddRightBar(
                assassination.Vendetta.Buff(),
                assassination.MarkedForDeath.DeBuff(),           // T3
                assassination.Exsanguinate,                      // T6
                assassination.HiddenBlades.Passive().BigStacks() // T7
                ).AddCoreRotation(
                assassination.Shiv,
                assassination.SliceAndDice.Buff(),
                assassination.Envenom.DeBuff(),
                assassination.Garrote.DeBuff(),
                assassination.Rupture.DeBuff(),
                assassination.CrimsonTempest.DeBuff() // T7
                ).AddCoreCooldowns(
                ).AddBottomBar(
                assassination.Shadowstep.Buff(),
                assassination.Sprint.Buff(),
                assassination.CloakOfShadows.Buff(),
                assassination.Kick.DeBuff(),
                assassination.CrimsonVial.Buff(),
                assassination.Vanish.Buff()
                ).AddTopBar(
                assassination.ElaboratePlanning.Passive().Buff(),  // T1
                assassination.Blindside.Passive().Buff(),          // T1
                assassination.InternalBleeding.Passive().DeBuff(), // T5
                assassination.IronWire.Passive().DeBuff(),         // T5
                assassination.PreyOnTheWeak.Passive().DeBuff(),    // T5
                assassination.Alacrity.Passive().Buff()            // T6
                ).AddAlerts(
                assassination.Stealth.Passive().Buff(),
                assassination.Subterfuge.Buff(), // T2
                assassination.ShroudOfConcealment.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            // todo: add a check for missing poisons
            var outlaw = new Outlaw();

            var builder = new SpecBuilder(ClassSpec.Outlaw);

            builder.AddOverflow(
                outlaw.Gouge.DeBuff(),
                outlaw.Blind.DeBuff(),
                outlaw.CheapShot.RequiresStealth(),
                outlaw.Feint.Buff(),
                outlaw.Distract.DeBuff(),
                outlaw.Evasion.Buff(),
                outlaw.ShroudOfConcealment.Buff().RequiresStealth(),
                // look for buff on friendly target?
                outlaw.TricksOfTheTrade.Buff()
                ).AddRightBar(
                outlaw.AdrenalineRush.Buff(),
                outlaw.BetweenTheEyes.DeBuff(),
                // todo: we need the Bones Buffs
                outlaw.RollTheBones.Buff(),
                outlaw.BladeFlurry.Buff()
                ).AddCoreRotation(
                outlaw.Shiv,
                outlaw.SliceAndDice.Buff(),
                outlaw.GhostlyStrike.DeBuff(),  // T1
                outlaw.MarkedForDeath.DeBuff(), // T3
                outlaw.Dreadblades.Buff(),      // T6
                outlaw.BladeRush,               // T7
                outlaw.KillingSpree             // T7
                ).AddCoreCooldowns(
                ).AddBottomBar(
                outlaw.GrapplingHook,
                outlaw.Sprint.Buff(),
                outlaw.CloakOfShadows.Buff(),
                outlaw.Kick.DeBuff(),
                outlaw.CrimsonVial.Buff(),
                outlaw.Vanish.Buff()
                ).AddTopBar(
                outlaw.PistolShot.DeBuff().Passive(),
                outlaw.PreyOnTheWeak.DeBuff().Passive(), // T5
                outlaw.LoadedDice.Buff().Passive(),      // T6
                outlaw.Alacrity.Passive().Buff()         // T6
                ).AddAlerts(
                outlaw.Stealth.Passive().Buff(),
                outlaw.ShroudOfConcealment.Passive().Buff()
                ).Build(wa);
        }
示例#19
0
        private static void UnpackTest()
        {
            var wa    = new WeakAura(waTest);
            var table = wa.ToLuaTable().SerializeToString();
            var code  = wa.GenerateCode();

            Directory.CreateDirectory("output");
            const string filepath0 = "output/luaTable.txt";

            File.WriteAllText(filepath0, table);
            Console.WriteLine($"File '{filepath0}' written. {table.Length} bytes.");

            const string filepath1 = "output/code.txt";

            File.WriteAllText(filepath1, code);
            Console.WriteLine($"File '{filepath1}' written. {code.Length} bytes.");
        }
示例#20
0
        public static void Generate(WeakAura wa)
        {
            // todo: Soul shard Tracker (on Resource Hud)
            // todo: Seed of Corruption Tracker?
            // todo: Curse Tracker
            // todo: Fear Tracker
            // todo: Casting Ritual of Doom Alert
            var affliction = new Affliction();

            var builder = new SpecBuilder(ClassSpec.Affliction);

            builder.AddOverflow(
                affliction.GrimoireSacrifice.Buff(), // T6
                affliction.FelDomination.Buff(),
                affliction.CreateSoulwell,
                affliction.Soulstone,
                affliction.RitualOfDoom
                ).AddRightBar(
                affliction.Deathbolt,
                affliction.DarkPact.Buff(),       // T3
                affliction.MortalCoil.DeBuff(),   // T5
                affliction.HowlOfTerror.DeBuff(), // T5
                affliction.Shadowfury.DeBuff()
                ).AddCoreRotation(
                affliction.Agony.DoT(),
                affliction.UnstableAffliction.DoT(),
                affliction.Corruption.DoT(),
                affliction.SiphonLife.DoT(), // T2
                affliction.Haunt.DoT()       //T6
                ).AddCoreCooldowns(
                affliction.SummonDarkglare.Buff(),
                affliction.DarkSoulMisery.Buff(),     // T7
                affliction.PhantomSingularity.Buff(), // T4
                affliction.VileTaint.DeBuff()         // T4
                ).AddBottomBar(
                affliction.BurningRush.Buff(),        // T3
                affliction.DemonicCircleTeleport,
                affliction.CommandDemon
                ).AddTopBar(
                affliction.SeedOfCorruption.Passive().DeBuff(),
                affliction.Nightfall.Passive().Buff(), // T1
                affliction.UnendingBreath.Passive().Buff()
                ).AddAlerts(
                affliction.EyeOfKilrogg.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var havoc = new Havoc();

            var builder = new SpecBuilder(ClassSpec.Havoc);

            // todo: souls tracker (to the resource HUD?)
            builder.AddOverflow(
                havoc.Imprison.DeBuff(),
                havoc.SpectralSight.Buff(),
                // todo: not_on_CD --> back to combat buffs?
                havoc.ThrowGlaive
                // havoc.Torment,
                ).AddRightBar(
                // Cooldowns
                havoc.ChaosNova.DeBuff(),
                havoc.Darkness.Buff(),
                havoc.Blur.Buff(),
                havoc.SigilOfMisery
                ).AddCoreRotation(
                havoc.ImmolationAura.Buff(),
                // todo: glow when castable
                havoc.EyeBeam.Buff().AssociateAura(havoc.FuriousGaze),
                havoc.BladeDance,
                havoc.GlaiveTempest
                ).AddCoreCooldowns(
                havoc.Metamorphosis.Buff(),
                havoc.EssenceBreak.DeBuff(),
                havoc.FelEruption.DeBuff(),
                havoc.FelBarrage.Buff()
                ).AddBottomBar(
                havoc.FelRush,
                havoc.VengefulRetreat,
                havoc.Felblade,
                havoc.Netherwalk,
                havoc.Disrupt,
                // todo: check target for magic
                havoc.ConsumeMagic
                ).AddTopBar(
                havoc.SoulFragments.Passive().Buff()
                // vengeance.ChaosBrand.Passive().B
                ).AddAlerts(
                havoc.Glide.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var vengeance = new Vengeance();

            var builder = new SpecBuilder(ClassSpec.Vengeance);

            // todo: souls tracker (to the resource HUD?)
            builder.AddOverflow(
                vengeance.Imprison.DeBuff(),
                vengeance.SpectralSight.Buff(),
                // todo: not_on_CD --> back to combat buffs?
                vengeance.ThrowGlaive,
                vengeance.Torment,
                vengeance.LastResort.Passive().Buff()
                ).AddRightBar(
                // Cooldowns
                vengeance.SigilOfFlame,
                vengeance.SigilOfChains,
                vengeance.SigilOfSilence,
                vengeance.SigilOfMisery
                ).AddCoreRotation(
                vengeance.ImmolationAura.Buff(),
                vengeance.FelDevastation.Buff(),
                vengeance.Fracture,
                vengeance.DemonSpikes.Buff()
                ).AddCoreCooldowns(
                vengeance.Metamorphosis.Buff(),
                vengeance.FieryBrand.DeBuff().AssociateAura(vengeance.RevelInPain),
                vengeance.BulkExtraction,
                vengeance.SoulBarrier.Buff()
                ).AddBottomBar(
                vengeance.InfernalStrike,
                vengeance.Felblade,
                vengeance.Disrupt,
                // todo: check target for magic
                vengeance.ConsumeMagic
                ).AddTopBar(
                vengeance.SoulFragments.Passive().Buff()
                // vengeance.ChaosBrand.Passive().B
                ).AddAlerts(
                vengeance.Glide.Passive().Buff(),
                // todo: Only When Missing
                vengeance.Frailty.Passive().DeBuff()
                ).Build(wa);
        }
        public void Build(WeakAura wa)
        {
            wa.ArrangeSpells2(Groups.CoreRotation, Spec, CoreRotation);
            wa.ArrangeSpells2(Groups.CoreCooldowns, Spec, CoreCooldowns);
            wa.ArrangeSpells2(Groups.CombatBuffs, Spec, CombatBuffs);
            wa.ArrangeSpells2(Groups.Mobility, Spec, Mobility);
            wa.ArrangeSpells2(Groups.Utility, Spec, Utility);

            foreach (var alert in Alerts)
            {
                // -125, 225 -- 80, 80
                wa.AddSpell(alert, Spec, -25, 325)
                .SetSize(64, 64)
                .LoadInCombat();
            }

            wa.ArrangeSpells2(Groups.Overflow, Spec, Overflow);
        }
        public static void Generate(WeakAura wa)
        {
            // todo: Doom Tracker ?? Associated Buff?
            var demonology = new Demonology();

            var builder = new SpecBuilder(ClassSpec.Demonology);

            builder.AddOverflow(
                demonology.FelDomination.Buff(),
                demonology.CreateSoulwell,
                demonology.Soulstone,
                demonology.RitualOfDoom
                ).AddRightBar(
                // demonology.Deathbolt,
                demonology.NetherPortal.Buff(),   // T7
                demonology.DarkPact.Buff(),       // T3
                demonology.MortalCoil.DeBuff(),   // T5
                demonology.HowlOfTerror.DeBuff(), // T5
                demonology.Shadowfury.DeBuff()
                ).AddCoreRotation(
                demonology.CallDreadstalkers.Buff(),
                demonology.UnstableAffliction.DoT(),
                // demonology.Corruption.DoT(),
                demonology.DemonicCore.Passive().Buff().BigStacks(),
                demonology.SoulStrike // T4
                ).AddCoreCooldowns(
                demonology.SummonDemonicTyrant.Buff(),
                demonology.GrimoireFelguard.Buff(),   // T
                demonology.SummonVilefiend.Buff(),    // T4
                demonology.DemonicStrength.Buff(),    // T1
                demonology.BilescourgeBombers.Buff(), // T1
                demonology.PowerSiphon.DeBuff()       // T2
                ).AddBottomBar(
                demonology.BurningRush.Buff(),        // T3
                demonology.DarkPact.Buff(),           // T3
                demonology.DemonicCircleTeleport,
                demonology.CommandDemon
                ).AddTopBar(
                demonology.DemonicCalling.Passive().Buff().UseIcon(demonology.CallDreadstalkers), // T2
                demonology.UnendingBreath.Passive().Buff()
                ).AddAlerts(
                demonology.EyeOfKilrogg.Passive().Buff()
                ).Build(wa);
        }
        public static void Generate(WeakAura wa)
        {
            var destruction = new Destruction();

            var builder = new SpecBuilder(ClassSpec.Destruction);

            builder.AddOverflow(
                destruction.GrimoireSacrifice.Buff(), // T6
                destruction.FelDomination.Buff(),
                destruction.CreateSoulwell,
                destruction.Soulstone,
                destruction.RitualOfDoom
                ).AddRightBar(
                // destruction.Deathbolt,
                destruction.DarkPact.Buff(),       // T3
                destruction.MortalCoil.DeBuff(),   // T5
                destruction.HowlOfTerror.DeBuff(), // T5
                destruction.Shadowfury.DeBuff()
                ).AddCoreRotation(
                destruction.Immolate.DoT(),
                destruction.Conflagrate.Buff(),
                destruction.Shadowburn.Buff()
                // destruction.Corruption.DoT(),
                ).AddCoreCooldowns(
                destruction.SummonInfernal.Buff(),
                destruction.Havoc.Buff(),
                destruction.Cataclysm.Buff(),    // T4
                destruction.ChannelDemonfire,    // T7
                destruction.DarkSoulInstability, // T7
                destruction.SoulFire             // T1
                ).AddBottomBar(
                destruction.BurningRush.Buff(),  // T3
                destruction.DemonicCircleTeleport,
                destruction.CommandDemon
                ).AddTopBar(
                destruction.Eradication.Passive().Buff(),    // T1
                destruction.Backdraft.Passive().Buff(),
                destruction.ReverseEntropy.Passive().Buff(), // T2
                destruction.RainOfFire.Passive().DeBuff(),
                destruction.UnendingBreath.Passive().Buff()
                ).AddAlerts(
                destruction.EyeOfKilrogg.Passive().Buff()
                ).Build(wa);
        }
        // todo: this is _really_ bad logic, only works since lists don't change order
        // LUA DRIVEN VARIANT
        public static void ArrangeSpells2(this WeakAura weak, AuraGrid grid, ClassSpec spec, IEnumerable <Spell> spells)
        {
            foreach (var spell in spells)
            {
                var spellAuras = weak.AddSpell(spell, spec, 0, 0);

                for (var i = 0; i < spellAuras.Count; i++)
                {
                    var advance       = i == spellAuras.Count - 1;
                    var aura          = spellAuras[i];
                    var auraGrid      = grid.LuaId;
                    var auraTalent    = spell.Talent;
                    var auraClassSpec = (int)spec;

                    if (auraClassSpec != _auraClassSpec)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid, auraTalent, auraClassSpec);
                    }
                    else if (auraTalent != _auraTalent)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid, auraTalent);
                    }
                    else if (auraGrid != _auraGrid)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid);
                    }
                    else if (advance)
                    {
                        _sb.AddRecords(aura.Id, advance);
                    }
                    else
                    {
                        _sb.AddRecords(aura.Id);
                    }

                    _auraGrid      = auraGrid;
                    _auraTalent    = auraTalent;
                    _auraClassSpec = auraClassSpec;
                }
            }
        }
        // OLD VARIANT
        public static void ArrangeSpells(this WeakAura weak, AuraGrid grid, ClassSpec spec, IEnumerable <Spell> spells)
        {
            var talents  = new List <int>();
            var position = 0;

            grid = grid.Clone();
            grid.Reset();

            foreach (var spell in spells)
            {
                weak.AddSpell(spell, spec, 0, 0);

                var o = grid.Location?.Clone();

                grid.Next();

                var x = grid.Location.X;
                var y = grid.Location.Y;

                // Console.WriteLine($"{position}:: {x}, {y} -- {spell.Name} -- {y} - {grid.Origin.Y} < -{grid.Height} * {grid.Size}");

                var spellAuras = weak.AddSpell(spell, spec, x, y);
                if (talents.Any())
                {
                    spellAuras.DisplaceByTalents(grid, position, talents.ToArray());
                }

                if (spell.Talent != 0)
                {
                    talents.Add(spell.Talent);
                    grid.Location = o;
                }
                else
                {
                    position++;
                }
            }
        }
示例#28
0
        public static void Generate(WeakAura wa)
        {
            var balance  = new Balance();
            var feral    = new Feral();
            var guardian = new Guardian();
            var resto    = new RestorationDruid();

            feral.Maim.Talent = 7;
            guardian.IncapacitatingRoar.Talent = 8;
            resto.UrsolsVortex.Talent          = 9;

            // Stellar Flare is right ~ pretty sure the Druid\Balance() split ruins this
            balance.Sunfire.Durations.Add(18);
            balance.Moonfire.Durations.Add(22);
            balance.StellarDrift.Passive();

            var spec    = ClassSpec.Balance;
            var builder = new SpecBuilder(spec);

            // todo: should this be a standard?
            // wa.AddSpell(balance.StellarFlare, spec, -25, 300);
            wa.AddSpell(balance.StellarFlare, spec, -100, 225);

            builder.AddRightBar(
                balance.Barkskin.Buff(),
                balance.Renewal,
                balance.Innervate,
                balance.Typhoon,
                balance.Rebirth,
                balance.SolarBeam.DeBuff(),
                balance.MightyBash.DeBuff(),
                balance.MassEntanglement.DeBuff(),
                guardian.IncapacitatingRoar.DeBuff(),
                resto.UrsolsVortex.DeBuff(),
                feral.Maim.DeBuff(),
                balance.Cyclone.DeBuff(),
                // druid.EntanglingRoots1,
                // druid.Hibernate,
                // Glow if target Enraged?
                // druid.Soothe,
                // Glow if target -or- Player is Corrupted?
                // druid.RemoveCorruption,
                balance.HeartOfTheWild.Buff()
                ).AddCoreRotation(
                balance.Sunfire.DoT().Passive(),
                balance.Moonfire.DoT().Passive(),
                balance.Wrath.AssociateAura(balance.SolarEclipse).BigStacks(),
                balance.Starfire.AssociateAura(balance.LunarEclipse).BigStacks()
                ).AddCoreCooldowns(
                balance.CelestialAlignment.Buff(),
                // druid.IncarnationChosenOfElune,
                balance.WarriorOfElune.DeBuff(),
                // Spell: 248280 triggers for each treant summoned -- start a 10 second timer?
                balance.ForceOfNature,
                balance.FuryOfElune.Buff(),
                balance.NewMoon
                ).AddBottomBar(
                balance.Dash.Buff(),
                // druid.TigerDash,
                balance.WildCharge,
                balance.StampedingRoar.Buff()
                ).AddTopBar(
                balance.Starlord.Buff().Passive(),
                balance.Starfall.Buff().Passive(),
                balance.Starsurge.Buff().Passive(),
                // druid.SoulOfTheForest,
                balance.Solstice.Buff().Passive()
                ).AddAlerts(
                balance.MoonkinForm.MissingBuff().Passive(),
                balance.CatForm.Buff().Passive(),
                balance.BearForm.Buff().Passive()
                ).Build(wa);
        }
        public static List <Aura> AddSpell(this WeakAura weak, Spell spell, ClassSpec classSpec, int x, int y)
        {
            // todo: Use_Icon
            var addedAuras = new List <Aura>();
            var auraId     = GenerateAuraId(classSpec, spell);

            if (spell.Type.HasFlag(SpellType.Cooldown))
            {
                var aura = AuraIcon.Generate(auraId);
                aura.WatchAbilityCooldown(spell.Name, spell.SpellIds);
                addedAuras.Add(aura);
            }

            if (spell.Type.HasFlag(SpellType.DoT))
            {
                var onTarget = AuraIcon.Generate($"{auraId}_is_on_target");
                onTarget.WatchForDebuffOnTarget(spell.Name);

                var notOnTarget = AuraIcon.Generate($"{auraId}_not_on_target");
                notOnTarget.WatchForDebuffNotOnTarget(spell.Name, spell.SpellIds);
                notOnTarget.AddGlow(new Color(1, 0.04, 0.3));

                var refreshable = spell.Durations.Count == 0 ? 0 : (int)Math.Floor(spell.Durations.Max() * 0.3);
                if (refreshable < 1)
                {
                    Console.WriteLine($"WARN: {spell.Name} refreshable very low: {refreshable};");
                }

                var canRefresh = AuraIcon.Generate($"{auraId}_refreshable");
                canRefresh.AddGlow();
                canRefresh.WatchForDebuffOnTargetLow(spell.Name, refreshable);

                addedAuras.Add(onTarget, notOnTarget, canRefresh);
            }
            // DoT types already include a debuff on target tracker
            else if (spell.Type.HasFlag(SpellType.DebuffOnTarget))
            {
                var onTarget = AuraIcon.Generate($"{auraId}_is_on_target");
                onTarget.AddGlow();

                if (spell.AssociatedAuras.Count != 0)
                {
                    spell.AssociatedAuras.ForEach(s => onTarget.WatchForDebuffOnTarget(s.Name));
                }
                else
                {
                    onTarget.WatchForDebuffOnTarget(spell.Name);
                }

                addedAuras.Add(onTarget);
            }

            if (spell.Type.HasFlag(SpellType.BuffOnPlayer))
            {
                var onPlayer = AuraIcon.Generate($"{auraId}_buff_on_me");
                onPlayer.AddGlow();

                if (spell.AssociatedAuras.Count != 0)
                {
                    spell.AssociatedAuras.ForEach(s =>
                    {
                        if (s.Invert)
                        {
                            onPlayer.WatchForBuffNotOnPlayer(s.Name);
                        }
                        else
                        {
                            onPlayer.WatchForBuffOnPlayer(s.Name);
                        }
                    });
                }
                else
                {
                    if (spell.Invert)
                    {
                        onPlayer.WatchForBuffNotOnPlayer(spell.Name);
                    }
                    else
                    {
                        onPlayer.WatchForBuffOnPlayer(spell.Name);
                    }
                }

                addedAuras.Add(onPlayer);
            }

            foreach (var aura in addedAuras)
            {
                weak.Table.Children.Add(aura);

                aura.LoadIf(classSpec);
                aura.LoadIfTalent(spell.Talent);
                aura.AddVisibilityToggle();
                aura.XOffset = x;
                aura.YOffset = y;

                if (spell.BigStacks)
                {
                    // First SubRegion is always a TextRegion
                    aura.SubRegions.First().TextFontSize = 30;
                }
            }

            return(addedAuras);
        }
        public static void Generate(WeakAura wa)
        {
            var guardian = new Guardian();
            var resto    = new RestorationDruid();

            guardian.Typhoon.Talent   = 7;
            guardian.Maim.Talent      = 8;
            resto.UrsolsVortex.Talent = 9;

            var builder = new SpecBuilder(ClassSpec.Guardian);

            builder.AddRightBar(
                guardian.SurvivalInstincts.Buff().BigStacks(),
                guardian.Barkskin.Buff(),
                guardian.IncapacitatingRoar.DeBuff(),
                guardian.MightyBash.DeBuff(),
                guardian.MassEntanglement,
                guardian.Renewal,
                guardian.Typhoon,
                guardian.Rebirth,
                guardian.Maim.DeBuff(),
                guardian.Typhoon.DeBuff(),
                resto.UrsolsVortex.DeBuff(),
                guardian.Cyclone.DeBuff(),
                // druid.EntanglingRoot1,
                // druid.Hibernate,
                // Glow if target Enraged?
                // druid.Soothe,
                // Glow if target -or- Player is Corrupted?
                // druid.RemoveCorruption,
                guardian.HeartOfTheWild.Buff()
                ).AddCoreRotation(
                guardian.Moonfire.DoT().Passive().AssociateAura(guardian.GalacticGuardian),
                guardian.Thrash.DeBuff(),
                guardian.Mangle.Buff().AssociateAura(guardian.Gore),
                guardian.Maul
                ).AddCoreCooldowns(
                guardian.Berserk.Buff(),
                guardian.FrenziedRegeneration.BigStacks().Buff(),
                guardian.Ironfur.BigStacks().Buff(),
                guardian.Pulverize.DeBuff(),
                guardian.BristlingFur.Buff()
                // Incarnation,
                ).AddBottomBar(
                guardian.Dash.Buff(),
                guardian.WildCharge,
                guardian.StampedingRoar.Buff(),
                guardian.SkullBash
                ).AddTopBar(
                guardian.Ironfur.Buff().Passive(),
                guardian.InfectedWounds.DeBuff().Passive(),
                guardian.ToothAndClaw.Passive().DeBuff().BigStacks(),
                guardian.GalacticGuardian.Passive().DeBuff()
                ).AddAlerts(
                guardian.Barkskin.Buff().Passive(),
                guardian.FrenziedRegeneration.Buff().Passive(),
                guardian.SurvivalInstincts.Buff().Passive(),
                guardian.CatForm.Buff().Passive(),
                guardian.MoonkinForm.Buff().Passive(),
                guardian.BearForm.MissingBuff().Passive()
                ).Build(wa);
        }