Exemple #1
0
        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);
                    }
                }
            }
        }