Грид Сервис - картинка профиля игрока

Здравствуйте дорогие друзья.

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

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

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

При объявлении пользователя скрипт в СЛ показывает на объекте картинку его профиля. Это осуществляется с помощью одного из компонентов Грид-Сервиса СЛ. Работает примерно так:

1 - Определяется UUID аватара пользователя: uuid = llDetectedKey(0);

2 - На основании данного UUID делается запрос к профилю пользователя через СЛ сервис:

llHTTPRequest( URL_RESIDENT + uuid,[HTTP_METHOD,"GET"],"");

где URL_RESIDENT = "http://world.secondlife.com/resident/";

3 - В ответе содержится инфа о пользователе в сжатом виде. Но она отображается в виде страницы сайта, в которой куча всего. Нас же интересует конкретно UUID текстуры в СЛ, в которой содержится картинка профиля нужного нам пользователя. Для этого мы парсим код ответа (в первых трех строках события http_response) извлекая из нее нужную нам инфу:

http_response(key req,integer stat, list met, string body)
    {
        string meta_find = "<meta name=\"imageid\" content=\"";
        integer meta_pos =  llSubStringIndex(body, meta_find) + llStringLength(meta_find);
        string texture = llGetSubString(body, meta_pos, meta_pos + 35);
        llSetTexture(texture, ALL_SIDES); 
    }

В четвертой строке устанавливаем на прим текстуру из полученного нами UUIDa текстуры: llSetTexture(texture, ALL_SIDES);

В Гриде нашей сборки нет подобного сервиса, или я его просто не нашел.

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

string URL_RESIDENT = "http://virtsl.ru/grid_service/profile_image.php?user_uuid=";
key uuid;

default
{
    touch_start(integer num_detected)
    {
        uuid = llDetectedKey(0);
        llHTTPRequest( URL_RESIDENT + (string)uuid,[HTTP_METHOD,"GET"],"");
    }
    
    http_response(key req,integer stat, list met, string body)
    {
        string texture = body;
        llSetTexture(texture, ALL_SIDES); 
    }
}

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

+2
RSS
09:05 (отредактировано)
Супер любимый, я всегда знала, что ты лучший программер и легко справишься с этим, да ещё и упростил) kiss