///////////////////////////////////////////////////////////////////////// // // www.ultima.smoce.net // Name: TargetNext // ///////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using Phoenix.WorldData; namespace Phoenix.Plugins { public static partial class Commands { private const int m_TargetNext_MaxDistance = 18; private const string m_TargetObject = "currentTarget"; public static readonly Dictionary IgnoreList = new Dictionary(); public static bool IgnoreSummons; private static UOCharacter m_TargetNext_LastCharacter; [Command] public static void TargetNextEnemy(params Graphic[] models) { TargetNext(new[] { Notoriety.Enemy, Notoriety.Murderer, Notoriety.Criminal }, models); } [Command] public static void TargetNextHumanEnemy() { TargetNextHuman(Notoriety.Enemy, Notoriety.Murderer, Notoriety.Criminal); } [Command] public static void TargetNextHuman(params Notoriety[] notoriety) { TargetNext(notoriety, new Graphic[] { 0x0191, 0x0190 }); } [Command] public static void TargetNext() { TargetNext( new[] { Notoriety.Criminal, Notoriety.Enemy, Notoriety.Guild, Notoriety.Innocent, Notoriety.Invulnerable, Notoriety.Murderer, Notoriety.Neutral, Notoriety.Unknown }, new Graphic[] { 0xFFFF }); } [Command] public static void TargetNext(Notoriety[] notoriety, Graphic[] models) { bool lastTargetFound = false; UOCharacter outputCharacter = null; foreach (UOCharacter character in World.Characters) { if (character == World.Player) continue; if (IgnoreSummons && IgnoreList.ContainsKey(character.Model)) if (IgnoreList.ContainsValue(character.Color)) continue; if (outputCharacter == null && character.Distance <= m_TargetNext_MaxDistance && Array.IndexOf(models, character.Model) != -1 && Array.IndexOf(notoriety, character.Notoriety) != -1) outputCharacter = character; if (character == m_TargetNext_LastCharacter) { lastTargetFound = true; continue; } if (lastTargetFound && character.Distance <= m_TargetNext_MaxDistance && Array.IndexOf(models, character.Model) != -1 && Array.IndexOf(notoriety, character.Notoriety) != -1) { outputCharacter = character; break; } } m_TargetNext_LastCharacter = outputCharacter; SetTarget(outputCharacter); } [Command] public static void SetTarget() { SetTarget(World.GetCharacter(UIManager.TargetObject())); } [Command] public static void SetTarget(string name, ushort color) { SetTarget(World.GetCharacter(UIManager.TargetObject()), name, color); } [Command] public static void SetTarget(UOCharacter character) { SetTarget(character, m_TargetObject, 0x41); } [Command] public static void SetTarget(UOCharacter character, string name, ushort color) { if (character != null && character.Exist) { Aliases.SetObject(name, character.Serial); character.Print(color, "!" + name + "!"); if (character.MaxHits < 0) character.RequestStatus(); else character.Print(Env.ConsoleColor, "{0} [{1}/{2}]", character.Name, character.Hits, character.MaxHits); UO.PrintInformation("Target set to '{0}'", character.Name); } else UO.PrintError("Target is not valid"); } [Command] public static void CancelTarget() { UIManager.Reset(); } [Command] public static void DeleteTarget() { Aliases.SetObject(m_TargetObject, Serial.Invalid); UO.PrintInformation("CurrenTarget removed."); } } }