Как поётся в песне – «нажми на кнопку - получишь результат». Применительно к языку программирования 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(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.