Автор: 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(); - подсчет количества динамических зон.
Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера.