Доступ к архиву

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

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

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

Без имени.inc

Статус
В этой теме нельзя размещать новые ответы.

Eims

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

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



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


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

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

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

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

А вот пример команды для вызова основного диалога:
PHP:
cmd:radius(playerid, params[]) 
{
    ShowDialogPlayerMarkerOptions(playerid);
    return 1;
}
Инклюд проверялся лишь на локальном сервер, с использованием песочницы и наличием всего двух игроков. Тот функционал, что уже реализован, работает без багов (по крайней мере, я их не нашёл). Так что если кто-то рискнёт протестировать - буду рад.

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

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


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

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