• 0
zloyjoni232

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

Вопросы

Привет, хочу сделать /gps можете подсказать как и что?

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


Ссылка на сообщение

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

  • 0

@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

Спасибо за помощь :)

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


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

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

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

    • Доналдо Фарекелка
      От Доналдо Фарекелка


      Скачать файл Arizona RolePlay || Ser
      Приветствую, этот мод я нашёл на просторах интернета. 
      Скачал мод у автора:  Developer Stravinskiy
      Доработал мод: Donaldo_Farekelka
       
      Предупреждаю! Мод сырой, багов стало меньше, но они есть.
      Мод: Баня, Подвал, В некоторых местах маппинг, система коронавируса, 8 лвл админок
       
      Информация:
      1) Dc_Cmd
      2) Mysql, mode, language - Всё настраивается теперь в pawno ( UPDATE: 1.1.0 )
      3) Административные права в данный момент можно выдать только через MYSQL ( BD ).
       
      То что я сделал ( Всё что я делаю сейчас, смотрите в изменениях ):
       
      Добавил Доналдо Фарекелка Добавлено 13.04.2023 Категория Моды Автор shenol (vk.com/donaldo_farekelka)  
    • SheikhMAN
      От SheikhMAN
      Цель: Хочу сделать систему авторизации, нужно сделать чтобы шла проверка через mysql игрока т.е какой пароль у данного игрока так-же узнавался пароль, если данный пароль не совпадает тогда пишет что "Пароль не верен!"
      Что нужно сделать: Нашёл данный скрипт, помогите решить проблему (прикрепил файлик)
          new db_password[sizeof(player_info[playerid][S_PASSWORD])];     cache_get_field_content(0, "password", db_password, dbHandle);     new resultat = !strcmp(inputtext, db_password);     if(resultat) SCM(playerid, COLOR_WHITE, "Пароль верный!"), SpawnPlayer(playerid);     else SCM(playerid, COLOR_RED, "Не верный!"), ShowLogin(playerid);  Проблема находится в  -
      new db_password[sizeof(player_info[playerid][S_PASSWORD])]; Сама ошибка - 
      error 001: expected token: "]", but found "-identifier-" warning 215: expression has no effect error 001: expected token: ";", but found "]" error 029: invalid expression, assumed zero  fatal error 107: too many error messages on one line Коллеги прошу помощи, мне кажется здесь не столь так тяжело, возможно я устал мне нужен отдых, но очень хочу дописать скрипт.
    • ponpnoiich
      От ponpnoiich
      Всем привет.  У меня появилась проблема с unix time, а именно, у меня в игровом моде есть отоброжение сколько минут я сыграл за час. И дело в том, что за 1 реальную минуту времени у меня засчитывается около 3-4 минут в игре. Я не знаю как это исправлять, уже много искал и в моде, и в интернете. 
      Если поможете буду очень рад!