Advertisement
salahzar

SL Mentori corso Notecard e HUD SpeakEasy 06052008

Feb 16th, 2020
522
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. Come si fa a leggere una notecard ed esempio di HUD per lezioni/conferenze. (BOZZA)
  2.  
  3. Requisiti: conoscere script base (come fare uno script, llListen e touch basici)
  4.  
  5. 0. Introduzione:
  6. In secondlife è spesso importante riuscire a leggere una notecard da uno script esempi interessanti sono:
  7. - lettori di testi (presentazioni conferenze, corsi lezioni etc)
  8. - lettori di poesie (con presentazione su llSetText)
  9. - configurazione di script
  10. - configurazione di teleport
  11. e molti altri
  12.  
  13. 1. Come funziona:
  14. Concettualmente le notecard sono documenti che vengono letti riga per riga dallo script.
  15. Purtroppo il meccanismo di lettura non è banalissimo ed implica una successione di passi.
  16.  
  17. Si usano nell'ordine le seguenti funzioni:
  18. - llGetNotecardLine
  19. - dataserver
  20.  
  21. Il meccanismo è il seguente:
  22. 1a\ all'inizio si cerca di leggere la linea 0 della notecard llGetNotecardLine. (Torna un handle che serve più tardi).
  23.  
  24. 1b\ Dopo un certo intervallo di tempo l'evento dataserver viene sollecitato, con la riga letta oppure EOF per indicare che la notecard è finita.
  25.  
  26. 1c\ L'evento dataserver deve conoscere il numero di linea che si stava leggendo, l'handle ottenuto dalla llGetNotecardLine (variabili globali).
  27.  
  28. 1d\ il dataserver usa la linea di messaggio e la usa in qualche modo (ad esempio mettendola in una lista) se è diversa da EOF
  29.  
  30. 1e\ il dataserver aumenta il numero di linea e ripete il comando llGetNotecardLine per leggere la riga successiva.
  31.  
  32. 2. Ecco il programma generico per la lettura di una notecard
  33.  
  34. integer line; // variabile globale
  35. key query; // variabile globale
  36. string notecardname="CORSO"; // variabile globale
  37.  
  38. readnotecard(){
  39. line = 0;
  40. query = llGetNotecardLine(notecardname, line);
  41. }
  42. default
  43. {
  44. state_entry()
  45. {
  46. readnotecard();
  47. }
  48. touch(integer num){
  49. readnotecard();
  50. }
  51. dataserver(key id, string data)
  52. {
  53. if(data != EOF ){
  54.  
  55. // fai qualcosa con la linea contenuta in data
  56. llOwnerSay("Ho letto la riga "+(string)line);
  57. llOwnerSay("Contenuto: "+data);
  58.  
  59. line++;
  60. query=llGetNotecardLine(notecardname,line);
  61. }
  62. }
  63. }
  64.  
  65. 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.
  66.  
  67.  
  68. 3a\ Descriviamo brevemente cos'è un HUD:
  69. 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).
  70. Per il resto si comporta come un oggetto normalissimo salvo appunto che viene indossato in una posizione specifica del vostro schermo.
  71.  
  72. Il vantaggio è che non occupa prims nella sim e che lo vedete solo voi.
  73.  
  74.  
  75. 3b\ Il programma dell'HUD
  76.  
  77. integer pointer=0;
  78. string cardName="speakme";
  79.  
  80. default {
  81.  
  82. attach(key attached)
  83. {
  84. if (attached != NULL_KEY)
  85. {
  86. llOwnerSay("SpeakEasy HUD attached to the top-left of your screen, " + llKey2Name(attached) );
  87. llSetObjectName(llKey2Name(attached));
  88. pointer=0;
  89. }
  90. else
  91. {
  92. llOwnerSay("SpeakEasy HUD detaching..." );
  93.  
  94. }
  95. }
  96.  
  97. touch_start(integer num)
  98. {
  99.  
  100. llGetNotecardLine(cardName, pointer);
  101. }
  102.  
  103. changed(integer change)
  104. {
  105. if((change & CHANGED_OWNER) || (change & CHANGED_INVENTORY))
  106. {
  107. llResetScript();
  108. }
  109. }
  110.  
  111. dataserver(key id, string data)
  112. {
  113. if(data==EOF)
  114. {
  115. llOwnerSay("[ you have reached the end of the current notecard - resetting to first line... ]");
  116. pointer=0;
  117. }
  118. else
  119. {
  120. if(data!="")
  121. {
  122. llSay(0, data);
  123. ++pointer;
  124. }
  125. else
  126. {
  127. ++pointer;
  128. llGetNotecardLine(cardName, pointer);
  129. }
  130.  
  131. }
  132. }
  133. }
  134.  
  135. L'esempio mostra anche alcune cose interessanti:
  136.  
  137. a\ come gestire quando l'HUD viene indossato e disindossato
  138. evento attach(key avatar)
  139.  
  140. b\ come fare sì che l'oggetto "parli" a nome proprio
  141. llSetObjectName(llKey2Name(attached));
  142.  
  143.  
  144. c\ come fare sì che l'oggetto si resetti ogni volta che cambia l'owner oppure che cambi l'inventory
  145. changed(integer change)
  146. {
  147. if((change & CHANGED_OWNER) || (change & CHANGED_INVENTORY))
  148.  
  149. d\ come leggere la riga successiva al tocco dell'HUD
  150.  
  151. e\ la lettura della notecard come visto precedentemente
  152.  
  153. 4. Avvertenze.
  154.  
  155. 4a. Si possono leggere soltanto notecard che NON hanno oggetti interni (tipo landmark, textures ecc).
  156.  
  157. 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.
  158.  
  159.  
  160. Riconoscimenti:
  161.  
  162. l'HUD visto è stato inizialmente scritto da Janor Slichter (idea), Dudeney Ge (scrittore), presso EduNation (69,48,22);
  163. Ho anche disponibile una versione che consente di tornare indietrodi selezionare più notecard.
  164. Distribuibile a richiesta.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement