Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

g_session.c File Reference

#include "g_local.h"

Include dependency graph for g_session.c:

Include dependency graph

Go to the source code of this file.

Functions

void G_InitSessionData (gclient_t *client, char *userinfo)
void G_InitWorldSession (void)
void G_ReadSessionData (gclient_t *client)
void G_WriteClientSessionData (gclient_t *client)
void G_WriteSessionData (void)


Function Documentation

void G_InitSessionData gclient_t client,
char *  userinfo
 

Definition at line 105 of file g_session.c.

References BroadcastTeamChange(), g_gametype, g_maxGameClients, g_teamAutoJoin, G_WriteClientSessionData(), gclient_t, GT_FFA, GT_SINGLE_PLAYER, GT_TOURNAMENT, Info_ValueForKey(), vmCvar_t::integer, level, level_locals_t::numNonSpectatorClients, PickTeam(), gclient_s::sess, clientSession_t::sessionTeam, clientSession_t::spectatorState, clientSession_t::spectatorTime, level_locals_t::time, and value.

Referenced by ClientConnect().

00105                                                             {
00106     clientSession_t *sess;
00107     const char      *value;
00108 
00109     sess = &client->sess;
00110 
00111     // initial team determination
00112     if ( g_gametype.integer >= GT_TEAM ) {
00113         if ( g_teamAutoJoin.integer ) {
00114             sess->sessionTeam = PickTeam( -1 );
00115             BroadcastTeamChange( client, -1 );
00116         } else {
00117             // always spawn as spectator in team games
00118             sess->sessionTeam = TEAM_SPECTATOR; 
00119         }
00120     } else {
00121         value = Info_ValueForKey( userinfo, "team" );
00122         if ( value[0] == 's' ) {
00123             // a willing spectator, not a waiting-in-line
00124             sess->sessionTeam = TEAM_SPECTATOR;
00125         } else {
00126             switch ( g_gametype.integer ) {
00127             default:
00128             case GT_FFA:
00129             case GT_SINGLE_PLAYER:
00130                 if ( g_maxGameClients.integer > 0 && 
00131                     level.numNonSpectatorClients >= g_maxGameClients.integer ) {
00132                     sess->sessionTeam = TEAM_SPECTATOR;
00133                 } else {
00134                     sess->sessionTeam = TEAM_FREE;
00135                 }
00136                 break;
00137             case GT_TOURNAMENT:
00138                 // if the game is full, go into a waiting mode
00139                 if ( level.numNonSpectatorClients >= 2 ) {
00140                     sess->sessionTeam = TEAM_SPECTATOR;
00141                 } else {
00142                     sess->sessionTeam = TEAM_FREE;
00143                 }
00144                 break;
00145             }
00146         }
00147     }
00148 
00149     sess->spectatorState = SPECTATOR_FREE;
00150     sess->spectatorTime = level.time;
00151 
00152     G_WriteClientSessionData( client );
00153 }

Here is the call graph for this function:

void G_InitWorldSession void   ) 
 

Definition at line 162 of file g_session.c.

References atoi, g_gametype, G_Printf(), level, level_locals_t::newSession, s, and trap_Cvar_VariableStringBuffer().

Referenced by G_InitGame().

00162                                 {
00163     char    s[MAX_STRING_CHARS];
00164     int         gt;
00165 
00166     trap_Cvar_VariableStringBuffer( "session", s, sizeof(s) );
00167     gt = atoi( s );
00168     
00169     // if the gametype changed since the last session, don't use any
00170     // client sessions
00171     if ( g_gametype.integer != gt ) {
00172         level.newSession = qtrue;
00173         G_Printf( "Gametype changed, clearing session data.\n" );
00174     }
00175 }

Here is the call graph for this function:

void G_ReadSessionData gclient_t client  ) 
 

Definition at line 69 of file g_session.c.

References level_locals_t::clients, gclient_t, level, clientSession_t::losses, s, gclient_s::sess, clientSession_t::sessionTeam, clientSession_t::spectatorClient, clientSession_t::spectatorState, clientSession_t::spectatorTime, sscanf(), clientSession_t::teamLeader, trap_Cvar_VariableStringBuffer(), va(), and clientSession_t::wins.

Referenced by ClientConnect().

00069                                             {
00070     char    s[MAX_STRING_CHARS];
00071     const char  *var;
00072 
00073     // bk001205 - format
00074     int teamLeader;
00075     int spectatorState;
00076     int sessionTeam;
00077 
00078     var = va( "session%i", client - level.clients );
00079     trap_Cvar_VariableStringBuffer( var, s, sizeof(s) );
00080 
00081     sscanf( s, "%i %i %i %i %i %i %i",
00082         &sessionTeam,                 // bk010221 - format
00083         &client->sess.spectatorTime,
00084         &spectatorState,              // bk010221 - format
00085         &client->sess.spectatorClient,
00086         &client->sess.wins,
00087         &client->sess.losses,
00088         &teamLeader                   // bk010221 - format
00089         );
00090 
00091     // bk001205 - format issues
00092     client->sess.sessionTeam = (team_t)sessionTeam;
00093     client->sess.spectatorState = (spectatorState_t)spectatorState;
00094     client->sess.teamLeader = (qboolean)teamLeader;
00095 }

Here is the call graph for this function:

void G_WriteClientSessionData gclient_t client  ) 
 

Definition at line 43 of file g_session.c.

References level_locals_t::clients, gclient_t, level, clientSession_t::losses, s, gclient_s::sess, clientSession_t::sessionTeam, clientSession_t::spectatorClient, clientSession_t::spectatorState, clientSession_t::spectatorTime, clientSession_t::teamLeader, trap_Cvar_Set(), va(), and clientSession_t::wins.

Referenced by G_InitSessionData(), and G_WriteSessionData().

00043                                                    {
00044     const char  *s;
00045     const char  *var;
00046 
00047     s = va("%i %i %i %i %i %i %i", 
00048         client->sess.sessionTeam,
00049         client->sess.spectatorTime,
00050         client->sess.spectatorState,
00051         client->sess.spectatorClient,
00052         client->sess.wins,
00053         client->sess.losses,
00054         client->sess.teamLeader
00055         );
00056 
00057     var = va( "session%i", client - level.clients );
00058 
00059     trap_Cvar_Set( var, s );
00060 }

Here is the call graph for this function:

void G_WriteSessionData void   ) 
 

Definition at line 183 of file g_session.c.

References level_locals_t::clients, clientPersistant_t::connected, g_gametype, G_WriteClientSessionData(), i, level, level_locals_t::maxclients, gclient_s::pers, trap_Cvar_Set(), and va().

Referenced by ExitLevel(), and G_ShutdownGame().

00183                                 {
00184     int     i;
00185 
00186     trap_Cvar_Set( "session", va("%i", g_gametype.integer) );
00187 
00188     for ( i = 0 ; i < level.maxclients ; i++ ) {
00189         if ( level.clients[i].pers.connected == CON_CONNECTED ) {
00190             G_WriteClientSessionData( &level.clients[i] );
00191         }
00192     }
00193 }

Here is the call graph for this function:


Generated on Thu Aug 25 13:56:51 2005 for Quake III Arena by  doxygen 1.3.9.1