1 · Crea l'oggetto
In Firestorm: Build → un cubo o prim. Tasto destro → Edit → scheda Content. Qui vive lo script.
Creator · LSL · OSSL
Workflow
In Firestorm: Build → un cubo o prim. Tasto destro → Edit → scheda Content. Qui vive lo script.
Content → New Script. Si apre l'editor LSL integrato. Cancella il template default e incolla un esempio da questa pagina.
Save + Compile (Ctrl+S). “Script saved and compiled” = ok. Errori di sintassi? Il simulatore ti indica riga e motivo.
Tocca l'oggetto, cammina nel sensor, prova permessi e dialog. Sandbox o tua land: testa prima del deploy pubblico.
Fondamentali
Architettura ZoneNations
Funzioni os* e llHTTP* avanzate dipendono dalla regione. Reference completa sul sito ZoneNations — teleport, NPC, debug, differenze LSL/OSSL.
Esempi copiabili
// Esempio 1 — Saluto al tocco
// Metti lo script in un oggetto rezzato nel mondo (non indossato).
default
{
touch_start(integer total_number)
{
llSay(0, "Ciao! Sono uno script su ZoneNations.");
}
}// Esempio 3 — Sensor: saluta chi entra nel raggio
default
{
state_entry()
{
llSensorRepeat("", NULL_KEY, AGENT, 8.0, PI, 3.0);
}
sensor(integer detected)
{
integer i;
for (i = 0; i < detected; ++i)
llRegionSayTo(llDetectedKey(i), 0, "Benvenuto in questo spazio.");
}
no_sensor() {}
}// Esempio 6 — HTTP verso API esterna (Mono consigliato)
string URL = "https://example.com/api/ping";
default
{
touch_start(integer n)
{
llHTTPRequest(URL, [HTTP_METHOD, "GET"], "");
}
http_response(key id, integer status, list meta, string body)
{
llOwnerSay("HTTP " + (string)status + ": " + llGetSubString(body, 0, 120));
}
}// Esempio 2 — Menu dialog
integer CHANNEL = -98765;
default
{
touch_start(integer n)
{
key who = llDetectedKey(0);
llListen(CHANNEL, "", who, "");
llDialog(who, "Scegli un'azione:", ["Info", "Teleport", "Chiudi"], CHANNEL);
}
listen(integer channel, string name, key id, string msg)
{
if (msg == "Chiudi") return;
if (msg == "Info")
llRegionSayTo(id, 0, "Script dialog su ZoneNations.");
if (msg == "Teleport")
llRegionSayTo(id, 0, "Configura qui la tua destinazione.");
}
}// Esempio 4 — Animazione su richiesta (permesso richiesto)
string ANIM = "sit";
default
{
touch_start(integer n)
{
key av = llDetectedKey(0);
llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);
}
run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
llStartAnimation(ANIM);
}
}// Esempio 5 — OSSL (OpenSimulator): nota sul terreno
// Funziona solo se la regione abilita OSSL. Verifica con il proprietario.
default
{
touch_start(integer n)
{
key av = llDetectedKey(0);
osNoticeDebug("Tocco da " + llKey2Name(av));
llRegionSayTo(av, 0, "OSSL attivo su questa regione.");
}
}Pattern professionali
Usa canali negativi casuali (es. -1 - (integer)llFrand(999999)) per evitare collisioni con altri script in regione.
Niente while(true) senza llSleep. Usa llSetTimerEvent per tick regolari. Risparmi memoria e lag sim.
Resetta solo quando serve. state_entry() riparte da zero: reimposta listener e sensor.
Copy/Modify/Transfer influenzano vendita e regalo. Script in oggetto NoModify non è editabile dal compratore.
llSleep minimum ~0.02s. Batch di operazioni: raggruppa llSay in un messaggio invece di dieci in un frame.
llOwnerSay per log privati. osNoticeDebug solo in regioni che lo permettono. Rimuovi log verbosi prima del rilascio.
Strumenti
Reference sul sito
Tipi, sintassi, catalogo eventi, funzioni ll* per categoria, costanti e note Mono.
Estensioni os*, teleport, NPC, HTTP, sicurezza e differenze rispetto a LSL puro.
Prossimo passo