X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=host.c;h=dbc88c59b052280183ab5de951a5d49c57872ae5;hb=277cea019899d1a7d297c270afa9c1c2653c49fa;hp=f3de7a18522be5a4761e7b41edb5bd1c81e8d4c5;hpb=503f6fef27f5b87b9d71aa290f5a0890b159ff15;p=xonotic%2Fdarkplaces.git diff --git a/host.c b/host.c index f3de7a18..dbc88c59 100644 --- a/host.c +++ b/host.c @@ -445,7 +445,7 @@ void SV_DropClient(qboolean crash) if (host_client->netconnection) { - // free the client (the body stays around) + // tell the client to be gone if (!crash) { // LordHavoc: no opportunity for resending, so use unreliable 3 times @@ -459,9 +459,6 @@ void SV_DropClient(qboolean crash) NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol, 10000, false); NetConn_SendUnreliableMessage(host_client->netconnection, &buf, sv.protocol, 10000, false); } - // break the net connection - NetConn_Close(host_client->netconnection); - host_client->netconnection = NULL; } // call qc ClientDisconnect function @@ -471,11 +468,18 @@ void SV_DropClient(qboolean crash) { // call the prog function for removing a client // this will set the body to a dead frame, among other things - int saveSelf = prog->globals.server->self; + int saveSelf = PRVM_serverglobaledict(self); host_client->clientconnectcalled = false; - prog->globals.server->self = PRVM_EDICT_TO_PROG(host_client->edict); - PRVM_ExecuteProgram(prog->globals.server->ClientDisconnect, "QC function ClientDisconnect is missing"); - prog->globals.server->self = saveSelf; + PRVM_serverglobaledict(self) = PRVM_EDICT_TO_PROG(host_client->edict); + PRVM_ExecuteProgram(PRVM_serverfunction(ClientDisconnect), "QC function ClientDisconnect is missing"); + PRVM_serverglobaledict(self) = saveSelf; + } + + if (host_client->netconnection) + { + // break the net connection + NetConn_Close(host_client->netconnection); + host_client->netconnection = NULL; } // if a download is active, close it @@ -563,10 +567,10 @@ void Host_ShutdownServer(void) SV_VM_Begin(); World_End(&sv.world); if(prog->loaded) - if(prog->funcoffsets.SV_Shutdown) + if(PRVM_serverfunction(SV_Shutdown)) { - func_t s = prog->funcoffsets.SV_Shutdown; - prog->funcoffsets.SV_Shutdown = 0; // prevent it from getting called again + func_t s = PRVM_serverfunction(SV_Shutdown); + PRVM_serverfunction(SV_Shutdown) = 0; // prevent it from getting called again PRVM_ExecuteProgram(s,"SV_Shutdown() required"); } for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++) @@ -786,6 +790,9 @@ void Host_Main(void) double advancetime, aborttime = 0; float offset; + if (cls.state == ca_dedicated) + Collision_Cache_NewFrame(); + // run the world state // don't allow simulation to run too fast or too slow or logic glitches can occur @@ -854,7 +861,7 @@ void Host_Main(void) if (sv.paused == 1 && realtime > sv.pausedstart && sv.pausedstart > 0) { prog->globals.generic[OFS_PARM0] = realtime - sv.pausedstart; - PRVM_ExecuteProgram(prog->funcoffsets.SV_PausedTic, "QC function SV_PausedTic is missing"); + PRVM_ExecuteProgram(PRVM_serverfunction(SV_PausedTic), "QC function SV_PausedTic is missing"); } // end the server VM frame @@ -880,6 +887,8 @@ void Host_Main(void) if (cls.state != ca_dedicated && (cl_timer > 0 || cls.timedemo || ((vid_activewindow ? cl_maxfps : cl_maxidlefps).value < 1))) { R_TimeReport("---"); + Collision_Cache_NewFrame(); + R_TimeReport("collisioncache"); // decide the simulation time if (cls.capturevideo.active) { @@ -1073,7 +1082,7 @@ static void Host_Init (void) developer.string = "1"; } - if (COM_CheckParm("-developer2")) + if (COM_CheckParm("-developer2") || COM_CheckParm("-developer3")) { developer.value = developer.integer = 1; developer.string = "1"; @@ -1087,6 +1096,12 @@ static void Host_Init (void) developer_memorydebug.string = "1"; } + if (COM_CheckParm("-developer3")) + { + gl_paranoid.integer = 1;gl_paranoid.string = "1"; + gl_printcheckerror.integer = 1;gl_printcheckerror.string = "1"; + } + // COMMANDLINEOPTION: Console: -nostdout disables text output to the terminal the game was launched from if (COM_CheckParm("-nostdout")) sys_nostdout = 1;