Exemplo n.º 1
0
        protected override Response ProcessInternal(Engine engine, Tokeniser tokens)
        {
            if (tokens.WordCount > 1)
            {
                // asking for help with some command
                try
                {
                    var c    = CommandManager.GetCommand(tokens.GetTokenAtPosition(1).Word);
                    var text = c.GetHelpText();
                    if (!String.IsNullOrEmpty(text))
                    {
                        return(new Response(text));
                    }
                }
                catch (CommandNotFoundException) { }
            }

            var sb = new StringBuilder();

            sb.Append("TODO: game specific help here" + Environment.NewLine);

            sb.Append("Available command words are:" + Environment.NewLine);

            sb.Append(" ");
            int ii = 0;

            foreach (string cmd in CommandManager.GetPrimaryCommandWords())
            {
                sb.Append(cmd + " ");
                if ((++ii % 6) == 0)
                {
                    sb.Append(Environment.NewLine + " ");
                }
            }

            return(new Response(sb.ToString()));
        }
Exemplo n.º 2
0
        protected override Response ProcessInternal(Engine engine, Tokeniser tokens)
        {
            Response r = new Response();

            if (tokens.WordCount > 1)
            {
                string command = tokens.GetTokenAtPosition(1).Word;

                switch (command)
                {
                // display list of all variables and their current value
                case "variables":
                    r.AddMessage(engine.GameState.Variables.ToString());
                    return(r);

                // set a variable to a value
                case "setvariable":
                    if (tokens.WordCount < 4)
                    {
                        r.AddMessage("debug setvariable [variable] [value]", ResponseMessageType.Warning);
                    }
                    else
                    {
                        string variableName = tokens.GetTokenAtPosition(2).Word;
                        string value        = tokens.GetTokenAtPosition(3).Word; // TODO: cast to type??
                        engine.GameState.Variables.Set(variableName, value);
                        return(r);
                    }
                    break;

                case "getitem":     // get an intem and put it in inventory (will remain in its current room too)
                    if (tokens.WordCount < 3)
                    {
                        r.AddMessage("debug getitem [item]", ResponseMessageType.Warning);
                    }
                    else
                    {
                        var itemName = tokens.GetTokenAtPosition(2).Word;
                        if (engine.GameState.IsValidItem(itemName))
                        {
                            var item = engine.GameState.GetItem(itemName);
                            if (!engine.GameState.Ego.Inventory.Contains(item))
                            {
                                engine.GameState.Ego.Inventory.AddItem(item);
                                r.AddMessage("Added the " + item.Name + " to player inventory");
                                return(r);
                            }

                            r.AddMessage("Already have that in inventory", ResponseMessageType.Warning);
                        }
                        else
                        {
                            r.AddMessage("Not valid item >" + itemName + "<", ResponseMessageType.Error);
                        }
                    }
                    break;

                case "goroom":     // move ego to a particular room
                    if (tokens.WordCount < 3)
                    {
                        r.AddMessage("debug goroom [room]", ResponseMessageType.Warning);
                    }
                    else
                    {
                        var roomName = tokens.GetTokenAtPosition(2).Word;
                        if (engine.GameState.IsValidRoom(roomName))
                        {
                            var room = engine.GameState.GetRoom(roomName);
                            engine.GameState.Ego.MoveTo(room);
                            r.AddMessage("Moved player to room " + room.Name);
                            return(r);
                        }

                        r.AddMessage("Not valid room >" + roomName + "<", ResponseMessageType.Error);
                    }
                    break;

                // an unknown debug command
                default:
                    if (subCommands.Contains(command))
                    {
                        r.AddMessage("Debug command >" + command + "< not yet implemented.", ResponseMessageType.Warning);
                    }
                    else
                    {
                        r.AddMessage("Unknown debug command: >" + command + "<", ResponseMessageType.Error);
                    }
                    break;
                }
            }

            // show list of available debug subcommands
            r.AddMessage(GetDebugCommands());
            return(r);
        }