]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host_cmd.c
changed a lot of Con_DPrint/Con_DPrintf calls to Con_Print/Con_Printf (non-technical...
[xonotic/darkplaces.git] / host_cmd.c
index 07ca90a235ec238a8cdd21c66d895e4c340cfeb4..80b62d1c13da9f1a236090990b61a18f594d5f61 100644 (file)
@@ -75,6 +75,7 @@ void Host_Status_f (void)
                case PROTOCOL_DARKPLACES3: protocolname = "PROTOCOL_DARKPLACES3";break;
                case PROTOCOL_DARKPLACES4: protocolname = "PROTOCOL_DARKPLACES4";break;
                case PROTOCOL_DARKPLACES5: protocolname = "PROTOCOL_DARKPLACES5";break;
+               case PROTOCOL_DARKPLACES6: protocolname = "PROTOCOL_DARKPLACES6";break;
                default: protocolname = "PROTOCOL_UNKNOWN";break;
        }
        print ("protocol: %i (%s)\n", sv.protocol, protocolname);
@@ -84,7 +85,7 @@ void Host_Status_f (void)
        {
                if (!client->active)
                        continue;
-               seconds = (int)(realtime - client->netconnection->connecttime);
+               seconds = (int)(realtime - client->connecttime);
                minutes = seconds / 60;
                if (minutes)
                {
@@ -96,7 +97,7 @@ void Host_Status_f (void)
                else
                        hours = 0;
                print ("#%-2u %-16.16s  %3i  %2i:%02i:%02i\n", j+1, client->name, (int)client->edict->v->frags, hours, minutes, seconds);
-               print ("   %s\n", client->netconnection->address);
+               print ("   %s\n", client->netconnection ? client->netconnection->address : "botclient");
        }
 }
 
@@ -116,17 +117,14 @@ void Host_God_f (void)
                return;
        }
 
-       if (!sv_player)
-               return;
-
        if (!allowcheats)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
                return;
        }
 
-       sv_player->v->flags = (int)sv_player->v->flags ^ FL_GODMODE;
-       if (!((int)sv_player->v->flags & FL_GODMODE) )
+       host_client->edict->v->flags = (int)host_client->edict->v->flags ^ FL_GODMODE;
+       if (!((int)host_client->edict->v->flags & FL_GODMODE) )
                SV_ClientPrint("godmode OFF\n");
        else
                SV_ClientPrint("godmode ON\n");
@@ -140,17 +138,14 @@ void Host_Notarget_f (void)
                return;
        }
 
-       if (!sv_player)
-               return;
-
        if (!allowcheats)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
                return;
        }
 
-       sv_player->v->flags = (int)sv_player->v->flags ^ FL_NOTARGET;
-       if (!((int)sv_player->v->flags & FL_NOTARGET) )
+       host_client->edict->v->flags = (int)host_client->edict->v->flags ^ FL_NOTARGET;
+       if (!((int)host_client->edict->v->flags & FL_NOTARGET) )
                SV_ClientPrint("notarget OFF\n");
        else
                SV_ClientPrint("notarget ON\n");
@@ -166,25 +161,22 @@ void Host_Noclip_f (void)
                return;
        }
 
-       if (!sv_player)
-               return;
-
        if (!allowcheats)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
                return;
        }
 
-       if (sv_player->v->movetype != MOVETYPE_NOCLIP)
+       if (host_client->edict->v->movetype != MOVETYPE_NOCLIP)
        {
                noclip_anglehack = true;
-               sv_player->v->movetype = MOVETYPE_NOCLIP;
+               host_client->edict->v->movetype = MOVETYPE_NOCLIP;
                SV_ClientPrint("noclip ON\n");
        }
        else
        {
                noclip_anglehack = false;
-               sv_player->v->movetype = MOVETYPE_WALK;
+               host_client->edict->v->movetype = MOVETYPE_WALK;
                SV_ClientPrint("noclip OFF\n");
        }
 }
@@ -204,23 +196,20 @@ void Host_Fly_f (void)
                return;
        }
 
-       if (!sv_player)
-               return;
-
        if (!allowcheats)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
                return;
        }
 
-       if (sv_player->v->movetype != MOVETYPE_FLY)
+       if (host_client->edict->v->movetype != MOVETYPE_FLY)
        {
-               sv_player->v->movetype = MOVETYPE_FLY;
+               host_client->edict->v->movetype = MOVETYPE_FLY;
                SV_ClientPrint("flymode ON\n");
        }
        else
        {
-               sv_player->v->movetype = MOVETYPE_WALK;
+               host_client->edict->v->movetype = MOVETYPE_WALK;
                SV_ClientPrint("flymode OFF\n");
        }
 }
@@ -648,8 +637,9 @@ void Host_Loadgame_f (void)
 // load the edicts out of the savegame file
        // -1 is the globals
        entnum = -1;
-       while (!FS_Eof (f))
+       for (;;)
        {
+               r = EOF;
                for (i = 0;i < (int)sizeof(buf) - 1;i++)
                {
                        r = FS_Getc (f);
@@ -662,6 +652,8 @@ void Host_Loadgame_f (void)
                                break;
                        }
                }
+               if (r == EOF)
+                       break;
                if (i == sizeof(buf)-1)
                        Host_Error ("Loadgame buffer overflow");
                buf[i] = 0;
@@ -757,19 +749,19 @@ void Host_Name_f (void)
        
        host_client->nametime = sv.time + 5;
 
-       if (strcmp(host_client->name, newName) && host_client->name[0] && strcmp(host_client->name, "unconnected"))
-               SV_BroadcastPrintf("%s changed name to %s\n", host_client->name, newName);
-       strcpy(host_client->name, newName);
-       strcpy(host_client->old_name, newName);
-       if (sv_player)
-               sv_player->v->netname = PR_SetString(host_client->name);
-       //Con_Printf("Host_Name_f: host_client->edict->netname = %s, sv_player->netname = %s, host_client->name = %s\n", PR_GetString(host_client->edict->v->netname), PR_GetString(sv_player->v->netname), host_client->name);
-
-// send notification to all clients
-
-       MSG_WriteByte(&sv.reliable_datagram, svc_updatename);
-       MSG_WriteByte(&sv.reliable_datagram, host_client->number);
-       MSG_WriteString(&sv.reliable_datagram, host_client->name);
+       // point the string back at updateclient->name to keep it safe
+       strlcpy (host_client->name, newName, sizeof (host_client->name));
+       host_client->edict->v->netname = PR_SetString(host_client->name);
+       if (strcmp(host_client->old_name, host_client->name))
+       {
+               if (host_client->spawned)
+                       SV_BroadcastPrintf("%s changed name to %s\n", host_client->old_name, host_client->name);
+               strcpy(host_client->old_name, host_client->name);
+               // send notification to all clients
+               MSG_WriteByte (&sv.reliable_datagram, svc_updatename);
+               MSG_WriteByte (&sv.reliable_datagram, host_client - svs.clients);
+               MSG_WriteString (&sv.reliable_datagram, host_client->name);
+       }
 }
 
 
@@ -837,7 +829,7 @@ void Host_Say(qboolean teamonly)
                        SV_ClientPrint(text);
        host_client = save;
 
-       Sys_Print(&text[1]);
+       //Con_Print(&text[1]);
 }
 
 
@@ -963,30 +955,32 @@ void Host_Color_f(void)
                return;
        }
 
-       if (sv_player && (f = ED_FindFunction ("SV_ChangeTeam")) && (SV_ChangeTeam = (func_t)(f - pr_functions)))
+       if (host_client->edict && (f = ED_FindFunction ("SV_ChangeTeam")) && (SV_ChangeTeam = (func_t)(f - pr_functions)))
        {
                Con_DPrint("Calling SV_ChangeTeam\n");
                pr_global_struct->time = sv.time;
                pr_globals[OFS_PARM0] = playercolor;
-               pr_global_struct->self = EDICT_TO_PROG(sv_player);
+               pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
                PR_ExecuteProgram (SV_ChangeTeam, "QC function SV_ChangeTeam is missing");
        }
        else
        {
                eval_t *val;
-               if (sv_player)
+               if (host_client->edict)
                {
-                       if ((val = GETEDICTFIELDVALUE(sv_player, eval_clientcolors)))
+                       if ((val = GETEDICTFIELDVALUE(host_client->edict, eval_clientcolors)))
                                val->_float = playercolor;
-                       sv_player->v->team = bottom + 1;
+                       host_client->edict->v->team = bottom + 1;
                }
                host_client->colors = playercolor;
-               host_client->old_colors = playercolor;
-
-               // send notification to all clients
-               MSG_WriteByte (&sv.reliable_datagram, svc_updatecolors);
-               MSG_WriteByte (&sv.reliable_datagram, host_client->number);
-               MSG_WriteByte (&sv.reliable_datagram, host_client->colors);
+               if (host_client->old_colors != host_client->colors)
+               {
+                       host_client->old_colors = host_client->colors;
+                       // send notification to all clients
+                       MSG_WriteByte (&sv.reliable_datagram, svc_updatecolors);
+                       MSG_WriteByte (&sv.reliable_datagram, host_client - svs.clients);
+                       MSG_WriteByte (&sv.reliable_datagram, host_client->colors);
+               }
        }
 }
 
@@ -1012,7 +1006,7 @@ void Host_Rate_f(void)
                return;
        }
 
-       host_client->netconnection->rate = rate;
+       host_client->rate = rate;
 }
 
 /*
@@ -1028,7 +1022,7 @@ void Host_Kill_f (void)
                return;
        }
 
-       if (!sv_player || sv_player->v->health <= 0)
+       if (host_client->edict->v->health <= 0)
        {
                SV_ClientPrint("Can't suicide -- already dead!\n");
                return;
@@ -1094,8 +1088,7 @@ static void Host_PModel_f (void)
                return;
        }
 
-       host_client->pmodel = i;
-       if (sv_player && (val = GETEDICTFIELDVALUE(sv_player, eval_pmodel)))
+       if (host_client->edict && (val = GETEDICTFIELDVALUE(host_client->edict, eval_pmodel)))
                val->_float = i;
 }
 
@@ -1141,6 +1134,7 @@ void Host_Spawn_f (void)
        client_t *client;
        func_t RestoreGame;
        mfunction_t *f;
+       int stats[MAX_CL_STATS];
 
        if (cmd_source == src_command)
        {
@@ -1154,12 +1148,6 @@ void Host_Spawn_f (void)
                return;
        }
 
-       if (!sv_player)
-       {
-               Con_Print("Host_Spawn: no edict??\n");
-               return;
-       }
-
        // reset name change timer again because they might want to change name
        // again in the first 5 seconds after connecting
        host_client->nametime = 0;
@@ -1180,16 +1168,16 @@ void Host_Spawn_f (void)
                {
                        Con_DPrint("Calling RestoreGame\n");
                        pr_global_struct->time = sv.time;
-                       pr_global_struct->self = EDICT_TO_PROG(sv_player);
+                       pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
                        PR_ExecuteProgram (RestoreGame, "QC function RestoreGame is missing");
                }
        }
        else
        {
                // set up the edict
-               ED_ClearEdict(sv_player);
+               ED_ClearEdict(host_client->edict);
 
-               //Con_Printf("Host_Spawn_f: host_client->edict->netname = %s, sv_player->netname = %s, host_client->name = %s\n", PR_GetString(host_client->edict->v->netname), PR_GetString(sv_player->v->netname), host_client->name);
+               //Con_Printf("Host_Spawn_f: host_client->edict->netname = %s, host_client->edict->netname = %s, host_client->name = %s\n", PR_GetString(host_client->edict->v->netname), PR_GetString(host_client->edict->v->netname), host_client->name);
 
                // copy spawn parms out of the client_t
                for (i=0 ; i< NUM_SPAWN_PARMS ; i++)
@@ -1197,11 +1185,11 @@ void Host_Spawn_f (void)
 
                // call the spawn function
                pr_global_struct->time = sv.time;
-               pr_global_struct->self = EDICT_TO_PROG(sv_player);
+               pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
                PR_ExecuteProgram (pr_global_struct->ClientConnect, "QC function ClientConnect is missing");
 
-               if ((Sys_DoubleTime() - host_client->netconnection->connecttime) <= sv.time)
-                       Sys_Printf("%s entered the game\n", host_client->name);
+               if ((Sys_DoubleTime() - host_client->connecttime) <= sv.time)
+                       Con_Printf("%s entered the game\n", host_client->name);
 
                PR_ExecuteProgram (pr_global_struct->PutClientInServer, "QC function PutClientInServer is missing");
        }
@@ -1217,13 +1205,13 @@ void Host_Spawn_f (void)
                        continue;
                MSG_WriteByte (&host_client->message, svc_updatename);
                MSG_WriteByte (&host_client->message, i);
-               MSG_WriteString (&host_client->message, client->old_name);
+               MSG_WriteString (&host_client->message, client->name);
                MSG_WriteByte (&host_client->message, svc_updatefrags);
                MSG_WriteByte (&host_client->message, i);
-               MSG_WriteShort (&host_client->message, client->old_frags);
+               MSG_WriteShort (&host_client->message, client->frags);
                MSG_WriteByte (&host_client->message, svc_updatecolors);
                MSG_WriteByte (&host_client->message, i);
-               MSG_WriteByte (&host_client->message, client->old_colors);
+               MSG_WriteByte (&host_client->message, client->colors);
        }
 
        // send all current light styles
@@ -1257,11 +1245,11 @@ void Host_Spawn_f (void)
        // and it won't happen if the game was just loaded, so you wind up
        // with a permanent head tilt
        MSG_WriteByte (&host_client->message, svc_setangle);
-       MSG_WriteAngle (&host_client->message, sv_player->v->angles[0], sv.protocol);
-       MSG_WriteAngle (&host_client->message, sv_player->v->angles[1], sv.protocol);
+       MSG_WriteAngle (&host_client->message, host_client->edict->v->angles[0], sv.protocol);
+       MSG_WriteAngle (&host_client->message, host_client->edict->v->angles[1], sv.protocol);
        MSG_WriteAngle (&host_client->message, 0, sv.protocol);
 
-       SV_WriteClientdataToMessage (sv_player, &host_client->message);
+       SV_WriteClientdataToMessage (host_client, host_client->edict, &host_client->message, stats);
 
        MSG_WriteByte (&host_client->message, svc_signonnum);
        MSG_WriteByte (&host_client->message, 3);
@@ -1390,9 +1378,6 @@ void Host_Give_f (void)
                return;
        }
 
-       if (!sv_player)
-               return;
-
        if (!allowcheats)
        {
                SV_ClientPrint("No cheats allowed, use sv_cheats 1 and restart level to enable.\n");
@@ -1420,113 +1405,113 @@ void Host_Give_f (void)
                        if (t[0] == '6')
                        {
                                if (t[1] == 'a')
-                                       sv_player->v->items = (int)sv_player->v->items | HIT_PROXIMITY_GUN;
+                                       host_client->edict->v->items = (int)host_client->edict->v->items | HIT_PROXIMITY_GUN;
                                else
-                                       sv_player->v->items = (int)sv_player->v->items | IT_GRENADE_LAUNCHER;
+                                       host_client->edict->v->items = (int)host_client->edict->v->items | IT_GRENADE_LAUNCHER;
                        }
                        else if (t[0] == '9')
-                               sv_player->v->items = (int)sv_player->v->items | HIT_LASER_CANNON;
+                               host_client->edict->v->items = (int)host_client->edict->v->items | HIT_LASER_CANNON;
                        else if (t[0] == '0')
-                               sv_player->v->items = (int)sv_player->v->items | HIT_MJOLNIR;
+                               host_client->edict->v->items = (int)host_client->edict->v->items | HIT_MJOLNIR;
                        else if (t[0] >= '2')
-                               sv_player->v->items = (int)sv_player->v->items | (IT_SHOTGUN << (t[0] - '2'));
+                               host_client->edict->v->items = (int)host_client->edict->v->items | (IT_SHOTGUN << (t[0] - '2'));
                }
                else
                {
                        if (t[0] >= '2')
-                               sv_player->v->items = (int)sv_player->v->items | (IT_SHOTGUN << (t[0] - '2'));
+                               host_client->edict->v->items = (int)host_client->edict->v->items | (IT_SHOTGUN << (t[0] - '2'));
                }
                break;
 
        case 's':
-               if (gamemode == GAME_ROGUE && (val = GETEDICTFIELDVALUE(sv_player, eval_ammo_shells1)))
+               if (gamemode == GAME_ROGUE && (val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_shells1)))
                        val->_float = v;
 
-               sv_player->v->ammo_shells = v;
+               host_client->edict->v->ammo_shells = v;
                break;
        case 'n':
                if (gamemode == GAME_ROGUE)
                {
-                       if ((val = GETEDICTFIELDVALUE(sv_player, eval_ammo_nails1)))
+                       if ((val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_nails1)))
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon <= IT_LIGHTNING)
-                                       sv_player->v->ammo_nails = v;
+                               if (host_client->edict->v->weapon <= IT_LIGHTNING)
+                                       host_client->edict->v->ammo_nails = v;
                        }
                }
                else
                {
-                       sv_player->v->ammo_nails = v;
+                       host_client->edict->v->ammo_nails = v;
                }
                break;
        case 'l':
                if (gamemode == GAME_ROGUE)
                {
-                       val = GETEDICTFIELDVALUE(sv_player, eval_ammo_lava_nails);
+                       val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_lava_nails);
                        if (val)
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon > IT_LIGHTNING)
-                                       sv_player->v->ammo_nails = v;
+                               if (host_client->edict->v->weapon > IT_LIGHTNING)
+                                       host_client->edict->v->ammo_nails = v;
                        }
                }
                break;
        case 'r':
                if (gamemode == GAME_ROGUE)
                {
-                       val = GETEDICTFIELDVALUE(sv_player, eval_ammo_rockets1);
+                       val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_rockets1);
                        if (val)
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon <= IT_LIGHTNING)
-                                       sv_player->v->ammo_rockets = v;
+                               if (host_client->edict->v->weapon <= IT_LIGHTNING)
+                                       host_client->edict->v->ammo_rockets = v;
                        }
                }
                else
                {
-                       sv_player->v->ammo_rockets = v;
+                       host_client->edict->v->ammo_rockets = v;
                }
                break;
        case 'm':
                if (gamemode == GAME_ROGUE)
                {
-                       val = GETEDICTFIELDVALUE(sv_player, eval_ammo_multi_rockets);
+                       val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_multi_rockets);
                        if (val)
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon > IT_LIGHTNING)
-                                       sv_player->v->ammo_rockets = v;
+                               if (host_client->edict->v->weapon > IT_LIGHTNING)
+                                       host_client->edict->v->ammo_rockets = v;
                        }
                }
                break;
        case 'h':
-               sv_player->v->health = v;
+               host_client->edict->v->health = v;
                break;
        case 'c':
                if (gamemode == GAME_ROGUE)
                {
-                       val = GETEDICTFIELDVALUE(sv_player, eval_ammo_cells1);
+                       val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_cells1);
                        if (val)
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon <= IT_LIGHTNING)
-                                       sv_player->v->ammo_cells = v;
+                               if (host_client->edict->v->weapon <= IT_LIGHTNING)
+                                       host_client->edict->v->ammo_cells = v;
                        }
                }
                else
                {
-                       sv_player->v->ammo_cells = v;
+                       host_client->edict->v->ammo_cells = v;
                }
                break;
        case 'p':
                if (gamemode == GAME_ROGUE)
                {
-                       val = GETEDICTFIELDVALUE(sv_player, eval_ammo_plasma);
+                       val = GETEDICTFIELDVALUE(host_client->edict, eval_ammo_plasma);
                        if (val)
                        {
                                val->_float = v;
-                               if (sv_player->v->weapon > IT_LIGHTNING)
-                                       sv_player->v->ammo_cells = v;
+                               if (host_client->edict->v->weapon > IT_LIGHTNING)
+                                       host_client->edict->v->ammo_cells = v;
                        }
                }
                break;
@@ -1669,16 +1654,7 @@ void Host_Startdemos_f (void)
        int             i, c;
 
        if (cls.state == ca_dedicated || COM_CheckParm("-listen"))
-       {
-               if (!sv.active)
-               {
-                       if (gamemode == GAME_TRANSFUSION)
-                               Cbuf_AddText ("map bb1\n");
-                       else
-                               Cbuf_AddText ("map start\n");
-               }
                return;
-       }
 
        c = Cmd_Argc() - 1;
        if (c > MAX_DEMOS)
@@ -1686,7 +1662,7 @@ void Host_Startdemos_f (void)
                Con_Printf("Max %i demos in demoloop\n", MAX_DEMOS);
                c = MAX_DEMOS;
        }
-       Con_DPrintf("%i demo(s) in loop\n", c);
+       Con_Printf("%i demo(s) in loop\n", c);
 
        for (i=1 ; i<c+1 ; i++)
                strlcpy (cls.demos[i-1], Cmd_Argv(i), sizeof (cls.demos[i-1]));