Terza Lezione di LSL

Terza Lezione di LSL

Terza lezione di LSL alla Land del Forum!

Abbiamo continuato il discorso iniziato alla seconda lezione di LSL: la Comunicazione.

Ovvero come fa un oggetto ad ascoltare su di un canale ed a rispondere. Abbiamo creato due oggetti: il primo che ascolta su un canale, il secondo che appena toccato parla sullo stesso canale.

In questo modo abbiamo simulato la comunicazione tra i due oggetti. Il progetto consiste in due oggetti distinti, ognuno con il proprio script, che comunicano tra di loro.

Il primo script inizializza un listener tramite la chiamata a funzione llListen sul canale 1234567890. Al listen non vengono applicati filtri, quindi qualunque agent può interagire con esso.
Dentro l’evento listen è stata inserita una chiamata a funzione llSay su canale PUBLIC_CHANNEL (ovveo il canale 0), per avere un feedback del messaggio ascoltato.

integer CHANNEL = 1234567890;

default {
    state_entry() {
        key owner = llGetOwner();
        llSetText("Oggetto che riceve di "+llKey2Name(owner),<0.0,1.0,0.0>,1.0);
        llListen(CHANNEL,"",NULL_KEY,"");
    }

    listen(integer channel, string name, key id, string message) {
        llSay(PUBLIC_CHANNEL,name+" mi ha detto \""+message+"\" sul canale "+(string)channel);
    }

    changed(integer change) {
        if(change & CHANGED_OWNER) llResetScript();
    }
}

Il secondo script si occupa di attendere un click dal proprietario dell’oggetto per inviare nel canale prestabilito la stringa “NOME_AGENT mi ha toccato!”. In questo modo, questa stringa verrà intercettata dallo script del primo oggetto!

integer CHANNEL = 1234567890;

default {
	state_entry() {
		key owner = llGetOwner();
		llSetText("Oggetto che invia di "+llKey2Name(owner),<1.0,0.0,0.0>,1.0);
	}

	touch_start(integer total_number) {
		key agent = llDetectedKey(0);
		if(agent==llGetOwner()) {
			llOwnerSay("Invio messaggio '"+llKey2Name(agent)+" mi ha toccato!' sul canale "+(string)CHANNEL);
			llSay(CHANNEL, llKey2Name(agent)+" mi ha toccato!");
		}
		else {
			llInstantMessage(agent,"Non puoi toccare il mio oggetto!");
		}
	}

	changed(integer change) {
		if(change & CHANGED_OWNER) llResetScript();
	}
}

In tutti e due gli script è stata fatta un’aggiunta: l’evento changed. Questa è stata fatta per gestire un eventuale cambio di owner. In questo caso, infatti, l’intero script viene resettato per permettere la ridefinizione dei listener.

Possiamo provare il funzionamento del progetto in due modi:

  • Cliccando sul secondo oggetto;
  • Parlando sul canale (nel nostro caso ci basta scrivere nella chat “/1234567890 Prova!”).

Alla prossima lezione!

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.