Player become a spectator

Here is some C++ code you can use as reference:

else if (GetMenuEntry() == 3) // spectate player
		{
			if (!NETWORK::NETWORK_IS_PLAYER_CONNECTED(g_online_selectedPlayer))
			{
				DrawToast("Player isn't connected.");
				g_isSpectating = false;
			}

			if (g_isSpectating)
			{
				if (!CAM::IS_SCREEN_FADED_OUT())
				{
					if (!CAM::IS_SCREEN_FADING_OUT())
					{
						CAM::DO_SCREEN_FADE_OUT(1000);

						while (!CAM::IS_SCREEN_FADED_OUT()) WAIT(0);

						STREAMING::REQUEST_COLLISION_AT_COORD(targetPos.x, targetPos.y, targetPos.z);
						NETWORK::NETWORK_SET_IN_SPECTATOR_MODE(1, g_online_selectedPlayer);

						if (CAM::IS_SCREEN_FADED_OUT())
						{
							CAM::DO_SCREEN_FADE_IN(1000);
						}
					}
				}

				DrawToast((char*)va("Spectating ~b~<C>%s</C>.", PLAYER::GET_PLAYER_NAME(g_online_selectedPlayer)));
			}
			else
			{
				if (!CAM::IS_SCREEN_FADED_OUT())
				{
					if (!CAM::IS_SCREEN_FADING_OUT())
					{
						CAM::DO_SCREEN_FADE_OUT(1000);

						while (!CAM::IS_SCREEN_FADED_OUT()) WAIT(0);

						STREAMING::REQUEST_COLLISION_AT_COORD(playerPos.x, playerPos.y, playerPos.z);
						NETWORK::NETWORK_SET_IN_SPECTATOR_MODE(0, g_online_selectedPlayer);

						if (CAM::IS_SCREEN_FADED_OUT())
						{
							CAM::DO_SCREEN_FADE_IN(1000);
						}
					}
				}
			}