Object-to-object communication
#1
Posted 10.02.09 - 13:04
Суть в следующем: есть ХУД, и есть объект, который общается с этим ХУДом. Косяк в том, что общение происходит со всеми одинаковыми ХУДами и объектами в радиусе действия.
Вопрос: как заставить объект общаться только с ХУДом хозяина?
BeckHan Ra
#2
Posted 10.02.09 - 16:40
listen(integer chan, string name, key id, string mes)
{
if(id == llGetOwnerKey(id))
...
#3
Posted 11.02.09 - 01:04
llListen(1, "", llGetOwner(), "");
#4
Posted 11.02.09 - 12:56
...
if(llGetOwnerKey(id)==llGetOwner())
{
...
}
...
#5
Posted 20.02.09 - 13:25
djalex777, on 11.2.2009, 12:56, said:
...
if(llGetOwnerKey(id)==llGetOwner())
{
...
}
...Причем этот способ зачастую предпочтительнее. Есть такой тонкий нюанс. Вы создаете объект со скриптом, который инициализирует листен при инициализации стейта ключом овнера. Затем решаете его продать или дать кому-то попользоваться. В итоге другой пользователь имеет объект со скриптом, который считает овнером по-прежнему вас, а не своего действительного владельца, до тех пор, пока ему не сделают ресет. Так что или проверяйте овнера в листене, или обрабатывайте смену владельца =)
#6
Posted 20.02.09 - 13:37
Amaro said:
в итоге другой пользователь имеет объект со скриптом, который считает овнером по-прежнему вас, а не своего действительного владельца, до тех пор, пока ему не сделают ресет. Так что или проверяйте овнера в листене, или обрабатывайте смену владельца =)
...
...
on_rez(integer start_param)
{
if(start_param==0)llResetScript();
}
...
Теперь Reset происходит автоматически при, например, выкладывании объекта из инвентаря
#7
Posted 20.02.09 - 13:40
djalex777, on 20.2.2009, 13:37, said:
Amaro said:
в итоге другой пользователь имеет объект со скриптом, который считает овнером по-прежнему вас, а не своего действительного владельца, до тех пор, пока ему не сделают ресет. Так что или проверяйте овнера в листене, или обрабатывайте смену владельца =)
...
...
on_rez(integer start_param)
{
if(start_param==0)llResetScript();
}
...
Теперь Reset происходит автоматически при, например, выкладывании объекта из инвентаряК сожалению, некоторые достаточно сложные скрипты народ умудряется создать таким образом, что они не переживают ресета =) Из популярных, для примера - Puppeteer, да и Builders Buddy грешит... Да и логически - ресет всего скрипта при резе не всегда оправдан.
#8
Posted 20.02.09 - 13:52
Amaro said:
#9
Posted 20.02.09 - 14:10
djalex777, on 20.2.2009, 13:52, said:
Amaro said:
#10
Posted 10.08.09 - 17:12
Amaro, on 20.2.2009, 14:25, said:
djalex777, on 11.2.2009, 12:56, said:
...
if(llGetOwnerKey(id)==llGetOwner())
{
...
}
...Причем этот способ зачастую предпочтительнее. Есть такой тонкий нюанс. Вы создаете объект со скриптом, который инициализирует листен при инициализации стейта ключом овнера. Затем решаете его продать или дать кому-то попользоваться. В итоге другой пользователь имеет объект со скриптом, который считает овнером по-прежнему вас, а не своего действительного владельца, до тех пор, пока ему не сделают ресет. Так что или проверяйте овнера в листене, или обрабатывайте смену владельца =)
По моим наблюдениям, llGetOwner() показывает владельца СКРИПТА, а не предмета. Поэтому после передачи llGetOwner() будет выдавать key прежнего владельца. Поправьте меня, если не прав.
Поэтому надо или ресетить, или обрабатывать смену.
#11
Posted 10.08.09 - 21:52
То, что он после передачи показывает UUID предыдущего владельца - глюк. Лечится он только llResetScript() помещённым например в on_rez(integer x){}
Хто хочет - ищет способ, хто не хочет - ищет причину.
#12
Posted 04.09.09 - 14:22
alextmbv, on 10.8.2009, 18:12, said:
По моим наблюдениям, llGetOwner() показывает владельца СКРИПТА, а не предмета. Поэтому после передачи llGetOwner() будет выдавать key прежнего владельца. Поправьте меня, если не прав.
…
Axon Dezno, on 10.8.2009, 22:52, said:
…
llGetOwner() возвращает ID владельца объекта. http://lslwiki.net/l...akka=llGetOwner
Если скрипт не вложен в объект - скрипт является исключительно исходным кодом. Компиляция скрипта происходит в момент укладки в объект или вручную при открытии скрипта в объекте.
alextmbv, on 10.8.2009, 18:12, said:
Поэтому надо или ресетить, или обрабатывать смену.
Обрабатывать смену владельца - это в on_rez обновлять все переменные и перестартовать все функции (типа llListen), завязанные на ID владельца? Есть еще способы?
Axon Dezno, on 10.8.2009, 22:52, said:
То, что он после передачи показывает UUID предыдущего владельца - глюк. Лечится он только llResetScript() помещённым например в on_rez(integer x){}
А у кого-то llGetOwner реально выдавало ID предыдущего владельца? Просто интересно.
#13
Posted 07.09.09 - 14:21
делается через эвент changed, по параметру CHANGED_OWNER
default {
state_entry() {
llSay(0, "hello");
}
changed(integer change) { // something changed
if (change & CHANGED_OWNER) {
// здесь перезапускаем все функции, зависящие от ID владельца.
}
}
}
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users









