Exemple #1
0
        public Bethtilac()
        {
            // If not listed here use values from defaults
            #region Info
            Name = "Beth'tilac";
            Instance = "Firelands";
            Content = new BossHandler.TierLevels[] { BossHandler.TierLevels.T12_10, BossHandler.TierLevels.T12_25, BossHandler.TierLevels.T12_10H, BossHandler.TierLevels.T12_25H, BossHandler.TierLevels.T12_LFR };
            Comment = "Main Tank is tanking Beth'tilac, Off Tank is tanking adds during Cinderweb phase.";
            #endregion
            #region Basics
            Health = new float[] { 17693752f, 53167148f, 27829008f, 83658808f, 0 };
            MobType = (int)MOB_TYPES.BEAST;
            BerserkTimer = new int[] { 10 * 60, 10 * 60, 10 * 60, 10 * 60, 0 };
            SpeedKillTimer = new int[] { 7 * 60, 7 * 60, 7 * 60, 7 * 60, 0 };
            InBackPerc_Melee = new double[] { 0.95f, 0.95f, 0.95f, 0.95f, 0 };
            InBackPerc_Ranged = new double[] { 0.00f, 0.00f, 0.00f, 0.00f, 0 };
            Max_Players = new int[] { 10, 25, 10, 25, 0 };
            Min_Tanks = new int[] { 2, 2, 2, 2, 0 };
            Min_Healers = new int[] { 3, 5, 3, 5, 0 };
            TimeBossIsInvuln = new float[] { 8f * 3f, 8f * 3f, 8f * 3f, 8f * 3f, 0 };
            #endregion
            #region Offensive
            for (int i = 0; i < 4; i++)
            {
                Phase TheCinderweb = new Phase() { Name = "The Cinderweb" };
                Phase TheFrenzy = new Phase() { Name = "The Frenzy!" };
                Phase Devastation = new Phase() { Name = "Devastation" };

                Attack Melee = new Attack
                {
                    Name = "Default Melee",
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]],
                    AttackSpeed = 2.5f,
                };
                Melee.AffectsRole[PLAYER_ROLES.MainTank] = true;
                Devastation.Attacks.Add(Melee);
                Attack MeleeP2 = Melee.Clone();
                MeleeP2.AttackSpeed = 5f;
                Melee.AffectsRole[PLAYER_ROLES.OffTank] = true;
                TheFrenzy.Attacks.Add(MeleeP2);

                #region The Cinderweb
                #region Boss Effects
                // Beth'tilac retreats to her web at the beginning of the battle. Beneath her web
                // scurry her brood.

                /* Fire Energy
                 * Beth'tilac will slowly lose Fire Energy over time. In addition, Cinderweb Drones will siphon
                 * some of her energy when they are depleted. Whenever Beth'tilac runs out of Fire Energy, she will
                 * set herself ablaze, causing Smoldering Devastation. */

                #region Phase 1 Ember Flare
                /* Ember Flare
                 * Intense heat burns enemies near Beth'tilac dealing 18500 to 21500 Fire damage to those on the
                 * same side of the web as she is. */
                // 10 man - http://ptr.wowhead.com/spell=98934 (Upstairs); alt - http://ptr.wowhead.com/spell=99859 (on ground)
                // 25 man - http://ptr.wowhead.com/spell=100648; alt - http://ptr.wowhead.com/spell=100649
                // 10 man heroic - http://ptr.wowhead.com/spell=100834; alt - http://ptr.wowhead.com/spell=100935
                // 25 man heroic - http://ptr.wowhead.com/spell=100835; alt - http://ptr.wowhead.com/spell=100936
                Attack EmberFlare = new Attack
                {
                    Name = "Ember Flare",
                    DamagePerHit = new float[]{ (14152f + 16447f), (15725f + 18275f), (20229f + 23510f), (25858f + 30051f), 0f }[i] / 2f, // Heroic values are a guess.
                    AttackSpeed = 6f,
                    MaxNumTargets = new float[]{ 3f, 5f, 3f, 5f, 0f }[i],
                };
                EmberFlare.AffectsRole[PLAYER_ROLES.MainTank] = true;
                EmberFlare.AffectsRole[PLAYER_ROLES.MainTankHealer] = true;
                EmberFlare.AffectsRole[PLAYER_ROLES.MeleeDPS] = true;
                Devastation.Attacks.Add(EmberFlare);
                #endregion

                #region Meteor Burn
                /* Meteor Burn
                 * Meteors crash down onto the web, dealing 37000 to 43000 Fire damage to those who stand beneath
                 * them. Additionally, they burn a hole in the web through which players may fall. */
                // http://ptr.wowhead.com/spell=99076
                // Players should not be hit by these
                Impedance Move_MeteorBurn = new Impedance
                {
                    Chance = new float[]{ 3f, 5f, 3f, 5f, 0f }[i] / Max_Players[i],
                    Name = "Meteor Burn",
                    Duration = 2f * 1000f,
                    Frequency = 15, // Guess
                    Breakable = false,
                };
                Move_MeteorBurn.AffectsRole[PLAYER_ROLES.MainTank] = true;
                Move_MeteorBurn.AffectsRole[PLAYER_ROLES.MainTankHealer] = true;
                Move_MeteorBurn.AffectsRole[PLAYER_ROLES.MeleeDPS] = true;
                Devastation.Moves.Add(Move_MeteorBurn);
                #endregion

                #region Consume
                /* Consume
                 * Beth'tilac consumes Cinderweb Spiderlings healing for 10% of her life. */
                // 2 spell ids with similar wording, providing both
                // http://ptr.wowhead.com/spell=99332; alt - http://ptr.wowhead.com/spell=99857
                // This should not happen
                #endregion

                #region Smoldering Devastation
                /* Smoldering Devastation
                 * When Beth'tilac is depleted of Fire Energy she will set herself ablaze, obliterating those who
                 * are not shielded by her web. */
                // http://ptr.wowhead.com/spell=99052
                Impedance Move_SmolderingDevastion = new Impedance
                {
                    Chance = Move_MeteorBurn.Chance,
                    Name = "Smoldering Devastation",
                    Duration = 8f * 1000f, // 5 seconds to jump down, and 3 second to get back up (about 7 seconds to taunt)
                    Frequency = 90,
                    Breakable = false,
                };
                Move_SmolderingDevastion.AffectsRole[PLAYER_ROLES.MainTank] = true;
                Move_SmolderingDevastion.AffectsRole[PLAYER_ROLES.MainTankHealer] = true;
                Move_SmolderingDevastion.AffectsRole[PLAYER_ROLES.MeleeDPS] = true;
                Devastation.Moves.Add(Move_SmolderingDevastion);
                #endregion
                #endregion

                #region Cinderweb Spinner
                /* These spiders dangle from the web above. Using Taunt or a similar ability on them will cause
                 * them to drop to the ground. Once killed, their filaments remain allowing players to climb up
                 * to the Cinderweb. */
                // http://ptr.wowhead.com/npc=52981; Beast
                TargetGroup CinderwebSpinner = new TargetGroup
                {
                    Name = "Cinderweb Spinner",
                    NearBoss = false,
                    NumTargs = new float[] { 2, 5, 2, 5, 0}[i],
                    // 3 groups drop after each devastation
                    Frequency = (Move_SmolderingDevastion.Frequency / 3f),
                    Duration = 10f * 1000f, // Assuming they last for only a few seconds since it's a taunt, and a couple swings.
                    TargetID = 52524,
                    LevelOfTargets = 85,
                };
                CinderwebSpinner.SetAffectsRoles_All();
                Devastation.Targets.Add(CinderwebSpinner);

                #region Cinderweb Spinner Burning Acid
                /* Burning Acid
                 * The Cinderweb Spinner spits burning venom at a random enemy, dealing 19016 to 21316 Fire damage. */
                // 12 different version with layering damage ranges posting the most probable with alts
                // 10 man - http://ptr.wowhead.com/spell=98471
                // 25 man - http://ptr.wowhead.com/spell=100826
                // 10 man heroic - http://ptr.wowhead.com/spell=100827
                // 25 man heroic - http://ptr.wowhead.com/spell=100828
                Attack BurningAcid = new Attack
                {
                    Name = "Cinderweb Spinner: Burning Acid",
                    DamagePerHit = new float[]{ (14420f + 16179f), (16022f + 17977f), (20612f + 23127f), (26347f + 29562f), 0f }[i],
                    DamageType = ItemDamageType.Fire,
                    AttackType = ATTACK_TYPES.AT_AOE,
                    // assume only one casts is cast per add before being taunted down
                    AttackSpeed = (Move_SmolderingDevastion.Frequency / 3f) / CinderwebSpinner.NumTargs,
                    IsFromAnAdd = true,
                    MaxNumTargets = CinderwebSpinner.NumTargs,
                    Dodgable = false,
                    Parryable = false,
                    Blockable = false,
                    Missable = false,
                };
                BurningAcid.SetAffectsRoles_All();
                Devastation.Attacks.Add(BurningAcid);
                #endregion

                #region Fiery Web Spin
                /* Fiery Web Spin [Heroic Only]
                 * The Cinderweb Spinner channels a web onto a random player, stunning them.*/
                // http://ptr.wowhead.com/spell=97202
                // This should never happen
                if (i > 2) 
                {
                    /*Impedance WebSpin = new Impedance
                    {
                        Name = "Web Spin",
                        Breakable = false,
                        Duration = 25,
                        Frequency = 15,
                    };
                    WebSpin.SetAffectsRoles_All();
                    WebSpin.AffectsRole[PLAYER_ROLES.MainTank] = false;
                    WebSpin.AffectsRole[PLAYER_ROLES.OffTank] = false;
                    TheCinderweb.Stuns.Add(WebSpin);
                     */
                }
                #endregion
                #endregion

                #region Cinderweb Drone
                /* These large spiders climb out of caves below the Cinderweb. When they are depleted of Fire
                 * Energy, they will climb up to Beth'tilac and siphon Fire Energy from her. */
                // http://ptr.wowhead.com/npc=52581#abilities
                TargetGroup CinderwebDrone = new TargetGroup
                {
                    Name = "Cinderweb Drone",
                    NearBoss = false,
                    NumTargs = 1,
                    Duration = 85f * 1000f, // Max duration
                    TargetID = 52581,
                    Frequency = 60,
                    LevelOfTargets = 85,
                };
                CinderwebDrone.AffectsRole[PLAYER_ROLES.OffTank] = true;
                CinderwebDrone.AffectsRole[PLAYER_ROLES.MeleeDPS] = true;
                CinderwebDrone.AffectsRole[PLAYER_ROLES.RangedDPS] = true;
                TheCinderweb.Targets.Add(CinderwebDrone);

                #region Cinderweb Melee
                Attack DroneMelee = new Attack
                {
                    Name = "Melee from Drones",
                    DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] / 2f,
                    AttackSpeed = 2.125f,
                    IsFromAnAdd = true,
                    MaxNumTargets = 1,
                };
                DroneMelee.AffectsRole[PLAYER_ROLES.OffTank] = true;
                TheCinderweb.Attacks.Add(DroneMelee);
                #endregion

                #region Cinderweb Drone Consume
                /* Consume
                 * Cinderweb Drones consume Spinderweb Spiderlings for 20% of their maximum life and provide
                 * them additional movement and attack speed.*/
                // http://ptr.wowhead.com/spell=99304
                // this should never happen
                #endregion

                #region Boiling Splatter
                /* Boiling Splatter
                 * The Cinderweb Drone spits burning venom at enemies in a 60 degree cone, dealing 58968 to
                 * 68531 Fire damage.*/
                // 10 man - http://ptr.wowhead.com/spell=99463
                // 25 man - http://ptr.wowhead.com/spell=100121
                // 10 man heroic - http://ptr.wowhead.com/spell=100832
                // 25 man heroic - http://ptr.wowhead.com/spell=100833
                // This should only be hit by the off-tank tanking the drones
                Attack BoilingSplatter = new Attack
                {
                    Name = "Boiling Splatter",
                    DamagePerHit = new float[] { (50122f + 58251f), (58968f + 68531f), (64472f + 74927f), (76658f + 89089f), 0f }[i] / 2f,
                    DamageType = ItemDamageType.Fire,
                    AttackSpeed = 15f,
                    IsFromAnAdd = true,
                    MaxNumTargets = 1,
                    Dodgable = false,
                    Parryable = false,
                    Blockable = false,
                    Missable = false,
                    SpellID = new float[] { 99463f, 100121f, 100832f, 100833f, 0f }[i],
                };
                BoilingSplatter.AffectsRole[PLAYER_ROLES.OffTank] = true;
                TheCinderweb.Attacks.Add(BoilingSplatter);
                #endregion

                #region Cinderweb Drone Burning Acid
                /* Burning Acid
                 * The Cinderweb Drone spits burning venom at a random enemy, dealing 19016 to 21316 Fire damage. */
                // 12 different version with layering damage ranges posting the most probable with alts
                // 10 man - http://ptr.wowhead.com/spell=99934
                // 25 man - http://ptr.wowhead.com/spell=100829
                // 10 man heroic - http://ptr.wowhead.com/spell=100830
                // 25 man heroic - http://ptr.wowhead.com/spell=100831
                Attack DroneBurningAcid = new Attack
                {
                    Name = "Cinderweb Drone: Burning Acid",
                    DamagePerHit = new float[] { (14419f + 16179f), (16022f + 17976f), (20612f + 23126f), (26347f + 29561f), 0f }[i],
                    DamageType = ItemDamageType.Fire,
                    AttackSpeed = 8f,
                    IsFromAnAdd = true,
                    MaxNumTargets = 1,
                    Dodgable = false,
                    Parryable = false,
                    Blockable = false,
                    Missable = false,
                    SpellID = new float[] { 99934f, 100829f, 100830f, 100831f, 0f }[i],
                };
                DroneBurningAcid.SetAffectsRoles_DPS();
                DroneBurningAcid.SetAffectsRoles_Healers();
                DroneBurningAcid.AffectsRole[PLAYER_ROLES.OffTank] = true;
                TheCinderweb.Attacks.Add(DroneBurningAcid);
                #endregion

                #region Fixate
                /* Fixate [Heroic Only]
                 * The Cinderweb Drone fixates on a random player, ignoring all others.*/
                // Two different ids used
                // http://www.wowhead.com/spell=99526
                if (i > 1)
                {
                    Attack DroneFixate = DroneMelee.Clone();
                    DroneFixate.DamagePerHit *= .25f;
                    DroneFixate.Duration = 10f;
                    DroneFixate.SpellID = 99526f;
                    DroneFixate.SetAffectsRoles_DPS();
                    DroneFixate.SetAffectsRoles_Healers();
                    TheCinderweb.Attacks.Add(DroneFixate);
                }
                #endregion
                #endregion

                #region Cinderweb Spiderling
                /* These tiny spiders climb out of caves below the Cinderweb. They instinctively move towards
                 * Cinderweb Drones for protection. Cinderweb Spiderlings can be consumed by larger spiders in order
                 * to restore some of their health.*/
                // http://www.wowhead.com/npc=52447
                TargetGroup CinderwebSpiderling = new TargetGroup
                {
                    Name = "Cinderweb Spiderling",
                    NearBoss = false,
                    NumTargs = 10f,
                    Duration = 15f * 1000f,
                    TargetID = 52447f,
                    Frequency = 20f,
                    LevelOfTargets = 85,
                };
                CinderwebSpiderling.AffectsRole[PLAYER_ROLES.RangedDPS] = true;
                TheCinderweb.Targets.Add(CinderwebSpiderling);

                #region Seeping Venom
                /* Seeping venom
                 * The Cinderweb Spiderling leaps onto a random enemy within 5 yards, injecting them with venom,
                 * which sears them for 6937 to 8062 Fire damage every 2 seconds for 10 sec.*/
                // http://www.wowhead.com/spell=97079
                Attack SeepingVenom = new Attack
                {
                    Name = "Seeping Venom",
                    DamagePerTick = (6937f + 8062f)/ 2f,
                    Duration = 10f,
                    IsDoT = true,
                    TickInterval = 2f,
                    DamageType = ItemDamageType.Nature,
                    AttackSpeed = 20f,
                    IsFromAnAdd = true,
                    MaxNumTargets = 1,
                    Dodgable = false,
                    Parryable = false,
                    Blockable = false,
                    Missable = false,
                    SpellID = 97079,
                };
                SeepingVenom.SetAffectsRoles_DPS();
                SeepingVenom.SetAffectsRoles_Healers();
                TheCinderweb.Attacks.Add(SeepingVenom);
                #endregion

                #endregion

                #region Cinderweb Broodling [Heroic Only]
                // These unstable spiders fixate on a random player and explode when they reach their target.
                if (i > 1)
                {
                    TargetGroup EngorgedBroodling = new TargetGroup
                    {
                        // These die when touched so they should not be up for more than 3 seconds each
                        Name = "Engorged Broodling",
                        NearBoss = false,
                        NumTargs = new float[] { 0, 0, 1, 3, 0 }[i],
                        Duration = 2f * 1000f,
                        LevelOfTargets = 85,
                        TargetID = new float[] { 0, 0, 53743, 53753, 0 }[i],
                        Frequency = 2f,
                    };
                    EngorgedBroodling.SetAffectsRoles_All();
                    TheCinderweb.Targets.Add(EngorgedBroodling);
                }

                #region Volatile Burst
                /* Volatile Burst [Heroic Only]
                 * Upon contact with any enemy, Cinderweb Broodling explode dealing 55500 to 64500 Fire damage
                 * to all enemies within 6 yards.*/
                // 10-man Heroic - http://ptr.wowhead.com/spell=99990
                // 25-man Heroic - http://ptr.wowhead.com/spell=100838
                Attack VolatileBurst = new Attack
                {
                    Name = "Volatile Burst",
                    DamagePerHit = new float[] { 0f, 0f, (38918f + 45229f), (43243f + 50256f), 0f }[i] / 2f, // Heroic values are a guess.
                    AttackSpeed = 2f,
                    MaxNumTargets = new float[] { 0f, 0f, 1f, 3f, 0f }[i],
                    SpellID = new float[] { 0f, 0f, 99990f, 100838f, 0f }[i],
                    AttackType = ATTACK_TYPES.AT_AOE,
                    DamageType = ItemDamageType.Nature,
                    IsFromAnAdd = true,
                };
                VolatileBurst.AffectsRole[PLAYER_ROLES.RangedDPS] = true;
                VolatileBurst.AffectsRole[PLAYER_ROLES.OffAndTertTankHealer] = true;
                VolatileBurst.AffectsRole[PLAYER_ROLES.RaidHealer] = true;
                TheCinderweb.Attacks.Add(VolatileBurst);
                #endregion
                #endregion
                #endregion

                #region The Frenzy!
                /* After she has performed Smouldering Devastation three times, Beth'tilac becomes frenzied. She
                 * emerges from the safety of her Cinderweb canopy and no longer calls for aid from her brood.*/

                #region Frenzy
                /* Frenzy
                 * a stacking buff which increases Beth'tilac's damage done by 5% per stack. A stack is added 
                 * every 5 seconds. It acts as a soft enrage timer and this is the reason you want to have 
                 * the boss as low on health as possible when entering this phase. */
                // http://www.wowhead.com/spell=99497
                SpecialEffect FrenzySpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { DamageTakenReductionMultiplier = -0.05f, }, 4.983f * 60f, 5f, 1f, 50);
                Stats FrenzyStats = new Stats();
                FrenzyStats.AddSpecialEffect(FrenzySpecialEffect);
                BuffState Frenzy = new BuffState
                {
                    Name = "Frenzy",
                    Breakable = false,
                    Frequency = BerserkTimer[i] - 1f,
                    Duration = BerserkTimer[i] * 1000f,
                    Stats = FrenzyStats,
                    Chance = 1f,
                };
                Frenzy.SetAffectsRoles_All();
                TheFrenzy.BuffStates.Add(Frenzy);
                #endregion

                #region The Widow's Kiss
                /* The Widow's Kiss
                 * Beth'tilac's deadly kiss boils the blood of her current target, reducing the amount that they
                 * can be healed by 10% every 2 seconds for 20 sec. If also causes the target to deal growing Fire
                 * damage to their surrounding allies within 10 yards.*/
                // Tanks should not be standing next to each other to be taking the fire damage
                // http://ptr.wowhead.com/spell=99506 (10%)
                SpecialEffect widowsKissSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { HealingReceivedMultiplier = -0.10f, }, 5f, 2f, 1f, 10);
                Stats widowsKissStats = new Stats();
                widowsKissStats.AddSpecialEffect(widowsKissSpecialEffect);
                widowsKissSpecialEffect = new SpecialEffect(Trigger.Use, widowsKissStats, 25f, 60f, 1f);
                widowsKissStats = new Stats();
                widowsKissStats.AddSpecialEffect(widowsKissSpecialEffect);
                BuffState WidowsKiss = new BuffState
                {
                    Name = "The Widow's Kiss",
                    Breakable = false,
                    Frequency = 30f * 2f,
                    Duration = 20f * 1000f,
                    Stats = widowsKissStats,
                };
                WidowsKiss.SetAffectsRoles_Tanks();
                TheFrenzy.BuffStates.Add(WidowsKiss);
                #endregion

                #region Phase 2 Ember Flare
                /* Ember Flare
                * Intense heat burns enemies near Beth'tilac dealing 18500 to 21500 Fire damage to those on the
                * same side of the web as she is. */
                // 10 man - http://ptr.wowhead.com/spell=99859
                // 25 man - http://ptr.wowhead.com/spell=100649
                // 10 man heroic - http://ptr.wowhead.com/spell=100935
                // 25 man heroic - http://ptr.wowhead.com/spell=100936
                Attack EmberFlarep2 = EmberFlare.Clone();
                EmberFlarep2.Name = "Ember Flare Phase 2";
                EmberFlarep2.DamagePerHit = new float[] { (15660f + 20340f), (17400f + 22600f), (23809f + 27670f), (30421f + 35355f), 0f }[i] / 2f;
                EmberFlarep2.MaxNumTargets = Max_Players[i];
                EmberFlarep2.SetAffectsRoles_All();
                TheFrenzy.Attacks.Add(EmberFlarep2);
                #endregion

                #region Consume
                /* Consume
                 * Beth'tilac consumes Cinderweb Spiderlings healing for 10% of her life. */
                // 2 spell ids with similar wording, providing both
                // http://ptr.wowhead.com/spell=99332; alt - http://ptr.wowhead.com/spell=99857
                // This should never happen
                #endregion

                #endregion

                #region Apply Phases
                float p1duration = Move_SmolderingDevastion.Frequency;
                float phaseStart = 0f;
                InnerPhase InnerPhaseDevasation;
                for (int j = 0; j < 3; j++)
                {
                    InnerPhaseDevasation = new InnerPhase(Devastation, i, 1, phaseStart, p1duration, BerserkTimer[i]);
                    phaseStart += p1duration;
                    TheCinderweb.InnerPhases.Add(InnerPhaseDevasation);
                }
                ApplyAPhasesValues(TheCinderweb, i, 1, 0, p1duration * 3f, BerserkTimer[i]);
                AddAPhase(TheCinderweb, i);
                ApplyAPhasesValues(TheFrenzy, i, 2, (p1duration * 3f), (BerserkTimer[i] - (p1duration * 3f)), BerserkTimer[i]);
                AddAPhase(TheFrenzy, i);
                #endregion
            }
            #endregion
            #region Defensive
            Resist_Physical = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Frost = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Fire = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Nature = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Arcane = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Shadow = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Holy = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            #endregion
        }
Exemple #2
0
        // The tank and healing check of the raid instance
        // ALMOST a Patchwork fight
        public Baleroc()
        {
            // If not listed here use values from defaults
            #region Info
            Name = "Baleroc, the Gatekeeper";
            Instance = "Firelands";
            Content = new BossHandler.TierLevels[] { BossHandler.TierLevels.T12_10, BossHandler.TierLevels.T12_25, BossHandler.TierLevels.T12_10H, BossHandler.TierLevels.T12_25H, BossHandler.TierLevels.T12_LFR };
            #endregion
            #region Basics
            Health = new float[] { 31565310f, 99978288f, 59428676f, 166239664f, 0 };
            MobType = (int)MOB_TYPES.ELEMENTAL;
            BerserkTimer = new int[] { 6 * 60, 6 * 60, 6 * 60, 6 * 60, 0 };
            SpeedKillTimer = new int[] { 5 * 60, 5 * 60, 5 * 60, 5 * 60, 0 };
            InBackPerc_Melee = new double[] { 0.95f, 0.95f, 0.95f, 0.95f, 0 };
            InBackPerc_Ranged = new double[] { 0.00f, 0.00f, 0.00f, 0.00f, 0 };
            Max_Players = new int[] { 10, 25, 10, 25, 0 };
            Min_Tanks = new int[] { 2, 2, 2, 2, 0 };
            Min_Healers = new int[] { 3, 5, 3, 5, 0 };
            #endregion
            #region Offensive
            #region Attacks
            for (int i = 0; i < 4; i++)
            {
                Phase Normal = new Phase() { Name = "Normal Phase" };
                Phase DecimationBlade = new Phase() { Name = "Decimation Blade" };
                Phase InfernoBlade = new Phase() { Name = "Inferno Blade" };
                Phase BothPhases = new Phase() { Name = "Both Phases" };

                Attack Melee = GenAStandardMelee(this[i].Content);
                Melee.IsDualWielding = true;
                Melee.AffectsRole[PLAYER_ROLES.MainTank] = true;
                Normal.Attacks.Add(Melee);

                #region Blaze of Glory
                /* Baleroc's assault periodically awakens a burning spark within his primary target, increasing the
                 * target's physical damage taken by 20%, but also raising their maximum health by 20%.
                 * 
                 * Every time Baleroc applies Blaze of Glory, he gains an application of Incendiary Soul, increasing Fire
                 * damage done by 20%.*/
                // http://ptr.wowhead.com/spell=99252
                // He averages out to applying this once every 12 seconds
                Stats BlazeofGloryStats = new Stats();
                SpecialEffect BlazeofGlorySpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { BonusHealthMultiplier = 0.2f, DamageTakenReductionMultiplier = -0.20f }, BerserkTimer[i], 12f, 1f, 99);
                BlazeofGloryStats.AddSpecialEffect(BlazeofGlorySpecialEffect);
                BuffState BlazeofGlory = new BuffState
                {
                    Name = "Blaze of Glory",
                    Chance = 1,
                    Frequency = BerserkTimer[i],
                    Stats = BlazeofGloryStats,
                    Breakable = false,
                    Duration = BerserkTimer[i] * 1000f,
                };
                BlazeofGlory.SetAffectsRoles_Tanks();
                BothPhases.BuffStates.Add(BlazeofGlory);

                /* Incendiary Soul
                 * Every time Baleroc applies Blaze of Glory, he gains an application of Incendiary Soul, increasing Fire
                 * damage done by 20%.*/
                // http://ptr.wowhead.com/spell=99369
                Stats IncendiarySoulStat = new Stats();
                SpecialEffect IncendiarySoulSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { FireDamageTakenMultiplier = 0.20f }, BerserkTimer[i], 12f, 1f, 99);
                IncendiarySoulStat.AddSpecialEffect(IncendiarySoulSpecialEffect);
                BuffState IncendiarySoul = new BuffState
                {
                    Name = "Incendiary Soul",
                    Chance = 1,
                    Frequency = BerserkTimer[i],
                    Stats = IncendiarySoulStat,
                    Breakable = false,
                    Duration = BerserkTimer[i] * 1000f,
                };
                IncendiarySoul.SetAffectsRoles_Tanks();
                BothPhases.BuffStates.Add(IncendiarySoul);
                #endregion

                #region Shards of Torment
                /* Baleroc summons *warning* two chrystals *end warning* amonst his foes, which continually channel
                 * a shadowy beam on the player that is nearest to them.*/
                // Summon - http://ptr.wowhead.com/spell=99260
                // NPC - http://db.mmo-champion.com/c/53495/
                float ShardofTormentDebuff = new float[] { 40, 60, 40, 60 }[i];

                #region Torment
                // Deals 3500 Shadow damage per application to the nearest player, stacking once per second.
                // 10 man - http://ptr.wowhead.com/spell=99256
                // 25 man - http://ptr.wowhead.com/spell=100230
                // 10 man heroic - http://ptr.wowhead.com/spell=100231
                // 25 man heroic - http://ptr.wowhead.com/spell=100232
                // At most people should be taking 12 stacks of Torment
                float TormentDamageMultiplier = (1 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11) / 12f;
                float Affected = ((i == 0) || (i == 2 ) ? 1f : 2f );
                Attack Torment = new Attack
                {
                    Name = "Torment",
                    AttackSpeed = 34f,
                    DamagePerTick = new float[] { 3000, 3000, 4250, 4250, 0 }[i] * TormentDamageMultiplier,
                    IsDoT = true,
                    Duration = 12f,
                    TickInterval = 1f,
                    MaxNumTargets = Affected * 2f,
                    AttackType = ATTACK_TYPES.AT_AOE,
                    DamageType = ItemDamageType.Shadow,
                    SpellID = new float[] { 99256, 100230, 100231, 100232, 0 }[i],
                };
                Torment.SetAffectsRoles_DPS();
                BothPhases.Attacks.Add(Torment);
                #endregion

                #region Tormented
                /* When Torment fades from a player, they are afflicted by the Tormented effect, which increases
                 * Shadow damage taken by 250% and reduces healing done by 75%, for 40 sec.
                 * *Warning* Direct melee contact with any other player will apply a fresh copy of the Tormented effect
                 * to that player. [Heroic ONLY]*/
                // 10 man - http://ptr.wowhead.com/spell=99257
                // 25 man - http://ptr.wowhead.com/spell=99402
                // 10 man heroic - http://ptr.wowhead.com/spell=99403
                // 25 man heroic - http://ptr.wowhead.com/spell=99404
                // This should NEVER get placed on a Healer
                float TormentedDamageIncrease = new float[] { 2.5f, 2.5f, 5f, 5f, 0f }[i];
                BuffState Tormented = new BuffState
                {
                    Name = "Tormented",
                    Chance = Affected / (Max_Players[i] - Min_Healers[i] - Min_Tanks[i]),
                    Breakable = false,
                    Duration = ShardofTormentDebuff * 1000f,
                    Frequency = 34f,
                    Stats = new Stats() { SpellDamageTakenReductionMultiplier = -TormentedDamageIncrease, BonusHealingDoneMultiplier = -0.50f },
                };
                Tormented.SetAffectsRoles_DPS();
                BothPhases.BuffStates.Add(Tormented);
                #endregion

                #region Wave of Torment
                /* If there are no players within 15 yards of a Shard of Torment, the Shard pulses this effect, dealing
                 * 14250 to 15750 Shadow damage each second to all players.*/
                // 10 man - http://ptr.wowhead.com/spell=99261
                // 25 man - http://www.wowhead.com/spell=101636
                // 10 man heroic - http://www.wowhead.com/spell=101637
                // 25 man heroic - http://www.wowhead.com/spell=101638
                // This should NEVER happen
                #endregion

                #region Vital Spark
                /* If a player casts a direct heal on someone who is being damaged by Torment, the healer gains an
                 * application of Vital Spark for each (three/five [Normal/Heroic]) stacks of Torment on the target.
                 * Casting a single-target direct heal on a target affected by Blaze of Glory will trigger Vital Flame,
                 * increasing healing done on such targets by 5% per stack of vital Spark, lasting for 15 sec.*/
                // http://ptr.wowhead.com/spell=99262
                float VitalSparkBaseCD = new float[] { 3, 3, 5, 5, 0 }[i];
                float VitalSparkCD = BerserkTimer[i] / ((BerserkTimer[i] * ((Torment.Duration * 2f) / Torment.AttackSpeed)) / VitalSparkBaseCD);
                Stats VitalSparkStats = new Stats();
                // Assume half the healers get the buff at any given time
                SpecialEffect VitalSparkSpecialEffect = new SpecialEffect(Trigger.HealingSpellHit, new Stats() { BonusHealingDoneMultiplier = 0.05f }, 60f, VitalSparkCD, 0.5f, 999);
                VitalSparkStats.AddSpecialEffect(VitalSparkSpecialEffect);
                BuffState VitalSpark = new BuffState
                {
                    Name = "Vital Spark",
                    Breakable = false,
                    Chance = 1f,
                    Duration = BerserkTimer[i] * 1000f,
                    Frequency = BerserkTimer[i] - 1f,
                    Stats = VitalSparkStats,
                };
                VitalSpark.SetAffectsRoles_Healers();
                BothPhases.BuffStates.Add(VitalSpark);
                #endregion

                #region Vital Flame
                /* Increasing healing done to targets affected by Blaze of Glory by 5% per stack of Vital Spark
                 * consumed to create this effect, lasting for 15 sec. When Vital Flame expires, it restores the
                 * Vital Spark stacks that were consumed to create the effect.*/
                // http://ptr.wowhead.com/spell=99263
                Stats VitalFlameStats = new Stats();
                SpecialEffect VitalFlameSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { HealingReceivedMultiplier = 0.05f }, 60f, VitalSparkCD, 1f, 999);
                VitalFlameStats.AddSpecialEffect(VitalFlameSpecialEffect);
                BuffState VitalFlame = new BuffState
                {
                    Name = "Vital Flame",
                    Breakable = false,
                    Chance = 1f,
                    Duration = BerserkTimer[i] * 1000f,
                    Frequency = BerserkTimer[i] - 1f,
                    Stats = VitalFlameStats,
                };
                VitalFlame.SetAffectsRoles_Tanks();
                BothPhases.BuffStates.Add(VitalFlame);
                #endregion
                #endregion

                #region Blades of Baleroc
                /*Baleroc will periodically empower one of his blades with Shadow or Fire energy, and wield it
                 * alone for 15 sec.*/

                /* Decimation Blade
                 * Baleroc's melee strikes deal Shadow damage equal to 90% of the target's maximum health,
                 * instead of their normal physical damage. This damage cannot be resisted or mitigated by
                 * normal means.*/
                // http://ptr.wowhead.com/spell=99352
                // http://ptr.wowhead.com/spell=99353
                Attack DecimatingStrike = new Attack
                {
                    // Decimation Blades' Attack speed was reduced for 5 second per swing to 6.25 on Sep 19, 2011
                    Name = "Decimating Strike",
                    AttackSpeed = 6.25f,
                    DamagePerHit = .9f,
                    DamageType = ItemDamageType.Shadow,
                    DamageIsPerc = true,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    SpellID = 99353,
                    Blockable = false,
                    Dodgable = true,
                    Parryable = true,
                    Missable = true,
                    IsDualWielding = false,
                };
                DecimatingStrike.AffectsRole[PLAYER_ROLES.OffTank] = true;
                DecimationBlade.Attacks.Add(DecimatingStrike);

                /* Inferno Blade
                 * Baleroc's melee strikes deal 102999 to 103000 Fire damage to the target, instead of their
                 * normal physical damage, while this effect is active.*/
                // Initial Cast - http://ptr.wowhead.com/spell=99350
                // 10 man - http://ptr.wowhead.com/spell=99351
                // 25 man - http://ptr.wowhead.com/spell=101000
                // 10 man heroic - http://ptr.wowhead.com/spell=101001
                // 25 man heroic - http://ptr.wowhead.com/spell=101002
                Attack InfernoStrike = new Attack
                {
                    Name = "Inferno Strike",
                    AttackSpeed = 4f,
                    DamagePerHit = new float[] { (73125f + 76875f), (124312f + 130687f), (116025f + 121975f), (197242f + 207357f), 0f }[i] / 2f,
                    DamageType = ItemDamageType.Fire,
                    DamageIsPerc = false,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    SpellID = new float[] { 99351, 10100, 101001, 101002, 0 }[i],
                    Blockable = true,
                    Dodgable = true,
                    Parryable = true,
                    Missable = true,
                    IsDualWielding = false,
                };
                InfernoStrike.AffectsRole[PLAYER_ROLES.MainTank] = true;
                InfernoBlade.Attacks.Add(InfernoStrike);

                #endregion

                #region Countdown [Heroic Only]
                /* Baleroc links two players to each other for 8 sec. If the chosen players move within 3 yards of each
                 * other, the effect will dissipate harmlessly, but if the effect runs its full course, both players will
                 * explode, dealing 125000 Fire damage to all allies within 45 yards.*/
                // http://ptr.wowhead.com/spell=99516
                // possible explosion id: http://ptr.wowhead.com/spell=99518
                // This should NEVER go off, so one has to move at most 7 of the 8 seconds
                if (i > 1)
                {
                    Impedance Countdown_Move = new Impedance
                    {
                        Name = "Countdown Move",
                        Duration = 7f * 1000f,
                        Chance = 2f / (Max_Players[i] - Min_Tanks[i]),
                        Breakable = false,
                        Frequency = 45f,
                    };
                    Countdown_Move.SetAffectsRoles_DPS();
                    Countdown_Move.SetAffectsRoles_Healers();
                    BothPhases.Moves.Add(Countdown_Move);
               }
                #endregion

                #region Apply Phases
                // Pull then at 30 Sec, Empower Blade w/ 50/50 chance for which blade type.
                // 15 secs of empowered blade
                // Return to normal mode.
                int phasestart = 0;
                int EBdur = 15;
                int NormalDur = 30;
                InnerPhase InnerPhaseNormal, InnerPhaseEmpoweredBlade;
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 30 seconds;  OT builds stacks
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(InfernoBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 45 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 1 minute 15 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(DecimationBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 1 minute 30 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 2 minutes 0 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(InfernoBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 2 minutes 15 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 2 minute 45 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(DecimationBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 3 minute 0 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 3 minutes 30 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(InfernoBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 3 minutes 45 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 4 minute 15 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(DecimationBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 4 minute 30 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 5 minutes 0 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(InfernoBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 5 minutes 15 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                InnerPhaseNormal = new InnerPhase(Normal, i, 1, phasestart, NormalDur, BerserkTimer[i]); phasestart += NormalDur; // 5 minute 45 seconds
                BothPhases.InnerPhases.Add(InnerPhaseNormal);
                InnerPhaseEmpoweredBlade = new InnerPhase(DecimationBlade, i, 1, phasestart, EBdur, BerserkTimer[i]); phasestart += EBdur; // 6 minute 0 seconds
                BothPhases.InnerPhases.Add(InnerPhaseEmpoweredBlade);
                ApplyAPhasesValues(BothPhases, i, 1, 0, BerserkTimer[i], BerserkTimer[i]);
                AddAPhase(BothPhases, i);
                #endregion
            }
            #endregion
            #endregion
            #region Defensive
            Resist_Physical = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Frost = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Fire = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Nature = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Arcane = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Shadow = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Holy = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            #endregion
            #region Impedances
            for (int i = 0; i < 2; i++)
            {
                //Moves;
                //Stuns;
                //Fears;
                //Roots;
                //Disarms;
            }
            TimeBossIsInvuln = new float[] { 0.00f, 0.00f, 0, 0, 0 };
            #endregion
            /* TODO:
             * Heroic
             */
        }
Exemple #3
0
        public Shannox()
        {
            /* Shannox can be done with 1 tank on Normal with the main tank tanking Riplimb at the same time as
             * Shannox. However for consistency between Normal and Heroic, the Boss Handler will assume the use
             * of the two tank strat.*/
            #region Info
            Name = "Shannox";
            Instance = "Firelands";
            Content = new BossHandler.TierLevels[] { BossHandler.TierLevels.T12_10, BossHandler.TierLevels.T12_25, BossHandler.TierLevels.T12_10H, BossHandler.TierLevels.T12_25H, BossHandler.TierLevels.T12_LFR };
            #endregion
            #region Basics
            // Baleroc's health consists of both himself and his dogs Ripgut and Rageface
            // On heroic mode, you do not kill the dogs. Instead you burn Shannox instead
            Health = new float[] { (20442296f + (7901028f * 2f)), (61198050f + (25252248f * 2f)), 28619216f, 97100904f, 0 };
            MobType = (int)MOB_TYPES.HUMANOID;
            BerserkTimer = new int[] { 10 * 60, 10 * 60, 10 * 60, 10 * 60, 0 };
            SpeedKillTimer = new int[] { 7 * 60, 7 * 60, 7 * 60, 7 * 60, 0 };
            InBackPerc_Melee = new double[] { 0.95f, 0.95f, 0.95f, 0.95f, 0 };
            InBackPerc_Ranged = new double[] { 0.00f, 0.00f, 0.00f, 0.00f, 0 };
            Max_Players = new int[] { 10, 25, 10, 25, 0 };
            Min_Tanks = new int[] { 2, 2, 2, 2, 0 };
            Min_Healers = new int[] { 3, 5, 3, 5, 0 };
            #endregion
            #region Offensive
            #region Attacks
            for (int i = 0; i < 4; i++)
            {
                Phase EntireFight = new Phase() { Name = "Entire Fight" };
                Phase TwoDogsUp = new Phase() { Name = "Two Dogs Up" };
                Phase OneDogUp = new Phase() { Name = "One Dog Up" };
                Phase Before30Pct = new Phase() { Name = "Before Shannox reaches 30% Health" };
                Phase After30Pct = new Phase() { Name = "After Shannox reaches 30% Health" };

                #region Shannox
                Attack BasicMeleeMT = new Attack
                {
                    Name = "Melee Shannox",
                    AttackSpeed = 1.4f,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] * (i < 2 ? .5f : 1f),
                    Missable = true,
                    Dodgable = true,
                    Parryable = true,
                    Blockable = true,
                    IsTheDefaultMelee=true,
                };
                BasicMeleeMT.AffectsRole[PLAYER_ROLES.MainTank] = true;
                TwoDogsUp.Attacks.Add(BasicMeleeMT);
                
                // With just one dog up, his attack damage goes up by 15%
                Attack BasicMeleeMT1DU = BasicMeleeMT.Clone();
                BasicMeleeMT1DU.DamagePerHit *= 1.15f;
                OneDogUp.Attacks.Add(BasicMeleeMT1DU);

                #region Frenzy
                /* When both of Shannox's hounds are defeated, he goes into a frenzy, increasing physical damage
                 * and attack speed by 30. Shannox no longer uses Hurl Spear after this point and instead drives his
                 * spear directly into the ground to trigger the same cascade of molten eruptions around the impact
                 * point, which deal 61156 to 67594 Fire damage to enemies that are stand in them.*/
                // http://ptr.wowhead.com/spell=100522

                // If both of his dogs die, his damage goes up by 30%
                // Does not happen on Heroic
                Attack BasicMeleeMT0DU = BasicMeleeMT.Clone();
                BasicMeleeMT0DU.DamagePerHit *= 1.30f;
                if (i < 2)
                    After30Pct.Attacks.Add(BasicMeleeMT0DU);
                else
                    After30Pct.Attacks.Add(BasicMeleeMT);
                #endregion

                #region Arcing Slash
                /* Shannox causes 125% of normal melee damage in a wide arc up to 1 yards in front of him, and
                 * inflicts Jagged Tear on those he strikes.*/
                // http://ptr.wowhead.com/spell=99931
                Attack ArcingSlash = new Attack
                {
                    Name = "Arcing Slash",
                    AttackSpeed = 12.5f,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = BasicMeleeMT.DamagePerHit * 1.25f,
                    SpellID = 99931,
                };
                ArcingSlash.AffectsRole[PLAYER_ROLES.MainTank] = true;
                TwoDogsUp.Attacks.Add(ArcingSlash);

                Attack ArcingSlash1DU = ArcingSlash.Clone();
                ArcingSlash1DU.DamagePerHit = BasicMeleeMT1DU.DamagePerHit * 1.25f;
                OneDogUp.Attacks.Add(ArcingSlash1DU);

                Attack ArcingSlash0DU = ArcingSlash.Clone();
                ArcingSlash0DU.DamagePerHit = BasicMeleeMT0DU.DamagePerHit * 1.25f;
                if (i < 2)
                    After30Pct.Attacks.Add(ArcingSlash0DU);
                else
                    After30Pct.Attacks.Add(ArcingSlash);

                #region Jagged Tear
                /* Shannox's Arcing Slash leaves a Jagged Tear that deals 3000 physical damage every 3 sec for 30
                 * sec. Stacks.*/
                // http://ptr.wowhead.com/spell=99937
                Attack JaggedTear = new Attack
                {
                    Name = "Jagged Tear MT",
                    AttackSpeed = 10f,
                    AttackType = ATTACK_TYPES.AT_DOT,
                    IsDoT = true,
                    SpellID = 99937,
                    DamagePerTick = 3000,
                    TickInterval = 3,
                    Duration = 30,
                };
                JaggedTear.AffectsRole[PLAYER_ROLES.MainTank] = true;
                JaggedTear.AffectsRole[PLAYER_ROLES.OffTank] = false;
                Before30Pct.Attacks.Add(JaggedTear);
                After30Pct.Attacks.Add(JaggedTear);
                #endregion
                #endregion

                #region Hurl Spear
                /* Shannox hurls his spear in the direction of his hound, Riplimb. The spear deals 117000 to
                 * 123000 physical damage to anyone it strikes directly as well as 59546 to 69204 Fire damage to
                 * all enemies within 50 yards. The spear strike also triggers a cascade of molten eruptions around the
                 * impact point which deal 61156 to 67594 Fire damage to enemies that are caught in them.
                 * 
                 * Riplimb will then break off from combat, fetch the spear, and return it to Shannox.*/
                // http://ptr.wowhead.com/spell=100002
                // Should NEVER get hit by this, one should move away from the landing spot
                /*Attack HurlSpear = new Attack
                {
                    Name = "Hurl Spear",
                    AttackSpeed = 25f, // Timing is a rough estimate currently.
                    AttackType = ATTACK_TYPES.AT_AOE,
                    DamagePerHit = (99450f + 104550f) / 2f,
                    MaxNumTargets = Max_Players[i],
                    DamageType = ItemDamageType.Physical,
                    SpellID = 100002,
                };*/
                Impedance HurlSpear_Move = new Impedance
                {
                    Name = "Hurl Spear Move",
                    Breakable = false,
                    Chance = 1f,
                    Frequency = 20f,
                    Duration = 2f * 1000f,
                };
                HurlSpear_Move.AffectsRole[PLAYER_ROLES.RangedDPS] = true;
                HurlSpear_Move.SetAffectsRoles_Healers();
                HurlSpear_Move.AffectsRole[PLAYER_ROLES.OffTank] = true;
                Before30Pct.Moves.Add(HurlSpear_Move);

                #region Magma Flare
                // The Initial 40% increase to fire damage, as well as the initial damage should never be aplied, but the residual damage should
                // 10-man - http://ptr.wowhead.com/spell=99842
                // 25-man - http://ptr.wowhead.com/spell=101205
                // 10-man Heroic - http://ptr.wowhead.com/spell=101206
                // 25-man heroic - http://ptr.wowhead.com/spell=101207
                /*Attack MagmaRapture = new Attack
                {
                    Name = "Magma Rapture",
                    AttackSpeed = 15f,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = new float[] { (64600f + 71400f), (64600f + 71400f), (100937f + 111562f), (100937f + 111562f), 0f }[i],
                    DamageType = ItemDamageType.Fire,
                    MaxNumTargets = 1f,
                    SpellID = new float[] { 99842, 101205, 101206, 101207, 0 }[i],
                };
                 */
                // http://ptr.wowhead.com/spell=100495
                Attack MagmaFlare = new Attack
                {
                    Name = "Magma Flare",
                    AttackSpeed = 45f,
                    AttackType = ATTACK_TYPES.AT_AOE,
                    DamagePerHit = (39312f + 45687f) / 2f,
                    DamageType = ItemDamageType.Fire,
                    MaxNumTargets = Max_Players[i],
                    SpellID = 100495,
                };
                MagmaFlare.SetUnavoidable();
                MagmaFlare.SetAffectsRoles_All();
                Before30Pct.Attacks.Add(MagmaFlare);
                After30Pct.Attacks.Add(MagmaFlare);
                #endregion
                #endregion
                #endregion

                #region Riplimb
                /* Shannox has two hounds. Riplimb will attack the target with the most threat.
                 * *Warning* In Heroic Difficulty, Riplimb cannot be permanently slain while his master lives. When
                 * his health reaches zero, he will collapse for up to 30 seconds, and then reanimate at full health to
                 * resume fighting.*/
                // http://db.mmo-champion.com/c/53694/
                TargetGroup Riplimb = new TargetGroup 
                { 
                    Name= "Riplimb",
                    // On normal, Riplimb should be the second dog to die, not the first
                    // Heroic, Riplimb stays alive the entire fight
                    Duration = BerserkTimer[i] * (i < 2 ? 0.7f : 1f) * 1000f,
                    Frequency = 1,
                    LevelOfTargets = 88,
                    NearBoss = false,
                    NumTargs = 1,
                    TargetID = 53694,
                };
                Riplimb.AffectsRole[PLAYER_ROLES.OffTank] = true;
                Before30Pct.Targets.Add(Riplimb);
                if (i > 1)
                    After30Pct.Targets.Add(Riplimb);

                #region Melee
                Attack BasicMeleeOT = new Attack
                {
                    Name = "Melee Riplimb",
                    AttackSpeed = 1.4f,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] * 0.30f,
                    Missable = true,
                    Dodgable = true,
                    Parryable = true,
                    Blockable = true,
                };
                BasicMeleeOT.AffectsRole[PLAYER_ROLES.MainTank] = false;
                BasicMeleeOT.AffectsRole[PLAYER_ROLES.OffTank] = true;
                Before30Pct.Attacks.Add(BasicMeleeOT);
                if (i > 1)
                    After30Pct.Attacks.Add(BasicMeleeOT);
                #endregion

                #region Limb Rip
                /* Riplimb bites savagely, dealing 175% of normal melee damage to an enemy and inflicting
                 * Jagged Tear on those he strikes.*/
                // http://ptr.wowhead.com/spell=99832
                Attack LimbRipOT = new Attack
                {
                    Name = "Limb Rip",
                    AttackSpeed = 10f,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamagePerHit = BasicMeleeOT.DamagePerHit * 1.75f, // Heroic values are unkonwn at this point.
                    Missable = false,
                    Dodgable = false,
                    Parryable = false,
                    Blockable = false,
                };
                LimbRipOT.AffectsRole[PLAYER_ROLES.MainTank] = false;
                LimbRipOT.AffectsRole[PLAYER_ROLES.OffTank] = true;
                Before30Pct.Attacks.Add(LimbRipOT);
                if (i > 1)
                    After30Pct.Attacks.Add(LimbRipOT);
                #endregion

                #region Jagged Tear
                /* Riplimb's Limb Rip leaves a Jagged Tear that deals 3000 physical damage every 3 sec for 30
                 * sec. Stacks.*/
                // http://ptr.wowhead.com/spell=99937
                Attack JaggedTearRL = JaggedTear.Clone();
                JaggedTearRL.Name = "Jagged Tear OT";
                JaggedTearRL.AttackSpeed = LimbRipOT.AttackSpeed;
                JaggedTearRL.AffectsRole[PLAYER_ROLES.MainTank] = false;
                JaggedTearRL.AffectsRole[PLAYER_ROLES.OffTank] = true;
                Before30Pct.Attacks.Add(JaggedTearRL);
                if (i > 1)
                    After30Pct.Attacks.Add(JaggedTearRL);
                #endregion

                #region Frenzied Devotion
                /* Riplimb goes into an unstoppable rage if he is alive to sitness Shannox's health reach 30%.
                 * This effect increases damage dealth by 200% and attack and movement speed by 100%.*/
                // http://ptr.wowhead.com/spell=100064
                // Only happens on Normal
                // Never should happen
                #endregion

                #region Feeding Frenzy [Heroic Only]
                /* Riplimb's successful melee attacks grant a stacking 10% bonus to physical damage dealt
                 * for 20sec.*/
                // http://ptr.wowhead.com/spell=100656
                // Never should last more than 1 minute stacks
                Stats FeedingFrenzyStats = new Stats();
                SpecialEffect FeedingFrenzySpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { PhysicalDamageTakenReductionMultiplier = -0.1f }, 20f, 1.2f, 1, 200);
                FeedingFrenzyStats.AddSpecialEffect(FeedingFrenzySpecialEffect);
                FeedingFrenzySpecialEffect = new SpecialEffect(Trigger.Use, FeedingFrenzyStats, 60f, 60f);
                FeedingFrenzyStats = new Stats();
                FeedingFrenzyStats.AddSpecialEffect(FeedingFrenzySpecialEffect);
                if (i > 1) // Heroic only
                {
                    BuffState FeedingFrenzyRiplimb = new BuffState
                    {
                        Name = "Feeding Frenzy Riplimb",
                        Breakable = false,
                        Chance = 1,
                        Duration = 20 * 1000,
                        Frequency = BasicMeleeOT.AttackSpeed,
                        Stats = FeedingFrenzyStats,
                    };
                    FeedingFrenzyRiplimb.AffectsRole[PLAYER_ROLES.OffTank] = true;
                    Before30Pct.BuffStates.Add(FeedingFrenzyRiplimb);
                    After30Pct.BuffStates.Add(FeedingFrenzyRiplimb);
                }
                #endregion
                #endregion

                #region Rageface
                /* Shannox has two hounds, Rageface cannot be controlled, and will dart about from enemy to 
                 * enemy, changing targets periodically.*/
                // http://db.mmo-champion.com/c/53695/

                TargetGroup Rageface = new TargetGroup
                {
                    Name = "Rageface",
                    // One normal, Rageface should be the first dog to die
                    // Heroic Rageface stays alive the entire fight
                    Duration = BerserkTimer[i] * (i < 2 ? .35f : 1f) * 1000f,
                    Frequency = 1,
                    LevelOfTargets = 88,
                    NearBoss = false,
                    NumTargs = 1,
                    TargetID = 53695,
                };
                Rageface.SetAffectsRoles_DPS();
                Rageface.SetAffectsRoles_Healers();
                if (i < 2)
                    TwoDogsUp.Targets.Add(Rageface);
                else
                {
                    Before30Pct.Targets.Add(Rageface);
                    After30Pct.Targets.Add(Rageface);
                }

                #region Melee
                Attack RagefaceMelee = new Attack
                {
                    Name = "Rageface Melee",
                    AttackSpeed = 1.2f,
                    DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] * 0.1f,
                    DamageType = ItemDamageType.Physical,
                    MaxNumTargets = 1f,
                    IsFromAnAdd = true,
                    AttackType = ATTACK_TYPES.AT_MELEE,
                };
                RagefaceMelee.SetAffectsRoles_DPS();
                RagefaceMelee.SetAffectsRoles_Healers();
                if (i < 2)
                    TwoDogsUp.Attacks.Add(RagefaceMelee);
                else
                {
                    Before30Pct.Attacks.Add(RagefaceMelee);
                    After30Pct.Attacks.Add(RagefaceMelee);
                }
                #endregion

                #region Face Rage
                /* Rageface leaps at a random target, stunning and knockign them to the ground, and bgins to
                 * viciously claw at them. This mauling initially deals 8000 physical damage every 0.50 sec, but
                 * the damage dealt increases over time. While so occupied, Rageface is 1000% more susceptible to
                 * critical strikes.
                 * Rageface will continue until his target is dead, or he receives a single attack that deals at least
                 * 40000 damage.*/
                // Attack - http://ptr.wowhead.com/spell=99947
                // Get off me - http://ptr.wowhead.com/spell=100129
                Attack FaceRage = new Attack
                {
                    Name = "Face Rage",
                    AttackType = ATTACK_TYPES.AT_MELEE,
                    DamageType = ItemDamageType.Physical,
                    AttackSpeed = 15f,
                    DamagePerHit = 30000f,
                    DamagePerTick = 8000f,
                    IsDoT = true,
                    TickInterval = 0.5f,
                    Duration = 30f,
                    Interruptable = true,
                };
                FaceRage.SetAffectsRoles_DPS();
                FaceRage.SetAffectsRoles_Healers();
                if (i < 2)
                    TwoDogsUp.Attacks.Add(FaceRage);
                else
                {
                    Before30Pct.Attacks.Add(FaceRage);
                    After30Pct.Attacks.Add(FaceRage);
                }

                BuffState FaceRageBuff = new BuffState
                {
                    Name = "Face Rage Crit Buff",
                    Frequency = 15f,
                    Duration = 30f * 1000f,
                    Chance = 1f,
                    Breakable = true,
                    Stats = new Stats() { SpellCrit = 10f, PhysicalCrit = 10f },
                };
                FaceRageBuff.SetAffectsRoles_DPS();
                if (i < 2)
                    TwoDogsUp.BuffStates.Add(FaceRageBuff);
                else
                {
                    Before30Pct.BuffStates.Add(FaceRageBuff);
                    After30Pct.BuffStates.Add(FaceRageBuff);
                }
                #endregion

                #region Feeding Frenzy [Heroic Only]
                /* Rageface's successful melee attacks grant a stacking 10% bonus to physical damage dealt
                 * for 20sec.*/
                // http://ptr.wowhead.com/spell=100656
                if (i > 1)
                {
                    BuffState FeedingFrenzyRageface = new BuffState
                    {
                        Name = "Feeding Frenzy Rageface",
                        Breakable = false,
                        Chance = 1,
                        Duration = 20 * 1000,
                        Frequency = RagefaceMelee.AttackSpeed,
                        Stats = FeedingFrenzyStats,
                    };
                    FeedingFrenzyRageface.SetAffectsRoles_DPS();
                    FeedingFrenzyRageface.SetAffectsRoles_Healers();
                    Before30Pct.BuffStates.Add(FeedingFrenzyRageface);
                    After30Pct.BuffStates.Add(FeedingFrenzyRageface);
                }
                #endregion

                #region Frenzied Devotion
                /* Rageface goes into an unstoppable rage if he is alive to sitness Shannox's health reach 30%.
                 * This effect increases damage dealth by 200% and attack and movement speed by 100%.*/
                // http://ptr.wowhead.com/spell=100064
                // Only happens on normal
                // Should NEVER happen
                #endregion
                #endregion

                #region Apply Phases
                float phaseStartTime = 0;
                float NormalPhaseOneStartTime = 0;
                float phaseDuration = BerserkTimer[i] * (1 - .3f);
                NormalPhaseOneStartTime = phaseDuration / 2f;
                InnerPhase DogsUp;
                if (i < 2)
                {
                    DogsUp = new InnerPhase(TwoDogsUp, i, 1, 0, NormalPhaseOneStartTime, BerserkTimer[i]);
                    Before30Pct.InnerPhases.Add(DogsUp);
                    DogsUp = new InnerPhase(OneDogUp, i, 1, NormalPhaseOneStartTime, NormalPhaseOneStartTime, BerserkTimer[i]);
                    Before30Pct.InnerPhases.Add( DogsUp );
                }
                ApplyAPhasesValues( Before30Pct, i, 1, phaseStartTime, phaseDuration, BerserkTimer[i] );
                phaseStartTime += phaseDuration;
                phaseDuration = BerserkTimer[i] - phaseDuration;
                ApplyAPhasesValues( After30Pct, i, 1, phaseStartTime, phaseDuration, BerserkTimer[i] );
                AddAPhase(Before30Pct, i);
                AddAPhase(After30Pct, i);
                #endregion
            }
            #endregion
            #endregion
            #region Defensive
            Resist_Physical = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Frost = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Fire = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Nature = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Arcane = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Shadow = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            Resist_Holy = new double[] { 0.00f, 0.00f, 0, 0, 0 };
            #endregion
            #region Impedances
            for (int i = 0; i < 2; i++)
            {
                //Moves;

                // TODO: OT Always moves for Hurl Spear.
                // DPS Moves for Hurl Spear
                
                /* Immolation Trap
                 * Shannox launches a fiery trap at the feet of a player. The trap takes 2 seconds to arm, and 
                 * triggers when stepped on therafter, dealing 64374 to 64375 Fire damage immediately and
                 * 24462 to 27038 Fire damage every 3 sec. and increasing all damage taken by 40%, for 9 sec.*/
                // http://ptr.wowhead.com/spell=99838

                /* Crystal Prison Trap
                 * Shannox launches a prison trap at the feet of a player. The trap takes 2 seconds to arm, and
                 * triggers when stepped on therafter, encasing the target in a block of magma crystal, preventing all
                 * movement or other actions. Only by destroying the crystal prison can a trapped player be freed.*/
                // Spell - http://ptr.wowhead.com/spell=99836
                // NPC - http://db.mmo-champion.com/c/53713/

            }
            TimeBossIsInvuln = new float[] { 0.00f, 0.00f, 0, 0, 0 };
            #endregion
            /* TODO:
             * Moves for Hurl Spear & Traps.
             */
        }