fix more possible Profile crashes.
(dereferencing null pointer baaaad....)
This commit is contained in:
+21
-18
@@ -1091,6 +1091,8 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsO
|
|||||||
if( !IsHumanPlayer(pn) )
|
if( !IsHumanPlayer(pn) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Profile *pProf = PROFILEMAN->GetProfile(pn);
|
||||||
|
|
||||||
CHECKPOINT_M(ssprintf("PlayMode %i",this->m_PlayMode));
|
CHECKPOINT_M(ssprintf("PlayMode %i",this->m_PlayMode));
|
||||||
switch( this->m_PlayMode )
|
switch( this->m_PlayMode )
|
||||||
{
|
{
|
||||||
@@ -1157,10 +1159,9 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsO
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find Personal Records
|
// Find Personal Records
|
||||||
Profile *prof = PROFILEMAN->GetProfile(pn);
|
if( pProf )
|
||||||
if( prof )
|
|
||||||
{
|
{
|
||||||
HighScoreList &hsl = prof->GetStepsHighScoreList(pSteps);
|
HighScoreList &hsl = pProf->GetStepsHighScoreList(pSteps);
|
||||||
for( j=0; j<hsl.vHighScores.size(); j++ )
|
for( j=0; j<hsl.vHighScores.size(); j++ )
|
||||||
{
|
{
|
||||||
HighScore &hs = hsl.vHighScores[j];
|
HighScore &hs = hsl.vHighScores[j];
|
||||||
@@ -1219,21 +1220,24 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsO
|
|||||||
for( i=0; i<NUM_RANKING_CATEGORIES; i++ )
|
for( i=0; i<NUM_RANKING_CATEGORIES; i++ )
|
||||||
{
|
{
|
||||||
RankingCategory rc = (RankingCategory)i;
|
RankingCategory rc = (RankingCategory)i;
|
||||||
HighScoreList &hsl = PROFILEMAN->GetProfile(pn)->GetCategoryHighScoreList( nt, rc );
|
if( pProf )
|
||||||
for( unsigned j=0; j<hsl.vHighScores.size(); j++ )
|
|
||||||
{
|
{
|
||||||
HighScore &hs = hsl.vHighScores[j];
|
HighScoreList &hsl = pProf->GetCategoryHighScoreList( nt, rc );
|
||||||
if( hs.sName != RANKING_TO_FILL_IN_MARKER[pn] )
|
for( unsigned j=0; j<hsl.vHighScores.size(); j++ )
|
||||||
continue;
|
{
|
||||||
|
HighScore &hs = hsl.vHighScores[j];
|
||||||
|
if( hs.sName != RANKING_TO_FILL_IN_MARKER[pn] )
|
||||||
|
continue;
|
||||||
|
|
||||||
RankingFeats feat;
|
RankingFeats feat;
|
||||||
feat.Type = RankingFeats::CATEGORY;
|
feat.Type = RankingFeats::CATEGORY;
|
||||||
feat.Feat = ssprintf("PR #%d in Type %c (%d)", j+1, 'A'+i, stats.iMeter[pn] );
|
feat.Feat = ssprintf("PR #%d in Type %c (%d)", j+1, 'A'+i, stats.iMeter[pn] );
|
||||||
feat.pStringToFill = &hs.sName;
|
feat.pStringToFill = &hs.sName;
|
||||||
feat.grade = GRADE_NO_DATA;
|
feat.grade = GRADE_NO_DATA;
|
||||||
feat.iScore = (int) hs.iScore;
|
feat.iScore = (int) hs.iScore;
|
||||||
feat.fPercentDP = (float) hs.fPercentDP;
|
feat.fPercentDP = (float) hs.fPercentDP;
|
||||||
asFeatsOut.push_back( feat );
|
asFeatsOut.push_back( feat );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1276,8 +1280,7 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsO
|
|||||||
// Find Personal Records
|
// Find Personal Records
|
||||||
if( PROFILEMAN->IsUsingProfile( pn ) )
|
if( PROFILEMAN->IsUsingProfile( pn ) )
|
||||||
{
|
{
|
||||||
Profile* pProfile = PROFILEMAN->GetProfile( pn );
|
HighScoreList &hsl = pProf->GetCourseHighScoreList( pCourse, nt );
|
||||||
HighScoreList &hsl = pProfile->GetCourseHighScoreList( pCourse, nt );
|
|
||||||
for( unsigned i=0; i<hsl.vHighScores.size(); i++ )
|
for( unsigned i=0; i<hsl.vHighScores.size(); i++ )
|
||||||
{
|
{
|
||||||
HighScore& hs = hsl.vHighScores[i];
|
HighScore& hs = hsl.vHighScores[i];
|
||||||
|
|||||||
Reference in New Issue
Block a user