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
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
llSensor(string name, key id, integer type, float range, float arc)
llSensorRepeat(...) — ripete ogni interval sec
llSensorRemove() — ferma repeat
AGENT, ACTIVE, PASSIVE, SCRIPTED, NONPHYSICAL — bitmask type
llGetAgentInfo(key id) — bit IS_FLYING, IS_ONLINE, etc.
llGetObjectDetails(key id, list params) — pos, rot, owner...
llRequestPermissions(key agent, integer permissions)
PERMISSION_TRIGGER_ANIMATION, PERMISSION_TAKE_CONTROLS, PERMISSION_CONTROL_CAMERA
llStartAnimation(string name) / llStopAnimation(string name)
llSitTarget(vector offset, rotation rot) — sedia
llUnSit(key agent)
llTeleportAgent(key agent, vector dest, vector look_at) — solo se permesso land
llGetOwner() / llKey2Name(key) / llGetUsername(key)
llGetPos() / llGetRot() / llSetPos(vector) / llSetRot(rotation)
llSetColor(vector color, integer face)
llSetTexture(string texture, integer face)
llSetAlpha(float alpha, integer face)
llSetScale(vector size) / llGetScale()
llDie() — elimina oggetto
llResetScript() / llResetOtherScript(string name)
llRezObject(string inventory, vector pos, rotation rot, integer param)
llGiveInventory(key avatar, string item)
llPlaySound(string sound, float volume)
llLoopSound(string sound, float volume)
llStopSound()
llTriggerSound(string sound, float volume)
llPreloadSound(string name)
llSetLinkMedia(integer link, integer face, list params) — URL su face
llGetParcelFlags(vector pos) — PARCEL_* constants
llOverMyLand() — prim sopra land del owner
llGetLandOwnerAt(vector pos)
llParcelMediaCommand(list command, list values)
llGetRegionName() / llGetRegionFlags() — REGION_FLAG_*
llHTTPRequest(string url, list parameters, string body)
HTTP_METHOD, HTTP_MIMETYPE, HTTP_BODY_MAXLENGTH, HTTP_VERIFY_CERT
llGetFreeMemory() / llGetUsedMemory() — Mono
llJson2List(string json) / llList2Json(string typ, list values) — Mono
llParseString2List(string src, list separators, list spacers)
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.
