В данном уроке пойдет разговор об использование динамических зон с помощью плагина 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
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
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; }
public OnPlayerEnterDynamicArea(playerid, areaid) { if(areaid == zone 51) 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(); - подсчет количества динамических зон. Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера.
Автор урока: SDraw Автор плагина: Incognito Ссылка на скачивание плагина: samp-pawno.ru Некоторые данные взяты с Forum.Sa-mp.Com.