Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 1 из 1

Тема: ds_markers

  1. #1
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±

    ds_markers

    DS_Markers.inc


    • Описание:

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

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

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


       Несколько скриншотов, демонстрирующих работу индивидуальной настройки радиуса

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



          Открыть/закрыть






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


          Открыть/закрыть






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


          Открыть/закрыть






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


          Открыть/закрыть






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


          Открыть/закрыть






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


          Открыть/закрыть









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

      Подключение выглядит следующим образом:
      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 (32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759)
        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 
      Не советую их изменять.



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

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




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

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





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

        Параметры:
        PHP код:
        playerid // ID игрока (ячейки массива), которому будет обновлён радиус
        Floatradius // Новое значение радиуса в виде вещественного числа 
        Пример использования:
        PHP код:
        public OnGameModeInit()
        {
            
        SetMarkerDrawDistanceForPlayer(8150.0);// У игрока с ID 8, при входе на сервер, радиус отображения маркера будет равен 150 метрам.
            
        return 1;



      3. SetMarkerDrawDistanceForAll(Float: radius, bool:mode = false)
        - Аналог предыдущей функции, только действие распространяется на всех игроков. Имеет два режима работы.

        Параметры:
        PHP код:
        Floatradius Новое значение для радиусакоторый будет установлен всем игрокам
        bool:mode Режим работы функции 

        /*Режимы работы:
        false - работа функции распространяется на всех игроков (даже оффлайн) - включена по умолчанию
        true - работа функции распространяется только на игроков, находящихся на сервере*/ 
        Пример использования:
        PHP код:
        public OnGameModeInit()
        {
            
        SetMarkerDrawDistanceForAll(20.0);// Теперь у всех игроков, заходящих на сервер, радиус отображения маркера будет 20 метров.
            
        return 1;



      4. UpdateMarkerRadiusForPlayer(playerid)
        - Функция для обновления динамической зоны конкретного игрока
        Функция нужна для того, чтоб изменения радиуса, после использования SetMarkerDrawDistanceForPlayer/SetMarkerDrawDistanceForAll вступили в силу

        Параметры:
        PHP код:
        playerid // Игрок, динамическая зона которого будет обновлена 
        Пример использования:
        PHP код:
        cmd:setmarkerradius(playeridparams[]) 
        {
            if(!
        IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
            new 
        giveplayerid,
                
        Floatradius;
            if(!
        sscanf(params"uf"giveplayeridradius) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}/cmd:setmarkerradius [playerid] [radius]");
            if(
        giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}Данный игрок оффлайн");
            if(
        floatcmp(radiusMIN_PLAYER_MARKER_RADIUS) == -|| floatcmp(radiusMAX_PLAYER_MARKER_RADIUS) == 1)return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}Минимальное значение радиуса - 0.1м. Максимальное - 8516.0м");
            
        SetMarkerDrawDistanceForPlayer(giveplayeridradius);
            
        UpdateMarkerRadiusForPlayer(giveplayerid);
            new 
        string[18+6+1];
            
        format(stringsizeof(string), "Новое значение - %0.1fм"radius);
            
        SendClientMessage(playerid, -1string);
            return 
        1;



      5. UpdateMarkerRadiusForAll()
        - Аналог предыдущей функции, распространяющийся на всех игроков, находящихся на сервере

        Параметры:
        PHP код:
        --- 
        Пример использования:
        PHP код:
        cmd:setmarkerradiusforall(playeridparams[]) 
        {
            if(!
        IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
            new 
        giveplayerid,
                
        Floatradius;
            if(!
        isnull(params) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}/cmd:setmarkerradiusforall [radius]");
            new 
        Floatradiusfloatstr(params);
            if(
        floatcmp(radiusMIN_PLAYER_MARKER_RADIUS) == -|| floatcmp(radiusMAX_PLAYER_MARKER_RADIUS) == 1) return SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}Минимальное значение радиуса - 0.1м. Максимальное - 8516.0м");
            
        SetMarkerDrawDistanceForAll(radiustrue);// Изменим радиус только тем, кто онлайн
            
        UpdateMarkerRadiusForAll();
            new 
        string[18+6+1];
            
        format(stringsizeof(string), "Новое значение - %0.1fм"radius);
            
        SendClientMessage(playerid, -1string);
            return 
        1;



      6. TogglePlayerOnMapForPlayer(playerid, showplayerid, bool:visible)
        - Функция для включения/отключения видимости на радаре одного игрока для другого (основная функция, на которой всё построено)

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



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

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









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




    Автор инклюда - DeimoS
    Ссылка на скачивание - Dropbox
    Ссылка на Pastebin - Клик
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  2. 5 пользователя(ей) сказали cпасибо:
    iWors (20.07.2016) Mist (20.07.2016) Nurick (16.07.2016) Osetin (17.07.2016) Sp1ke (16.07.2016)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •