Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define VEHICLE_SYNC_PACKET_ID 100
- typedef unsigned char uint8_t;
- typedef unsigned short uint16_t;
- typedef unsigned long uint32_t;
- /*
- You need bitstream.cpp and .h
- */
- // only work for SA-MP 0.3d R1 Windows server.
- int ( __thiscall* CNetGame__SendPacketToPlayer )( uint32_t __NetGame, RakNet::BitStream* bStream, uint16_t playerid ) )0x483DD0; // init a pointer to the CNetGame::SendPacketToPlayer from SA-MP.
- void SendInCarSync( uint16_t playerid )
- {
- /*
- Just create your function to get vehicleid, position, keystate etc ...
- */
- uint16_t vehicleid = 0, leftRightKeys = 0, upDownKeys = 0, Keys = 0;
- float quartRotation[ 4 ] = { 0.0f, 0.0f, 0.0f, 0.0f };
- float position[ 3 ] = { 0.0f, 0.0f, 0.0f, 0.0f}, velocity[ 3 ] = { 0.0f, 0.0f, 0.0f, 0.0f};
- float vehicleHealth = 1000.0f;
- float playerHealth = 100.0f, playerArmor = 0.0f;
- uint8_t playerWeapon = 0;
- RakNet::BitStream bStream;
- bStream.Write( ( uint8_t ) VEHICLE_SYNC_PACKET_ID );
- bStream.Write( ( uint16_t ) playerid );
- bStream.Write( ( uint16_t ) vehicleid );
- bStream.Write( ( uint16_t ) leftRightKeys );
- bStream.Write( ( uint16_t ) upDownKeys );
- bStream.Write( ( uint16_t ) Keys );
- bStream.WriteNormQuat( quartRotation[0], quartRotation[1], quartRotation[2], quartRotation[3] );
- bStream.Write( ( char* )position, 3 * 4 );
- bStream.WriteVector( velocity[ 0 ], velocity[ 1 ], velocity[ 2 ] );
- bStream.Write( vehicleHealth );
- uint8_t compressedHealthArmour = 0x00;
- if( playerHealth > 0.0f && playerHealth < 100.0f )
- compressedHealthArmour = ( uint8_t )( playerHealth / 7 ) << 4;
- else if( playerHealth >= 100.0f )
- compressedHealthArmour = 0xF0;
- if( playerArmor > 0 && playerArmor < 100.0f )
- compressedHealthArmour |= ( uint8_t )( playerArmor / 7 );
- else if( playerArmor >= 100.0f )
- compressedHealthArmour |= 0x0F;
- bStream.Write( ( uint8_t ) compressedHealthArmour );
- bStream.Write( ( uint8_t ) playerWeapon );
- bStream.Write( false ); // need to sync sirentType ?
- bStream.Write( false ); // need to sync gearState ?
- bStream.Write( false ); // need to sync hydra reactor angle ?
- bStream.Write( false ); // need to sync trailer position ?
- // *( uint32_t* )( 0x4E6238 ) == __NetGame
- CNetGame__SendPacketToPlayer( *( uint32_t* )( 0x4E6238 ), &bStream, playerid );
- }
Add Comment
Please, Sign In to add comment