public Alizabal() { // If not listed here use values from defaults #region Info Name = "Alizabal, Mistress of Hate"; Instance = "Baradin Hold"; Content = new BossHandler.TierLevels[] { BossHandler.TierLevels.T13_10, BossHandler.TierLevels.T13_25, BossHandler.TierLevels.T13_10H, BossHandler.TierLevels.T13_25H, BossHandler.TierLevels.T13_LFR }; #endregion #region Basics Health = new float[] { 25166000f, 80900000f, 0, 0, 0 }; MobType = (int)MOB_TYPES.DEMON; // 5 minute Berserk timer BerserkTimer = new int[] { 5 * 60, 5 * 60, 0, 0, 0 }; SpeedKillTimer = new int[] { 3 * 60, 3 * 60, 0, 0, 0 }; InBackPerc_Melee = new double[] { 0.95f, 0.95f, 0, 0, 0 }; InBackPerc_Ranged = new double[] { 0.00f, 0.00f, 0, 0, 0 }; Max_Players = new int[] { 10, 25, 0, 0, 0 }; Min_Tanks = new int[] { 2, 2, 0, 0, 0 }; Min_Healers = new int[] { 3, 5, 0, 0, 0 }; TimeBossIsInvuln = new float[] { 5f * 15f, 5f * 15f, 0, 0, 0 }; #endregion #region The Phases for (int i = 0; i < 2; i++) { Phase Phase1 = new Phase() { Name = "Phase 1: Soaking" }; Phase Phase2 = new Phase() { Name = "Phase 2: Blade Dance" }; #region MT and OT Melee Swapping // MT and OT tank swap // Each should take half of the total damage // does not melee during Firestorm Attack MTMelee = new Attack { Name = "MT Melee", AttackType = ATTACK_TYPES.AT_MELEE, IsTheDefaultMelee = true, DamageType = ItemDamageType.Physical, DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]], MaxNumTargets = 1f, AttackSpeed = 5f, IsDualWielding = true, }; MTMelee.AffectsRole[PLAYER_ROLES.MainTank] = true; Phase1.Attacks.Add(MTMelee); Attack OTMelee = MTMelee.Clone(); OTMelee.Name = "OT Melee"; OTMelee.AffectsRole[PLAYER_ROLES.MainTank] = false; OTMelee.AffectsRole[PLAYER_ROLES.OffTank] = true; Phase1.Attacks.Add(OTMelee); #endregion #region Skewer // Alizabal skewers her current target, stunning them. In addition, Skewer inflicts 20,000 damage // every second and increases damage taken by 100%. // http://ptr.wowhead.com/spell=104936 // Tanks switch every 10 seconds so minimize any extra damage the tank gets while stunned. // TODO: double check attack speed of the attack #region Main Attack Attack SkewerMainTank = new Attack { Name = "Skewer", SpellID = 104936, DamageType = ItemDamageType.Physical, AttackType = ATTACK_TYPES.AT_MELEE, DamagePerTick = (18000f + 22000f) / 2f, IsDoT = true, Duration = 8f, TickInterval = 1f, MaxNumTargets = 1f, // Based on early videos, it appears that the boss applies this every 20 second per tank AttackSpeed = 40f, }; SkewerMainTank.SetUnavoidable(); SkewerMainTank.SetAffectsRoles_Tanks(); Phase1.Attacks.Add(SkewerMainTank); #endregion #region Stun Impedance SkewerMTImpedance = new Impedance { Name = "Skewer Stun", Chance = 1f, Duration = SkewerMainTank.Duration, Frequency = SkewerMainTank.AttackSpeed, }; SkewerMTImpedance.SetAffectsRoles_Tanks(); Phase1.Stuns.Add(SkewerMTImpedance); #endregion #region Increased Damage BuffState SkewerMTBuffState = new BuffState { Name = "Skewer Increased Damage Taken", Chance = 1f, Duration = SkewerMainTank.Duration * 1000f, Frequency = SkewerMainTank.AttackSpeed, Breakable = false, Stats = new Stats() { DamageTakenReductionMultiplier = -1f }, }; SkewerMTBuffState.SetAffectsRoles_Tanks(); Phase1.BuffStates.Add(SkewerMTBuffState); #endregion #endregion #region Seething Hate // Alizabal incites Seething Hate on a random target causing 100,000 damage to all players within // 6 yards, splitting the damage between everyone hit. // Attack is a dot that hits for every 3 seconds lasting 9 seconds. // Raid stacks up to spread the damage // 10-man - http://ptr.wowhead.com/spell=105069 // 25-man - http://ptr.wowhead.com/spell=108094 Attack SeethingHate = new Attack { Name = "Seething Hate", SpellID = new float[] { 105069, 108094, 0, 0, 0 }[i], IsDoT = true, // From videos watched, it only appeares to affect range dps and healers. AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Shadow, Duration = 9f, TickInterval = 3f, DamagePerTick = (new float[] { (195000f + 205000f), (585000f + 615000f), 0, 0, 0 }[i] / 2f) / Max_Players[i], // Need verification on how many are hit. MaxNumTargets = Max_Players[i], // Need verification on timing, but there is a dummy effect with an 8 second cooldown // Based on early videos, it appears that it has a 20-21 second cooldown AttackSpeed = 20f, }; SeethingHate.SetUnavoidable(); SeethingHate.SetAffectsRoles_All(); Phase1.Attacks.Add(SeethingHate); #endregion #region Blade Dance // Alizabal enters a Blade Dance inflicting 10,000 physical damage every second to all players // withing 15 yards. In addition, during Blade Dance all incoming attacks are reflected. // http://ptr.wowhead.com/spell=104994 // Performed once a minute for 15 second Attack BladeDance = new Attack { Name = "Blade Dance", SpellID = 104994f, DamagePerTick = new float[] { 10000, 10000, 0, 0 }[i], IsDoT = true, TickInterval = 1f, DamageType = ItemDamageType.Physical, AttackSpeed = 5f, // Besides the initial whirlwind that hits everyone, you want to have at most 20% of the raid // getting hit with this MaxNumTargets = Max_Players[i] * 0.20f, AttackType = ATTACK_TYPES.AT_AOE, Duration = 5f * 1000f, }; BladeDance.SetAffectsRoles_All(); Phase2.Attacks.Add(BladeDance); BuffState BladeDance_Hit_Reduction = new BuffState { Name = "Blade Dance Hit Reduction", Duration = 15f * 1000, Frequency = 15f, Chance = 1f, Breakable = false, Stats = new Stats() { SpellHit = -1f, PhysicalHit = -1f }, }; BladeDance_Hit_Reduction.SetAffectsRoles_All(); Phase2.BuffStates.Add(BladeDance_Hit_Reduction); // Everyone needs to move out Impedance BladeDanceImpedance = new Impedance { Name = "Blade Dance Move", Chance = BladeDance.MaxNumTargets / Max_Players[i], Duration = 2f * 3f * 1000f, Frequency = BladeDance.Duration / 1000f, }; BladeDanceImpedance.SetAffectsRoles_All(); Phase2.Moves.Add(BladeDanceImpedance); #endregion #region Apply Phases float phaseStartTime = 0; float phase1length = 45f; float phase2length = 15f; ClearPhase1Values( Phase1); ClearPhase1Values( Phase2); // First Blade dance starts after 35 second ApplyAPhasesValues( Phase1, i, 1, phaseStartTime, 35f, this[i].BerserkTimer); phaseStartTime += 35f; ApplyAPhasesValues( Phase2, i, 2, phaseStartTime, phase2length, this[i].BerserkTimer); phaseStartTime += phase2length; // 50 seconds ApplyAPhasesValues( Phase1, i, 3, phaseStartTime, phase1length, this[i].BerserkTimer); phaseStartTime += phase1length; // 95 seconds ApplyAPhasesValues( Phase2, i, 4, phaseStartTime, phase2length, this[i].BerserkTimer); phaseStartTime += phase2length; // 110 seconds ApplyAPhasesValues( Phase1, i, 5, phaseStartTime, phase1length, this[i].BerserkTimer); phaseStartTime += phase1length; // 155 seconds ApplyAPhasesValues( Phase2, i, 6, phaseStartTime, phase2length, this[i].BerserkTimer); phaseStartTime += phase2length; // 170 seconds ApplyAPhasesValues( Phase1, i, 7, phaseStartTime, phase1length, this[i].BerserkTimer); phaseStartTime += phase1length; // 215 seconds ApplyAPhasesValues( Phase2, i, 8, phaseStartTime, phase2length, this[i].BerserkTimer); phaseStartTime += phase2length; // 230 seconds ApplyAPhasesValues( Phase1, i, 9, phaseStartTime, phase1length, this[i].BerserkTimer); phaseStartTime += phase1length; // 275 seconds ApplyAPhasesValues( Phase2, i, 10, phaseStartTime, phase2length, this[i].BerserkTimer); phaseStartTime += phase1length; // 275 seconds ApplyAPhasesValues( Phase1, i, 11, phaseStartTime, 10f, this[i].BerserkTimer); // 300 seconds AddAPhase(Phase1, i); AddAPhase(Phase2, 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 }
public Ragnaros() { // If not listed here use values from defaults #region Info Name = "Ragnaros"; 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 = "Not modeled in detail yet."; #endregion #region Basics // Rag "dies" at 10% on normal (goes back under the lava). // Apparently Rag heals to about 50% once he hits phase 4 and starts moving around the platform // So for heroic his health is 90% to phase 4 and 50% while in Phase 4 so 140% health Health = new float[] { 50246820f * 0.9f, 150740464f * 0.9f, 74200000f * 1.40f, 246910064f * 1.40f, 0 }; // TODO: Double check Heroic 10-man health MobType = (int)MOB_TYPES.ELEMENTAL; BerserkTimer = new int[] { 18 * 60, 18 * 60, 18 * 60, 18 * 60, 0 }; SpeedKillTimer = new int[] { 5 * 60, 8 * 60, 12 * 60, 12 * 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[] { 2, 5, 2, 3, 0 }; TimeBossIsInvuln = new float[] { 45f * 2f, 45f * 2f, (45 * 2f) + 14f, (45 * 2f) + 14f, 0 }; // Assume 45 seconds during each phase transition, and 14 seconds going into phase 4 Under35Perc = new double[] { 0.166666667, 0.166666667, 0.214285714, 0.214285714, 0 }; Under20Perc = new double[] { 0.122222222, 0.122222222, 0.221428571, 0.221428571, 0 }; #endregion #region Offensive //MaxNumTargets = new double[] { 1, 1, 0, 0 }; //MultiTargsPerc = new double[] { 0.00d, 0.00d, 0.00d, 0.00d }; #region Attacks for (int i = 0; i < 4; i++) { Phase ByFirebePurged = new Phase() { Name = "By Fire be Purged!" }; // Phase 1 Phase Intermission1 = new Phase() { Name = "Intermission: Minions of Fire!" }; // Intermission 1 Phase SulfuaswillbeYourEnd = new Phase() { Name = "Sulfuras will be Your End!" }; // Phase 2 Phase Intermission2 = new Phase() { Name = "Intermission: Denizens of Flame!" }; // Intermission 2 Phase BegoneFrommyRealm = new Phase() { Name = "Begone From my Realm!" }; // Phase 3 Phase Intermission3 = new Phase() { Name = "Ah! Outsiders! This is not your Realm!" }; // Intermission 3 Phase TheTruePoweroftheFireLord = new Phase() { Name = "The True Power of the Fire Lord!" }; // Heroic Only float IntermissionLength = 45f; float Intermission3Length = 14f; float phase1to3Length = (BerserkTimer[i] - (45f * 2) - (i > 1 ? Intermission3Length : 0f)) * (i < 2 ? (1f / 3f) : (3f / 14f)); float phase4Length = (BerserkTimer[i] - (45f * 2) - Intermission3Length) * (5f / 14f); Attack melee = GenAStandardMelee(this[i].Content); melee.DamagePerHit *= 1.25f; ByFirebePurged.Attacks.Add(melee); SulfuaswillbeYourEnd.Attacks.Add(melee); BegoneFrommyRealm.Attacks.Add(melee); TheTruePoweroftheFireLord.Attacks.Add(melee); #region By Fire be Purged! #region Sulfuras Smash /*Ragnarose faces a random player and begins prepares to smash Sulfuras on the platform. The * impact creates several Lava Waves which move out in several directions from the point of * impact.*/ // 10 man - http://ptr.wowhead.com/spell=98708 // 25 man - http://ptr.wowhead.com/spell=100256 // 10 man heroic - http://ptr.wowhead.com/spell=100257 // 25 man heroic - http://ptr.wowhead.com/spell=100258 // Melee should need to worry about this since they are positioned behind the attack zone thus missing the attack // This should never be hit by the player #region Lava Wave /* A Lava Wave inflicts 87871 to 92379 Fire damage and knocks back all players it passes * through. Targets who are knocked back suffer an additional 25106 to 26394 Fire damage * every 1 sec for 5 sec.*/ // 10 man - http://ptr.wowhead.com/spell=98928 // 25 man - http://ptr.wowhead.com/spell=100292 // 10 man heroic - http://ptr.wowhead.com/spell=100293 // 25 man heroic - http://ptr.wowhead.com/spell=100294 // This SHOULD NEVER happen // Iv anything it should be a movement to move around the attack Impedance LavaWave_Move = new Impedance { Name = "Lava Wave Move", Duration = 2f * 1000f, Chance = 0.20f, // Five possible spots it can hit, thus 20% chance it will hit in your area thus having to move Frequency = 30f, Breakable = false, }; LavaWave_Move.SetAffectsRoles_Healers(); LavaWave_Move.AffectsRole[PLAYER_ROLES.RangedDPS] = true; ByFirebePurged.Moves.Add(LavaWave_Move); #endregion #endregion #region Wrath of Ragnaros /* Ragnaros targets a player, inflicting 75318 to 79182 Fire damage to all players within 6 yards * and knocking them back. * * *Warning* In 25 player raids, Ragnaros targets three players.*/ // 10 man - http://ptr.wowhead.com/spell=98263 // 25 man - http://ptr.wowhead.com/spell=100113 // 10 man heroic - http://ptr.wowhead.com/spell=100114 // 25 man heroic - http://ptr.wowhead.com/spell=100115 Attack WrathofRagnaros = new Attack { Name = "Wrath of Ragnaros", AttackSpeed = 30f, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, DamagePerHit = new float[] { (43875f + 46125f), (43875f + 46125f), (62156f + 65343f), (62156f + 65343f), 0f }[i] / 2f, MaxNumTargets = new float[] { 1f, 3f, 1f, 3f, 0f }[i], SpellID = new float[] { 98263, 100113, 100114, 100115, 0 }[i], }; WrathofRagnaros.SetAffectsRoles_Healers(); WrathofRagnaros.AffectsRole[PLAYER_ROLES.RangedDPS] = true; ByFirebePurged.Attacks.Add(WrathofRagnaros); #endregion #region Hand of Ragnaros /* Ragnaros inflicts 37659 to 39591 Fire damage to all enemies within 55 yards, knocking them * back.*/ // 10 man - http://ptr.wowhead.com/spell=98237 // 25 man - http://ptr.wowhead.com/spell=100383 // 10 man heroic - http://ptr.wowhead.com/spell=100384 // 25 man heroic - http://ptr.wowhead.com/spell=100387 // Only affects Melee and Tanks Attack HandofRagnaros = new Attack { Name = "Hand of Ragnaros", AttackSpeed = 25f, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, DamagePerHit = new float[] { (21937f + 23062f), (21937f + 23062f), (33150f + 34850f), (33150f + 34850f), 0f }[i] / 2f, MaxNumTargets = Max_Players[i], SpellID = new float[] { 98237, 100383, 100384, 100387, 0 }[i], }; HandofRagnaros.AffectsRole[PLAYER_ROLES.MeleeDPS] = true; HandofRagnaros.SetAffectsRoles_Tanks(); ByFirebePurged.Attacks.Add(HandofRagnaros); SulfuaswillbeYourEnd.Attacks.Add(HandofRagnaros); BegoneFrommyRealm.Attacks.Add(HandofRagnaros); #endregion #region Magma Trap /*Ragnaros periodically forms a Magmaw Trap at a random player's location. The Magma Trap * persists for the duration of the battle, and will trigger when stepped on, causing a Magma Trap * Eruption.*/ // http://ptr.wowhead.com/spell=98164 // damage - http://ptr.wowhead.com/spell=98170 // summons after damage - http://ptr.wowhead.com/npc=53086 // Normal we are popping them immediatly on spawn // On Heroic we need to wait 45 seconds before popping the next trap. // That means on the bear minimum, we need to pop 4 traps in Phase 1 and 3 traps in phase 2 #region Magma Trap Eruption /* When triggered, a Magma Trap erupts for 75318 to 79182 Fire damage to all enemies * within the Firelands, and violently knocking the player who tripped the Magma Trap into the air. * * *Heroic* An enemy that triggers a Magma Trap will take 50% additional fire damage from the Magma * Trap Eruption for 45 sec. Stacks.*/ // This means we cannot pop the next trap until the debuf wears off or 45 second cooldown // This debuff ONLY increases the damage of your next Magma Trap damage, not overall fire damage /* Eruption * 10 man - http://ptr.wowhead.com/spell=98175 * 25 man - http://ptr.wowhead.com/spell=100106 * 10 man heroic - http://ptr.wowhead.com/spell=100107 * 25 man heroic - http://ptr.wowhead.com/spell=100108 */ // Timers are adjusted by 16 seconds Attack MagmaTrapEruption = new Attack { Name = "Magma Trap Eruption", AttackSpeed = (phase1to3Length/ (phase1to3Length - 16f)) * (i < 2 ? 25f : 45f), DamagePerHit = new float[] { (58500f + 61500f), (58500f + 61500f), (82875f + 87125f), (97500f + 102500f), 0f }[i] / 2f, MaxNumTargets = Max_Players[i], AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, SpellID = new float[] { 98175, 100106, 100107, 100108, 0 }[i], }; MagmaTrapEruption.SetAffectsRoles_All(); ByFirebePurged.Attacks.Add(MagmaTrapEruption); Attack MagmaTrapEruptionPhase2 = MagmaTrapEruption.Clone(); // At most 3 traps should be up during phase 2 on Heroic MagmaTrapEruptionPhase2.AttackSpeed = phase1to3Length / 3f; if (i > 1) { SulfuaswillbeYourEnd.Attacks.Add(MagmaTrapEruptionPhase2); } /* Vulnerability * 10-man Heroic - http://ptr.wowhead.com/spell=100238 * 25-man heroic - http://ptr.wowhead.com/spell=100239 */ // Not going to model this part since I'm factoring in the 45 second debuff into my attack speed #endregion #endregion #region Magma Blast /* Ragnaros blasts magma at his current target if he cannot reach and melee them, * inflicting 73125 to 76875 Fire damage and increasing Fire damage taken by 50% for 6 sec. */ // http://ptr.wowhead.com/spell=98313 // This should NEVER happen #endregion #region Burning Wound /* The attacks from Ragnaros open a Burning Wound, inflicting 3656 to 3843 Fire damage every 2 sec * for 20 sec. The wound causes the target's attacks to become infused with fire, causing a * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99399 // 25-man - http://ptr.wowhead.com/spell=101238 // 10-man Heroic - http://ptr.wowhead.com/spell=101239 // 25-man Heroic - http://ptr.wowhead.com/spell=101240 // 5 second cooldown on application // Only allow 4 stacks to be applied float BurningWoundDamage = new float[] { (3656f + 3843f), (3656f + 3843f), (5386f + 5663f), (5386f + 5663f), 0f }[i] / 2f; Attack BurningWound = new Attack { Name = "Burning Wound", AttackSpeed = 40f, AttackType = ATTACK_TYPES.AT_MELEE, DamageType = ItemDamageType.Fire, // Average damage after the stacking equates to ABOUT 1.3 times the base damage DamagePerTick = BurningWoundDamage * 1.3f, TickInterval = 2f, Duration = 20f + 20f, // 20 seconds to stack the debuff, 20 seconds to let it drop IsDoT = true, SpellID = new float[] { 99399, 101238, 101239, 101240, 0 }[i], }; BurningWound.SetAffectsRoles_Tanks(); ByFirebePurged.Attacks.Add(BurningWound); #region Burning Blast /* Inflicts 1950 to 2050 Fire damage, each stack of Burning Wound increases the damage of * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99400 // 25-man - http://ptr.wowhead.com/spell=101241 // 10-man Heroic - http://ptr.wowhead.com/spell=101242 // 25-man Heroic - http://ptr.wowhead.com/spell=101243 float BurningBlastDamaage = (1950f + 2050f) / 2f; Stats BurningBlastStat = new Stats(); SpecialEffect BurningBlastSpecialEffect = new SpecialEffect(Trigger.PhysicalAttack, new Stats() { FireDamage = BurningBlastDamaage }, 20f, 5f, 1f, 4); BurningBlastStat.AddSpecialEffect(BurningBlastSpecialEffect); BurningBlastSpecialEffect = new SpecialEffect(Trigger.Use, BurningBlastStat, 40f, 40f, 1f); BurningBlastStat = new Stats(); BurningBlastStat.AddSpecialEffect(BurningBlastSpecialEffect); BuffState BurningBlast = new BuffState { Name = "Burning Blast", Frequency = 40f, Duration = 40f * 1000f, Chance = 1f, Breakable = false, Stats = BurningBlastStat, }; BurningBlast.SetAffectsRoles_Tanks(); ByFirebePurged.BuffStates.Add(BurningBlast); #endregion #endregion #endregion #region Intermission: Minions of Fire! /* At 70% health, Ragnaros will cast Splitting Blow wedging Sulfuras into the platform and creating * Sons of Flame across the platform. Ragnaros will stay submerged for 45 seconds or until all of the * Sons of Flame are destroyed.*/ #region Splitting Blow /* Ragnaros buries Sulfuras within the platform, creating Sons of Flame that attempt to reach the * mighty hammer.*/ /* 12 different ids all with the same descriptions: * http://ptr.wowhead.com/spell=98951; http://ptr.wowhead.com/spell=98952; http://ptr.wowhead.com/spell=98953 * http://ptr.wowhead.com/spell=100877; http://ptr.wowhead.com/spell=100878; http://ptr.wowhead.com/spell=100879 * http://ptr.wowhead.com/spell=100880; http://ptr.wowhead.com/spell=100881; http://ptr.wowhead.com/spell=100882 * http://ptr.wowhead.com/spell=100883; http://ptr.wowhead.com/spell=100884; http://ptr.wowhead.com/spell=100885*/ // initial Summon Sons trigger - http://ptr.wowhead.com/spell=99012 // Summon Cast - http://ptr.wowhead.com/spell=99056 // Number of summons - http://ptr.wowhead.com/spell=99054 // This means that 10 Sons are summoned that need to be slowed and killed within 45 seconds. // The damage from Splitting Blow should NEVER hit a player #endregion #region Son of Flame /*Sons of Flame will cross the platform and attempt to reform with Sulfuras, causing a * Supernova if they are able to reach the mighty weapon.*/ // http://ptr.wowhead.com/npc=53140 TargetGroup SonsofFlame = new TargetGroup { Name = "Sons of Flame", Chance = 1f, Frequency = 1f, Duration = IntermissionLength * 1000f, LevelOfTargets = 87, NearBoss = false, NumTargs = 10f, TargetID = 53140f, }; SonsofFlame.SetAffectsRoles_All(); Intermission1.Targets.Add(SonsofFlame); #region Burning Speed /* Sons of Flame move faster as their blaze burns hotter. Their movement speed is * increased by an amount equal to every 1% health they have above 50% health.*/ // 10 man - http://ptr.wowhead.com/spell=99414 // 25 man - http://ptr.wowhead.com/spell=100306 // 10 man heroic - http://ptr.wowhead.com/spell=100307 // 25 man heroic - http://ptr.wowhead.com/spell=100308 // Don't Need to model #endregion #region Supernova /* If a Son of Flame reaches Sulfuras, the elemental will explode in a Supernova, * inflicting 112978 to 118772 Fire damage to all players within the Firelands.*/ // 10 man - http://ptr.wowhead.com/spell=99112 // 25 man - http://ptr.wowhead.com/spell=100259 // 10 man heroic - http://ptr.wowhead.com/spell=100260 // 25 man heroic - http://ptr.wowhead.com/spell=100261 // Since if this happens at ANY time, it's a wipe, so assuming that this does not take place #endregion #endregion #region Lava Bolt /* While Ragnaros lies submerged underneath the lava, bolts of hot magma fall on four random players every 4 seconds. * A Lava Bolt inflicts 43875 to 46125 Fire Damage. * * In 25 player raids, bolts of hot magma fall on ten players.*/ // 10-man - http://ptr.wowhead.com/spell=98981 // 25-man - http://ptr.wowhead.com/spell=100289 // 10-man Heroic - http://ptr.wowhead.com/spell=100290 // 25-man Heroic - http://ptr.wowhead.com/spell=100291 Attack LavaBolt = new Attack { Name = "Lava Bolt", AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, AttackSpeed = 4f, DamagePerHit = new float[] { (43875f + 46125f), (43875f + 46125f), (68250f + 71750f), (68250f + 71750f), 0 }[i] / 2f, MaxNumTargets = new float[] { 4, 10, 4, 10, 0 }[i], SpellID = new float[] { 98981, 100289, 100290, 100291, 0 }[i], }; LavaBolt.SetAffectsRoles_All(); Intermission1.Attacks.Add(LavaBolt); #endregion #endregion #region Sulfuras will be Your End! #region Sulfuras Smash /*Ragnarose faces a random player and begins prepares to smash Sulfuras on the platform. The * impact creates several Lava Waves which move out in several directions from the point of * impact.*/ // 10 man - http://ptr.wowhead.com/spell=98708 // 25 man - http://ptr.wowhead.com/spell=100256 // 10 man heroic - http://ptr.wowhead.com/spell=100257 // 25 man heroic - http://ptr.wowhead.com/spell=100258 #region Lava Wave /* A Lava Wave inflicts 87871 to 92379 Fire damage and knocks back all players it passes * through. Targets who are knocked back suffer an additional 25106 to 26394 Fire damage * every 1 sec for 5 sec.*/ // 10 man - http://ptr.wowhead.com/spell=98928 // 25 man - http://ptr.wowhead.com/spell=100292 // 10 man heroic - http://ptr.wowhead.com/spell=100293 // 25 man heroic - http://ptr.wowhead.com/spell=100294 SulfuaswillbeYourEnd.Moves.Add(LavaWave_Move); #endregion #endregion #region World of Flames [Heroic Only] /* Ragnaros periodically engulfs one third of the platform in flame every 2.60 sec for 13 sec. * Inflicting 87871 to 92379 Fire damage to players caught in the conflagration.*/ // cast - http://ptr.wowhead.com/spell=100171 // spell - http://ptr.wowhead.com/spell=99171 #endregion #region Molten Seed /*Ragnaros forms a Molten Seed at the location of 10 random players, inflicing 69042 to 72583 * Fire damage to all players withing 6 yards. After 10 sec the Molten Seed will burst in a Molten * Inferno. * * *Warning* In 25 player raids, Ragnaros targets 20 players.*/ // 10 man - http://ptr.wowhead.com/spell=98498 // 25 man - http://ptr.wowhead.com/spell=100579 // 10 man heroic - http://ptr.wowhead.com/spell=100580 // 25 man heroic - http://ptr.wowhead.com/spell=100581 /* Molten Inferno * When Molten Seed burst, they cause a Molten Inferno that inflicts 128749 to 128750 * Fire damage to all players who are near the Molten Seed. The damage decreases the * farther away the target is. * * Following the Molten inferno, a Molten Elemental is created at the location of the Seed.*/ // 10 man - http://ptr.wowhead.com/spell=98518 // 25 man - http://ptr.wowhead.com/spell=100252 // 10 man heroic - http://ptr.wowhead.com/spell=100253 // 25 man heroic - http://ptr.wowhead.com/spell=100254 #region Molten Elemental // The Molten Elemental is spawned from a Molten Inferno. It will attack and fixate one random player. // http://db.mmo-champion.com/c/53189/ /* Molten Power [Heroic Only] * The Molten Elemental is empowered by nearby Molten Elementals, increasing its * damage by 25% and causing it to be immune to Snare effects.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100158 // 25 man heroic - http://ptr.wowhead.com/spell=100302 #endregion #endregion #region Magma Blast /* Ragnaros blasts magma at his current target if he cannot reach and melee them, * inflicting 73125 to 76875 Fire damage and increasing Fire damage taken by 50% for 6 sec. */ // http://ptr.wowhead.com/spell=98313 // This should NEVER happen #endregion #region Burning Wound /* The attacks from Ragnaros open a Burning Wound, inflicting 3656 to 3843 Fire damage every 2 sec * for 20 sec. The wound causes the target's attacks to become infused with fire, causing a * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99399 // 25-man - http://ptr.wowhead.com/spell=101238 // 10-man Heroic - http://ptr.wowhead.com/spell=101239 // 25-man Heroic - http://ptr.wowhead.com/spell=101240 // 5 second cooldown on application // Only allow 4 stacks to be applied SulfuaswillbeYourEnd.Attacks.Add(BurningWound); #region Burning Blast /* Inflicts 1950 to 2050 Fire damage, each stack of Burning Wound increases the damage of * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99400 // 25-man - http://ptr.wowhead.com/spell=101241 // 10-man Heroic - http://ptr.wowhead.com/spell=101242 // 25-man Heroic - http://ptr.wowhead.com/spell=101243 SulfuaswillbeYourEnd.BuffStates.Add(BurningBlast); #endregion #endregion #endregion #region Intermission: Denizens of Flame! /* At 40% health, Ragnaros will cast Splitting Blow, wedging Sulfuras into the platform and creating * Sons of Flame. Ragnaros will stay submerged for 45 seconds or until all of the Sons of Flame are * destroyed.*/ #region Splitting Blow /* Ragnaros buries Sulfuras within the platform, creating Sons of Flame that attempt to reach the * mighty hammer.*/ /* 12 different ids all with the same descriptions: * http://ptr.wowhead.com/spell=98951; http://ptr.wowhead.com/spell=98952; http://ptr.wowhead.com/spell=98953 * http://ptr.wowhead.com/spell=100877; http://ptr.wowhead.com/spell=100878; http://ptr.wowhead.com/spell=100879 * http://ptr.wowhead.com/spell=100880; http://ptr.wowhead.com/spell=100881; http://ptr.wowhead.com/spell=100882 * http://ptr.wowhead.com/spell=100883; http://ptr.wowhead.com/spell=100884; http://ptr.wowhead.com/spell=100885*/ // initial Summon Sons trigger - http://ptr.wowhead.com/spell=99012 // Summon Cast - http://ptr.wowhead.com/spell=99056 // Number of summons - http://ptr.wowhead.com/spell=99054 // This means that 10 Sons are summoned that need to be slowed and killed within 45 seconds. // The damage from Splitting Blow should NEVER hit a player #endregion #region Son of Flame /*Sons of Flame will cross the platform and attempt to reform with Sulfuras, causing a * Supernova if they are able to reach the mighty weapon.*/ // http://ptr.wowhead.com/npc=53140 Intermission2.Targets.Add(SonsofFlame); #region Burning Speed /* Sons of Flame move faster as their blaze burns hotter. Their movement speed is * increased by an amount equal to every 1% health they have above 50% health.*/ // 10 man - http://ptr.wowhead.com/spell=99414 // 25 man - http://ptr.wowhead.com/spell=100306 // 10 man heroic - http://ptr.wowhead.com/spell=100307 // 25 man heroic - http://ptr.wowhead.com/spell=100308 // Don't need to model #endregion #region Supernova /* If a Son of Flame reaches Sulfuras, the elemental will explode in a Supernova, * inflicting 112978 to 118772 Fire damage to all players within the Firelands.*/ // 10 man - http://ptr.wowhead.com/spell=99112 // 25 man - http://ptr.wowhead.com/spell=100259 // 10 man heroic - http://ptr.wowhead.com/spell=100260 // 25 man heroic - http://ptr.wowhead.com/spell=100261 // Since if this happens at ANY time, it's a wipe, so assuming that this does not take place #endregion #endregion #region Lava Scion // One Lava Scion will form on each side of the platform. // http://ptr.wowhead.com/npc=53231 TargetGroup LavaScion = new TargetGroup { Name = "Lava Scion", Chance = 1f, Duration = 60f * 1000f, Frequency = 1f, LevelOfTargets = 87, NearBoss = true, NumTargs = 2f, TargetID = 53231, }; LavaScion.SetAffectsRoles_All(); Intermission2.Targets.Add(LavaScion); #region Blazing Heat /* The Lava Scion inflicts a random target with Blazing Heat, causing them to create a trail of * Blazing Heat in their wake. Blazing Heat inflicts 62765 to 65985 Fire damage every 1 * sec, and heals Sons of Flame and Lava Scions for 10% every 1 sec.*/ /* Damaging Part * 10 man - http://ptr.wowhead.com/spell=99144 * 25 man - http://ptr.wowhead.com/spell=100303 * 10 man heroic - http://ptr.wowhead.com/spell=100304 * 25 man heroic - http://ptr.wowhead.com/spell=100305*/ // Healing Part - http://ptr.wowhead.com/spell=99145 // Just assume 2 people get chosen with the debuff and have to move for the entire duration // Blazing heat has a 3 second cast and a 9 second duration. So, 12 seconds movement // Not going to model the damaing part or the Healing Part Impedance BlazingHeat_Move = new Impedance { Name = "Blazing Heat Move", Breakable = false, Chance = 2f / (Max_Players[i] - Min_Tanks[i]), Duration = 12f * 1000f, Frequency = IntermissionLength - 12f, }; BlazingHeat_Move.SetAffectsRoles_DPS(); BlazingHeat_Move.SetAffectsRoles_Healers(); Intermission2.Moves.Add(BlazingHeat_Move); #endregion #endregion #endregion #region Begone From my Realm! #region Sulfuras Smash /*Ragnarose faces a random player and begins prepares to smash Sulfuras on the platform. The * impact creates several Lava Waves which move out in several directions from the point of * impact.*/ // 10 man - http://ptr.wowhead.com/spell=98708 // 25 man - http://ptr.wowhead.com/spell=100256 // 10 man heroic - http://ptr.wowhead.com/spell=100257 // 25 man heroic - http://ptr.wowhead.com/spell=100258 #region Lava Wave /* A Lava Wave inflicts 87871 to 92379 Fire damage and knocks back all players it passes * through. Targets who are knocked back suffer an additional 25106 to 26394 Fire damage * every 1 sec for 5 sec.*/ // 10 man - http://ptr.wowhead.com/spell=98928 // 25 man - http://ptr.wowhead.com/spell=100292 // 10 man heroic - http://ptr.wowhead.com/spell=100293 // 25 man heroic - http://ptr.wowhead.com/spell=100294 BegoneFrommyRealm.Moves.Add(LavaWave_Move); #endregion #endregion #region World of Flames [Heroic Only] /* Ragnaros periodically engulfs one third of the platform in flame every 2.60 sec for 13 sec. * Inflicting 87871 to 92379 Fire damage to players caught in the conflagration.*/ // cast - http://ptr.wowhead.com/spell=100171 // spell - http://ptr.wowhead.com/spell=99171 #endregion #region Summon Living Meteor /* Ragnaros calls down an increasing number of Living Meteors over time, inclicting 81595 to * 85780 Fire damage to players within 5 yards of the location.*/ // http://ptr.wowhead.com/spell=99268 #region Living Meteor /* The Living Meteor will fixate on a random target and chase them. A player that gets * within 4 yards of the Living Meteor will trigger a Metoer Impact, inflicting 627656 to * 659844 Fire damage to enemies within 8 yards.*/ // http://ptr.wowhead.com/npc=53500 // 10 man - http://ptr.wowhead.com/spell=99317 // 25 man - http://ptr.wowhead.com/spell=100989 // 10 man heroic - http://ptr.wowhead.com/spell=100990 // 25 man heroic - http://ptr.wowhead.com/spell=100991 TargetGroup LivingMeteor = new TargetGroup { Name = "Living Meteor", Chance = 1f, Duration = phase1to3Length * 1000f, Frequency = 45f, LevelOfTargets = 87, NearBoss = false, NumTargs = 1f, TargetID = 53500, }; LivingMeteor.SetAffectsRoles_All(); BegoneFrommyRealm.Targets.Add(LivingMeteor); #region Meteor Impact /* A player that gets within 4 yards of the Living Meteor will trigger a Metoer Impact, * inflicting 627656 to 659844 Fire damage to enemies within 8 yards.*/ // 10 man - http://ptr.wowhead.com/spell=99287 // 25 man - http://ptr.wowhead.com/spell=100299 // 10 man heroic - http://ptr.wowhead.com/spell=100300 // 25 man heroic - http://ptr.wowhead.com/spell=100301 // THIS SHOULD NEVER HAPPEN!!!! #endregion #region Combustible /* The Living Meteor is highly Combustible. When attacked, it will cause Combustion, * knocking it back several yards away from the enemy that hit it. Combustible is * removed for several seconds after Combustion is triggered.*/ #region Combustion /* While combustible is active, the Living Meteor is knocked back several yards * from the enemy that hit it.*/ // 10 man - http://ptr.wowhead.com/spell=99296 // 25 man - http://ptr.wowhead.com/spell=100282 // 10 man heroic - http://ptr.wowhead.com/spell=100283 // 25 man heroic - http://ptr.wowhead.com/spell=100284 #endregion // Personal note, Living Meteors can be knocked into the target by way of combustion // http://ptr.wowhead.com/spell=100911 #endregion // On Heroic Living Meteors have a 10% additional run speed associated with them // 10 man heroic - http://ptr.wowhead.com/spell=100277 // 25 man heroic - http://ptr.wowhead.com/spell=100286 // Living Meteors MAY have a 99% damage reduction associated with them // http://ptr.wowhead.com/spell=100904 #endregion #endregion #region Magma Blast /* Ragnaros blasts magma at his current target if he cannot reach and melee them, * inflicting 73125 to 76875 Fire damage and increasing Fire damage taken by 50% for 6 sec. */ // http://ptr.wowhead.com/spell=98313 // This should NEVER happen #endregion #region Burning Wound /* The attacks from Ragnaros open a Burning Wound, inflicting 3656 to 3843 Fire damage every 2 sec * for 20 sec. The wound causes the target's attacks to become infused with fire, causing a * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99399 // 25-man - http://ptr.wowhead.com/spell=101238 // 10-man Heroic - http://ptr.wowhead.com/spell=101239 // 25-man Heroic - http://ptr.wowhead.com/spell=101240 // 5 second cooldown on application // Only allow 4 stacks to be applied BegoneFrommyRealm.Attacks.Add(BurningWound); #region Burning Blast /* Inflicts 1950 to 2050 Fire damage, each stack of Burning Wound increases the damage of * Burning Blast.*/ // 10-man - http://ptr.wowhead.com/spell=99400 // 25-man - http://ptr.wowhead.com/spell=101241 // 10-man Heroic - http://ptr.wowhead.com/spell=101242 // 25-man Heroic - http://ptr.wowhead.com/spell=101243 BegoneFrommyRealm.BuffStates.Add(BurningBlast); #endregion #endregion #endregion #region The True Power of the Fire Lord [Heroic Only] /* The Fire lord unleashes his full power and is able to move freely around the platform. Players have * the aid of powerful heroes of Azeroth to support them.*/ #region Superheated [Heroic Only] /* Ragnaros is at his full power and is now Superheated, inflicting 2510 to 2640 Fire * damage every 1, increasing damage taken from Superheated by 10%. Stacks.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100594 // 25 man heroic - http://ptr.wowhead.com/spell=100915 #endregion #region Empower Sulfuras [Heroic Only] /*Ragnaros begins to empower Sulfuras. After 5 sec, Sulfuras becomes Empowered and attacks * made by Ragnaros cause Flames of Sulfuras, inflicting 627656 to 659844 Fire damage to all * enemies within the Firelands.*/ /* Cast * 10 man heroic - http://ptr.wowhead.com/spell=100604 * 25 man heroic - http://ptr.wowhead.com/spell=100997 */ // Damage - http://ptr.wowhead.com/spell=100628 #region Flames of Sulfuras [Heroic Only] /* When Sulfuras is Empowered, attacks made by Ragnaros cause Flames of Sulfuras, * inflicting 627656 to 659844 Fire damage to all enemies within the Firelands.*/ // http://ptr.wowhead.com/spell=100630 #endregion #endregion #region Dreadflame [Heroic Only] /* Sulfuras creates a Dreadflame at two nearby locations. The Dreadflame multiplies rapidly * and spreads across the platform. Dreadflame inflicts 43935 to 46190 Fire damage and an * additional 4506 to 4507 Fire damage every 1 sec for 30 sec. * * *Warning* In 25 player raids, Dreadflame will strike five locations at once.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100941 // 25 man heroic - http://ptr.wowhead.com/spell=100998 #endregion #region Magma Geyser [Heroic Only] /* Ragnaros will target a Magma Geyser whenever he notices four players in a cluster together. The * Magma Geyser inflicts 69042 to 72583 Fire damage every 1 sec and destroy any nearby * Breadth of Frost. * * *Warning* In 25 player raids, Ragnaros will use Magma Geyser on clusters of 10 players.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100861 // 25 man heroic - http://ptr.wowhead.com/spell=100999 #endregion #region Cenarius [Heroic Only] /* Cenarius is a demigod, the son of Malorne and Elune, and the patron of all of Azeroth's druids. * * Cenarius will support the raid by freezing Living Meteors and reducing the damage caused by * Superheated.*/ // http://ptr.wowhead.com/npc=53872 #region Breadth of Frost [Heroic Only] /* Cenarius forms a Breadth of Frost at a nearby location. Any Living Meteors that enter the * Breadth of Frost are Frozen and take 15000% additional damage. Additionally, players who * stand within the Breadth of Frost are immune to Superheated damage and have the * Superheaded debuff removed from them.*/ // Living Meteor - http://ptr.wowhead.com/spell=100567 // Shield from Superheated - http://ptr.wowhead.com/spell=100503 #endregion #endregion #region Arch Druid Hamuul Runetotem [Heroic Only] /* Humuul Runetotem is a tauren druid and leads the druids of Thunder Bluff. In Mount Hyjal, he * assists Ysera in protecting Nordrassil from Ragnaros. * * The arch druid will support the raid by entrapping Ragnaros.*/ // http://ptr.wowhead.com/npc=53913 #region Entrapping Roots [Heroic Only] /* Arch Druid Humuul Runetotem forms Entrapping Roots at a nearby location. If * Ragnaros enters the area of the Entrapping Roots, he will become stunned for 10 sec and * take 50% additional damage while stunned.*/ // Cast - http://ptr.wowhead.com/spell=100646 // Stun - http://ptr.wowhead.com/spell=100653 #endregion #endregion #region Malfurion Stormrage [Heroic Only] /* Malfurion Stormrage is an ancient and powerful night elf druid. He leads the army of Cenarius in * the Defense of Mount Hyjal against the forces of Ragnaros. * * Malfurion will support the raid by protecting players from Dreadflame.*/ // http://ptr.wowhead.com/npc=52135 #region Cloudburst [Heroic Only] /* Malfurion forms a Cloudburst. The players who interact with the Cloudburst will be * surrounded with a Deluge. Deluge makes the player immune to Dreadflame damage, and * also allows the player to extinguish any nearby Dreadflame. * * *Warning* In 25 player raids, up to three players can use a single Cloudburst.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100758 // 25 man heroic - http://ptr.wowhead.com/spell=100766 #region Deluge [Heroic Only] /* Makes the player immune to Dreadflame damage, and also allows the player to * extinguish any nearby Dreadflame.*/ // 10 man heroic - http://ptr.wowhead.com/spell=100713 // 25 man heroic - http://ptr.wowhead.com/spell=101015 // Spell that extinguishes the Dreadflame - http://ptr.wowhead.com/spell=100757 #endregion #endregion #endregion #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. float phasestart = 0; ApplyAPhasesValues(ByFirebePurged, i, 1, phasestart, phase1to3Length, BerserkTimer[i]); phasestart += phase1to3Length; ApplyAPhasesValues(Intermission1, i, 2, phasestart, IntermissionLength, BerserkTimer[i]); phasestart += IntermissionLength; ApplyAPhasesValues(SulfuaswillbeYourEnd, i, 3, phasestart, phase1to3Length, BerserkTimer[i]); phasestart += phase1to3Length; ApplyAPhasesValues(Intermission2, i, 4, phasestart, IntermissionLength, BerserkTimer[i]); phasestart += IntermissionLength; ApplyAPhasesValues(BegoneFrommyRealm, i, 5, phasestart, phase1to3Length, BerserkTimer[i]); phasestart += phase1to3Length; if (i > 1) { ApplyAPhasesValues(Intermission3, i, 6, phasestart, Intermission3Length, BerserkTimer[i]); phasestart += Intermission3Length; ApplyAPhasesValues(TheTruePoweroftheFireLord, i, 7, phasestart, phase4Length, BerserkTimer[i]); } AddAPhase(ByFirebePurged, i); AddAPhase(Intermission1, i); AddAPhase(SulfuaswillbeYourEnd, i); AddAPhase(Intermission2, i); AddAPhase(BegoneFrommyRealm, i); if (i > 1) { AddAPhase(Intermission3, i); AddAPhase(TheTruePoweroftheFireLord, 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: */ }
public LordRhyolith() { // If not listed here use values from defaults #region Info Name = "Lord Rhyolith"; 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 // Lord Rhyolith has three parts, Left Leg, Right Leg, Chest // Legs health are tied together // All three have low health, however they start out with an 80% damage // reduction applied to them. Health = new float[] { 13100001f, 40000000f, 20000000f, 60000004f, 0 }; MobType = (int)MOB_TYPES.ELEMENTAL; // Assume people can withstand being in Superheaded for 1 minute // Superheated happens after 6 minutes on normal and 5 minutes on heroic BerserkTimer = new int[] { 480, 480, 400, 400, 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[] { 1, 1, 2, 2, 0 }; // Most guilds will only use 1 tank for the adds on normal, 2 on heroic. Min_Healers = new int[] { 2, 5, 3, 5, 0 }; #endregion #region Offensive #region Attacks for (int i = 0; i < 4; i++) { Phase ObsidianForm = new Phase() { Name = "Stage One: Nuisances, Nuisances!" }; Phase LiquidForm = new Phase() { Name = "Stage Two: Now you will BURN!" }; // He doesn't have a default melee attack during Obsidian Form (p1) #region Obsidian Form /* Lord Rhyolith ignores players while his armor is intact, but they can attack his feet to * control his movement.*/ #region Obsidian Armor /* Lord Rhyolish awakens encrusted in a thick coat of Obsidian Armor, which reduces all damage * he takes by 80%. Lord Rhyolith's Obsidian Armor is reduced every time he steps on an active * volcano. * * *Warning* When damaged, Lord Rhyolith's armor comes to life. If not killed, it will restore * 1% of his armor.*/ // http://ptr.wowhead.com/spell=98632 Stats ObsidianArmor = new Stats(); ObsidianArmor.BonusDamageMultiplier = -0.80f; BuffState ObsidianArmorBuffState; float superheated = 0f; if (i < 2) { superheated = 6f * 60f; int StacksNormal = 80 / 16; SpecialEffect ObsidianArmorSpecialEffectNormal = new SpecialEffect(Trigger.Use, new Stats() { BonusDamageMultiplier = 0.16f, }, superheated, superheated / StacksNormal, 1f, StacksNormal); ObsidianArmor.AddSpecialEffect(ObsidianArmorSpecialEffectNormal); } else { superheated = 5f * 60f; int StacksHeroic = 80 / 10; SpecialEffect ObsidianArmorSpecialEffectHeroic = new SpecialEffect(Trigger.Use, new Stats() { BonusDamageMultiplier = 0.10f, }, superheated, superheated / StacksHeroic, 1f, StacksHeroic); ObsidianArmor.AddSpecialEffect(ObsidianArmorSpecialEffectHeroic); } ObsidianArmorBuffState = new BuffState { Name = "Obsidian Armor", Chance = 1f, Duration = superheated * 1000f, Frequency = BerserkTimer[i] - 1f, Breakable = false, Stats = ObsidianArmor, }; ObsidianArmorBuffState.SetAffectsRoles_All(); ObsidianForm.BuffStates.Add(ObsidianArmorBuffState); #endregion #region Liquid Obsidian /* The Liquid Obsidian attempts to move within 5 yards of Lord Rhyolith, then use the Fuse * ability on him.*/ // http://db.mmo-champion.com/c/52619/liquid-obsidian/ (Elemental) // Only happens on heroic if (i > 1) { TargetGroup LiquidObsidian = new TargetGroup { Name = "Liquid Obsidian", NumTargs = 5, LevelOfTargets = 85, Frequency = (5f * 60f) / 8f, // all 40 should be released by the 5 minute mark Duration = 20f * 1000f, }; LiquidObsidian.SetAffectsRoles_DPS(); ObsidianForm.Targets.Add(LiquidObsidian); #region Fuse /* Fuse * The Liquid Obsidian fuses to Lord Rhyolith granting him an additional 1% of damage reduction.*/ // http://ptr.wowhead.com/spell=99875 // This should not happen #endregion } #endregion #region Concussive Stomp /* Concussive Stomp * Lord Rhyolith smashes the ground, dealing 32375 to 37625 Fire damage to all players and * knocking away targets within 20 yards. Each stomp creates two to three volcanoes.*/ // 10 man - http://ptr.wowhead.com/spell=102306 // 25 man - http://ptr.wowhead.com/spell=102307 // 10 man heroic - http://ptr.wowhead.com/spell=102308 // 25 man heroic - http://ptr.wowhead.com/spell=102309 Attack ConcussiveStomp = new Attack { Name = "Concussive Stomp", DamagePerHit = new float[] { (32375f + 37625f), (32375f + 37625f), (42087f + 48912f), (42087f + 48912f), 0 }[i] / 2f, AttackSpeed = 30, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, SpellID = new float[] { 102306, 102307, 102308, 102309, 0 }[i], }; ConcussiveStomp.SetUnavoidable(); ConcussiveStomp.SetAffectsRoles_All(); ObsidianForm.Attacks.Add(ConcussiveStomp); #endregion #region Drink Magma /* Drink Magma * If Lord Rhyolith is ever permitted to reach the edge of his plateau, he will drink from the * liquid magma, then deal 35000 fire damage to all players every second for 4 sec.*/ // Drink = http://ptr.wowhead.com/spell=98034 // Spit = http://ptr.wowhead.com/spell=99867 // This should never happen #endregion #region Volcano /* Volcano * Lord Rhyolith creates volcanoes when he stomps. Periodically, Lord Rhyolith will bring a * volcano to life, causing it to deal 12000 Fire damage to 3 players every 2 sec. When struck, * the player takes 5% additional Fire damage for 20 sec. Stacks up to 20 times. * * *Warning* In 25 player raids, the Volcano does damage to 6 players.*/ // http://ptr.wowhead.com/npc=52582 #region Eruption // http://ptr.wowhead.com/spell=98492 // You should only have 1 active volcano up at any given time // Assume the drivers can hit the volcanoes within 20 seconds Attack EruptionAttack = new Attack { Name = "Eruption", DamagePerTick = 12000f, DamageType = ItemDamageType.Fire, AttackType = ATTACK_TYPES.AT_AOE, MaxNumTargets = new float[] { 3, 6, 3, 6, 0 }[i], IsDoT = true, TickInterval = 2f, Duration = 25f * 1000f, SpellID = 98492f, AttackSpeed = ((i < 2) ? 40f : 25.5f), }; EruptionAttack.SetUnavoidable(); EruptionAttack.SetAffectsRoles_All(); ObsidianForm.Attacks.Add(EruptionAttack); Stats EruptionStats = new Stats(); SpecialEffect EruptionSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { FireDamageTakenMultiplier = 0.05f }, 15f, 2f, EruptionAttack.MaxNumTargets / Max_Players[i], 20); EruptionStats.AddSpecialEffect(EruptionSpecialEffect); BuffState EruptionBuffState = new BuffState { Name = "Eruption Debuff", Frequency = EruptionAttack.AttackSpeed, Duration = EruptionAttack.Duration, Chance = EruptionAttack.MaxNumTargets / Max_Players[i], Breakable = false, Stats = EruptionStats, }; EruptionBuffState.SetAffectsRoles_All(); ObsidianForm.BuffStates.Add(EruptionBuffState); #endregion #endregion #region Crater /* Crater * Lord Rhyolith creates a crater when he stops on an active volcano. Occasionally, Lord * Rhyolith will cause streams of lava to flow from a crater. The streams will deal 75000*2] * Fire damage to anyone who stands on them for too long.*/ // Crater - http://ptr.wowhead.com/npc=52866 #region Magma Flow // You need to move way from the lines that come from the craters // 2 on 10-man, 3 on 25-man, volcanoes spawn appoximately every 25 seconds // Assume half on 10-man, 2/3rds on 25-man get stomped causing craters Impedance Move_MagmaFlow = new Impedance { Chance = 0.50f, Name = "Meteor Burn", Duration = 2f * 1000f, Frequency = 25f / ((i < 2) ? (1f / 2f) : (2f / 3f)), }; Move_MagmaFlow.SetAffectsRoles_All(); ObsidianForm.Moves.Add(Move_MagmaFlow); #endregion #endregion #region Thermal Ignition /* Lord Rhyolith releases a jet of cinders, which deals 15000 Fire damage to players within 7 yards * and forms part of himself into an elemental. Lord Rhyolith alternates between bringing multiple * Fragments of Lord Rhyolith and single Sparks of Rhyolith to life.*/ // Summon Fragment of Rhyolith - http://ptr.wowhead.com/spell=100392 // Summon Spark of Rhyolith - http://ptr.wowhead.com/spell=98552 Attack SummonAdds = new Attack { Name = "Summon Fragment or Spark", DamagePerHit = new float[] { 15000, 15000, 15000, 15000, 0 }[i], AttackSpeed = 22.5f, IsDoT = false, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, IsFromAnAdd = true, }; SummonAdds.SetUnavoidable(); SummonAdds.SetAffectsRoles_All(); ObsidianForm.Attacks.Add(SummonAdds); #region Fragments of Rhyolith // Fragments of Rhyolith have low Heath. If not slain within 30 sec, they inflict // damage equal to their current health to a random player. // In 25 person raids, they deal damage equal to half their current health to a // random player. // Fragments should not be damaging anyone besides the tank tanking them. // Meaning they should be killed within the 30 second timeframe. // 5 x Fragments to be tanked & DPS'd down TargetGroup Fragments = new TargetGroup { Name = "Fragments of Rhyolith", NumTargs = 5, LevelOfTargets = 85, Frequency = 45f, Duration = 30f * 1000f, TargetID = 52620, NearBoss = true, }; Fragments.SetAffectsRoles_DPS(); Fragments.SetAffectsRoles_Tanks(); ObsidianForm.Targets.Add(Fragments); Attack FragmentMelee = new Attack { Name = "Melee from Fragment Adds", DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] * 0.1f, AttackSpeed = 2.5f / 5f, // 5 mobs hitting every 2.5 secs. AttackType = ATTACK_TYPES.AT_MELEE, DamageType = ItemDamageType.Physical, IsFromAnAdd = true, }; FragmentMelee.SetAffectsRoles_Tanks(); ObsidianForm.Attacks.Add(FragmentMelee); #endregion #region Spark of Rhyolith // 1 x Spark to be tanked & DPS'd down. // Sparks should not be up with more than 10 stacks of Infernal Rage TargetGroup Spark = new TargetGroup { Name = "Spark of Rhyolith", NumTargs = 1, LevelOfTargets = 85, Frequency = 70f, Duration = 5f * 10f * 1000f, TargetID = 53211, NearBoss = false, }; Spark.SetAffectsRoles_DPS(); Spark.SetAffectsRoles_Tanks(); ObsidianForm.Targets.Add(Spark); #region Spark Melee Attack SparkMelee = new Attack { Name = "Melee from Spark Add", DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]] * 0.35f, AttackSpeed = 2.5f, AttackType = ATTACK_TYPES.AT_MELEE, DamageType = ItemDamageType.Physical, Dodgable = true, Missable = true, Parryable = true, Blockable = true, }; SparkMelee.SetAffectsRoles_Tanks(); ObsidianForm.Attacks.Add(SparkMelee); #endregion #region Immolation // 10-man - http://ptr.wowhead.com/spell=98598 // 25-man - http://ptr.wowhead.com/spell=100414 // 10-man Heroic - http://ptr.wowhead.com/spell=98598 // 25-man Heroic - http://ptr.wowhead.com/spell=100414 Attack SparkImmolation = new Attack { Name = "Immolation from Spark", DamagePerTick = (6840f + 7560f) / 2f, IsDoT = true, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, TickInterval = 1, Duration = Spark.Duration, // Max length is how long it takes to drop him. Let's assume just as long until the next add pack. Missable = false, Dodgable = false, Parryable = false, Blockable = false, SpellID = new float[] { 98598f, 100414, 98598, 100414, 0 }[i], }; SparkImmolation.SetAffectsRoles_Tanks(); SparkImmolation.AffectsRole[PLAYER_ROLES.RangedDPS] = true; ObsidianForm.Attacks.Add(SparkImmolation); #endregion #region Infernal Rage // Sparks of Rhyolith increase their damage dealt by 10% and damage taken // by 10% every 5 seconds. This effect stacks up to 20 times. // This should not stack up more than 10 stacks Stats InfernalRageStats = new Stats(); // all adds disappear going into Phase 2, so have the debuff last until superheated should be appropriat SpecialEffect InfernalRageSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { BonusDamageMultiplier = 0.10f, DamageTakenReductionMultiplier = -0.10f, }, superheated, 5f, 1f, 20); InfernalRageStats.AddSpecialEffect(InfernalRageSpecialEffect); InfernalRageSpecialEffect = new SpecialEffect(Trigger.Use, InfernalRageStats, Spark.Duration / 1000f, Spark.Frequency, 1f); InfernalRageStats = new Stats(); InfernalRageStats.AddSpecialEffect(InfernalRageSpecialEffect); BuffState InfernalRage = new BuffState { Name = "Infernal Rage", Duration = Spark.Duration, Chance = 1f, Frequency = Spark.Frequency, Breakable = false, Stats = InfernalRageStats, }; InfernalRage.SetAffectsRoles_Tanks(); ObsidianForm.BuffStates.Add(InfernalRage); #endregion #endregion #endregion #endregion #region Liquid Form /* When Lord Rhyolith reaches 25% health, his armor shatters. He becomes attackable and * no longer ignores players.*/ #region Melee Attack Attack BasicMeleeMT = new Attack { Name = "Default Melee", AttackSpeed = 5f, AttackType = ATTACK_TYPES.AT_MELEE, DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]], Missable = true, Dodgable = true, Parryable = true, Blockable = true, }; BasicMeleeMT.AffectsRole[PLAYER_ROLES.MainTank] = true; LiquidForm.Attacks.Add(BasicMeleeMT); #endregion #region Immolation /* Immolation * Lord Rhyolith's fiery presence deals 7003 to 9004 Fire damage to all players every second.*/ // http://ptr.wowhead.com/spell=99845 Attack Immolation = new Attack { Name = "Phase 2 Immolation", DamagePerTick = (7000f + 9000f) / 2f, IsDoT = true, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, TickInterval = 1, Duration = BerserkTimer[i] * .25f * 1000f, // for the duration of this phase. SpellID = 99845f, }; Immolation.SetUnavoidable(); Immolation.SetAffectsRoles_All(); LiquidForm.Attacks.Add(Immolation); #endregion #region Concussive Stomp //Concussive Stomp Attack ConcussiveStopPhase2 = ConcussiveStomp.Clone(); ConcussiveStopPhase2.AttackSpeed = 10f; LiquidForm.Attacks.Add(ConcussiveStopPhase2); #endregion #region Unleashed Flame /* Unleashed Flame * Lord Rhyolithunleashes beams of fire which pursue random players, dealing 10000 Fire damage * to all players within 5 yards.*/ // http://ptr.wowhead.com/spell=100974 if (i > 1) { Attack UnleashedFlame = new Attack { Name = "Unleashed Flame", DamagePerTick = 10000f, MaxNumTargets = Max_Players[i], IsDoT = true, TickInterval = 1f, Duration = Immolation.Duration, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, SpellID = 100974f, }; UnleashedFlame.SetUnavoidable(); UnleashedFlame.SetAffectsRoles_All(); LiquidForm.Attacks.Add(UnleashedFlame); } #endregion #endregion #region Add Phases int phaseStartTime = 0; int phaseDuration = (int)((float)BerserkTimer[i] * (1 - .25f)); // Phase change at 25% health when the armor is gone. ApplyAPhasesValues( ObsidianForm, i, 1, phaseStartTime, phaseDuration, BerserkTimer[i]); AddAPhase(ObsidianForm, i); phaseStartTime = phaseStartTime + phaseDuration; phaseDuration = BerserkTimer[i] - phaseDuration; ApplyAPhasesValues( LiquidForm, i, 1, phaseStartTime, phaseDuration, BerserkTimer[i]); AddAPhase(LiquidForm, 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: * Impedances. This is a rediculous movement fight and I'm not sure how to model that yet. */ }
public Alysrazor() { // If not listed here use values from defaults #region Info Name = "Alysrazor"; 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 = "Not modeled in detail yet."; #endregion #region Basics Health = new float[] { 38651400f, 115954200f, 71892800f, 197122144f, 0 }; // TODO: double check 25-man normal and 10-man heroic health pool MobType = (int)MOB_TYPES.ELEMENTAL; // 3 full phases on Normal; 2 full phases on Heroic; or 15 minute enrage timer. BerserkTimer = new int[] { 15 * 60, 15 * 60, 15 * 60, 15 * 60, 0 }; SpeedKillTimer = new int[] { 8 * 60, 8 * 60, 8 * 60, 8 * 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 InitialPull = new Phase() { Name = "Initial Pull" }; Phase FlightofFlames = new Phase() { Name = "Flight of Flames" }; Phase FlightofFlamesPart2 = new Phase() { Name = "Flight of Flames" }; Phase UltimateFirepower = new Phase() { Name = "Ultimate Firepower" }; Phase Burnout = new Phase() { Name = "Burnout" }; Phase ReIgnition = new Phase() { Name = "Re-Ignition" }; //Mini-Phase variables Phase HatchlingPhase = new Phase() { Name = "Hatchlings" }; Phase FireStormPhase = new Phase() { Name = "Firestorm Phase" }; InnerPhase InnerPhaseHatchling, InnerPhaseFirestorm; float FlightofFlamesPhaseTime = new float[] { 190f, 190f, 250f, 250f, 0f }[i]; float FirestormCD = new float[] { 0, 0, 83f, 83f, 0 }[i]; float MeteorCD = new float[] { 0, 0, 37, 37, 0 }[i]; float FieryTornadoDuration = 35f; float BurnoutDuration = 33f; float ReIgniteDuration = 50f / 3f; #region Initial Pull #region Initial Pull Firestorm /* Firestorm * At the beginning of the battle, Alysrazor ascends into the sky dealing 30000 Fire damage to all * enemies and knocking them back. In addition, Alysrazor will continue to deal 10000 Fire damage * to all enemies every 1 seconds for 10 sec.*/ // Initial damage // 10-man - http://ptr.wowhead.com/spell=99605 // 25-man - http://ptr.wowhead.com/spell=101658 // 10-man Heroic - http://ptr.wowhead.com/spell=101659 // 25-man Heroic - http://ptr.wowhead.com/spell=101660 // Addition damage - http://ptr.wowhead.com/spell=99606 Attack InitialFirestorm = new Attack { Name = "Initial Pull Firestorm", AttackSpeed = BerserkTimer[i] - 1f, AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, Interruptable = false, MaxNumTargets = Max_Players[i], DamagePerHit = new float[] { 20000f, 20000f, 25000f, 25000f, 0 }[i], DamagePerTick = 8000f, IsDoT = true, Duration = 10f * 1000f, TickInterval = 1f, SpellID = new float[] { 99605, 101658, 101659, 101660, 0 }[i], }; InitialFirestorm.SetAffectsRoles_All(); InitialPull.Attacks.Add(InitialFirestorm); #endregion #region Volcanic Fire /* Volcanic Fire * A massive eruption creates patches of Fire which block escape from Alysrazor's domain. Volcanic * Fire patches deal 92500 to 107500 Fire damage to enemies within 6 yards every 1 seconds.*/ // http://ptr.wowhead.com/spell=98463 // This should never be hit #endregion #endregion #region Flight of Flames /* Alysrazor flies around the area, allowing her minions to corner her foes far below. She will * periodically fly through the center of the arena to claw at floes as well.*/ #region Firestorm [Heroic Only] /* Alysrazor faces the center of the arena and kicks up a powerful, fiery wind. After 5 seconds, * the arena is bathed in flames, dealing 100000 Fire damage every 1 seconds to all enemies within * line of sight for 5 sec.*/ // Initicial cast - http://ptr.wowhead.com/spell=100744 // Actual Damage - http://ptr.wowhead.com/spell=100745 // Personal Note - Stopping a Molten Meteor which is summoned by a Herald of the Burning End allows // people to Line of Sight the Firestorm damage, thus negating the damage (aka interuptable). // This should never be hit, but people should move on the cast part if (i > 1) { /*Attack Firestorm = new Attack { Name = "Firestorm", DamagePerTick = 50000f, IsDoT = true, TickInterval = 1f, Duration = 5f, DamageType = ItemDamageType.Fire, AttackSpeed = FirestormCD, }; Firestorm.SetAffectsRoles_All(); Firestorm.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; */ Impedance Firestorm_move = new Impedance { Name = "Move to Hide from Firestorm", Chance = 1f, Breakable = false, Duration = 5f * 1000f, Frequency = 10f, }; Firestorm_move.SetAffectsRoles_All(); Firestorm_move.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; FireStormPhase.Moves.Add(Firestorm_move); } #endregion #region Molting // Alysrazor begins to mold, creating Molten Feathers nearby. // She channels this for 9 seconds. // 10-man/Heroic - http://ptr.wowhead.com/spell=99464, she drops every second // 25-man/Heroic - http://ptr.wowhead.com/spell=100698, every 400 milliseconds float feathers = 9f / new float[] { 1f, 0.4f, 1f, 0.4f, 0f }[i]; #region Molten Feather [DPS Note] /* Molten Feathers can be picked up by players, up to a maximum of three. While holding a * Molten Feather, all spells can be cast while moving and movement speed is increased by 30% * per feather. Once three feathers have been obtained, the player gains Wings of Flame.*/ // http://ptr.wowhead.com/spell=97128 float AirGroupSize = new float[] { 1f, 3f, 1f, 3f, 0f }[i]; BuffState MoltenFeatherAirGroup = new BuffState { Name = "Molten Feather Air Group", Chance = AirGroupSize / (Max_Players[i] - Min_Tanks[i] - Min_Healers[i]), // Assume that it does not fall off until the end of Burnout Duration = FlightofFlamesPhaseTime * 1000f, Frequency = FlightofFlamesPhaseTime, Breakable = false, Stats = new Stats() { MovementSpeed = (0.30f * 3f) }, }; MoltenFeatherAirGroup.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; // On heroic air group needs to grab 1 feather each after each Firestorm to keep their flying buff up. float remainingfeathers = (feathers - (AirGroupSize * 3f)) + (feathers - ((i > 1) ? AirGroupSize : 0f)) * 2f; BuffState MoltenFeatherGroundGroup = new BuffState { Name = "Molten Feather Ground Group", Chance = (Max_Players[i] - AirGroupSize) / Max_Players[i], Duration = MoltenFeatherAirGroup.Duration, Frequency = MoltenFeatherAirGroup.Frequency, Breakable = false, Stats = new Stats() { MovementSpeed = (0.30f * (3f * (remainingfeathers / (feathers * 3f)))) }, }; MoltenFeatherGroundGroup.SetAffectsRoles_All(); FlightofFlames.BuffStates.Add(MoltenFeatherGroundGroup); FlightofFlamesPart2.BuffStates.Add(MoltenFeatherGroundGroup); // Since people are getting feathers, casters can cast while moving, thus eliminating most movement impedances #endregion #region Wings of Flame // Allows the player to fly for 20 sec.*/ // http://ptr.wowhead.com/spell=98630 MoltenFeatherAirGroup.Stats.MovementSpeed = 2.25f; FlightofFlames.BuffStates.Add(MoltenFeatherAirGroup); FlightofFlamesPart2.BuffStates.Add(MoltenFeatherAirGroup); #endregion #endregion #region Flying // Players in flight using Wings of Flame contend with additional elements of the battle. #region Blazing Power /* While flying, Alysrazor periodically gives off rings of fire, which last for 3 seconds. * Enemies that pass through the ring gain Blazing Power, wich increases haste by 4% and * stacks up to 25 times. In addition, each stack of Blazing Power restores mana, rage, * energy, runic power, and holy power, and refreshes the duration of Wings of Flame.*/ // http://ptr.wowhead.com/spell=99461 // Restores 5% of mana, rage, energy, runic power, and holy power. Stats BlazingPowerStats = new Stats(); SpecialEffect BlazingPowerSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { ManaorEquivRestore = 0.05f, PhysicalHaste = 0.08f, SpellHaste = 0.08f }, 40f, 5f, 1f, 25); BlazingPowerStats.AddSpecialEffect(BlazingPowerSpecialEffect); BuffState BlazingPower = new BuffState { Name = "Blazing Power", Frequency = MoltenFeatherAirGroup.Frequency, Duration = MoltenFeatherAirGroup.Duration, Chance = 1f, Breakable = false, Stats = BlazingPowerStats, }; BlazingPower.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; FlightofFlames.BuffStates.Add(BlazingPower); FlightofFlamesPart2.BuffStates.Add(BlazingPower); #endregion #region Alysra's Razor /* If a player gains 25 stacks of Blazing Power, they gain Alysra's Razor, which increases * critical strike chance by 50% for 30 sec.*/ // http://ptr.wowhead.com/spell=100029 // Normal there is no break in the timing on normal, // Flyer should have 25 stacks during the second Firestorm, so only 10 seconds while not refreshing the stack float AlysrasRazorStartTime = (i < 2 ? 125f : 135f); BuffState AlysrasRazor = new BuffState { Name = "Alysra's Razor", Frequency = MoltenFeatherAirGroup.Frequency, Duration = MoltenFeatherAirGroup.Duration - (AlysrasRazorStartTime * 1000f), Chance = 1f, Breakable = false, Stats = new Stats() { SpellCrit = 0.75f, PhysicalCrit = 0.75f }, }; AlysrasRazor.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; FlightofFlames.BuffStates.Add(AlysrasRazor); FlightofFlamesPart2.BuffStates.Add(AlysrasRazor); #endregion #region Incendiary Cloud /* While flying, Alysrazor periodically gives off between one and three Incendiary Clouds, * which last for 3 seconds. Enemies that pass through the cloud suffer 27750 to 32250 Fire * damage every 1.50 sec. * * *Warning* In Heroic Difficulty, Alysrazor always creates three Incindiary Clouds.*/ // 10 man - http://ptr.wowhead.com/spell=99427 // 25 man - http://ptr.wowhead.com/spell=100729 // 10 man heroic - http://ptr.wowhead.com/spell=100730 // 25 man heroic - http://ptr.wowhead.com/spell=100731 // These should NEVER be hit by the Air group Attack IncendiaryCloud = new Attack { Name = "Incendiary Cloud", DamagePerTick = new float[] { (27750f + 32250f), (27750f + 32250f), (55500f + 64500f), (55500f + 64500f), 0 }[i] / 2f, IsDoT = true, TickInterval = 1.5f, Duration = 3f, AttackType = ATTACK_TYPES.AT_AOE, AttackSpeed = 5f, DamageType = ItemDamageType.Fire, SpellID = new float[] { 99427, 100729, 100730, 100731, 0 }[i], // Normal has 2 clouds, Heroic has 3 clouds MaxNumTargets = new float[] { 2, 2, 3, 3, 0 }[i], // By flying around the clouds, you can "interrupt" the attacks Interruptable = true, }; IncendiaryCloud.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; FlightofFlames.Attacks.Add(IncendiaryCloud); FlightofFlamesPart2.Attacks.Add(IncendiaryCloud); #endregion #endregion #region Blazing Talon Initiate /* Blazing Talon Initiates will periodically fly in from the Firelands to assist Alysrazor * in defeating enemy forces on the ground.*/ // West-side - http://ptr.wowhead.com/npc=53896 // East-side - http://ptr.wowhead.com/npc=53369 // Timer - Both - Normal - 17; Heroic - 17 // Both - Normal - 31; heroic - 22 // East - Normal - 21; Heroic - 53 // West - Normal - 21; Heroic - 21 // East - Normal - 21; Heroic - 21 // West - Normal - 21; Heroic - 40 float WestBlazingTalonInitiateFrequence = (i > 1 ? (17f + 22f + (63f + 21f) + (21f + 40f)) : (17f + 31f + (31f + 21f) + (21f + 21f))) / 4f; float EastBlazingTalonInitiateFrequence = (i > 1 ? (17f + 22f + 63f + (21f + 21f)) : (17f + 31f + 31f + (21f + 21f))) / 4f; TargetGroup BlazingTalonInitiateWest = new TargetGroup { Name = "Blazing Talon Initiate West", Chance = 1f, Frequency = WestBlazingTalonInitiateFrequence, Duration = WestBlazingTalonInitiateFrequence * 1000f, LevelOfTargets = 87, NearBoss = false, NumTargs = 1f, TargetID = 53896, }; BlazingTalonInitiateWest.SetAffectsRoles_DPS(); HatchlingPhase.Targets.Add(BlazingTalonInitiateWest); FlightofFlames.Targets.Add(BlazingTalonInitiateWest); FlightofFlamesPart2.Targets.Add(BlazingTalonInitiateWest); TargetGroup BlazingTalonInitiateEast = new TargetGroup { Name = "Blazing Talon Initiate East", Chance = 1f, Frequency = EastBlazingTalonInitiateFrequence, Duration = EastBlazingTalonInitiateFrequence * 1000f, LevelOfTargets = 87, NearBoss = false, NumTargs = 1f, TargetID = 53369, }; BlazingTalonInitiateEast.SetAffectsRoles_DPS(); HatchlingPhase.Targets.Add(BlazingTalonInitiateEast); FlightofFlames.Targets.Add(BlazingTalonInitiateEast); FlightofFlamesPart2.Targets.Add(BlazingTalonInitiateEast); #region Brushfire /* The Blazing Talon Initiate conjures a fiery ball that moves across the arena, dealing * 27750 to 32250 damage every 1 sec to enemies within 0 yards.*/ // Initiates are now stunnable so these can be "interupted" now // Original cast - http://ptr.wowhead.com/spell=98868 // Summons - http://ptr.wowhead.com/npc=53372 // 10 man - http://ptr.wowhead.com/spell=98885 // 25 man - http://ptr.wowhead.com/spell=100715 // 10 man heroic - http://ptr.wowhead.com/spell=100716 // 25 man heroic - http://ptr.wowhead.com/spell=100717 Attack Brushfire = new Attack { Name = "Brushfire", DamagePerHit = new float[] { (27750f + 32250f), (27750f + 32250f), (55500f + 64500f), (55500f + 64500f), 0f }[i], DamageType = ItemDamageType.Fire, AttackType = ATTACK_TYPES.AT_AOE, MaxNumTargets = 1f, Interruptable = true, IsFromAnAdd = true, SpellID = new float[] { 98885, 100715, 100716, 100717, 0 }[i], AttackSpeed = new float[] { 4f, 4f, 8f, 8f, 0f }[i], }; Brushfire.SetAffectsRoles_All(); FlightofFlames.Attacks.Add(Brushfire); FlightofFlamesPart2.Attacks.Add(Brushfire); #endregion #region Fieroblast /* The Blazing Talon Initiate hurls a fiery boulder at an enemy, inflicting 27750 to 32250 Fire * damage and 10000 Fire damage every 3 seconds for 12 sec.*/ // After the September 20, 2011 nerf to Firelands in general, this is only cast on heroic // Cast after every Brushfire (Brushfire/Fieroblast/Burshfire/Fieroblast/etc) // These are interuptable // 10 man Heroic - http://ptr.wowhead.com/spell=101295 // 25 man Heroic - http://ptr.wowhead.com/spell=101296 if (i > 1 ) { Attack Fieroblast = new Attack { Name = "Fieroblast", DamagePerHit = new float[] { 0, 0, (37000f + 43000f), (37000f + 43000f), 0f }[i], DamagePerTick = new float[] { 0, 0, 20000, 20000, 0 }[i], IsDoT = true, TickInterval = 3f, Duration = 12f, AttackSpeed = new float[] { 0, 0, 8f, 8f, 0f }[i], AttackType = ATTACK_TYPES.AT_DOT, DamageType = ItemDamageType.Fire, Interruptable = true, IsFromAnAdd = true, MaxNumTargets = 1f, }; Fieroblast.SetAffectsRoles_All(); Fieroblast.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; FlightofFlames.Attacks.Add(Fieroblast); FlightofFlamesPart2.Attacks.Add(Fieroblast); } #endregion #endregion #region Voracious Hatchling [Tank Note] /* Early in Stage 1, two Blazing Broodmothers drop off two Molten Eggs. After several seconds, * the eggs hatch into Voracious Hatchlings. Voracious Hatchlings are indeed voracious and will * throw a Tantrum if not fed Plump Lava Worms.*/ // East Hatchling - http://ptr.wowhead.com/npc=53898 // West hatchling - http://ptr.wowhead.com/npc=53509 TargetGroup WestVoraciousHatchling = new TargetGroup { Name = "West Voracious Hatchling", Chance = 1f, Frequency = (i > 1 ? FirestormCD : FlightofFlamesPhaseTime) - 1f, Duration = ((i > 1 ? FirestormCD : FlightofFlamesPhaseTime) - 12f) * 1000f, NearBoss = false, NumTargs = 1f, TargetID = 53509, LevelOfTargets = 87, }; WestVoraciousHatchling.AffectsRole[PLAYER_ROLES.MainTank] = true; if (i < 2) { FlightofFlames.Targets.Add(WestVoraciousHatchling); FlightofFlamesPart2.Targets.Add(WestVoraciousHatchling); } else FireStormPhase.Targets.Add(WestVoraciousHatchling); TargetGroup EastVoraciousHatchling = WestVoraciousHatchling.Clone(); EastVoraciousHatchling.Name = "East Voracious Hatchling"; EastVoraciousHatchling.TargetID = 53509; EastVoraciousHatchling.AffectsRole[PLAYER_ROLES.MainTank] = false; EastVoraciousHatchling.AffectsRole[PLAYER_ROLES.OffTank] = true; if (i < 2) { FlightofFlames.Targets.Add(EastVoraciousHatchling); FlightofFlamesPart2.Targets.Add(EastVoraciousHatchling); } else FireStormPhase.Targets.Add(EastVoraciousHatchling); Attack VoraciousHatchlingMelee = new Attack { Name = "Voracious hatchling Melee", DamagePerHit = BossHandler.StandardMeleePerHit[(int)Content[i]], AttackSpeed = 1f, AttackType = ATTACK_TYPES.AT_MELEE, DamageType = ItemDamageType.Physical, IsFromAnAdd = true, MaxNumTargets = 1f, Missable = true, Parryable = true, Dodgable = true, Blockable = true, IsTheDefaultMelee = true, }; VoraciousHatchlingMelee.SetAffectsRoles_Tanks(); if (i < 2) { FlightofFlames.Attacks.Add(VoraciousHatchlingMelee); FlightofFlamesPart2.Attacks.Add(VoraciousHatchlingMelee); } else FireStormPhase.Attacks.Add(VoraciousHatchlingMelee); #region Imprinted /* Upon hatchling, Voracious Hatchlings become imprinted on the nearest enemy. The hatchling * will only attack that target, but the target gains 1000% additional damage against the * hatchling.*/ // http://ptr.wowhead.com/spell=99389; alt - http://ptr.wowhead.com/spell=100359 WestVoraciousHatchling.AffectsRole[PLAYER_ROLES.MainTank] = true; EastVoraciousHatchling.AffectsRole[PLAYER_ROLES.OffTank] = true; BuffState Imprint = new BuffState { Name = "Imprint", Frequency = WestVoraciousHatchling.Frequency, Duration = WestVoraciousHatchling.Duration, Chance = 1f, Breakable = false, Stats = new Stats() { BonusDamageMultiplier = 10f }, }; Imprint.SetAffectsRoles_Tanks(); if (i < 2) { FlightofFlames.BuffStates.Add(Imprint); FlightofFlamesPart2.BuffStates.Add(Imprint); } else FireStormPhase.BuffStates.Add(Imprint); #endregion #region Satiated /* The Voracious Hatchling will not throw a Tantrum when Satiated, which lasts for 15 sec. * Voracious Hatchlings hatch fully Satiated, and can become Satiated again if they are fed * Lava Worms.*/ // 15 seconds // 10-man - http://ptr.wowhead.com/spell=99359 // 25-man - http://ptr.wowhead.com/spell=100850 // 10 seconds // 10-man heroic - http://ptr.wowhead.com/spell=100851 // 25-man heroic - http://ptr.wowhead.com/spell=100852 #endregion #region Hungry /* A Voracious Hatchling that is no longer Satiated becomes Hungry. When Hungry, hatchling * have a 20% chance on hit to throw a Tantrum.*/ // http://ptr.wowhead.com/spell=99361 #endregion #region Tantrum // The Voracious Hatchling throws a Tantrum, increasing damage by 50% and haste by 50%. // http://ptr.wowhead.com/spell=99362 // This should never happen on heroic Stats TantrumStats = new Stats(); SpecialEffect TantrumSpecialEffect = new SpecialEffect(Trigger.DamageTaken, new Stats() { DamageTakenReductionMultiplier = -0.50f }, 10f, (i < 2 ? 35 : 25 ), 0.20f); TantrumStats.AddSpecialEffect(TantrumSpecialEffect); BuffState Tantrum = new BuffState { Name = "Tantrum", Chance = 1f, Breakable = true, Frequency = (i < 2 ? 30 : 20 ), Duration = 10f * 1000f, Stats = TantrumStats, }; Tantrum.SetAffectsRoles_Tanks(); if (i < 2) { FlightofFlames.BuffStates.Add(Tantrum); FlightofFlamesPart2.BuffStates.Add(Tantrum); } else FireStormPhase.BuffStates.Add(Tantrum); #endregion #region Gushing Wound [Healer Note] /* The Voracious Hatchling strikes all targets within a 6-yard cone, causing them to bleed for * 3000 Physical damage every 0.20 seconds or until the target's health falls below 50% of * their maximum health.*/ // 10 man - http://ptr.wowhead.com/spell=100024; alt - http://ptr.wowhead.com/spell=99308 // 25 man - http://ptr.wowhead.com/spell=100721; alt - http://ptr.wowhead.com/spell=100718 // 10 man heroic - http://ptr.wowhead.com/spell=100719; alt - http://ptr.wowhead.com/spell=100722 // 25 man heroic - http://ptr.wowhead.com/spell=100723; alt - http://ptr.wowhead.com/spell=100720 Attack GushingWound = new Attack { Name = "Gushing Wound", DamagePerTick = new float[] { 3000, 4000, 5000, 6000, 0 }[i], TickInterval = 0.20f, DamageType = ItemDamageType.Physical, Duration = 60f, AttackType = ATTACK_TYPES.AT_MELEE, AttackSpeed = 60f, IsDoT = true, IsFromAnAdd = true, MaxNumTargets = 1f, }; GushingWound.SetAffectsRoles_Tanks(); if (i < 2) { FlightofFlames.Attacks.Add(GushingWound); FlightofFlamesPart2.Attacks.Add(GushingWound); } else FireStormPhase.Attacks.Add(GushingWound); #endregion #endregion #region Plump Lava Worm [Tank Note] /* During Stage 1, two sets of four Lava Worms will erupt from the molten ground. Lava Worms * cannot be attacked by players. Voracious Hatchlings that are near a Lava Worm will rush * to devour it, becoming temporarily Satiated.*/ // this means the tank tanking the Hatchlings need to move to position the hatchlings near the worms // when they need to be satiated. // http://ptr.wowhead.com/npc=53520 TargetGroup PlumpLavaWorm = new TargetGroup { Name = "Plump Lava Worm", NumTargs = (i < 2f ? 8f : 4f), // four worms spawn at any given time // two worm will last for the full duration, while the first two will last half that // so an average of 75% of the full duration for all of the worms. Duration = WestVoraciousHatchling.Duration * 0.75f, Frequency = WestVoraciousHatchling.Frequency, Chance = 1f, LevelOfTargets = 85, NearBoss = false, TargetID = 53520, }; PlumpLavaWorm.SetAffectsRoles_Tanks(); if (i < 2) { FlightofFlames.Targets.Add(PlumpLavaWorm); FlightofFlamesPart2.Targets.Add(PlumpLavaWorm); } else FireStormPhase.Targets.Add(PlumpLavaWorm); #region Lava Spew /* Plump Lava Worms spew a molten cone of fire dealing 27750 to 32250 damage every 1 sec * to all enemies within a 14-yard cone.*/ // 10 man - http://ptr.wowhead.com/spell=99336 // 25 man - http://ptr.wowhead.com/spell=100725 // 10 man heroic - http://ptr.wowhead.com/spell=100726 // 25 man heroic - http://ptr.wowhead.com/spell=100727 Attack LavaSpew = new Attack { Name = "Lava Spew", AttackType = ATTACK_TYPES.AT_AOE, DamageType = ItemDamageType.Fire, DamagePerHit = new float[] { (27750f + 32250f), (27750f + 32250f), (55500f + 64500f), (55500f + 64500f), 0f }[i] / 2f, AttackSpeed = 1f, Interruptable = true, IsFromAnAdd = true, MaxNumTargets = Max_Players[i], SpellID = new float[] { 99336, 100725, 100726, 100727, 0 }[i], }; LavaSpew.SetAffectsRoles_All(); if (i < 2) { FlightofFlames.Attacks.Add(LavaSpew); FlightofFlamesPart2.Attacks.Add(LavaSpew); } else FireStormPhase.Attacks.Add(LavaSpew); #endregion #endregion #region Herald of the Burning End [Heroic Only] if (i > 1) { /* During Stage 1, a Herald of the Burning End will periodically appear and begin casting * Cataclysm. The Herald is immune to all damage, but will die once Cataclysm is cast.*/ #region Cataclysm [Heroic Only] /* The Herald of the Burning End summons a powerful Molten Meteor, dealing 462500 to * 537500 Flamestrike damage to enemies within 0 yards.*/ // NPC - http://ptr.wowhead.com/npc=53375 // You cannot target this harm this npc since this npc will deal a 50,000 AOE damage to anyone // near him and is immune to all attacks. He disappears after casting Cataclysm. #region Molten Meteor [Heroic Only] /* After being summoned by the Herald of the Burning End, a Molten Meteor will roll in one * of 8 random directions, dealing 462500 to 537500 Flamestrike damage to enemies within * 0 yards every 1.50 sec. * 10-man heroic - http://ptr.wowhead.com/npc=53489 * 25-man heroic - http://ptr.wowhead.com/npc=54563 * This should NEVER happen*/ TargetGroup MoltenMeteor = new TargetGroup { Name = "Molten Meteor", // meteors lasts at most 9 seconds before they explode, at least one of theses needs to // survive before a firestorm Duration = 9f * 1000f, Chance = 1f, LevelOfTargets = 87, TargetID = new float[] { 0, 0, 53489, 54563, 0 }[i], NumTargs = 1f, NearBoss = false, Frequency = FirestormCD / 2f, }; MoltenMeteor.AffectsRole[PLAYER_ROLES.RangedDPS] = true; FireStormPhase.Targets.Add(MoltenMeteor); /* If the meteor reaches a wall, it will break apart into three Molten Boulders, which * ricochet back to the opposite direction. If it is destroyed before it reaches a wall, * the Molten Meteor becomes temporarily stationary and block line of sight.*/ // Explosion - http://ptr.wowhead.com/spell=99274 // Personal note, this is what is used to negate the damage from the 100,000 damage every second // from Firestorm. // Players should NEVER get hit by this. #endregion #region Molten Boulder [Heroic Only] /* Three Molten Boulders form when a Molten Meteor hits a wall and breaks apart. Molten Boulder * deals 29600 to 34400 Flamestrike damage to enemies within 2 yards every 1.50 sec and knock * them back.*/ // NPC - http://db.mmo-champion.com/c/53496/ // Damage - http://ptr.wowhead.com/spell=99275 Impedance MoltenBoulder_Move = new Impedance { Name = "Molten Boulder", Duration = 2f * 1000f, Chance = 1f, Frequency = MoltenMeteor.Frequency, Breakable = false, }; MoltenBoulder_Move.SetAffectsRoles_All(); FireStormPhase.Moves.Add(MoltenBoulder_Move); #endregion } #endregion #endregion #endregion #region Ultimate Firepower /* Alysrazor flies in a tight circle, removing Wings of Flame from all players after 5 seconds, * and begins her ultimate attack.*/ // This lasts for 35 seconds #region Fiery Vortex /* A Fiery Vortex appears in the middle of the arena, dealing 100000 Fire damage every 0.50 * seconds to enemies within 0 yards.*/ // http://ptr.wowhead.com/spell=99794 // This should NEVER be hit #endregion #region Fiery Tornado /* Fiery Tornadoes erupt from the Fiery Vortex and begin moving rapidly around Alysrazor's arena, * dealing 25000 Fire damage every 1 sec to enemies within 0 yards.*/ // 10 man - http://ptr.wowhead.com/spell=99816 // 25 man - http://ptr.wowhead.com/spell=100733 // 10 man heroic - http://ptr.wowhead.com/spell=100734 // 25 man heroic - http://ptr.wowhead.com/spell=100735 // These should never be hit /*Attack FieryTornado = new Attack { Name = "Fiery Tornado", DamagePerHit = new float[] { 20000, 25000, 60000, 70000, 0 }[i], DamageType = ItemDamageType.Fire, AttackType = ATTACK_TYPES.AT_AOE, AttackSpeed = 1f, MaxNumTargets = 1f, Interruptable = true, SpellID = new float[] { 99816, 100733, 100734, 100735, 0 }[i], }; FieryTornado.SetAffectsRoles_All(); FieryTornado.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; */ #endregion #region Blazing Power /* Alysrazor continues to give off rings of fire, which appear on the ground of the arena and * lasts for 3 seconds. Players who pass through the ring gain Blazing Power, which increase haste * by 8% and stacks up to 25 times. In addition, each stack of Blazing Power restores mana, rage, * energy, runic power, and holy power.*/ // http://ptr.wowhead.com/spell=99461 // Restores 5% of mana, rage, energy, runic power, and holy power. BuffState BlazingPowerPhase2 = new BuffState { Name = "Blazing Power Phase 2", Frequency = FieryTornadoDuration, Duration = FieryTornadoDuration * 1000f, Chance = 1f, Breakable = false, Stats = BlazingPowerStats, }; BlazingPowerPhase2.SetAffectsRoles_All(); UltimateFirepower.BuffStates.Add(BlazingPowerPhase2); // Assume the air group has 25 stacks at this point and still refreshing during Tornadoes BuffState BlazingPowerPhase2AirGroup = new BuffState { Name = "Blazing Power Phase 2 Air Group", Frequency = FieryTornadoDuration, Duration = FieryTornadoDuration * 1000f, Chance = 1f, Breakable = false, Stats = new Stats() { SpellHaste = 2f, PhysicalHaste = 2f, CritRating = 0.75f }, }; BlazingPowerPhase2.AffectsRole[PLAYER_ROLES.AlysrazorAirGroup] = true; UltimateFirepower.BuffStates.Add(BlazingPowerPhase2AirGroup); #endregion #endregion #region Burnout [DPS Note] /* Alysrazor crashes to the ground and becomes vulnerable, with 0 Molten Power. This stage lasts * until Alyrazor's energy bar reaches 50 Molten Power.*/ #region Blazing Power BuffState BlazingPowerPhase3 = new BuffState { Name = "Blazing Power Phase 3", Frequency = BurnoutDuration, Duration = BurnoutDuration * 1000f, Chance = 1f, Breakable = false, Stats = new Stats() { SpellHaste = 0.08f * 7f, PhysicalHaste = 0.08f * 7f }, }; BlazingPowerPhase3.SetAffectsRoles_All(); Burnout.BuffStates.Add(BlazingPowerPhase3); BuffState BlazingPowerPhase3AirGroup = BlazingPowerPhase2AirGroup.Clone(); BlazingPowerPhase3AirGroup.Name = "Blazing Power Phase 3 Air Group"; BlazingPowerPhase3AirGroup.Frequency = BurnoutDuration; BlazingPowerPhase3AirGroup.Duration = BurnoutDuration * 1000f; Burnout.BuffStates.Add(BlazingPowerPhase3AirGroup); #endregion #region Burnout /* Alysrazor's fire burns out, causing her to become immobile and increasing damage taken by 100%. * In addition, when struck with a harmful spell, Alysrazor emits Essence of the Green.*/ // http://ptr.wowhead.com/spell=99432 BuffState BurnoutBuffState = new BuffState { Name = "Burnout DeBuff", Breakable = false, Chance = 1f, Duration = BurnoutDuration * 1000f, Frequency = BurnoutDuration, Stats = new Stats() { BonusDamageMultiplier = 1f }, }; BurnoutBuffState.SetAffectsRoles_DPS(); BurnoutBuffState.SetAffectsRoles_Healers(); Burnout.BuffStates.Add(BurnoutBuffState); #endregion #region Essence of the Green [Healer Note] /* During Burnout, if Alysrazor is struck by a harmful spell, she emits Essence of the Green * restoring 10% of maximum mana to players.*/ // http://ptr.wowhead.com/spell=99433 Stats EssenceoftheGreenStats = new Stats(); SpecialEffect EssenceoftheGreenSpecialEffect = new SpecialEffect(Trigger.DamageSpellHit, new Stats() { ManaRestoreFromMaxManaPerSecond = 0.10f }, 0, 0, 1f); EssenceoftheGreenStats.AddSpecialEffect(EssenceoftheGreenSpecialEffect); BuffState EssenceoftheGreen = new BuffState { Name = "Essence of the Green", Breakable = false, Chance = 1f, Duration = BurnoutDuration * 1000f, Frequency = BurnoutDuration, Stats = EssenceoftheGreenStats, }; EssenceoftheGreen.SetAffectsRoles_DPS(); EssenceoftheGreen.SetAffectsRoles_Healers(); Burnout.BuffStates.Add(EssenceoftheGreen); #endregion #region Spark /* A bright spark continues to burn within the heart of Alyrazor, restoring 3 Molten Power * every 2 seconds.*/ // http://ptr.wowhead.com/spell=99921 #endregion #region Blazing Talon Clawshaper /* At the start of stage 2, two Blazing Talon Clawshapers will fly in and begin to re-energize * Alysrazor.*/ // http://ptr.wowhead.com/npc=53734 TargetGroup BlazingTalonClawshaper = new TargetGroup { Name = "Blazing Talon Clawshaper", Chance = 1f, Duration = BurnoutDuration * 1000f, Frequency = BurnoutDuration, // Originally they are not near the boss but they can be pulled/kited to next to the boss, NearBoss = true, NumTargs = 2f, TargetID = 53734, LevelOfTargets = 86, }; BlazingTalonClawshaper.SetAffectsRoles_Tanks(); Burnout.Targets.Add(BlazingTalonClawshaper); /* Ignition * Blazing Talon Clawshapers channel molten energy into Alysrazor, restoring 1 Molten Power * every 1 seconds.*/ // http://ptr.wowhead.com/spell=99919 #endregion // Personal note - Between the Spark and Clawshapers, this stage lasts for 15 seconds if nothing // is done to the Clawshapers, 34 seconds if the Clawshapers are interupted. #endregion #region Re-Ignition /* Alysrazor's fire becomes re-ignited at 50 Molten Power. This stage lasts until Alysrazor * reaches 100 Molten Power.*/ #region Ignited /* Alysrazor's fiery core begins to combust once again, rapidly restoring Molten Power. Restores * 3 Molten Power every 1 seconds.*/ // http://ptr.wowhead.com/spell=99922 // Personal Note - This means that the phase will last 17 seconds #endregion #region Blazing Claw [Tank Note] /* Alysrazor claws her enemies, dealing 92500 to 107500 Physical damage to enemies in a 25-yard cone * every 1.50 seconds. In addition, each swipe increases the Fire and Physical damage taken by the * target by 10% for 15 sec.*/ // 10-man - http://ptr.wowhead.com/spell=99844 // 25-man - http://ptr.wowhead.com/spell=101729 // 10-man Heroic - http://ptr.wowhead.com/spell=101730 // 25-man Heroic - http://ptr.wowhead.com/spell=101731 // Personal Note, this means that there needs to be a tank swap at the 5-6 stack mark Attack BlazingClaw = new Attack { Name = "Blazing Claw", DamagePerHit = new float[] { (69375f + 80625f), (83250f + 96750f), (92500f + 107500f), (115625f + 134375f), 0 }[i] / 2f, AttackSpeed = 1.5f * 2, AttackType = ATTACK_TYPES.AT_MELEE, DamageType = ItemDamageType.Physical, MaxNumTargets = 1f, SpellID = new float[] { 99844, 101729, 101730, 101731, 0 }[i], }; BlazingClaw.SetUnavoidable(); BlazingClaw.SetAffectsRoles_Tanks(); ReIgnition.Attacks.Add(BlazingClaw); Stats BlazingClawStats = new Stats(); SpecialEffect BlazingClawSpecialEffect = new SpecialEffect(Trigger.Use, new Stats() { BossPhysicalDamageDealtReductionMultiplier = -0.10f, FireDamageTakenMultiplier = 0.10f }, 15, 1.5f, 0.5f, 11); BlazingClawStats.AddSpecialEffect(BlazingClawSpecialEffect); BuffState BlazingClawBuffState = new BuffState { Name = "Blazing Claw Debuff", Frequency = ReIgniteDuration, Duration = ReIgniteDuration * 1000f, Chance = 1f, Breakable = false, Stats = BlazingClawStats, }; BlazingClawBuffState.SetAffectsRoles_Tanks(); ReIgnition.BuffStates.Add(BlazingClawBuffState); #endregion #region Blazing Buffet /* Alysrazor's Fiery core emits powerful bursts of flame, dealing 9250 to 10750 Fire damage to all * enemies every 1 seconds for as long as Alysrazor remains ignited.*/ // 10 man - http://ptr.wowhead.com/spell=99757 // 25 man - http://ptr.wowhead.com/spell=100739 // 10 man heroic - http://ptr.wowhead.com/spell=100740 // 25 man heroic - http://ptr.wowhead.com/spell=100741 Attack BlazingBuffet = new Attack { Name = "Blazing Buffet", DamagePerHit = new float[] { (6937f + 8062f), (10406f + 12093f), (11793f + 13706f), (11793f + 13706f), 0 }[i] / 2f, AttackSpeed = 1f, DamageType = ItemDamageType.Fire, AttackType = ATTACK_TYPES.AT_AOE, MaxNumTargets = Max_Players[i], SpellID = new float[] { 99757, 100739, 100740, 100741, 0 }[i], }; BlazingBuffet.SetAffectsRoles_All(); ReIgnition.Attacks.Add(BlazingBuffet); #endregion #region Full Power [Healer Note] /* When Alysrazor reaches 100 Molten Power, she is at Full Power, which deals 50000 Fire damage * to all enemies and knocks them back. Once she reaches Full Power, Alysrazor will begin her * Stage 1 activities once again.*/ // 10 man - http://ptr.wowhead.com/spell=99925 // 25 man - http://ptr.wowhead.com/spell=100736 // 10 man heroic - http://ptr.wowhead.com/spell=100737 // 25 man heroic - http://ptr.wowhead.com/spell=100738 Attack FullPower = new Attack { Name = "Full Power", DamagePerHit = new float[] { 37500, 45000, 60000, 70000, 0 }[i], AttackSpeed = ReIgniteDuration - 1, DamageType = ItemDamageType.Fire, AttackType = ATTACK_TYPES.AT_AOE, MaxNumTargets = Max_Players[i], SpellID = new float[] { 99925, 100736, 100737, 100738, 0 }[i], }; FullPower.SetAffectsRoles_All(); ReIgnition.Attacks.Add(FullPower); #endregion #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. float phasestart = 0; float HeroicFofStart = 0; float HeroicFoFLength = 0; if (i < 2) { ApplyAPhasesValues(InitialPull, i, 1, 0, 10f, BerserkTimer[i]); phasestart += 10f; ApplyAPhasesValues(FlightofFlames, i, 2, phasestart, FlightofFlamesPhaseTime, BerserkTimer[i]); phasestart += FlightofFlamesPhaseTime; ApplyAPhasesValues(UltimateFirepower, i, 3, phasestart, FieryTornadoDuration, BerserkTimer[i]); phasestart += FieryTornadoDuration; ApplyAPhasesValues(Burnout, i, 4, phasestart, BurnoutDuration, BerserkTimer[i]); phasestart += BurnoutDuration; ApplyAPhasesValues(ReIgnition, i, 5, phasestart, ReIgniteDuration, BerserkTimer[i]); phasestart += ReIgniteDuration; ApplyAPhasesValues(FlightofFlames, i, 6, phasestart, FlightofFlamesPhaseTime, BerserkTimer[i]); ApplyAPhasesValues(UltimateFirepower, i, 7, phasestart, FieryTornadoDuration, BerserkTimer[i]); phasestart += FieryTornadoDuration; ApplyAPhasesValues(Burnout, i, 8, phasestart, BurnoutDuration, BerserkTimer[i]); phasestart += BurnoutDuration; ApplyAPhasesValues(ReIgnition, i, 9, phasestart, ReIgniteDuration, BerserkTimer[i]); phasestart += ReIgniteDuration; ApplyAPhasesValues(FlightofFlames, i, 10, phasestart, FlightofFlamesPhaseTime, BerserkTimer[i]); phasestart += FlightofFlamesPhaseTime; ApplyAPhasesValues(UltimateFirepower, i, 11, phasestart, FieryTornadoDuration, BerserkTimer[i]); phasestart += FieryTornadoDuration; ApplyAPhasesValues(Burnout, i, 12, phasestart, BurnoutDuration, BerserkTimer[i]); phasestart += BurnoutDuration; ApplyAPhasesValues(ReIgnition, i, 13, phasestart, ReIgniteDuration, BerserkTimer[i]); // She will stay in this phase until the raid wipes; } else { ApplyAPhasesValues(InitialPull, i, 1, 0, 10f, BerserkTimer[i]); phasestart += 10f; HeroicFofStart = phasestart; InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 1, phasestart, FirestormCD, BerserkTimer[i]); phasestart += FirestormCD; HeroicFoFLength += FirestormCD; FlightofFlames.InnerPhases.Add(InnerPhaseHatchling); InnerPhaseFirestorm = new InnerPhase(FireStormPhase, i, 1, phasestart, 10f, BerserkTimer[i]); phasestart += 10f; HeroicFoFLength += 10f; FlightofFlames.InnerPhases.Add(InnerPhaseFirestorm); InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 1, phasestart, FirestormCD, BerserkTimer[i]); phasestart += FirestormCD; HeroicFoFLength += FirestormCD; FlightofFlames.InnerPhases.Add(InnerPhaseHatchling); InnerPhaseFirestorm = new InnerPhase(FireStormPhase, i, 1, phasestart, 10f, BerserkTimer[i]); phasestart += 10f; HeroicFoFLength += 10f; FlightofFlames.InnerPhases.Add(InnerPhaseFirestorm); InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 1, phasestart, FlightofFlamesPhaseTime - HeroicFoFLength, BerserkTimer[i]); phasestart += (FlightofFlamesPhaseTime - HeroicFoFLength); HeroicFoFLength = 0; FlightofFlames.InnerPhases.Add(InnerPhaseHatchling); ApplyAPhasesValues(FlightofFlames, i, 2, HeroicFofStart, FlightofFlamesPhaseTime, BerserkTimer[i]); phasestart += FlightofFlamesPhaseTime; ApplyAPhasesValues(UltimateFirepower, i, 3, phasestart, FieryTornadoDuration, BerserkTimer[i]); phasestart += FieryTornadoDuration; ApplyAPhasesValues(Burnout, i, 4, phasestart, BurnoutDuration, BerserkTimer[i]); phasestart += BurnoutDuration; ApplyAPhasesValues(ReIgnition, i, 5, phasestart, ReIgniteDuration, BerserkTimer[i]); phasestart += ReIgniteDuration; HeroicFofStart = phasestart; InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 6, phasestart, FirestormCD, BerserkTimer[i]); phasestart += FirestormCD; HeroicFoFLength += FirestormCD; FlightofFlamesPart2.InnerPhases.Add(InnerPhaseHatchling); InnerPhaseFirestorm = new InnerPhase(FireStormPhase, i, 6, phasestart, 10f, BerserkTimer[i]); phasestart += 10f; HeroicFoFLength += 10f; FlightofFlamesPart2.InnerPhases.Add(InnerPhaseFirestorm); InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 6, phasestart, FirestormCD, BerserkTimer[i]); phasestart += FirestormCD; HeroicFoFLength += FirestormCD; FlightofFlamesPart2.InnerPhases.Add(InnerPhaseHatchling); InnerPhaseFirestorm = new InnerPhase(FireStormPhase, i, 6, phasestart, 10f, BerserkTimer[i]); phasestart += 10f; HeroicFoFLength += 10f; FlightofFlamesPart2.InnerPhases.Add(InnerPhaseFirestorm); InnerPhaseHatchling = new InnerPhase(HatchlingPhase, i, 6, phasestart, FlightofFlamesPhaseTime - HeroicFoFLength, BerserkTimer[i]); phasestart += (FlightofFlamesPhaseTime - HeroicFoFLength); HeroicFoFLength = 0; FlightofFlamesPart2.InnerPhases.Add(InnerPhaseHatchling); ApplyAPhasesValues(FlightofFlamesPart2, i, 6, HeroicFofStart, FlightofFlamesPhaseTime, BerserkTimer[i]); phasestart += FlightofFlamesPhaseTime; ApplyAPhasesValues(UltimateFirepower, i, 7, phasestart, FieryTornadoDuration, BerserkTimer[i]); phasestart += FieryTornadoDuration; ApplyAPhasesValues(Burnout, i, 8, phasestart, BurnoutDuration, BerserkTimer[i]); phasestart += BurnoutDuration; ApplyAPhasesValues(ReIgnition, i, 9, phasestart, BerserkTimer[i] - phasestart, BerserkTimer[i]); // She will stay in this phase until the raid wipes; } AddAPhase(InitialPull, i); AddAPhase(FlightofFlames, i); AddAPhase(UltimateFirepower, i); AddAPhase(Burnout, i); AddAPhase(ReIgnition, 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: * All */ }