public override void Fight() { MultiDotting(); // Send our pet to attack (He should already be doing this anyway) if (this.Player.GotPet() && Pet.HealthPercent > 0) { this.Pet.Attack(); } //Use Healthstones if (this.Player.ItemCount("Minor Healthstone") == 1 && this.Player.HealthPercent <= 15 && !this.Target.GotDebuff("Drain Life")) { this.Player.UseItem("Minor Healthstone"); } if (this.Player.ItemCount("Lesser Healthstone") == 1 && this.Player.HealthPercent <= 15 && !this.Target.GotDebuff("Drain Life")) { this.Player.UseItem("Lesser Healthstone"); } if (this.Player.ItemCount("Healthstone") == 1 && this.Player.HealthPercent <= 15 && !this.Target.GotDebuff("Drain Life")) { this.Player.UseItem("Healthstone"); } if (this.Player.ItemCount("Greater Healthstone") == 1 && this.Player.HealthPercent <= 15 && !this.Target.GotDebuff("Drain Life")) { this.Player.UseItem("Greater Healthstone"); } if (this.Player.ItemCount("Major Healthstone") == 1 && this.Player.HealthPercent <= 15 && !this.Target.GotDebuff("Drain Life")) { this.Player.UseItem("Major Healthstone"); } //Sacrifice Pet if he (or I) is getting to low on health if (this.Player.GotPet()) { if ((Pet.CanUse("Sacrifice") && Pet.HealthPercent < 9 && Pet.HealthPercent > 0) || (Pet.CanUse("Sacrifice") && this.Player.HealthPercent <= 9 && Pet.HealthPercent > 0)) { this.Player.CastWait("Sacrifice", 10000); } } //Soul Shards, make sure the number of soul shards is the same as the one in the wanding logic if (this.Player.ItemCount("Soul Shard") < 3 && this.Target.HealthPercent <= 10 && this.Player.IsCasting == "" && this.Player.IsChanneling == "") { this.Player.CastWait("Drain Soul", 1000); } //HANDLE MULTITARGET FIGHTS >>Credit to dgcfus<< if (this.Player.GotPet()) { if (this.Attackers.Count >= 2 && this.Player.GotPet() && Pet.HealthPercent > 0) { //MAKES THE PET ATTACK THE MOB WHO IS ATTACKING THE TOON, Casts suffering var UnitToAttack = this.Attackers.FirstOrDefault(Mob => Mob.TargetGuid == this.Player.Guid); if (UnitToAttack != null) { this.Player.SetTargetTo(UnitToAttack); if (!this.Pet.IsOnMyTarget()) { this.Pet.Attack(); this.Player.Cast("Suffering"); //Thanks dgcfus } } //IF ALL THE MOBS ARE ATTACKING THE PET FOCUS THE LOWER HP ONE else { int LowerHP = this.Attackers.Min(Mob => Mob.HealthPercent); var LowerHPUnit = this.Attackers.SingleOrDefault(Mob => Mob.HealthPercent == LowerHP); if (LowerHPUnit != null && LowerHPUnit.Guid != this.Target.Guid) { this.Player.SetTargetTo(LowerHPUnit); //Thanks dgcfus } } } } // Heal Pet if (this.Player.IsCasting == "Health Funnel" || this.Player.IsChanneling == "Health Funnel") { if (this.Player.HealthPercent >= 20) { return; } else if (this.Player.HealthPercent < 20) { this.Player.StopCasting(); } } else if (this.Player.GotPet()) { if (Pet.HealthPercent < 40 && Pet.HealthPercent > 0 && this.Player.HealthPercent >= 60 && this.Player.IsCasting == "") { if (this.Player.GetSpellRank("Health Funnel") != 0 && !this.Target.GotDebuff("Drain Life") && this.Player.IsChanneling != "Health Funnel" && this.Player.IsCasting != "Health Funnel") { this.Player.CastWait("Health Funnel", 5000); } } } //Nightfall! if (this.Player.GotBuff("Shadow Trance")) { this.Player.CastWait("Shadow Bolt", 1000); } //Shadowburn if (this.Player.CanUse("Shadowburn") && this.Player.GetSpellRank("Shadowburn") != 0 && this.Target.HealthPercent <= 20 && this.Player.ManaPercent >= 10) { this.Player.CastWait("Shadowburn", 500); } //Convenience Life Tap if (this.Player.IsCasting == "Drain Soul" || this.Player.IsChanneling == "Drain Soul") { return; } else if (this.Attackers.Count <= 1 && this.Target.HealthPercent <= 10 && this.Player.GotPet() && Pet.HealthPercent > 40 && this.Player.ManaPercent <= 30 && this.Player.GetSpellRank("Life Tap") != 0 && !this.Target.GotDebuff("Drain Life") && this.Player.HealthPercent >= 40) { this.Player.Cast("Life Tap"); } //Start DOTs //Shadow Bolt if we don't have Immolate if (this.Player.GetSpellRank("Immolate") == 0 && this.Player.CanUse("Shadow Bolt") && this.Player.IsCasting == "" && this.Target.HealthPercent >= 80 && this.Player.ManaPercent >= 30) { this.Player.CastWait("Shadow Bolt", 2000); } //Corruption if (this.Player.CanUse("Corruption") && this.Player.GetSpellRank("Corruption") != 0 && !this.Target.GotDebuff("Corruption") && !this.Target.GotDebuff("Drain Life") && this.Target.HealthPercent >= 12 && this.Player.ManaPercent >= 10) { this.Player.CastWait("Corruption", 500); } //Agony if (this.Player.CanUse("Curse of Agony") && this.Player.GetSpellRank("Curse of Agony") != 0 && !this.Target.GotDebuff("Curse of Agony") && !this.Target.GotDebuff("Drain Life") && this.Target.HealthPercent >= 12 && this.Player.ManaPercent >= 10) { this.Player.CastWait("Curse of Agony", 500); } //SL if (this.Player.CanUse("Siphon Life") && this.Player.GetSpellRank("Siphon Life") != 0 && !this.Target.GotDebuff("Siphon Life") && !this.Target.GotDebuff("Drain Life") && this.Target.HealthPercent >= 12 && this.Player.ManaPercent >= 10) { this.Player.CastWait("Siphon Life", 500); } //Drain Life if (this.Player.HealthPercent <= 60 && this.Player.ManaPercent >= 20 && !this.Target.GotDebuff("Drain Life") && this.Player.GetSpellRank("Drain Life") != 0 && this.Target.HealthPercent >= 10) { this.SetCombatDistance(19); this.Player.CastWait("Drain Life", 1000); } //Immolate if (this.Player.CanUse("Immolate") && this.Player.GetSpellRank("Immolate") != 0 && !this.Target.GotDebuff("Immolate") && !this.Target.GotDebuff("Drain Life") && this.Target.HealthPercent >= 12 && this.Player.ManaPercent >= 10) { this.Player.CastWait("Immolate", 500); } //Necessity Life Tap if ((this.Player.CanUse("Life Tap") && this.Player.ManaPercent <= 30 && this.Player.GetSpellRank("Life Tap") != 0 && !this.Target.GotDebuff("Drain Life") && this.Player.HealthPercent >= 60) || (this.Player.ManaPercent <= 80 && this.Player.GetSpellRank("Life Tap") != 0 && !this.Target.GotDebuff("Drain Life") && this.Player.HealthPercent >= 90)) { this.Player.Cast("Life Tap"); } //Try to stay at 8 yards in case of cleave if (this.Pet.IsTanking()) { if (this.Target.DistanceToPlayer < 8 && backup) { bool res = Player.ForceBackup(8); } else { Player.StopForceBackup(); } } //Wanding if (this.Player.IsCasting == "" && this.Player.IsChanneling == "") { bool canWand = this.Player.IsWandEquipped(); //Check if we can use immolate just as a GCD tracker. Set soul shard value to that in drain soul logic. if ((!this.Player.GotPet() || this.Player.CanUse("Immolate") && this.Player.ManaPercent <= 20) || (this.Player.CanUse("Immolate") && this.Player.HealthPercent > 60 && this.Player.ManaPercent > 30 && this.Target.GotDebuff("Immolate") && this.Target.GotDebuff("Corruption") && this.Target.GotDebuff("Curse of Agony")) || (this.Player.CanUse("Immolate") && this.Player.ItemCount("Soul Shard") == 3 && this.Target.HealthPercent < 12 && this.Attackers.Count <= 1) || this.Player.GetSpellRank("Curse of Agony") == 0) { if (canWand) { this.Player.StartWand(); } else { this.SetCombatDistance(4); this.Player.Attack(); } } } }