Данный набор скриптов позволяет задавать расположение и размер примов из чертежа в формате SVG (XML) и в общем-то представляет из себя обычный «rezzer».
Для работы скрипта необходимо:
- создать прим с именем box
- поместить скрипт box в прим box
- создать прим с именем rezzer
- поместить скрипт rezzer в прим rezzer
- поместить notecard с преобразованным SVG в прим rezzer
- поместить прим box в прим rezzer
запускается щёлчком
Для редактирования SVG вместо Illustrator-а можно использовать бесплатный Inkskape.
Пример чертежа в формате SVG
Конвертер из SVG в формат rezzer-а
Скрипт rezzer
string gName;
integer gLine = 0;
key gQueryID;
integer chn = 777;
list params;
string primid;
default {
touch_start(integer foo) {
gName = llGetInventoryName(INVENTORY_NOTECARD, 0);
gQueryID = llGetNotecardLine(gName, gLine);
}
dataserver(key query_id, string data) {
if (query_id == gQueryID) {
if (data != EOF) {
params = llParseString2List(data, ["|"], []);
primid = llList2String(params, 5);
llRezObject("box", llGetPos() + <0, 0, 1.0>, ZERO_VECTOR, ZERO_ROTATION, (integer)primid);
llSleep(1);
llShout(chn, data);
++gLine;
gQueryID = llGetNotecardLine(gName, gLine);
}
}
}
}
Скрипт box
integer chn = 777;
list params;
string primid;
float height = 6.0;
default
{
on_rez(integer param)
{
llSetObjectName((string)param);
llListen(chn, "", NULL_KEY, "");
}
listen(integer channel, string data, key id, string message)
{
params = llParseString2List(message, ["|"], []);
primid = llList2String(params, 5);
if (primid == llGetObjectName()) {
llSetPrimitiveParams([PRIM_POSITION,
llGetPos() +
<llList2Float(params, 0), llList2Float(params,1), 0>,
PRIM_SIZE,
<llList2Float(params, 2), llList2Float(params, 3), height>,
PRIM_COLOR, ALL_SIDES, (vector)llList2String(params, 4), 1.0]);
llRemoveInventory(llGetScriptName());
}
}
}
Идея: Kisa Naumova










