Jump to content


Скрипт для управления частями тела


  • Please log in to reply
19 replies to this topic

#1 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 02.12.09 - 17:42

Здравствуйте! У меня такой вопрос, можно ли влиять на движение отдельных частей тела аватара с помощью скрипта, и если есть такая возможность, то как такой скрипт выглядит. Спасибо!

#2 Piter Redstar

Piter Redstar

    Новичок на форуме

  • Пользователи
  • PipPip
  • 83 posts
  • Пол:М
  • Откуда:Москва
  • Основной цех:Художники
  • Второй цех:Строители
  • SL Status: 

Posted 03.12.09 - 00:00

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

#3 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 03.12.09 - 00:59

Э... многие АО используют слои анимации - это комбинации анимаций, каждая из которых имеет свой номер (Пункт priority при загрузке). Этот номер напрямую влияет на то, как анимация будит воспроизводиться, например, если номер равен 1, то во время проигрывания этой анимации аватар "намертво приколочен" к ней, тоесть он не сможет ни повернуть головы, если вы смотрите в бок ни дёрнуть рукой, если вы клацаете по объекту. Если же номер равен 2, то и головой дёрнет и рукой, ну и т.д. кароче номера - это сила воздействия.

А на отдельные части влиять можно запустив поверх анимации с приоритетом 2 и ниже другую с таким же приоритетом.

Небось видели, когда аватар улыбается? Вот шобы он улыбался надо поставить приоритет 2 или более анимации улыбки и такой же анимацям ходьбы.
Сами эмоции, как и кисти рук можно настроить при загрузке анимации в Expression и Hand pose соответственно. Можно так же сделать анимацию цикличной нажав галку Loop.
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#4 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 04.12.09 - 13:49

нет, нет и еще раз нет

чтобы автара улыбалась достачно запустить анимацию встроенную в сл..просто из скрипта все. и не каких двух анимаций и ходьбы.

llStartAnimation("express_smile");
http://lslwiki.net/l...wakka=animation

#5 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 17.12.09 - 16:53

Тут вот какое дело.Соорудил сапоги ,и для того чтоб нормально они сидели на аватаре, было бы не плохо зафиксировать foot и lower leg , сделал анимацию для этой цели, и с помощью этого скрипта запускаю // Basic Animation / Attachment 1.0
// Catherine Omega Heavy Industries

string gAnimName = "block L-foot"; // what animation to play?

default
{
state_entry()
{
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION); // ask the owner for permission to trigger animations
llStartAnimation(gAnimName); // automatically trigger animation.
}

on_rez(integer param)
{
llResetScript(); // reset the script as soon as it starts.
}

attach(key id)
{
integer perm = llGetPermissions();

if (id != NULL_KEY) // make sure we're actually attached.
{
if (! (perm & PERMISSION_TRIGGER_ANIMATION)) // remember to use bitwise operators!
{
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION); // request permissions from the owner.
}
}
else
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation(gAnimName); // stop the animation
}
}
}
}
ну в общем все работает, но как только аватар садится на предмет с анимацией ,то анимация в обуви отключается.Как сделать чтоб анимация в обуви работала постоянно?
Анимацию грузил в сл с максимальным приоритетом. Спасибо!

#6 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 17.12.09 - 20:52

Э... Shah, тута судя по фсему надо приделывать функцию, которая перезапускает анимацию после того, как аватар садится.
В анимацонном движке СЛ таких глюков пруд-пруди (из за этого, по большей части хорошо написанные АО-шки какраз и стоют многа, а халявной инфы по ним нема почти), рекомендую распотрошить какую-нить фрибиковую АО, там "затычки" таких глюков имеютцо, правда сперва прийдётсця понять, что в них за что отвечает...

Просто, когда аватар садится на анимайионный мячик или какое-то кресло с прописанной в кресле своей анимацией она заменяет собой предыдущую, тоесть твою, и надо выключить новую анимацию и поновой запустить старую (правда и это не всегда прокатывает).

К сожалению АО-скриптер из мну мягко говоря никакой, поэтому самодельный код привести никакой нимагу, за неимением такового... :)

P.S. По ходу, написание урока по скриптовой логике придётцо форсировать...
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#7 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 17.12.09 - 21:22

Да уж тогда придется полностью разобраться со скриптами, надеюсь ты поможешь, иначе сложно будет бороться с итальяшками в производстве обуви)

#8 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 18.12.09 - 12:11

лучше не отключать новую анимацию..а запустить свою, потому как сидящая ава может просто встать... проверить момент посадки легко
timer()
	{
		string test=llGetAnimation(llGetOwner());
		if(test=="Sitting") llSay(0,"я сел");
	}

это работает всегда, даже если запущен другой АО

#9 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 18.12.09 - 15:08

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

#10 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 19.12.09 - 12:23

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

В вашем скрипте это должно выглядеть пимерно так:

[color="#008000"]string[/color] gAnimName = "block L-foot";

[color="#0000FF"]default[/color]
{
	[color="#008000"]state_entry[/color]()
	{
		[color="#8B0000"]llRequestPermissions[/color]([color="#8B0000"]llGetOwner[/color](), [color="#0000FF"]PERMISSION_TRIGGER_ANIMATION[/color]); 
		[color="#8B0000"]llStartAnimation[/color](gAnimName); 
		[color="#8B0000"]llSetTimerEvent[/color](0.3);[color="#FF8C00"] //УСТАНАВЛИВАЕМ ТАЙМЕР НА 0.3 СЕКУНДЫ[/color]
	}

	[color="#008000"]on_rez[/color]([color="#008000"]integer[/color] param)
	{
		[color="#8B0000"]llResetScript[/color]();
	}
	
[color="#008000"]timer[/color]()   [color="#FF8C00"]//Сопсна зубин таймер[/color]
    {
        [color="#008000"]string[/color] test=[color="#8B0000"]llGetAnimation[/color]([color="#8B0000"]llGetOwner[/color]()); [color="#FF8C00"]//Локальная переменная test равна имени текущей анимации[/color]
	[color="#0000FF"]if[/color](test=="Sitting") {[color="#8B0000"]llStartAnimation[/color]([color="#2F4F4F"]"имя нужной анимации (в данном случае аним для ботинок)"[/color]);}
        [color="#FF8C00"]//Если название анимации в test равно "sitting", то включить вашу добавочную анимацию.[/color]
    }
	
	[color="#008000"]attach[/color]([color="#008000"]key[/color] id)
	{
		[color="#008000"]integer[/color] perm = [color="#8B0000"]llGetPermissions[/color]();

		[color="#0000FF"]if[/color] (id != [color="#0000FF"]NULL_KEY[/color])
		{
			[color="#0000FF"]if[/color] (! (perm & [color="#0000FF"]PERMISSION_TRIGGER_ANIMATION[/color])) 
			{
				[color="#8B0000"]llRequestPermissions[/color]([color="#8B0000"]llGetOwner[/color](), [color="#0000FF"]PERMISSION_TRIGGER_ANIMATION[/color]);
			}
		}
		[color="#0000FF"]else[/color]
		{
			[color="#0000FF"]if[/color] (perm & [color="#0000FF"]PERMISSION_TRIGGER_ANIMATION[/color])
			{
				[color="#8B0000"]llStopAnimation[/color](gAnimName);
			}
		}
	}
}

Придупредю, насчёт анимаций - в поле имени можно вписать и UUID анимации (отпадает необходимость пихать саму анимацию в прим, её тогда можно подгружать прямо из вашего инвентаря), правда с оговоркой ключ можно скопировать ТОЛЬКО ЕСЛИ АНИМАЦИЯ СДЕЛАНА ВАМИ И ИМЕЕТ ВСЕ ПРАВА. (копирование UUID анимации - правая кнопка => Copy Asset UUID)

З.Ы. Кстати, зуба привёл пример, который не всегда работает и может конфликтовать с уже надетым АО. Фсё-таки АО-шки попотрошить рекомендую, там более универсальные способы обхода имеются. А вот как они работают вам лучше догадаться самому, поскольку вы будете свою вещь продавать и мало кому интересно за спасибо делать скрипты, с которых их создателям ничего не перепадёт (я, если шо не оскорбляю, а констатирую, шо в нашем секторе многие любят получать что-то на хяляву) Так шо разбираем фриби-АО, смотрим, пытаемся понять, делаем. :)

Небольшая подсказочка - большинство ХОРОШИХ АО для определения и смены текущей анимации используют функцию integer llGetAgentInfo(key id)
А начать разбор АО-шек рекомендую с халявного Wet Ikon AO, поскольку в нём почти все действия и функции комментируюцо (правда llGetAgentInfo он не юзает).
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#11 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 19.12.09 - 15:08

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

#12 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 19.12.09 - 15:29

Э... я тута по большей части помогаю разобраться желающим с переплетениями скриптовых LSL-дебрей и окрендюляю местных старичков мастеров. И только!

Насчёт фактической помощи конкретно по чьим-то скриптам - помогать не буду, поскольку занят собственным проэктом.
Не следует воспринимать как намёк на "вход в долю" вышеприведённого мною,
скорее даже лучше воспринимать это, как мою личную неприязнь к людям, которые свято уверенны, что если им кто-то помог один раз, то можно надоедать вопросами сколь угодно долго и считать шо кто-то вам всегда объяснит непонятный момент с понятной лично вам точки зрения (таких товарищей в нашем секторе по пальцам одной руки пересчитать можно, причём 1-2 пальца ещё и останутся). Урок по логике скора выложу.

Изучай логику АО и постарайсця определить где именно проскакивает глюк с целью его устранения.

З.Ы. Прозьба не обижаться на меня за такой ответ, поскольку в данный момент дописываю второй урок параллельно с поиском и объяснением наиболее сложных заковырок для третьего урока + делаю скрипт фуря, уж извиняюсць, но разорваться на части категорицски нимагу. =Х.х=
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#13 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 19.12.09 - 15:50

Я понимаю, спасибо, жду урока.

#14 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 20.12.09 - 17:08

View PostAxon Dezno, on 19.12.2009, 12:23, said:

З.Ы. Кстати, зуба привёл пример, который не всегда работает и может конфликтовать с уже надетым АО.

Еще раз: РАБОТАЕТ ВСЕГДА.
По поводу моего примера, его немного надо модифицировать, потому что если не полениться проверить как он работает, то можно увидеть что он будет запускать анимацию через каждые N секунд (тем более с интервалом 0,3 сек). То есть просто не даст ей доиграть. Уважаемый Axon прежде чем писать скрипты, проверяйте их на работу.

#15 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 20.12.09 - 18:32

Проверял, НЕ ВСЕГДА - если проритет анимации в "сидении" более высокий, то анимация в этом скрипте периодически конфликтует, к тому же не всегда необходимо заменять анимацию, как вы привели, частенько нужно её комбинировать с уже запущеной (сопсна с этой проблемой товарисч Shah и столкнулся), а для таких сопряжений простой перезапуск анимации, какраз не желателен и надо писать некое подобие АО в котором всякие подобные глюки решаются не перезаписывающей долбёжкой в таймере, а другими путями. Тем более, как сказано выше "таймерная долбёжка" не помогла.

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

Во! Точна! Зуба, приведите прям тут товарищу пример сопряжения в обуви анимации с приоритетом 1 и анимации сидения на чём-то с приоритетом от 2 и ниже?
Уверен вам это раз плюнуть сделать, и такие простенькие скрипты для вас особой ценности не представляют. =^___^=
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#16 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 21.12.09 - 12:07

все АО исходный код которых я видел, а среди них есть и коммерческие, работают именно так как я написал. Все прекрасно видится и прекрасно заменяется и ничего не конфликтует. Что бы привести пример конкретно в его случае надо иметь его анимацию на руках, чтобы посмотреть что там происходит. С чего ты взял что идет замена? ведь не указан СТОП для прошлой анимации, а идет запуск новой. Только ей нормально запуститься не дают, потому что запускают раз в 0,3 сек :)

#17 Shah

Shah

    Новичок на форуме

  • Пользователи
  • PipPip
  • 9 posts
  • Пол:М

Posted 21.12.09 - 19:15

Анимацию грузил с самым высоким приоритетом,ну и соответственно зациклил.Zuba если я правильно понял нужно по эксперементировать с временем в таймере?

#18 Amaro

Amaro

    Новичок на форуме

  • Пользователи
  • PipPip
  • 36 posts
  • Основной цех:Строители
  • Второй цех:Скриптеры
  • SL Status: 

Posted 22.12.09 - 04:23

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

#19 Axon Dezno

Axon Dezno

    Участник

  • Писатели
  • PipPipPip
  • 216 posts
  • Пол:М
  • Основной цех:Строители
  • Второй цех:Художники
  • SL Status: 

Posted 22.12.09 - 13:07

О как! =О.О=

Мдя... [два мегаскриптера-ФГМщика "курнули в сторонке" =О.х=] Вынос ТРУПпы состоялсця...
X________________________________________________x

Хто хочет - ищет способ, хто не хочет - ищет причину.

#20 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 22.12.09 - 23:39

пришел папа и всех поставил на место :) ну или мама..кому как нравится.




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users