]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host_cmd.c
ping command now works from server console
[xonotic/darkplaces.git] / host_cmd.c
index 59eaee050b52538e971683b43fb1c0394e16a32f..be312bf8880529ca51392b623cdcf35c8c4838e1 100644 (file)
@@ -209,21 +209,28 @@ Host_Ping_f
 */
 void Host_Ping_f (void)
 {
-       int             i;
-       client_t        *client;
+       int i;
+       client_t *client;
+       void (*print) (const char *fmt, ...);
 
        if (cmd_source == src_command)
        {
-               Cmd_ForwardToServer ();
-               return;
+               if (!sv.active)
+               {
+                       Cmd_ForwardToServer ();
+                       return;
+               }
+               print = Con_Printf;
        }
+       else
+               print = SV_ClientPrintf;
 
-       SV_ClientPrint("Client ping times:\n");
+       print("Client ping times:\n");
        for (i = 0, client = svs.clients;i < svs.maxclients;i++, client++)
        {
                if (!client->active)
                        continue;
-               SV_ClientPrintf("%4i %s\n", (int)floor(client->ping*1000+0.5), client->name);
+               print("%4i %s\n", (int)floor(client->ping*1000+0.5), client->name);
        }
 }
 
@@ -294,7 +301,12 @@ void Host_Changelevel_f (void)
                Con_Print("changelevel <levelname> : continue game on a new level\n");
                return;
        }
-       if (!sv.active || cls.demoplayback)
+       // HACKHACKHACK
+       if (!sv.active) {
+               Host_Map_f();
+               return;
+       }
+       if (cls.demoplayback)
        {
                Con_Print("Only the server may changelevel\n");
                return;
@@ -455,7 +467,7 @@ Host_Savegame_f
 */
 void Host_Savegame_f (void)
 {
-       char    name[256];
+       char    name[MAX_QPATH];
        qfile_t *f;
        int             i;
        char    comment[SAVEGAME_COMMENT_LENGTH+1];
@@ -581,7 +593,7 @@ void Host_Loadgame_f (void)
 
        cls.demonum = -1;               // stop demo loop in case this fails
 
-       t = text = FS_LoadFile (filename, tempmempool, false);
+       t = text = (char *)FS_LoadFile (filename, tempmempool, false, NULL);
        if (!text)
        {
                Con_Print("ERROR: couldn't open.\n");
@@ -675,7 +687,7 @@ void Host_Loadgame_f (void)
                        if (entnum >= MAX_EDICTS)
                        {
                                Mem_Free(text);
-                               Host_Error("Host_PerformLoadGame: too many edicts in save file (reached MAX_EDICTS %i)\n", MAX_EDICTS);
+                               Host_Error("Host_PerformLoadGame: too many edicts in save file (reached MAX_EDICTS %i)", MAX_EDICTS);
                        }
                        while (entnum >= prog->max_edicts)
                                //SV_IncreaseEdicts();
@@ -818,8 +830,6 @@ void Host_Playermodel_f (void)
                PRVM_GETEDICTFIELDVALUE(host_client->edict, eval_playermodel)->string = PRVM_SetEngineString(host_client->playermodel);
        if (strcmp(host_client->old_model, host_client->playermodel))
        {
-               if (host_client->spawned)
-                       SV_BroadcastPrintf("%s changed model to %s\n", host_client->name, host_client->playermodel);
                strcpy(host_client->old_model, host_client->playermodel);
                /*// send notification to all clients
                MSG_WriteByte (&sv.reliable_datagram, svc_updatepmodel);
@@ -900,8 +910,8 @@ void Host_Say(qboolean teamonly)
        int j, quoted;
        const char *p1;
        char *p2;
-       // LordHavoc: 256 char say messages
-       unsigned char text[256];
+       // LordHavoc: long say messages
+       char text[1024];
        qboolean fromServer = false;
 
        if (cmd_source == src_command)
@@ -933,9 +943,9 @@ void Host_Say(qboolean teamonly)
                p1++;
        }
        if (!fromServer)
-               dpsnprintf (text, sizeof(text), "%c%s: %s", 1, host_client->name, p1);
+               dpsnprintf (text, sizeof(text), "%c%s" STRING_COLOR_DEFAULT_STR ": %s", 1, host_client->name, p1);
        else
-               dpsnprintf (text, sizeof(text), "%c<%s> %s", 1, hostname.string, p1);
+               dpsnprintf (text, sizeof(text), "%c<%s" STRING_COLOR_DEFAULT_STR "> %s", 1, hostname.string, p1);
        p2 = text + strlen(text);
        while ((const char *)p2 > (const char *)text && (p2[-1] == '\r' || p2[-1] == '\n' || (p2[-1] == '\"' && quoted)))
        {
@@ -975,7 +985,7 @@ void Host_Tell_f(void)
        client_t *save;
        int j;
        const char *p1, *p2;
-       char text[1024]; // LordHavoc: FIXME: temporary buffer overflow fix (was 64)
+       char text[MAX_INPUTLINE]; // LordHavoc: FIXME: temporary buffer overflow fix (was 64)
        qboolean fromServer = false;
 
        if (cmd_source == src_command)
@@ -1020,7 +1030,7 @@ void Host_Tell_f(void)
        }
        while (p2 > p1 && (p2[-1] == '\n' || p2[-1] == '\r'))
                p2--;
-       for (j = strlen(text);j < (int)(sizeof(text) - 2) && p1 < p2;)
+       for (j = (int)strlen(text);j < (int)(sizeof(text) - 2) && p1 < p2;)
                text[j++] = *p1++;
        text[j++] = '\n';
        text[j++] = 0;
@@ -1188,6 +1198,7 @@ void Host_Pause_f (void)
 ======================
 Host_PModel_f
 LordHavoc: only supported for Nehahra, I personally think this is dumb, but Mindcrime won't listen.
+LordHavoc: correction, Mindcrime will be removing pmodel in the future, but it's still stuck here for compatibility.
 ======================
 */
 cvar_t cl_pmodel = {CVAR_SAVE, "_cl_pmodel", "0"};
@@ -1299,9 +1310,6 @@ void Host_Spawn_f (void)
        }
        else
        {
-               // set up the edict
-               PRVM_ED_ClearEdict(host_client->edict);
-
                //Con_Printf("Host_Spawn_f: host_client->edict->netname = %s, host_client->edict->netname = %s, host_client->name = %s\n", PRVM_GetString(host_client->edict->fields.server->netname), PRVM_GetString(host_client->edict->fields.server->netname), host_client->name);
 
                // copy spawn parms out of the client_t
@@ -1343,9 +1351,12 @@ void Host_Spawn_f (void)
        // send all current light styles
        for (i=0 ; i<MAX_LIGHTSTYLES ; i++)
        {
-               MSG_WriteByte (&host_client->message, svc_lightstyle);
-               MSG_WriteByte (&host_client->message, (char)i);
-               MSG_WriteString (&host_client->message, sv.lightstyles[i]);
+               if (sv.lightstyles[i][0])
+               {
+                       MSG_WriteByte (&host_client->message, svc_lightstyle);
+                       MSG_WriteByte (&host_client->message, (char)i);
+                       MSG_WriteString (&host_client->message, sv.lightstyles[i]);
+               }
        }
 
        // send some stats
@@ -1681,9 +1692,9 @@ void Host_Viewmodel_f (void)
                return;
 
        m = Mod_ForName (Cmd_Argv(1), false, true, false);
-       if (!m)
+       if (!m || !m->loaded || !m->Draw)
        {
-               Con_Printf("Can't load %s\n", Cmd_Argv(1));
+               Con_Printf("viewmodel: can't load %s\n", Cmd_Argv(1));
                return;
        }
 
@@ -1884,7 +1895,7 @@ static void MaxPlayers_f(void)
        if (svs.clients)
                Mem_Free(svs.clients);
        svs.maxclients = n;
-       svs.clients = Mem_Alloc(sv_mempool, sizeof(client_t) * svs.maxclients);
+       svs.clients = (client_t *)Mem_Alloc(sv_mempool, sizeof(client_t) * svs.maxclients);
        if (n == 1)
                Cvar_Set ("deathmatch", "0");
        else