Использование динамических зон (Streamer)

Описание: Основы скриптинга
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 17 апреля 2013, 11:56

Использование динамических зон (Streamer)
Автор: SDraw

В данном уроке пойдет разговор об использование динамических зон с помощью плагина Streamer.
В чем же плюсы? А в том, что куда более удобно использовать динамические зоны, чем создавать таймер и проверять каждого игрока на определенную позицию. А минусы...Вроде бы их нет.

Ну что ж начнем.

В Streamer'е есть несколько видов динамических зон: круг, прямоугольник, сфера и куб. Круг и прямоугольник создаются только по двум осям: x и y. Следовательно, динамическая зона этих типов является огромным невидимым столбом, устремляющимся ввысь. Одним словом, высоты у таких зон нет. А вот сфера и куб имеют высоту, что намного удобней.

Разберем функции по их созданию.

CreateDynamicCircle(Float:x, Float:y, Float:size, worldid, interiorid, playerid); - создание зоны в виде круга. Для нее понадобятся только x и y координата, а также размер радиуса у данной зоны.
CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid, interiorid, playerid); - создание зоны в виде прямоугольника. Для данной зоны Вам потребуется узнать координаты противоположенных углов.
CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid, interiorid, playerid); - создание зоны в виде сферы. Для данной зоны потребуется высота по оси Z и радиус сферы, которую Вы хотите создать.
CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid, interiorid, playerid); - создание зоны в виде куба (параллелепипеда). Для этого уже потребуется минимальная и максимальная высота по оси Z.

Каждая из данных функций возвращает ID динамической зоны, следовательно, их можно присоединить к переменным.

Код: Выделить всё

new zone51;

public OnGameModeInit()
{
   zone51 = CreateDynamicCube(-13.0555,1702.1824, 15.0,405.9110, 2071.6646, 850.0, 0, 0, -1); // виртуальный мир - 0, интерьер - 0, для всех игроков
   return 1;


Callback'и.

Для динамических зон есть два callback'a: OnPlayerEnterDynamicArea(playerid, areaid) и OnPlayerLeaveDynamicArea(playerid, areaid) - вхождение и покидание динамической зоны. Areaid - это ID динамической зоны. Как его определить, написано выше.

Примеры простого использования:

Код: Выделить всё

public OnGameModeInit()
{
   zone51 = CreateDynamicCube(-13.0555,1702.1824, 15.0,405.9110, 2071.6646, 850.0, 0, 0, -1); // виртуальный мир - 0, интерьер - 0, для всех игроков
   return 1;
}

public OnPlayerEnterDynamicArea(playerid, areaid)
{
   if(areaid == zone51) SendClientMessage(playerid,-1,"Покиньте охряняемую зону. Иначе будет открыт огонь.");
   return 1;
}

public OnPlayerLeaveDynamicArea(playerid, areaid)
{
   if(areaid == zone51) SendClientMessage(playerid,-1,"Благодарим за понимание.");
   return 1;
}


Другие функции:

  • DestroyDynamicArea(areaid); - уничтожение динамической зоны.
  • IsValidDynamicArea(areaid); - проверка на существование динамической зоны с данным ID.
  • TogglePlayerDynamicArea(playerid, areaid, toggle); - скрытие динамической зоны для игрока.
  • TogglePlayerAllDynamicAreas(playerid, toggle); - скрытие всех динамических зон для игрока.
  • IsPlayerInDynamicArea(playerid, areaid); - проверка на нахождение игрока в динамической зоне с определенным ID.
  • AttachDynamicAreaToPlayer(areaid, playerid); - прикрепление динамической зоны с определенным ID к игроку.
  • AttachDynamicAreaToVehicle(areaid, vehicleid); - прикрепление динамической зоны с определенным ID к машине.
  • DestroyAllDynamicAreas(); - уничтожение всех динамических зон.
  • CountDynamicAreas(); - подсчет количества динамических зон.

Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера.
[center]i love you [s]mxIni[/s] Mysql[/center]


Вернуться в «Основы скриптинга»