/* ================ Host_EndGame ================ */ void Host_EndGame (char *message, ...) { va_list argptr; char string[1024]; va_start (argptr,message); vsprintf (string,message,argptr); va_end (argptr); Con_DPrintf ("Host_EndGame: %s\n",string); if (sv.active) Host_ShutdownServer (false); if (cls.state == ca_dedicated) Sys_Error ("Host_EndGame: %s\n",string); // dedicated servers exit if (cls.demonum != -1) CL_NextDemo (); else CL_Disconnect (); Clear_LoadingFill (); longjmp (host_abortserver, 1); }
/* ================== CL_StartDemos_f ================== */ void CL_StartDemos_f( void ) { int i, c; if( cls.key_dest != key_menu ) { MsgDev( D_INFO, "startdemos is not valid from the console\n" ); return; } c = Cmd_Argc() - 1; if( c > MAX_DEMOS ) { MsgDev( D_WARN, "Host_StartDemos: max %i demos in demoloop\n", MAX_DEMOS ); c = MAX_DEMOS; } MsgDev( D_INFO, "%i demo%s in loop\n", c, (c > 1) ? "s" : "" ); for( i = 1; i < c + 1; i++ ) Q_strncpy( cls.demos[i-1], Cmd_Argv( i ), sizeof( cls.demos[0] )); if( !SV_Active() && !cls.demoplayback ) { // run demos loop in background mode Cvar_SetFloat( "v_dark", 1.0f ); cls.demonum = 0; CL_NextDemo (); } else cls.demonum = -1; }
/* ================== Host_Startdemos_f ================== */ static void Host_Startdemos_f(void) { int i, c; if (cls.state == ca_dedicated) { if (!sv.active) Cbuf_AddText("map start\n"); return; } c = Cmd_Argc() - 1; if (c > MAX_DEMOS) { Con_Printf("Max %i demos in demoloop\n", MAX_DEMOS); c = MAX_DEMOS; } Con_Printf("%i demo(s) in loop\n", c); for (i = 1; i < c + 1; i++) strncpy(cls.demos[i - 1], Cmd_Argv(i), sizeof(cls.demos[0]) - 1); if (!sv.active && cls.demonum != -1 && !cls.demoplayback) { cls.demonum = 0; CL_NextDemo(); } else cls.demonum = -1; }
/* ================= CL_DemoCompleted ================= */ void CL_DemoCompleted(void) { #if NEW_DEMOFUNC CL_FreeDemoPoints(); #endif if (cl_timedemo && cl_timedemo->integer) { int time; time = Sys_Milliseconds() - clc.timeDemoStart; if (time > 0) { Com_FuncPrinf("%i frames, %3.1f seconds: %3.1f fps\n", clc.timeDemoFrames, time / 1000.0, clc.timeDemoFrames * 1000.0 / time); } } if (CL_VideoRecording()) { Cmd_ExecuteString("stopvideo"); } if (clc.waverecording) { CL_WriteWaveClose(); clc.waverecording = qfalse; } CL_Disconnect(qtrue); CL_NextDemo(); }
/* ================ Host_EndGame ================ */ void Host_EndGame (char *message, ...) { va_list argptr; char string[1024]; va_start (argptr,message); #if defined (__APPLE__) || defined (MACOSX) vsnprintf (string,1024,message,argptr); #else vsprintf (string,message,argptr); #endif /* __APPLE__ || MACOSX */ va_end (argptr); Con_DPrintf ("Host_EndGame: %s\n",string); if (sv.active) Host_ShutdownServer (false); if (cls.state == ca_dedicated) Sys_Error ("Host_EndGame: %s\n",string); // dedicated servers exit if (cls.demonum != -1) CL_NextDemo (); else CL_Disconnect (); longjmp (host_abortserver, 1); }
/* ================ Host_EndGame ================ */ void Host_EndGame (char *message, ...) { va_list argptr; char* string = Sys_BigStackAlloc(1024, "Host_EndGame"); va_start (argptr,message); vsprintf (string,message,argptr); va_end (argptr); Con_DPrintf ("Host_EndGame: %s\n",string); if (sv.active) Host_ShutdownServer (false); if (cls.state == ca_dedicated) Sys_Error ("Host_EndGame: %s\n",string); // dedicated servers exit Sys_BigStackFree(1024, "Host_EndGame"); if (cls.demonum != -1) { CL_StopPlayback(); CL_NextDemo(); } else CL_Disconnect (); longjmp (host_abortserver, 1); }
/* ================ Host_EndGame ================ */ void Host_EndGame (char *message, ...) { va_list argptr; char string[1024]; va_start (argptr,message); vsnprintf(string, sizeof(string), message,argptr); va_end (argptr); Con_DPrintf ("Host_EndGame: %s\n",string); if (sv.active) Host_ShutdownServer (false); if (cls.state == ca_dedicated) Sys_Error ("Host_EndGame: %s\n",string); // dedicated servers exit if (cls.demonum != -1) { CL_StopPlayback (); // JPG 1.05 - patch by CSR to fix crash CL_NextDemo (); } else CL_Disconnect (); longjmp (host_abortserver, 1); }
/* ================== Host_Demos_f Return to looping demos ================== */ static void Host_Demos_f(void) { if (cls.state == ca_dedicated) return; if (cls.demonum == -1) cls.demonum = 1; CL_Disconnect_f(); CL_NextDemo(); }
/* ================= CL_DemoCompleted ================= */ void CL_DemoCompleted( void ) { if( cls.demonum != -1 ) cls.changedemo = true; CL_StopPlayback(); if( !CL_NextDemo() && host.developer <= 2 ) UI_SetActiveMenu( true ); }
void CClientState::Disconnect(bool bShowMainMenu) { CBaseClientState::Disconnect(bShowMainMenu); // stop any demo activities #ifndef _XBOX demoplayer->StopPlayback(); demorecorder->StopRecording(); #endif S_StopAllSounds( true ); R_DecalTermAll(); if ( m_nMaxClients > 1 ) { if ( EngineVGui()->IsConsoleVisible() == false ) { // start progress bar immediately for multiplayer level transitions EngineVGui()->EnabledProgressBarForNextLoad(); } } CL_ClearState(); #ifndef _XBOX // End any in-progress downloads CL_HTTPStop_f(); #endif // stop loading progress bar if (bShowMainMenu) { SCR_EndLoadingPlaque(); } // notify game ui dll of out-of-in-game status EngineVGui()->NotifyOfServerDisconnect(); if (bShowMainMenu && !engineClient->IsDrawingLoadingImage() && (cl.demonum == -1)) { // we're not in the middle of loading something, so show the UI if ( EngineVGui() ) { EngineVGui()->ActivateGameUI(); } } HostState_OnClientDisconnected(); // if we played a demo from the startdemos list, play next one if (cl.demonum != -1) { CL_NextDemo(); } }
/* ================== CL_Demos_f Return to looping demos ================== */ void CL_Demos_f( void ) { if( cls.key_dest != key_menu ) { MsgDev( D_INFO, "demos is not valid from the console\n" ); return; } cls.demonum = cls.olddemonum; if( cls.demonum == -1 ) cls.demonum = 0; if( !SV_Active() && !cls.demoplayback ) { // run demos loop in background mode cls.changedemo = true; CL_NextDemo (); } }
/* ================ Host_EndGame ================ */ void Host_EndGame(const char *message, ...) { va_list argptr; char string[MAX_PRINTMSG]; va_start(argptr, message); vsnprintf(string, sizeof(string), message, argptr); va_end(argptr); Con_DPrintf("%s: %s\n", __func__, string); if (sv.active) Host_ShutdownServer(false); if (cls.state == ca_dedicated) Sys_Error("%s: %s", __func__, string); // dedicated servers exit if (cls.demonum != -1) CL_NextDemo(); else CL_Disconnect(); longjmp(host_abort, 1); }
void CLNQ_ParseServerMessage (void) { int cmd; int i; qbool message_with_datagram; // hack to fix glitches when receiving a packet // without a datagram nq_player_teleported = false; // OMG, it's a hack! message_with_datagram = false; cl_entframecount++; if (cl_shownet.value == 1) Com_Printf ("%i ", net_message.cursize); else if (cl_shownet.value == 2) Com_Printf ("------------------\n"); cl.onground = false; // unless the server says otherwise // // parse the message // //MSG_BeginReading (); while (1) { if (msg_badread) Host_Error ("CL_ParseServerMessage: Bad server message"); cmd = MSG_ReadByte (); if (cmd == -1) { SHOWNET("END OF MESSAGE"); if (!message_with_datagram) { cl_entframecount--; } else { VectorCopy (nq_mviewangles[0], nq_mviewangles[1]); VectorCopy (nq_mviewangles_temp, nq_mviewangles[0]); } return; // end of message } // if the high bit of the command byte is set, it is a fast update if (cmd & 128) { SHOWNET("fast update"); NQD_ParseUpdate (cmd&127); continue; } if (cmd < num_svc_strings) SHOWNET(svc_strings[cmd]); // other commands switch (cmd) { default: Host_Error ("CL_ParseServerMessage: Illegible server message"); break; case svc_nop: break; case nq_svc_time: nq_mtime[1] = nq_mtime[0]; nq_mtime[0] = MSG_ReadFloat (); cl.servertime = nq_mtime[0]; message_with_datagram = true; break; case nq_svc_clientdata: i = MSG_ReadShort (); NQD_ParseClientdata (i); break; case nq_svc_version: i = MSG_ReadLong (); if (i != NQ_PROTOCOL_VERSION) Host_Error ("CL_ParseServerMessage: Server is protocol %i instead of %i\n", i, NQ_PROTOCOL_VERSION); break; case svc_disconnect: Com_Printf ("\n======== End of demo ========\n\n"); CL_NextDemo (); Host_EndGame (); Host_Abort (); break; case svc_print: NQD_ParsePrint (); break; case svc_centerprint: SCR_CenterPrint (MSG_ReadString ()); break; case svc_stufftext: NQD_ParseStufftext (); break; case svc_damage: V_ParseDamage (); break; case svc_serverdata: NQD_ParseServerData (); break; case svc_setangle: for (i=0 ; i<3 ; i++) nq_last_fixangle[i] = cl.simangles[i] = cl.viewangles[i] = MSG_ReadAngle (); break; case svc_setview: nq_viewentity = MSG_ReadShort (); if (nq_viewentity <= nq_maxclients) cl.playernum = nq_viewentity - 1; else { // just let cl.playernum stay where it was } break; case svc_lightstyle: i = MSG_ReadByte (); if (i >= MAX_LIGHTSTYLES) Sys_Error ("svc_lightstyle > MAX_LIGHTSTYLES"); strlcpy (cl_lightstyle[i].map, MSG_ReadString(), sizeof(cl_lightstyle[0].map)); cl_lightstyle[i].length = strlen(cl_lightstyle[i].map); break; case svc_sound: NQD_ParseStartSoundPacket(); break; case svc_stopsound: i = MSG_ReadShort(); S_StopSound(i>>3, i&7); break; case nq_svc_updatename: Sbar_Changed (); i = MSG_ReadByte (); if (i >= nq_maxclients) Host_Error ("CL_ParseServerMessage: svc_updatename > NQ_MAX_CLIENTS"); strlcpy (cl.players[i].name, MSG_ReadString(), sizeof(cl.players[i].name)); break; case svc_updatefrags: Sbar_Changed (); i = MSG_ReadByte (); if (i >= nq_maxclients) Host_Error ("CL_ParseServerMessage: svc_updatefrags > NQ_MAX_CLIENTS"); cl.players[i].frags = MSG_ReadShort(); break; case nq_svc_updatecolors: NQD_ParseUpdatecolors (); break; case nq_svc_particle: CL_ParseParticleEffect (); break; case svc_spawnbaseline: i = MSG_ReadShort (); if (i >= NQ_MAX_EDICTS) Host_Error ("svc_spawnbaseline: ent > MAX_EDICTS"); NQD_BumpEntityCount (i); CL_ParseBaseline (&cl_entities[i].baseline); break; case svc_spawnstatic: CL_ParseStatic (); break; case svc_temp_entity: CL_ParseTEnt (); break; case svc_setpause: if (MSG_ReadByte() != 0) cl.paused |= PAUSED_SERVER; else cl.paused &= ~PAUSED_SERVER; if (cl.paused) CDAudio_Pause (); else CDAudio_Resume (); break; case nq_svc_signonnum: i = MSG_ReadByte (); if (i <= nq_signon) Host_Error ("Received signon %i when at %i", i, nq_signon); nq_signon = i; CLNQ_SignonReply (); break; case svc_killedmonster: cl.stats[STAT_MONSTERS]++; break; case svc_foundsecret: cl.stats[STAT_SECRETS]++; break; case svc_updatestat: i = MSG_ReadByte (); if (i < 0 || i >= MAX_CL_STATS) Sys_Error ("svc_updatestat: %i is invalid", i); cl.stats[i] = MSG_ReadLong ();; break; case svc_spawnstaticsound: CL_ParseStaticSound (); break; case svc_cdtrack: cl.cdtrack = MSG_ReadByte (); MSG_ReadByte(); // loop track (unused) if (nq_forcecdtrack != -1) CDAudio_Play ((byte)nq_forcecdtrack, true); else CDAudio_Play ((byte)cl.cdtrack, true); break; case svc_intermission: cl.intermission = 1; cl.completed_time = cl.time; VectorCopy (nq_last_fixangle, cl.simangles); break; case svc_finale: cl.intermission = 2; cl.completed_time = cl.time; SCR_CenterPrint (MSG_ReadString ()); VectorCopy (nq_last_fixangle, cl.simangles); break; case nq_svc_cutscene: cl.intermission = 3; cl.completed_time = cl.time; SCR_CenterPrint (MSG_ReadString ()); VectorCopy (nq_last_fixangle, cl.simangles); break; case svc_sellscreen: break; } } }