Guest User

Untitled

a guest
May 22nd, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #define VEHICLE_SYNC_PACKET_ID 100
  2.  
  3. typedef unsigned char   uint8_t;
  4. typedef unsigned short  uint16_t;
  5. typedef unsigned long   uint32_t;
  6.  
  7. /*
  8.     You need bitstream.cpp and .h
  9. */
  10.  
  11. // only work for SA-MP 0.3d R1 Windows server.
  12.  
  13. int ( __thiscall* CNetGame__SendPacketToPlayer )( uint32_t __NetGame, RakNet::BitStream* bStream, uint16_t playerid ) )0x483DD0; // init a pointer to the CNetGame::SendPacketToPlayer from SA-MP.
  14.  
  15.  
  16. void SendInCarSync( uint16_t playerid )
  17. {
  18.     /*
  19.         Just create your function to get vehicleid, position, keystate etc ...
  20.     */
  21.    
  22.     uint16_t vehicleid = 0, leftRightKeys = 0, upDownKeys = 0, Keys = 0;
  23.     float quartRotation[ 4 ] = { 0.0f, 0.0f, 0.0f, 0.0f };
  24.     float position[ 3 ] = { 0.0f, 0.0f, 0.0f, 0.0f}, velocity[ 3 ] = { 0.0f, 0.0f, 0.0f, 0.0f};
  25.     float vehicleHealth = 1000.0f;
  26.     float playerHealth = 100.0f, playerArmor = 0.0f;
  27.     uint8_t playerWeapon = 0;
  28.    
  29.     RakNet::BitStream bStream;
  30.    
  31.     bStream.Write( ( uint8_t ) VEHICLE_SYNC_PACKET_ID );
  32.     bStream.Write( ( uint16_t ) playerid );
  33.    
  34.     bStream.Write( ( uint16_t ) vehicleid );
  35.    
  36.     bStream.Write( ( uint16_t ) leftRightKeys );
  37.     bStream.Write( ( uint16_t ) upDownKeys );
  38.     bStream.Write( ( uint16_t ) Keys );
  39.  
  40.     bStream.WriteNormQuat( quartRotation[0], quartRotation[1], quartRotation[2], quartRotation[3] );
  41.     bStream.Write( ( char* )position, 3 * 4 );
  42.     bStream.WriteVector( velocity[ 0 ], velocity[ 1 ], velocity[ 2 ] );
  43.     bStream.Write( vehicleHealth );
  44.    
  45.     uint8_t compressedHealthArmour = 0x00;
  46.  
  47.     if( playerHealth > 0.0f && playerHealth  < 100.0f )
  48.         compressedHealthArmour = ( uint8_t )( playerHealth / 7 ) << 4;
  49.     else if( playerHealth  >= 100.0f )
  50.         compressedHealthArmour = 0xF0;
  51.    
  52.     if( playerArmor > 0 && playerArmor < 100.0f )
  53.         compressedHealthArmour |= ( uint8_t )( playerArmor / 7 );
  54.     else if( playerArmor >= 100.0f )
  55.         compressedHealthArmour |= 0x0F;
  56.    
  57.     bStream.Write( ( uint8_t ) compressedHealthArmour );
  58.     bStream.Write( ( uint8_t ) playerWeapon );
  59.    
  60.     bStream.Write( false ); // need to sync sirentType ?
  61.     bStream.Write( false ); // need to sync gearState ?
  62.     bStream.Write( false ); // need to sync hydra reactor angle ?
  63.     bStream.Write( false ); // need to sync trailer position ?
  64.    
  65.  
  66.     // *( uint32_t* )( 0x4E6238 ) == __NetGame
  67.     CNetGame__SendPacketToPlayer( *( uint32_t* )( 0x4E6238 ), &bStream, playerid );
  68. }
Add Comment
Please, Sign In to add comment