Add type check for script helper assignments from ScriptVariant_t

This commit is contained in:
Alexander 'z33ky' Hirsch 2024-11-18 15:03:09 +01:00
parent cbb60e1afd
commit c0e12a2f58
3 changed files with 14 additions and 18 deletions

@ -560,16 +560,18 @@ bool CAnimEventTInstanceHelper::Set( void *p, const char *pszKey, ScriptVariant_
animevent_t *ani = ((animevent_t *)p);
if (FStrEq( pszKey, "event" ))
ani->event = variant;
return variant.AssignTo( &ani->event );
else if (FStrEq( pszKey, "options" ))
ani->options = variant;
// broken: return variant.AssignTo( &ani->options );
// variant memory is freed afterwards
return false;
else if (FStrEq( pszKey, "cycle" ))
ani->cycle = variant;
return variant.AssignTo( &ani->cycle );
else if (FStrEq( pszKey, "eventtime" ))
ani->eventtime = variant;
return variant.AssignTo( &ani->eventtime );
else if (FStrEq( pszKey, "type" ))
ani->type = variant;
else if (FStrEq( pszKey, "source" ))
return variant.AssignTo( &ani->type );
else if (FStrEq( pszKey, "source" ) && variant.m_type == FIELD_HSCRIPT)
{
CBaseEntity *pEnt = ToEnt( variant.m_hScript );
if (pEnt)

@ -440,13 +440,11 @@ bool CScriptColorInstanceHelper::Get( void *p, const char *pszKey, ScriptVariant
bool CScriptColorInstanceHelper::Set( void *p, const char *pszKey, ScriptVariant_t &variant )
{
Color *pClr = ((Color *)p);
if ( strlen(pszKey) == 1 )
int iVal;
if ( strlen(pszKey) == 1 && variant.AssignTo( &iVal ) )
{
int iVal;
variant.AssignTo( &iVal );
switch (pszKey[0])
{
// variant.AssignTo( &(*pClr)[0] );
case 'r':
(*pClr)[0] = iVal;
return true;

@ -259,17 +259,13 @@ bool CScriptQuaternionInstanceHelper::Set( void *p, const char *pszKey, ScriptVa
switch (pszKey[0])
{
case 'x':
variant.AssignTo( &pQuat->x );
return true;
return variant.AssignTo( &pQuat->x );
case 'y':
variant.AssignTo( &pQuat->y );
return true;
return variant.AssignTo( &pQuat->y );
case 'z':
variant.AssignTo( &pQuat->z );
return true;
return variant.AssignTo( &pQuat->z );
case 'w':
variant.AssignTo( &pQuat->w );
return true;
return variant.AssignTo( &pQuat->w );
}
}
return false;