strip invalid characters when evaluating Actor command parameters
This commit is contained in:
@@ -17,7 +17,9 @@ void IncorrectActorParametersWarning( const ParsedCommand &command, int iMaxInde
|
||||
void ParsedCommandToken::Set( const CString &sParam )
|
||||
{
|
||||
s = sParam;
|
||||
f = Lua::RunExpressionF( sParam );
|
||||
CString s = sParam;
|
||||
Lua::PrepareExpression( s ); // strip invalid chars
|
||||
f = Lua::RunExpressionF( s );
|
||||
bColorIsValid = c.FromString( sParam );
|
||||
}
|
||||
|
||||
|
||||
@@ -184,6 +184,17 @@ void Lua::UpdateGlobals()
|
||||
lua_setglobal( L, "SCREEN_CENTER_Y" );
|
||||
}
|
||||
|
||||
void Lua::PrepareExpression( CString &sInOut )
|
||||
{
|
||||
// HACK: Many metrics have "//" comments that Lua fails to parse.
|
||||
// Replace them with Lua-style comments.
|
||||
sInOut.Replace( "//", "--" );
|
||||
|
||||
// Remove leading +, eg. "+50"; Lua doesn't handle that.
|
||||
if( sInOut.size() >= 1 && sInOut[0] == '+' )
|
||||
sInOut.erase( 0, 1 );
|
||||
}
|
||||
|
||||
void RunExpression( const CString &str )
|
||||
{
|
||||
LoadFromString( L, "return " + str );
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
struct lua_State;
|
||||
namespace Lua
|
||||
{
|
||||
void PrepareExpression( CString &sInOut ); // strip "//" comments and "+"
|
||||
bool RunExpressionB( const CString &str );
|
||||
float RunExpressionF( const CString &str );
|
||||
|
||||
|
||||
@@ -615,13 +615,8 @@ int ThemeManager::GetMetricI( CString sClassName, CString sValueName )
|
||||
float ThemeManager::GetMetricF( CString sClassName, CString sValueName )
|
||||
{
|
||||
CString str = GetMetricRaw( sClassName,sValueName );
|
||||
// HACK: Many metrics have "//" comments that Lua fails to parse.
|
||||
// Replace them with Lua-style comments.
|
||||
str.Replace( "//", "--" );
|
||||
|
||||
// Remove leading +, eg. "+50"; Lua doesn't handle that.
|
||||
if( str.size() >= 1 && str[0] == '+' )
|
||||
str.erase( 0, 1 );
|
||||
Lua::PrepareExpression( str );
|
||||
|
||||
return Lua::RunExpressionF( str );
|
||||
}
|
||||
@@ -634,9 +629,9 @@ bool ThemeManager::GetMetricB( CString sClassName, CString sValueName )
|
||||
return false; /* optimization */
|
||||
if( str == "1" )
|
||||
return true; /* optimization */
|
||||
// HACK: Many metrics have "//" comments that Lua fails to parse.
|
||||
// Replace them with Lua-style comments.
|
||||
str.Replace( "//", "--" );
|
||||
|
||||
Lua::PrepareExpression( str );
|
||||
|
||||
return Lua::RunExpressionB( str );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user