LlGetLinkKey/ru

From Second Life Wiki
Jump to navigation Jump to search

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

Function: key llGetLinkKey( integer link );

Возвращает ключ примитива под номером link в связанном объекте.

• integer link Номер примитива (0: одиночный примитив, 1: корневой примитив, >1:дочерние примитивы) или флаг типа LINK_*
Флаг и значение Описание
LINK_ROOT 1 для корневого примитива[1]
Флаг и значение Описание
LINK_THIS -4 для примитива, в котором находится данный скрипт

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

All Issues ~ Search JIRA for related Bugs

Примеры

Поместите этот скрипт в в одиночный примитив, в примитив в связанном объекте, в примитив с сидящими аватарами, чтобы увидеть, как работает данная функция по сравнению с llGetKey, llGetLinkNumber, llGetNumberOfPrims, LINK_ROOT, и т.д.. <lsl>// Return the name of a link num else the empty string. string getLinkNumName(integer link) {

   if (LINK_THIS == link) return "LINK_THIS";
   if (LINK_ALL_CHILDREN == link) return "LINK_ALL_CHILDREN";
   if (LINK_ALL_OTHERS == link) return "LINK_ALL_OTHERS";
   if (LINK_SET == link) return "LINK_SET";
   if (LINK_ROOT == link) return "LINK_ROOT";
   return "";

}

// Say the key of each linked prim. default {

   state_entry()
   {
       integer theLink = llGetLinkNumber();
       
       key theLinkKey = llGetKey();
       key owner = llGetOwner();
       key creator = llGetCreator();
       
       // Visit each link num.
       
       integer link;
       integer primmed = llGetNumberOfPrims();
       for (link = -5; link <= (primmed + 5); ++link)
       {
           key linkKey = llGetLinkKey(link);
           
           // Detail the key at the link num.
           
           string line = (string) linkKey; // large constant width
           
           if (linkKey == owner) line += " llGetOwner";
           if (linkKey == creator) line += " llGetCreator";
           if (linkKey == theLinkKey) line += " llGetKey";
           
           // Detail the link num.
           
           line += " @ " + (string) link;
           line += " " + getLinkNumName(link);
           if (link == theLink) line += " llGetLinkNumber";
           if (link == primmed) line += " llGetNumberOfPrims";
           
           // Say the detail if fun.
           
           if (linkKey != NULL_KEY)
           {
               llOwnerSay(line);
           }
       }
       
       // Always count the linked prims.
       
       llOwnerSay((string) primmed + " llGetNumberOfPrims");
       llOwnerSay("OK");
   }
}</lsl>

Заметки

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

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

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

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

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

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

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

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

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

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

См. также

Функции

•  llGetLinkNumber Возвращает номер в линке примитива, в котором находится скрипт.
•  llGetKey
•  llGetLinkName

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

All Issues

~ Search JIRA for related Issues
   llGetLinkKey returns the wrong result when passed LINK_THIS

Сноски

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

Описания

function key llGetLinkKey( integer link );