Prevent crashes from an invalid noteskin being set.

This commit is contained in:
Kyzentun
2015-01-31 00:23:54 -07:00
parent 09eede311c
commit 8cde91eb2e
4 changed files with 22 additions and 2 deletions
+5
View File
@@ -137,7 +137,10 @@ void NoteField::CacheAllUsedNoteSkins()
GAMESTATE->GetAllUsedNoteSkins( asSkinsLower );
asSkinsLower.push_back( m_pPlayerState->m_PlayerOptions.GetStage().m_sNoteSkin );
FOREACH( RString, asSkinsLower, s )
{
NOTESKIN->ValidateNoteSkinName(*s);
s->MakeLower();
}
for( unsigned i=0; i < asSkinsLower.size(); ++i )
CacheNoteSkin( asSkinsLower[i] );
@@ -155,6 +158,7 @@ void NoteField::CacheAllUsedNoteSkins()
UncacheNoteSkin( *s );
RString sCurrentNoteSkinLower = m_pPlayerState->m_PlayerOptions.GetCurrent().m_sNoteSkin;
NOTESKIN->ValidateNoteSkinName(sCurrentNoteSkinLower);
sCurrentNoteSkinLower.MakeLower();
map<RString, NoteDisplayCols *>::iterator it = m_NoteDisplays.find( sCurrentNoteSkinLower );
@@ -165,6 +169,7 @@ void NoteField::CacheAllUsedNoteSkins()
FOREACH_EnabledPlayer( pn )
{
RString sNoteSkinLower = GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetCurrent().m_sNoteSkin;
NOTESKIN->ValidateNoteSkinName(sNoteSkinLower);
sNoteSkinLower.MakeLower();
it = m_NoteDisplays.find( sNoteSkinLower );
ASSERT_M( it != m_NoteDisplays.end(), sNoteSkinLower );
+9
View File
@@ -246,6 +246,15 @@ RString NoteSkinManager::GetDefaultNoteSkinName()
return name;
}
void NoteSkinManager::ValidateNoteSkinName(RString& name)
{
if(name.empty() || !DoesNoteSkinExist(name))
{
LuaHelpers::ReportScriptError("Someone set a noteskin that doesn't exist. Good job.");
name= GetDefaultNoteSkinName();
}
}
void NoteSkinManager::GetAllNoteSkinNamesForGame( const Game *pGame, vector<RString> &AddTo )
{
if( pGame == m_pCurGame )
+3 -1
View File
@@ -25,9 +25,11 @@ public:
bool DoNoteSkinsExistForGame( const Game *pGame );
RString GetDefaultNoteSkinName(); // looks up current const Game* in GAMESTATE
void ValidateNoteSkinName(RString& name);
void SetCurrentNoteSkin( const RString &sNoteSkin ) { m_sCurrentNoteSkin = sNoteSkin; }
const RString &GetCurrentNoteSkin() { return m_sCurrentNoteSkin; }
void SetPlayerNumber( PlayerNumber pn ) { m_PlayerNumber = pn; }
void SetPlayerNumber( PlayerNumber pn ) { m_PlayerNumber = pn; }
void SetGameController( GameController gc ) { m_GameController = gc; }
RString GetPath( const RString &sButtonName, const RString &sElement );
bool PushActorTemplate( Lua *L, const RString &sButton, const RString &sElement, bool bSpriteOnly );
+5 -1
View File
@@ -811,7 +811,11 @@ PlayerOptions& PlayerOptions::operator=(PlayerOptions const& other)
CPY_SPEED(fPlayerAutoPlay);
CPY_SPEED(fPerspectiveTilt);
CPY_SPEED(fSkew);
CPY(m_sNoteSkin);
if(!other.m_sNoteSkin.empty() &&
NOTESKIN->DoesNoteSkinExist(other.m_sNoteSkin))
{
CPY(m_sNoteSkin);
}
for( int i = 0; i < PlayerOptions::NUM_ACCELS; ++i )
{
CPY_SPEED(fAccels[i]);