DeimoS
16.07.2016, 21:40
DS_Markers.inc
Описание:
Инклюд, расширяющий возможности настройки маркеров игроков, добавляющий такие возможности, как:
Изменение радиуса отображения маркеров* прямо в игре (не требует рестарта)
Изменение радиуса для всех игроков (онлайн/оффлайн)
Изменение радиуса только для игроков, находящихся на сервере
Изменение радиуса только игрокам, которые ещё не зашли на сервер
Изменение радиуса для конкретного игрока
*Маркеры игроков - это квадратные метки на карте,
которые указывают местоположение того или иного игрока остальным
Первый игрок, радиус отрисовки маркера которого установлен на 10 метров
Радиус отображения маркера у игроков:
Игрок №1 (от лица которого сделан скрин) = 10 метров
Игрок №2 = 50 метров
Первый игрок находится в радиусе 50 метров от второго и метка второго игрока отображается для первого
http://ihost.pro-pawn.ru/image.php?di=NJE1
Второй игрок, радиус отрисовки маркера которого установлен на 50 метров
Для второго же игрока первы игрок скрыт с радара, так как расстояние между ними больше 10 метров (именно стольки равен радиус отрисовки маркера первого игрока)
http://ihost.pro-pawn.ru/image.php?di=W258
Так выглядит основное меню настройки маркеров
Вызывается оно функцией
ShowDialogPlayerMarkerOptions(playerid);
http://ihost.pro-pawn.ru/image.php?di=RI4K
Выбираем пункт "Индивидуальный радиус" и видим следующее окно со списком всех игроков (до 30 игроков в одном окне)
http://ihost.pro-pawn.ru/image.php?di=Z86X
Выбираем нужного игрока (DeimoS) и указываем ему новый радиус
http://ihost.pro-pawn.ru/image.php?di=ZCH0
Чуть сдвигаемся в сторону, дабы система обновила данные, и видим, что первый игрок теперь отображается для второго
http://ihost.pro-pawn.ru/image.php?di=4RC6
Подключение:
Подключение выглядит следующим образом:
#include <ds_markers>
В инклюде имеется 8 диалоговых окон, которым требуется задать уникальный ID.
Есть несколько вариантов настройки ID:
Напрямую указать каждому диалогу желаемый ID:
// Сначала 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 (32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759)
#define AUTOMATIC_MARKER_DIALOG_ID 1
#include <ds_markers>
Внимание: Данный способ подойдёт только тем, у кого указанные выше ID свободны
Если не произвести ни одно из действий или забыть указать ID для одного из диалогов, компилятор сообщит об этом следующей ошибкой:
For the system to work properly you must specify the ID of the dialogue "имя_макроса_соответствующего_ID_диалога"
Для исправления нужно, собственно, указать ID для пропущенных диалогов
Лимиты для радиуса хранятся в двух макросах:
#define MIN_PLAYER_MARKER_RADIUS 1.0
#define MAX_PLAYER_MARKER_RADIUS 8516.0
Не советую их изменять.
Функционал:
Описание всех функций продублировано в самом инклюде.
Примечание: Здесь просто перечислены функции, которые идут вместе с инклюдом. Основная система (дальность отображения маркеров) не требует дополнительной настройки, кроме того, что написано в пункте "Подключение"
ShowDialogPlayerMarkerOptions(playerid)
- Данная функция отобразит основной диалог (http://ihost.pro-pawn.ru/image.php?di=RI4K) настроек для маркеров.
Параметры:
- playerid // ID игрока, которому будет показан диалог
cmd:radius(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
ShowDialogPlayerMarkerOptions(playerid);
return 1;
}
SetMarkerDrawDistanceForPlayer(playerid, Float: radius)
- С помощью данной функции можно обновить радиус отображения маркера для конкретного игрока (обновляет лишь значение переменной).
Для того, чтоб изменения вступили в силу для игроков, находящихся онлайн, после использования требуется вызвать UpdateMarkerRadiusForPlayer или UpdateMarkerRadiusForAll
Параметры:
- playerid // ID игрока (ячейки массива), которому будет обновлён радиус
- Float: radius // Новое значение радиуса в виде вещественного числа
Пример использования:
public OnGameModeInit()
{
SetMarkerDrawDistanceForPlayer(8, 150.0);// У игрока с ID 8, при входе на сервер, радиус отображения маркера будет равен 150 метрам.
return 1;
}
SetMarkerDrawDistanceForAll(Float: radius, bool:mode = false)
- Аналог предыдущей функции, только действие распространяется на всех игроков. Имеет два режима работы.
Параметры:
- Float: radius - Новое значение для радиуса, который будет установлен всем игрокам
- bool:mode - Режим работы функции
/*Режимы работы:
false - работа функции распространяется на всех игроков (даже оффлайн) - включена по умолчанию
true - работа функции распространяется только на игроков, находящихся на сервере*/
Пример использования:
public OnGameModeInit()
{
SetMarkerDrawDistanceForAll(20.0);// Теперь у всех игроков, заходящих на сервер, радиус отображения маркера будет 20 метров.
return 1;
}
UpdateMarkerRadiusForPlayer(playerid)
- Функция для обновления динамической зоны конкретного игрока
Функция нужна для того, чтоб изменения радиуса, после использования SetMarkerDrawDistanceForPlayer/SetMarkerDrawDistanceForAll вступили в силу
Параметры:
- playerid // Игрок, динамическая зона которого будет обновлена
Пример использования:
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()
- Аналог предыдущей функции, распространяющийся на всех игроков, находящихся на сервере
Параметры:
---
Пример использования:
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)
- Функция для включения/отключения видимости на радаре одного игрока для другого (основная функция, на которой всё построено)
Параметры:
- playerid // игрок, которому скрываем/показываем игрока
- showplayerid // игрок, которого скрываем/показываем
- bool:visible // режим (true - показать/false - скрыть)
Пример использования:
- Данный инклюд :D
TogglePlayerOnMap(playerid, bool:visible)
- Аналог предыдущей функции, только игрок становится невидимым для всего сервера
Параметры:
playerid - игрок, которого скрываем/показываем игрока
- bool:visible // режим (true - показать/false - скрыть)
Пример использования:
cmd:inv(playerid, params[])
{
if((GetPlayerColor(playerid) & 0xFF) == 0x00)
{
SendClientMessage(playerid, -1, "Вы снова видимы на радаре");
TogglePlayerOnMap(playerid, true);
}
else
{
SendClientMessage(playerid, -1, "Вы теперь невидимы на радаре");
TogglePlayerOnMap(playerid, false);
}
return 1;
}
Примечание:
Для правильной работы системы требуется удостовериться, что в вашем скрипте нет функций:
- ShowPlayerMarkers
- LimitPlayerMarkerRadius
Если они есть, их следует удалить.
Автор инклюда - DeimoS
Ссылка на скачивание - Dropbox (https://www.dropbox.com/s/lfpns5g1xahzqqy/ds_markers.inc?dl=0)
Ссылка на Pastebin - Клик (http://pastebin.com/vdixRWAc)
Описание:
Инклюд, расширяющий возможности настройки маркеров игроков, добавляющий такие возможности, как:
Изменение радиуса отображения маркеров* прямо в игре (не требует рестарта)
Изменение радиуса для всех игроков (онлайн/оффлайн)
Изменение радиуса только для игроков, находящихся на сервере
Изменение радиуса только игрокам, которые ещё не зашли на сервер
Изменение радиуса для конкретного игрока
*Маркеры игроков - это квадратные метки на карте,
которые указывают местоположение того или иного игрока остальным
Первый игрок, радиус отрисовки маркера которого установлен на 10 метров
Радиус отображения маркера у игроков:
Игрок №1 (от лица которого сделан скрин) = 10 метров
Игрок №2 = 50 метров
Первый игрок находится в радиусе 50 метров от второго и метка второго игрока отображается для первого
http://ihost.pro-pawn.ru/image.php?di=NJE1
Второй игрок, радиус отрисовки маркера которого установлен на 50 метров
Для второго же игрока первы игрок скрыт с радара, так как расстояние между ними больше 10 метров (именно стольки равен радиус отрисовки маркера первого игрока)
http://ihost.pro-pawn.ru/image.php?di=W258
Так выглядит основное меню настройки маркеров
Вызывается оно функцией
ShowDialogPlayerMarkerOptions(playerid);
http://ihost.pro-pawn.ru/image.php?di=RI4K
Выбираем пункт "Индивидуальный радиус" и видим следующее окно со списком всех игроков (до 30 игроков в одном окне)
http://ihost.pro-pawn.ru/image.php?di=Z86X
Выбираем нужного игрока (DeimoS) и указываем ему новый радиус
http://ihost.pro-pawn.ru/image.php?di=ZCH0
Чуть сдвигаемся в сторону, дабы система обновила данные, и видим, что первый игрок теперь отображается для второго
http://ihost.pro-pawn.ru/image.php?di=4RC6
Подключение:
Подключение выглядит следующим образом:
#include <ds_markers>
В инклюде имеется 8 диалоговых окон, которым требуется задать уникальный ID.
Есть несколько вариантов настройки ID:
Напрямую указать каждому диалогу желаемый ID:
// Сначала 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 (32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759)
#define AUTOMATIC_MARKER_DIALOG_ID 1
#include <ds_markers>
Внимание: Данный способ подойдёт только тем, у кого указанные выше ID свободны
Если не произвести ни одно из действий или забыть указать ID для одного из диалогов, компилятор сообщит об этом следующей ошибкой:
For the system to work properly you must specify the ID of the dialogue "имя_макроса_соответствующего_ID_диалога"
Для исправления нужно, собственно, указать ID для пропущенных диалогов
Лимиты для радиуса хранятся в двух макросах:
#define MIN_PLAYER_MARKER_RADIUS 1.0
#define MAX_PLAYER_MARKER_RADIUS 8516.0
Не советую их изменять.
Функционал:
Описание всех функций продублировано в самом инклюде.
Примечание: Здесь просто перечислены функции, которые идут вместе с инклюдом. Основная система (дальность отображения маркеров) не требует дополнительной настройки, кроме того, что написано в пункте "Подключение"
ShowDialogPlayerMarkerOptions(playerid)
- Данная функция отобразит основной диалог (http://ihost.pro-pawn.ru/image.php?di=RI4K) настроек для маркеров.
Параметры:
- playerid // ID игрока, которому будет показан диалог
cmd:radius(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF} Команда доступна только RCON-Администраторам");
ShowDialogPlayerMarkerOptions(playerid);
return 1;
}
SetMarkerDrawDistanceForPlayer(playerid, Float: radius)
- С помощью данной функции можно обновить радиус отображения маркера для конкретного игрока (обновляет лишь значение переменной).
Для того, чтоб изменения вступили в силу для игроков, находящихся онлайн, после использования требуется вызвать UpdateMarkerRadiusForPlayer или UpdateMarkerRadiusForAll
Параметры:
- playerid // ID игрока (ячейки массива), которому будет обновлён радиус
- Float: radius // Новое значение радиуса в виде вещественного числа
Пример использования:
public OnGameModeInit()
{
SetMarkerDrawDistanceForPlayer(8, 150.0);// У игрока с ID 8, при входе на сервер, радиус отображения маркера будет равен 150 метрам.
return 1;
}
SetMarkerDrawDistanceForAll(Float: radius, bool:mode = false)
- Аналог предыдущей функции, только действие распространяется на всех игроков. Имеет два режима работы.
Параметры:
- Float: radius - Новое значение для радиуса, который будет установлен всем игрокам
- bool:mode - Режим работы функции
/*Режимы работы:
false - работа функции распространяется на всех игроков (даже оффлайн) - включена по умолчанию
true - работа функции распространяется только на игроков, находящихся на сервере*/
Пример использования:
public OnGameModeInit()
{
SetMarkerDrawDistanceForAll(20.0);// Теперь у всех игроков, заходящих на сервер, радиус отображения маркера будет 20 метров.
return 1;
}
UpdateMarkerRadiusForPlayer(playerid)
- Функция для обновления динамической зоны конкретного игрока
Функция нужна для того, чтоб изменения радиуса, после использования SetMarkerDrawDistanceForPlayer/SetMarkerDrawDistanceForAll вступили в силу
Параметры:
- playerid // Игрок, динамическая зона которого будет обновлена
Пример использования:
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()
- Аналог предыдущей функции, распространяющийся на всех игроков, находящихся на сервере
Параметры:
---
Пример использования:
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)
- Функция для включения/отключения видимости на радаре одного игрока для другого (основная функция, на которой всё построено)
Параметры:
- playerid // игрок, которому скрываем/показываем игрока
- showplayerid // игрок, которого скрываем/показываем
- bool:visible // режим (true - показать/false - скрыть)
Пример использования:
- Данный инклюд :D
TogglePlayerOnMap(playerid, bool:visible)
- Аналог предыдущей функции, только игрок становится невидимым для всего сервера
Параметры:
playerid - игрок, которого скрываем/показываем игрока
- bool:visible // режим (true - показать/false - скрыть)
Пример использования:
cmd:inv(playerid, params[])
{
if((GetPlayerColor(playerid) & 0xFF) == 0x00)
{
SendClientMessage(playerid, -1, "Вы снова видимы на радаре");
TogglePlayerOnMap(playerid, true);
}
else
{
SendClientMessage(playerid, -1, "Вы теперь невидимы на радаре");
TogglePlayerOnMap(playerid, false);
}
return 1;
}
Примечание:
Для правильной работы системы требуется удостовериться, что в вашем скрипте нет функций:
- ShowPlayerMarkers
- LimitPlayerMarkerRadius
Если они есть, их следует удалить.
Автор инклюда - DeimoS
Ссылка на скачивание - Dropbox (https://www.dropbox.com/s/lfpns5g1xahzqqy/ds_markers.inc?dl=0)
Ссылка на Pastebin - Клик (http://pastebin.com/vdixRWAc)