Темы:
Продолжим рассмотрение функции llSensor.
range - максимальное расстояние поиска. Т.е. если этот параметр будет равняться 20 метрам, то поиск будет производиться не больше чем на 20 метров от объекта. Максимально допустимое значение - 96 метров. Функция llSensor может обнаруживать объекты и агенты только на текущем симе. Например, если вы стоите рядом с границей двух симов, и на соседнем симе есть агенты, сенсор их не найдет.
arc - угол (дуга), в котором производится поиск. Угол указывается в радианах (НЕ ГРАДУСАХ!) по вектору вдоль оси Х. Не стоит пугаться умных слов! Даже если вы ничего не смыслите в тригонометрии, с этим параметром вы разберетесь довольно быстро - нужно всего лишь запомнить несколько простых констант. Воспользуемся для наглядности иллюстрациями с сайта www.lslwiki.net.
arc=PI/4 - сканирование будет произведено в радиусе 45 градусов вокруг оси X.
arc= PI_BY_TWO - 90 градусов вокруг оси Х (полушарие).

arc=PI - 180 градусов вокруг оси Х (сфера).

Что ж, теперь ваших знаний хватит, чтобы расшифровать следующую запись llSensor("", NULL_KEY, AGENT, 96, PI).
Как вы, наверняка, уже и сами ответили, по этой команде запустится на сканирование одиночный сенсор, который будет искать всех агентов (аватар) вокруг себя (сфера) на максимальном расстоянии 96 метров.
А что произойдет, когда сенсор найдет или не найдет какой-либо объект? Для этого необходимо применить события sensor() и no_sensor(), но об этом позже. А сейчас переходим к следующей функции.
Функция llSensorRepeat
Синтаксис llSensorRepeat(string name, key id, integer type, float range, float arc, float rate)
Эта функция создает постоянный сенсор, который производит сканирование с интервалом rate. Он почти во всем соответствует llSensor за исключением дополнительного параметра и некоторых деталей. Именно эту функцию мы будем использовать в нашем радаре.
rate - задает интервал сканирования в секундах.
Сенсор с указанием времени сканирования может быть только один в скрипте. Любой вызов еще одного llSensorRepeat или простого llSensor приведет к остановке текущего llSensorRepeat (прерывание также можно сделать с помощью специальной функцией llSensorRemove).
В некоторых источниках сообщается, что якобы с помощью функции llSensorRepat можно сканировать объекты и агентов на соседних симах с интервалом не чаще одного раза в 5 секунд. Я провел ряд экспериментов с текущим клиентом (1.17.0). Оказалось, что эта недокументированная функция работает, но далеко не всегда и не везде, так что использовать ее я не рекомендую.
Функция llSensorRemove
Cинтаксис llSensorRemove()
Удаляет сенсор, установленный функцией llSenosorRepeat. Никаких дополнительных параметров указывать не нужно, так как в объекте может содержаться только один сенсор с интервалом времени.
Любое удачное или неудачное сканирование приведет к срабатыванию соответствующих событий. Рассмотрим их.
Событие sensor
Cинтаксис sensor(integer num_detected) { }
Данное событие срабатывает каждый раз, когда запущенный на сканирование сенсор обнаруживает объекты и/или аватары согласно условиям поиска. Событие также возвращает количество обнаруженных объектов/агентов. Датчик позволяет обнаружить максимум 16 объектов и/или агентов. Информация о найденных агентах/объектах доступна через функции llDetected*. Найденные агенты/объекты сортируются в порядке отдаления от объекта, содержащего сенсор.
Пример использования (example_001):

При клике на объекте запускается на сканирование один сенсор, который будет искать аватары в радиусе 10 метров. В случае обнаружения, он прошепчет их имена в общий чат. Если по каким-то причинам ничего обнаружить не удалось, дополнительных действий не произойдет, т.к. событие no_sensor() не описано.
Событие no_sensor()
Cинтаксис no_sensor() { }
Срабатывает всякий раз, когда запущенный на сканирование сенсор ничего не обнаружил.
Пример использования (example_002):

Данный пример практически идентичен предыдущему, но здесь добавлено событие no_sensor, которое сработает, если наш сенсор ничего не найдет. Также будет выведено соответствующее сообщение в чат. Следует помнить, что мы применили "обычный" сенсор поз повтора сканирования, поэтому после одной удачной или неудачной попытки сканирования работа приостановится, и для нового сканирования надо будет заново нажать на объект.
Начальные сведения по сенсорам получены! Для тех, кто хочет изучить эту тему поглубже, полезные ссылки:
http://www.lslwiki.net/lslwiki/wakka.php?wakka=sensors
http://wiki.secondlife.com/wiki/Category:LSL_Sensor
Продолжение следует...














