]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host_cmd.c
Revert "Disable occlusion query on Intel. Can be force-enabled. Hopefully temporary"
[xonotic/darkplaces.git] / host_cmd.c
index 4ccc0cf67c16733eca93072d7a8ef45a182a6d39..280ce6a6f1c79e6dae8a8a9e3c0f51be45047190 100644 (file)
@@ -44,7 +44,6 @@ cvar_t team = {CVAR_CLIENT | CVAR_USERINFO | CVAR_SAVE, "team", "none", "QW team
 cvar_t skin = {CVAR_CLIENT | CVAR_USERINFO | CVAR_SAVE, "skin", "", "QW player skin name (example: base)"};
 cvar_t noaim = {CVAR_CLIENT | CVAR_USERINFO | CVAR_SAVE, "noaim", "1", "QW option to disable vertical autoaim"};
 cvar_t r_fixtrans_auto = {CVAR_CLIENT, "r_fixtrans_auto", "0", "automatically fixtrans textures (when set to 2, it also saves the fixed versions to a fixtrans directory)"};
-qboolean allowcheats = false;
 
 extern qboolean host_shuttingdown;
 extern cvar_t developer_entityparsing;
@@ -152,7 +151,7 @@ static void Host_Status_f(cmd_state_t *cmd)
                if(sv_status_privacy.integer && cmd->source != src_command)
                        strlcpy(ip, client->netconnection ? "hidden" : "botclient", 48);
                else
-                       strlcpy(ip, (client->netconnection && client->netconnection->address) ? client->netconnection->address : "botclient", 48);
+                       strlcpy(ip, (client->netconnection && *client->netconnection->address) ? client->netconnection->address : "botclient", 48);
 
                frags = client->frags;
 
@@ -211,9 +210,9 @@ Sets client to godmode
 static void Host_God_f(cmd_state_t *cmd)
 {
        prvm_prog_t *prog = SVVM_prog;
-       if (!allowcheats)
+       if (!sv_cheats.integer)
        {
-               SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
+               SV_ClientPrint("No cheats allowed. Set sv_cheats to 1 in the server console to enable.\n");
                return;
        }
 
@@ -227,9 +226,9 @@ static void Host_God_f(cmd_state_t *cmd)
 static void Host_Notarget_f(cmd_state_t *cmd)
 {
        prvm_prog_t *prog = SVVM_prog;
-       if (!allowcheats)
+       if (!sv_cheats.integer)
        {
-               SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
+               SV_ClientPrint("No cheats allowed. Set sv_cheats to 1 in the server console to enable.\n");
                return;
        }
 
@@ -245,9 +244,9 @@ qboolean noclip_anglehack;
 static void Host_Noclip_f(cmd_state_t *cmd)
 {
        prvm_prog_t *prog = SVVM_prog;
-       if (!allowcheats)
+       if (!sv_cheats.integer)
        {
-               SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
+               SV_ClientPrint("No cheats allowed. Set sv_cheats to 1 in the server console to enable.\n");
                return;
        }
 
@@ -275,9 +274,9 @@ Sets client to flymode
 static void Host_Fly_f(cmd_state_t *cmd)
 {
        prvm_prog_t *prog = SVVM_prog;
-       if (!allowcheats)
+       if (!sv_cheats.integer)
        {
-               SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
+               SV_ClientPrint("No cheats allowed. Set sv_cheats to 1 in the server console to enable.\n");
                return;
        }
 
@@ -331,6 +330,31 @@ static void Host_Ping_f(cmd_state_t *cmd)
        }
 }
 
+// Disable cheats if sv_cheats is turned off
+static void Host_DisableCheats_c(char *value)
+{
+       prvm_prog_t *prog = SVVM_prog;
+       int i = 0;
+
+       if (value[0] == '0' && !value[1])
+       {
+               while (svs.clients[i].edict)
+               {
+                       if (((int)PRVM_serveredictfloat(svs.clients[i].edict, flags) & FL_GODMODE))
+                               PRVM_serveredictfloat(svs.clients[i].edict, flags) = (int)PRVM_serveredictfloat(svs.clients[i].edict, flags) ^ FL_GODMODE;
+                       if (((int)PRVM_serveredictfloat(svs.clients[i].edict, flags) & FL_NOTARGET))
+                               PRVM_serveredictfloat(svs.clients[i].edict, flags) = (int)PRVM_serveredictfloat(svs.clients[i].edict, flags) ^ FL_NOTARGET;
+                       if (PRVM_serveredictfloat(svs.clients[i].edict, movetype) == MOVETYPE_NOCLIP ||
+                               PRVM_serveredictfloat(svs.clients[i].edict, movetype) == MOVETYPE_FLY)
+                       {
+                               noclip_anglehack = false;
+                               PRVM_serveredictfloat(svs.clients[i].edict, movetype) = MOVETYPE_WALK;
+                       }
+                       i++;
+               }
+       }
+}
+
 /*
 ===============================================================================
 
@@ -383,7 +407,6 @@ static void Host_Map_f(cmd_state_t *cmd)
        key_dest = key_game;
 
        svs.serverflags = 0;                    // haven't completed an episode yet
-       allowcheats = sv_cheats.integer != 0;
        strlcpy(level, Cmd_Argv(cmd, 1), sizeof(level));
        SV_SpawnServer(level);
        if (sv.active && cls.state == ca_disconnected)
@@ -420,7 +443,6 @@ static void Host_Changelevel_f(cmd_state_t *cmd)
        key_dest = key_game;
 
        SV_SaveSpawnparms ();
-       allowcheats = sv_cheats.integer != 0;
        strlcpy(level, Cmd_Argv(cmd, 1), sizeof(level));
        SV_SpawnServer(level);
        if (sv.active && cls.state == ca_disconnected)
@@ -456,7 +478,6 @@ static void Host_Restart_f(cmd_state_t *cmd)
 #endif
        key_dest = key_game;
 
-       allowcheats = sv_cheats.integer != 0;
        strlcpy(mapname, sv.name, sizeof(mapname));
        SV_SpawnServer(mapname);
        if (sv.active && cls.state == ca_disconnected)
@@ -849,8 +870,6 @@ static void Host_Loadgame_f(cmd_state_t *cmd)
        COM_ParseToken_Simple(&t, false, false, true);
        time = atof(com_token);
 
-       allowcheats = sv_cheats.integer != 0;
-
        if(developer_entityparsing.integer)
                Con_Printf("Host_Loadgame_f: spawning server\n");
 
@@ -959,7 +978,7 @@ static void Host_Loadgame_f(cmd_state_t *cmd)
                        PRVM_ED_ParseEdict (prog, start, ent);
 
                        // link it into the bsp tree
-                       if (!ent->priv.server->free)
+                       if (!ent->priv.server->free && !VectorCompare(PRVM_serveredictvector(ent, absmin), PRVM_serveredictvector(ent, absmax)))
                                SV_LinkEdict(ent);
                }
 
@@ -2141,7 +2160,7 @@ static void Host_Give_f(cmd_state_t *cmd)
        const char *t;
        int v;
 
-       if (!allowcheats)
+       if (!sv_cheats.integer)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
                return;
@@ -2929,7 +2948,7 @@ Host_Pings_f
 Send back ping and packet loss update for all current players to this player
 ====================
 */
-void Host_Pings_f(cmd_state_t *cmd)
+static void Host_Pings_f(cmd_state_t *cmd)
 {
        int             i, j, ping, packetloss, movementloss;
        char temp[128];
@@ -3026,6 +3045,7 @@ void Host_InitCommands (void)
        Cvar_RegisterVariable(&skin);
        Cvar_RegisterVariable(&noaim);
        Cvar_RegisterVariable(&sv_cheats);
+       Cvar_RegisterCallback(&sv_cheats, Host_DisableCheats_c);
        Cvar_RegisterVariable(&sv_adminnick);
        Cvar_RegisterVariable(&sv_status_privacy);
        Cvar_RegisterVariable(&sv_status_show_qcstatus);