Advertisement
salahzar

CORSO Lezione BASE: Sit AND teleport 12042008

Feb 16th, 2020
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.17 KB | None | 0 0
  1. Corso Elementare SIT-TELEPORT (script/build)
  2. =============================
  3.  
  4.  
  5. Introduzione.
  6.  
  7. Questa lezione fa parte di un ciclo di lezioni che i Mentori Italiani stanno organizzando in maniera nomade per le varie land Italiane in modo da consentire oltre all'aspetto didattico anche una forma di "turismo" in sl. Le terre vengono offerte da mentori ed altri avatar disponibili.
  8. Ringraziamo Akim Alonzo per la sua gentile offerta di ospitalità odierna e per la prossima settimana.
  9.  
  10. Scopo di questa lezione (durata circa 60 minuti) è imparare come fare degli script per "sedersi" su un oggetto e per costruire un elementare teleport. Come vedrete i due concetti sono collegati.
  11.  
  12. Prerequisiti per questa lezione:
  13. ===================
  14.  
  15. Dovete sapere rezzare un box, muoverlo agevolmente e inserirci uno script helloworld.
  16. Dovete sapere costruire uno script vuoto e metterci un semplice evento (ad esempio touch).
  17.  
  18. L'agenda della lezione è come segue:
  19.  
  20. 1. Come ci si siede in SL
  21. 2. Uno script per sedersi SENZA la classica "pallina"
  22. 3. Sedersi con le posizioni
  23. 4. Semplice script di teletrasporto
  24.  
  25. 1. Come ci si siede su SecondLife
  26. =====================
  27.  
  28. Sedersi in second life non è banale. Se provate a rezzare un cubo e provate a cliccarlo con il tasto destro compare "Sit" se lo cliccate vi sedete, ma spesso vi sedete in una posizione che non è quella che vorreste, un po' goffa e brutta.
  29.  
  30. O addirittura SL vi rigetta la richiesta dicendovi che non è possibile sedersi su quell'oggetto.
  31.  
  32. La tecnica corretta da usarsi per sedersi su un oggetto NON scriptato è quella di mettersi proprio di fronte, paralleli e a distanza adeguata e fare tasto destro sit da quella posizione.
  33.  
  34. Se fate un po' di prove vedrete che riuscite ad imparare ma è un mal di testa notevole.
  35.  
  36.  
  37. 2. Sedersi con un semplice script
  38. =====================
  39.  
  40. Costruite un box e mettete le dimensioni a 0.5, 0.5, 0.65 (ottimo sgabello).
  41. Potete migliorare il modo in cui vi sedete su questo box con questo script:
  42.  
  43. vector offset = <-0.36515, 0.02789, 0.61359>;
  44.  
  45. // corrisponde alla rotazione di eulero <0,0,180> in gradi
  46. vector rot = <0,0,1,0>;
  47.  
  48. default
  49. {
  50. state_entry()
  51. {
  52. llSitTarget(offset, rotation);
  53. }
  54.  
  55. }
  56.  
  57. In questo modo, indipendentemente da dove siete messi quando cliccate e come siete ruotati, lo script vi fa sedere correttamente su una scatola 50x50x65 cm.
  58. Se la scatola non ha queste dimensioni dovete modificare l'offset. Il primo numero rappresenta lo scostamento sull'asse x, poi y e quindi z. A seconda della dimensione della vostra scatola potreste dover modificare questi numeri.
  59.  
  60. Per quanto riguarda la rotazione se quella ottenuta non vi va bene dovete giocare con i numerelli.
  61. Il modo di intendere la rotazione è normalmente fatto in secondlife con 4 numeri che sono difficilissimi da capire e spiegare. Preferisco mostrarvi la tecnica per esprimere una rotazione di Eulero e poi spiegarvi come trasformarla in una rotazione SL.
  62.  
  63. Con Eulero le rotazioni si possono scrivere in questo modo:
  64. llEuler2Rot(<30,30,90> * DEG_TO_RAD)
  65. Che è + semplice perchè vi mostra che state ruotando 30 gradi attorno all'asse X, 30 gradi attorno all'asse y e 90 gradi attorno all'asse y.
  66.  
  67. Per sapere invece l'equivalente di Eulero di una brutta rotazione tipo quella che abbiamo specificato si può fare la seguente:
  68.  
  69. llRot2Euler(<x,y,z,w>)/ DEG_TO_RAD
  70.  
  71. che se applicata al numeraccio precedente vi produce la rotazione Euleriana appunto di 180 gradi attorno all'asse zeta in modo che il vostro avatar si sieda lungo l'asse verde crescente.
  72.  
  73. Come vedete anche in questo caso c'è da farsi venire un bel mal di testa: se volete cambiare la posizione di rotazione dell'avatar bisogna fare calcoli che neanche mandare un razzo sulla luna !!!!! :)))
  74.  
  75. 3. Sedersi con la palla
  76. ==============
  77.  
  78. Usare le palline diventa invece molto più semplice. Si spreca un prim ma si può fare in modo che la posizione dell'avatar possa essere alzata, abbassata e ruotata direttamente inworld con la tecnica seguente:
  79.  
  80. create un box mettetelo tipo sfera, dimensioni 0.1x0.1x0.1 e mettete la texture che più vi aggrada. Poi:
  81.  
  82. a- selezionate la pallina
  83. b- tasto destro e SIT sulla pallina
  84. c- ora potete usare le frecce e i tasti di rotazione tipici di build per muovervi come volete
  85.  
  86. TUTTI gli avatar che si siederanno su quella pallina avranno la STESSA posizione. E' un notevole miglioramento rispetto al lancio lunare della sezione precedente :))))
  87.  
  88. Uno script comunque ci va, per nascondere la pallina quando è "indossata", altrimenti vi trovereste sempre nelle zone intime qualcosa di probabilmente sgradito...
  89.  
  90. In genere lo script ve lo fanno pagare, ma in realtà è semplicissimo:
  91.  
  92.  
  93. float xpos = .3;
  94. float ypos = 0.01;
  95. float zpos = .35;
  96. float xrot = 0;
  97. float yrot = 0;
  98. float zrot = 0;
  99.  
  100. key avatar;//Defines "avatar" as a key.
  101.  
  102. default
  103. {
  104. state_entry()
  105. {
  106. //integer dh; ////////////////
  107.  
  108. llSitTarget(<xpos,ypos,zpos>,llEuler2Rot(<xrot,yrot,zrot> * DEG_TO_RAD));
  109. llSetAlpha(1,ALL_SIDES);
  110. llSetText("Siediti",<0,0,0>,1);
  111.  
  112. }
  113. changed(integer change)
  114. {
  115. avatar = llAvatarOnSitTarget();
  116. if(change & CHANGED_LINK)
  117. {
  118. if(avatar == NULL_KEY)
  119. {
  120. llResetScript();
  121. }
  122. else if(avatar == llAvatarOnSitTarget())
  123. {
  124.  
  125. llSetAlpha(0,ALL_SIDES);
  126. llSetText("",<0,0,0>,1);
  127.  
  128. }
  129. }
  130. }
  131. }
  132.  
  133. Descrizione dello script:
  134. 1. al reset (state_entry) lo script imposta un conveniente llSitTarget, mette la pallina visibile e imposta il testo di benvenuto "Siediti"
  135. 2. Il changed si accorge di quando qualcuno si siede o si rialza. Se si rialza fa il reset dello script. Se ci si siede nasconde la pallina (Alpha=0) e toglie il testo sopra di essa.
  136.  
  137. Avete costruito una posizione elementare di seduto che potete agganciare a qualunque oggetto abbiate (sedie, divani etc). In più la gente è abituata a vedere le palline e sa che servono per sedersi. Molto più professionale che dire alla gente:
  138. se vuoi sederti mettiti proprio davanti con l'angolazione giusta e alla distanza giusta e incrocia le dita che magari ti siedi correttamente!!!!
  139.  
  140.  
  141. 4. TELEPORT SEMPLICE
  142. ===============
  143.  
  144. Vi chiederete cosa c'entra il teleport con il sit. Vi stupirete a sentire che in secondlife, almeno all'interno della stessa regione, sono praticamente la STESSA COSA!!!!
  145. E non è necessario utilizzare palline.
  146.  
  147. Il teleport infatti si può simulare con un sit, ma non sopra o vicino all'oggetto ma DISTANTE dall'oggetto. Si fa così:
  148.  
  149.  
  150. Teleport breve (piano superiore, inferiore della casa)
  151.  
  152. a- prendete le coordinate <x,y,z> di DOVE volete andare
  153. b- computate quanti metri di differenza su x,y,z, ad esempio x+3m, stessa y, 6 metri + sopra
  154. c- fate un semplice script come segue:
  155.  
  156. default
  157. {
  158. state_entry()
  159. {
  160. llSetText("Teleport up",<1,1,1>,1);
  161. llSetSitText("Teleport");
  162. llSitTarget(<3,0,6>, ZERO_ROTATION);
  163. }
  164.  
  165. changed(integer change)
  166. {
  167. llSleep(0.15);
  168. llUnSit(llAvatarOnSitTarget());
  169.  
  170. }
  171.  
  172.  
  173. }
  174. Lo script è "basico" ma efficace. Ricordatevi di tararlo se muovete l'edificio (soprattutto se lo ruotate). Ai nostri fini per il momento è importante che capiate come funziona:
  175.  
  176. a- state entry: imposta la posizione di arrivo (quella del teleport + lo spostamento <3,0,6>).
  177. b - changed (quando l'avatar si siede). NON fa niente perchè l'effetto è già quello specificato dal llSitTarget. Ma DEVE far rialzare l'avatar!!! ecco il perchè del llUnsit (dopo un attimo di tempo).
  178.  
  179. Se mettete le proprietà dell'oggetto in modo che quando si clicca si forza il sit ottenete un facile ed elementare teleporter per case.
  180.  
  181. Per teleport più lunghi (ma sempre nella stessa sim), si fa più o meno analogamente, ma specificando ad esempio:
  182.  
  183. vector target=<160, 120,200>;
  184.  
  185. llSitTarget(target-llGetPos(),ZERO_ROTATION);
  186.  
  187.  
  188. E con questo dovreste essere stati in grado di far sedere gli avatar sulle vostre sedie e di fare dei teleport AGGRATIS senza spendere un linden $... :))))))
  189.  
  190. Grazie per aver partecipato alla lezione,
  191. Salahzar Stenvaag
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement