@@ -497,6 +497,10 @@ int CGameClient::OnSnapInput(int *pData, bool Dummy, bool Force)
497497 {
498498 return m_Controls.SnapInput (pData);
499499 }
500+ if (m_aLocalIds[!g_Config.m_ClDummy ] < 0 )
501+ {
502+ return 0 ;
503+ }
500504
501505 if (!g_Config.m_ClDummyHammer )
502506 {
@@ -530,11 +534,9 @@ int CGameClient::OnSnapInput(int *pData, bool Dummy, bool Force)
530534 m_DummyInput.m_WantedWeapon = WEAPON_HAMMER + 1 ;
531535 }
532536
533- vec2 MainPos = m_LocalCharacterPos;
534- vec2 DummyPos = m_aClients[m_aLocalIds[!g_Config.m_ClDummy ]].m_Predicted .m_Pos ;
535- vec2 Dir = MainPos - DummyPos;
536- m_HammerInput.m_TargetX = (int )(Dir.x );
537- m_HammerInput.m_TargetY = (int )(Dir.y );
537+ const vec2 Dir = m_LocalCharacterPos - m_aClients[m_aLocalIds[!g_Config.m_ClDummy ]].m_Predicted .m_Pos ;
538+ m_HammerInput.m_TargetX = (int )Dir.x ;
539+ m_HammerInput.m_TargetY = (int )Dir.y ;
538540
539541 mem_copy (pData, &m_HammerInput, sizeof (m_HammerInput));
540542 return sizeof (m_HammerInput);
@@ -807,7 +809,7 @@ void CGameClient::OnRender()
807809 g_Config.m_ClDummy = 0 ;
808810
809811 // resend player and dummy info if it was filtered by server
810- if (Client ()->State () == IClient::STATE_ONLINE && !m_Menus.IsActive () && WasNewTick)
812+ if (m_aLocalIds[ 0 ] >= 0 && Client ()->State () == IClient::STATE_ONLINE && !m_Menus.IsActive () && WasNewTick)
811813 {
812814 if (m_aCheckInfo[0 ] == 0 )
813815 {
@@ -839,7 +841,7 @@ void CGameClient::OnRender()
839841 m_aCheckInfo[0 ] -= minimum (Client ()->GameTick (0 ) - Client ()->PrevGameTick (0 ), m_aCheckInfo[0 ]);
840842 }
841843
842- if (Client ()-> DummyConnected () )
844+ if (m_aLocalIds[ 1 ] >= 0 )
843845 {
844846 if (m_aCheckInfo[1 ] == 0 )
845847 {
@@ -876,6 +878,7 @@ void CGameClient::OnRender()
876878
877879void CGameClient::OnDummyDisconnect ()
878880{
881+ m_aLocalIds[1 ] = -1 ;
879882 m_aDDRaceMsgSent[1 ] = false ;
880883 m_aShowOthers[1 ] = SHOW_OTHERS_NOT_SET;
881884 m_aLastNewPredictedTick[1 ] = -1 ;
0 commit comments