]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/command/menu_cmd.qc
Fix #2727 "New esc-menu shouldn't open a standard settings page"
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / command / menu_cmd.qc
index a06ac8e23100f7ffbc98312edba482164aec1c77..2003a7eeb7186c7e959d9d64e0c003a2f5fdb891 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <common/command/_mod.qh>
 
+.void(entity me, int argsbuf) readInputArgs;
 .entity firstChild, nextSibling;
 
 string _dumptree_space;
@@ -43,15 +44,16 @@ void GameCommand(string theCommand)
        int argc = tokenize_console(theCommand);
        string ss = strtolower(argv(0));
 
+       // TODO port these commands to the command system
        if (argv(0) == "help" || argc == 0)
        {
-               LOG_INFO(_("Usage: menu_cmd command..., where possible commands are:"));
-               LOG_INFO(_("  sync - reloads all cvars on the current menu page"));
-               LOG_INFO(_("  directmenu ITEM - select a menu item as main item"));
-               LOG_INFO(_("  dumptree - dump the state of the menu as a tree to the console"));
-               LOG_INFO("\n");
+               LOG_HELP("Usage:^3 menu_cmd <command> [<item>], where possible commands are:");
+               LOG_HELP("  'sync' reloads all cvars on the current menu page");
+               LOG_HELP("  'directmenu' shows the menu window named <item> (or the menu window containing an item named <item>)");
+               LOG_HELP("   if <item> is not specified it shows the list of available items in the console");
+               LOG_HELP("  'dumptree' dumps the state of the menu as a tree to the console");
 
-               LOG_INFO("Generic commands shared by all programs:");
+               LOG_HELP("\nGeneric commands shared by all programs:");
                GenericCommand_macro_help();
 
                return;
@@ -78,7 +80,7 @@ void GameCommand(string theCommand)
 
                if (argc == 1)
                {
-                       LOG_INFO(_("Available options:"));
+                       LOG_HELP("Available items:");
 
                        FOREACH_ENTITY_ORDERED(it.name != "", {
                                if (it.classname == "vtbl") continue;
@@ -88,14 +90,53 @@ void GameCommand(string theCommand)
                                        if (!startsWith(s, filter)) continue;
                                        s = substring(s, strlen(filter), strlen(s) - strlen(filter));
                                }
-                               LOG_INFOF(" %s", s);
+                               LOG_HELP(" ", s);
                        });
                }
-               else if (argc == 2 && !isdemo())     // don't allow this command in demos
+               else if (argc == 2 && (!isdemo() || argv(1) == "Welcome")) // don't allow this command in demos
                {
                        m_play_click_sound(MENU_SOUND_OPEN);
                        m_goto(strcat(filter, argv(1))); // switch to a menu item
                }
+               else if(argc > 2 && (!isdemo() || argv(1) == "Welcome"))
+               {
+                       entity e = NULL;
+                       float argsbuf = 0;
+                       string s = strzone(argv(1)); // dialog name
+                       for(int i = 0; (e = nextent(e)); )
+                               if(e.classname != "vtbl" && e.name == strcat(filter, s))
+                               {
+                                       argsbuf = buf_create();
+                                       if(argsbuf >= 0)
+                                       if(e.readInputArgs)
+                                       {
+                                               for(i = 2; i < argc; ++i)
+                                                       bufstr_add(argsbuf, argv(i), 1);
+                                               e.readInputArgs(e, argsbuf);
+                                               m_goto(strcat(filter, s));
+                                       }
+                                       if(argsbuf >= 0)
+                                               buf_del(argsbuf);
+                               }
+               }
+               return;
+       }
+
+       if (argv(0) == "nexposee")
+       {
+               m_goto("nexposee");
+               return;
+       }
+
+       if (argv(0) == "servers")
+       {
+               m_goto("servers");
+               return;
+       }
+
+       if (argv(0) == "profile")
+       {
+               m_goto("profile");
                return;
        }
 
@@ -111,6 +152,18 @@ void GameCommand(string theCommand)
                return;
        }
 
+       if (argv(0) == "settings")
+       {
+               m_goto("settings");
+               return;
+       }
+
+       if (argv(0) == "inputsettings")
+       {
+               m_goto("inputsettings");
+               return;
+       }
+
        if (argv(0) == "videosettings")
        {
                m_goto("videosettings");
@@ -127,5 +180,5 @@ void GameCommand(string theCommand)
        if(MUTATOR_CALLHOOK(Menu_ConsoleCommand, ss, argc, theCommand)) // handled by a mutator
                return;
 
-       LOG_INFO(_("Invalid command. For a list of supported commands, try menu_cmd help."));
+       LOG_INFO("Invalid command. For a list of supported commands, try menu_cmd help.");
 }