Reference · ZoneNations

Documentazione LSL

Linden Scripting Language: il linguaggio degli script inworld su ZoneNations. Tutto ciò che serve per leggere, scrivere e debuggare — eventi, funzioni ll*, tipi e regole Mono — resta qui sul sito.

Sintassi

Tipi e struttura

LSL è tipizzato: integer, float, string, key, vector, rotation, list. Un script ha un blocco default { } e stati opzionali state nome { }. Le funzioni si chiamano con llNome(arg, ...). Liste: [a, b, c] — indice base 0.
integer / float
Numeri interi e decimali. TRUE=1, FALSE=0. Cast: (integer)llFrand(10). ATTENTION: divisione intera tronca.
string / key
string per testo; key per UUID (avatar, oggetto, texture). llGetKey(), NULL_KEY, llGenerateKey(). Confronto key con ==.
vector / rotation
vector per posizione e colori RGB. rotation per quaternioni: llEuler2Rot(). Operatore * per rotazioni composte.
list
Contenitore eterogeneo. llGetListLength, llList2String, llDumpList2String. Stride in llListenRemove. Non concatenare in loop infiniti (Mono aiuta ma non elimina i limiti).
Controllo flusso
if/else, while, do-while, for, jump label, return. state foo e llSetState("bar"). Ogni evento termina prima del prossimo (no multithreading).

Esempio struttura

LSL
Scheletro script
default
{
    state_entry()
    {
        llOwnerSay("Avviato.");
    }
    touch_start(integer n)
    {
        llSay(0, "Toccato da " + llKey2Name(llDetectedKey(0)));
    }
}

state off
{
    state_entry() { llSetText("OFF", <1,0,0>, 1); }
    touch_start(integer n) { llSetState("default"); }
}

Eventi

Catalogo eventi LSL

Il simulatore invoca eventi al tuo script. Definisci solo quelli che usi. Parametri tipici indicati sotto.
state_entry() — avvio / reset
Chiamato quando lo script entra nello stato corrente (rez, reset, cambio state). Setup: llListen, llSensorRepeat, llSetTimerEvent, llSetText.
touch_start(integer num_detected)
Qualcuno clicca l'oggetto. llDetectedKey(0), llDetectedName(0). Per oggetti attachati: touch_start su HUD/root prim.
listen(integer channel, string name, key id, string msg)
Dopo llListen. channel deve corrispondere. id = chi ha parlato. Registra listen in state_entry o prima di dialog.
sensor(integer num) / no_sensor()
Dopo llSensor o llSensorRepeat. llDetectedKey(i), llDetectedName(i), llDetectedPos(i). no_sensor se nessuno nel raggio.
timer()
Ogni llSetTimerEvent(seconds). llSetTimerEvent(0) ferma. Non usare intervalli < 0.05s senza motivo.
collision_start(integer n) / collision_end(integer n)
Fisica: oggetti/avatar entrano o escono dal volume di collisione del prim.
land_collision_start(integer n) / land_collision_end(integer n)
Avatar tocca o lascia il terreno sotto il prim (non flying collision).
changed(integer change)
Bitmask: CHANGED_INVENTORY, CHANGED_COLOR, CHANGED_LINK, CHANGED_OWNER, CHANGED_REGION, CHANGED_TELEPORT, CHANGED_SHAPE.
on_rez(integer start_param)
Oggetto rezzato da inventory o da altro script. start_param passato da llRezObject.
link_message(integer sender, integer num, string str, key id)
Comunicazione tra prim linkati. llMessageLinked(target, num, str, id). NUM e str liberi per protocollo.
run_time_permissions(integer perm)
Risposta a llRequestPermissions. Test: if (perm & PERMISSION_TRIGGER_ANIMATION).
http_response(key request_id, integer status, list metadata, string body)
Risposta a llHTTPRequest. status 200 = OK. metadata include HTTP_* headers.
dataserver(key query_id, string data)
Risposta llGetNotecardLine, llRequestSimulatorData (legacy). Preferire HTTP dove possibile.
email(string subject, string name, key id, string message)
llEmail in ingresso se configurato sulla grid (uso raro su ZoneNations).

Funzioni ll*

Reference per categoria

llSay(channel, msg) — chat locale canale 0=pubblico llRegionSay(channel, msg) — tutta la regione llRegionSayTo(key, channel, msg) — messaggio privato a un avatar llOwnerSay(msg) — solo proprietario llInstantMessage(key user, string message) — IM llDialog(key avatar, string text, list buttons, integer channel) llTextBox(key avatar, string message, integer channel) llSetText(string text, vector color, float alpha) — floating text sul prim

Costanti

Costanti usate ogni giorno

Permessi oggetto
PERMISSION_COPY, PERMISSION_MODIFY, PERMISSION_TRANSFER — risultato llGetInventoryPermMask e permessi oggetto.
CHANGED_*
CHANGED_INVENTORY (1), CHANGED_COLOR (2), CHANGED_SHAPE (4), CHANGED_SCALE (8), CHANGED_TEXTURE (16), CHANGED_LINK (32), CHANGED_ALLOWED_DROP (64), CHANGED_OWNER (128), CHANGED_REGION (256), CHANGED_TELEPORT (512), CHANGED_ALL (1023).
Canali chat
0 = chat pubblica locale. Canali negativi per listen privati. DEBUG_CHANNEL per llOwnerSay di debug.
PI e ZERO_VECTOR
PI = 3.14159265, TWO_PI, DEG_TO_RAD, RAD_TO_DEG. ZERO_VECTOR = , NULL_KEY = zero UUID.
CLICK_ACTION_*
CLICK_ACTION_NONE, TOUCH, SIT, BUY, PAY — llGetClickAction / llSetClickAction per prim interattivi.

Mono su ZoneNations

Runtime compilato

ZoneNations esegue script in Mono (.NET): più veloce di LSO legacy. Supporta JSON nativo, liste grandi con più margine, HTTP robusto. Evita comunque loop infiniti senza llSleep e stringhe che crescono senza limite (stack-heap collision). Compila sempre prima del deploy.