LlSetLinkAlpha/ru

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Общая информация

Function: llSetLinkAlpha( integer link, float alpha, integer face );

Если в связанном объекте существует примитив под номером link, задать стороне под номером face прозрачность alpha.

• integer link Номер примитива (0: одиночный примитив, 1: корневой примитив, >1:дочерние примитивы) или флаг типа LINK_*
• float alpha от 0.0 (прозрачный) до 1.0 (непроницаемый) (0.0 <= alpha <= 1.0)
• integer face Номер стороны или ALL_SIDES

Если номер стороны face равен ALL_SIDES, то функция срабатывает для всех сторон примитива.

Флаг и значение Описание
LINK_ROOT 1 для корневого примитива[1]
LINK_SET -1 для всех примитивов
LINK_ALL_OTHERS -2 для всех других примитивов
Флаг и значение Описание
LINK_ALL_CHILDREN -3 для всех дочерних примитивов (т.е. все, кроме корневого)
LINK_THIS -4 для примитива, в котором находится данный скрипт

Предостережения

  • Если номер стороны примитива face указывает на сторону, которой не существует, функция не срабатывает (при этом не выводится сообщение об ошибке).
All Issues ~ Search JIRA for related Bugs

Примеры

Заставляет весь объект исчезнуть на 5 секунд <lsl> default {

   touch_start(integer detected)
   {
       llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);
       llSetTimerEvent(5.0);
   }
   timer()
   {
       llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);
       llSetTimerEvent(0.0);
   }

} </lsl> Делает определенные примитивы в связанном объекте (линке) видимыми/прозрачными по команде из чата. Задайте каждому примитиву уникальное имя. <lsl> list PrimList; default {

    state_entry()
    {
         integer NumLink = llGetNumberOfPrims();
         llListen(37,"","","");
         integer i;
         for (i=1;i<=NumLink;++i)
         {
              PrimList += llGetLinkName(i); 
         }
    }
    listen( integer channel, string name, key id, string msg)
    {
         list temp = llCSV2List(msg);
         integer len = llGetListLength (temp);
         string Alpha = llToUpper(llList2String(temp,0));
         integer i;
         for (i=1;i<len;++i)
         {
               string ThisPrim = llStringTrim(llList2String(temp,i),STRING_TRIM);
               integer idx = llListFindList(PrimList, [ThisPrim]);
               if (~idx)
              {
                   if (Alpha == "SHOW")
                   {
                        llSetLinkAlpha(idx+1, 1.0, ALL_SIDES); //Ex:  SHOW,plate,spoon, napkin  <---- makes named prims visible
                   }
                   else if (Alpha == "HIDE")
                   {
                        llSetLinkAlpha(idx+1,0.0, ALL_SIDES); //Ex:  HIDE, butter knife, glass, fork, spoon  <--- makes named prims transparent
                   }
              }
              else if (llToUpper(ThisPrim) == "ALL")
              {
                   if (Alpha == "SHOW")
                   {
                        llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);  //Ex:  SHOW, ALL  <--- makes the entire linkset visible
                   }
                   else if (Alpha == "HIDE")
                   { 
                        llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);  //Ex:  HIDE, All  <--- makes the entire linkset transparent
                   }
              }
                  
         }
    }
    changed (integer change)
    {
         if (change & CHANGED_LINK)
         {
              llResetScript();
         }
    }
}</lsl>

Заметки

Номера примитивов в объекте

Каждый примитив в связанном объекте имеет свой порядковый номер. Для получения доступа к определенному примитиву внутри объекта необходимо знать его номер. Номера имеют также аватары, которые сидят на данном объекте.

  • Если объект состоит из одного примитива, и на нём не сидит аватар, то номер этого (корневого) примитива равен 0 (не 1).
  • Однако, если объект состоит из нескольких примитивов и/или на нём сидит аватар, то номер корневого примитива равен 1.

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

Вывод количества примитивов и аватаров

Для вывода количества примитивов и сидящих аватаров есть две функции.

  • llGetNumberOfPrims() - Возвращает количество примитивов и сидящих аватаров.
  • llGetObjectPrimCount(llGetKey()) - Возвращает только количество примитивов в объекте. Не работает (возвращает всегда 0) для объектов, прикрепленных к аватару (т.н. аттачментов).

<lsl>integer GetPrimCount() { //Всегда возвращает только количество примитивов в объекте

   if(llGetAttached())//Объект прицеплен к аватару
       return llGetNumberOfPrims();//т.к. на аттачментах нельзя сидеть, возвращает только примитивы
   return llGetObjectPrimCount(llGetKey());//только число примитивов для не аттачмента

}</lsl>Более подробно смотрите в статье llGetNumberOfPrims.

См. также

События

•  changed CHANGED_COLOR

Функции

•  llGetLinkNumber Возвращает номер в линке примитива, в котором находится скрипт.
•  llGetAlpha Возвращает значение прозрачности примитива, в котором находится скрипт.
•  llSetAlpha Задаёт прозрачность примитива, в котором находится скрипт.
•  llGetColor Возвращает вектор цвета примитива, в котором находится скрипт.
•  llSetColor Задаёт цвет примитива, в котором находится скрипт.
•  llSetLinkColor
•  llSetLinkTexture
•  llSetLinkPrimitiveParams

Статьи

•  Translucent Color

Углублённые заметки

Search JIRA for related Issues

Сноски

  1. ^ LINK_ROOT не работает с объектами, состоящими из одного примитива!

Описания

function void llSetLinkAlpha( integer link, float alpha, integer face );