• 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 пользователей онлайн

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

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

    • bogdan295@gmai
      От bogdan295@gmai
      Здраствуйте, я создавал новую организации когда дело дашло до пикапов они не создаются 
      new lssd1; new lssd2;  else if(pickupid == lssd2)// Вход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,1567.5510,-1657.9956,5.3859);         SetPlayerFacingAngle(playerid, 500);         return true;     } else if(pickupid == lssd1)// Вsход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,630.0542,-572.0032,16.3359);         SetPlayerFacingAngle(playerid, 500);         return true;     }     lssd2 = CreatePickupAC(1318,1,626.9653,-571.8394,17.9207, 147); // вход лссд     lssd1 = CreatePickupAC(1318,1,1567.4720,-1660.6494,5.3859, 147); // выход лссд Что я сделал не так?
    • tgfoscar
      От tgfoscar
      Требуется свободное владение C++. Античит, новый способ добавления техники на сервер, совместимость с CEF и возможность добавления полезных функций. За дополнительной информацией обращайтесь к wayne_gm в Discord.
    • enotplaysupptor
      От enotplaysupptor
      Основа для мода Samp для начинающих
      Скачать файл ╔══════════════════════════════════════════════════╗
      ║               Test-RolePlay v0.1           ║
      ║       Современная основа для SA-MP серверов      ║
      ╚══════════════════════════════════════════════════╝
      ✦ О ПРОЕКТЕ:
         Добро пожаловать в Test-RolePlay - мод с нуля, 
         созданный как универсальная основа для SA-MP проектов.
         Проект был создан для тех кто не знает с чего начать и начинающих разработчиков
         Версия: T-RP v0.1 [Актуальная]
      ✦ ОСНОВНЫЕ ПЛАГИНЫ:
         ▸ CrashDetect    - отладка ошибок
         ▸ MySQL R41+     - работа с базой данных
         ▸ Pawn.CMD       - система команд
         ▸ Pawn.Regex     - регулярные выражения
         ▸ SKY            - улучшенные игровые функции
         ▸ sscanf2        - парсинг параметров
         ▸ Streamer       - динамические объекты
         ▸ TOTP           - двухфакторная аутентификация
      ✦ КЛЮЧЕВЫЕ СИСТЕМЫ:
         ┌──────────────────────────────────────────────┐
         │ 🔹 Умная регистрация/авторизация:            │
         │    - Хеширование паролей                     │
         │    - Привязка Email                          │
         │    - Выбор пола и расы персонажа             │
         ├──────────────────────────────────────────────┤
         │ 🔹 Командная система:                        │
         │    - Полный набор РП-команд                  │
         │    - Расширенные админ-команды               │
         ├──────────────────────────────────────────────┤
         │ 🔹 Игровое меню:                             │
         │    - Персональная статистика                 │
         │    - Настройки аккаунта                      │
         │    - Система жалоб и вопросов                │
         ├──────────────────────────────────────────────┤
         │ 🔹 Дополнительные системы:                   │
         │    - АФК-режим с автоматическим детектом      │
         │    - Интегрированный античит (Nex-AC)        │
         └──────────────────────────────────────────────┘
      ✦ ПЛАНЫ РАЗРАБОТКИ:
         » Добавление новых игровых систем
         » Оптимизация существующего кода
         » Расширение возможностей для администраторов
         » Улучшение пользовательского интерфейса
      Если увижу что вы хотите что бы я продолжил разработку данного мода пишите или можете проявиться большую активность










      Добавил enotplaysupptor Добавлено 09.07.2025 Категория Моды Автор Я  
    • Nekit2019
      От Nekit2019
      Добрый день, имеется сервер в CRMP 0.3е (старичок, знаю, решил поностальгировать) . меняю погоду через ркон, но она скипается через пару минут на нулевую! Не пойму от чего, скриптом отдельно на погоду нет. Пожскажите, может в gamemod0 или где еще и куда прописать можно погоду? либо чтоб менялась сама, либо статическую. Вставлял из инета код в гейммод на рандомную погоду через пол часа с уведомлениями - результат такой же, меняется на 1-20 ,но сама сбрасывается на 0 через минуту.