コード例 #1
0
void CBlipManager::AttachToVehicle(EntityId blipId, EntityId vehicleId) 
{
	if(blipId >= MAX_BLIPS)
		return;
	if(m_bActive[blipId])
	{
		CNetworkVehicle * pVehicle = g_pClient->GetVehicleManager()->Get(vehicleId);

		if(pVehicle && pVehicle->IsSpawned()) 
		{
			//Remove the position blip
			Scripting::RemoveBlip(m_Blips[blipId].uiBlipIndex);

			//And create one for the vehicle
			Scripting::AddBlipForCar(pVehicle->GetScriptingHandle(), &m_Blips[blipId].uiBlipIndex);

			// Set the blip sprite
			ChangeBlipSprite(m_Blips[blipId].uiBlipIndex, (Scripting::eBlipSprite)m_Blips[blipId].iSprite);

			// Set the blip color
			SetColor(blipId, m_Blips[blipId].uiColor);

			// Set the blip size
			SetSize(blipId, m_Blips[blipId].fSize);

			// Set short-range
			ToggleShortRange(blipId, m_Blips[blipId].bShortRange);

			// Set route
			ToggleRouteBlip(blipId, m_Blips[blipId].bRouteBlip);

			m_Blips[blipId].attachedVehicle = vehicleId;
		}
	}
}
コード例 #2
0
ファイル: CNetworkRPC.cpp プロジェクト: DarkKlo/maf2mp
void SpawnVehicle( RakNet::BitStream * pBitStream, RakNet::Packet * pPacket )
{
	// Read the vehicle id
	EntityId vehicleId;
	pBitStream->ReadCompressed( vehicleId );

	// Read the spawn position
	CVector3 vecPosition;
	pBitStream->Read( vecPosition );

	// Read teh spawn rotation
	CVector3 vecRotation;
	pBitStream->Read( vecRotation );

	// Get a pointer to the network vehicle
	CNetworkVehicle * pNetworkVehicle = pCore->GetVehicleManager()->Get( vehicleId );

	// Is the vehicle pointer valid?
	if( pNetworkVehicle )
	{
		// Is the vehicle not already spawned?
		if( !pNetworkVehicle->IsSpawned() )
		{
			// Set the spawn position
			pNetworkVehicle->SetSpawnPosition( vecPosition );

			// Set the spawn rotation
			pNetworkVehicle->SetSpawnRotation( vecRotation );

			// Create the vehicle
			pNetworkVehicle->Create();

			// Read the occupant count
			int iTotalOccupants;
			pBitStream->Read( iTotalOccupants );

#ifdef DEBUG
			CLogFile::Printf( "(SpawnVehicle) Total occupants: %d", iTotalOccupants );
#endif

			// Loop over the total occupants
			EntityId occupantId = INVALID_ENTITY_ID;
			int iSeat = 0;
			CRemotePlayer * pOccupant = NULL;
			for( int i = 0; i < iTotalOccupants; i++ )
			{
				// Read the current occupant id
				pBitStream->ReadCompressed( occupantId );

				// Read the current occupant seat
				pBitStream->Read( iSeat );

#ifdef DEBUG
				CLogFile::Printf( "SpawnVehicle - Read occupant %d in seat %d.", occupantId, iSeat );
#endif

				// Is the read data valid?
				if( occupantId != INVALID_ENTITY_ID )
				{
					// Get a pointer to the current occupant
					pOccupant = pCore->GetPlayerManager()->Get( occupantId );

					// Is the pointer valid?
					if( pOccupant )
					{
						// Set the occupant vehicle
						pOccupant->SetVehicle( pNetworkVehicle );

						// Set the occupant seat
						pOccupant->SetSeat( (iSeat + 1) );

						// Set the vehicle passenger
						pNetworkVehicle->SetOccupant( iSeat, pOccupant );

#ifdef DEBUG
						CLogFile::Printf( "Put occupant %d into vehicle %d (%d)", occupantId, pNetworkVehicle->GetId(), (iSeat + 1) );
#endif
					}
				}
			}

#ifdef DEBUG
			CLogFile::Print ( "SpawnVehicle RPC done!" );
#endif
		}
	}
}