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);
}
}
}
}