Add script_connect_debugger_on_mapspawn cvar

This commit is contained in:
samisalreadytaken 2025-03-03 20:54:42 +03:00
parent cf4014a97c
commit 2b77baefbe
7 changed files with 38 additions and 26 deletions

View File

@ -29,7 +29,7 @@ extern IScriptManager *scriptmanager;
extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
#ifdef MAPBASE_VSCRIPT
extern int vscript_debugger_port;
ConVar script_connect_debugger_on_mapspawn_client( "script_connect_debugger_on_mapspawn_client", "0" );
#endif
// #define VMPROFILE 1
@ -687,10 +687,13 @@ bool VScriptClientInit()
#endif
#ifdef MAPBASE_VSCRIPT
if ( vscript_debugger_port )
if ( script_connect_debugger_on_mapspawn_client.GetInt() == 2 )
{
g_pScriptVM->ConnectDebugger( vscript_debugger_port, 10.0f );
}
else if ( script_connect_debugger_on_mapspawn_client.GetInt() != 0 )
{
g_pScriptVM->ConnectDebugger( vscript_debugger_port );
vscript_debugger_port = 0;
}
#endif

View File

@ -23,7 +23,7 @@
extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
#ifdef MAPBASE_VSCRIPT
extern int vscript_debugger_port;
ConVar script_connect_debugger_on_mapspawn( "script_connect_debugger_on_mapspawn", "0" );
#endif
// #define VMPROFILE 1
@ -668,10 +668,13 @@ bool VScriptServerInit()
#endif
#ifdef MAPBASE_VSCRIPT
if ( vscript_debugger_port )
if ( script_connect_debugger_on_mapspawn.GetInt() == 2 )
{
g_pScriptVM->ConnectDebugger( vscript_debugger_port, 10.0f );
}
else if ( script_connect_debugger_on_mapspawn.GetInt() != 0 )
{
g_pScriptVM->ConnectDebugger( vscript_debugger_port );
vscript_debugger_port = 0;
}
#endif

View File

@ -37,7 +37,6 @@ extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
#ifdef MAPBASE_VSCRIPT
// This is to ensure a dependency exists between the vscript library and the game DLLs
extern int vscript_token;
extern int vscript_debugger_port;
int vscript_token_hack = vscript_token;
#endif
@ -391,27 +390,14 @@ CON_COMMAND_F( script_debug, "Connect the vscript VM to the script debugger", FC
if ( !IsCommandIssuedByServerAdmin() )
return;
#ifdef MAPBASE_VSCRIPT
#ifdef GAME_DLL
int port = 1212;
#else
int port = 1213;
#endif
#endif
if ( !g_pScriptVM )
{
#ifdef MAPBASE_VSCRIPT
vscript_debugger_port = port;
CGMsg( 0, CON_GROUP_VSCRIPT, "VScript VM is not running, waiting for it to attach the debugger to port %d...\n", port );
#else
CGWarning( 0, CON_GROUP_VSCRIPT, "Scripting disabled or no server running\n" );
#endif
return;
}
#ifdef MAPBASE_VSCRIPT
g_pScriptVM->ConnectDebugger( port );
g_pScriptVM->ConnectDebugger( vscript_debugger_port );
#else
g_pScriptVM->ConnectDebugger();
#endif

View File

@ -43,6 +43,12 @@ class CBaseEntityScriptInstanceHelper : public IScriptInstanceHelper
extern CBaseEntityScriptInstanceHelper g_BaseEntityScriptInstanceHelper;
#ifdef MAPBASE_VSCRIPT
#ifdef GAME_DLL
const int vscript_debugger_port = 1212;
#else
const int vscript_debugger_port = 1213;
#endif
void RegisterSharedScriptConstants();
void RegisterSharedScriptFunctions();

View File

@ -839,7 +839,7 @@ public:
virtual void Shutdown() = 0;
#ifdef MAPBASE_VSCRIPT
virtual bool ConnectDebugger( int port = 0 ) = 0;
virtual bool ConnectDebugger( int port = 0, float timeout = 0.0f ) = 0;
#else
virtual bool ConnectDebugger() = 0;
#endif

View File

@ -17,7 +17,6 @@
IScriptVM* makeSquirrelVM();
int vscript_token = 0;
int vscript_debugger_port = 0;
class CScriptManager : public CTier1AppSystem<IScriptManager>
{

View File

@ -141,7 +141,7 @@ public:
virtual bool Init() override;
virtual void Shutdown() override;
virtual bool ConnectDebugger( int port = 0 ) override;
virtual bool ConnectDebugger( int port = 0, float timeout = 0.0f ) override;
virtual void DisconnectDebugger() override;
virtual ScriptLanguage_t GetLanguage() override;
@ -2077,12 +2077,27 @@ void SquirrelVM::Shutdown()
bool VScriptRunScript( const char *pszScriptName, HSCRIPT hScope, bool bWarnMissing );
bool SquirrelVM::ConnectDebugger( int port )
bool SquirrelVM::ConnectDebugger( int port, float timeout )
{
if ( !debugger_ )
{
debugger_ = sqdbg_attach_debugger( vm_ );
sqdbg_listen_socket( debugger_, port );
if ( sqdbg_listen_socket( debugger_, port ) == 0 && timeout )
{
float startTime = Plat_FloatTime();
while ( !sqdbg_is_client_connected( debugger_ ) )
{
float time = Plat_FloatTime();
if ( time - startTime > timeout )
break;
ThreadSleep( 50 );
sqdbg_frame( debugger_ );
}
}
}
else
{