Advertisement
salahzar

Lezione Avanzata 2. Rezzing di oggetti (riunione) 22022008

Feb 16th, 2020
538
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. Lezione avanzata 2. Rezzer dinamico di oggetti: estrarre conigli dal cappello.
  2.  
  3. Una delle caratteristiche più impressionanti di Secondlife è la capacià di poter "creare" dal nulla degli oggetti, costruendo automaticamente delle strutture anche complesse.
  4.  
  5. E' un po' il mestiere del mago illusionista che riesce a far apparire gli oggetti dal nulla. In secondlife è possibile e reale!!!
  6.  
  7. Questo giochetto è sfruttato appieno da vari dispositivi come i temprezzers, i faux-rez, gli holodeck.
  8. Tutte cose che costano molti L$.
  9.  
  10. In questa lezione della durata di 1 ora impareremo le seguenti cose, elementari ma potenti:
  11.  
  12. 1\ come rezzare un oggetto ad una certa posizione
  13. 2\ come comunicare con gli oggetti appena creati
  14. 3\ come cambiare la loro posizione
  15. 4\ come controllare il loro ciclo di vita (metamorfosi, sparizione)
  16.  
  17.  
  18. 2.1. La teoria del rez.
  19.  
  20. Occorre avere UNA copia iniziale nel repository dell'oggetto master. Non è possibile creare un oggetto dal nulla.
  21.  
  22. Basta un UNICO oggetto (potrà poi eventualmente essere modificato a piacimento dopo con llSetPrimitiveParams).
  23.  
  24. L'oggetto deve essere almeno COPY/MODIFY. Se non fosse COPY sparirebbe dall'inventory dell'oggetto master al momento della creazione (e non ci sono modi per farlo tornare). Modify perchè dovete essere in grado di metterci dentro degli script di comunicazione.
  25.  
  26. 2.2 Primo esperimento.
  27.  
  28. * mettete un box chiamato "Oggetto", dentro la scatola master.
  29. * scrivete il seguente programmino nel "master":
  30. default
  31. {
  32. state_entry()
  33. {
  34. debug("Toccami per rezzare l'oggetto");
  35. }
  36. touch_start(integer count)
  37. {
  38. debug("deve rezzare l'oggetto Oggetto");
  39. llRezAtRoot(
  40. "Oggetto", // è il nome dell'oggetto nell'inventory
  41. llGetPos()+<0,0,1>, // rezzalo 1 metro sopra di me
  42. ZERO_VECTOR, // non si muove
  43. ZERO_ROTATION, // non è ruotato
  44. 0); // parametro iniziale
  45. }
  46. }
  47. Quando toccate l'oggetto, questo creerà dal nulla l'oggetto che ha dentro di sè.
  48.  
  49. Questo semplice esperimento già consente di fare molte osservazioni:
  50.  
  51. 2.3 IMPORTANTE:
  52.  
  53. * IMPORTANTE: ricordatevi di cancellare gli oggetti creati (poi in seguito spiegheremo come far sì che si cancellino da soli), evitando di produrre inutile pattume.
  54.  
  55. * IMPORTANTE: non si possono rezzare oggetti ad una distanza maggiore di 10 m dal master. Se lo dovete fare dovete dirgli di muoversi verso la loro destinazione attraverso una comunicazione fra oggetti.
  56.  
  57. 2.4 NOTE AVANZATE:
  58.  
  59. * NOTA per gli esperti: vi sono 2 funzioni apparentemente identiche: llRezAtRoot e llRezObject. La differenza appare quando fate apparire un linked set. llRezObject lo rezzerà posizionando il suo centro "gravitazionale", mentre llRezAtRoot centrerà il "root" dell'oggetto.
  60.  
  61. * NOTA potete rezzare anche degli oggetti "collassati" (coalesced), in quel caso però la rotazione DEVE essere nulla.
  62.  
  63. 2.5 COME FACCIAMO SPARIRE GLI OGGETTI?
  64.  
  65. Ci sono due sistemi. Il più semplice è quello di definire gli oggetti "temporary" nell'apposita scheda delle proprietà dell'oggetto.
  66.  
  67. Il più potente è di caricare negli oggetti uno script che gli consenta di onorare alcuni comandi del master. Noi useremo un canale say per questo scopo.
  68.  
  69. 2.5.A: Ecco un semplice script che esegue il "suicidio":
  70.  
  71. default
  72. {
  73. on_rez(integer channel)
  74. {
  75. llListen(channel, "", NULL_KEY,"");
  76. }
  77. listen(integer channel, string name,key id, string str)
  78. {
  79. if(str=="DIE!!!") llDie();
  80. }
  81. }
  82.  
  83. 2.5.B: script nel master per distruggere gli oggetti al reset:
  84. default
  85. {
  86. state_entry()
  87. {
  88. llSay(iCHANNEL,"DIE!!!"); // be sure all objects will vanish
  89. }
  90. touch_start(integer count)
  91. {
  92. llRezObject(....,iCHANNEL);
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement