В теме 10 сообщений

Cawfee
Великий Гуру

Описание системы.

Система полета камерой представляет собой возможность перемещаться в пространстве игры по всем осям (X, Y, Z) путем нажатия кнопок на клавиатуре.

 

Подключение системы.

1. Система написана в отдельном файле. Вам необходимо скачать этот файл и добавить в папку, находящейся в следующей директории:

"..\pawno\include"

2. Затем Вам следует открыть свой игровой мод и в начале, после всех директив включения заголовочных файлов (#include), дописать следующую строку:

#include "fly"

 

Работа с системой.

В систему полета камерой включены две функции:

1. Изменение состояния полета игрока.

SetPlayerFlyStatus(playerid, status = CAMERA_MODE_REVERSE)
/*
    playerid - ID игрока, которого Вы хотите "отправить" в режим полета
    status - режим полета*
    
    * предусмотрено три режима полета:
        CAMERA_MODE_NONE    (0) - выключить режим полета,
        CAMERA_MODE_FLY     (1) - включить режим полета,
        CAMERA_MODE_REVERSE (2) - сменить режим на реверсивный
*/

2. Проверка, находится ли игрок в "полете".

IsPlayerFlying(playerid)
/*
    playerid - ID игрока, пребывание в состоянии полета которого Вы хотите проверить
    
    * данная функция возвращает:
        CAMERA_MODE_NONE    (0), если игрок не находится в состоянии полета,
        CAMERA_MODE_FLY     (1), если игрок находится в состоянии полета
    
*/

При помощи данных функций вы можете управлять пребыванием игрока в режиме полета, а также получать информацию о том, "летает" ли игрок в тот или иной момент.

 

Особенности системы.

Системой полета предусмотрено, что игрок, выходящий из режима полета, появится именно там, где вышел. Так, если вы покидаете режим полета, пребывая в озере, то появление игрока будет именно в этом озере.

 

Пример использования.

CMD:fly(playerid, params[])
{
    static const MSG_USE_CMD[] = !"» Usage the command: /fly [mode 0-2]";
    
    if(isnull(params)) {
        return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0;
    }

    new mode;
    if(sscanf(params, "d", mode)) {
        return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0;
    }
    
    if(!(mode >= 0 && mode <= 2)) {
        return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0;
    }

    SetPlayerFlyStatus(playerid, mode);
    return 1;
}
CMD:checkfly(playerid, params[])
{
    static const MSG_USE_CMD[] = !"» Usage the command: /checkfly [playerid]";
    
    if(isnull(params)) {
        return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0;
    }

    new id;
    if(sscanf(params, "u", id)) {
        return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0;
    }

    if(id == INVALID_PLAYER_ID) {
        return SendClientMessage(playerid, -1, !"The player is not connected") & 0;
    }

    static const status_fly[][] =
    {
        !"The player is not flying",
        !"The player is flying"
    };
    
    SendClientMessage(playerid, -1, status_fly[IsPlayerFlying(id)]);
    return 1
}

 

fly.inc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Новичок

\pawno\include\fly.inc(92) : warning: recursion in SetPlayerFlyStatus
Disable recursion warning: #pragma disablerecursion or #pragma warning disable 238

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Cawfee
Великий Гуру

@Lafiho1, в данном случае рекурсия является контролируемой, что позволяет проигнорировать появление данное предупреждения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Новичок

Проверил, все работает, жаль что не уберешь эти warning при компиляции

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Cawfee
Великий Гуру

@Lafiho1, как насчет этого?

 

Цитата

Disable recursion warning: #pragma disablerecursion or #pragma warning disable 238

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • От xDetik
      Приветствую.
      Сделал небольшой островок на некотором расстоянии от карты Сан-Андреса, хотел поставить там пикап, добавил пикап в мод, и после того как приехал на остров, пикап не видно. Но если на этом же пикапе поменять координаты на те, которые находятся на карте Сан-Андреса, то он становится виден. В чем может быть проблема?
    • От Daf
      Здравствуйте, знатоки Pawn. У меня возникла такая проблема, сейчас попробую расписать ее подробно:
      Я решил добавить в игру Real cars. Всё сделал правильно: подключил инклуд, знаю принцип добавление реал кара. Захожу в игру и вижу машину. Добавляю вторую — она тоже есть. Добавляю третью — снова всё нормально. Но когда я пытаюсь добавить четвёртую, игра крашится при входе.
      Не важно, какой ид авто я ставлю, менял модельки, переделал всё, но проблема остаётся. Думаю, вы сможете подсказать, как её решить.
      Include - m_custom_sync 1.0.0
      CreateVehicleVEx(npoType, npoId, modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay = 180, addsiren = 0, tc_veh = 0) {     new vehicle, custom_id = -1;     if(!(400 <= modelid <= 20000))     {         custom_id = GetSlotVehicleModelSync(modelid);         if(custom_id == -1) return print("daf top");         modelid = customVehModels[custom_id][ModelID];     } #include <m_custom-sync> #define M_CUSTOM_CustomForPlayers 1 #define M_CUSTOM_CustomForActors 1 #define M_CUSTOM_CustomForVehicles 1 public OnGameModeInit() {     AddVehicleSyncModel(560, 12500); // беха     AddVehicleSyncModel(560, 12600); // порш     AddVehicleSyncModel(579, 12700); // хамер     AddVehicleSyncModel(560, 19929); // чирик