События для программирования в LSL

Как поётся в песне – «нажми на кнопку - получишь результат». Применительно к языку программирования LSL эту крылатую фразу можно интерпретировать как «чтобы что-то случилось – должно что-то произойти», т.е. должно произойти какое-то событие для начала выполнения какого-то действия. В рамках моего изучения написания скриптов для Second Life мне понадобилось узнать какие события могут отрабатываться языком LSL. Всего я нашёл описание 32-х так называемых событий (event), краткое описание работы которых, я и хочу представить в настоящей статье. За основу взят lsl_guide с моим вольным переводом.

ВАЖНО: Каждое событие должно быть отработано как минимум одной функцией, т.е. каждое событие ОБЯЗАТЕЛЬНО должно дать команду на выполнение хотя бы одного действия (функции).

Описания характеристик событий, заключённых в скобках, в настоящей статье не описаны. По ним планируется разработать отдельные статьи.

Формат отработки событий выглядит примерно так:

Событие(характеристика события1, характеристика события2, характеристика события3,…)

{

Действие(функция)1

Действие(функция)2

Действие(функция)3

}

at_rot_target at_rot_target(integer number, rotation target_rotation, rotation our_rotation)

Это событие срабатывает, когда объект со скриптом поворачивается на угол, в диапазоне определённым углом rotation target_rotation и углом rotation our_rotation (которые определяются функцией  llRotTarget).

 


at_target

at_target(integer number, vector target_position, vector our_position)

Событие срабатывает, когда объект со скриптом изменяет свою позицию в пространстве в диапазонах vector target_position, vector our_position, определяемых функцией llTarget.


attach

attach(key attached)

Это событие запускается, когда объект со скриптом прикрепляется (attach) к аватару или открепляется от него (detach).

 


changed changed(integer changed)

Событие вызывается, если с объектом (в котором находится скрипт) происходят различные изменения, указанные в характеристике integer changed.

 


collision

collision(integer total_number)

Событие запускается, когда другие объекты или аватары сталкиваются с объектом в котором установлен скрипт. Количество объектов, с которыми сталкивается объект со скриптом учитывается integer total_number функциями llDetected***. Также событие срабатывает, когда объект со скриптом входит в другие объекты или аватар опускается на объект со скриптом сверху.

 


collision_end

collision_end(integer total_number)

Событие запускается, когда другие объекты или аватары заканчиваеют сталкиваться с объектом в котором установлен скрипт. Количество объектов, с которыми сталкивается объект со скриптом учитывается integer total_number функциями llDetected***. Также событие срабатывает, когда объект со скриптом выходит из других объектов.

 


collision_start

collision_start(integer total_number)

Событие запускается, когда другие объекты или аватары начинают сталкивение с объектом в котором установлен скрипт. Количество объектов, с которыми сталкивается объект со скриптом учитывается integer total_number функциями llDetected***. Также событие срабатывает, когда объект со скриптом начинает входить в другие объекты.

 


control

control(key name, integer levels, integer edges)

После того, как при помощи функций llRequestPermissions или llTakeControls управление в скрипте передаётся аватару с key name запускается это событие. Он должно запускать состояние с передачей контроля скриптом.

 


dataserver

dataserver(key requested, string data)

Данное событие срабатывает, когда запрошенные данные возвращаются к скрипту. Данные могут быть запрошены и вызваны из функций llRequestAgentData,  llRequestSimulatorData, llRequestInventoryData или llGetNotecardLine .

 


email

email(string time, string address, string subject, string body, integer remaining)

Событие запускается, когда доставлено email-сообщение для скрипта. Оператор integer remaining показывает сколько ещё может быть принято email-сообщений.

 


land_collision

land_collision(vector position

Это событие стартует, когда объект со скриптом сталкивается с землёй.

 


land_collision_end

land_collision_end(vector position)

Это событие запускается, когда объект со скриптом останавливается при столкновении с землёй.

 


land_collision_start

land_collision_start(vector position)

Это событие запускается, когда объект со скриптом начинает столкновение с землёй.

 


link_message

link_message(integer sender_number, integer number, string message, key id)

Запускается, когда объект получает ссылку-сообщение вызываемую из функции llMessageLinked .


listen

listen(integer channel, string name, key id, string message)

Это событие запускается, когда прошло сообщение в чате, услышанное и соответсвующее параметрам функции llListen .

 


money

money(key giver, integer amount)

Это событие срабатывает, когда пользователь оплачивает линден-доллары (L$) в объект, где установлен скрипт.

 


moving_end

moving_end(void)

Событие запускается когда объект со скриптом прекращает движение.

 


moving_start

moving_start(void)

Событие запускается когда объект со скриптом начинает движение.

 


no_sensor

no_sensor(void)

Это событие запускается, когда параметры функций llSensor или llSensorRepeat только активируются, но ничего не определяют (не фиксируют).

 


not_at_rot_target

not_at_rot_target( )

Это событие запускается, когда угол поворота объекта со скриптом  не входит в угол указанный диапазоном  углов функции llRotTarget.

 


not_at_target

not_at_target(void)

Событие запускается в том случае, когда параметр не входит в диапазон указанный функцией llTarget .

 


object_rez

object_rez(key id)

Событие запускается, когда объект со скриптом генерирует (rez) другой объект из своего инвентаря (закладка content) при помощи функции llRezObject . Где id - уникальный ключ для генерируемого объекта.

 


on_rez on_rez(integer start_param)

Событие запускается, когда объект со скриптом генерируется (реззится) из инвентаря либо из другого объекта. Параметр integer start_param вызывается из функций llRezObject или llRezAtRoot .

 


run_time_permissions

run_time_permissions(integer permissions)

Скрипт, нуждающийся в разрешениях на выполнение отдельных операций (например списание денег с аккаунта, передача управления или других) при помощи функции llRequestPermissions может дать команду на старт этого события, передавая целочисленные значения в характеристику integer permissions .

 


sensor sensor(integer total_number)

Это событие запускается, когда от функции llSensor передаются обнаруженные объекты. Количество обнаруженных объектов передаётся в параметр integer total_number , но не может быть больше 16-и. Информацию об обнаруженных объектах может быть собрана функциями llDetected***.

 


state_entry state_entry(void)   Событие возникает каждый раз при переходе в новое состояние, в том числе и при запуске скрипта. Оно обрабатывается в первую очередь.

 


state_exit state_exit(void)

Событие происходит, когда команда в текущем состоянии использует переход в другое состояние. Событие располагается перед новым state_entry событием.

 


timer timer(void)

Это событие включается через определённые промежутки времени, устанавливаемые функцией llSetTimerEvent.

 


touch

touch(integer total_number)

Событие включается, когда пользователи касаются (touch) объекта со скриптом. Количество касаний объекта со скриптом учитывается integer total_number функциями llDetected***.

 


touch_end

touch_end(integer total_number)

Это событие запускается, когда пользователь заканчивает касание объекта со скриптом. Количество касаний объекта со скриптом учитывается integer total_number функциями llDetected***.

 


touch_start

touch_start(integer total_number)

Это событие запускается, когда пользователь первый раз касается объекта со скриптом. Количество касаний объекта со скриптом учитывается integer total_number функциями llDetected***.

 


remote_data

remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval)

К сожалению, это событие для меня тёмный лес, с этим я разобраться так и не смог, поэтому оставляю описание на английском языке. Может быть корифеи скриптования подскажут что в нём к чему.

This event is raised when a user creates an XML-RPC channel via llOpenRemoteDataChannel, a remote XML-RPC server replies to a llSendRemoteData, or a remote XML-RPC client sends in an XML-RPC request. In the open case, type = REMOTE_DATA_CHANNEL, channel = NULL_KEY, message_id = NULL_KEY, sender is an empty string, ival = 0, and sval is an empty string. In the reply case, type = REMOTE_DATA_REPLY, channel is set to the channel that the request was sent on, message_id is set to the id of the message, sender is an empty string, ival = 0, and sval is a string. In the remote request case, type = REMOTE_DATA_REQUEST, channel is set to the channel that sent the message, message_id is set to the id of the message, sender is set by the sender, ival is an integer, and sval is a string. parameter.