3°lezione

L’arte dello script #2 (Lezione #2 ad Indire, by salahzar)..

18 nov. 2009

nuovo-11

http://slurl.com/secondlife/INDIRE/125/40/23

Anche questa volta leggetevi il piccolo glossario qui di seguito e inoltre fate un giro a questo landmark per imparare qualcosa sugli script (un minimo di inglese purtroppo è necessario 🙁 )

http://slurl.com/secondlife/Horsa/46/243/85

Inoltre siete caldamente invitati a seguire questi corsi tradotti da me in italiano sul wiki ufficiale di secondlife:

http://wiki.secondlife.com/wiki/Getting_started_with_LSL/it
http://wiki.secondlife.com/wiki/A_Basic_LSL_Tutorial/it

Ci vediamo mercoledì 18 Novembre ore 21.15 ad Indire.

PS: ricordatevi la lezione di ripasso di stasera, ore 22 sull’arte del building.

Glossario:

Default:
E’ lo stato iniziale in cui inizia lo script (Equivalente al “main” di altri programmi). Il 90% degli script ha un solo stato che si chiama appunto default {}

Evento:
Gli script rimangono sempre in attesa di eventi. Vi sono diversi tipi di eventi:
* touch quando l’oggetto viene toccato
* sensor quando si “sente” nelle vicinanze un oggetto o un avatar
* listen quando qualcuno parla in chat oppure nei canali “muti” positivi o negativi
* data_server quando arrivano eventi dai server linden (lettura notecard, richiesta informazioni su avatar)
* linked_message quando si ricevono messaggi da altri script

Funzione (linden):
E’ una operazione elementare sempre prefissata da ll (elle-elle), esempio:
* llSleep(5);
* llSetTimerEvent(5);
Le funzioni accettano una sequenza di parametri e ritornano un valore

Funzione (utente)
* E’ una sequenza di istruzioni con parametri definiti dal programmatore.
string myf(integer x)
{
llSay(0,”Mi hai chiamato con “+x);
return “OK”;
}

Hello Avatar:
Cfr New Script. Script minimale.

New Script:
E’ lo script minimale che viene creato con “New Script”, contiene uno state_entry e un evento touch che risponde quando viene toccato.

Parametri:
Sono i valori dati ad una funzione. Esempio
float quadrato(float x)
{
return x*x;
}

Reset:
Gli script possono essere “fatti ripartire” da 0

Script:
E’ uno speciale tipo di oggetto nell’inventory che può essere creato nell’inventory e mosso dentro il content di un’oggetto oppure creato come “New Script” nell’oggetto da animare.

State_entry:
E’ l’evento che viene attivato al reset di uno script oppure all’ingresso in un nuovo stato.

Tipo Variabili
*integer valori numerici interi
*float valori con la virgola
* string nomi valori alfanumerici
* vector es. <1,1,1>
* rotation es. <1,1,1,1>
* list es. [ “ciao”, 1, 1.0, <1,1,1> ]

_____________________________________________________________________

0. Corso base di script.
==============

Scopo di questo piccolo corso è di darvi una idea iniziale su come si costruiscono degli script da zero,
ottenendo alcuni esempi già interessanti:

1. Hello Avatar
2. Ciao Avatar
3. Struttura dello script base
4. Permessi
5. Salvataggio nell’inventory
6. Ti ho sentito (llListen)
7. Cambio colore (variabili)
8. Cambio colore (stati)
9. Scrittura Muta (llSetText)
10. Regalo maglietta

1  Come si crea uno script. Esempio pratico.
===========================

* Costruite un box Cliccate con il tasto destro del mouse sul terreno compare un menu circolare
* Cliccate su “create” in alto a dx,compare una bacchetta magica
* Cliccate da qualche parte per terra complimenti: avete creato un box

1.1 Proprietà

Vi è comparsa anche una scheda di proprietà con tante linguette, “General”, “Object”, “Features”, “Content”.

Oppure una versione più piccola. Se avete la versione piccola cliccate sul tasto More per avere la versione completa con le linguette.

1.2 Cambiate il nome.

Cambiate il “Name:” sotto la linguetta “General” con qualcosa di significativo tipo: primo oggetto scriptato.

1.3 Cliccate sulla linguetta Content E cliccate su New Script. Questa operazione crea effettivamente un nuovo script che si chiama New Script. In basso a sinistra vedete lo script che “parla” dicendo

“Primo Script: Hello Avatar!”

1.4 Complimenti: avete fatto il vostro primo script.

2. Le prime modifiche
=============

2.1 Fate doppio click sull’icona New Script. Si apre una finestra con il seguente contenuto:

default
{
state_entry()
{
llSay(0, “Hello, Avatar!”);
}

touch_start(integer total_number)
{
llSay(0, “Touched.”);
}
}

2.2 E adesso studiamo questo primo programma. Notate che potete modificare il programma. Muovetevi con il mouse su:

* llSay(0,”Hello, Avatar!”);

e cambiatelo con

* llSay(0,”Ciao, Avatar!”);

poi premete il tasto Save che si sarà illuminato.

2.3 Il programma non appena salvato visualizzerà immediatamente la modifica in basso a sinistra.

“Primo Script: Ciao Avatar!”

Mentre vi avrà detto mentre compilava e salvava nella finestra di editing:

Compile succesful, saving…
Save complete.

2.4 Se toccate l’oggetto in basso a sinistra comparirà:

Primo Script: Ciao Avatar

Come vedete c’è una precisa relazione fra quello che scrivete nella finestra di editing e quello che l’oggetto fa quando viene resettato oppure toccato.

3.0 Struttura del programma di base
======================

* State_entry: azione fatta al reset
* Touch_start: azione fatta quando toccato

Lo script fa essenzialmente 2 cose nei due blocchi componenti:

* llSay(0,qualcosa);

è il comando da eseguire. Nell’editor se vi soffermate su una istruzione vi viene fornito un aiuto di cosa fa il comando.

3.1 llSay(): nome del comando

Say in inglese vuol dire parla. I comandi nello script sono l’equivalente dei verbi della grammatica. Dopo ogni comando fra parentesi tonde mettiamo i parametri, cioè gli oggetti usati dal comando. Nel nostro caso llSay() ha due oggetti:

* Il canale su cui si parla (per adesso vale sempre 0)
* La frase da visualizzare. Notate che le scritte sono in verde e racchiuse fra apicetti “”.

Il linguaggio di programmazione di SecondLife si chiama lsl2 (seconda versione del linguaggio lsl). Presto vi sarà anche la versione mono. Assomiglia al linguaggio Java o C. Ma niente paura: è semplice (o almeno facciamo in modo che sia semplice per voi). Analizziamo ancora alcuni elementi della finestra di editing:

3.2 Running

Un programma che scrivete senza errori è normalmente in “running” vale a dire è eseguito da SecondLife. Se volete che l’oggetto si spenga, vale a dire non parli più nè reagisca ai tocchi, basta che clicchiate questo box in modo che non sia + running.

3.3 Reset

Il pulsante di reset è molto importante:

Serve per spegnere e riaccendere lo script in modo da ripartire da 0, un po’ come spegnere e riaccendere il computer quando comincia a fare stranezze. Proprio sopra il “running” c’è un tasto che se premuto vi fa vedere l’elenco di tutte le funzioni del linguaggio che potete utilizzare.

Nel corso base vi faremo vedere solo alcune delle funzioni di lsl2. Le altre le vedrete nei corsi intermedi o avanzati.
4. Permissions
=========

Dal tab content, cliccando lo script con il tasto destro potete cambiarne le proprietà: (Oppure anche aprirlo, rinominarlo per dargli un nome più intelligente rispetto a “new script”)

Cliccando su properties potete cambiare il nome dello script e la sua descrizione.

Next Owner can:
x Modify
x Copy
x Transfer

Potete anche cambiare i permessi del vostro script. Nell’esempio lo script quando venduto o regalato ad altri avatar, potrà da loro solo essere rivenduto o regalato, ma non copiato o modificato. Per semplicità, per ora mettete la x su modify, copy, e transfer.

5. Salvataggio nell’inventory
==================

Quando siete soddisfatti del vostro oggetto scriptato,lo selezionate con il tasto destro e fate take per mettervelo nell’inventory.

5.1. A questo punto dovreste vedervelo nel vostro inventory nella categoria Objects: tasto destro e property per cambiare le permissions: può essere necessario rimettere i diritti di modify / copy. Noioso ma è così

6. Ti ho sentito
=========

Abbiamo visto come fare un oggetto che

* Parla
* Sente quando è toccato

In questa nuova sessione faremo un oggetto che “ascolta” quello che viene detto sulla chat.

Per fare ciò create un altro box Create un new script come detto nella lezione precedente

Copiate il seguente frammento nello state_entry:

* llListen(0,””,NULL_KEY,””);  // registra sul canale 0

e il seguente nuovo evento dopo il touch:

listen(integer channel, string name, key id, string str)
{
llSay(0,name+” ha detto “+str);
}

Il programma risultante sarà come segue:

default
{
state_entry()
{
llListen(0,””,NULL_KEY,””);
}

touch_start(integer total_number)
{
llSay(0, “Touched.”);
}

listen(integer channel, string name, key id, string str)
{
llSay(0,name+” ha detto “+str);
}
}

Dopo il salvataggio,  chiunque parla sulla chat farà  apparire:

Object: Salahzar Stenvaag ha detto xxxxxxxx

Il nome Object appare perchè non avete cambiato il nome dell’oggetto (fatelo subito in modo che la scritta sia più significativa).

Notate come la llSay riesca a comporre la stringa in uscita a partire dai parametri che le sono forniti. Nel nostro caso riceve il nome di chi sta parlando e la frase che sta dicendo e con il + le unisce insieme a formare una frase esplicita.
Cambio colore

7. CAMBIO COLORE (variabili)
==================
Faremo un oggetto scriptato che cambia colore ogni volta che viene toccato. Come vedete qui sotto usiamo diverse variabili: un intero per tenere a mente di che colore siamo e poi tre vettori per rappresentare i diversi colori.

integer iSTATO=1;
vector ROSSO=<1,0,0>;
vector VERDE=<0,1,0>;
vector BLU=<0,0,1>;

default
{
state_entry()
{
llSay(0, “Toccami per cambiare colore!”);
}

touch_start(integer total_number)
{
if(iSTATO==1)
{
iSTATO=2;
llSetColor(ROSSO,ALL_SIDES);
return;
}
if(iSTATO==2)
{
iSTATO=3;
llSetColor(VERDE,ALL_SIDES);
return;
}
if(iSTATO==3)
{
iSTATO=1;
llSetColor(BLU,ALL_SIDES);
return;
}
}
}

8. CAMBIO COLORE: stati
===============
La stessa cosa si può fare con gli stati. Alcuni li preferiscono: con gli stati si evita di avere variabili globali. Ma il programma rischia di essere parecchio più lungo

default
{

state_entry()
{
llSay(0,”Toccami per cambiare colore”);
}
touch_start(integer total_number)
{
state red;
}
}
state red
{
state_entry()
{
llSetColor(<1,0,0>,ALL_SIDES);
}
touch_start(integer total_number)
{
state green;
}
}
state green
{
state_entry()
{
llSetColor(<0,1,0>,ALL_SIDES);
}
touch_start(integer total_number)
{
state blu;
}

}
state blu
{
state_entry()
{
llSetColor(<0,0,1>,ALL_SIDES);
}
touch_start(integer total_number)
{
state red;
}
}

9. Scrittura muta
===========

Questo script rimane in ascolto e poi visualizza come intestazione muta sopra l’oggetto la persona che ha detto qualcosa e quello che ha detto.

default
{
state_entry()
{
llSay(0, “Ripeto quello che dici come scritta”);
llListen(0,””,NULL_KEY,””);
}

listen(integer channel, string name, key id, string str)
{
llSetText(name+”n”+str,<1,1,1>,1);
}

}

10. Regalo una maglietta
================

Se avete una maglietta copy/transfer nel vostro inventory, trascinatela nel content del vostro oggetto e poi scrivete il seguente programmino:

default
{
state_entry()
{
llSay(0, “Toccami e ti regalo una maglietta”);
}

touch_start(integer total_number)
{
llGiveInventory(
llDetectedKey(0),
llGetInventoryName(INVENTORY_CLOTHING,0)
);
}
}

Toccando l’oggetto vi viene consegnata la maglietta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *