Система подойдет как вступительная сцена или же обзор карты сервера либо экрана регистрации/авторизации.
У меня на проекте VMP Dayz используется как экран регистрации и авторизации, но в дальнейшем будет как вступительная сцена.

Переменные

Код:
new gCameraTimer[MAX_PLAYERS];
new Float:CameraProgress[MAX_PLAYERS];

Удаляем таймер при спавне OnPlayerRequestSpawn
Но перед этим добавьте функцию Logged

Код:
if (gCameraTimer[playerid])
{
    KillTimer(gCameraTimer[playerid]);
    gCameraTimer[playerid] = 0;
}
SetCameraBehindPlayer(playerid);

Удаляем таймер при отключении OnPlayerDisconnect

Код:
if (gCameraTimer[playerid])
{
    KillTimer(gCameraTimer[playerid]);
    gCameraTimer[playerid] = 0;
}

Удаляем таймер при старте таймера OnPlayerRequestClass и обнуляем скорость на всякий случай и снова запускаем таймер

Код:
if (gCameraTimer[playerid])
{
    KillTimer(gCameraTimer[playerid]);
    gCameraTimer[playerid] = 0;
}

CameraProgress[playerid] = 0.0;

gCameraTimer[playerid] = SetTimerEx("MoveCameraForward", 50, true, "i", playerid);

Создаем Forward ниже OnPlayerRequestClass

Код:
forward MoveCameraForward(playerid);
public MoveCameraForward(playerid)
{
    new Float:startX = -208.0103;
    new Float:startY = -1560.8622;
    new Float:startZ = 79.9655;
    new Float:startLookX = 355.6277;
    
    new Float:endX = -376.0383;
    new Float:endY = -539.4307;
    new Float:endZ = 84.3659;
    new Float:endLookX = 3.3517;
    
    new Float:speed = 0.001;
    
    CameraProgress[playerid] += speed;

    if(CameraProgress[playerid] >= 1.0)
    {
        CameraProgress[playerid] = 1.0;

        if(gCameraTimer[playerid])
        {
            KillTimer(gCameraTimer[playerid]);
            gCameraTimer[playerid] = 0;
        }

        SetPlayerCameraPos(playerid, endX, endY, endZ);
        SetPlayerCameraLookAt(playerid, endLookX, 0.0, 0.0);
        return;
    }

    new Float:camX = startX + (endX - startX) * CameraProgress[playerid];
    new Float:camY = startY + (endY - startY) * CameraProgress[playerid];
    new Float:camZ = startZ + (endZ - startZ) * CameraProgress[playerid];

    new Float:lookX = startLookX + (endLookX - startLookX) * CameraProgress[playerid];

    SetPlayerCameraPos(playerid, camX, camY, camZ);
    SetPlayerCameraLookAt(playerid, lookX, 0.0, 0.0);
}

Обзор

YouTube

Rutube Ссылка