Prevent crashes from an invalid noteskin being set.
This commit is contained in:
@@ -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 );
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user