void ScreenMiniMenu::AfterChangeValueOrRow( PlayerNumber pn ) { ScreenOptions::AfterChangeValueOrRow( pn ); vector<PlayerNumber> vpns; FOREACH_PlayerNumber( p ) vpns.push_back( p ); for( unsigned i=0; i<m_pRows.size(); i++ ) ExportOptions( i, vpns ); // Changing one option can affect whether other options are available. for( unsigned i=0; i<m_pRows.size(); i++ ) { const MenuRowDef &mr = m_vMenuRows[i]; if( mr.pfnEnabled ) { OptionRow &optrow = *m_pRows[i]; optrow.GetRowDef().m_vEnabledForPlayers.clear(); if( mr.pfnEnabled() ) optrow.GetRowDef().m_vEnabledForPlayers.insert( GAMESTATE->m_MasterPlayerNumber ); } m_pRows[i]->UpdateEnabledDisabled(); } }
void ScreenSMOnlineLogin::HandleScreenMessage(const ScreenMessage SM) { RString sLoginQuestion; // if( GAMESTATE->IsPlayerEnabled((PlayerNumber) m_iPlayer) ) if( SM == SM_PasswordDone ) { if(!ScreenTextEntry::s_bCancelledLast) SendLogin(ScreenTextEntry::s_sLastAnswer); else SCREENMAN->PostMessageToTopScreen( SM_GoToPrevScreen, 0 ); } else if( SM == SM_NoProfilesDefined ) { SCREENMAN->SystemMessage(DEFINE_A_PROFILE); SCREENMAN->SetNewScreen("ScreenOptionsManageProfiles"); } else if( SM == SM_SMOnlinePack ) { LOG->Trace("[ScreenSMOnlineLogin::HandleScreenMessage] SMOnlinePack"); if(!GAMESTATE->IsPlayerEnabled((PlayerNumber) m_iPlayer)) { LOG->Warn("Invalid player number: %i", m_iPlayer); return; } // This can cause problems in certain situations -aj sLoginQuestion = YOU_ARE_LOGGING_ON_AS.GetValue() + "\n" + GAMESTATE->GetPlayerDisplayName((PlayerNumber) m_iPlayer) + "\n" + ENTER_YOUR_PASSWORD.GetValue(); int ResponseCode = NSMAN->m_SMOnlinePacket.Read1(); if (ResponseCode == 0) { int Status = NSMAN->m_SMOnlinePacket.Read1(); if(Status == 0) { NSMAN->isSMOLoggedIn[m_iPlayer] = true; m_iPlayer++; if( GAMESTATE->IsPlayerEnabled((PlayerNumber) m_iPlayer) && m_iPlayer < NUM_PLAYERS ) { ScreenTextEntry::Password(SM_PasswordDone, sLoginQuestion, NULL ); } else { SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName,"NextScreen") ); m_iPlayer = 0; } } else { RString Response = NSMAN->m_SMOnlinePacket.ReadNT(); ScreenTextEntry::Password( SM_PasswordDone, Response + "\n\n" + sLoginQuestion, NULL ); } } } else if( SM == SM_GoToNextScreen ) { LOG->Trace("[ScreenSMOnlineLogin::HandleScreenMessage] GoToNextScreen"); vector<PlayerNumber> v; v.push_back( GAMESTATE->GetMasterPlayerNumber() ); for( unsigned r=0; r<m_pRows.size(); r++ ) ExportOptions( r, v ); PREFSMAN->SavePrefsToDisk(); FOREACH_EnabledPlayer(pn) { PROFILEMAN->LoadLocalProfileFromMachine((PlayerNumber) pn); } if(GAMESTATE->IsPlayerEnabled((PlayerNumber) 0) && GAMESTATE->IsPlayerEnabled((PlayerNumber) 1) && (GAMESTATE->GetPlayerDisplayName((PlayerNumber) 0) == GAMESTATE->GetPlayerDisplayName((PlayerNumber) 1))) { SCREENMAN->SystemMessage( UNIQUE_PROFILE ); SCREENMAN->SetNewScreen("ScreenSMOnlineLogin"); } else { m_iPlayer=0; while(!GAMESTATE->IsPlayerEnabled((PlayerNumber) m_iPlayer)) ++m_iPlayer; sLoginQuestion = YOU_ARE_LOGGING_ON_AS.GetValue() + "\n" + GAMESTATE->GetPlayerDisplayName((PlayerNumber) m_iPlayer) + "\n" + ENTER_YOUR_PASSWORD.GetValue(); ScreenTextEntry::Password(SM_PasswordDone, sLoginQuestion, NULL ); } return; }