Показаны сообщения с ярлыком инвентарь. Показать все сообщения
Показаны сообщения с ярлыком инвентарь. Показать все сообщения

суббота, 26 марта 2011 г.

Разбираем старый хлам (скрипт-кладовщик)

Вы давно вдумчиво заглядывали в свой инвентарь?

Я периодически заглядываю и ужас меня берет ледяными пальцами за самое естество. Ведь чем больше объектов лежит у нас в инвентаре, тем большие лаги это вызывает. Почему так происходит, позвольте не объяснять в рамках данной статьи - это отдельная «наука» о хранении предметов в SL в принципе... Сегодня мы просто попытаемся как-то систематизировать и даже заархивировать то барахло, которое нам жалко выбросить, но и место оно занимает, собирая виртуальную пыль.

Ни для кого не секрет, что можно создать банальный кубик и в его инвентарь напихать довольно много всяческих причиндалов: скины, текстуры, скрипты и т.п. В общем все, что может лежать в инвентаре, может быть сохранено в кубике. Таким образом, имея некоторое количество предметов в инвентаре, можно заменить их на один, поместив их все в его инвентарь.


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

Например, ящик с оружием, который называется... «Weapons». Внезапно, не правда ли? ;) Или вот они, коробочки наши, стоят, а где и что - нужно нажать Ctrl-3, ткнуть каждую мышом, чтобы хотя бы прочитать, как они называются.

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

Итак, что же должен уметь наш скрипт? Как минимум, он должен уметь:
  1. Динамически отображать название коробки in-world
  2. Динамически же отображать количество содержимого
  3. Выдавать список своего содержимого владельцу
  4. Самостоятельно распаковываться в инвентарь в случае необходимости
Конечно же, скрипт может уметь ещё много чего, но сейчас не будем загружать себе голову, реализуем только эти основные функции, которые мы для себя определили.

Для этого нам в основном понадобятся следующие функции встроенного скриптового языка LSL:
  1. llSetText()
  2. llGetObjectName()
  3. llGetInventoryNumber()
  4. llDialog()
  5. llListen()
  6. llListenRemove()
  7. llSetTimerEvent()
  8. llDetectedKey()
  9. llGetOwner()
  10. llOwnerSay()
  11. llGetScriptName()
  12. llGiveInventoryList()

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

Итак, сделаем для начала, чтобы наша коробочка могла при помощи всплывающего текста обозначать своё название. Для этого определяем пользовательскую функцию setName() и будем потом её вызывать, когда нам понадобится изменить надпись.


Теперь нужно научить нашу коробку подсчитывать, какое количество объектов есть у нее в инвентаре, а также следить за тем, не изменилось ли их количество, ну и сообщать нам при помощи всё того же всплывающего текста. Для этого мы несколько модернизируем нашу функцию.


Обратите внимание - мы вычитаем из содержимого переменной objNum единичку. Это сделано для того, чтобы корректно отображать количество инвентаря, ведь наш управляющий скрипт по сути также является объектом инвентаря, но как бы «не считается».

Если мы что-то добавляем или удаляем из инвентаря объекта, то происходит событие changed(), которым мы воспользуемся для вызова нашей пользовательской функции и пересчета количества содержимого инвентаря.


Для проверки добавим в инвентарь нашей коробки какой-нибудь объект, произойдет событие, которое вызовет определённую ранее функцию и она отобразит корректные данные. Хочу обратить внимание на то, что возвращаемое событием число является битовым полем, из которого при помощи оператора ветвления мы вычисляем бит нужного нам события - изменения инвентаря.

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

Для этого воспользуемся событием on_rez(), возникающим всегда, когда вы что-то достаёте из своего «кармана» и кладете на землю. Нужно лишь просто при возникновении этого события еще раз вызвать нашу функцию setName() ;)


Иными словами, вы меняете название коробки в её свойствах, кладёте ее «в карман», а когда в следующий раз достанете, то подписана она будет уже тем именем, которое вы ей дали.

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


Мы использовали событие touch(), возникающее каждый раз, когда кто-то ткнет мышом в объект. Из данных, возвращаемых этим событием мы получаем ключ кликнувшего аватара и сравниваем с ключем владельца коробки. Если все совпадает, выдаем владельцу менюшку.

И здесь хочу обратить внимание на конструкцию с использованием события timer(). При вызове меню мы инициализируем обратный отсчет времени, равный 30 секундам и начинаем слушать канал чата. Когда 30 секунд истекают, мы сообщаем об этом владельцу коробки и перестаем слушать чат. Делается это для того, чтобы снизить нагрузку на сим и, как следствие, уменьшить лаги, которых и без того хватает в избытке от гламурных кис с их АО'шками и любителей всевозможных псевдозащитных гаджетов.

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

И вот она, финишная прямая - осталось дописать обработчики кнопок меню. Начнем с выдачи списка предметов. Для этого определим еще одну функцию, которую назовем... Да чего мудрствовать лукаво, мы же не Ed7v Resident с его cunt'овской философией - пусть функция называется listInventory().


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

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


Послушали, поняли, что говорят нам и говорит тот, кого нужно слушать, распознали, какую кнопку нажали и - ответили нужным действием, пока что прочитали в приват владельцу коробки её содержимое. Вообще давать служебную информацию в личку владедельцу - правило хорошего тона. Когда объекты загаживают чат флудом есть путь неверный и ведет на тёмную сторону Силы, помните об этом.


Всё, играем коду, выходим на прямой - обрабатываем распаковку в красивую папочку буквально одной волшебной функцией.


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


Вот, собственно, всё, что я хотел сегодня показать и рассказать. Описанный скрипт же можно изготовить самостоятельно, руководствуясь этой статьёй, либо приобрести всего за L$150 на маркетплейсе, ибо вещь полезная и в хозяйстве сгодится если не любому, то каждому.

суббота, 8 ноября 2008 г.

Одежда вашего аватара. Инвентарь.

В SL существуют следующие типы стандартной одежды:


Нижнее бельё:

Undershirt - майка;
Underpants - трусы;
Socks - носки/чулки.

Верхняя одежда:
Shirt - кофта;
Pants - брюки;
Jacket - жакет;
Skirt - юбка;
Gloves - перчатки.

Обувь:
Shoes - ботинки

Каждый тип одежды имеет свою иконку в Инвентаре, специально для того, чтобы вам было проще и быстрее отличить тип вещи и выбрать нужную.

А также существует нестандартная одежда, состоящая из примов (объектов). Такая одежда имеет иконку объекта и описание в название предмета.

Открыв Инвентарь, вы увидите папку Clothing (Одежда), здесь располагаются созданные и уже имеющиеся вещи. Вы также можете перемещать сюда папки и вещи из главной категории, чтобы не потерять их.

Для того, чтобы надеть какую-либо вещь или предмет, откройте инвентарь и кликните правой кнопкой мышки по ним и выберите Wear; чтобы снять вещь используйте функцию того же меню - Take off, если же вы хотите снять предмет - выберите Detach from Youself.



Вы также можете снимать вещи не используя Инвентарь, нажмите на себя правой кнопкой мышки и выбрать в меню Take off, далее вам предлагается выбрать, будете ли вы снимать одежду или хотите отцепить предмет. Попробуйте использовать эту функцию, она намного удобнее, чем искать надетую вещь в инвентаре.

ВНИМАНИЕ! Если вы потеряли вещь, не можете её найти, забыли как она называется и где вы её сохранили, и поиск в инвентаре не даёт никаких результатов, то, скорее всего вам смогут помочь Фильтры. Особенно если у вас уже большой багаж вещей и предметов, и вы не знаете, как с ним справится. Рекомендую использовать Фильтры. Очень просто и удобная функция позволяет находить вещи по типу и времени создания/появления в вашем инвентаре.



Задайте правильные параметры, и вы обязательно найдёте то, что искали, с точностью до часа!

Несколько слов о том, как создавать собственную одежду или редактировать уже имеющуюся. В настройках Внешности, выберите закладку Shirt (кофта) и нажмите
Create New Shirt, создайте новую кофту. Вы можете создавать новые вещи не используя режим Appearance (Внешность), а использовать верхнее меню инвентаря - Create. Тот
же принцип создания вы найдёте в других закладках редактора, таких как: Pants, Shoes, Socks и других.



Выбирайте цвет, текстуру и фасон одежды, используя настройки. Для этого вам предлагается палитра цветов и стандартные текстуры. Вы также можете задать цвет вручную или воспользоваться пипеткой для того, чтобы сделать несколько вещей одного цвета, загружать собственные текстуры и создавать уникальную одежду.



После того, как ваша одежда готова, не забудьте сохранить её, дав ей такое название, по которому её не сложно будет найти. Обычно в названии указывают тип вещи (Shirt, Pants, Jacket и т.д).

В некоторых случаях, у вас нет необходимости одевать по одной вещи из папки, если вы, к примеру, хотите стать кем-то ещё, просто соберите в одну папку все составляющие образа (фигуру, кожу, глаза, волосы и одежду), и переодевайтесь в один клик, нажав на папку и выбрав Rеplace to Outfit.

Стоит обратить особое внимание на примовую одежду, особенно на обувь, имеющую нестандартную форму ноги, например - туфли на каблуках. Обувь такого типа всегда сопровождается формой ноги, которую обязательно стоит надевать, если вы хотите выглядеть нормально. В остальном, одежда, состоящая из примов одевается и снимается
также, с помощью функции Wear и Detach from Yourself из вашего инвентаря.

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

В заключение хочу сказать, что в SL вы сможете быть тем, кем вы хотите (в том числе и самим собой), возможности SL позволяют превратиться даже в самое необычное существо. Всё, что для этого нужно это ваша фантазия и усидчивость для создания образа.


Несколько вредных советов

1. Если вы хотите изменить одежду, часть одежды или поправить примовые волосы, используйте стенд (просто скопируйте его в инвентарь и перетащите на землю. Вставайте.)

2. Если вы передаёте свою одежду или вещи другим людям, не забудьте позаботиться о правах на них. Для этого нажмите правой кнопкой мышки на вещь и выберите Properties (Свойства), найдите настройки Next owner can и выставите необходимые права: Modifly (Редактировать), Copy (Копировать).

3. Если вы редактируете свои вещи (предметы), перетащив их на землю, изменяете их части или текстуры, не забудьте за собой убрать, забрав или удалив свои вещи.

4. Если вы решили купить кожу (skin) всегда пользуйтесь возможностью DEMO (пробный вариант), тем самым убережёте себя от траты денег на абсолютно не подходящую кожу. Помните, что кожа на картинке это всего лишь кожа, и шейп фигуры туда не входит, поэтому не нужно требовать от продавца, чтобы он сделал вас такой/таким же как на картинке.

5. Некоторые части тела требуют коррекции при смене фигуры, имейте ввиду, что на реалистичной коже брови, губы и некоторые другие части нарисованы, и вы не сможете изменить их форму по своему усмотрению, но сможете изменить фигуру, тем самым скорректировав внешний вид.

6. Если вы купили вещи в магазине, заплатили деньги, а они пропали, и вы испробовали все попытки их найти, не стесняйтесь обратиться к продавцу/автору товара с просьбой помочь. Чаще всего продавец пойдёт вам на встречу и даст нужный товар, проверив ваш платёж.

© Marie Sims