Доступ к готовым решениям

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

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

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

Мануал Динамические Зоны

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

Alex_Lenez

Специалист
Здравствуйте гости и пользователи Pawno-Info.ru.​
Сидел думал и увидел что на нашем портале нет мануала по динамическим зонам ( с использованием Streamer`a ).

Для начала я вам расскажу что это такое и для чего они нужны эти зоны:

Динамические зоны это как проверка на квадрат,круг или куб ( Например Система Ганг Зон в РП модах или PlayerToPoint ).
Например вам нужно создать PlayerToPoint и чтобы он каждую секунду проверял в этом радиусе каждого игрока, для этого требуется таймер,
с использованием динамических зон потребность в таймерах пропадет, они обновляются автоматически и не нагружают мод.



Есть несколько видов динамических зон:


Круг ( Проверка в радиусе от заданной координаты): Проверка на радиус задается только по координатам X и Y, работают на любой высоте

PHP:
CreateDynamicCircle(Float:x, Float:y, Float:size, worldid, interiorid, playerid);

Float:x - Координата X
Float:y - Координата Y
Float:size - Радиус
worldid - Ид виртуального мира -1 используется во всех мирах
interiorid -  Ид интерьера  -1 используется во всех интерьерах
playerid -  Можно использовать для определенного игрока или же для всех  -1
Прямоугольная зона ( Проверка игрока в прямоугольной зоне): Нужно ввести 4 координаты например X: 5, Y:5 X -5, Y -5


PHP:
CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid, interiorid, playerid);

Float:minx - Координата X  | точка 1
Float:maxx - Координата X | точка 2
Float:miny - Координата Y  | точка 1
Float:maxy - Координата Y | точка 2
worldid - Ид виртуального мира -1 используется во всех мирах
interiorid -  Ид интерьера  -1 используется во всех интерьерах
playerid -  Можно использовать для определенного игрока или же для всех  -1

Сфера ( Можно создать проверку игрока в таком себе шаре ): Указываете координаты X Y Z и Размер Шара



PHP:
CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid, interiorid, playerid);

Float:x - Координата X
Float:y - Координата Y
Float:z - Координата Z (Высота)
Float:size - Радиус
worldid - Ид виртуального мира -1 используется во всех мирах
interiorid -  Ид интерьера  -1 используется во всех интерьерах
playerid -  Можно использовать для определенного игрока или же для всех  -1

Куб ( Можно создать проверку игрока в кубе ): Указываете координаты минимальные XYZ и Обратно Максимальные этих же координат



PHP:
CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid, interiorid, playerid);

Float:minx - Координата X  | точка 1
Float:maxx - Координата X | точка 2
Float:miny - Координата Y  | точка 1
Float:maxy - Координата Y | точка 2
Float:minz - Координата Z  | точка 1
Float:maxz - Координата Z | точка 2
worldid - Ид виртуального мира -1 используется во всех мирах
interiorid -  Ид интерьера  -1 используется во всех интерьерах
playerid -  Можно использовать для определенного игрока или же для всех  -1

И на конец то мы подошли к разбору того как же это использовать в скриптинге.
Так же ниже опишу еще как прикрепить к машине или игроку такую зону.


Для начала нам нужно создать зону:

ко всем new:

PHP:
new zona1;
В OnGameModeInit:

PHP:
zona1 = CreateDynamicCircle(Координата X, Координата Y, 50, 0, 0, -1); // Создали зону, проверка игрока в радиусе 50
Для проверки нахождения игрока в зоне есть два Паблика:

1) OnPlayerEnterDynamicArea(playerid, areaid) - Срабатывает когда игрок попадает в зону
2) OnPlayerLeaveDynamicArea(playerid, areaid) - Срабатывает когда игрок выходит с зоны

Пример:


PHP:
public OnPlayerEnterDynamicArea(playerid, areaid)
{
   if(areaid == zana1) SendClientMessage(playerid,0x000000AA,"Вы вошли в зону 1");
   return 1;
}

public OnPlayerLeaveDynamicArea(playerid, areaid)
{
   if(areaid == zona1) SendClientMessage(playerid,0x000000AA,"Вы покинули зону 1");
   return 1;
}

Также вы можете прикрепить Зону к машине или игроку и проверить кто войдет в эту зону

Примечание: Можно использовать только зону Круг или Шар


У нас уже есть созданная выше зона давайте её прикрепим к машине и сделаем проверку

Команда:

PHP:
CMD:vehzona(playerid,params[])
{
if(sscanf(params, "d", params[0])) return SendClientMEssage(playerid, -1, "Введите : /vehzona [ид авто]");
AttachDynamicAreaToVehicle(zona1, params[0]);
return true;
}
Теперь также будет показывать вы вошли или вышли с зоны

Функции для работы с данными зонами:

PHP:
DestroyDynamicArea(areaid); - Удалить зону по её иду
IsValidDynamicArea(areaid); - Проверка на существование зоны по Иду
DestroyAllDynamicAreas(); -  Удалить все созданные зоны
CountDynamicAreas(); - Посчитать Сколько есть всего зон
Добавлено:


Полигон:
Есть еще такая зона как полигон, и таким образом можно обвести любую зону но уже ломаными линиями.
Суть её изложу в скрине ниже.


PHP:
CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);

Просто ставить точки где вам угодно, и это будет ваша зона - полигон

Но как же эти точки вставить и создать зону а очень просто:

Есть программа которая делает все это за вас, вы просто создаете точки на карте и нажимаете Экспорт в .pwn файл:
 

Вложения

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