время создать бота для второй жизни, используя язык сценариев липы? - PullRequest
1 голос
/ 14 октября 2010

сколько времени нужно, чтобы создать простого танцующего бота во второй жизни, используя язык сценариев Linden ??У меня нет предварительных знаний о lsl, но я знаю различные объектно-ориентированные и управляемые событиями языки программирования.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Небольшое несоответствие языка: чтобы заставить объект исполнить танец, в настоящее время известно как "puppetry" в контексте SecondLife. Термин "бот" в настоящее время означает управление аватаром с помощью внешнего скрипта API.

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

Кукольный мир предметов не сильно улучшился за последнее десятилетие. Это сильно ограничено частотой обновления движений и скриптовыми ограничениями. Перемещение часто задерживается под нагрузкой на сервер, и клиент не всегда получает обновления, которые производят паузы и пропуски в различной степени. Сценарии имеют максимальный размер 64 КБ, которого должно быть достаточно, но на самом деле он быстро заканчивается с необходимыми в Lsl извилинами. Перемещение каждого связанного элемента в объект, отдельно используемый для сценария в каждом элементе, до тех пор, пока не будут введены новые функции для применения атрибутов по номеру ссылки, все же многие объекты используют старые сценарии, которые никогда не могут быть обновлены. Отставные куклы делают жалкое зрелище, но большинство пользователей не знают, как найти хороший сценарий кукольного театра.

Популярный способ начать создание кукольного сценария - найти в Интернете более старый открытый кукольный сценарий с открытым исходным кодом и обновить его для работы из одного сценария. Некоторые версии archane представлены как сценарии 'master' и 'slave', которые необходимо объединить, поместив подчиненные действия как функцию в master, заменив llMessageLinked( ) на имя функции. Другие используют идентичный скрипт для каждого прайма. Я сказал популярным, а не самым простым или самым легким, и он никогда не будет лучшим.

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

Наиболее важной задачей является создание цикла для построения параметров из списка номеров ссылок, позиций и поворотов в список параметров перед llSetLinkPrimitiveParamsFast( ). Да, это то, что они назвали, потому что это тяжелая функция, основанная на списках, вы можете просто назвать ее SLPPF в мире, но не в сценарии. Поскольку SLPPF требует, чтобы вызов имел определенные константы для каждого параметра, список параметров для каждого шага должен будет включать PRIM_LINK_TARGET, linknumber, PRIM_POS, position, PRIM_ROT, rotation для каждой связанной части в шаге анимации.

Вот пример помещения списка одиночных шагов кукловодства в SLPPF.

list parameters;
integer index;
while ( index < total ) { // total number of elements in each list
  parameters += [
    PRIM_LINK_TARGET, llList2Integer( currentstep, index ),
    PRIM_POS, llList2Vector( currentstep, index+1 ),
    PRIM_ROT, llList2Rotation( currentstep, index+2 )
  ];
  index += 3;
}
llSetLinkPrimitiveParamsFast( 0, parameters );

Другое дело, как вы создаете текущий список шагов, но наиболее плавное движение по многим связанным частям будет возможно только в том случае, если скрипт не перемещает списки. Таким образом, если запуск таймера в 0,2 секунды не является улучшением по сравнению с 0,3, это потому, что вы сказали lsl убирать слишком много списков. Этот цикл с тремя вызовами списка может обрабатывать около 20 ссылок за 0,1 секунды, если погода хорошая.

Это на самом деле самое худшее, просто будьте осторожны с памятью, если в память слишком много списков шагов. О, и если ваш объект просто исчезнет полностью, он будет зависать около <0,0,0>, потому что 1 приземлился в PRIM_LINK_TARGET дыру.

0 голосов
/ 14 октября 2010

Ну, это довольно просто для анимации аватара: вам понадобится танцевальная анимация (их довольно легко найти, или вы можете создать свой собственный ), положить его в приму (что является основным создание объекта в SL), а затем создайте простой скрипт, который сначала запрашивает разрешение на анимацию желаемого аватара:

llRequestPermissions(agent_key, PERMISSION_TRIGGER_ANIMATION);

Вы получаете ответ в событии run_time_permissions и запускаете анимацию по имени:

run_time_permissions(integer param) 
{
    llStartAnimation("my animation");
}

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

Что касается части "бот", то код просмотра Second Life с открытым исходным кодом; если вы не хотите создавать его самостоятельно, доступно несколько настраиваемых ботов. Или вы можете просто запустить официальный просмотрщик SL и оставить его включенным; есть способ запустить несколько экземпляров SL viewer одновременно. Все зависит от того, для чего именно это нужно.

Официальный портал LSL можно найти здесь , хотя я предпочитаю слегка устаревшие LSL wiki .

...