mirror of
https://github.com/celisej567/source-sdk-2013.git
synced 2026-09-17 20:10:21 +03:00
Integrating vscript interface code (based on Alien Swarm)
This commit is contained in:
@@ -27,6 +27,126 @@
|
||||
|
||||
extern CServerGameDLL g_ServerGameDLL;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: An entity that acts as a container for game scripts.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define MAX_SCRIPT_GROUP 16
|
||||
|
||||
class CLogicScript : public CPointEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CLogicScript, CPointEntity );
|
||||
DECLARE_DATADESC();
|
||||
|
||||
void RunVScripts()
|
||||
{
|
||||
/*
|
||||
EntityGroup <- [];
|
||||
function __AppendToScriptGroup( name )
|
||||
{
|
||||
if ( name.len() == 0 )
|
||||
{
|
||||
EntityGroup.append( null );
|
||||
}
|
||||
else
|
||||
{
|
||||
local ent = Entities.FindByName( null, name );
|
||||
EntityGroup.append( ent );
|
||||
if ( ent != null )
|
||||
{
|
||||
ent.ValidateScriptScope();
|
||||
ent.GetScriptScope().EntityGroup <- EntityGroup;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
static const char szAddCode[] =
|
||||
{
|
||||
0x45,0x6e,0x74,0x69,0x74,0x79,0x47,0x72,0x6f,0x75,0x70,0x20,0x3c,0x2d,0x20,0x5b,0x5d,0x3b,0x0d,0x0a,
|
||||
0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x5f,0x5f,0x41,0x70,0x70,0x65,0x6e,0x64,0x54,0x6f,0x53,
|
||||
0x63,0x72,0x69,0x70,0x74,0x47,0x72,0x6f,0x75,0x70,0x28,0x20,0x6e,0x61,0x6d,0x65,0x20,0x29,0x20,0x0d,
|
||||
0x0a,0x7b,0x0d,0x0a,0x09,0x69,0x66,0x20,0x28,0x20,0x6e,0x61,0x6d,0x65,0x2e,0x6c,0x65,0x6e,0x28,0x29,
|
||||
0x20,0x3d,0x3d,0x20,0x30,0x20,0x29,0x20,0x0d,0x0a,0x09,0x7b,0x20,0x0d,0x0a,0x09,0x09,0x45,0x6e,0x74,
|
||||
0x69,0x74,0x79,0x47,0x72,0x6f,0x75,0x70,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x28,0x20,0x6e,0x75,0x6c,
|
||||
0x6c,0x20,0x29,0x3b,0x20,0x0d,0x0a,0x09,0x7d,0x20,0x0d,0x0a,0x09,0x65,0x6c,0x73,0x65,0x0d,0x0a,0x09,
|
||||
0x7b,0x20,0x0d,0x0a,0x09,0x09,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x65,0x6e,0x74,0x20,0x3d,0x20,0x45,0x6e,
|
||||
0x74,0x69,0x74,0x69,0x65,0x73,0x2e,0x46,0x69,0x6e,0x64,0x42,0x79,0x4e,0x61,0x6d,0x65,0x28,0x20,0x6e,
|
||||
0x75,0x6c,0x6c,0x2c,0x20,0x6e,0x61,0x6d,0x65,0x20,0x29,0x3b,0x0d,0x0a,0x09,0x09,0x45,0x6e,0x74,0x69,
|
||||
0x74,0x79,0x47,0x72,0x6f,0x75,0x70,0x2e,0x61,0x70,0x70,0x65,0x6e,0x64,0x28,0x20,0x65,0x6e,0x74,0x20,
|
||||
0x29,0x3b,0x0d,0x0a,0x09,0x09,0x69,0x66,0x20,0x28,0x20,0x65,0x6e,0x74,0x20,0x21,0x3d,0x20,0x6e,0x75,
|
||||
0x6c,0x6c,0x20,0x29,0x0d,0x0a,0x09,0x09,0x7b,0x0d,0x0a,0x09,0x09,0x09,0x65,0x6e,0x74,0x2e,0x56,0x61,
|
||||
0x6c,0x69,0x64,0x61,0x74,0x65,0x53,0x63,0x72,0x69,0x70,0x74,0x53,0x63,0x6f,0x70,0x65,0x28,0x29,0x3b,
|
||||
0x0d,0x0a,0x09,0x09,0x09,0x65,0x6e,0x74,0x2e,0x47,0x65,0x74,0x53,0x63,0x72,0x69,0x70,0x74,0x53,0x63,
|
||||
0x6f,0x70,0x65,0x28,0x29,0x2e,0x45,0x6e,0x74,0x69,0x74,0x79,0x47,0x72,0x6f,0x75,0x70,0x20,0x3c,0x2d,
|
||||
0x20,0x45,0x6e,0x74,0x69,0x74,0x79,0x47,0x72,0x6f,0x75,0x70,0x3b,0x0d,0x0a,0x09,0x09,0x7d,0x0d,0x0a,
|
||||
0x09,0x7d,0x0d,0x0a,0x7d,0x0d,0x0a,0x00
|
||||
};
|
||||
|
||||
int iLastMember;
|
||||
for ( iLastMember = MAX_SCRIPT_GROUP - 1; iLastMember >= 0; iLastMember-- )
|
||||
{
|
||||
if ( m_iszGroupMembers[iLastMember] != NULL_STRING )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( iLastMember >= 0 )
|
||||
{
|
||||
HSCRIPT hAddScript = g_pScriptVM->CompileScript( szAddCode );
|
||||
if ( hAddScript )
|
||||
{
|
||||
ValidateScriptScope();
|
||||
m_ScriptScope.Run( hAddScript );
|
||||
HSCRIPT hAddFunc = m_ScriptScope.LookupFunction( "__AppendToScriptGroup" );
|
||||
if ( hAddFunc )
|
||||
{
|
||||
for ( int i = 0; i <= iLastMember; i++ )
|
||||
{
|
||||
m_ScriptScope.Call( hAddFunc, NULL, STRING(m_iszGroupMembers[i]) );
|
||||
}
|
||||
g_pScriptVM->ReleaseFunction( hAddFunc );
|
||||
m_ScriptScope.ClearValue( "__AppendToScriptGroup" );
|
||||
}
|
||||
|
||||
g_pScriptVM->ReleaseScript( hAddScript );
|
||||
}
|
||||
}
|
||||
BaseClass::RunVScripts();
|
||||
}
|
||||
|
||||
string_t m_iszGroupMembers[MAX_SCRIPT_GROUP];
|
||||
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( logic_script, CLogicScript );
|
||||
|
||||
BEGIN_DATADESC( CLogicScript )
|
||||
// Silence, Classcheck!
|
||||
// DEFINE_ARRAY( m_iszGroupMembers, FIELD_STRING, MAX_NUM_TEMPLATES ),
|
||||
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[0], FIELD_STRING, "Group00"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[1], FIELD_STRING, "Group01"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[2], FIELD_STRING, "Group02"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[3], FIELD_STRING, "Group03"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[4], FIELD_STRING, "Group04"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[5], FIELD_STRING, "Group05"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[6], FIELD_STRING, "Group06"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[7], FIELD_STRING, "Group07"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[8], FIELD_STRING, "Group08"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[9], FIELD_STRING, "Group09"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[10], FIELD_STRING, "Group10"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[11], FIELD_STRING, "Group11"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[12], FIELD_STRING, "Group12"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[13], FIELD_STRING, "Group13"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[14], FIELD_STRING, "Group14"),
|
||||
DEFINE_KEYFIELD( m_iszGroupMembers[15], FIELD_STRING, "Group16"),
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Compares a set of integer inputs to the one main input
|
||||
|
||||
Reference in New Issue
Block a user