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 }
// 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 */ }
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. */ }