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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для DeimoS
    Модератор?

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

    Без имени.inc

     Предисловие
    Четыре дня назад некий PawnoNoob задал один вопрос. Этот вопрос навёл меня на идею создания инклюда, часть кода которого я уже кидал в той теме. Инклюд я этот написал (хоть и реализовал не всё, что планирую), но на его название воображения уже не хватило...


    Данный инклюд добавляет возможность контролировать дистанцию отображения маркеров игроков на карте прямо во время игры.
    Можно сказать, что инклюд расширяет функционал стандартной функции LimitPlayerMarkerRadius, добавляя такие возможности, как:
    1. Собственно, менять радиус отображения прямо в игре (не уверен, но стандартная функция этого, вроде, не умеет. Только в OnGameModeInit)
    2. Менять радиус только игрокам онлайн (всем, кто зайдёт после, радиус будет установлен тот, который указан в отдельной опции)
    3. Менять радиус только игрокам оффлайн (практически то же самое, только им наоборот будет установлен новый радиус, а онлайн игроки останутся со старым)
    4. (Не реализовано) Менять радиус конкретного игрока (можно сделать так, чтоб определённый игрок отображался на большем/меньшем расстоянии, нежели остальные)
    5. (Не реализовано) Отключать/включать маркеры определённых игроков (что-то типа режима невидимости на карте)

    И, возможно, добавится что-то ещё.



    Почему я создал тему в данном разделе, а не в разделе с инклюдами?


    Во-первых, я не могу придумать адекватное название этому детищу.

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

    У меня уже есть некоторые наработки, но они являются нереальным костылём (как по мне) и не совсем работают. Основная трудность в том, что хочется сделать совместимость с несколькими типами циклов (foreach/for с GetPlayerPollSize/for) и я пытался сделать универсальный алгоритм. Но чем дальше я "уходил", пытаясь обойтись "малой кровью" в плане мозговой деятельности, тем больше понимал, что алгоритм выходит слишком кривым. Эти самые наработки я оставил в инклюде (в самом конце) и если кто не против помочь, можете глянуть и подкинуть хотя бы идею для реализации задуманного.

    Сам код находится тут - http://pastebin.com/vdixRWAc
    Код не обкатанный, так что на названия особо не смотрите (хотя любым подсказкам буду рад).

    А вот пример команды для вызова основного диалога:
    PHP код:
    cmd:radius(playeridparams[]) 
    {
        
    ShowDialogPlayerMarkerOptions(playerid);
        return 
    1;

    Инклюд проверялся лишь на локальном сервер, с использованием песочницы и наличием всего двух игроков. Тот функционал, что уже реализован, работает без багов (по крайней мере, я их не нашёл). Так что если кто-то рискнёт протестировать - буду рад.

    И да, подкиньте идей по поводу названия сего инклюда. Ну и по поводу дополнительного функционала.

    Спасибо за внимание


    UPDATE: Предсказывая вопросы по поводу макросов:
    Значение MAX_PLAYER_MARKER_RADIUS - это расстояние между двумя противоположными углами карты. Думаю, такого расстояния хватит на все нужды.

    ID диалогов ведут свой отсчёт с самого последнего. Это, собственно, с тестирования осталось. В релизе будут только проверки на резервированный ID и присвоение макросу "-1" заменю на ошибку "#error".
    Последний раз редактировалось DeimoS; 14.07.2016 в 22:40.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  2. #2
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    188
    Репутация:
    20 ±
    MarkerOptions+.inc? (MarkOpt.inc)

  3. #3
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    204
    Репутация:
    38 ±
    То есть функционал как у Morphinc.inc (GF)?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    То есть функционал как у Morphinc.inc (GF)?
    И да, и нет.
    В Morphinc.inc можно лишь установить определённый радиус и менять его для всех сразу.
    У меня же уже сейчас функционал гораздо больше: можно править радиус всем или тем, кто онлайн/оффлайн. Чуть позже реализую редактирование радиуса для конкретного игрока (его и сейчас можно реализовать с помощью команды, используя функцию SetPlayerTagDrawDistance, но я хочу всё в один диалог запихать).
    Да и реализация там не самая лучшая.
    В общем, общего между ними гораздо меньше, чем кажется. Хотя, возможно, стоило использовать ShowPlayerNameTagForPlayer, вместо SetPlayerMarkerForPlayer. Сегодня проведу замеры скорости
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Допилил в диалог возможность править радиус конкретным игрокам, но проверял лишь на маленьком онлайне (2 человека).
    Чуть позже мне знакомый скинет нормальных ботов и проверю на большом онлайне, ну а пока, если у кого есть под рукой нормальные боты и если вам не трудно, проверьте тоже (проверить нужно сам список игроков на правильность сортировки и правильность нахождения нужного игрока).

    Новую версию можно найти по той же ссылке - http://pastebin.com/vdixRWAc

    P.S. Пункт "Настройка отображения отметок" в основном диалоге станет доступен после того, как проверю индивидуальные радиусы. Ну и после этого уже релиз
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    И да, и нет.
    В Morphinc.inc можно лишь установить определённый радиус и менять его для всех сразу.
    У меня же уже сейчас функционал гораздо больше: можно править радиус всем или тем, кто онлайн/оффлайн. Чуть позже реализую редактирование радиуса для конкретного игрока (его и сейчас можно реализовать с помощью команды, используя функцию SetPlayerTagDrawDistance, но я хочу всё в один диалог запихать).
    Да и реализация там не самая лучшая.
    В общем, общего между ними гораздо меньше, чем кажется. Хотя, возможно, стоило использовать ShowPlayerNameTagForPlayer, вместо SetPlayerMarkerForPlayer. Сегодня проведу замеры скорости
    UPD: Что-то затупил сначала... morphinc вообще не о том, если я нужный инк нашёл. Он регулирует дальность отрисовки ников игроков, а мой инк направлен на дальность отрисовки маркеров на радаре.

    Протестировал с ботами, исправил недочёты. Допишу пару функций и выложу


    Close - http://pro-pawn.ru/showthread.php?14...5241#post75241
    Последний раз редактировалось DeimoS; 16.07.2016 в 21:41.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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