Хочешь узнать как попасть в Second Life?

 

 

Русификатор для клиента Second Life версии 1.20.15.92456

Патч загружен 9749 раз
Подробнее о русификаторе

 



Зарегистрироваться
Вспомнить пароль

Top-10


Первые шаги в Second Life. Часть 1

Регистрация аккаунта

Как заработать в Second Life легко и быстро!

Русификация SL-клиента

Халява, сэр!

LSL. Основы. Часть 1

Системные требования

Любовь единорога - это прекрасно!

Управляем "собой"

Москва в Second Life – это, безусловно, товарищество. Часть 1

 
     

Сейчас на сайте

Сейчас на сайте 5 пользователей и 25 гостей.

Пользователи на сайте

  • Danka68
  • Koryakovceva
  • Labusti
  • HaruHaru
  • Manoul Carnell

Объявления


Конкурс "Русская машинима Second Life"

BCC present: HALLOWEEN

GOA party

Школа "SecondRussia"

Награждение участников конкурса "Здравствуй, школа!"

 
     

Афиша


В ближайшие дни в Second Life:

Афиша: интересные события в Second Life 21 ноября – 23 ноября 2008 года

Концерт из Санкт-Петербурга

Афиша: интересные события в Second Life 14 ноября – 16 ноября 2008 года

Ежемесячная фотосессия: Cienega Soon

Международный день борьбы со СПИДом в Second Life

 
     

LSL. Основы. Часть 5.3

Автор: Zuba Zenovka      Время публикации: 16:46, 06.07.07
Темы:

Ну, что ж, приступим к написанию нашего первого радара.

Создаем новый объект типа BOX, открываем вкладку "Content" и нажимаем кнопку "New Script...".

В открывшемся окне редактора перед событием state_entry() дописываем новое событие:

Пример 1

Оно будет срабатывать каждый раз, когда объект "появляется на свет", например, при доставании его из сумки или при "надевании" на аватар. Также это событие будет срабатывать каждый раз в том момент, когда вы входите в Second Life (для этого объект должен быть "надет" на вас).

Внутри события мы вызываем удаление текста, сброс и перезагрузку скрипта для того, чтобы он, например, не показывал результаты старых поисков радаром. В принципе, производить сброс в нашем случае не обязательно, так как мы воспользуемся сканированием с интервалами времени, и старые записи будут сохраняться всего на несколько секунд, после чего заменяться новыми, но оставлять это в таком виде не слишком красиво.

В событии state_entry стираем строчку "Hello, Avatar!" и пишем свою:

Пример 2

Так мы включаем сенсор на постоянное сканирование местности в радиусе 96 метров с интервалом в одну секунду и поиск всех агентов в этом радиусе.

Теперь опишем событие sensor:

Пример 3

Переменная i вводится для цикла, в котором будут обрабатываться все найденные агенты; в переменной text скрипт будет собирать их имена для последующего вывода на объект.

В цикле, который перебирает всех найденных агентов, мы воспользовались функцией llDetectedName, возвращающей имя найденного агента или объект; функции необходимо передать порядковый номер найденного агента.

Далее мы специальной эскейп-последовательностью "\n" указываем, что нам в переменной text нужен перевод на новую строку. Это делается для того, чтобы имя каждого найденного агента находилось на новой строке и не сливалось с остальными. После завершения цикла перебора выводим результат на объект функцией llSetText.

Поскольку наш радар может ничего не найти, нужно добавить событие no_sensor:

Пример 4

И, наконец, стираем ранее найденные агенты.

В итоге полностью наш первый скрипт должен выглядеть вот так (example_003):

example_003

Нажимаем кнопку "Save", закрываем окно редактора, и в нашем кубике мы должны увидеть примерно следущее:

Кубик

Радар уже работает! Правда, он не показывает количество метров до обнаруженных агентов, но с этим мы разберемся ниже, сначала давайте наденем его на HUD. Открываем окно редактирования объекта и задаем ему имя, например, RADAR. Забираем его в инвентарь через команду "Take". Открываем инвентарь, находим наш радар в папке "Objects", нажимаем правую кнопку и выбираем "Attach To HUD"->"Bottom Right".

Надеваем радар на HUD

Результат можно увидеть сразу :)

Результат

Как видите, наш кубик оказался слишком большой, и его надо уменьшить. Сделаем это, не снимая его с HUD - кликаем на нем правой кнопкой мыши, выбираем "Edit..."; стрелки перемещения и масштабирования нам не видны, они за экраном - покрутите колесико мыши, и экран HUD начнет уменьшаться.

Уменьшаем радар

Меняем размер и положение радара на более удобные и не забываем увеличить экран HUD до исходных размеров.

Вернемся к нашему радару и добавим отображение расстояния до агента.

Не снимая его с HUD, входим в меню редатирования. Положение найденного радаром агента можно взять из функции llDetectedPos(i), положение самого радара - из функции llGetPos(), а дальше посчитать растояние между ними по страшной формуле sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) :). Но эти действия можно упростить и воспользоваться готовой функцией вычисления расстояний float llVecDist(vector v1, vector v2).

В нашем случае это бы смотрелось примерно так:

Пример 5

Т.к. здесь используется тип float, то на выходе мы получим лишнюю точность вплоть до миллиметров, которая нам, в общем-то, не нужна.

С точностью до миллиметра

Применим функцию округления типа float, вернее, преобразуем его в тип integer. Для этого нам пригодится функция integer llRound(float).

В результате событие сенсора станет таким:

Пример 6
Кликните на рисунок для увеличения

Такое решение вполне соответствует нашим требованиям.

Но все равно идеала мы еще не достигли - приведем наш "формирователь" информации в более компактный вид (оптимизацией я бы это не назвал).

Радар (example_004):

example_004
Кликните на рисунок для увеличения

Сохраняем наш скрипт и радуемся результату, радар готов!

Радар готов!

Напоминаю, что практически все примеры и готовый радар можно получить здесь - secondlife://Lady Vale/38/209/22 в зеленой коробочке.

Комментарии
Карлсон 21:04, 09.07.07 ссылка

поправочка - читал в документации и убедился на своем опыте что:
объекты в соседних симах детектируются, но:
- объекты в текущем симе детектируются без гарантии - с некоторой вероятностью, в районе 1/2-1/20 на один скан
- чем больше период сканирования тем меньше вероятность - при скане реже 5-10 секунд она близка к нулю.
- команда разового скана соседний сим не сканирует вообще

Ответить
Карлсон 21:05, 09.07.07 ссылка

в смысле не в текущем, а в смежном.

Ответить
murzik139 22:28, 21.07.07 ссылка

Рассыпаюсь в комплиментах ! Хоть я и не смыслю в скриптовании абсолютно, это было весьма познавательно. И интересно. Koshechka

Ответить
Savaro 23:11, 20.07.08 ссылка

Вкусно но мало, пасибо за гайды thumbup1

Ответить



Свежие комментарии


Manoul Carnell пишет в Количество участков в Second Life продолжает падать  

Manoul Carnell пишет в Настоящие лица резидентов  

Lokos пишет в LindenLab забанили Вторую Москву  

delomann пишет в FAQ по голосовой функциональности в SL. Часть 4  

delomann пишет в Будни футбольного клуба и мертвый черный лебедь  

delomann пишет в Фонтан мыслей Twitter от Daden  

Oksana Quintessa пишет в Oksana Quintessa RL  

delomann пишет в Резиденты Second Life пожертвовали 200000 долларов США для американского общества борьбы с раком  

Butterfly пишет в The Three Graces  

Sunnyk пишет в 80% пользователей Интернет уйдут в Second Life  

 
   

Галерея


Последнее добавленное изображение.
Самое популярное изображениеСлучайное изображение
 
     

Каталог

русскоязычных ресурсов, посвященных Second Life
 
     

Подписка

RSS лента статей

RSS лента новостей

RSS лента блогов

Партнеры

sm_sl.gif

rz_sl.gif

Статистика




Rambler's Top100

количество читателей онлайн и всего