• 0

[закрыто] Как сделать /gps в павно не сильно понимаю но хочется научится

Вопросы

2 ответа на этот вопрос

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

@zloyjoni232, для начала создайте массив, в котором перечислите наименование объектов и их координаты в глобальной области видимости, то бишь в начале вашего игрового мода.

 

Здесь enum - оператор перечисления. В данном случае мы создаем перечисление под названием e_DEST_POINTS, в котором перечисляем, из каких полей будет состоять каждая строка в массиве координат пунктов назначений. Достаточно хорошо этот оператор описан здесь.

 

Далее мы создаем двумерный массив destinationPoints. Размер массива явно не задан (записаны пустые квадратные скобки: []) – фактически мы заставляем компилятор выполнить эти расчеты. А вот то, какие данные будут храниться в этом массиве, указано во вторых квадратных скобках – [e_DEST_POINTS] – то есть мы ссылаемся на ранее объявленное перечисление и явно говорим: массив будет представлять собой набор строк, состоящих из 64-символьного имени, а также трех вещественных чисел-координат.

 

Оператор static указывает компилятору, что этот массив должен быть статическим, а значит требуется его размещение в сегменте данных. Ну, а const лишь запрещает модификацию этого массива в процессе выполнения программы.

 

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

enum e_DEST_POINTS {
    name[64],   // наименование пункта назначения
    Float:x,    // координата позиции X пункта
    Float:y,    // координата позиции Y пункта
    Float:z     // координата позиции Z пунктв
};

static const destinationPoints[][e_DEST_POINTS] = {
    {"Пункт назначения1"0.01.12.2},
    {"Пункт назначения2"3.34.45.5},
    // и так далее по мере необходимости
};

const DEST_POINTS_COUNT = sizeof(destinationPoints);

Для того, чтобы показать игру диалог с пунктами назначений, можете использовать следующую функцию:

stock showDestPoints(playerid) {
    new string[1024];
    
    for (new i = 0; i < DEST_POINTS_COUNT; i++) {
        strcat(string, destinationPoints[i][dpName]);
        strcat(string, "\n");
    }
    
    // ниже 1111 поменяйте на свой ID диалога
    ShowPlayerDialog(playerid, 1111, DIALOG_STYLE_LIST, "GPS", string, "Выбрать""Закрыть");
}

Касаемо функций в языках программирования в целом есть множество информации в Интернете. Например, вот неплохая статья. Касаемо алгоритма работы данной функции – он предельно прост: в цикле перебираем все элементы нашего массива пунктов назначений, скрепляя названия пунктов назначения с размещением между ними символа переноса строки – '\n'. В результате получаем размещенные в столбик наименования пунктов назначения, которые вы и увидите на сервере в диалоге.

 

Ну, и остается лишь реализовать действие, которое будет происходить при выборе пункта в диалоге. Выполнение любого действия в диалоговых окнах приводит к вызову функции OnDialogResponse. Внутри нее остается лишь проверить, точно ли ответ пришел от нашего диалога (с идентификатором 1111) и точно ли нажата кнопка "Выбрать".

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if (dialogid == 1111) { // 1111 при необходимости поменяйте на свой ID диалога
        if (!response) {
            return true;
        }
        
        SetPlayerCheckpoint(playerid, destinationPoints[listitem][dpX], destinationPoints[listitem][dpY], destinationPoints[listitem][dpZ]);
        SendClientMessage(playerid, -1"Маркер установлен на выбранный объект");
        return true;
    }
    
    return false;
}

Установка маркера осуществляется функцией SetPlayerCheckpoint на те координаты, что заданы для выбранного пункта назначения в массиве пунктов назначения.

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

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

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

    • vexlinee
      От vexlinee
      Всем здравствуйте, сидел я на майнкрафт читиках и поднадоело, теперь хочу сделать студию либо свой крмп проектик
      Так вот вопросы:
      1. Какие программы лучше всего использовать для лаунчеров? В большенстве видел Android studio
      2. Как запустить сам мод, можно ли это сделать локально и быстро, или стоит переносить на хост 
      3. Про какой кеш говорят типы под лаунчерами 
      4. Как сделать установку сборки через лаунчер по кнопке играть 
    • crearot
      От crearot
      Мы ищем талантливого 3D-моделлера в команду.  Гибкий график, опытный коллектив.
      Что мы предлагаем:
      — Конкурентоспособную и стабильную заработную плату;
      — Гибкий график и возможность работать удаленно;
      — Работа в окружении специалистов, готовых способствовать развитию ваших навыков;
      — Перспективы карьерного и профессионального роста.
      От вас требуется:
      — Опыт владением 3ds Max и Blender для моделирования и текстурирования;
      — Работа по референсам;
      — Опыт создания интерьеров и экстерьеров;
      — Наличие портфолио.
      — Работа с текстурами (архивы (сборка, пересборка), добавление текстур, создание архивов под разные видеоускорители(PVR, DXT, ETC))
      — Работа с архивами моделей (.img образы) для добавления моделей и пересборки
      — Моделирование карты, работа по т/з для создания ландшафта на карте и т.д


      Отправьте резюме: → https://forms.gle/Trn4vjMEi58EDybv6
    • Axel myself
      От Axel myself
       
      C:\Users\User\Desktop\Adamand Role Play Original\gamemodes\Adamand037.pwn(25676) : error 017: undefined symbol "Geo_GetCountry2"
      C:\Users\User\Desktop\Adamand Role Play Original\gamemodes\Adamand037.pwn(81191) : error 017: undefined symbol "Geo_GetCountry2"
      Pawn compiler 3.2.3664              Copyright (c) 1997-2017, ITB CompuPhase

      2 Errors.


      Помогите пожалуйста с проблемой, ничего нового не добавлял, сам 50/50 разбираюсь в павно) но посмотрев на глаз особо ничего ошибочного не попалось
      Буду благодарен.