Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. bool __fastcall hkWriteUsercmdDeltaToBuffer( IBaseClientDll* ecx, void* edx, int m_nSlot, BufWrite* m_pBuffer, int m_nFrom, int m_nTo, bool m_bNewCmd )
  2. {
  3. DWORD m_dwDesiredRetn = FindPattern( "engine.dll", "84 C0 74 04 B0 01 EB 02 32 C0 8B FE 46 3B F3 7E C9 85 C0 0F 84 ? ? ? ?" );
  4. if ( ( DWORD ) _ReturnAddress( ) != m_dwDesiredRetn )
  5. return o_WriteUsercmdDeltaToBuffer(ECX, nSlot, buf, from, to, isNewCmd);
  6.  
  7. if ( m_nFrom != -1 )
  8. return true;
  9.  
  10. int m_nTickbase = g_pGlobals->RageBot->g_nTickbase;
  11. g_pGlobals->RageBot->g_nTickbase = 0;
  12.  
  13. int* m_pnBackupCmds = ( int* )( reinterpret_cast< uintptr_t >( m_pBuffer ) - 0x30 );
  14. int* m_pnNewCmds = ( int* )( reinterpret_cast< uintptr_t >( m_pBuffer ) - 0x2C );
  15.  
  16. *m_pnBackupCmds = 0;
  17.  
  18. int m_nNewCmds, m_nNextCmd;
  19.  
  20. if ( m_nTickbase > 0 ) // optimize me!!!
  21. {
  22. m_nNewCmds = std::max( *m_pnNewCmds - m_nTickbase, 1 );
  23. *m_pnNewCmds = m_nNewCmds;
  24.  
  25. m_nNextCmd = g_pClientState->m_nLastOutgoingCmd + g_pClientState->m_nChokedCmds + 1;
  26.  
  27. for ( m_nTo = m_nNextCmd - m_nNewCmds + 1; to <= m_nNextCmd; to++ )
  28. {
  29. if ( !o_WriteUsercmdDeltaToBuffer( ecx, m_nSlot, m_pBuffer, m_nFrom, m_nTo, true ) )
  30. return false;
  31.  
  32. m_nFrom = m_nTo;
  33. }
  34.  
  35. return true;
  36. }
  37.  
  38. m_nFrom = -2;
  39.  
  40. int m_nTotalNewCmds = std::min( *m_pnNewCmds + abs( m_nTickbase ), 62 );
  41. m_nNewCmds = *m_pnNewCmds;
  42. *m_pnNewCmds = m_nTotalNewCmds;
  43. m_nNextCmd = g_pClientState->m_nLastOutgoingCmd + g_pClientState->m_nChokedCmds + 1;
  44.  
  45. for ( m_nTo = m_nNextCmd - m_nNewCmds + 1; to <= m_nNextCmd; to++ )
  46. {
  47. if ( !o_WriteUsercmdDeltaToBuffer( ecx, m_nSlot, m_pBuffer, m_nFrom, m_nTo, true ) )
  48. return false;
  49.  
  50. m_nFrom = m_nTo;
  51. }
  52.  
  53. CUserCmd* m_pLastRealCmd = g_pInput->GetUserCmd( m_nSlot, m_nFrom );
  54. CUserCmd m_FromCmd, m_ToCmd;
  55.  
  56. if ( !m_pLastRealCmd )
  57. return true;
  58.  
  59. m_FromCmd = *m_pLastRealCmd;
  60. m_ToCmd = m_FromCmd;
  61.  
  62. m_ToCmd.m_nCommand++;
  63. m_ToCmd.m_nTickcount += 3 * g_pGlobals->CSGO->g_iTickrate;
  64.  
  65. if ( m_nNewCmds > m_nTotalNewCmds )
  66. return false;
  67.  
  68. int m_nShift = m_nTotalNewCmds - m_nNewCmds + 1;
  69. while ( m_nShift > 0 ) // i should be "for" loop tbh
  70. {
  71. WriteUsercmd( m_pBuffer, &m_ToCmd, &m_FromCmd );
  72. m_nFromCmd.m_nCommand = m_nToCmd.m_nCommand;
  73. m_nFromCmd.m_nTickcount = m_nToCmd.m_nTickcount;
  74. // look at pseudo, you still need to store some more records
  75.  
  76. m_ToCmd.m_nCommand++;
  77. m_ToCmd.m_nTickcount++;
  78.  
  79. m_nShift--; // hm
  80. }
  81.  
  82. return true;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement