From 10d78f6741eae9f200004571c6526b7cf697cd18 Mon Sep 17 00:00:00 2001 From: jhh8 Date: Wed, 30 Sep 2026 15:43:35 +0300 Subject: [PATCH] SetAnyoneCanInteract vscript function(vguivscript) --- src/game/server/swarm/asw_player.cpp | 2 +- src/game/shared/swarm/rd_vgui_vscript_shared.cpp | 12 ++++++++++++ src/game/shared/swarm/rd_vgui_vscript_shared.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/game/server/swarm/asw_player.cpp b/src/game/server/swarm/asw_player.cpp index 2f43f2825..ad1fc508f 100644 --- a/src/game/server/swarm/asw_player.cpp +++ b/src/game/server/swarm/asw_player.cpp @@ -1362,7 +1362,7 @@ bool CASW_Player::ClientCommand( const CCommand &args ) int iValue = V_atoi( args[4] ); CRD_VGui_VScript *pEnt = dynamic_cast< CRD_VGui_VScript * >( CBaseEntity::Instance( iEntity ) ); - if ( !pEnt || pEnt->m_iRandomCheck != iCheck || !pEnt->m_hInteracter || GetNPC() != pEnt->m_hInteracter ) + if ( !pEnt || pEnt->m_iRandomCheck != iCheck || ( !pEnt->m_bAnyoneCanInteract && ( !pEnt->m_hInteracter || GetNPC() != pEnt->m_hInteracter ) ) ) { Warning( "Player %s sent a bad cl_vgui_vscript_input command\n", GetASWNetworkID() ); return false; diff --git a/src/game/shared/swarm/rd_vgui_vscript_shared.cpp b/src/game/shared/swarm/rd_vgui_vscript_shared.cpp index fd0ec477c..b2d0662e6 100644 --- a/src/game/shared/swarm/rd_vgui_vscript_shared.cpp +++ b/src/game/shared/swarm/rd_vgui_vscript_shared.cpp @@ -50,10 +50,12 @@ BEGIN_NETWORK_TABLE( CRD_VGui_VScript, DT_RD_VGui_VScript ) RecvPropInt( RECVINFO( m_iRandomCheck ) ), RecvPropEHandle( RECVINFO( m_hInteracter ) ), RecvPropInt( RECVINFO( m_iSequenceAck ) ), + RecvPropBool( RECVINFO( m_bAnyoneCanInteract ) ), #else SendPropInt( SENDINFO( m_iRandomCheck ) ), SendPropEHandle( SENDINFO( m_hInteracter ) ), SendPropInt( SENDINFO( m_iSequenceAck ) ), + SendPropBool( SENDINFO( m_bAnyoneCanInteract ) ), #endif END_NETWORK_TABLE(); @@ -68,6 +70,7 @@ BEGIN_ENT_SCRIPTDESC( CRD_VGui_VScript, CRD_HUD_VScript, "Alien Swarm: Reactive DEFINE_SCRIPTFUNC( CreateButton, "Creates a button that can be targeted by both the mouse and the controller." ) #else DEFINE_SCRIPTFUNC( SetInteracter, "Sets the character who is allowed to interact with this screen." ) + DEFINE_SCRIPTFUNC( SetAnyoneCanInteract, "If set to true, Control function runs for spectators and they can send inputs." ) #endif DEFINE_SCRIPTFUNC( GetInteracter, "Gets the character who is allowed to interact with this screen." ) END_SCRIPTDESC(); @@ -204,6 +207,7 @@ CRD_VGui_VScript::CRD_VGui_VScript() { m_hInteracter = NULL; m_iSequenceAck = 0; + m_bAnyoneCanInteract = false; #ifdef CLIENT_DLL s_InteractiveHUDEntities.AddToTail( this ); @@ -495,6 +499,9 @@ void CRD_VGui_VScript::ResetPrediction() bool CRD_VGui_VScript::AllowedToInteract() { + if ( m_bAnyoneCanInteract ) + return true; + ASSERT_LOCAL_PLAYER_RESOLVABLE(); C_BaseEntity *pOwner = GetPredictionOwner(); @@ -676,6 +683,11 @@ void CRD_VGui_VScript::SetInteracter( HSCRIPT interacter ) m_hInteracter = assert_cast< CASW_Inhabitable_NPC * >( pInteracter ); } +void CRD_VGui_VScript::SetAnyoneCanInteract( bool bAnyone ) +{ + m_bAnyoneCanInteract = bAnyone; +} + void CRD_VGui_VScript::RunVScripts() { BaseClass::RunVScripts(); diff --git a/src/game/shared/swarm/rd_vgui_vscript_shared.h b/src/game/shared/swarm/rd_vgui_vscript_shared.h index b1451f9e4..a096d04e1 100644 --- a/src/game/shared/swarm/rd_vgui_vscript_shared.h +++ b/src/game/shared/swarm/rd_vgui_vscript_shared.h @@ -79,6 +79,7 @@ class CRD_VGui_VScript : public CRD_HUD_VScript virtual void OnInput( int sequence, int value ); void SetInteracter( HSCRIPT interacter ); virtual bool AllowSetInteracter() { return true; } + void SetAnyoneCanInteract( bool bEveryone ); void RunVScripts() override; #endif @@ -89,6 +90,7 @@ class CRD_VGui_VScript : public CRD_HUD_VScript CNetworkVar( int, m_iRandomCheck ); CNetworkHandle( CASW_Inhabitable_NPC, m_hInteracter ); CNetworkVar( int, m_iSequenceAck ); + CNetworkVar( bool, m_bAnyoneCanInteract ); bool m_bIsInput{ false };