Eims
Компетентный
DS_Markers.inc
- Описание:
Инклюд, расширяющий возможности настройки маркеров игроков, добавляющий такие возможности, как:
- Изменение радиуса отображения маркеров* прямо в игре (не требует рестарта)
- Изменение радиуса для всех игроков (онлайн/оффлайн)
- Изменение радиуса только для игроков, находящихся на сервере
- Изменение радиуса только игрокам, которые ещё не зашли на сервер
- Изменение радиуса для конкретного игрока
[SUB]*Маркеры игроков - это квадратные метки на карте,
которые указывают местоположение того или иного игрока остальным[/SUB]
- Первый игрок, радиус отрисовки маркера которого установлен на 10 метров
Радиус отображения маркера у игроков:
Игрок №1 [SUB](от лица которого сделан скрин)[/SUB] = 10 метров
Игрок №2 = 50 метров
Первый игрок находится в радиусе 50 метров от второго и метка второго игрока отображается для первого
[HR][/HR]
[HR][/HR][HR][/HR][HR][/HR]
- Второй игрок, радиус отрисовки маркера которого установлен на 50 метров
Для второго же игрока первы игрок скрыт с радара, так как расстояние между ними больше 10 метров (именно стольки равен радиус отрисовки маркера первого игрока)
[HR][/HR]
[HR][/HR][HR][/HR][HR][/HR]
- Так выглядит основное меню настройки маркеров
Вызывается оно функцией
[HR][/HR]PHP:ShowDialogPlayerMarkerOptions(playerid);
[HR][/HR][HR][/HR][HR][/HR]
- Выбираем пункт "Индивидуальный радиус" и видим следующее окно со списком всех игроков [SUP](до 30 игроков в одном окне)[/SUP]
[HR][/HR]
[HR][/HR][HR][/HR][HR][/HR]
- Выбираем нужного игрока (DeimoS) и указываем ему новый радиус
[HR][/HR]
[HR][/HR][HR][/HR][HR][/HR]
- Чуть сдвигаемся в сторону, дабы система обновила данные, и видим, что первый игрок теперь отображается для второго
[HR][/HR]
[HR][/HR][HR][/HR][HR][/HR]
- Подключение:
Подключение выглядит следующим образом:
PHP:#include <ds_markers>
В инклюде имеется 8 диалоговых окон, которым требуется задать уникальный ID.
Есть несколько вариантов настройки ID:- Напрямую указать каждому диалогу желаемый 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> - Использовать макрос, который автоматически присвоит диалогам самые последние, из возможных, ID [SUB](32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759)[/SUB]
Внимание: Данный способ подойдёт только тем, у кого указанные выше ID свободныPHP:#define AUTOMATIC_MARKER_DIALOG_ID 1 #include <ds_markers>
Если не произвести ни одно из действий или забыть указать 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
- Напрямую указать каждому диалогу желаемый ID:
- Функционал:
Описание всех функций продублировано в самом инклюде.
Примечание: Здесь просто перечислены функции, которые идут вместе с инклюдом. Основная система (дальность отображения маркеров) не требует дополнительной настройки, кроме того, что написано в пункте "Подключение"
[HR][/HR]
- 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]
- SetMarkerDrawDistanceForPlayer(playerid, Float: radius)
- С помощью данной функции можно обновить радиус отображения маркера для конкретного игрока (обновляет лишь значение переменной).
Для того, чтоб изменения вступили в силу для игроков, находящихся онлайн, после использования требуется вызвать UpdateMarkerRadiusForPlayer или UpdateMarkerRadiusForAll
Параметры:
Пример использования:PHP:- playerid // ID игрока (ячейки массива), которому будет обновлён радиус - Float: radius // Новое значение радиуса в виде вещественного числа
[HR][/HR]PHP:public OnGameModeInit() { SetMarkerDrawDistanceForPlayer(8, 150.0);// У игрока с ID 8, при входе на сервер, радиус отображения маркера будет равен 150 метрам. return 1; }
- SetMarkerDrawDistanceForAll(Float: radius, bool:mode = false)
- Аналог предыдущей функции, только действие распространяется на всех игроков. Имеет два режима работы.
Параметры:
Пример использования:PHP:- Float: radius - Новое значение для радиуса, который будет установлен всем игрокам - bool:mode - Режим работы функции /*Режимы работы: false - работа функции распространяется на всех игроков (даже оффлайн) - включена по умолчанию true - работа функции распространяется только на игроков, находящихся на сервере*/
[HR][/HR]PHP:public OnGameModeInit() { SetMarkerDrawDistanceForAll(20.0);// Теперь у всех игроков, заходящих на сервер, радиус отображения маркера будет 20 метров. return 1; }
- UpdateMarkerRadiusForPlayer(playerid)
- Функция для обновления динамической зоны конкретного игрока
Функция нужна для того, чтоб изменения радиуса, после использования SetMarkerDrawDistanceForPlayer/SetMarkerDrawDistanceForAll вступили в силу
Параметры:
Пример использования:PHP:- playerid // Игрок, динамическая зона которого будет обновлена
[HR][/HR]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; }
- UpdateMarkerRadiusForAll()
- Аналог предыдущей функции, распространяющийся на всех игроков, находящихся на сервере
Параметры:
Пример использования:PHP:---
[HR][/HR]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; }
- TogglePlayerOnMapForPlayer(playerid, showplayerid, bool:visible)
- Функция для включения/отключения видимости на радаре одного игрока для другого (основная функция, на которой всё построено)
Параметры:
Пример использования:PHP:- playerid // игрок, которому скрываем/показываем игрока - showplayerid // игрок, которого скрываем/показываем - bool:visible // режим (true - показать/false - скрыть)
- Данный инклюд
[HR][/HR]
- 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; }
- ShowDialogPlayerMarkerOptions(playerid)
- Примечание:
Для правильной работы системы требуется удостовериться, что в вашем скрипте нет функций:
- ShowPlayerMarkers
- LimitPlayerMarkerRadius
Если они есть, их следует удалить.
Автор инклюда - DeimoS
Ссылка на скачивание -
Ссылка на Pastebin -
Ссылка на скачивание -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Ссылка на Pastebin -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
