]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into divVerent/csad
authorRudolf Polzer <divverent@xonotic.org>
Fri, 14 Dec 2012 10:16:53 +0000 (11:16 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Fri, 14 Dec 2012 10:16:53 +0000 (11:16 +0100)
_hud_common.cfg
qcsrc/client/View.qc
qcsrc/client/command/cl_cmd.qc
qcsrc/client/scoreboard.qc
qcsrc/common/command/generic.qc
qcsrc/common/util.qc
qcsrc/menu/command/menu_cmd.qc
qcsrc/server/command/sv_cmd.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/playerstats.qc

index f246ab7bc014a29188a3341232813a9e9631f7ae..5179bb2abfcddf226f547c457d0877e39d78f5b7 100644 (file)
@@ -28,9 +28,9 @@ seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_ch
 
 // hud panel aliases
 alias hud_panel_radar_rotate "toggle hud_panel_radar_rotation 0 1 2 3 4"
-alias +hud_panel_radar_maximized "cl_cmd hud_panel_radar_maximized 1"
-alias -hud_panel_radar_maximized "cl_cmd hud_panel_radar_maximized 0"
-alias hud_panel_radar_maximized "cl_cmd hud_panel_radar_maximized"
+alias +hud_panel_radar_maximized "cl_cmd hud radar 1"
+alias -hud_panel_radar_maximized "cl_cmd hud radar 0"
+alias hud_panel_radar_maximized "cl_cmd hud radar"
 
 // other hud cvars
 seta hud_showbinds 1   "what to show in the HUD to indicate certain keys to press: 0 display commands, 1 bound keys, 2 both"
index e9c21f9dd229b4e77967617ae4af7e5a956eb5b8..9ffe5a738c67634732ac4716a6fc8e7ccace8106 100644 (file)
@@ -442,7 +442,7 @@ void CSQC_UpdateView(float w, float h)
                {
                        // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
                        vector current_view_origin = getpropertyvec(VF_ORIGIN);
-                       
+
                        // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
                        // Ideally, there should be another way to enable third person cameras, such as through setproperty()
                        if(!autocvar_chase_active)
@@ -473,6 +473,13 @@ void CSQC_UpdateView(float w, float h)
                        eventchase_current_distance = 0; // start from 0 next time
                }
        }
+       // workaround for camera stuck between player's legs when using chase_active 1
+       // because the engine stops updating the chase_active camera when the game ends
+       else if(intermission)
+       {
+               cvar_settemp("chase_active", "-1");
+               eventchase_current_distance = 0;
+       }
 
        // do lockview after event chase camera so that it still applies whenever necessary.
        if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1)))
@@ -539,8 +546,8 @@ void CSQC_UpdateView(float w, float h)
                        calledhooks |= HOOK_END;
                }
        }
-       
-  Announcer();
+
+       Announcer();
 
        fov = autocvar_fov;
        if(fov <= 59.5)
index 23b9b8c70a5b7ee2486a7a7497f13f0751396237..acac8b3121574d22a2ec706a9f78849b5a404712 100644 (file)
@@ -214,7 +214,10 @@ void LocalCommand_hud(float request, float argc)
                                
                                case "radar":
                                {
-                                       hud_panel_radar_maximized = (argv(2) ? InterpretBoolean(argv(2)) : !hud_panel_radar_maximized);
+                                       if(argv(2))
+                                               hud_panel_radar_maximized = InterpretBoolean(argv(2));
+                                       else
+                                               hud_panel_radar_maximized = !hud_panel_radar_maximized;
                                        return;
                                }
                        }
index 364f9e969e27aeee9a5ca91c3a3310f2b4ee3740..303be36205e39c8b9eaa23815eb5bf84aa440649 100644 (file)
@@ -311,15 +311,15 @@ void Cmd_HUD_SetFields(float argc)
 
        // TODO: re enable with gametype dependant cvars?
        if(argc < 3) // no arguments provided
-               argc = tokenizebyseparator(strcat("x ", autocvar_scoreboard_columns), " ");
+               argc = tokenizebyseparator(strcat("0 1 ", autocvar_scoreboard_columns), " ");
 
        if(argc < 3)
-               argc = tokenizebyseparator(strcat("x ", HUD_DefaultColumnLayout()), " ");
+               argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " ");
 
        if(argc == 3)
        {
                if(argv(2) == "default")
-                       argc = tokenizebyseparator(strcat("x ", HUD_DefaultColumnLayout()), " ");
+                       argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " ");
                else if(argv(2) == "all")
                {
                        string s;
@@ -334,17 +334,17 @@ void Cmd_HUD_SetFields(float argc)
                        if(ps_secondary != ps_primary)
                                s = strcat(s, " ", scores_label[ps_secondary]);
                        s = strcat(s, " ", scores_label[ps_primary]);
-                       argc = tokenizebyseparator(strcat("x ", s), " ");
+                       argc = tokenizebyseparator(strcat("0 1 ", s), " ");
                }
        }
 
 
        hud_num_fields = 0;
 
-       hud_fontsize = HUD_GetFontsize("hud_fontsize"); 
+       hud_fontsize = HUD_GetFontsize("hud_fontsize");
 
        draw_beginBoldFont();
-       for(i = 0; i < argc - 1; ++i)
+       for(i = 1; i < argc - 1; ++i)
        {
                float nocomplain;
                str = argv(i+1);
@@ -1385,10 +1385,9 @@ void HUD_DrawScoreboard()
                {
                        // a negative number means we are awaiting respawn, time value is still the same
                        respawn_time *= -1; // remove mark now that we checked it
-                       if(time >= respawn_time) // don't show a negative value while the server is respawning the player (lag)
-                               str = _("^1Respawning...");
-                       else
-                               str = sprintf(_("^1Respawning in ^3%s^1 seconds..."), ftos_decimals(respawn_time - time, autocvar_scoreboard_respawntime_decimals));
+                       respawn_time = max(time, respawn_time); // don't show a negative value while the server is respawning the player (lag)
+                       
+                       str = sprintf(_("^1Respawning in ^3%s^1 seconds..."), ftos_decimals(respawn_time - time, autocvar_scoreboard_respawntime_decimals));
                }
                else if(time < respawn_time)
                        str = sprintf(_("You are dead, wait ^3%s^7 seconds before respawning"), ftos_decimals(respawn_time - time, autocvar_scoreboard_respawntime_decimals));
index b7b8da0e9f407f64da0bab06bc3dae90c7d4c528..07998d09c67b774b2636b61b13198318fe231283 100644 (file)
@@ -84,7 +84,7 @@ void GenericCommand_addtolist(float request, float argc)
                        print("Incorrect parameters for ^2addtolist^7\n");
                case CMD_REQUEST_USAGE:
                {
-                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " addtolist variable value"));
+                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " addtolist variable value\n"));
                        print("  Where 'variable' is what to add 'value' to.\n");
                        print("See also: ^2removefromlist^7\n");
                        return;
@@ -307,7 +307,7 @@ void GenericCommand_maplist(float request, float argc)
                        print("Incorrect parameters for ^2maplist^7\n");
                case CMD_REQUEST_USAGE:
                {
-                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " maplist action [map]"));
+                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " maplist action [map]\n"));
                        print("  Where 'action' is the command to complete,\n");
                        print("  and 'map' is what it acts upon (if required).\n");
                        print("  Full list of commands here: \"add, cleanup, remove, shuffle.\"\n");
@@ -329,7 +329,7 @@ void GenericCommand_nextframe(float request, float arguments, string command)
                default:
                case CMD_REQUEST_USAGE:
                {
-                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " nextframe command..."));
+                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " nextframe command...\n"));
                        print("  Where command will be executed next frame of this VM\n");
                        return;
                }
@@ -367,7 +367,7 @@ void GenericCommand_removefromlist(float request, float argc)
                        print("Incorrect parameters for ^2removefromlist^7\n");
                case CMD_REQUEST_USAGE:
                {
-                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " removefromlist variable value"));
+                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " removefromlist variable value\n"));
                        print("  Where 'variable' is what cvar to remove 'value' from.\n");
                        print("See also: ^2addtolist^7\n");
                        return;
@@ -383,15 +383,17 @@ void GenericCommand_settemp(float request, float argc)
                {
                        if(argc >= 3)
                        {
-                               if(cvar_settemp(argv(1), argv(2)))
+                               float f = cvar_settemp(argv(1), argv(2));
+                               if(f == 1)
                                        dprint("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n"); 
-                               else
+                               else if(f == -1)
                                        dprint("Already had a tracker for ", argv(1), ", updating it to \"", argv(2), "\".\n");
-                       
+                               // else cvar_settemp itself errors out
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2settemp^7\n");
                case CMD_REQUEST_USAGE:
index 98eecb3c61cdb6af600f2ec9999098a15f6be999..0056050cccf1450d02bdac55e02e2304e1714c88 100644 (file)
@@ -865,31 +865,37 @@ float cvar_settemp(string tmp_cvar, string tmp_value)
        float created_saved_value;
        entity e;
 
-       created_saved_value = FALSE;
-       
+       created_saved_value = 0;
+
        if not(tmp_cvar || tmp_value)
        {
                dprint("Error: Invalid usage of cvar_settemp(string, string); !\n");
-               return FALSE;
+               return 0;
        }
-       
+
+       if(!cvar_type(tmp_cvar))
+       {
+               print(sprintf("Error: cvar %s doesn't exist!\n", tmp_cvar));
+               return 0;
+       }
+
        for(e = world; (e = find(e, classname, "saved_cvar_value")); )
                if(e.netname == tmp_cvar)
-                       goto saved; // skip creation
-                       
-       // creating a new entity to keep track of this cvar
-       e = spawn();
-       e.classname = "saved_cvar_value";
-       e.netname = strzone(tmp_cvar);
-       e.message = strzone(cvar_string(tmp_cvar));
-       created_saved_value = TRUE;
-       
-       // an entity for this cvar already exists
-       :saved
-       
+                       created_saved_value = -1; // skip creation
+
+       if(created_saved_value != -1)
+       {
+               // creating a new entity to keep track of this cvar
+               e = spawn();
+               e.classname = "saved_cvar_value";
+               e.netname = strzone(tmp_cvar);
+               e.message = strzone(cvar_string(tmp_cvar));
+               created_saved_value = 1;
+       }
+
        // update the cvar to the value given
        cvar_set(tmp_cvar, tmp_value);
-       
+
        return created_saved_value;
 }
 
@@ -897,12 +903,18 @@ float cvar_settemp_restore()
 {
        float i;
        entity e;
-       while((e = find(world, classname, "saved_cvar_value")))
+       while((e = find(e, classname, "saved_cvar_value")))
        {
-               cvar_set(e.netname, e.message);
-               remove(e);
+               if(cvar_type(e.netname))
+               {
+                       cvar_set(e.netname, e.message);
+                       remove(e);
+                       ++i;
+               }
+               else
+                       print(sprintf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname));
        }
-       
+
        return i;
 }
 
index f6312931f6a11c4117c159433c2361c949ec22c0..2835d522da0e528fc19a9c0388d95114556fc94c 100644 (file)
@@ -35,7 +35,10 @@ void GameCommand(string theCommand)
                print(_("Usage: menu_cmd command..., where possible commands are:\n"));
                print(_("  sync - reloads all cvars on the current menu page\n"));
                print(_("  directmenu ITEM - select a menu item as main item\n"));
-               GenericCommand("help");
+
+               print("\nGeneric commands shared by all programs:\n");
+               GenericCommand_macro_help();
+
                return;
        }
 
@@ -48,18 +51,37 @@ void GameCommand(string theCommand)
                return;
        }
 
-       if(argv(0) == "directmenu") if(argc == 2)
+       if(argv(0) == "directmenu" || argv(0) == "directpanelhudmenu")
        {
-               // switch to a menu item
-               if(!isdemo()) // don't allow this command in demos
-                       m_goto(argv(1));
-               return;
-       }
+               string filter;
+               if(argv(0) == "directpanelhudmenu")
+                       filter = strzone("HUD");
 
-       if(argv(0) == "directpanelhudmenu")
-       {
-               // switch to a menu item
-               m_goto(strcat("HUD", argv(1)));
+               if(argc == 1)
+               {
+                       print(_("Available options:\n"));
+                       float i;
+                       entity e;
+                       string s;
+
+                       for(i = 0, e = world; (e = nextent(e)); )
+                               if(e.classname != "vtbl" && e.name != "")
+                               {
+                                       s = e.name;
+                                       if(filter)
+                                       {
+                                               if(substring(s, 0, strlen(filter)) != filter)
+                                                       continue;
+                                               s = substring(s, strlen(filter), strlen(s) - strlen(filter));
+                                       }
+                                       print(strcat(" ", s ,"\n"));
+                                       ++i;
+                               }
+               }
+               else if(argc == 2 && !isdemo()) // don't allow this command in demos
+                       m_goto(strcat(filter, argv(1))); // switch to a menu item
+               if(filter)
+                       strunzone(filter);
                return;
        }
 
index 25c7940cb7bf6831dbdb2b4208c779ea6f0fe471..2dd52317569ab862e62a3a01ae56fe98c1b1761f 100644 (file)
@@ -1689,8 +1689,9 @@ void GameCommand_warp(float request, float argc)
                default:
                case CMD_REQUEST_USAGE:
                {
-                       print("\nUsage:^3 sv_cmd level\n");
+                       print("\nUsage:^3 sv_cmd warp [level]\n");
                        print("  'level' is the level to change campaign mode to.\n");
+                       print("  if 'level' is not provided it will change to the next level.\n");
                        return;
                }
        }
index 69bf57d51b4af98e37a6f79e55d45cdc4cffe841..a41389a4fd2803ceea69176fa6f9ed0f9964c449 100644 (file)
@@ -826,18 +826,18 @@ void spawnfunc_worldspawn (void)
        addstat(STAT_MOVEVARS_MAXSPEED, AS_FLOAT, stat_sv_maxspeed);
        addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw);
        addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw);
-       
+
        // secrets
        addstat(STAT_SECRETS_TOTAL, AS_FLOAT, stat_secrets_total);
        addstat(STAT_SECRETS_FOUND, AS_FLOAT, stat_secrets_found);
 
        // misc
        addstat(STAT_RESPAWN_TIME, AS_FLOAT, stat_respawn_time);
-       
+
        next_pingtime = time + 5;
 
        detect_maptype();
-       
+
        // set up information replies for clients and server to use
        lsmaps_reply = "^7Maps available: ";
        lsnewmaps_reply = "^7Maps without a record set: ";
@@ -850,18 +850,18 @@ void spawnfunc_worldspawn (void)
                                        col = "^2";
                                else
                                        col = "^3";
-                                       
+
                                ++j;
-                               
+
                                lsmaps_reply = strcat(lsmaps_reply, col, MapInfo_Map_bspname, " ");
-                               
+
                                if(g_race && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, RACE_RECORD, "time"))))
                                        lsnewmaps_reply = strcat(lsnewmaps_reply, col, MapInfo_Map_bspname, " ");
                                else if(g_cts && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, CTS_RECORD, "time"))))
                                        lsnewmaps_reply = strcat(lsnewmaps_reply, col, MapInfo_Map_bspname, " ");
                        }
        }
-       
+
        lsmaps_reply = strzone(strcat(lsmaps_reply, "\n"));
        lsnewmaps_reply = strzone(strcat(((!g_race && !g_cts) ? "Need to be playing race or CTS for lsnewmaps to work." : lsnewmaps_reply), "\n"));
 
@@ -884,9 +884,11 @@ void spawnfunc_worldspawn (void)
 
        for(i = 0; i < 10; ++i)
        {
-               records_reply[i] = strzone(getrecords(i));
+               s = getrecords(i);
+               if (s)
+                       records_reply[i] = strzone(s);
        }
-       
+
        ladder_reply = strzone(getladder());
 
        rankings_reply = strzone(getrankings());
@@ -1345,10 +1347,10 @@ float mapvote_initialized;
 void IntermissionThink()
 {
        FixIntermissionClient(self);
-       
+
        float server_screenshot = (autocvar_sv_autoscreenshot && self.cvar_cl_autoscreenshot);
        float client_screenshot = (self.cvar_cl_autoscreenshot == 2);
-       
+
        if( (server_screenshot || client_screenshot)
                && ((self.autoscreenshot > 0) && (time > self.autoscreenshot)) )
        {
index 20828800deebfdd3d7d0407269179ec0037489a8..eed2006a5bd63eb60a9cf27c13fe1c40ec5f2193 100644 (file)
@@ -2410,8 +2410,8 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float
        {
                if (visual)
                {
-                       vecs_y = 0;
-                       vecs_z -= 2;
+                       if (autocvar_g_shootfromclient) { vecs = shotorg_adjustfromclient(vecs, y_is_right, (autocvar_g_shootfromclient >= 2), algn); }
+                       else { vecs_y = 0; vecs_z -= 2; }
                }
                else
                {
index 4608b56df10f1330011e64e358e7c155035a42ef..5ddad200fe752499c8dffb78ef2db4b549407202 100644 (file)
@@ -210,22 +210,7 @@ void PlayerStats_TeamScore(float t, string event_id, float value) // TODO: doesn
                        acc-<weapon netname>-cnt-fired: amount of fired shots
                        acc-<weapon netname>-frags: amount of frags dealt by weapon
 
-       Response format (not used yet):
-
-       V: format version (always 1) - this MUST be the first line!
-       #: comment (MUST be ignored by any parser)
-       R: release information on the XonStat server
-       T: current time
-       S: in case of a stats submit request, the human readable xonstat URL for the submitted match
-       P: player ID of an existing player; this also sets the owner for all following "n", "e" and "t" lines (lower case!)
-       e: followed by an event name, a space, and the event count/score, and - if this is a reply to a stats submit request - a space, and the delta of the event count/score caused by this match
-               event names can be the same as above (they then are either sums, or minimum/maximum values, depending on context), as well as:
-                       elo: current Elo calculated by the stats server
-                       rank <number>: global rank of player for this game type (for stats submit requests)
-                       rank-<gametype> <number>: global rank of player for any game type (for non stats submit requests)
-               not all events need to be included, of course
-               if an event is counted additively from unprocessed submitted data, it should not be sent as part of stats submit response
-               achievement-<achievementname> events may be generated by the xonstat server and reported as part of stats submit responses!
+       Response format (not used yet): see https://gist.github.com/4284222
 */
 
 void PlayerStats_ready(entity fh, entity pass, float status)