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

Description: Основы скриптинга
Moderator: SJplayer

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1613
Joined: 5 Apr 2013
With us: 11 years 9 months

#1by Дим » 17 Apr 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 динамической зоны, следовательно, их можно присоединить к переменным.

Code: Select all

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 динамической зоны. Как его определить, написано выше.

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

Code: Select all

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]


Return to “Основы скриптинга”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest