/// <summary> /// Function to Find and Kill Mobs /// </summary> public void findAndKillMob(WoWUnit Enemy) { bool CastSuccess = false; if (!Enemy.IsDead) { #region don't kill if // Don't kill Pandaria Rares with Low Health if ((Enemy.Entry == 50828 || Enemy.Entry == 50836 || Enemy.Entry == 50840 || Enemy.Entry == 50823 || Enemy.Entry == 50831 || Enemy.Entry == 50830 || Enemy.Entry == 50832 || Enemy.Entry == 50750 || Enemy.Entry == 50768 || Enemy.Entry == 50772 || Enemy.Entry == 50766 || Enemy.Entry == 50769 || Enemy.Entry == 50780 || Enemy.Entry == 50776 || Enemy.Entry == 50739 || Enemy.Entry == 50749 || Enemy.Entry == 50734 || Enemy.Entry == 50364 || Enemy.Entry == 50363 || Enemy.Entry == 50733 || Enemy.Entry == 50388 || Enemy.Entry == 50341 || Enemy.Entry == 50349 || Enemy.Entry == 50340 || Enemy.Entry == 50347 || Enemy.Entry == 50338 || Enemy.Entry == 50344 || Enemy.Entry == 50339 || Enemy.Entry == 50354 || Enemy.Entry == 50351 || Enemy.Entry == 50355 || Enemy.Entry == 50356 || Enemy.Entry == 50350 || Enemy.Entry == 50352 || Enemy.Entry == 50359 || Enemy.Entry == 50821 || Enemy.Entry == 50817 || Enemy.Entry == 50822 || Enemy.Entry == 50816 || Enemy.Entry == 50811 || Enemy.Entry == 50808 || Enemy.Entry == 50820 || Enemy.Entry == 50787 || Enemy.Entry == 50806 || Enemy.Entry == 50789 || Enemy.Entry == 50805 || Enemy.Entry == 50783 || Enemy.Entry == 50782 || Enemy.Entry == 50791 || Enemy.Entry == 51059 || Enemy.Entry == 50334 || Enemy.Entry == 51078 || Enemy.Entry == 50331 || Enemy.Entry == 50332 || Enemy.Entry == 50333 || Enemy.Entry == 50336) && Me.HealthPercent < 80) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}, but don't Kill Pandaria Mob with Health < 80%", Enemy.Name, Enemy.Entry); return; } if (Rarekiller.Settings.NotKillTameable && Enemy.IsTameable) // ... I want to tame him :) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}, but kill tameable", Enemy.Name, Enemy.Entry); return; } #endregion Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}", Enemy.Name, Enemy.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Mob Location: {0} / {1} / {2}", Convert.ToString(Enemy.X), Convert.ToString(Enemy.Y), Convert.ToString(Enemy.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", Enemy.Name, Enemy.Entry); } #region don't kill if ... if (Rarekiller.Settings.PullCounter >= Rarekiller.Settings.MaxPullCounter) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but I pulled him now {1} Times", Enemy.Name, Rarekiller.Settings.PullCounter); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist15)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 15 Minutes, MoP Rares will be deactivated"); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: I pulled now {0} times, blacklist')", Rarekiller.Settings.PullCounter); } Rarekiller.Settings.PullCounter = 0; Rarekiller.Settings.GuidCurrentPull = 0; Rarekiller.Settings.BlacklistCounter++; Rarekiller.Settings.DeactivateMoPRare(Enemy); return; } // Don't kill Pandaria Rares with Level < 90 if ((Enemy.Entry == 50828 || Enemy.Entry == 50836 || Enemy.Entry == 50840 || Enemy.Entry == 50823 || Enemy.Entry == 50831 || Enemy.Entry == 50830 || Enemy.Entry == 50832 || Enemy.Entry == 50750 || Enemy.Entry == 50768 || Enemy.Entry == 50772 || Enemy.Entry == 50766 || Enemy.Entry == 50769 || Enemy.Entry == 50780 || Enemy.Entry == 50776 || Enemy.Entry == 50739 || Enemy.Entry == 50749 || Enemy.Entry == 50734 || Enemy.Entry == 50364 || Enemy.Entry == 50363 || Enemy.Entry == 50733 || Enemy.Entry == 50388 || Enemy.Entry == 50341 || Enemy.Entry == 50349 || Enemy.Entry == 50340 || Enemy.Entry == 50347 || Enemy.Entry == 50338 || Enemy.Entry == 50344 || Enemy.Entry == 50339 || Enemy.Entry == 50354 || Enemy.Entry == 50351 || Enemy.Entry == 50355 || Enemy.Entry == 50356 || Enemy.Entry == 50350 || Enemy.Entry == 50352 || Enemy.Entry == 50359 || Enemy.Entry == 50821 || Enemy.Entry == 50817 || Enemy.Entry == 50822 || Enemy.Entry == 50816 || Enemy.Entry == 50811 || Enemy.Entry == 50808 || Enemy.Entry == 50820 || Enemy.Entry == 50787 || Enemy.Entry == 50806 || Enemy.Entry == 50789 || Enemy.Entry == 50805 || Enemy.Entry == 50783 || Enemy.Entry == 50782 || Enemy.Entry == 50791 || Enemy.Entry == 51059 || Enemy.Entry == 50334 || Enemy.Entry == 51078 || Enemy.Entry == 50331 || Enemy.Entry == 50332 || Enemy.Entry == 50333 || Enemy.Entry == 50336) && Me.Level < 90) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but my level is to Low to kill him", Enemy.Name); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: My Level is to low')", Enemy.Name); } return; } if (Enemy.TaggedByOther && !Rarekiller.TaggedMobsList.ContainsKey(Convert.ToInt32(Enemy.Entry))) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but he's tagged by another Player", Enemy.Name); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is tagged')", Enemy.Name); } return; } //if not known ID of Inhouse Pandaria Rare --> don't kill if (!(Enemy.Entry == 50817 || Enemy.Entry == 50768 || Enemy.Entry == 50836 || Enemy.Entry == 50782 || Enemy.Entry == 50331 || Enemy.Entry == 51078 || Enemy.Entry == 50822 || Enemy.Entry == 50831 || Enemy.Entry == 50832 || Enemy.Entry == 50769)) { if (Me.IsFlying && Me.IsOutdoors && Enemy.IsIndoors) { Logging.Write(Colors.MediumPurple, "Rarekiller: Mob is Indoors and I fly Outdoors, so blacklist him to prevent Problems"); Logging.Write(Colors.MediumPurple, "Rarekiller: You have to place me next to the Spawnpoint, if you want me to hunt this Mob."); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is Indoors')", Enemy.Name); } return; } } if (Enemy.Level > (Me.Level + 4)) // ... 4 Levels higher them me { Logging.Write(Colors.MediumPurple, "Rarekiller: His Level is 5 over mine, better not to kill him."); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); return; } if (Enemy.IsFriendly) // ... is Friendly { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but he's friendly", Enemy.Name); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is friendly')", Enemy.Name); } return; } if ((Enemy.Entry == 32630) && !Rarekiller.Settings.Vyragosa) // ... my Settings say don't kill Vyragosa { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Config says: don't kill Vyragosa."); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: don't kill NPC')", Enemy.Name); } return; } if ((Enemy.Entry == 50057) && !Rarekiller.Settings.Blazewing) // ... my Settings say don't kill Blazewing { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Config says: don't kill Blazewing."); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: don't kill NPC')", Enemy.Name); } return; } if ((Enemy.Entry == 596) || (Enemy.Entry == 599) || Me.IsInInstance) { // ... Instance Mobs, don't run wild in Instances Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Don't run wild because of RareMobs in Instances."); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); return; } if (Rarekiller.BlacklistMobsList.ContainsKey(Convert.ToInt32(Enemy.Entry))) // ... Mob is Blacklisted in Rarekiller/config/BlacklistedMobs.xml { Logging.Write(Colors.MediumPurple, "Rarekiller: {0} is Member of the BlacklistedMobs.xml", Enemy.Name); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist15)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 15 Minutes."); return; } if (Rarekiller.DontInteract) { return; } #endregion if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region fly to Helperpoint for some Pandaria Rares if (Me.IsFlying && (Enemy.Entry == 50817 || Enemy.Entry == 50768 || Enemy.Entry == 50836 || Enemy.Entry == 50782 || Enemy.Entry == 50331 || Enemy.Entry == 51078 || Enemy.Entry == 50822 || Enemy.Entry == 50831 || Enemy.Entry == 50832 || Enemy.Entry == 50769 || Enemy.Entry == 50749 || Enemy.Entry == 50334 || Enemy.Entry == 50347 || Enemy.Entry == 50811 || Enemy.Entry == 50821 || Enemy.Entry == 50808 || Enemy.Entry == 50820)) { WoWPoint Helperpoint = Enemy.Location; if (Enemy.Entry == 50817) { Helperpoint = LandingPoint50817; } if (Enemy.Entry == 50768) { Helperpoint = LandingPoint50768; } if (Enemy.Entry == 50836) { Helperpoint = LandingPoint50836; } if (Enemy.Entry == 50782) { Helperpoint = LandingPoint50782; } if (Enemy.Entry == 50831) { Helperpoint = LandingPoint50831; } if (Enemy.Entry == 50832) { Helperpoint = LandingPoint50832; } if (Enemy.Entry == 50769) { Helperpoint = LandingPoint50769; } if (Enemy.Entry == 50822) { Helperpoint = LandingPoint50822; } if (Enemy.Entry == 50331) { Helperpoint = LandingPoint50331; } if (Enemy.Entry == 51078) { Helperpoint = LandingPoint51078; } if (Enemy.Entry == 50749) { Helperpoint = LandingPoint50749; } if (Enemy.Entry == 50334) { Helperpoint = LandingPoint50334; } if (Enemy.Entry == 50347) { Helperpoint = LandingPoint50347; } if (Enemy.Entry == 50811) { Helperpoint = LandingPoint50811; } if (Enemy.Entry == 50821) { Helperpoint = LandingPoint50821; } if (Enemy.Entry == 50808) { Helperpoint = LandingPoint50808; } if (Enemy.Entry == 50820) { Helperpoint = LandingPoint50820; } if (!Rarekiller.MoveTo(Helperpoint, Enemy, 5, false)) { return; } Rarekiller.Dismount(); } #endregion #region Check PullRange string UsedPullRange = Rarekiller.Settings.Range; // Range to 27 because of Inhouse Pandaria Mob if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell) && ( Enemy.Entry == 50836 || Enemy.Entry == 50782 || Enemy.Entry == 50331 || Enemy.Entry == 51078 || Enemy.Entry == 50822 || Enemy.Entry == 50831 || Enemy.Entry == 50832 || Enemy.Entry == 50768 || Enemy.Entry == 50749 || Enemy.Entry == 50334 || Enemy.Entry == 50347 || Enemy.Entry == 50811 || Enemy.Entry == 50821 || Enemy.Entry == 50808 || Enemy.Entry == 50820)) { UsedPullRange = "27"; Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to 27 because of Inhouse Pandaria Rare"); } // Range to 3 for other Pandaria Mobs //else if (o.Entry == 50828 || o.Entry == 50836 || o.Entry == 50840 || o.Entry == 50823 || //o.Entry == 50831 || o.Entry == 50830 || o.Entry == 50832 || o.Entry == 50750 || //o.Entry == 50768 || o.Entry == 50772 || o.Entry == 50766 || o.Entry == 50769 || //o.Entry == 50780 || o.Entry == 50776 || o.Entry == 50739 || o.Entry == 50749 || //o.Entry == 50734 || o.Entry == 50364 || o.Entry == 50363 || o.Entry == 50733 || //o.Entry == 50388 || o.Entry == 50341 || o.Entry == 50349 || o.Entry == 50340 || //o.Entry == 50347 || o.Entry == 50338 || o.Entry == 50344 || o.Entry == 50339 || //o.Entry == 50354 || o.Entry == 50351 || o.Entry == 50355 || o.Entry == 50356 || //o.Entry == 50350 || o.Entry == 50352 || o.Entry == 50359 || o.Entry == 50821 || //o.Entry == 50817 || o.Entry == 50822 || o.Entry == 50816 || o.Entry == 50811 || //o.Entry == 50808 || o.Entry == 50820 || o.Entry == 50787 || o.Entry == 50806 || //o.Entry == 50789 || o.Entry == 50805 || o.Entry == 50783 || o.Entry == 50782 || //o.Entry == 50791 || o.Entry == 51059 || o.Entry == 50334 || o.Entry == 51078 || //o.Entry == 50331 || o.Entry == 50332 || o.Entry == 50333 || o.Entry == 50336) //{ // UsedPullRange = "3"; // Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to 3 because of other Pandaria Rares"); //} else if (!Rarekiller.Settings.DefaultPull && (Convert.ToInt64(UsedPullRange) > Convert.ToInt64(Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull)))) { UsedPullRange = Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull); Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to {0} because of Low-Ranged Customized Spell", Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull)); } else if (Rarekiller.Settings.DefaultPull && (Convert.ToInt64(UsedPullRange) > Convert.ToInt64(Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell)))) { UsedPullRange = Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell); Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to {0} because of Low-Ranged Default Spell", Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell)); } #endregion #region Move To Mob if (Enemy.Entry == 50817 || Enemy.Entry == 50768 || Enemy.Entry == 50836 || Enemy.Entry == 50782 || Enemy.Entry == 50331 || Enemy.Entry == 51078 || Enemy.Entry == 50822 || Enemy.Entry == 50831 || Enemy.Entry == 50832 || Enemy.Entry == 50769 || Enemy.Entry == 50749 || Enemy.Entry == 50334 || Enemy.Entry == 50347 || Enemy.Entry == 50811 || Enemy.Entry == 50821 || Enemy.Entry == 50808 || Enemy.Entry == 50820) { if (!Rarekiller.MoveTo(Enemy, Convert.ToInt64(UsedPullRange), true)) { return; } } else { if (!Rarekiller.MoveTo(Enemy, Convert.ToInt64(UsedPullRange), false)) { return; } } #endregion #region Special Behavior Nal'lak //if (Me.Combat && o.Entry == 50364) //Nal'lak //{ // WoWMovement.MoveStop(); // Thread.Sleep(100); // if (Me.IsFlying) // { // WoWUnit GroundUnit = ObjectManager.GetObjectsOfType<WoWUnit>().Where(u => (!u.IsFlying)).OrderBy(u => u.Distance).FirstOrDefault(); ; // if (!Rarekiller.DescendToLand(GroundUnit)) return; // } // Rarekiller.Dismount(); //} #endregion #region Special Behavior Clean up Area if (Enemy.Entry == 50749 || Enemy.Entry == 50334 || Enemy.Entry == 50347) { List <WoWUnit> AddList = ObjectManager.GetObjectsOfType <WoWUnit>().Where(Add => !Add.IsDead && Add.IsHostile && (Add != Enemy) && Add.Location.Distance(Enemy.Location) < 27 && Add.Location.Distance(Me.Location) < 27).OrderBy(Add => Add.Distance).ToList(); foreach (WoWUnit Add in AddList) { if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.RangedPullspell, Add, true); Logging.Write(Colors.MediumPurple, "Rarekiller: Clean up Area, pull Add: {0}", Add.Name); return; } } } #endregion #region Pull Mob Logging.Write(Colors.MediumPurple, "Rarekiller: Pull at Mob Location: {0} / {1} / {2}", Convert.ToString(Enemy.X), Convert.ToString(Enemy.Y), Convert.ToString(Enemy.Z)); Logging.Write(Colors.MediumPurple, "Rarekiller: ... my Location: {0} / {1} / {2}", Convert.ToString(Me.X), Convert.ToString(Me.Y), Convert.ToString(Me.Z)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Target is Flying - {0}", Enemy.IsFlying); Enemy.Target(); if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell) && (Enemy.Entry == 50817 || Enemy.Entry == 50768 || Enemy.Entry == 50836 || Enemy.Entry == 50782 || Enemy.Entry == 50331 || Enemy.Entry == 51078 || Enemy.Entry == 50822 || Enemy.Entry == 50831 || Enemy.Entry == 50832 || Enemy.Entry == 50769 || Enemy.Entry == 50749 || Enemy.Entry == 50334 || Enemy.Entry == 50347 || Enemy.Entry == 50811 || Enemy.Entry == 50821 || Enemy.Entry == 50808 || Enemy.Entry == 50820)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.RangedPullspell, Enemy, true); } else if (!(Rarekiller.Settings.DefaultPull) && SpellManager.HasSpell(Rarekiller.Settings.Pull)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Settings.Pull, Enemy, false); } else if (SpellManager.HasSpell(Rarekiller.Spells.FastPullspell)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.FastPullspell, Enemy, false); } else { Logging.Write(Colors.MediumPurple, "Rarekiller: I have no valid Pullspell - sorry"); } if (Me.CurrentTarget != Enemy) { Enemy.Target(); } #endregion #region Quick Slowfall for known flying Mobs if (Rarekiller.Settings.UseSlowfall && ((Enemy.Entry == 29753) || (Enemy.Entry == 32491) || (Enemy.Entry == 32630) || (Enemy.Entry == 33687) || (Enemy.Entry == 50364))) { Thread.Sleep(500); if (Me.IsFalling) { Rarekiller.Slowfall.HelpFalling(); } } Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Use Quick Slowfall: {0} Mob: {1}", Me.IsFalling, Enemy.Name); #endregion #region Pulltimer and Pullcounter WaitAfterPullTimer.Reset(); WaitAfterPullTimer.Start(); while (WaitAfterPullTimer.IsRunning && !Rarekiller.ToonInvalidCombat && WaitAfterPullTimer.ElapsedMilliseconds < 2000) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Wait for Combat now {0} ms", WaitAfterPullTimer.ElapsedMilliseconds); Thread.Sleep(100); } if (CastSuccess && Me.Combat) { Logging.Write(Colors.MediumPurple, "Rarekiller: Successfully pulled {0}", Enemy.Name); } if (Enemy.Entry != 32491 && Enemy.Entry != 50005 && (Rarekiller.Settings.GuidCurrentPull != Enemy.Guid) && Me.Combat) { Rarekiller.Settings.PullCounter = 1; Rarekiller.Settings.GuidCurrentPull = Enemy.Guid; Logging.Write(Colors.MediumPurple, "Rarekiller: Pulled {0} now first time", Enemy.Name); } else if (Me.Combat) { Rarekiller.Settings.PullCounter++; Logging.Write(Colors.MediumPurple, "Rarekiller: Pulled {0} now {1} times", Enemy.Name, Rarekiller.Settings.PullCounter); if ((Enemy.Entry == 50828 || Enemy.Entry == 50836 || Enemy.Entry == 50840 || Enemy.Entry == 50823 || Enemy.Entry == 50831 || Enemy.Entry == 50830 || Enemy.Entry == 50832 || Enemy.Entry == 50750 || Enemy.Entry == 50768 || Enemy.Entry == 50772 || Enemy.Entry == 50766 || Enemy.Entry == 50769 || Enemy.Entry == 50780 || Enemy.Entry == 50776 || Enemy.Entry == 50739 || Enemy.Entry == 50749 || Enemy.Entry == 50734 || Enemy.Entry == 50364 || Enemy.Entry == 50363 || Enemy.Entry == 50733 || Enemy.Entry == 50388 || Enemy.Entry == 50341 || Enemy.Entry == 50349 || Enemy.Entry == 50340 || Enemy.Entry == 50347 || Enemy.Entry == 50338 || Enemy.Entry == 50344 || Enemy.Entry == 50339 || Enemy.Entry == 50354 || Enemy.Entry == 50351 || Enemy.Entry == 50355 || Enemy.Entry == 50356 || Enemy.Entry == 50350 || Enemy.Entry == 50352 || Enemy.Entry == 50359 || Enemy.Entry == 50821 || Enemy.Entry == 50817 || Enemy.Entry == 50822 || Enemy.Entry == 50816 || Enemy.Entry == 50811 || Enemy.Entry == 50808 || Enemy.Entry == 50820 || Enemy.Entry == 50787 || Enemy.Entry == 50806 || Enemy.Entry == 50789 || Enemy.Entry == 50805 || Enemy.Entry == 50783 || Enemy.Entry == 50782 || Enemy.Entry == 50791 || Enemy.Entry == 51059 || Enemy.Entry == 50334 || Enemy.Entry == 51078 || Enemy.Entry == 50331 || Enemy.Entry == 50332 || Enemy.Entry == 50333 || Enemy.Entry == 50336) && Me.Level < 90) { RoutineManager.Current.Combat(); } } #endregion #region Move to a Save Fighting Area after Pull for some Pandaria Rares if ((Enemy.Entry == 50768 || Enemy.Entry == 50832) && Me.Combat) { WoWPoint SaveHelperpoint = Enemy.Location; Logging.Write(Colors.MediumPurple, "Rarekiller: Move to Save Fighting Point", Enemy.Entry); if (Enemy.Entry == 50768) { SaveHelperpoint = SavePoint50768; } if (Enemy.Entry == 50832) { SaveHelperpoint = SavePoint50832; } if (Navigator.CanNavigateFully(Me.Location, SaveHelperpoint)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Move to Save Fighting Point"); while (Me.Location.Distance(SaveHelperpoint) > 5) { if (Me.IsSwimming) { WoWMovement.ClickToMove(SaveHelperpoint); } else { Navigator.MoveTo(SaveHelperpoint); } Thread.Sleep(100); if (Rarekiller.ToonInvalid) { return; } } } else { Logging.Write(Colors.MediumPurple, "Rarekiller: Wasn't able to Move to Save Fighting Point", Enemy.Entry); } } #endregion return; } else { if (Enemy.Guid == Rarekiller.Settings.GuidCurrentPull) { Rarekiller.Settings.PullCounter = 0; Rarekiller.Settings.GuidCurrentPull = 0; Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Set PullCounter to {0}", Rarekiller.Settings.PullCounter); } if (Enemy.CanLoot) { if (!Rarekiller.Loothelper(Enemy)) { return; } } if (!Blacklist.Contains(Enemy.Guid, Rarekiller.Settings.Flags)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but sadly he's dead", Enemy.Name); Blacklist.Add(Enemy.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); } } }
public static WoWPoint SavePoint50832 = new WoWPoint(1749.258, 3209.693, 316.2377); // The Yowler #endregion /// <summary> /// Function to Find and Kill Mobs /// </summary> public void findAndKillMob() { bool CastSuccess = false; #region create List of Mobs in Reach // ----------------- Generate a List with all wanted Rares found in Object Manager --------------------- ObjectManager.Update(); List <WoWUnit> objList = ObjectManager.GetObjectsOfType <WoWUnit>() .Where(o => (!Blacklist.Contains(o.Guid, Rarekiller.Settings.Flags) && ( (Rarekiller.Settings.CATA && (Rarekiller.CataRaresList.ContainsKey(Convert.ToInt32(o.Entry)))) || (Rarekiller.Settings.Poseidus && ((o.Entry == 50005) || // Poseidus (o.Entry == 9999999))) || // Platzhalter (Rarekiller.Settings.TLPD && ((o.Entry == 32491) || // Timelost Protodrake (o.Entry == 32630))) || // Vyragosa (Rarekiller.Settings.WOTLK && (Rarekiller.FrostbittenList.ContainsKey(Convert.ToInt32(o.Entry)))) || (Rarekiller.Settings.BC && (Rarekiller.BloodyRareList.ContainsKey(Convert.ToInt32(o.Entry)))) || (Rarekiller.Settings.KillList && (Rarekiller.KillMobsList.ContainsKey(Convert.ToInt32(o.Entry)))) || //Kill Mobs from List (Rarekiller.Settings.KillList && o.TaggedByOther && (Rarekiller.TaggedMobsList.ContainsKey(Convert.ToInt32(o.Entry)))) || //Kill Tagged Mobs from List ((o.Level < Rarekiller.Settings.Level) && Rarekiller.Settings.LowRAR && (o.CreatureRank == Styx.WoWUnitClassificationType.Rare)) || // every single Rare Mob < Level 61 is hunted (Rarekiller.Settings.HUNTbyID && (o.Entry == Convert.ToInt64(Rarekiller.Settings.MobID))) // Hunt special IDs // Pandaria Rares || (Rarekiller.Settings.MOP && ( (o.Entry == 50828 && Rarekiller.Settings.Bonobos50828) || // (o.Entry == 50836 && Rarekiller.Settings.IkIk50836) || // (o.Entry == 50840 && Rarekiller.Settings.Nanners50840) || // (o.Entry == 50823 && Rarekiller.Settings.Ferocious50823) || // (o.Entry == 50831 && Rarekiller.Settings.Scritch50831) || // (o.Entry == 50830 && Rarekiller.Settings.Spriggin50830) || // (o.Entry == 50832 && Rarekiller.Settings.Yowler50832) || // (o.Entry == 50750 && Rarekiller.Settings.Aethis50750) || // (o.Entry == 50768 && Rarekiller.Settings.Cournith50768) || // (o.Entry == 50772 && Rarekiller.Settings.Eshelon50772) || // (o.Entry == 50766 && Rarekiller.Settings.Selena50766) || // (o.Entry == 50769 && Rarekiller.Settings.Zai50769) || // (o.Entry == 50780 && Rarekiller.Settings.Sahn50780) || // (o.Entry == 50776 && Rarekiller.Settings.Nalash50776) || // (o.Entry == 50739 && Rarekiller.Settings.Garlok50739) || // (o.Entry == 50749 && Rarekiller.Settings.Kaltik50749) || // (o.Entry == 50734 && Rarekiller.Settings.Lithik50734) || // (o.Entry == 50364 && Rarekiller.Settings.Nallak50364) || // (o.Entry == 50363 && Rarekiller.Settings.Kraxik50363) || // (o.Entry == 50733 && Rarekiller.Settings.Skithik50733) || // (o.Entry == 50388 && Rarekiller.Settings.Torik50388) || // (o.Entry == 50341 && Rarekiller.Settings.Borginn50341) || // (o.Entry == 50349 && Rarekiller.Settings.Kang50349) || // (o.Entry == 50340 && Rarekiller.Settings.Gaarn50340) || // (o.Entry == 50347 && Rarekiller.Settings.Karr50347) || // (o.Entry == 50338 && Rarekiller.Settings.Kornas50338) || // (o.Entry == 50344 && Rarekiller.Settings.Norlaxx50344) || // (o.Entry == 50339 && Rarekiller.Settings.Sulikshor50339) || // (o.Entry == 50354 && Rarekiller.Settings.Havak50354) || // (o.Entry == 50351 && Rarekiller.Settings.JonnDar50351) || // (o.Entry == 50355 && Rarekiller.Settings.Kahtir50355) || // (o.Entry == 50356 && Rarekiller.Settings.Krol50356) || // (o.Entry == 50350 && Rarekiller.Settings.Morgrinn50350) || // (o.Entry == 50352 && Rarekiller.Settings.Qunas50352) || // (o.Entry == 50359 && Rarekiller.Settings.Urgolax50359) || // (o.Entry == 50821 && Rarekiller.Settings.AiLi50821) || // (o.Entry == 50817 && Rarekiller.Settings.Ahone50817) || // (o.Entry == 50822 && Rarekiller.Settings.AiRan50822) || // (o.Entry == 50816 && Rarekiller.Settings.Ruun50816) || // (o.Entry == 50811 && Rarekiller.Settings.Nasra50811) || // (o.Entry == 50808 && Rarekiller.Settings.Urobi50808) || // (o.Entry == 50820 && Rarekiller.Settings.Yul50820) || // (o.Entry == 50787 && Rarekiller.Settings.Arness50787) || // (o.Entry == 50806 && Rarekiller.Settings.Moldo50806) || // (o.Entry == 50789 && Rarekiller.Settings.Nessos50789) || // (o.Entry == 50805 && Rarekiller.Settings.Omnis50805) || // (o.Entry == 50783 && Rarekiller.Settings.Salyin50783) || // (o.Entry == 50782 && Rarekiller.Settings.Sarnak50782) || // (o.Entry == 50791 && Rarekiller.Settings.Siltriss50791) || // (o.Entry == 51059 && Rarekiller.Settings.Blackhoof51059) || // (o.Entry == 50334 && Rarekiller.Settings.Dak50334) || // (o.Entry == 51078 && Rarekiller.Settings.Ferdinand51078) || // (o.Entry == 50331 && Rarekiller.Settings.GoKan50331) || // (o.Entry == 50332 && Rarekiller.Settings.Korda50332) || // (o.Entry == 50333 && Rarekiller.Settings.Lon50333) || // (o.Entry == 50336 && Rarekiller.Settings.Yorik50336) // )) ))) .OrderBy(o => o.Distance).ToList(); #endregion foreach (WoWUnit o in objList) { if (!o.IsDead && !o.IsPet) { #region don't kill if // Don't kill Pandaria Rares with Low Health if ((o.Entry == 50828 || o.Entry == 50836 || o.Entry == 50840 || o.Entry == 50823 || o.Entry == 50831 || o.Entry == 50830 || o.Entry == 50832 || o.Entry == 50750 || o.Entry == 50768 || o.Entry == 50772 || o.Entry == 50766 || o.Entry == 50769 || o.Entry == 50780 || o.Entry == 50776 || o.Entry == 50739 || o.Entry == 50749 || o.Entry == 50734 || o.Entry == 50364 || o.Entry == 50363 || o.Entry == 50733 || o.Entry == 50388 || o.Entry == 50341 || o.Entry == 50349 || o.Entry == 50340 || o.Entry == 50347 || o.Entry == 50338 || o.Entry == 50344 || o.Entry == 50339 || o.Entry == 50354 || o.Entry == 50351 || o.Entry == 50355 || o.Entry == 50356 || o.Entry == 50350 || o.Entry == 50352 || o.Entry == 50359 || o.Entry == 50821 || o.Entry == 50817 || o.Entry == 50822 || o.Entry == 50816 || o.Entry == 50811 || o.Entry == 50808 || o.Entry == 50820 || o.Entry == 50787 || o.Entry == 50806 || o.Entry == 50789 || o.Entry == 50805 || o.Entry == 50783 || o.Entry == 50782 || o.Entry == 50791 || o.Entry == 51059 || o.Entry == 50334 || o.Entry == 51078 || o.Entry == 50331 || o.Entry == 50332 || o.Entry == 50333 || o.Entry == 50336) && Me.HealthPercent < 80) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}, but don't Kill Pandaria Mob with Health < 80%", o.Name, o.Entry); return; } if (Rarekiller.Settings.NotKillTameable && o.IsTameable) // ... I want to tame him :) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}, but kill tameable", o.Name, o.Entry); return; } #endregion Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Find a hunted Mob called {0} ID {1}", o.Name, o.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Mob Location: {0} / {1} / {2}", Convert.ToString(o.X), Convert.ToString(o.Y), Convert.ToString(o.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", o.Name, o.Entry); } #region don't kill if ... if (Rarekiller.Settings.PullCounter >= Rarekiller.Settings.MaxPullCounter) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but I pulled him now {1} Times", o.Name, Rarekiller.Settings.PullCounter); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist15)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 15 Minutes, MoP Rares will be deactivated"); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: I pulled now {0} times, blacklist')", Rarekiller.Settings.PullCounter); } Rarekiller.Settings.PullCounter = 0; Rarekiller.Settings.GuidCurrentPull = 0; Rarekiller.Settings.BlacklistCounter++; Rarekiller.Settings.DeactivateMoPRare(o); return; } // Don't kill Pandaria Rares with Level < 90 if ((o.Entry == 50828 || o.Entry == 50836 || o.Entry == 50840 || o.Entry == 50823 || o.Entry == 50831 || o.Entry == 50830 || o.Entry == 50832 || o.Entry == 50750 || o.Entry == 50768 || o.Entry == 50772 || o.Entry == 50766 || o.Entry == 50769 || o.Entry == 50780 || o.Entry == 50776 || o.Entry == 50739 || o.Entry == 50749 || o.Entry == 50734 || o.Entry == 50364 || o.Entry == 50363 || o.Entry == 50733 || o.Entry == 50388 || o.Entry == 50341 || o.Entry == 50349 || o.Entry == 50340 || o.Entry == 50347 || o.Entry == 50338 || o.Entry == 50344 || o.Entry == 50339 || o.Entry == 50354 || o.Entry == 50351 || o.Entry == 50355 || o.Entry == 50356 || o.Entry == 50350 || o.Entry == 50352 || o.Entry == 50359 || o.Entry == 50821 || o.Entry == 50817 || o.Entry == 50822 || o.Entry == 50816 || o.Entry == 50811 || o.Entry == 50808 || o.Entry == 50820 || o.Entry == 50787 || o.Entry == 50806 || o.Entry == 50789 || o.Entry == 50805 || o.Entry == 50783 || o.Entry == 50782 || o.Entry == 50791 || o.Entry == 51059 || o.Entry == 50334 || o.Entry == 51078 || o.Entry == 50331 || o.Entry == 50332 || o.Entry == 50333 || o.Entry == 50336) && Me.Level < 90) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but my level is to Low to kill him", o.Name); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: My Level is to low')", o.Name); } return; } if (o.TaggedByOther && !Rarekiller.TaggedMobsList.ContainsKey(Convert.ToInt32(o.Entry))) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but he's tagged by another Player", o.Name); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is tagged')", o.Name); } return; } //if not known ID of Inhouse Pandaria Rare --> don't kill if (!(o.Entry == 50817 || o.Entry == 50768 || o.Entry == 50836 || o.Entry == 50782 || o.Entry == 50331 || o.Entry == 51078 || o.Entry == 50822 || o.Entry == 50831 || o.Entry == 50832 || o.Entry == 50769)) { if (Me.IsFlying && Me.IsOutdoors && o.IsIndoors) { Logging.Write(Colors.MediumPurple, "Rarekiller: Mob is Indoors and I fly Outdoors, so blacklist him to prevent Problems"); Logging.Write(Colors.MediumPurple, "Rarekiller: You have to place me next to the Spawnpoint, if you want me to hunt this Mob."); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is Indoors')", o.Name); } return; } } if (o.Level > (Me.Level + 4)) // ... 4 Levels higher them me { Logging.Write(Colors.MediumPurple, "Rarekiller: His Level is 5 over mine, better not to kill him."); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); return; } if (o.IsFriendly) // ... is Friendly { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but he's friendly", o.Name); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is friendly')", o.Name); } return; } if ((o.Entry == 32630) && !Rarekiller.Settings.Vyragosa) // ... my Settings say don't kill Vyragosa { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Config says: don't kill Vyragosa."); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: don't kill NPC')", o.Name); } return; } if ((o.Entry == 50057) && !Rarekiller.Settings.Blazewing) // ... my Settings say don't kill Blazewing { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Config says: don't kill Blazewing."); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: don't kill NPC')", o.Name); } return; } if ((o.Entry == 596) || (o.Entry == 599) || Me.IsInInstance) { // ... Instance Mobs, don't run wild in Instances Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Don't run wild because of RareMobs in Instances."); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); return; } if (Rarekiller.BlacklistMobsList.ContainsKey(Convert.ToInt32(o.Entry))) // ... Mob is Blacklisted in Rarekiller/config/BlacklistedMobs.xml { Logging.Write(Colors.MediumPurple, "Rarekiller: {0} is Member of the BlacklistedMobs.xml", o.Name); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist15)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 15 Minutes."); return; } if (Rarekiller.DontInteract) { return; } #endregion if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region fly to Helperpoint for some Pandaria Rares if (Me.IsFlying && (o.Entry == 50817 || o.Entry == 50768 || o.Entry == 50836 || o.Entry == 50782 || o.Entry == 50331 || o.Entry == 51078 || o.Entry == 50822 || o.Entry == 50831 || o.Entry == 50832 || o.Entry == 50769 || o.Entry == 50749 || o.Entry == 50334 || o.Entry == 50347 || o.Entry == 50811 || o.Entry == 50821 || o.Entry == 50808 || o.Entry == 50820)) { WoWPoint Helperpoint = o.Location; if (o.Entry == 50817) { Helperpoint = LandingPoint50817; } if (o.Entry == 50768) { Helperpoint = LandingPoint50768; } if (o.Entry == 50836) { Helperpoint = LandingPoint50836; } if (o.Entry == 50782) { Helperpoint = LandingPoint50782; } if (o.Entry == 50831) { Helperpoint = LandingPoint50831; } if (o.Entry == 50832) { Helperpoint = LandingPoint50832; } if (o.Entry == 50769) { Helperpoint = LandingPoint50769; } if (o.Entry == 50822) { Helperpoint = LandingPoint50822; } if (o.Entry == 50331) { Helperpoint = LandingPoint50331; } if (o.Entry == 51078) { Helperpoint = LandingPoint51078; } if (o.Entry == 50749) { Helperpoint = LandingPoint50749; } if (o.Entry == 50334) { Helperpoint = LandingPoint50334; } if (o.Entry == 50347) { Helperpoint = LandingPoint50347; } if (o.Entry == 50811) { Helperpoint = LandingPoint50811; } if (o.Entry == 50821) { Helperpoint = LandingPoint50821; } if (o.Entry == 50808) { Helperpoint = LandingPoint50808; } if (o.Entry == 50820) { Helperpoint = LandingPoint50820; } if (!Rarekiller.MoveTo(Helperpoint, o, 5, false)) { return; } Rarekiller.Dismount(); } #endregion #region Check PullRange if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell) && ( o.Entry == 50836 || o.Entry == 50782 || o.Entry == 50331 || o.Entry == 51078 || o.Entry == 50822 || o.Entry == 50831 || o.Entry == 50832 || o.Entry == 50768 || o.Entry == 50749 || o.Entry == 50334 || o.Entry == 50347 || o.Entry == 50811 || o.Entry == 50821 || o.Entry == 50808 || o.Entry == 50820)) { Rarekiller.Settings.Range = "27"; Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to 27 because of Inhouse Pandaria Rare"); } else if (o.Entry == 50828 || o.Entry == 50836 || o.Entry == 50840 || o.Entry == 50823 || o.Entry == 50831 || o.Entry == 50830 || o.Entry == 50832 || o.Entry == 50750 || o.Entry == 50768 || o.Entry == 50772 || o.Entry == 50766 || o.Entry == 50769 || o.Entry == 50780 || o.Entry == 50776 || o.Entry == 50739 || o.Entry == 50749 || o.Entry == 50734 || o.Entry == 50364 || o.Entry == 50363 || o.Entry == 50733 || o.Entry == 50388 || o.Entry == 50341 || o.Entry == 50349 || o.Entry == 50340 || o.Entry == 50347 || o.Entry == 50338 || o.Entry == 50344 || o.Entry == 50339 || o.Entry == 50354 || o.Entry == 50351 || o.Entry == 50355 || o.Entry == 50356 || o.Entry == 50350 || o.Entry == 50352 || o.Entry == 50359 || o.Entry == 50821 || o.Entry == 50817 || o.Entry == 50822 || o.Entry == 50816 || o.Entry == 50811 || o.Entry == 50808 || o.Entry == 50820 || o.Entry == 50787 || o.Entry == 50806 || o.Entry == 50789 || o.Entry == 50805 || o.Entry == 50783 || o.Entry == 50782 || o.Entry == 50791 || o.Entry == 51059 || o.Entry == 50334 || o.Entry == 51078 || o.Entry == 50331 || o.Entry == 50332 || o.Entry == 50333 || o.Entry == 50336) { Rarekiller.Settings.Range = "3"; Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to 3 because of other Pandaria Rares"); } else if (!Rarekiller.Settings.DefaultPull && (Convert.ToInt64(Rarekiller.Settings.Range) > Convert.ToInt64(Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull)))) { Rarekiller.Settings.Range = Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull); Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to {0} because of Low-Ranged Customized Spell", Rarekiller.Spells.RangeCheck(Rarekiller.Settings.Pull)); } else if (Rarekiller.Settings.DefaultPull && (Convert.ToInt64(Rarekiller.Settings.Range) > Convert.ToInt64(Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell)))) { Rarekiller.Settings.Range = Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell); Logging.Write(Colors.MediumPurple, "Rarekiller: Set Range to {0} because of Low-Ranged Default Spell", Rarekiller.Spells.RangeCheck(Rarekiller.Spells.FastPullspell)); } #endregion #region Move To Mob if (o.Entry == 50817 || o.Entry == 50768 || o.Entry == 50836 || o.Entry == 50782 || o.Entry == 50331 || o.Entry == 51078 || o.Entry == 50822 || o.Entry == 50831 || o.Entry == 50832 || o.Entry == 50769 || o.Entry == 50749 || o.Entry == 50334 || o.Entry == 50347 || o.Entry == 50811 || o.Entry == 50821 || o.Entry == 50808 || o.Entry == 50820) { if (!Rarekiller.MoveTo(o, Convert.ToInt64(Rarekiller.Settings.Range), true)) { return; } } else { if (!Rarekiller.MoveTo(o, Convert.ToInt64(Rarekiller.Settings.Range), false)) { return; } } #endregion #region Special Behavior Nal'lak //if (Me.Combat && o.Entry == 50364) //Nal'lak //{ // WoWMovement.MoveStop(); // Thread.Sleep(100); // if (Me.IsFlying) // { // WoWUnit GroundUnit = ObjectManager.GetObjectsOfType<WoWUnit>().Where(u => (!u.IsFlying)).OrderBy(u => u.Distance).FirstOrDefault(); ; // if (!Rarekiller.DescendToLand(GroundUnit)) return; // } // Rarekiller.Dismount(); //} #endregion #region Special Behavior Clean up Area if (o.Entry == 50749 || o.Entry == 50334 || o.Entry == 50347) { ObjectManager.Update(); List <WoWUnit> AddList = ObjectManager.GetObjectsOfType <WoWUnit>().Where(Add => !Add.IsDead && Add.IsHostile && (Add != o) && Add.Location.Distance(o.Location) < 27 && Add.Location.Distance(Me.Location) < 27).OrderBy(Add => Add.Distance).ToList(); foreach (WoWUnit Add in AddList) { if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.RangedPullspell, Add, true); Logging.Write(Colors.MediumPurple, "Rarekiller: Clean up Area, pull Add: {0}", Add.Name); return; } } } #endregion #region Pull Mob Logging.Write(Colors.MediumPurple, "Rarekiller: Pull at Mob Location: {0} / {1} / {2}", Convert.ToString(o.X), Convert.ToString(o.Y), Convert.ToString(o.Z)); Logging.Write(Colors.MediumPurple, "Rarekiller: ... my Location: {0} / {1} / {2}", Convert.ToString(Me.X), Convert.ToString(Me.Y), Convert.ToString(Me.Z)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Target is Flying - {0}", o.IsFlying); o.Target(); if (SpellManager.HasSpell(Rarekiller.Spells.RangedPullspell) && (o.Entry == 50817 || o.Entry == 50768 || o.Entry == 50836 || o.Entry == 50782 || o.Entry == 50331 || o.Entry == 51078 || o.Entry == 50822 || o.Entry == 50831 || o.Entry == 50832 || o.Entry == 50769 || o.Entry == 50749 || o.Entry == 50334 || o.Entry == 50347 || o.Entry == 50811 || o.Entry == 50821 || o.Entry == 50808 || o.Entry == 50820)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.RangedPullspell, o, true); } else if (!(Rarekiller.Settings.DefaultPull) && SpellManager.HasSpell(Rarekiller.Settings.Pull)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Settings.Pull, o, false); } else if (SpellManager.HasSpell(Rarekiller.Spells.FastPullspell)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.FastPullspell, o, false); } else { Logging.Write(Colors.MediumPurple, "Rarekiller: I have no valid Pullspell - sorry"); } if (Me.CurrentTarget != o) { o.Target(); } #endregion #region Quick Slowfall for known flying Mobs if (Rarekiller.Settings.UseSlowfall && ((o.Entry == 29753) || (o.Entry == 32491) || (o.Entry == 32630) || (o.Entry == 33687) || (o.Entry == 50364))) { Thread.Sleep(500); if (Me.IsFalling) { Rarekiller.Slowfall.HelpFalling(); } } Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Use Quick Slowfall: {0} Mob: {1}", Me.IsFalling, o.Name); #endregion #region Pulltimer and Pullcounter WaitAfterPullTimer.Reset(); WaitAfterPullTimer.Start(); while (WaitAfterPullTimer.IsRunning && !Rarekiller.ToonInvalidCombat && WaitAfterPullTimer.ElapsedMilliseconds < 2000) { Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Wait for Combat now {0} ms", WaitAfterPullTimer.ElapsedMilliseconds); Thread.Sleep(100); } if (CastSuccess && Me.Combat) { Logging.Write(Colors.MediumPurple, "Rarekiller: Successfully pulled {0}", o.Name); } if (o.Entry != 32491 && o.Entry != 50005 && (Rarekiller.Settings.GuidCurrentPull != o.Guid) && Me.Combat) { Rarekiller.Settings.PullCounter = 1; Rarekiller.Settings.GuidCurrentPull = o.Guid; Logging.Write(Colors.MediumPurple, "Rarekiller: Pulled {0} now first time", o.Name); } else if (Me.Combat) { Rarekiller.Settings.PullCounter++; Logging.Write(Colors.MediumPurple, "Rarekiller: Pulled {0} now {1} times", o.Name, Rarekiller.Settings.PullCounter); if ((o.Entry == 50828 || o.Entry == 50836 || o.Entry == 50840 || o.Entry == 50823 || o.Entry == 50831 || o.Entry == 50830 || o.Entry == 50832 || o.Entry == 50750 || o.Entry == 50768 || o.Entry == 50772 || o.Entry == 50766 || o.Entry == 50769 || o.Entry == 50780 || o.Entry == 50776 || o.Entry == 50739 || o.Entry == 50749 || o.Entry == 50734 || o.Entry == 50364 || o.Entry == 50363 || o.Entry == 50733 || o.Entry == 50388 || o.Entry == 50341 || o.Entry == 50349 || o.Entry == 50340 || o.Entry == 50347 || o.Entry == 50338 || o.Entry == 50344 || o.Entry == 50339 || o.Entry == 50354 || o.Entry == 50351 || o.Entry == 50355 || o.Entry == 50356 || o.Entry == 50350 || o.Entry == 50352 || o.Entry == 50359 || o.Entry == 50821 || o.Entry == 50817 || o.Entry == 50822 || o.Entry == 50816 || o.Entry == 50811 || o.Entry == 50808 || o.Entry == 50820 || o.Entry == 50787 || o.Entry == 50806 || o.Entry == 50789 || o.Entry == 50805 || o.Entry == 50783 || o.Entry == 50782 || o.Entry == 50791 || o.Entry == 51059 || o.Entry == 50334 || o.Entry == 51078 || o.Entry == 50331 || o.Entry == 50332 || o.Entry == 50333 || o.Entry == 50336) && Me.Level < 90) { RoutineManager.Current.Combat(); } } #endregion #region Move to a Save Fighting Area after Pull for some Pandaria Rares if ((o.Entry == 50768 || o.Entry == 50832) && Me.Combat) { WoWPoint SaveHelperpoint = o.Location; Logging.Write(Colors.MediumPurple, "Rarekiller: Move to Save Fighting Point", o.Entry); if (o.Entry == 50768) { SaveHelperpoint = SavePoint50768; } if (o.Entry == 50832) { SaveHelperpoint = SavePoint50832; } if (Navigator.CanNavigateFully(Me.Location, SaveHelperpoint)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Move to Save Fighting Point"); while (Me.Location.Distance(SaveHelperpoint) > 5) { if (Me.IsSwimming) { WoWMovement.ClickToMove(SaveHelperpoint); } else { Navigator.MoveTo(SaveHelperpoint); } Thread.Sleep(100); if (Rarekiller.ToonInvalid) { return; } } } else { Logging.Write(Colors.MediumPurple, "Rarekiller: Wasn't able to Move to Save Fighting Point", o.Entry); } } #endregion return; } else if (o.IsDead) { if (o.Guid == Rarekiller.Settings.GuidCurrentPull) { Rarekiller.Settings.PullCounter = 0; Rarekiller.Settings.GuidCurrentPull = 0; Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Set PullCounter to {0}", Rarekiller.Settings.PullCounter); } if (o.CanLoot) { if (!Rarekiller.Loothelper(o)) { return; } } if (!Blacklist.Contains(o.Guid, Rarekiller.Settings.Flags)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but sadly he's dead", o.Name); Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Mob for 60 Minutes."); } } } }
/// <summary> /// Function to Find and Tame Mobs /// </summary> public void findAndTameMob(WoWUnit tamePet) { if (Me.Class != WoWClass.Hunter && !Rarekiller.Settings.TestcaseTamer) { return; } if (!tamePet.IsDead) { Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Found a new Pet {0} ID {1}", tamePet.Name, tamePet.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Unit Location: {0} / {1} / {2}", Convert.ToString(tamePet.X), Convert.ToString(tamePet.Y), Convert.ToString(tamePet.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", tamePet.Name, tamePet.Entry); } #region don't tame if // Don't tame the Rare if ... if (Me.IsFlying && Me.IsOutdoors && tamePet.IsIndoors) { Logging.Write(Colors.MediumPurple, "Rarekiller: Unit is Indoors and I fly Outdoors, so blacklist him to prevent Problems"); Logging.Write(Colors.MediumPurple, "Rarekiller: You have to place me next to the Spawnpoint, if you want me to hunt this Unit."); Blacklist.Add(tamePet.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.WriteDiagnostic(Colors.MediumPurple, " Part TamerRarekiller: Blacklist Unit for 5 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is Indoors')", tamePet.Name); } return; } if (Me.Level < tamePet.Level) { Logging.Write(Colors.MediumPurple, "Rarekiller: Unit Level is higher then mine, can't tame the Unit."); Blacklist.Add(tamePet.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Unit for 60 Minutes."); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC Level is to high to tame')", tamePet.Name); } return; } if (Rarekiller.BlacklistMobsList.ContainsKey(Convert.ToInt32(tamePet.Entry))) { Logging.Write(Colors.MediumPurple, "Rarekiller: {0} is Member of the BlacklistedMobs.xml", tamePet.Name); Blacklist.Add(tamePet.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist15)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Blacklist Unit for 15 Minutes."); return; } if (Rarekiller.DontInteract) { return; } #endregion //Dismiss Pet if (Me.Class == WoWClass.Hunter && Me.Pet != null) { RarekillerSpells.CastSafe("Dismiss Pet", Me, false); //SpellManager.Cast("Dismiss Pet"); Thread.Sleep(3000); } if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region Move to tameable Unit if (!Rarekiller.MoveTo(tamePet, 20, false)) { return; } if (Me.IsFlying) { if (!Rarekiller.DescendToLand(tamePet)) { return; } } Rarekiller.Dismount(); #endregion tamePet.Target(); if (Me.Class == WoWClass.Hunter) { #region Tame while (!tamePet.IsPet) { if (tamePet.IsDead) { Logging.Write(Colors.MediumPurple, "Rarekiller: Oh no, I accidently killed him !!! "); return; } if (Me.HealthPercent < 10) { Logging.Write(Colors.MediumPurple, "Rarekiller: Health < 10% , Use Feign Death !!! "); if (SpellManager.CanCast("Feign Death")) { RarekillerSpells.CastSafe("Feign Death", Me, false); } //SpellManager.Cast("Feign Death"); return; } if (!(Me.CastingSpellId == 1515)) { WoWMovement.MoveStop(); RarekillerSpells.CastSafe("Tame Beast", tamePet, true); //SpellManager.Cast(1515); Logging.Write(Colors.MediumPurple, "Rarekiller: Try to tame Beast {0}", tamePet.Name); Thread.Sleep(500); } } Logging.Write(Colors.MediumPurple, "Rarekiller: Sucessfully tamed Beast {0}", tamePet.Name); #endregion } else { #region Testcase for my Shammi while (!tamePet.IsDead) { Logging.Write(Colors.MediumPurple, "Rarekiller Test: Try to tame Beast", tamePet.Name); Thread.Sleep(1500); } #endregion } } else if (tamePet.IsPet) { return; } else if (Blacklist.Contains(tamePet.Guid, Rarekiller.Settings.Flags)) { return; } else { Logging.Write(Colors.MediumPurple, "Rarekiller: Find a Unit, but sadly he's dead or not tameable: {0}", tamePet.Name); Blacklist.Add(tamePet.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); Logging.Write(Colors.MediumPurple, "Rarekiller: Blacklist Unit for 5 Minutes."); return; } }
/// <summary> /// Function to Find and Alert for Footsteps (Pandaria Rares to Tame) /// </summary> public void findandfollowFootsteps() { if (Me.Class != WoWClass.Hunter && !Rarekiller.Settings.TestcaseTamer) { return; } #region create a List with Objects in Reach // ----------------- Generate a List with all wanted Nests found in Object Manager --------------------- WoWGameObject Footprint = ObjectManager.GetObjectsOfType <WoWGameObject>() .Where(o => (!Blacklist.Contains(o.Guid, Rarekiller.Settings.Flags) && ( (o.Entry == 214430) || //patrannache footprint (o.Entry == 214429) || //rockhide the immovable footprint (o.Entry == 214431) || //bloodtooth footprint (o.Entry == 214432) || //hexapos footprint (o.Entry == 214433) || //stompy footprint (o.Entry == 214434) || //bristlespine footprint (o.Entry == 214435) || //portent footprint (o.Entry == 214436) || //savage footprint (o.Entry == 214437) || //glimmer footprint ((o.Entry == 210565) && Rarekiller.Settings.TestcaseTamer) //Testcase for Developer ))) .OrderBy(o => o.Distance).FirstOrDefault(); #endregion List <WoWUnit> RareList = ObjectManager.GetObjectsOfType <WoWUnit>() .Where(r => ((r.CreatureRank == Styx.WoWUnitClassificationType.Rare) && r.Level > 85 && !r.IsDead)).OrderBy(r => r.Distance).ToList(); Logging.Write(Colors.MediumPurple, "Rarekiller: Found a Footprint {0} ID {1}", Footprint.Name, Footprint.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Footprint Location: {0} / {1} / {2}", Convert.ToString(Footprint.X), Convert.ToString(Footprint.Y), Convert.ToString(Footprint.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", Footprint.Name, Footprint.Entry); } if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region don't follow, if ... // ----------------- don't collect if Rare Pandaria Elite Around if (RareList != null) { foreach (WoWUnit r in RareList) { if (r.Location.Distance(Footprint.Location) < 30) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach Footprint because there's a Rare Elite around, Blacklist and move on", Footprint.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Footprint Elite Rare around')", Footprint.Name); } Blacklist.Add(Footprint.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } } } if (Rarekiller.DontInteract) { return; } #endregion while (Footprint != null) { if (Rarekiller.ToonInvalidCombat) { return; } Rarekiller.MoveTo(Footprint, 10, false); #region Alert if (!Alerttimer.IsRunning) { Alerttimer.Reset(); Alerttimer.Start(); } // ----------------- Alert --------------------- if (Rarekiller.Settings.Alert && Alerttimer.Elapsed.TotalSeconds > 20) { Rarekiller.Alert(); Alerttimer.Reset(); Alerttimer.Start(); } #endregion #region create a List with Objects in Reach // ----------------- Generate a List with all wanted Nests found in Object Manager --------------------- Footprint = ObjectManager.GetObjectsOfType <WoWGameObject>() .Where(o => (!Blacklist.Contains(o.Guid, Rarekiller.Settings.Flags) && ( (o.Entry == 214430) || //patrannache footprint (o.Entry == 214429) || //rockhide the immovable footprint (o.Entry == 214431) || //bloodtooth footprint (o.Entry == 214432) || //hexapos footprint (o.Entry == 214433) || //stompy footprint (o.Entry == 214434) || //bristlespine footprint (o.Entry == 214435) || //portent footprint (o.Entry == 214436) || //savage footprint (o.Entry == 214437) || //glimmer footprint ((o.Entry == 210565) && Rarekiller.Settings.TestcaseTamer) //Testcase for Developer ))) .OrderBy(o => o.Distance).FirstOrDefault(); #endregion } }
/// <summary> /// Function to Find and Kill Dormus /// </summary> public void findAndKillDormus() { bool CastSuccess = false; //Testcases --> 51756 = Blutelfenjunge --> 52008 = Resortangestellter --> 50245 = Dormus int IDDormus = 50245; //Testcases --> 6346 = Fear Ward --> 974 = Earthsschild --> Dormus' Rage = 93269 int IDDormusAura = 93269; ObjectManager.Update(); WoWUnit Dormus = ObjectManager.GetObjectsOfType <WoWUnit>().Where(u => u.Entry == IDDormus).OrderBy(u => u.Distance).FirstOrDefault(); #region Move to Dormus Helperpoint while (Me.HasAura(IDDormusAura) && Dormus == null && !Me.Combat && Me.Location.Distance(DormusPoint) > 5 && Me.Location.Distance(DormusPoint) < 500) { WoWMovement.ClickToMove(DormusPoint); Logging.Write(Colors.MediumPurple, "Rarekiller: Dormus not in sight, Swim to Dormus Helper Point"); Thread.Sleep(500); ObjectManager.Update(); Dormus = ObjectManager.GetObjectsOfType <WoWUnit>().Where(u => u.Entry == IDDormus).OrderBy(u => u.Distance).FirstOrDefault(); } #endregion if (Dormus != null) { if (!Dormus.IsDead) { Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Find {0}", Dormus.Name); if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } Dormus.Target(); #region Move to Dormus // ------------- Move to Dormus with Klick to Move ------------------- while (DormusPoint.Distance(Me.Location) > 5 && Me.HasAura(IDDormusAura) && !Dormus.IsDead && !Rarekiller.Settings.ReachedDormusHelperpoint) { WoWMovement.ClickToMove(DormusPoint); Thread.Sleep(100); Logging.Write(Colors.MediumPurple, "Rarekiller: Move out of Water to Helperpoint"); if (Rarekiller.ToonInvalidCombat) { return; } } Logging.Write(Colors.MediumPurple, "Rarekiller: Reached Dormus Helperpoint"); Rarekiller.Settings.ReachedDormusHelperpoint = true; while (Dormus.Location.Distance(Me.Location) > 3 && Me.HasAura(IDDormusAura) && !Dormus.IsDead) { if (Navigator.CanNavigateFully(Me.Location, Dormus.Location)) { Navigator.MoveTo(Dormus.Location); } else { Logging.Write(Colors.MediumPurple, "Rarekiller: Navigation Issue, use Click to Move"); WoWMovement.ClickToMove(Dormus.Location); } Thread.Sleep(100); Logging.Write(Colors.MediumPurple, "Rarekiller: Move to Dormus"); if (Rarekiller.ToonInvalidCombat) { return; } } WoWMovement.MoveStop(); #endregion #region Pull Dormus // ------------- pull Dormus ------------------- Logging.Write(Colors.MediumPurple, "Rarekiller: Distance: {0}", Dormus.Location.Distance(Me.Location)); Dormus.Target(); Dormus.Face(); Thread.Sleep(100); if (!(Rarekiller.Settings.DefaultPull) && SpellManager.HasSpell(Rarekiller.Settings.Pull)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Settings.Pull, Dormus, false); } //CastSuccess = SpellManager.Cast(Rarekiller.Settings.Pull, Dormus); else if (SpellManager.HasSpell(Rarekiller.Spells.FastPullspell)) { CastSuccess = RarekillerSpells.CastSafe(Rarekiller.Spells.FastPullspell, Dormus, false); } //CastSuccess = SpellManager.Cast(Rarekiller.Spells.FastPullspell, Dormus); else { Logging.Write(Colors.MediumPurple, "Rarekiller: I have no Pullspell"); } if (!CastSuccess && SpellManager.HasSpell("Shoot")) { CastSuccess = RarekillerSpells.CastSafe("Shoot", Dormus, true); } //CastSuccess = SpellManager.Cast("Shoot", Dormus); if (CastSuccess) { Logging.Write(Colors.MediumPurple, "Rarekiller: successfully pulled Dormus"); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Pull Distance: {0}", Dormus.Location.Distance(Me.Location)); return; } else if (!CastSuccess && Me.Combat) { Logging.Write(Colors.MediumPurple, "Rarekiller: got Aggro"); } else { Logging.Write(Colors.MediumPurple, "Rarekiller: Pull Fails --> next try"); } #endregion } else if (!Blacklist.Contains(Dormus.Guid, Rarekiller.Settings.Flags)) { if (Dormus.CanLoot) { if (!Rarekiller.Loothelper(Dormus)) { return; } } if (!Blacklist.Contains(Dormus.Guid, Rarekiller.Settings.Flags)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Find {0}, but sadly he's dead", Dormus.Name); Blacklist.Add(Dormus.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); Logging.Write(Colors.MediumPurple, "Rarekiller: Blacklist Unit for 60 Minutes."); } } } }
/// <summary> /// Function to Find and Interact with NPCs /// </summary> public void findAndInteractNPC(WoWUnit InteractNPC) { List <WoWUnit> RareList = ObjectManager.GetObjectsOfType <WoWUnit>() .Where(r => ((r.CreatureRank == Styx.WoWUnitClassificationType.Rare) && r.Level > 85 && !r.IsDead)).OrderBy(r => r.Distance).ToList(); bool Forceground = false; Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Find NPC {0} ID {1}", InteractNPC.Name, InteractNPC.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: NPC Location: {0} / {1} / {2}", Convert.ToString(InteractNPC.X), Convert.ToString(InteractNPC.Y), Convert.ToString(InteractNPC.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", InteractNPC.Name, InteractNPC.Entry); } if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region don't collect if ... // ----------------- Underground ---------- //if not ID of Underground NPCs of Another Mans Treasure --> don't collect if (!(InteractNPC.Entry == 64227)) { if (InteractNPC.IsIndoors && Me.IsFlying && Me.IsOutdoors && (InteractNPC.Location.Distance(Me.Location) > 30)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach NPC because it is Indoors and I fly Outdoors {0}, Blacklist and Move on", InteractNPC.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC is Indoors')", InteractNPC.Name); } Blacklist.Add(InteractNPC.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } } // ----------------- don't collect if Rare Pandaria Elite Around if (RareList != null) { foreach (WoWUnit r in RareList) { if (r.Location.Distance(InteractNPC.Location) < 30) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach NPC because there's a Rare Elite around, Blacklist and move on", InteractNPC.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: NPC Elite Rare around')", InteractNPC.Name); } Blacklist.Add(InteractNPC.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } } } if (Rarekiller.Settings.PlayerScan && RarekillerSecurity.PlayerAround(InteractNPC)) { Logging.Write(Colors.MediumPurple, "Rarekiller: There are other Players around, so move on"); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Other Players around')"); } Blacklist.Add(InteractNPC.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } if (Rarekiller.DontInteract) { return; } #endregion #region Move to Helperpoint if found known Figurine under a Tent if (Me.IsFlying && ((InteractNPC.Location.Distance(ProblemCamel1) < 10) || (InteractNPC.Location.Distance(ProblemCamel2) < 10) || (InteractNPC.Location.Distance(ProblemCamel3) < 10) || (InteractNPC.Location.Distance(ProblemCamel4) < 20))) { WoWPoint HelperPointCamel = InteractNPC.Location; HelperPointCamel.X = HelperPointCamel.X + 20; HelperPointCamel.Z = HelperPointCamel.Z + 5; Logging.Write(Colors.MediumPurple, "Rarekiller: Found a Problem Figurine {0} so dismount and walk", InteractNPC.Entry); if (!Rarekiller.MoveTo(HelperPointCamel, 3, false)) { return; } //if (!Rarekiller.DescendToLand(o)) return; Rarekiller.Dismount(); Forceground = true; } #endregion #region Move to Helperpoint if known Underground NPC if (Me.IsFlying && InteractNPC.Entry == 64227) { if (!Rarekiller.MoveTo(LandingPoint64227, 5, false)) { return; } Rarekiller.Dismount(); Forceground = true; } #endregion #region Move to NPC if (Me.IsFlying && Forceground) { Logging.Write(Colors.MediumPurple, "Rarekiller: Failure in Programming. Fly again to Helperpoint and Dismount", InteractNPC.Entry); return; } if (!Rarekiller.MoveTo(InteractNPC, 4, Forceground)) { return; } Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: NPC Location: {0} / {1} / {2}", Convert.ToString(InteractNPC.X), Convert.ToString(InteractNPC.Y), Convert.ToString(InteractNPC.Z)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: My Location: {0} / {1} / {2}", Convert.ToString(Me.X), Convert.ToString(Me.Y), Convert.ToString(Me.Z)); Rarekiller.Dismount(); #endregion InteractNPC.Interact(); InteractNPC.Interact(); InteractNPC.Interact(); Logging.Write(Colors.MediumPurple, "Rarekiller: Interact with NPC - ID {0}", InteractNPC.Entry); Thread.Sleep(300); //Another Mans Treasure NPCs if (InteractNPC.Entry == 65552 || InteractNPC.Entry == 64272 || InteractNPC.Entry == 64004 || InteractNPC.Entry == 64191 || InteractNPC.Entry == 64227) { Thread.Sleep(1000); Lua.DoString("RunMacroText(\"/click GossipTitleButton1\");"); Thread.Sleep(1000); } //Blingtron if (InteractNPC.Entry == 43929) { Thread.Sleep(1000); Lua.DoString("SelectGossipAvailableQuest(GetNumGossipAvailableQuests())"); Thread.Sleep(1000); Lua.DoString("RunMacroText(\"/click QuestFrameCompleteQuestButton\")"); Thread.Sleep(1000); Blacklist.Add(InteractNPC.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist60)); } }
/// <summary> /// Function Find and Pickup Objects /// </summary> public void findAndPickupObject() { #region create a List with Objects in Reach // ----------------- Generate a List with all wanted Nests found in Object Manager --------------------- ObjectManager.Update(); List <WoWGameObject> objList = ObjectManager.GetObjectsOfType <WoWGameObject>() .Where(o => (!Blacklist.Contains(o.Guid, Rarekiller.Settings.Flags) && (((o.Entry == 202082) && Rarekiller.Settings.RaptorNest) || ((o.Entry == 202080) && Rarekiller.Settings.RaptorNest) || ((o.Entry == 202083) && Rarekiller.Settings.RaptorNest) || ((o.Entry == 202081) && Rarekiller.Settings.RaptorNest) || ((o.Entry == 210565) && Rarekiller.Settings.DarkSoil) || ((o.Entry == 214945) && Rarekiller.Settings.OnyxEgg) || (Rarekiller.AnotherMansTreasureList.ContainsKey(Convert.ToInt32(o.Entry)) && Rarekiller.Settings.AnotherMansTreasure && o.Entry > 200000) || (Rarekiller.CollectObjectsList.ContainsKey(Convert.ToInt32(o.Entry)) && Rarekiller.Settings.ObjectsCollector) || ((o.Entry == 206195) && Rarekiller.Settings.TestRaptorNest) //Testcase Thundermar Ale Keg ))) .OrderBy(o => o.Distance).ToList(); List <WoWUnit> RareList = ObjectManager.GetObjectsOfType <WoWUnit>() .Where(r => ((r.CreatureRank == Styx.WoWUnitClassificationType.Rare) && r.Level > 85 && !r.IsDead)).OrderBy(r => r.Distance).ToList(); #endregion foreach (WoWGameObject o in objList) { Logging.WriteQuiet(Colors.MediumPurple, "Rarekiller: Find A Object to collect {0} ID {1}", o.Name, o.Entry); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Object Location: {0} / {1} / {2}", Convert.ToString(o.X), Convert.ToString(o.Y), Convert.ToString(o.Z)); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Find {0} ID {1}')", o.Name, o.Entry); } if (Rarekiller.Settings.Alert) { Rarekiller.Alert(); } #region don't collect, if ... if (o.Entry == 213970 || o.Entry == 213362) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach Object because it is under Water {0}, Blacklist and Move on", o.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Object is under Water')"); } Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } // ----------------- Underground Object ---------- //if not ID of known Underground Object of Another Mans Treasure --> don't collect if (!(o.Entry == 213364 || o.Entry == 214337 || o.Entry == 213649 || o.Entry == 213650 || o.Entry == 214340 || o.Entry == 213651 || o.Entry == 213750 || o.Entry == 214325 || o.Entry == 213768 || o.Entry == 213751 || o.Entry == 213770 || o.Entry == 213793 || o.Entry == 213769 || o.Entry == 214438 || o.Entry == 214407 || o.Entry == 213956)) // || o.Entry == 213970 || o.Entry == 213362 { if (o.IsIndoors && Me.IsFlying && Me.IsOutdoors && (o.Location.Distance(Me.Location) > 30)) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach Object because it is Indoors and I fly Outdoors {0}, Blacklist and Move on", o.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Object is Indoors')"); } Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } } // ----------------- don't collect if Rare Pandaria Elite Around if (RareList != null) { foreach (WoWUnit r in RareList) { if (r.Location.Distance(o.Location) < 30) { Logging.Write(Colors.MediumPurple, "Rarekiller: Can't reach Object because there's a Rare Elite around, Blacklist and move on", o.Name); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Object Elite Rare around')", o.Name); } Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } } } if (Rarekiller.Settings.PlayerScan && RarekillerSecurity.PlayerAround(o)) { Logging.Write(Colors.MediumPurple, "Rarekiller: There are other Players around, so move on"); if (Rarekiller.Settings.LUAoutput) { Lua.DoString("print('NPCScan: Other Players around')"); } Blacklist.Add(o.Guid, Rarekiller.Settings.Flags, TimeSpan.FromSeconds(Rarekiller.Settings.Blacklist5)); return; } if (Rarekiller.DontInteract) { return; } #endregion #region fly to Helperpoint if known Underground Object //ToDo IDs of Underground NPCs if (Me.IsFlying && (o.Entry == 213364 || o.Entry == 214337 || o.Entry == 213649 || o.Entry == 213650 || o.Entry == 214340 || o.Entry == 213651 || o.Entry == 213750 || o.Entry == 214325 || o.Entry == 213768 || o.Entry == 213751 || o.Entry == 213770 || o.Entry == 213793 || o.Entry == 213769 || o.Entry == 214438 || o.Entry == 214407 || o.Entry == 213956 || o.Entry == 213970 || o.Entry == 213362)) { WoWPoint Helperpoint = o.Location; if (o.Entry == 213364) { Helperpoint = LandingPoint213364; } if (o.Entry == 214337) { Helperpoint = LandingPoint214337; } if (o.Entry == 213649) { Helperpoint = LandingPoint213649; } if (o.Entry == 213650) { Helperpoint = LandingPoint213650; } if (o.Entry == 214340) { Helperpoint = LandingPoint214340; } if (o.Entry == 213651) { Helperpoint = LandingPoint213651; } if (o.Entry == 213750) { Helperpoint = LandingPoint213750; } if (o.Entry == 214325) { Helperpoint = LandingPoint214325; } if (o.Entry == 213768) { Helperpoint = LandingPoint213768; } if (o.Entry == 213751) { Helperpoint = LandingPoint213751; } if (o.Entry == 213770) { Helperpoint = LandingPoint213770; } if (o.Entry == 213793) { Helperpoint = LandingPoint213793; } if (o.Entry == 213769) { Helperpoint = LandingPoint213769; } if (o.Entry == 214438) { Helperpoint = LandingPoint214438; } if (o.Entry == 214407) { Helperpoint = LandingPoint214407; } if (o.Entry == 213956) { Helperpoint = LandingPoint213956; } if (o.Entry == 213970) { Helperpoint = LandingPoint213970; } if (o.Entry == 213362) { Helperpoint = LandingPoint213362; } if (!Rarekiller.MoveTo(Helperpoint, 5, false)) { return; } Rarekiller.Dismount(); } #endregion #region Move to Object // ----------------- Move to Object Part --------------------- if (o.Entry == 213364 || o.Entry == 214337 || o.Entry == 213649 || o.Entry == 213650 || o.Entry == 214340 || o.Entry == 213651 || o.Entry == 213750 || o.Entry == 214325 || o.Entry == 213768 || o.Entry == 213751 || o.Entry == 213770 || o.Entry == 213793 || o.Entry == 213769 || o.Entry == 214438 || o.Entry == 214407 || o.Entry == 213956 || o.Entry == 213970 || o.Entry == 213362) { if (!Rarekiller.MoveTo(o, 4, true)) { return; } } else { if (!Rarekiller.MoveTo(o, 4, false)) { return; } } #endregion // Collect Object Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: Object Location: {0} / {1} / {2}", Convert.ToString(o.X), Convert.ToString(o.Y), Convert.ToString(o.Z)); Logging.WriteDiagnostic(Colors.MediumPurple, "Rarekiller: My Location: {0} / {1} / {2}", Convert.ToString(Me.X), Convert.ToString(Me.Y), Convert.ToString(Me.Z)); Rarekiller.Dismount(); if (Rarekiller.ToonInvalidCombat) { return; } Thread.Sleep(1000); o.Interact(); o.Interact(); o.Interact(); Thread.Sleep(1000); Lua.DoString("RunMacroText(\"/click StaticPopup1Button1\");"); Thread.Sleep(1000); Logging.Write(Colors.MediumPurple, "Rarekiller: Interact with {0} - ID {1}", o.Name, o.Entry); } }