本文整理汇总了C++中CL_ClearState函数的典型用法代码示例。如果您正苦于以下问题:C++ CL_ClearState函数的具体用法?C++ CL_ClearState怎么用?C++ CL_ClearState使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CL_ClearState函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CL_Disconnect
/*
=====================
CL_Disconnect
Goes from a connected state to full screen console state
Sends a disconnect message to the server
This is also called on Host_Error, so it shouldn't cause any errors
=====================
*/
void CL_Disconnect( void )
{
if( cls.state == ca_disconnected )
return;
cls.connect_time = 0;
cls.changedemo = false;
CL_Stop_f();
// send a disconnect message to the server
CL_SendDisconnectMessage();
CL_ClearState ();
S_StopBackgroundTrack ();
SCR_EndLoadingPlaque (); // get rid of loading plaque
// clear the network channel, too.
Netchan_Clear( &cls.netchan );
cls.state = ca_disconnected;
// restore gamefolder here (in case client was connected to another game)
CL_ChangeGame( GI->gamefolder, true );
// back to menu if developer mode set to "player" or "mapper"
if( host.developer > 2 ) return;
UI_SetActiveMenu( true );
}
示例2: CL_Disconnect
/*
=====================
CL_Disconnect
Called when a connection, or cinematic is being terminated.
Goes from a connected state to either a menu state or a console state
Sends a disconnect message to the server
This is also called on Com_Error and Com_Quit, so it shouldn't cause any errors
=====================
*/
void CL_Disconnect( void ) {
if ( !com_cl_running || !com_cl_running->integer ) {
return;
}
if (cls.uiStarted)
UI_SetActiveMenu( NULL,NULL );
SCR_StopCinematic ();
S_ClearSoundBuffer();
// send a disconnect message to the server
// send it a few times in case one is dropped
if ( cls.state >= CA_CONNECTED ) {
CL_AddReliableCommand( "disconnect" );
CL_WritePacket();
CL_WritePacket();
CL_WritePacket();
}
CL_ClearState ();
CL_FreeReliableCommands();
extern void CL_FreeServerCommands(void);
CL_FreeServerCommands();
memset( &clc, 0, sizeof( clc ) );
cls.state = CA_DISCONNECTED;
// allow cheats locally
Cvar_Set( "timescale", "1" );//jic we were skipping
Cvar_Set( "skippingCinematic", "0" );//jic we were skipping
}
示例3: CL_Disconnect
/**
* @brief Sets the @c cls.state to @c ca_disconnected and informs the server
* @sa CL_Drop
* @note Goes from a connected state to disconnected state
* Sends a disconnect message to the server
* This is also called on @c Com_Error, so it shouldn't cause any errors
*/
void CL_Disconnect (void)
{
if (cls.state < ca_connecting)
return;
Com_Printf("Disconnecting...\n");
/* send a disconnect message to the server */
if (!Com_ServerState()) {
dbuffer msg;
NET_WriteByte(&msg, clc_stringcmd);
NET_WriteString(&msg, NET_STATE_DISCONNECT "\n");
NET_WriteMsg(cls.netStream, msg);
/* make sure, that this is send */
NET_Wait(0);
}
NET_StreamFinished(cls.netStream);
cls.netStream = nullptr;
CL_ClearState();
S_Stop();
R_ShutdownModels(false);
R_FreeWorldImages();
CL_SetClientState(ca_disconnected);
CL_ClearBattlescapeEvents();
GAME_EndBattlescape();
}
示例4: CL_SetClientState
/**
* @brief Sets the client state
*/
void CL_SetClientState (connstate_t state)
{
Com_DPrintf(DEBUG_CLIENT, "CL_SetClientState: Set new state to %i (old was: %i)\n", state, cls.state);
cls.state = state;
switch (cls.state) {
case ca_uninitialized:
Com_Error(ERR_FATAL, "CL_SetClientState: Don't set state ca_uninitialized\n");
break;
case ca_active:
cls.waitingForStart = 0;
break;
case ca_connecting:
cls.reconnectTime = 0;
CL_Connect();
break;
case ca_disconnected:
cls.waitingForStart = 0;
break;
case ca_connected:
/* wipe the client_state_t struct */
CL_ClearState();
Cvar_Set("cl_ready", "0");
break;
default:
break;
}
}
示例5: CL_ParseServerData
/*
==================
CL_ParseServerData
==================
*/
void CL_ParseServerData (void)
{
extern cvar_t *fs_gamedirvar;
char *str;
int i;
Com_DPrintf ("Serverdata packet received.\n");
//
// wipe the client_state_t struct
//
CL_ClearState ();
cls.state = ca_connected;
// parse protocol version number
i = MSG_ReadLong (&net_message);
cls.serverProtocol = i;
// BIG HACK to let demos from release work with the 3.0x patch!!!
// Knightmare- also allow connectivity with servers using the old protocol
// if (Com_ServerState() && (i < PROTOCOL_VERSION) /*== 35*/)
if ( LegacyProtocol() ) {} // do nothing
else if (i != PROTOCOL_VERSION)
Com_Error (ERR_DROP,"Server returned version %i, not %i", i, PROTOCOL_VERSION);
cl.servercount = MSG_ReadLong (&net_message);
cl.attractloop = MSG_ReadByte (&net_message);
// game directory
str = MSG_ReadString (&net_message);
strncpy (cl.gamedir, str, sizeof(cl.gamedir)-1);
// set gamedir
if ( ( (*str && (!fs_gamedirvar->string || !*fs_gamedirvar->string || strcmp(fs_gamedirvar->string, str)))
|| (!*str && (fs_gamedirvar->string || *fs_gamedirvar->string)) )
&& !cl.attractloop ) // Knightmare- don't allow demos to change this
Cvar_Set("game", str);
// parse player entity number
cl.playernum = MSG_ReadShort (&net_message);
// get the full level name
str = MSG_ReadString (&net_message);
if (cl.playernum == -1)
{ // playing a cinematic or showing a pic, not a level
SCR_PlayCinematic (str);
}
else
{
// seperate the printfs so the server message can have a color
Com_Printf("\n\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n");
con.ormask = 128;
Com_Printf ("%c"S_COLOR_SHADOW S_COLOR_ALT"%s\n", 2, str);
con.ormask = 0;
// need to prep refresh at next oportunity
cl.refresh_prepped = false;
}
}
示例6: CL_Init
/**
* @sa CL_Shutdown
* @sa CL_InitAfter
*/
void CL_Init (void)
{
/* i18n through gettext */
char languagePath[MAX_OSPATH];
cvar_t* fs_i18ndir;
isdown = false;
if (sv_dedicated->integer)
return; /* nothing running on the client */
OBJZERO(cls);
fs_i18ndir = Cvar_Get("fs_i18ndir", "", 0, "System path to language files");
/* i18n through gettext */
setlocale(LC_ALL, "C");
setlocale(LC_MESSAGES, "");
/* use system locale dir if we can't find in gamedir */
if (fs_i18ndir->string[0] != '\0')
Q_strncpyz(languagePath, fs_i18ndir->string, sizeof(languagePath));
else
#ifdef LOCALEDIR
Com_sprintf(languagePath, sizeof(languagePath), LOCALEDIR);
#else
Com_sprintf(languagePath, sizeof(languagePath), "%s/" BASEDIRNAME "/i18n/", FS_GetCwd());
#endif
Com_DPrintf(DEBUG_CLIENT, "...using mo files from %s\n", languagePath);
bindtextdomain(TEXT_DOMAIN, languagePath);
bind_textdomain_codeset(TEXT_DOMAIN, "UTF-8");
/* load language file */
textdomain(TEXT_DOMAIN);
CL_InitMemPools();
/* all archived variables will now be loaded */
Con_Init();
CIN_Init();
VID_Init();
SCR_DrawLoadingScreen(false, 0);
S_Init();
SCR_Init();
CL_InitLocal();
Irc_Init();
CL_ViewInit();
CL_ClearState();
/* cvar feedback */
for (const cvar_t* var = Cvar_GetFirst(); var; var = var->next) {
if (var->flags & CVAR_R_CONTEXT)
Cvar_RegisterChangeListener(var->name, CL_RContextCvarChange);
if (var->flags & CVAR_R_IMAGES)
Cvar_RegisterChangeListener(var->name, CL_RImagesCvarChange);
}
}
示例7: CL_ParseServerData
/*
==================
CL_ParseServerData
==================
*/
void CL_ParseServerData(void)
{
extern cvar_t * fs_gamedirvar;
char * str;
int i;
Com_DPrintf("Serverdata packet received.\n");
//
// wipe the client_state_t struct
//
CL_ClearState();
cls.state = ca_connected;
// parse protocol version number
i = MSG_ReadLong(&net_message);
cls.serverProtocol = i;
// BIG HACK to let demos from release work with the 3.0x patch!!!
if (Com_ServerState() && PROTOCOL_VERSION == 34)
{
}
else if (i != PROTOCOL_VERSION)
{
Com_Error(ERR_DROP, "Server returned version %i, not %i", i, PROTOCOL_VERSION);
}
cl.servercount = MSG_ReadLong(&net_message);
cl.attractloop = MSG_ReadByte(&net_message);
// game directory
str = MSG_ReadString(&net_message);
strncpy(cl.gamedir, str, sizeof(cl.gamedir) - 1);
// set gamedir
if ((*str && (!fs_gamedirvar->string || !*fs_gamedirvar->string || strcmp(fs_gamedirvar->string, str))) || (!*str && (fs_gamedirvar->string || *fs_gamedirvar->string)))
Cvar_Set("game", str);
// parse player entity number
cl.playernum = MSG_ReadShort(&net_message);
// get the full level name
str = MSG_ReadString(&net_message);
if (cl.playernum == -1)
{
// playing a cinematic or showing a pic, not a level
SCR_PlayCinematic(str);
}
else
{
// separate the printfs so the server message can have a color
Com_Printf("\n\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n");
Com_Printf("%c%s\n", 2, str);
// need to prep refresh at next opportunity
cl.refresh_prepped = false;
}
}
示例8: S_StopAllSounds
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();
}
}
示例9: CL_Disconnect
/*
=====================
CL_Disconnect
Called when a connection, or cinematic is being terminated.
Goes from a connected state to either a menu state or a console state
Sends a disconnect message to the server
This is also called on Com_Error and Com_Quit, so it shouldn't cause any errors
=====================
*/
void CL_Disconnect( void ) {
if ( !com_cl_running || !com_cl_running->integer ) {
return;
}
#ifdef _XBOX
Cvar_Set("r_norefresh", "0");
// Make sure to stop all rumbling! - Prevents bug when quitting game during rumble:
extern void IN_KillRumbleScripts( void );
IN_KillRumbleScripts();
#endif
if (cls.uiStarted)
UI_SetActiveMenu( NULL,NULL );
SCR_StopCinematic ();
S_ClearSoundBuffer();
#ifdef _XBOX
// extern qboolean RE_RegisterImages_LevelLoadEnd(void);
// RE_RegisterImages_LevelLoadEnd();
R_DeleteTextures();
#endif
// send a disconnect message to the server
// send it a few times in case one is dropped
if ( cls.state >= CA_CONNECTED ) {
CL_AddReliableCommand( "disconnect" );
CL_WritePacket();
CL_WritePacket();
CL_WritePacket();
}
CL_ClearState ();
CL_FreeReliableCommands();
extern void CL_FreeServerCommands(void);
CL_FreeServerCommands();
memset( &clc, 0, sizeof( clc ) );
cls.state = CA_DISCONNECTED;
// allow cheats locally
Cvar_Set( "timescale", "1" );//jic we were skipping
Cvar_Set( "skippingCinematic", "0" );//jic we were skipping
}
示例10: CL_Disconnect
/*
=====================
CL_Disconnect
Called when a connection, or cinematic is being terminated.
Goes from a connected state to either a menu state or a console state
Sends a disconnect message to the server
This is also called on Com_Error and Com_Quit, so it shouldn't cause any errors
=====================
*/
void CL_Disconnect( void ) {
int i;
if ( !com_cl_running || !com_cl_running->integer ) {
return;
}
if (cls.uiStarted)
UI_SetActiveMenu( NULL,NULL );
SCR_StopCinematic ();
S_ClearSoundBuffer();
// send a disconnect message to the server
// send it a few times in case one is dropped
if ( cls.state >= CA_CONNECTED ) {
CL_AddReliableCommand( "disconnect" );
CL_WritePacket();
CL_WritePacket();
CL_WritePacket();
}
CL_ClearState ();
// wipe the client connection
for ( i = 0 ; i < MAX_RELIABLE_COMMANDS ; i++ ) {
if ( clc.reliableCommands[i] ) {
Z_Free( clc.reliableCommands[i] );
}
}
memset( &clc, 0, sizeof( clc ) );
cls.state = CA_DISCONNECTED;
// allow cheats locally
Cvar_Set( "timescale", "1" );//jic we were skipping
Cvar_Set( "skippingCinematic", "0" );//jic we were skipping
}
示例11: demoPlay
qboolean demoPlay( const char *fileName ) {
demo.play.handle = demoPlayOpen( fileName );
if (demo.play.handle) {
demoPlay_t *play = demo.play.handle;
clc.demoplaying = qtrue;
clc.newDemoPlayer = qtrue;
clc.serverMessageSequence = 0;
clc.lastExecutedServerCommand = 0;
Com_Printf("Opened %s, which has %d seconds and %d frames\n", fileName, (play->endTime - play->startTime) / 1000, play->totalFrames );
Con_Close();
// wipe local client state
CL_ClearState();
cls.state = CA_LOADING;
// Pump the loop, this may change gamestate!
Com_EventLoop();
// starting to load a map so we get out of full screen ui mode
Cvar_Set("r_uiFullScreen", "0");
// flush client memory and start loading stuff
// this will also (re)load the UI
// if this is a local client then only the client part of the hunk
// will be cleared, note that this is done after the hunk mark has been set
CL_FlushMemory();
// initialize the CGame
cls.cgameStarted = qtrue;
// Create the gamestate
Com_Memcpy( cl.gameState.stringOffsets, play->frame->string.offsets, sizeof( play->frame->string.offsets ));
Com_Memcpy( cl.gameState.stringData, play->frame->string.data, play->frame->string.used );
cl.gameState.dataCount = play->frame->string.used;
CL_InitCGame();
cls.state = CA_ACTIVE;
return qtrue;
} else {
return qfalse;
}
}
示例12: CL_ParseServerData
/*
* CL_ParseServerData
*/
static void CL_ParseServerData( msg_t *msg )
{
const char *str, *gamedir;
int i, sv_bitflags, numpure;
int http_portnum;
Com_DPrintf( "Serverdata packet received.\n" );
// wipe the client_state_t struct
CL_ClearState();
CL_SetClientState( CA_CONNECTED );
// parse protocol version number
i = MSG_ReadLong( msg );
if( i != APP_PROTOCOL_VERSION )
Com_Error( ERR_DROP, "Server returned version %i, not %i", i, APP_PROTOCOL_VERSION );
cl.servercount = MSG_ReadLong( msg );
cl.snapFrameTime = (unsigned int)MSG_ReadShort( msg );
// set extrapolation time to half snapshot time
Cvar_ForceSet( "cl_extrapolationTime", va( "%i", (unsigned int)( cl.snapFrameTime * 0.5 ) ) );
cl_extrapolationTime->modified = qfalse;
// base game directory
str = MSG_ReadString( msg );
if( !str || !str[0] )
Com_Error( ERR_DROP, "Server sent an empty base game directory" );
if( !COM_ValidateRelativeFilename( str ) || strchr( str, '/' ) )
Com_Error( ERR_DROP, "Server sent an invalid base game directory: %s", str );
if( strcmp( FS_BaseGameDirectory(), str ) )
{
Com_Error( ERR_DROP, "Server has different base game directory (%s) than the client (%s)", str,
FS_BaseGameDirectory() );
}
// game directory
str = MSG_ReadString( msg );
if( !str || !str[0] )
Com_Error( ERR_DROP, "Server sent an empty game directory" );
if( !COM_ValidateRelativeFilename( str ) || strchr( str, '/' ) )
Com_Error( ERR_DROP, "Server sent an invalid game directory: %s", str );
gamedir = FS_GameDirectory();
if( strcmp( str, gamedir ) )
{
// shutdown the cgame module first in case it is running for whatever reason
// (happens on wswtv in lobby), otherwise precaches that are going to follow
// will probably fuck up (like models trying to load before the world model)
CL_GameModule_Shutdown();
if( !FS_SetGameDirectory( str, qtrue ) )
Com_Error( ERR_DROP, "Failed to load game directory set by server: %s", str );
ML_Restart( qtrue );
}
// parse player entity number
cl.playernum = MSG_ReadShort( msg );
// get the full level name
Q_strncpyz( cl.servermessage, MSG_ReadString( msg ), sizeof( cl.servermessage ) );
sv_bitflags = MSG_ReadByte( msg );
if( cls.demo.playing )
{
cls.reliable = ( sv_bitflags & SV_BITFLAGS_RELIABLE );
}
else
{
if( cls.reliable != ( ( sv_bitflags & SV_BITFLAGS_RELIABLE ) != 0 ) )
Com_Error( ERR_DROP, "Server and client disagree about connection reliability" );
}
// builting HTTP server port
if( cls.httpbaseurl ) {
Mem_Free( cls.httpbaseurl );
cls.httpbaseurl = NULL;
}
if( ( sv_bitflags & SV_BITFLAGS_HTTP ) != 0 ) {
if( ( sv_bitflags & SV_BITFLAGS_HTTP_BASEURL ) != 0 ) {
// read base upstream url
cls.httpbaseurl = ZoneCopyString( MSG_ReadString( msg ) );
}
else {
http_portnum = MSG_ReadShort( msg ) & 0xffff;
cls.httpaddress = cls.serveraddress;
if( cls.httpaddress.type == NA_IP6 ) {
cls.httpaddress.address.ipv6.port = BigShort( http_portnum );
} else {
cls.httpaddress.address.ipv4.port = BigShort( http_portnum );
}
if( http_portnum ) {
if( cls.httpaddress.type == NA_LOOPBACK ) {
cls.httpbaseurl = ZoneCopyString( va( "http://localhost:%hu/", http_portnum ) );
//.........这里部分代码省略.........
示例13: CL_ParseGamestate
/*
==================
CL_ParseGamestate
==================
*/
void CL_ParseGamestate( msg_t *msg ) {
int i;
int cmd;
char *s;
Con_Close();
UI_UpdateConnectionString( "" );
// wipe local client state
CL_ClearState();
// a gamestate always marks a server command sequence
clc.serverCommandSequence = MSG_ReadLong( msg );
// parse all the configstrings and baselines
cl.gameState.dataCount = 1; // leave a 0 at the beginning for uninitialized configstrings
while ( 1 ) {
cmd = MSG_ReadByte( msg );
if ( cmd <= 0 ) {
break;
}
if ( cmd == svc_configstring ) {
int len;
i = MSG_ReadShort( msg );
if ( i < 0 || i >= MAX_CONFIGSTRINGS ) {
Com_Error( ERR_DROP, "configstring > MAX_CONFIGSTRINGS" );
}
s = MSG_ReadString( msg );
len = strlen( s );
if ( len + 1 + cl.gameState.dataCount > MAX_GAMESTATE_CHARS ) {
Com_Error( ERR_DROP, "MAX_GAMESTATE_CHARS exceeded" );
}
// append it to the gameState string buffer
cl.gameState.stringOffsets[ i ] = cl.gameState.dataCount;
memcpy( cl.gameState.stringData + cl.gameState.dataCount, s, len + 1 );
cl.gameState.dataCount += len + 1;
if ( cl_shownet->integer == 3 ) {
Com_Printf ("%3i: CS# %d %s (%d)\n",msg->readcount, i,s,len);
}
} else if ( cmd == svc_baseline ) {
assert(0);
} else {
Com_Error( ERR_DROP, "CL_ParseGamestate: bad command byte" );
}
}
// parse serverId and other cvars
CL_SystemInfoChanged();
// reinitialize the filesystem if the game directory has changed
#if 0
if ( fs_game->modified ) {
}
#endif
// let the client game init and load data
cls.state = CA_LOADING;
CL_StartHunkUsers();
// make sure the game starts
Cvar_Set( "cl_paused", "0" );
}
示例14: CL_ParseServerInfo
void CL_ParseServerInfo (void)
{
char *str;
int i;
int nummodels, numsounds;
char model_precache[MAX_MODELS][MAX_QPATH];
char sound_precache[MAX_SOUNDS][MAX_QPATH];
Con_DPrintf ("Serverinfo packet received.\n");
//
// wipe the client_state_t struct
//
CL_ClearState ();
// parse protocol version number
i = MSG_ReadLong ();
if (i != PROTOCOL_VERSION)
{
Con_Printf ("Server returned version %i, not %i", i, PROTOCOL_VERSION);
return;
}
// parse maxclients
cl.maxclients = MSG_ReadByte ();
if (cl.maxclients < 1 || cl.maxclients > MAX_SCOREBOARD)
{
Con_Printf("Bad maxclients (%u) from server\n", cl.maxclients);
return;
}
cl.scores = (scoreboard_t*) Hunk_AllocName (cl.maxclients*sizeof(*cl.scores), "scores");
// parse gametype
cl.gametype = MSG_ReadByte ();
// parse signon message
str = MSG_ReadString ();
strncpy (cl.levelname, str, sizeof(cl.levelname)-1);
// seperate the printfs so the server message can have a color
Con_Printf("\n\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n");
Con_Printf ("%c%s\n", 2, str);
//
// first we go through and touch all of the precache data that still
// happens to be in the cache, so precaching something else doesn't
// needlessly purge it
//
// precache models
memset (cl.model_precache, 0, sizeof(cl.model_precache));
for (nummodels=1 ; ; nummodels++)
{
str = MSG_ReadString ();
if (!str[0])
break;
if (nummodels==MAX_MODELS)
{
Con_Printf ("Server sent too many model precaches\n");
return;
}
strcpy (model_precache[nummodels], str);
Mod_TouchModel (str);
}
// precache sounds
memset (cl.sound_precache, 0, sizeof(cl.sound_precache));
for (numsounds=1 ; ; numsounds++)
{
str = MSG_ReadString ();
if (!str[0])
break;
if (numsounds==MAX_SOUNDS)
{
Con_Printf ("Server sent too many sound precaches\n");
return;
}
strcpy (sound_precache[numsounds], str);
S_TouchSound (str);
}
//
// now we try to load everything else until a cache allocation fails
//
for (i=1 ; i<nummodels ; i++)
{
cl.model_precache[i] = Mod_ForName (model_precache[i], false);
if (cl.model_precache[i] == NULL)
{
Con_Printf("Model %s not found\n", model_precache[i]);
return;
}
CL_KeepaliveMessage ();
}
S_BeginPrecaching ();
for (i=1 ; i<numsounds ; i++)
{
cl.sound_precache[i] = S_PrecacheSound (sound_precache[i]);
CL_KeepaliveMessage ();
//.........这里部分代码省略.........
示例15: CL_ParseServerMessage
/*
=====================
CL_ParseServerMessage
=====================
*/
void CL_ParseServerMessage( sizebuf_t *msg )
{
char *s;
int i, j, cmd;
int param1, param2;
int bufStart;
cls_message_debug.parsing = true; // begin parsing
starting_count = BF_GetNumBytesRead( msg ); // updates each frame
// parse the message
while( 1 )
{
if( BF_CheckOverflow( msg ))
{
Host_Error( "CL_ParseServerMessage: overflow!\n" );
return;
}
// mark start position
bufStart = BF_GetNumBytesRead( msg );
// end of message
if( BF_GetNumBitsLeft( msg ) < 8 )
break;
cmd = BF_ReadByte( msg );
// record command for debugging spew on parse problem
CL_Parse_RecordCommand( cmd, bufStart );
// other commands
switch( cmd )
{
case svc_bad:
Host_Error( "svc_bad\n" );
break;
case svc_nop:
// this does nothing
break;
case svc_disconnect:
MsgDev( D_INFO, "Disconnected from server\n" );
CL_Drop ();
Host_AbortCurrentFrame ();
break;
case svc_changing:
if( BF_ReadOneBit( msg ))
{
cls.changelevel = true;
S_StopAllSounds();
if( cls.demoplayback )
{
SCR_BeginLoadingPlaque( cl.background );
cls.changedemo = true;
}
}
else MsgDev( D_INFO, "Server disconnected, reconnecting\n" );
CL_ClearState ();
CL_InitEdicts (); // re-arrange edicts
if( cls.demoplayback )
{
cl.background = (cls.demonum != -1) ? true : false;
cls.state = ca_connected;
}
else cls.state = ca_connecting;
cls.connect_time = MAX_HEARTBEAT; // CL_CheckForResend() will fire immediately
break;
case svc_setview:
cl.refdef.viewentity = BF_ReadWord( msg );
break;
case svc_sound:
CL_ParseSoundPacket( msg, false );
break;
case svc_time:
// shuffle timestamps
cl.mtime[1] = cl.mtime[0];
cl.mtime[0] = BF_ReadFloat( msg );
break;
case svc_print:
i = BF_ReadByte( msg );
MsgDev( D_INFO, "^6%s", BF_ReadString( msg ));
if( i == PRINT_CHAT ) S_StartLocalSound( "common/menu2.wav", VOL_NORM, false );
break;
case svc_stufftext:
CL_ParseStuffText( msg );
break;
case svc_lightstyle:
CL_ParseLightStyle( msg );
break;
case svc_setangle:
CL_ParseSetAngle( msg );
break;
//.........这里部分代码省略.........