Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Использование динамических зон (Streamer) - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Использование динамических зон (Streamer)
Оценка: -----

#1
Пользователь офлайн   Island 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
В данном уроке пойдет разговор об использование динамических зон с помощью плагина 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 динамической зоны. Как его определить, написано выше.
Callback'и срабатывают токо при входе в зону.
Примеры простого использования:
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 == zone51) SendClientMessage(playerid,-1,"Покиньте охряняемую зону. Иначе будет открыт огонь."); 
    return 1; 
} 
public OnPlayerLeaveDynamicArea(playerid, areaid) 
{ 
    if(areaid == zone51) SendClientMessage(playerid,-1,"Благодарим за понимание."); 
    return 1; 
}

Другие функции:
Скрытый текст [Показать]

Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера.

Автор урока: SDraw

Сообщение отредактировал Vitya: 14 Март 2016 - 02:14

2

#2
Пользователь онлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
if(areaid == zone 51) исправь
0

#3
Пользователь офлайн   Island 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияm1n1vv (13 Март 2016 - 13:49) писал:

if(areaid == zone 51) исправь

Подправил
0

#4
Пользователь офлайн   XVII 

  • Говнокодить - искусство
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
А теперь объясни. Код внутри калбэка выполняется только при входе в зону или каждый N ms.?
0

#5
Пользователь онлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщения2ol (13 Март 2016 - 17:59) писал:

А теперь объясни. Код внутри калбэка выполняется только при входе в зону или каждый N ms.?

Только при входе в зону
0

#6
Пользователь офлайн   XVII 

  • Говнокодить - искусство
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияm1n1vv (13 Март 2016 - 18:08) писал:

Только при входе в зону


А теперь это надо добавить в шапку темы Изображение
0

#7
Пользователь офлайн   Island 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщения2ol (13 Март 2016 - 18:28) писал:

А теперь это надо добавить в шапку темы Изображение

добавил около примера с калбэками

Сообщение отредактировал Vitya: 14 Март 2016 - 02:15

0

#8
Пользователь онлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Мог хотя бы описание изменить и переменные )
0

#9
Пользователь офлайн   Lanzo 

  • Пользователь
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Погоди, ведь срабатывает только при входе в зону, а при выходе как? Там же есть OnPlayerLeaveDynamicArea
0

#10
Пользователь онлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияLanzo (10 Январь 2017 - 17:36) писал:

Погоди, ведь срабатывает только при входе в зону, а при выходе как? Там же есть OnPlayerLeaveDynamicArea

Тут есть пример
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей