void CElementRPCs::SetElementHealth ( NetBitStreamInterface& bitStream ) { ElementID ID; float fHealth; unsigned char ucTimeContext; if ( bitStream.Read ( ID ) && bitStream.Read ( fHealth ) && bitStream.Read ( ucTimeContext ) ) { CClientEntity * pEntity = CElementIDs::GetElement ( ID ); if ( pEntity ) { pEntity->SetSyncTimeContext ( ucTimeContext ); switch ( pEntity->GetType () ) { case CCLIENTPED: case CCLIENTPLAYER: { CClientPed* pPed = static_cast < CClientPed * > ( pEntity ); pPed->SetHealth ( fHealth ); break; } case CCLIENTVEHICLE: { CClientVehicle* pVehicle = static_cast < CClientVehicle * > ( pEntity ); pVehicle->SetHealth ( fHealth ); break; } } } } }
void CUnoccupiedVehicleSync::Packet_UnoccupiedVehicleSync ( NetBitStreamInterface& BitStream ) { // While we're not out of vehicles while ( BitStream.GetNumberOfUnreadBits () >= 8 ) { SUnoccupiedVehicleSync vehicle; if ( BitStream.Read ( &vehicle ) ) { CClientVehicle* pVehicle = m_pVehicleManager->Get ( vehicle.data.vehicleID ); if ( pVehicle && pVehicle->CanUpdateSync ( vehicle.data.ucTimeContext ) ) { if ( vehicle.data.bSyncPosition ) pVehicle->SetTargetPosition ( vehicle.data.vecPosition, UNOCCUPIED_VEHICLE_SYNC_RATE, vehicle.data.bSyncVelocity, vehicle.data.vecVelocity.fZ ); if ( vehicle.data.bSyncRotation ) pVehicle->SetTargetRotation ( vehicle.data.vecRotation, UNOCCUPIED_VEHICLE_SYNC_RATE ); if ( vehicle.data.bSyncVelocity ) pVehicle->SetMoveSpeed ( vehicle.data.vecVelocity ); if ( vehicle.data.bSyncTurnVelocity ) pVehicle->SetTurnSpeed ( vehicle.data.vecTurnVelocity ); if ( vehicle.data.bSyncHealth ) pVehicle->SetHealth ( vehicle.data.fHealth ); pVehicle->SetEngineOn ( vehicle.data.bEngineOn ); if ( pVehicle->GetVehicleType() == CLIENTVEHICLE_TRAIN ) pVehicle->SetDerailed ( vehicle.data.bDerailed ); #ifdef MTA_DEBUG pVehicle->m_pLastSyncer = NULL; pVehicle->m_ulLastSyncTime = GetTickCount32 (); pVehicle->m_szLastSyncType = "unoccupied"; #endif } } else break; } }
void CClientPacketRecorder::ReadLocalData(FILE* pFile) { // Grab the local player CClientPlayer* pPlayer = m_pManager->GetPlayerManager()->GetLocalPlayer(); if (pPlayer) { // Grab the vehicle CClientVehicle* pVehicle = pPlayer->GetOccupiedVehicle(); if (pVehicle) { // Temp vars CMatrix matVehicle; CVector vecMoveSpeed; CVector vecTurnSpeed; float fHealth; // Read it out fread(&matVehicle.vRight.fX, sizeof(float), 1, pFile); fread(&matVehicle.vRight.fY, sizeof(float), 1, pFile); fread(&matVehicle.vRight.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fX, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fY, sizeof(float), 1, pFile); fread(&matVehicle.vFront.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fX, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fY, sizeof(float), 1, pFile); fread(&matVehicle.vUp.fZ, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fX, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fY, sizeof(float), 1, pFile); fread(&matVehicle.vPos.fZ, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fX, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fY, sizeof(float), 1, pFile); fread(&vecMoveSpeed.fZ, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fX, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fY, sizeof(float), 1, pFile); fread(&vecTurnSpeed.fZ, sizeof(float), 1, pFile); fread(&fHealth, sizeof(float), 1, pFile); CControllerState cs; fread(&cs, sizeof(CControllerState), 1, pFile); // Set the data pVehicle->SetMatrix(matVehicle); pVehicle->SetMoveSpeed(vecMoveSpeed); pVehicle->SetTurnSpeed(vecTurnSpeed); pVehicle->SetHealth(fHealth); // Set the controller state CControllerState csLast; g_pGame->GetPad()->Disable(true); g_pGame->GetPad()->GetCurrentControllerState(&csLast); g_pGame->GetPad()->SetLastControllerState(&csLast); g_pGame->GetPad()->SetCurrentControllerState(&cs); } } }
void CElementRPCs::SetElementHealth ( CClientEntity* pSource, NetBitStreamInterface& bitStream ) { float fHealth; unsigned char ucTimeContext; if ( bitStream.Read ( fHealth ) && bitStream.Read ( ucTimeContext ) ) { pSource->SetSyncTimeContext ( ucTimeContext ); switch ( pSource->GetType () ) { case CCLIENTPED: case CCLIENTPLAYER: { CClientPed* pPed = static_cast < CClientPed * > ( pSource ); if ( pPed->IsHealthLocked() ) pPed->LockHealth ( fHealth ); else pPed->SetHealth ( fHealth ); break; } case CCLIENTVEHICLE: { CClientVehicle* pVehicle = static_cast < CClientVehicle * > ( pSource ); pVehicle->SetHealth ( fHealth ); break; } case CCLIENTOBJECT: case CCLIENTWEAPON: { CClientObject* pObject = static_cast < CClientObject * > ( pSource ); pObject->SetHealth ( fHealth ); break; } } } }