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
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;
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 файл:
Вложения
-
5.9 MB Просмотры: 111
