Exemple #1
0
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            var session = actionInput.Session;

            if (session == null)
            {
                return;                  // This action only makes sense for player sessions.
            }
            var output = new OutputBuilder();

            foreach (var kvp in actionInput.Actor.Stats)
            {
                output.Append(kvp.Value.Name.PadRight(20));
                output.Append(kvp.Value.Value);
                output.AppendLine();
            }

            foreach (var kvp in actionInput.Actor.Attributes)
            {
                output.Append(kvp.Value.Name.PadRight(20));
                output.Append(kvp.Value.Value);
                output.AppendLine();
            }

            session.Write(output);
        }
Exemple #2
0
        /// <summary>Shows who is currently following the player, and who the player is following.</summary>
        /// <remarks>TODO: Replace the sender.Write() calls with something more general, e.g. an event.</remarks>
        /// <param name="actionInput">The action input.</param>
        private void ShowStatus(ActionInput actionInput)
        {
            var senderBehaviors   = actionInput.Controller.Thing.Behaviors;
            var followingBehavior = senderBehaviors.FindFirst <FollowingBehavior>();
            var followedBehavior  = senderBehaviors.FindFirst <FollowedBehavior>();

            var output = new OutputBuilder();

            output.Append("You are following: ");

            output.AppendLine(followingBehavior == null ? "(nobody)" : followingBehavior.Target.Name);

            output.Append("You are being followed by: ");

            if (followedBehavior == null)
            {
                output.AppendLine("(nobody)");
            }
            else
            {
                lock (followedBehavior.Followers)
                {
                    var followers = followedBehavior.Followers.Select(f => f.Name).BuildPrettyList();
                    output.AppendLine(followers);
                }
            }

            actionInput.Controller.Write(output);
        }
Exemple #3
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output   = new OutputBuilder("Inventory: ");
            var entities = commandEventArgs.Entity.GetInventoryItems();

            if (entities.Count == 0)
            {
                output.Append("You aren't carrying anything.");
            }
            else
            {
                var itemDescriptions = EntityQuantityMapper.ParseEntityQuantitiesAsStrings(entities, EntityQuantityMapper.MapStringTypes.ShortDescription);
                output.Append(Formatter.NewTableFromList(itemDescriptions, 1, 4, 0));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #4
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            // TODO: Update once command dictionary is created to iterate Keys and output valid commands.
            // TODO: Create help file for each command.
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output = new OutputBuilder();

            output.Append("Valid commands are:");

            output.Append(
                Formatter.NewTableFromList(
                    CommandService.AvailableCommands(
                        commandEventArgs.PrivilegeOverride == null
                                                        ? commandEventArgs.Entity.PrivilegeLevel
                                                        : (PrivilegeLevel)commandEventArgs.PrivilegeOverride),
                    6, 5, Formatter.DefaultIndent));

            return(CommandResult.Success(output.Output));
        }
Exemple #5
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var room = commandEventArgs.Entity.GetInstanceParentRoom();

            if (room == null)
            {
                return(CommandResult.Failure("You must be in a shop first."));
            }

            if (!room.IsShop)
            {
                return(CommandResult.Failure("There is no shop available here."));
            }

            var output     = new OutputBuilder();
            var nameToSell = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            if (nameToSell == "")
            {
                return(CommandResult.InvalidSyntax(nameof(Sell), new List <string> {
                    "item name"
                }));
            }

            // Search inventory for a match
            var inventoryEntities = commandEventArgs.Entity.GetInventoryItems();

            if (inventoryEntities.Count == 0)
            {
                return(new CommandResult(ResultCode.FAIL, "You don't have anything to sell!"));
            }

            var itemMatched = Parse.MatchOnEntityNameByOrder(nameToSell, inventoryEntities.Cast <IEntity>().ToList());

            if (itemMatched == null)
            {
                return(CommandResult.Failure("You can't seem to find it."));
            }

            var item = (EntityInanimate)itemMatched;

            output.Append($"You sell {item.ShortDescription} for {item.Value}!");

            // Remove item and give currency
            commandEventArgs.Entity.RemoveInventoryItem(item.Instance);
            commandEventArgs.Entity.Currency += item.Value;

            DataAccess.Remove <EntityInanimate>(item.Instance, CacheType.Instance);

            return(CommandResult.Success(output.Output));
        }
Exemple #6
0
        /// <summary>
        /// Lists known skills
        /// </summary>
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            EntityAnimate entity = commandEventArgs.Entity;

            List <ISkill> skills = new List <ISkill>();

            foreach (var s in entity.Skills)
            {
                skills.Add(s);
            }

            OutputBuilder result = new OutputBuilder();

            foreach (var s in skills)
            {
                result.Append($"{SkillMap.SkillToFriendlyName(s.GetType())} [{(int)s.SkillLevel}]\n");
            }

            return(CommandResult.Success(result.Output));
        }
Exemple #7
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var room = commandEventArgs.Entity.GetInstanceParentRoom();

            if (room == null)
            {
                return(CommandResult.Failure("You must be in a shop first."));
            }

            if (!room.IsShop)
            {
                return(CommandResult.Failure("There is no shop available here."));
            }

            var output = new OutputBuilder();
            var items  = room.ShopItems.GetAllEntitiesAsObjects <EntityInanimate>();

            if (items.Count == 0)
            {
                output.Append("Everything has been purchased!");
            }
            else
            {
                output.Append("Available for purchase: ");

                // var itemDescriptions = EntityQuantityMapper.ParseEntityQuantitiesAsStrings(items, EntityQuantityMapper.MapStringTypes.ShortDescription);
                var itemDescriptions = new List <string>();

                foreach (var i in items)
                {
                    itemDescriptions.Add(i.Value.ToString());
                    itemDescriptions.Add(i.ShortDescription);
                }
                output.Append(Formatter.NewTableFromList(itemDescriptions, 2, 4, 4));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #8
0
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            var output = new OutputBuilder();

            foreach (var kvp in actionInput.Controller.Thing.Stats)
            {
                output.Append(kvp.Value.Name.PadRight(20));
                output.Append(kvp.Value.Value);
                output.AppendLine();
            }

            foreach (var kvp in actionInput.Controller.Thing.Attributes)
            {
                output.Append(kvp.Value.Name.PadRight(20));
                output.Append(kvp.Value.Value);
                output.AppendLine();
            }

            actionInput.Controller.Write(output);
        }
Exemple #9
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var    output = new OutputBuilder();
            Player player = (Player)commandEventArgs.Entity;
            string arg    = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            switch (arg)
            {
            case "ON":
                player.Configuration.Autodig = true;
                output.Append("You will now automatically dig when moving.");
                break;

            case "OFF":
                player.Configuration.Autodig = false;
                output.Append("You will no longer automatically dig when moving.");
                break;

            case "":
                string configState = player.Configuration.Autodig == true ? "on" : "off";
                output.Append($"Autodig is set to {configState}.");
                break;

            default:
                return(CommandResult.InvalidSyntax(nameof(Autodig), new List <string> {
                    "on", "off"
                }));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #10
0
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            var session = actionInput.Session;

            if (session == null)
            {
                return;                  // This action only makes sense for player sessions.
            }
            var output = new OutputBuilder();

            //// TODO Reference to config file
            var appName = "WheelMUD.vshost.exe";

            output.AppendSeparator('=', "red", true);
            output.AppendLine("System Status:");
            output.AppendSeparator('-', "red");

            ////ManagementObjectCollection queryCollection1 = query1.Get();

            var query1           = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
            var queryCollection1 = query1.Get();

            foreach (ManagementObject mo in queryCollection1)
            {
                output.Append($"Manufacturer : {mo["manufacturer"]}");
                output.AppendLine($"Model : {mo["model"]}");
                output.AppendLine($"Physical Ram : {(ulong)mo["totalphysicalmemory"] / 1024}");
            }

            output.AppendSeparator('-', "red");
            query1           = new ManagementObjectSearcher("SELECT * FROM Win32_process where NAME = '" + appName + "'");
            queryCollection1 = query1.Get();
            foreach (ManagementObject mo in queryCollection1)
            {
                foreach (var item in mo.Properties)
                {
                    output.AppendLine($"<%b%><%red%>{item.Name}<%b%><%yellow%>{item.Value}<%n%>");
                }
            }

            output.AppendSeparator('-', "red");
            query1           = new ManagementObjectSearcher("SELECT * FROM Win32_timezone");
            queryCollection1 = query1.Get();
            foreach (ManagementObject mo in queryCollection1)
            {
                output.AppendLine($"This Server lives in:{mo["caption"]}");
            }

            session.Write(output);
        }
Exemple #11
0
        private async Task <IResult> _ExpectAsync(IMatch matcher, Action <IResult> handler, int timeout = 0, bool timeout_throws = false)
        {
            CancellationTokenSource tokenSource = new CancellationTokenSource();
            IResult result      = matcher;
            Task    timeoutTask = null;

            if (timeout == 0)
            {
                timeout = this.Timeout;
            }
            if (timeout > 0)
            {
                timeoutTask = Task.Delay(timeout);
            }
            StringBuilder matchOutputBuilder = new StringBuilder(1000);
            Task <string> readTask           = _spawnable.ReadAsync();
            IList <Task>  tasks = new List <Task>();

            tasks.Add(readTask);
            if (timeoutTask != null)
            {
                tasks.Add(timeoutTask);
            }
            Task completed = await Task.WhenAny(tasks).ConfigureAwait(false);

            if (completed == readTask)
            {
                string output = readTask.Result;
                OutputBuilder.Append(output);
                matchOutputBuilder.Append(output);
                matcher.Execute(matchOutputBuilder.ToString());
                if (result.IsMatch)
                {
                    handler?.Invoke(result);
                }
            }
            else
            {
                if (timeout_throws)
                {
                    throw new TimeoutException(string.Format("Timed out waiting for match for {0} in output {1}.", matcher.Query, matchOutputBuilder.ToString()));
                }
                ;
            }
            tokenSource.Dispose();
            return(result);
        }
Exemple #12
0
        /// <summary>
        /// Handles NameSelection state
        /// </summary>
        /// <returns>The result of the handled input</returns>
        private CommandResult HandleNameSelection(string input, EntityAnimate entity)
        {
            if (InputValidation.ValidPlayerName(input))
            {
                entity.Name = input;
                var output = new OutputBuilder($"Welcome to HedronMUD, {entity.Name}!");

                return(CommandResult.Success(output.Output));
            }
            else
            {
                var output = new OutputBuilder("Please enter a valid player name containing only letters and between 3-12 characters.");

                output.Append("\nPlease enter your player name: ");
                return(CommandResult.InvalidSyntax(output.Output));
            }
        }
Exemple #13
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var player = (Player)commandEventArgs.Entity;
            var output = new OutputBuilder();

            player.ShortDescription = commandEventArgs.Argument;
            output.Append($"Your short description has been set to:\n   {commandEventArgs.Argument}");

            return(CommandResult.Success(output.Output));
        }
Exemple #14
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var name = commandEventArgs.Argument;
            var room = commandEventArgs.Entity.GetInstanceParentRoom();

            // Argument checking to ensure a name was provided
            if (name == null || name == "")
            {
                return(CommandResult.InvalidSyntax($"{nameof(Mgenerate)}", "Please enter the base name of the mob you wish to create.", new List <string>()
                {
                    "name"
                }));
            }

            // Ensure the player is in a room so the mobs can be created here
            if (room == null)
            {
                return(CommandResult.Failure("You must be in a room to execute this command."));
            }

            // Create new mobs of all levels and instantiate them in this room
            var mobs = AutogenMob.CreateAndInstantiateAllLevels(name, room.Instance);

            var output = new OutputBuilder();

            foreach (var mob in mobs)
            {
                output.Append($"You have created {DataAccess.Get<Mob>(mob, CacheType.Instance).ShortDescription}");
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #15
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var nameToDrink = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            if (nameToDrink == "")
            {
                return(CommandResult.InvalidSyntax(nameof(Drink), new List <string> {
                    "potion name"
                }));
            }

            // Search inventory for a match
            var inventoryEntities = commandEventArgs.Entity.GetInventoryItems().Where(i => i.GetType() == typeof(ItemPotion)).ToList();

            if (inventoryEntities.Count == 0)
            {
                return(new CommandResult(ResultCode.FAIL, "You don't have anything to drink!"));
            }

            var output      = new OutputBuilder();
            var itemMatched = Parse.MatchOnEntityNameByOrder(nameToDrink, inventoryEntities.Cast <IEntity>().ToList());

            if (itemMatched == null)
            {
                return(CommandResult.Failure("You can't seem to find it."));
            }

            var potion = (ItemPotion)itemMatched;

            output.Append($"You drink {potion.ShortDescription}");

            if (potion.Effect != null)
            {
                commandEventArgs.Entity.AddEffect(potion.Effect, false);
                output.Append(potion.Effect.ApplyDescriptionSelf);
            }

            if (potion.PoolRestoration != null)
            {
                int energyChange  = 0;
                int healthChange  = 0;
                int staminaChange = 0;

                if (potion.PoolRestoration.IsMultiplier)
                {
                    energyChange  = (int)(commandEventArgs.Entity.ModifiedPools.Energy.GetValueOrDefault() * potion.PoolRestoration.Energy.GetValueOrDefault());
                    healthChange  = (int)(commandEventArgs.Entity.ModifiedPools.HitPoints.GetValueOrDefault() * potion.PoolRestoration.HitPoints.GetValueOrDefault());
                    staminaChange = (int)(commandEventArgs.Entity.ModifiedPools.Stamina.GetValueOrDefault() * potion.PoolRestoration.Stamina.GetValueOrDefault());
                }
                else
                {
                    energyChange  = (int)(potion.PoolRestoration.Energy.GetValueOrDefault());
                    healthChange  = (int)(potion.PoolRestoration.HitPoints.GetValueOrDefault());
                    staminaChange = (int)(potion.PoolRestoration.Stamina.GetValueOrDefault());
                }

                if (energyChange != 0)
                {
                    commandEventArgs.Entity.ModifyCurrentEnergy(energyChange, false);
                    output.Append(string.Format("You feel your energy {0}.", energyChange > 0 ? "recharge" : "drain"));
                }

                if (healthChange != 0)
                {
                    commandEventArgs.Entity.ModifyCurrentHealth(healthChange, false);
                    output.Append(string.Format("You feel your health {0}.", healthChange > 0 ? "improve" : "fade"));
                }

                if (staminaChange != 0)
                {
                    commandEventArgs.Entity.ModifyCurrentStamina(staminaChange, false);
                    output.Append(string.Format("You feel your stamina {0}.", staminaChange > 0 ? "refresh" : "falter"));
                }
            }

            // Remove potion from instance and prototype inventory/caches (automatically updates persistence accordingly)
            commandEventArgs.Entity.RemoveInventoryItem(potion.Instance);

            var protoEntity = DataAccess.Get <EntityAnimate>(commandEventArgs.Entity.Prototype, CacheType.Prototype);

            protoEntity?.RemoveInventoryItem(potion.Prototype);

            DataAccess.Remove <ItemPotion>(potion.Prototype, CacheType.Prototype);

            // TODO: Add entity persistence once player saving works
            // DataPersistence.SaveObject(protoEntity);

            return(CommandResult.Success(output.Output));
        }
Exemple #16
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var nameToWear = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();
            var entity     = commandEventArgs.Entity;

            if (nameToWear == "")
            {
                return(new CommandResult(ResultCode.ERR_SYNTAX, "What would you like to wear?"));
            }

            // Search inventory for a match
            var inventoryEntities = entity.GetInventoryItems();

            if (inventoryEntities.Count == 0)
            {
                if (nameToWear == "ALL")
                {
                    return(CommandResult.Failure("You don't have anything to wear."));
                }
                else
                {
                    return(new CommandResult(ResultCode.ERR_SYNTAX, "You don't have that."));
                }
            }

            var output = new OutputBuilder();
            List <EntityInanimate> itemsMarkedAsWorn = new List <EntityInanimate>();

            if (nameToWear == "ALL")
            {
                // A list of items that will be removed from inventory after they have been worn
                List <EntityInanimate> itemsToRemoveFromInventory = new List <EntityInanimate>();

                // Find each item in the inventory that can be worn, and if there is still room in the corresponding slot,
                // equip it.
                foreach (var item in inventoryEntities)
                {
                    try
                    {
                        entity.EquipItemAt(item.Instance, item.Slot, false);
                        entity.RemoveInventoryItem(item.Instance);
                        itemsMarkedAsWorn.Add(item);
                    }
                    catch (SlotFullException)
                    {
                        continue;
                    }
                }
            }
            else
            {
                // Find the given item in inventory and equip it, removing any currently equipped items as necessary
                List <EntityInanimate> itemsRemoved = new List <EntityInanimate>();
                var itemMatched = Parse.MatchOnEntityNameByOrder(nameToWear, inventoryEntities.Cast <IEntity>().ToList());
                if (itemMatched != null)
                {
                    try
                    {
                        // Equip the item and swap already equipped items to inventory
                        itemsRemoved = entity.EquipItemAt(itemMatched.Instance, ((EntityInanimate)itemMatched).Slot, true);

                        entity.RemoveInventoryItem(itemMatched.Instance);
                        itemsMarkedAsWorn.Add((EntityInanimate)itemMatched);

                        foreach (var item in itemsRemoved)
                        {
                            output.Append($"You remove {item.ShortDescription} and put it in your pack.");
                        }
                    }
                    catch (InvalidSlotException)
                    {
                        // Only equip wearable items
                        return(CommandResult.Failure("You can't equip that."));
                    }
                }
                else
                {
                    // The item requested to be removed was not found
                    return(CommandResult.Failure("You don't have that."));
                }
            }

            // Reorder list
            itemsMarkedAsWorn = itemsMarkedAsWorn.OrderBy(i => i.Name).ThenBy(i => i.ShortDescription).ToList();

            // Parse output based on items worn
            if (itemsMarkedAsWorn.Count == 0)
            {
                output.Append("There is nothing more for you to wear.");
            }
            else
            {
                foreach (var item in itemsMarkedAsWorn)
                {
                    switch (item.Slot)
                    {
                    case ItemSlot.Light:
                        output.Append($"You equip {item.ShortDescription} as your lightsource.");
                        break;

                    case ItemSlot.Orbit:
                        output.Append($"You release {item.ShortDescription} in your orbit.");
                        break;

                    case ItemSlot.OneHandedWeapon:
                        output.Append($"You equip {item.ShortDescription} as your weapon.");
                        break;

                    case ItemSlot.TwoHandedWeapon:
                        output.Append($"You equip {item.ShortDescription} as your weapon.");
                        break;

                    case ItemSlot.Shield:
                        output.Append($"You equip {item.ShortDescription} as your shield.");
                        break;

                    default:
                        output.Append($"You wear {item.ShortDescription} upon your {item.Slot.ToString().ToLower()}.");
                        break;
                    }
                }
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #17
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var entity = commandEventArgs.Entity;

            var basePools      = entity.BaseMaxPools;
            var baseAttributes = entity.BaseAttributes;
            var baseQualities  = entity.BaseQualities;

            var modPools      = entity.ModifiedPools;
            var modAttributes = entity.ModifiedAttributes;
            var modQualities  = entity.ModifiedQualities;

            var poolsTable = Formatter.ToTable(2, Formatter.DefaultIndent,
                                               // HP row
                                               Formatter.NewRow(
                                                   "Hit Points:  ",
                                                   $"{entity.CurrentHitPoints}",
                                                   "/",
                                                   $"{basePools.HitPoints}",
                                                   ""
                                                   ),
                                               // Stamina row
                                               Formatter.NewRow(
                                                   "Stamina:  ",
                                                   $"{entity.CurrentStamina}",
                                                   "/",
                                                   $"{basePools.Stamina}",
                                                   ""
                                                   ),
                                               // Energy row
                                               Formatter.NewRow(
                                                   "Energy:  ",
                                                   $"{entity.CurrentEnergy}",
                                                   "/",
                                                   $"{basePools.Energy}",
                                                   ""
                                                   )
                                               );

            var attributesTable = Formatter.ToTable(2, Formatter.DefaultIndent,
                                                    // Essence row
                                                    Formatter.NewRow(
                                                        "Essence:  ",
                                                        $"{baseAttributes.Essence}",
                                                        $"[{modAttributes.Essence}]"
                                                        ),
                                                    // Finesse row
                                                    Formatter.NewRow(
                                                        "Finesse:  ",
                                                        $"{baseAttributes.Finesse}",
                                                        $"[{modAttributes.Finesse}]"
                                                        ),
                                                    // Intellect row
                                                    Formatter.NewRow(
                                                        "Intellect:  ",
                                                        $"{baseAttributes.Intellect}",
                                                        $"[{modAttributes.Intellect}]"
                                                        ),
                                                    // Might row
                                                    Formatter.NewRow(
                                                        "Might:  ",
                                                        $"{baseAttributes.Might}",
                                                        $"[{modAttributes.Might}]"
                                                        ),
                                                    // Spirit row
                                                    Formatter.NewRow(
                                                        "Spirit:  ",
                                                        $"{baseAttributes.Spirit}",
                                                        $"[{modAttributes.Spirit}]"
                                                        ),
                                                    // Will row
                                                    Formatter.NewRow(
                                                        "Will:  ",
                                                        $"{baseAttributes.Will}",
                                                        $"[{modAttributes.Will}]"
                                                        )
                                                    );

            var qualitiesTable = Formatter.ToTable(2, Formatter.DefaultIndent,
                                                   // Attack and Armor row
                                                   Formatter.NewRow(
                                                       "Attack Rating:  ",
                                                       $"{baseQualities.AttackRating}",
                                                       $"[{modQualities.AttackRating}]",
                                                       "Armor Rating:  ",
                                                       $"{baseQualities.ArmorRating}",
                                                       $"[{modQualities.ArmorRating}]"
                                                       ),
                                                   // Critical Hit and Damage row
                                                   Formatter.NewRow(
                                                       "Critical Hit:  ",
                                                       $"{baseQualities.CriticalHit}",
                                                       $"[{modQualities.CriticalHit}]",
                                                       "Critical Damage:  ",
                                                       $"{baseQualities.CriticalDamage}",
                                                       $"[{modQualities.CriticalDamage}]"
                                                       )
                                                   );

            var output = new OutputBuilder(
                "Statistics:\n" +
                poolsTable + "\n\n" +
                attributesTable + "\n\n" +
                qualitiesTable + "\n\n"
                );

            if (entity.Currency.HasAnyValue())
            {
                output.Append("[Currency] " + entity.Currency.ToString() + "\n\n");
            }
            else
            {
                output.Append("[Currency] none\n\n");
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #18
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var nameToDrop = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            if (nameToDrop == "")
            {
                return(new CommandResult(ResultCode.ERR_SYNTAX, "What would you like to drop?"));
            }

            var room = commandEventArgs.Entity.GetInstanceParentRoom();

            if (room == null)
            {
                return(CommandResult.Failure("There is nowhere to drop it to."));
            }

            // Search inventory for a match
            var inventoryEntities = commandEventArgs.Entity.GetInventoryItems();

            if (inventoryEntities.Count == 0)
            {
                if (nameToDrop == "ALL")
                {
                    return(CommandResult.Failure("You don't have anything to drop."));
                }
                else
                {
                    return(new CommandResult(ResultCode.ERR_SYNTAX, "You don't have that."));
                }
            }

            List <EntityInanimate> matchedItems;
            var output = new OutputBuilder();

            if (nameToDrop == "ALL")
            {
                matchedItems = inventoryEntities;
            }
            else
            {
                matchedItems = new List <EntityInanimate>();
                var itemMatched = Parse.MatchOnEntityNameByOrder(nameToDrop, inventoryEntities.Cast <IEntity>().ToList());
                if (itemMatched != null)
                {
                    matchedItems.Add((EntityInanimate)itemMatched);
                }
            }

            if (matchedItems.Count == 0)
            {
                return(CommandResult.Failure("You don't have that."));
            }

            foreach (var item in matchedItems)
            {
                commandEventArgs.Entity.RemoveInventoryItem(item.Instance);
                room.Items.AddEntity(item.Instance, item, false);
            }

            if (matchedItems.Count == 1)
            {
                output.Append("You drop " + matchedItems[0].ShortDescription + ".");
            }
            else
            {
                var droppedItems = EntityQuantityMapper.ParseEntityQuantitiesAsStrings(matchedItems, EntityQuantityMapper.MapStringTypes.ShortDescription);

                output.Append("You drop:");
                output.Append(Formatter.NewTableFromList(droppedItems, 1, 4, 0));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #19
0
 public void WriteLabel(string name)
 {
     OutputBuilder.Append($"{name} ");
 }
Exemple #20
0
        public CommandResult Execute(CommandEventArgs commandEventArgs, Constants.EXIT direction)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output = new OutputBuilder();
            var entity = commandEventArgs.Entity;

            Room sourceRoom = entity.GetInstanceParentRoom();

            // Don't move entity if it's not already in a room
            if (sourceRoom != null && entity != null)
            {
                RoomExits exits = sourceRoom.Exits;
                Room      destRoom;

                switch (direction)
                {
                case Constants.EXIT.NORTH:
                    destRoom = DataAccess.Get <Room>(exits.North, CacheType.Instance);
                    break;

                case Constants.EXIT.EAST:
                    destRoom = DataAccess.Get <Room>(exits.East, CacheType.Instance);
                    break;

                case Constants.EXIT.SOUTH:
                    destRoom = DataAccess.Get <Room>(exits.South, CacheType.Instance);
                    break;

                case Constants.EXIT.WEST:
                    destRoom = DataAccess.Get <Room>(exits.West, CacheType.Instance);
                    break;

                case Constants.EXIT.UP:
                    destRoom = DataAccess.Get <Room>(exits.Up, CacheType.Instance);
                    break;

                case Constants.EXIT.DOWN:
                    destRoom = DataAccess.Get <Room>(exits.Down, CacheType.Instance);
                    break;

                default:
                    output.Append("You cannot go that way.");
                    return(CommandResult.Failure(output.Output));
                }

                if (destRoom != null)
                {
                    sourceRoom.Animates.RemoveEntity(entity.Instance, entity);
                    destRoom.Animates.AddEntity(entity.Instance, entity, false);

                    output.Append(
                        new Look()
                        .Execute(new CommandEventArgs("", commandEventArgs.Entity, commandEventArgs.PrivilegeOverride))
                        .ResultMessage);

                    return(CommandResult.Success(output.Output));
                }
                else
                {
                    // Create the room if Autodig is set
                    if (entity.GetType() == typeof(Player))
                    {
                        var player = (Player)entity;

                        if (player.Configuration.Autodig)
                        {
                            sourceRoom = DataAccess.Get <Room>(sourceRoom.Prototype, CacheType.Prototype);

                            if (sourceRoom == null)
                            {
                                return(CommandResult.Failure("You must be in a room with a saved prototype before you may dig."));
                            }

                            var sourceArea = entity.GetInstanceParentArea();
                            if (sourceArea == null)
                            {
                                return(CommandResult.Failure("You must be in an area before you may dig."));
                            }

                            var protoArea = DataAccess.Get <Area>(sourceArea.Prototype, CacheType.Prototype);
                            if (protoArea == null)
                            {
                                return(CommandResult.Failure("You must be in an area with a saved prototype before you may dig."));
                            }

                            destRoom = Room.NewPrototype((uint)protoArea.Prototype);
                            destRoom.Spawn(false, (uint)sourceArea.Instance);

                            RoomExits.ConnectRoomExits(sourceRoom, destRoom, direction, true, true);

                            // Now move the entity to the new room
                            output.Append($"You dig {direction.ToString().ToLower()}.");
                            output.Append(new MoveEntity().Execute(commandEventArgs).ResultMessage);

                            return(CommandResult.Success(output.Output));
                        }
                    }

                    output.Append("You cannot go that way.");
                    return(CommandResult.Failure(output.Output));
                }
            }

            // Return failure if entity was not already in a room or there was no entity to move
            output.Append("You cannot go that way.");
            return(CommandResult.Failure(output.Output));
        }
Exemple #21
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var nameToRemove = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            if (nameToRemove == "")
            {
                return(new CommandResult(ResultCode.ERR_SYNTAX, "What would you like to remove?"));
            }

            // Search equipment for a match
            var equipmentEntities = commandEventArgs.Entity.GetEquippedItems();

            if (equipmentEntities.Count == 0)
            {
                if (nameToRemove == "ALL")
                {
                    return(CommandResult.Failure("You aren't wearing anything."));
                }
                else
                {
                    return(new CommandResult(ResultCode.ERR_SYNTAX, "You don't have that equipped."));
                }
            }

            List <EntityInanimate> matchedItems;

            if (nameToRemove == "ALL")
            {
                matchedItems = equipmentEntities;
            }
            else
            {
                matchedItems = new List <EntityInanimate>();
                var itemMatched = Parse.MatchOnEntityNameByOrder(nameToRemove, equipmentEntities.Cast <IEntity>().ToList());
                if (itemMatched != null)
                {
                    matchedItems.Add((EntityInanimate)itemMatched);
                }
            }

            if (matchedItems.Count == 0)
            {
                return(new CommandResult(ResultCode.ERR_SYNTAX, "You don't have that equipped."));
            }

            var output = new OutputBuilder();

            foreach (var item in matchedItems)
            {
                commandEventArgs.Entity.UnequipItem(item.Instance);
                output.Append($"You remove {item.ShortDescription} and place it in your pack.");
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #22
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            string        arg    = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();
            string        opt    = CommandService.ParseFirstArgument(CommandService.ParseArgument(commandEventArgs.Argument)).ToUpper();
            OutputBuilder output = new OutputBuilder();
            var           entity = commandEventArgs.Entity;

            switch (arg)
            {
            case "POTION":
                ItemPotion newPotion;

                if (opt == "ENERGY")
                {
                    newPotion = ItemPotion.NewInstance(true);
                    newPotion.PoolRestoration = new Pools
                    {
                        Energy = 50
                    };

                    newPotion.Name             = "energy potion";
                    newPotion.ShortDescription = "an energy potion";
                    newPotion.LongDescription  = "A lovely blue energy potion.";
                }
                else if (opt == "HEALTH")
                {
                    newPotion = ItemPotion.NewInstance(true);
                    newPotion.PoolRestoration = new Pools
                    {
                        HitPoints = 50
                    };

                    newPotion.Name             = "health potion";
                    newPotion.ShortDescription = "a health potion";
                    newPotion.LongDescription  = "A lovely red health potion.";
                }
                else if (opt == "STAMINA")
                {
                    newPotion = ItemPotion.NewInstance(true);
                    newPotion.PoolRestoration = new Pools
                    {
                        Stamina = 50
                    };

                    newPotion.Name             = "stamina potion";
                    newPotion.ShortDescription = "a stamina potion";
                    newPotion.LongDescription  = "A lovely green stamina potion.";
                }
                else
                {
                    return(CommandResult.InvalidSyntax("craft potion", new List <string> {
                        "energy", "health", "stamina"
                    }));
                }

                output.Append($"You craft {newPotion.ShortDescription}.");

                // Add potion to inventory, save potion
                entity.AddInventoryItem(newPotion.Instance);
                var protoPotion = DataAccess.Get <ItemPotion>(newPotion.Prototype, CacheType.Prototype);
                newPotion.CopyTo(protoPotion);

                // TODO: Update data persistence once player saving works
                // var entityProto = DataAccess.Get<EntityAnimate>(entity.Prototype, CacheType.Prototype);
                // entityProto?.AddInventoryItem(newPotion.Prototype);
                // DataPersistence.SaveObject(entityProto);
                DataPersistence.SaveObject(DataAccess.Get <ItemPotion>(newPotion.Prototype, CacheType.Prototype));
                break;

            default:
                return(CommandResult.InvalidSyntax("craft", new List <string> {
                    "potion"
                }));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #23
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            // TODO: Implement Look <Direction>
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output   = new OutputBuilder();
            var entity   = commandEventArgs.Entity;
            var argument = commandEventArgs.Argument;
            var room     = entity.GetInstanceParentRoom();

            if (room != null)
            {
                var items   = room.Items.GetAllEntitiesAsObjects <EntityInanimate>();
                var storage = room.StorageItems.GetAllEntitiesAsObjects <Storage>();
                var mobs    = room.Animates.GetAllEntitiesAsObjects <Mob>();
                var players = room.Animates.GetAllEntitiesAsObjects <Player>();

                if (entity.GetType() == typeof(Player))
                {
                    players.Remove((Player)entity);
                }
                else if (entity.GetType() == typeof(Mob))
                {
                    mobs.Remove((Mob)entity);
                }

                if (argument?.Length > 0)
                {
                    var allEntities = new List <IEntity>();
                    allEntities.AddRange(items);
                    allEntities.AddRange(storage);
                    allEntities.AddRange(mobs);
                    allEntities.AddRange(players);
                    var matchedEntity = Parse.MatchOnEntityNameByOrder(argument, allEntities);

                    if (matchedEntity != null)
                    {
                        output.Append(matchedEntity.LongDescription);
                    }
                    else
                    {
                        return(CommandResult.Failure("You do not see that here."));
                    }
                }
                else
                {
                    var area = entity.GetInstanceParentArea();

                    output.Append("");

                    if (entity.GetType() == typeof(Player))
                    {
                        output.Append(((Player)entity).Configuration.DisplayAreaName
                                                        ? $"{area.Name} > {room.Name}"
                                                        : room.Name);
                    }

                    output.Append(room.Description);

                    output.Append("Exits: " + Formatter.ParseExits(room));

                    // Print players
                    if (players.Count > 0)
                    {
                        foreach (var desc in EntityQuantityMapper.ParseEntityQuantitiesAsStrings(players, EntityQuantityMapper.MapStringTypes.ShortDescription))
                        {
                            output.Append(desc);
                        }
                    }

                    // Print mobs
                    if (mobs.Count > 0)
                    {
                        output.Append(string.Join(", ",
                                                  EntityQuantityMapper.ParseEntityQuantitiesAsStrings(mobs, EntityQuantityMapper.MapStringTypes.ShortDescription).ToArray()));
                    }

                    // Print items
                    if (items.Count > 0)
                    {
                        output.Append(string.Join(", ",
                                                  EntityQuantityMapper.ParseEntityQuantitiesAsStrings(items, EntityQuantityMapper.MapStringTypes.ShortDescription).ToArray()));
                    }

                    // Print containers
                    if (storage.Count > 0)
                    {
                        output.Append(string.Join(", ",
                                                  EntityQuantityMapper.ParseEntityQuantitiesAsStrings(storage, EntityQuantityMapper.MapStringTypes.ShortDescription).ToArray()));
                    }
                }
            }
            else
            {
                output.Append("You are in the void...");
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #24
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var nameToGet = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            if (nameToGet == "")
            {
                return(new CommandResult(ResultCode.ERR_SYNTAX, "What would you like to get?"));
            }

            // Search room for a match
            var room         = commandEventArgs.Entity.GetInstanceParentRoom();
            var roomEntities = room.Items.GetAllEntitiesAsObjects <EntityInanimate>();

            if (roomEntities.Count == 0)
            {
                // There are no items in the room to pick up
                if (nameToGet == "ALL")
                {
                    return(new CommandResult(ResultCode.SUCCESS, "There is nothing to pick up."));
                }
                else
                {
                    return(new CommandResult(ResultCode.FAIL, "You don't see that."));
                }
            }

            List <EntityInanimate> matchedItems;
            var output = new OutputBuilder();

            if (nameToGet == "ALL")
            {
                matchedItems = roomEntities;
            }
            else
            {
                matchedItems = new List <EntityInanimate>();
                var itemMatched = Parse.MatchOnEntityNameByOrder(nameToGet, roomEntities.Cast <IEntity>().ToList());
                if (itemMatched != null)
                {
                    matchedItems.Add((EntityInanimate)itemMatched);
                }
            }

            if (matchedItems.Count == 0)
            {
                return(new CommandResult(ResultCode.FAIL, "You don't see that."));
            }

            foreach (var item in matchedItems)
            {
                room.Items.RemoveEntity(item.Instance, item);
                commandEventArgs.Entity.AddInventoryItem(item.Instance);
            }

            if (matchedItems.Count == 1)
            {
                output.Append("You pick up " + matchedItems[0].ShortDescription + ".");
            }
            else
            {
                var itemsPicked = EntityQuantityMapper.ParseEntityQuantitiesAsStrings(matchedItems, EntityQuantityMapper.MapStringTypes.ShortDescription);

                output.Append("You pick up:");
                output.Append(Formatter.NewTableFromList(itemsPicked, 1, 4, 0));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #25
0
        /// <summary>
        /// Sets player configurations
        /// </summary>
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var    output = new OutputBuilder();
            Player player = (Player)commandEventArgs.Entity;

            string arg = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();
            string opt = CommandService.ParseFirstArgument(CommandService.ParseArgument(commandEventArgs.Argument)).ToUpper();

            switch (arg)
            {
            case "AREANAME":
                if (opt == "ON")
                {
                    player.Configuration.DisplayAreaName = true;
                    output.Append("You will now see area names.");
                }
                else if (opt == "OFF")
                {
                    player.Configuration.DisplayAreaName = false;
                    output.Append("You will no longer see area names.");
                }
                else
                {
                    return(CommandResult.InvalidSyntax("config areaname", new List <string> {
                        "on", "off"
                    }));
                }
                break;

            case "COLOR":
                if (opt == "ON")
                {
                    player.Configuration.UseColor = true;
                    output.Append("Color is now enabled.");
                }
                else if (opt == "OFF")
                {
                    player.Configuration.UseColor = false;
                    output.Append("Color is now disabled.");
                }
                else
                {
                    return(CommandResult.InvalidSyntax("config color", new List <string> {
                        "on", "off"
                    }));
                }
                break;

            default:
                return(CommandResult.InvalidSyntax(nameof(Config), new List <string> {
                    "areaname", "color"
                }, new List <string> {
                    "option"
                }));
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #26
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var room = commandEventArgs.Entity.GetInstanceParentRoom();

            if (room == null)
            {
                return(CommandResult.Failure("You must be in a shop first."));
            }

            if (!room.IsShop)
            {
                return(CommandResult.Failure("There is no shop available here."));
            }

            var output = new OutputBuilder();
            var items  = room.ShopItems.GetAllEntitiesAsObjects <EntityInanimate>();

            if (items.Count == 0)
            {
                output.Append("There is nothing left to buy!");
            }
            else
            {
                var nameToBuy = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

                if (nameToBuy == "")
                {
                    return(CommandResult.InvalidSyntax(nameof(Sell), new List <string> {
                        "item name"
                    }));
                }

                var itemMatched = Parse.MatchOnEntityNameByOrder(nameToBuy, items.Cast <IEntity>().ToList());

                if (itemMatched == null)
                {
                    return(CommandResult.Failure("That's not for sale here."));
                }
                var item = (EntityInanimate)itemMatched;


                if (commandEventArgs.Entity.Currency.TotalCopper < item.Value.TotalCopper ||
                    commandEventArgs.Entity.Currency.Vita < item.Value.Vita ||
                    commandEventArgs.Entity.Currency.Menta < item.Value.Menta ||
                    commandEventArgs.Entity.Currency.Astra < item.Value.Astra)
                {
                    return(CommandResult.Failure($"You don't have enough to pay for that! ({item.Value})"));
                }

                output.Append($"You buy {item.ShortDescription} for {item.Value}!");

                // Move item and subtract currency
                room.ShopItems.RemoveEntity(item.Instance, item);
                commandEventArgs.Entity.AddInventoryItem(item.Instance);
                commandEventArgs.Entity.Currency -= item.Value;
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #27
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output    = new OutputBuilder("Equipment: ");
            var wornItems = commandEventArgs.Entity.GetEquippedItems()
                            .OrderBy(item => item.Name)
                            .ToList();

            if (wornItems.Count == 0)
            {
                output.Append("You aren't wearing anything.");
            }
            else
            {
                // Initialize item slot column
                var slots = new List <string>();
                foreach (var slot in Enum.GetValues(typeof(ItemSlot)))
                {
                    slots.Add(slot.ToString());
                }

                // Determine width of item slot column
                int maxSlotTextWidth = 0;
                foreach (var slot in slots)
                {
                    if (slot.Length > maxSlotTextWidth)
                    {
                        maxSlotTextWidth = slot.Length;
                    }
                }

                // Pad item slot column
                maxSlotTextWidth += 3;

                // Initialize equipment list table
                var mappedEquipment = new Dictionary <ItemSlot, List <string> >();
                foreach (var slot in Enum.GetValues(typeof(ItemSlot)))
                {
                    mappedEquipment.Add((ItemSlot)slot, new List <string>());
                }

                // Build out descriptions for worn equipment
                foreach (var slot in mappedEquipment)
                {
                    foreach (var item in wornItems)
                    {
                        if (item.Slot == slot.Key)
                        {
                            mappedEquipment[slot.Key].Add(item.ShortDescription);
                        }
                    }
                }

                // Print a formatted table of worn equipment
                foreach (var slot in mappedEquipment)
                {
                    foreach (var item in slot.Value)
                    {
                        output.Append(
                            string.Format("{0," + maxSlotTextWidth + "}: {1}", slot.Key.ToString(), item));
                    }
                }
            }

            return(CommandResult.Success(output.Output));
        }
Exemple #28
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var output   = new OutputBuilder();
            var argument = commandEventArgs.Argument;
            var entity   = commandEventArgs.Entity;

            if (!string.IsNullOrEmpty(argument) && entity != null)
            {
                int iRoom = -1;
                try
                {
                    // Try to convert argument to guid
                    iRoom = Convert.ToInt32(CommandService.ParseFirstArgument(argument));
                }
                catch (FormatException)
                {
                    return(CommandResult.InvalidSyntax(nameof(Goto), new List <string> {
                        "list", "[room number]"
                    }));
                }
                catch (OverflowException)
                {
                    Logger.Error(nameof(CommandService), nameof(Goto), "Overflow exception.");
                }

                var targetRoom = DataAccess.Get <Room>((uint)iRoom, CacheType.Instance);

                if (targetRoom != null)
                {
                    // Move entity
                    var sourceRoom = entity.GetInstanceParentRoom();

                    sourceRoom?.Animates.RemoveEntity(entity.Instance, entity);
                    targetRoom.Animates.AddEntity(entity.Instance, entity, false);

                    output.Append(
                        new Look()
                        .Execute(new CommandEventArgs("", commandEventArgs.Entity, commandEventArgs.PrivilegeOverride))
                        .ResultMessage);

                    return(CommandResult.Success(output.Output));
                }
                else
                {
                    output.Append("Invalid room.");
                    return(CommandResult.Failure(output.Output));
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(argument) && argument.ToLower() == "list")
                {
                    var rooms = DataAccess.GetAll <Room>(CacheType.Instance);
                    foreach (var r in rooms)
                    {
                        output.Append($"({r.Instance}): {r.GetInstanceParentArea().Name}/{r.Name}");
                    }
                    return(CommandResult.Success(output.Output));
                }
                else
                {
                    return(CommandResult.InvalidSyntax(nameof(Goto), new List <string> {
                        "list", "[room number]"
                    }));
                }
            }
        }
Exemple #29
0
 public virtual void WriteLiteral(object value)
 {
     OutputBuilder.Append(value);
 }
Exemple #30
0
        public override CommandResult Execute(CommandEventArgs commandEventArgs)
        {
            try
            {
                base.Execute(commandEventArgs);
            }
            catch (CommandException ex)
            {
                return(ex.CommandResult);
            }

            var player   = (Player)commandEventArgs.Entity;
            var output   = new OutputBuilder();
            var argument = CommandService.ParseFirstArgument(commandEventArgs.Argument).ToUpper();

            switch (argument)
            {
            case "CLEAR":
                player.Prompt = "";
                output.Append("Your prompt has been cleared.");
                break;

            case "RESET":
                if (player.Configuration.UseColor)
                {
                    player.Prompt = Constants.Prompt.DEFAULT_COLOR;
                }
                else
                {
                    player.Prompt = Constants.Prompt.DEFAULT;
                }

                output.Append($"Your prompt has been set to:\n   {player.Prompt}");

                break;

            case "SET":
                var arg = CommandService.ParseArgument(commandEventArgs.Argument);
                if (arg == "")
                {
                    var help = Formatter.NewTableFromList(
                        new List <string>
                    {
                        "Valid placeholders are:",
                        "Valid color codes are:",
                        "$hp - Current hit points",
                        $"`{Formatter.FriendlyColorBlack} - Black",
                        "$HP - Maximum hit points",
                        $"`{Formatter.FriendlyColorBlue} - Blue",
                        "$st - Current stamina",
                        $"`{Formatter.FriendlyColorBold} - (Bold)",
                        "$ST - Maximum stamina",
                        $"`{Formatter.FriendlyColorCyan} - Cyan",
                        "$en - Current energy",
                        $"`{Formatter.FriendlyColorGreen} - Green",
                        "$EN - Maximum energy",
                        $"`{Formatter.FriendlyColorMagenta} - Magenta",
                        "",
                        $"`{Formatter.FriendlyColorRed} - Red",
                        "",
                        $"`{Formatter.FriendlyColorReset} - (Reset)",
                        "",
                        $"`{Formatter.FriendlyColorWhite} - White",
                        "",
                        $"`{Formatter.FriendlyColorYellow} - Yellow"
                    }, 2, 4, 4);

                    if (!player.Prompt.EndsWith(Formatter.FriendlyColorReset))
                    {
                        player.Prompt += Formatter.FriendlyColorReset;
                    }

                    return(CommandResult.InvalidSyntax(nameof(Prompt), $"\n{help}", new List <string> {
                        "set [new prompt]"
                    }));
                }

                player.Prompt = arg;
                output.Append($"Your prompt has been set to:\n   {arg}");
                break;

            default:
                return(CommandResult.InvalidSyntax(nameof(Prompt), new List <string> {
                    "clear", "reset", "set"
                }));
            }

            return(CommandResult.Success(output.Output));
        }