LlSetLinkAlpha/ru

From Second Life Wiki
Jump to navigation Jump to search

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

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 указывает на сторону, которой не существует, функция не срабатывает (при этом не выводится сообщение об ошибке).

Примеры

Заставляет весь объект исчезнуть на 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 );