Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Come si fa a leggere una notecard ed esempio di HUD per lezioni/conferenze. (BOZZA)
- Requisiti: conoscere script base (come fare uno script, llListen e touch basici)
- 0. Introduzione:
- In secondlife è spesso importante riuscire a leggere una notecard da uno script esempi interessanti sono:
- - lettori di testi (presentazioni conferenze, corsi lezioni etc)
- - lettori di poesie (con presentazione su llSetText)
- - configurazione di script
- - configurazione di teleport
- e molti altri
- 1. Come funziona:
- Concettualmente le notecard sono documenti che vengono letti riga per riga dallo script.
- Purtroppo il meccanismo di lettura non è banalissimo ed implica una successione di passi.
- Si usano nell'ordine le seguenti funzioni:
- - llGetNotecardLine
- - dataserver
- Il meccanismo è il seguente:
- 1a\ all'inizio si cerca di leggere la linea 0 della notecard llGetNotecardLine. (Torna un handle che serve più tardi).
- 1b\ Dopo un certo intervallo di tempo l'evento dataserver viene sollecitato, con la riga letta oppure EOF per indicare che la notecard è finita.
- 1c\ L'evento dataserver deve conoscere il numero di linea che si stava leggendo, l'handle ottenuto dalla llGetNotecardLine (variabili globali).
- 1d\ il dataserver usa la linea di messaggio e la usa in qualche modo (ad esempio mettendola in una lista) se è diversa da EOF
- 1e\ il dataserver aumenta il numero di linea e ripete il comando llGetNotecardLine per leggere la riga successiva.
- 2. Ecco il programma generico per la lettura di una notecard
- integer line; // variabile globale
- key query; // variabile globale
- string notecardname="CORSO"; // variabile globale
- readnotecard(){
- line = 0;
- query = llGetNotecardLine(notecardname, line);
- }
- default
- {
- state_entry()
- {
- readnotecard();
- }
- touch(integer num){
- readnotecard();
- }
- dataserver(key id, string data)
- {
- if(data != EOF ){
- // fai qualcosa con la linea contenuta in data
- llOwnerSay("Ho letto la riga "+(string)line);
- llOwnerSay("Contenuto: "+data);
- line++;
- query=llGetNotecardLine(notecardname,line);
- }
- }
- }
- 3. Speak Easy Utile HUD per tenere conferenze/lezioni (fornito come freebie opensource). La versione è quella ufficialmente trovata gratis o quasi su slexchange, ma modificata da me per rimuovere le righe vuote.
- 3a\ Descriviamo brevemente cos'è un HUD:
- Un HUD è un semplice oggetto di dimensioni molto piccole tipicamente x=1 cm (piatto), y e z da 10-40 cm. Viene visualizzato sul vostro schermo come se fosse su un visore di un pilota di volo (da lì viene il nome).
- Per il resto si comporta come un oggetto normalissimo salvo appunto che viene indossato in una posizione specifica del vostro schermo.
- Il vantaggio è che non occupa prims nella sim e che lo vedete solo voi.
- 3b\ Il programma dell'HUD
- integer pointer=0;
- string cardName="speakme";
- default {
- attach(key attached)
- {
- if (attached != NULL_KEY)
- {
- llOwnerSay("SpeakEasy HUD attached to the top-left of your screen, " + llKey2Name(attached) );
- llSetObjectName(llKey2Name(attached));
- pointer=0;
- }
- else
- {
- llOwnerSay("SpeakEasy HUD detaching..." );
- }
- }
- touch_start(integer num)
- {
- llGetNotecardLine(cardName, pointer);
- }
- changed(integer change)
- {
- if((change & CHANGED_OWNER) || (change & CHANGED_INVENTORY))
- {
- llResetScript();
- }
- }
- dataserver(key id, string data)
- {
- if(data==EOF)
- {
- llOwnerSay("[ you have reached the end of the current notecard - resetting to first line... ]");
- pointer=0;
- }
- else
- {
- if(data!="")
- {
- llSay(0, data);
- ++pointer;
- }
- else
- {
- ++pointer;
- llGetNotecardLine(cardName, pointer);
- }
- }
- }
- }
- L'esempio mostra anche alcune cose interessanti:
- a\ come gestire quando l'HUD viene indossato e disindossato
- evento attach(key avatar)
- b\ come fare sì che l'oggetto "parli" a nome proprio
- llSetObjectName(llKey2Name(attached));
- c\ come fare sì che l'oggetto si resetti ogni volta che cambia l'owner oppure che cambi l'inventory
- changed(integer change)
- {
- if((change & CHANGED_OWNER) || (change & CHANGED_INVENTORY))
- d\ come leggere la riga successiva al tocco dell'HUD
- e\ la lettura della notecard come visto precedentemente
- 4. Avvertenze.
- 4a. Si possono leggere soltanto notecard che NON hanno oggetti interni (tipo landmark, textures ecc).
- 4b. Non si può leggere una riga più lunga di 255 caratteri anche se la notecard la può contenere. In tal caso la riga viene troncata a 255 caratteri.
- Riconoscimenti:
- l'HUD visto è stato inizialmente scritto da Janor Slichter (idea), Dudeney Ge (scrittore), presso EduNation (69,48,22);
- Ho anche disponibile una versione che consente di tornare indietrodi selezionare più notecard.
- Distribuibile a richiesta.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement