Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Include ds_markers

Eims

Компетентный
DS_Markers.inc​

  • Описание:

    Инклюд, расширяющий возможности настройки маркеров игроков, добавляющий такие возможности, как:

    • Изменение радиуса отображения маркеров* прямо в игре (не требует рестарта)
    • Изменение радиуса для всех игроков (онлайн/оффлайн)
    • Изменение радиуса только для игроков, находящихся на сервере
    • Изменение радиуса только игрокам, которые ещё не зашли на сервер
    • Изменение радиуса для конкретного игрока
    ​

    [SUB]*Маркеры игроков - это квадратные метки на карте,
    которые указывают местоположение того или иного игрока остальным[/SUB]​


    1. Первый игрок, радиус отрисовки маркера которого установлен на 10 метров
      Радиус отображения маркера у игроков:
      Игрок №1 [SUB](от лица которого сделан скрин)[/SUB] = 10 метров
      Игрок №2 = 50 метров
      Первый игрок находится в радиусе 50 метров от второго и метка второго игрока отображается для первого

      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]

    2. Второй игрок, радиус отрисовки маркера которого установлен на 50 метров
      Для второго же игрока первы игрок скрыт с радара, так как расстояние между ними больше 10 метров (именно стольки равен радиус отрисовки маркера первого игрока)
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]

    3. Так выглядит основное меню настройки маркеров
      Вызывается оно функцией
      PHP:
      ShowDialogPlayerMarkerOptions(playerid);
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]

    4. Выбираем пункт "Индивидуальный радиус" и видим следующее окно со списком всех игроков [SUP](до 30 игроков в одном окне)[/SUP]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]

    5. Выбираем нужного игрока (DeimoS) и указываем ему новый радиус
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]

    6. Чуть сдвигаемся в сторону, дабы система обновила данные, и видим, что первый игрок теперь отображается для второго
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]
      [HR][/HR]



  • Подключение:

    Подключение выглядит следующим образом:
    PHP:
    #include <ds_markers>

    В инклюде имеется 8 диалоговых окон, которым требуется задать уникальный ID.

    Есть несколько вариантов настройки ID:
    1. Напрямую указать каждому диалогу желаемый ID:

      PHP:
      // Сначала ID диалогов
      #define	dPlMarkMenu_Radius					666// 666 заменить на свободный ID
      #define	dPlMarkMenu_Radius_All				667// Так же сделать дальше
      #define	dPlMarkMenu_Radius_Online			 668
      #define	dPlMarkMenu_Radius_Offline			669
      #define	dPlMarkMenu_Radius_Players			670
      #define	dPlMarkMenu_Radius_Players_ID		 671
      #define	dPlMarkMenu_Radius_Players_Rad		672
      #define	dPlMarkMenu_PlayerRadius_ID		   673
      
      // После - подключение инклюда
      #include <ds_markers>
    2. Использовать макрос, который автоматически присвоит диалогам самые последние, из возможных, ID [SUB](32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759)[/SUB]
      PHP:
      #define 	AUTOMATIC_MARKER_DIALOG_ID 		1
      #include <ds_markers>
      Внимание: Данный способ подойдёт только тем, у кого указанные выше ID свободны

    Если не произвести ни одно из действий или забыть указать ID для одного из диалогов, компилятор сообщит об этом следующей ошибкой:
    PHP:
    For the system to work properly you must specify the ID of the dialogue "имя_макроса_соответствующего_ID_диалога"
    Для исправления нужно, собственно, указать ID для пропущенных диалогов​


    Лимиты для радиуса хранятся в двух макросах:
    PHP:
    #define MIN_PLAYER_MARKER_RADIUS 1.0
    #define MAX_PLAYER_MARKER_RADIUS 8516.0
    Не советую их изменять.



  • Функционал:
    Описание всех функций продублировано в самом инклюде.​

    Примечание: Здесь просто перечислены функции, которые идут вместе с инклюдом. Основная система (дальность отображения маркеров) не требует дополнительной настройки, кроме того, что написано в пункте "Подключение"
    [HR][/HR]

    1. ShowDialogPlayerMarkerOptions(playerid)
      - Данная функция отобразит настроек для маркеров.​

      Параметры:
      PHP:
      - playerid // ID игрока, которому будет показан диалог
      PHP:
      cmd:radius(playerid, params[]) 
      {
      	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
          ShowDialogPlayerMarkerOptions(playerid);
          return 1;
      }

      [HR][/HR]
    2. SetMarkerDrawDistanceForPlayer(playerid, Float: radius)
      - С помощью данной функции можно обновить радиус отображения маркера для конкретного игрока (обновляет лишь значение переменной).
      Для того, чтоб изменения вступили в силу для игроков, находящихся онлайн, после использования требуется вызвать UpdateMarkerRadiusForPlayer или UpdateMarkerRadiusForAll​

      Параметры:
      PHP:
      - playerid // ID игрока (ячейки массива), которому будет обновлён радиус
      - Float: radius // Новое значение радиуса в виде вещественного числа
      Пример использования:
      PHP:
      public OnGameModeInit()
      {
          SetMarkerDrawDistanceForPlayer(8, 150.0);// У игрока с ID 8, при входе на сервер, радиус отображения маркера будет равен 150 метрам.
          return 1;
      }
      [HR][/HR]
    3. SetMarkerDrawDistanceForAll(Float: radius, bool:mode = false)
      - Аналог предыдущей функции, только действие распространяется на всех игроков. Имеет два режима работы.​

      Параметры:
      PHP:
      - Float: radius - Новое значение для радиуса, который будет установлен всем игрокам
      - bool:mode - Режим работы функции 
      
      /*Режимы работы:
      false - работа функции распространяется на всех игроков (даже оффлайн) - включена по умолчанию
      true - работа функции распространяется только на игроков, находящихся на сервере*/
      Пример использования:
      PHP:
      public OnGameModeInit()
      {
          SetMarkerDrawDistanceForAll(20.0);// Теперь у всех игроков, заходящих на сервер, радиус отображения маркера будет 20 метров.
          return 1;
      }
      [HR][/HR]
    4. UpdateMarkerRadiusForPlayer(playerid)
      - Функция для обновления динамической зоны конкретного игрока
      Функция нужна для того, чтоб изменения радиуса, после использования SetMarkerDrawDistanceForPlayer/SetMarkerDrawDistanceForAll вступили в силу​

      Параметры:
      PHP:
      - playerid // Игрок, динамическая зона которого будет обновлена
      Пример использования:
      PHP:
      cmd:setmarkerradius(playerid, params[]) 
      {
      	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
      	new giveplayerid,
      		Float: radius;
      	if(!sscanf(params, "uf", giveplayerid, radius) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}/cmd:setmarkerradius [playerid] [radius]");
      	if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Данный игрок оффлайн");
      	if(floatcmp(radius, MIN_PLAYER_MARKER_RADIUS) == -1 || floatcmp(radius, MAX_PLAYER_MARKER_RADIUS) == 1)return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Минимальное значение радиуса - 0.1м. Максимальное - 8516.0м");
      	SetMarkerDrawDistanceForPlayer(giveplayerid, radius);
      	UpdateMarkerRadiusForPlayer(giveplayerid);
      	new string[18+6+1];
      	format(string, sizeof(string), "Новое значение - %0.1fм", radius);
      	SendClientMessage(playerid, -1, string);
      	return 1;
      }
      [HR][/HR]
    5. UpdateMarkerRadiusForAll()
      - Аналог предыдущей функции, распространяющийся на всех игроков, находящихся на сервере​

      Параметры:
      PHP:
      ---
      Пример использования:
      PHP:
      cmd:setmarkerradiusforall(playerid, params[]) 
      {
      	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
      	new giveplayerid,
      		Float: radius;
      	if(!isnull(params) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}/cmd:setmarkerradiusforall [radius]");
      	new Float: radius= floatstr(params);
      	if(floatcmp(radius, MIN_PLAYER_MARKER_RADIUS) == -1 || floatcmp(radius, MAX_PLAYER_MARKER_RADIUS) == 1) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Минимальное значение радиуса - 0.1м. Максимальное - 8516.0м");
      	SetMarkerDrawDistanceForAll(radius, true);// Изменим радиус только тем, кто онлайн
      	UpdateMarkerRadiusForAll();
      	new string[18+6+1];
      	format(string, sizeof(string), "Новое значение - %0.1fм", radius);
      	SendClientMessage(playerid, -1, string);
      	return 1;
      }
      [HR][/HR]
    6. TogglePlayerOnMapForPlayer(playerid, showplayerid, bool:visible)
      - Функция для включения/отключения видимости на радаре одного игрока для другого (основная функция, на которой всё построено)​

      Параметры:
      PHP:
      - playerid // игрок, которому скрываем/показываем игрока
      - showplayerid // игрок, которого скрываем/показываем
      - bool:visible // режим (true - показать/false - скрыть)
      Пример использования:
      - Данный инклюд :D

      [HR][/HR]
    7. TogglePlayerOnMap(playerid, bool:visible)
      - Аналог предыдущей функции, только игрок становится невидимым для всего сервера​

      Параметры:
      PHP:
      playerid - игрок, которого скрываем/показываем игрока
      - bool:visible // режим (true - показать/false - скрыть)
      Пример использования:
      PHP:
      cmd:inv(playerid, params[]) 
      {
          if((GetPlayerColor(playerid) & 0xFF) == 0x00)
          {
              SendClientMessage(playerid, -1, "Вы снова видимы на радаре");
              TogglePlayerOnMap(playerid, true);
          }
          else
          {
              SendClientMessage(playerid, -1, "Вы теперь невидимы на радаре");
              TogglePlayerOnMap(playerid, false);
          }
          return 1;
      }

    [HR][/HR]



  • Примечание:
    Для правильной работы системы требуется удостовериться, что в вашем скрипте нет функций:
    - ShowPlayerMarkers
    - LimitPlayerMarkerRadius
    Если они есть, их следует удалить.



Автор инклюда - DeimoS
Ссылка на скачивание -
Ссылка на Pastebin -
​
 
Сверху Снизу