public static void StartInvis(Player player, Room room, string commandOptions = "") { //Check if player has spell var hasSpell = Skill.CheckPlayerHasSkill(player, InvisAb().Name); if (hasSpell == false) { HubContext.Instance.SendToClient("You don't know that spell.", player.HubGuid); return; } var canDoSkill = Skill.CanDoSkill(player); if (!canDoSkill) { return; } #region refactor string[] options = commandOptions.Split(' '); int nth = -1; string getNth = string.Empty; string objectToFind = String.Empty; if (options.Length == 3) { objectToFind = options[2]; if (objectToFind.IndexOf('.') != -1) { getNth = objectToFind.Substring(0, objectToFind.IndexOf('.')); int.TryParse(getNth, out nth); } } #endregion if (nth == 0) { nth = -1; } if (!string.IsNullOrEmpty(objectToFind)) { _target = FindItem.Item(player.Inventory, nth, objectToFind, Item.Item.ItemLocation.Inventory); if (_target == null) { var findPlayer = FindItem.Player(room.players, nth, objectToFind); var findMob = FindItem.Player(room.mobs, nth, objectToFind); if (findPlayer != null || findMob != null) { HubContext.Instance.SendToClient("You can only cast invis on yourself or items in your inventory.", player.HubGuid); return; } else { HubContext.Instance.SendToClient("You don't have that to turn invisible.", player.HubGuid); return; } } } else { _target = null; } if (!_taskRunnning && _target != null) { if (player.ManaPoints < InvisAb().ManaCost) { HubContext.Instance.SendToClient("You attempt to draw energy but fail", player.HubGuid); return; } //TODO REfactor player.ManaPoints -= InvisAb().ManaCost; Score.UpdateUiPrompt(player); if (_target.itemFlags == null) { _target.itemFlags = new List <Item.Item.ItemFlags>(); } if (_target.itemFlags.Contains(Item.Item.ItemFlags.invis)) { HubContext.Instance.SendToClient("This item is already invisible", player.HubGuid); return; } var result = AvsAnLib.AvsAn.Query(_target.name); string article = result.Article; HubContext.Instance.SendToClient($"You take hold of the {_target.name} between your hands which starts to fade in and out of existence", player.HubGuid); var playersInRoom = new List <Player>(room.players); foreach (var character in room.players) { if (character != player) { var hisOrHer = Helpers.ReturnHisOrHers(player, character); var roomMessage = $"{ Helpers.ReturnName(player, character, string.Empty)} takes hold of the {_target.name} between {hisOrHer} hands which starts to fade in and out of existence."; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } Task.Run(() => DoInvis(player, room)); } else { if (_target == null) { if (player.ManaPoints < InvisAb().ManaCost) { HubContext.Instance.SendToClient("You attempt to draw energy but fail", player.HubGuid); return; } //TODO REfactor player.ManaPoints -= InvisAb().ManaCost; Score.UpdateUiPrompt(player); var hasFaerieFire = player.Effects?.FirstOrDefault( x => x.Name.Equals("Faerie Fire", StringComparison.CurrentCultureIgnoreCase)) != null; if (!hasFaerieFire) { HubContext.Instance.SendToClient($"You start to fade in and out of existence.", player.HubGuid); foreach (var character in room.players) { if (character != player) { var hisOrHer = Helpers.ReturnHisOrHers(player, character); var roomMessage = $"{Helpers.ReturnName(player, character, string.Empty)} starts to fade in and out of existence"; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } Task.Run(() => DoInvis(player, room)); } else { HubContext.Instance.SendToClient($"You fail to turn invisible due to the glow of Faerie fire surrounding you.", player.HubGuid); } } } }