#include "g_local.h"
Include dependency graph for g_session.c:

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) |
|
||||||||||||
|
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:

|
|
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:

|
|
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:

|
|
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:

|
|
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:

1.3.9.1