/* ================ G_ReadSessionData Called on a reconnect ================ */ void G_ReadSessionData(gclient_t *client) { #ifdef FEATURE_MULTIVIEW int mvc_l, mvc_h; #endif int j; char s[MAX_STRING_CHARS]; qboolean test; trap_Cvar_VariableStringBuffer(va("session%i", (int)(client - level.clients)), s, sizeof(s)); #ifdef FEATURE_MULTIVIEW #ifdef FEATURE_RATING sscanf(s, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %f %f %f %f %i %i %i %i %i %i %i %i", #else sscanf(s, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", #endif #else #ifdef FEATURE_RATING sscanf(s, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %f %f %f %f %i %i %i %i %i %i", #else sscanf(s, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", #endif #endif (int *)&client->sess.sessionTeam, &client->sess.spectatorTime, (int *)&client->sess.spectatorState, &client->sess.spectatorClient, &client->sess.playerType, &client->sess.playerWeapon, &client->sess.playerWeapon2, &client->sess.latchPlayerType, &client->sess.latchPlayerWeapon, &client->sess.latchPlayerWeapon2, &client->sess.coach_team, &client->sess.referee, &client->sess.spec_invite, &client->sess.spec_team, &client->sess.kills, &client->sess.deaths, &client->sess.gibs, &client->sess.self_kills, &client->sess.team_kills, &client->sess.team_gibs, &client->sess.time_axis, &client->sess.time_allies, &client->sess.time_played, #ifdef FEATURE_RATING &client->sess.mu, &client->sess.sigma, &client->sess.oldmu, &client->sess.oldsigma, #endif #ifdef FEATURE_MULTIVIEW &mvc_l, &mvc_h, #endif // Damage and round count rolled in with weapon stats (below) (int *)&client->sess.muted, &client->sess.ignoreClients[0], &client->sess.ignoreClients[1], &client->pers.enterTime, &client->sess.spawnObjectiveIndex, &client->sess.uci ); #ifdef FEATURE_MULTIVIEW // reinstate MV clients client->pers.mvReferenceList = (mvc_h << 16) | mvc_l; #endif // pull and parse weapon stats *s = 0; trap_Cvar_VariableStringBuffer(va("wstats%i", (int)(client - level.clients)), s, sizeof(s)); if (*s) { G_parseStats(s); if (g_gamestate.integer == GS_PLAYING) { client->sess.rounds++; } } // likely there are more cases in which we don't want this if (g_gametype.integer != GT_SINGLE_PLAYER && g_gametype.integer != GT_COOP && g_gametype.integer != GT_WOLF && g_gametype.integer != GT_WOLF_STOPWATCH && !(g_gametype.integer == GT_WOLF_CAMPAIGN && (g_campaigns[level.currentCampaign].current == 0 || level.newCampaign)) && !(g_gametype.integer == GT_WOLF_LMS && g_currentRound.integer == 0)) { trap_Cvar_VariableStringBuffer(va("sessionstats%i", (int)(client - level.clients)), s, sizeof(s)); // read the clients stats (7) and medals (7) sscanf(s, "%f %f %f %f %f %f %f %i %i %i %i %i %i %i", &client->sess.skillpoints[0], &client->sess.skillpoints[1], &client->sess.skillpoints[2], &client->sess.skillpoints[3], &client->sess.skillpoints[4], &client->sess.skillpoints[5], &client->sess.skillpoints[6], &client->sess.medals[0], &client->sess.medals[1], &client->sess.medals[2], &client->sess.medals[3], &client->sess.medals[4], &client->sess.medals[5], &client->sess.medals[6] ); } G_CalcRank(client); test = (g_altStopwatchMode.integer != 0 || g_currentRound.integer == 1); if (g_gametype.integer == GT_WOLF_STOPWATCH && g_gamestate.integer != GS_PLAYING && test) { G_ClientSwap(client); } if (g_swapteams.integer) { trap_Cvar_Set("g_swapteams", "0"); G_ClientSwap(client); } client->sess.startxptotal = 0; for (j = 0; j < SK_NUM_SKILLS; j++) { client->sess.startskillpoints[j] = client->sess.skillpoints[j]; client->sess.startxptotal += client->sess.skillpoints[j]; } }
/* ================ G_ReadSessionData Called on a reconnect ================ */ void G_ReadSessionData( gclient_t *client ) { int mvc_l, mvc_h; char s[MAX_STRING_CHARS]; qboolean test; trap_Cvar_VariableStringBuffer( va( "session%i", client - level.clients ), s, sizeof(s) ); sscanf( s, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", (int *)&client->sess.sessionTeam, &client->sess.spectatorTime, (int *)&client->sess.spectatorState, &client->sess.spectatorClient, &client->sess.playerType, // DHM - Nerve &client->sess.playerWeapon, // DHM - Nerve &client->sess.playerWeapon2, &client->sess.latchPlayerType, // DHM - Nerve &client->sess.latchPlayerWeapon, // DHM - Nerve &client->sess.latchPlayerWeapon2, // OSP &client->sess.coach_team, &client->sess.deaths, &client->sess.game_points, &client->sess.kills, &client->sess.referee, &client->sess.spec_invite, &client->sess.spec_team, &client->sess.suicides, &client->sess.team_kills, &mvc_l, &mvc_h // Damage and round count rolled in with weapon stats (below) // OSP , // &client->sess.experience, (int *)&client->sess.muted, &client->sess.ignoreClients[0], &client->sess.ignoreClients[1], &client->pers.enterTime, &client->sess.spawnObjectiveIndex ); // OSP -- reinstate MV clients client->pers.mvReferenceList = (mvc_h << 16) | mvc_l; // OSP // OSP -- pull and parse weapon stats *s = 0; trap_Cvar_VariableStringBuffer(va("wstats%i", client - level.clients), s, sizeof(s)); if(*s) { G_parseStats(s); if(g_gamestate.integer == GS_PLAYING) client->sess.rounds++; } // OSP // Arnout: likely there are more cases in which we don't want this if( g_gametype.integer != GT_SINGLE_PLAYER && g_gametype.integer != GT_COOP && g_gametype.integer != GT_WOLF && g_gametype.integer != GT_WOLF_STOPWATCH && !(g_gametype.integer == GT_WOLF_CAMPAIGN && ( g_campaigns[level.currentCampaign].current == 0 || level.newCampaign ) ) && !(g_gametype.integer == GT_WOLF_LMS && g_currentRound.integer == 0 ) ) { trap_Cvar_VariableStringBuffer( va( "sessionstats%i", client - level.clients ), s, sizeof(s) ); // Arnout: read the clients stats (7) and medals (7) sscanf( s, "%f %f %f %f %f %f %f %i %i %i %i %i %i %i", &client->sess.skillpoints[0], &client->sess.skillpoints[1], &client->sess.skillpoints[2], &client->sess.skillpoints[3], &client->sess.skillpoints[4], &client->sess.skillpoints[5], &client->sess.skillpoints[6], &client->sess.medals[0], &client->sess.medals[1], &client->sess.medals[2], &client->sess.medals[3], &client->sess.medals[4], &client->sess.medals[5], &client->sess.medals[6] ); } G_CalcRank( client ); test = (g_altStopwatchMode.integer != 0 || g_currentRound.integer == 1); if(g_gametype.integer == GT_WOLF_STOPWATCH && g_gamestate.integer != GS_PLAYING && test) { G_ClientSwap(client); } if ( g_swapteams.integer ) { trap_Cvar_Set( "g_swapteams", "0" ); G_ClientSwap(client); } { int j; client->sess.startxptotal = 0; for( j = 0; j < SK_NUM_SKILLS; j++ ) { client->sess.startskillpoints[j] = client->sess.skillpoints[j]; client->sess.startxptotal += client->sess.skillpoints[j]; } } }