● objekt = linkset jednoho nebo více primů spojených dohromady. Linkset vždy obsahuje tzv. root prim a případně další child primy.
● každý prim má inventory (neplést s inventory avatara), který může obsahovat skripty a další předměty (textury, jiné objekty, notecardy atd.)
● Na Wiki najdeme strukturovaně uspořádaný seznam předdefinovaných LSL funkcí včetně povinných vstupních parametrů a výstupních hodnot
Výpis všech funkcí pro objekt najdete zde: https://wiki.secondlife.com/wiki/
Seznam některých zajímavých funkcí na které se podíváme:
- llGetKey / llGetOwner
- llGetObjectName / llGetObjectDesc
- llSetObjectName / llSetObjectDesc
- llGetScale / llSetScale
- llGetAlpha / llSetAlpha
- llGetColor / llSetColor
- llGetTexture / llSetTexture
- llSetText / llSetSitText / llSetTouchText
key llGetKey();
key llGetOwner();
VSTUP: nic
VÝSTUP: UUID objektu či vlastníka objektu, ve kterém běží skript
default { touch_start(integer pocet) { key UUIDobjektu; UUIDobjektu = llGetKey(); //Zde načteme UUID objektu llOwnerSay( (string)UUIDobjektu); } }
default { touch_start(integer pocet) { key UUIDvlastnika; UUIDvlastnika = llGetOwner(); // Zde načteme UUID vlastníka objektu llOwnerSay( (string)UUIDvlastnika); } }
string llGetObjectName();
string llGetObjectDesc();
VSTUP: nic
VÝSTUP: jméno a popis objektu, ve kterém běží skript
default { touch_start(integer pocet) { string JmenoObjektu = llGetObjectName(); string PopisObjektu = llGetObjectDesc(); llOwnerSay( JmenoObjektu + " - " + PopisObjektu); } } Zvláště funkce <strong>llGetObjectDesc();</strong> se může hodit když nechcete dát práva na skript ale potřebujete umožnit novému majiteli změnit ve skriptu nějakou tu proměnou.
vector llGetScale();
VSTUP: nic
VÝSTUP: vektor, jehož ‹X, Y, Z› složky obsahují rozměry primu, ve kterém běží skript
llSetScale(vector rozmery);
VSTUP: vektor, jehož ‹X, Y, Z› složky obsahují nové
žádané rozměry primu, ve kterém běží skript
VÝSTUP: nic
vector OrigRozmery; default { state_entry() { OrigRozmery = llGetScale(); // uloží originální rozměry do proměnné llSetTimerEvent(3.0); // aktivuje event timer kazde 3 sekundy } timer() { vector NahodneRozmery = ‹llFrand(2.0), llFrand(2.0), llFrand(2.0)›; // vybere nahodne rozmery 0-2 metry llSetScale(NahodneRozmery); } touch_start(integer pocet) { llSetTimerEvent(0.0); // zastavi casovac llSetScale(OrigRozmery); //nastaví orig rozměr } }
float llGetAlpha(integer strana);
VSTUP: číslo strany primu, kde chceme hodnotu zjistit
VÝSTUP: průhlednost strany jako reálné číslo od 0.0 (zcela průhledný) do 1.0 (zcela neprůhledný)
POZNÁMKA: číslo strany záleží na typu primu a způsob osekání; nejsnažší způsob, jak číslo zjistit, je zapnout Debug menu (Ctrl+Alt+D), vybrat texturu na jedné straně a stisknout Ctrl+Shift+Alt+T.
llSetAlpha(float jak, integer strana);
VSTUP: jak: nové průhlednost strany jako reálné číslo od 0.0 (zcela průhledný) do 1.0 (zcela neprůhledný) strana: číslo strany primu, kde chceme hodnotu alpha nastavit
VÝSTUP: nic
POZNÁMKA: místo čísla strany je možné použít konstantu ALL_SIDES, daná alpha se pak nastaví na všech stranách primu
vector llGetColor(integer strana);
VSTUP: číslo strany primu, na které chceme zjistit barvu
VÝSTUP: barva strany jako vektor ‹X, Y, Z›, kde jednotlivé složky X, Y, Z reprezentují RGB (Red-GreenBlue neboli červená-zelená-modrá) složky barvy
POZNÁMKA: X, Y, Z jsou reálná čísla v rozmezí 0.0 až 1.0 a určují procentuální zastoupení dané složky barvy. Například barva zapsaná jako ‹1.0, 0.5, 0.0› znamená 100% červené, 50% zelené a 0% modré. Výsledkem tedy bude oranžová barva.
llSetColor(vector barva, integer strana);
VSTUP: barva strany jako vektor ‹X, Y, Z›, číslo strany primu, kterou chceme obarvit
VÝSTUP: nic
POZNÁMKA 1: místo čísla strany je možné použít konstantu ALL_SIDES, daná alpha se pak nastaví na všech stranách primu
POZNÁMKA 2: snadný převod z klasického RGB (0-255) se udělá pomocí výpočtu: vector color = ‹R, G, B› / 255.0;
default { touch_start(integer pocet) { // vybere náhodnou barvu vector barva = ‹llFrand(1.0), llFrand(1.0), llFrand(1.0)›; // pomocné proměnné pro FOR cyklus integer cyklus; vector stmivani; for (cyklus = 0; cyklus ‹= 10; cyklus = cyklus+1) { stmivani = barva * ((float)cyklus/10); llSetColor(stmivani, ALL_SIDES); llSleep(0.1); } } }
string llGetTexture(integer strana);
VSTUP: číslo strany primu, kde chceme zjistit aktuální texturu
VÝSTUP: jméno textury (pokud je v inventory primu) nebo UUID textury (v ostatních případech)
POZNÁMKA: existují speciální konstanty pro některé standardní textury SL, například
● TEXTURE_BLANK – bílá neprůhledná
● TEXTURE_DEFAULT – standardní dřevěná textura
● TEXTURE_TRANSPARENT – zcela průhledná textura
llSetTexture(string textura, integer strana);
VSTUP: textura: jméno nebo UUID textury, číslo strany primu, na které chceme nastavit texturu, možno použít konstantu ALL_SIDES
VÝSTUP: nic
Příkladů na funkce llGetTexture / llSetTexture si užijeme až, až takže nyní vynechávám 🙂
llSetText(string text, vector barva,float alpha);
VSTUP: text: až 254 znaků textu, které se mají zobrazit nad objektem, barva: jakou barvou se má text vypsat, alpha: nakolik má být text průhledný
VÝSTUP: nic
POZNÁMKA: Text se umisťuje kousek (dle Z rozměru objektu) nad střed objektu, zůstává i po smazání skriptu, lze vynulovat jedině po spuštění: llSetText(“”,<0,0,0>,0)
default { state_entry() { llSetText("Ahoj lidi", ‹1.0, 0.5, 0.0›, 1.0); } }
Zdá se vám to složité? Zkuste si pohrát se skripty ke stažení a uvidíte že není.
Ale je pravda že pokud chceme upravit skriptem více vlastností najednou tak se toto co jste právě přečetli nepoužívá 🙂
LSL má na hromadnou editaci a změny objektu zvláštní komplexní funkci jménem:
llSetPrimitiveParams
ale na tu se právě pro její komplexnost koukneme příště.