Join us in Outworldz at www.outworldz.com:9000 or follow us:

Search dozens of selected web sites for OpenSim and LSL script

New! Script Meta-Search will search thousands of scripts here and at other sites for LSL or Opensim scripts.
Loading

Want to add a script or a project? Upload it and a half million people will see it and your name here this year.

Home   Show All
Category: Contributor: Creator
Tour Opensim Tour Boat  

Opensim Tour Boat

An Opensim Compatible, non physical Tour system

Category: Tour
By : thailow
Created: 2015-02-25 Edited: 2015-02-24
Worlds: Second Life

the Zip file

Download all files for Opensim Tour Boat
Contents are in zip format, with .LSL (text) source code and LSLEdit (text + Solution) formats.
Get file # 1. how to use.txt
Get file # 2. leggimi.txt
Get file # 3. param.config.txt
Get file # 4. route.config.txt
Get file # 5. tour_1.0.lsl
1 ?http://www.endivatomic.eu/article/boat_engine
2
3 =================================================================
4 This program is free software; you can redistribute it and/or
5 modify it. Additional Licenes may apply that prevent you from
6 selling this code. You must leave any author credits and any
7 headers intact in any script you use or publish.
8
9 =================================================================
10 Author: thailow (thailow.mi@gmail.com)
11 created: 2014-02-02
12 last modify: 2014-02-20
13 version: 1.00
14 target sys: OpenSim
15
16
17
18 INSTRUCTIONS
19 ================================================== ===============
20 This script allows you to move a boat along a route
21 specified a series of coordinates stored in a notecard.
22
23 Abbreviations used:
24 -------------------------
25 "BE" => indicates the object boat_engine
26  
27 Positioning & Link:
28 ----------------------
29 Place the BE in your boat, the texture of the BE indicate the
30 direction of the bow. We advise you to place the bottom BE
31 vs. the boat, more or less in the center.
32 CAUTION: When the BE is linked to the craft do it last so it the main prim (link number = 1).
33
34 Entering parameters (notecard param.config):
35 ----------------------------------------------
36 Lines starting with # are comments and are
37 ignored during loading. Empty lines are
38 excluded, however, to improve performance,
39 after setup, it would be better to remove all
40 blank lines and comments. Keep in mind that for every read of each
41 single line it takes about 0.1 seconds. Eliminate
42 comments and blank lines means improving the speed of
43 loading the parameters.
44
45 Optional parameters are present with the comment symbol
46 before the name. To set a value other than
47 default, remove the # sign at the left margin.
48
49 The parameters are all in the format: name = value
50 it does not matter iof there are spaces before or after the sign =
51 Each line can contain only one parameter.
52 Shift & / or lowercase letters in the name does not make a difference.
53
54 -----------
55 STARTPOS: initial position of the vessel, the same location where
56 the boat will be sent at the end of the tour.
57 Enter the coordinates of the position vector format <X, Y, Z>
58 The Z can be left at 0, the loading will be set to
59 sea ??level.
60
61 example:
62 startpos = <92,162,20>
63 -----------
64 STARTROT: initial rotation of the vessel, the same rotation which
65 the boat will be set at the end of the tour.
66 The values ??of the vector are the angles in degrees <X, Y, Z>.
67
68 example: startRot = <0,0,0>
69
70 -----------
71 HOVERWATER: BE height of the water level expressed in
72 meters. Warning: this is the height of the BE level
73 sea ??and not the center line of the vessel.
74
75 example: hoverwater = 0.1
76          
77 -----------
78 SPEED: speed (or pressure) of the boat.
79
80 example: speed = 2
81
82 -----------
83 PUSHTIME: how many seconds the boat gets a boost. Yup
84 recommended to stay between 0.2 and 0.6 seconds
85
86 example: pushtime = 0.3
87
88 -----------
89 DEBUG: enable / disable debug messages sent to
90 owner of BE. Equal to 1 if the messages are active,
91 set to 0 to disable the messages.
92
93 example: debug = 1
94
95 Note: once the positioning phase is recommended
96 = 0. The set of debug messages tend to slow down
97 the execution of events making the movement of the vessel
98 jerky.
99  
100 -----------
101
102 Insertion path (notecard route.config):
103 ----------------------------------------------
104 The notecard route.config contains the sequence of positions that
105 the vessel will have to go in his tour.
106 Each line must contain a position vector <X, Y, Z>.
107 The value of Z can be left at 0, will be set
108 automatically height of the sea.
109
110 WARNING !!!!: BE uses physical functions for the movement of
111 vessel, this will NOT work across different SIMs.
112 When setting your path be careful not to exceed
113 the boundaries of the SIM, otherwise your boat will lose
114 control and could move suddenly in undefined positions
115 (Even under water or in the sky).
116
117 example:
118 We want to do a tour departing from <100,100,0>
119
120 <100, 110, 0>
121 <110, 110, 0>
122 <110, 100, 0>
123 <100, 100, 0>
124
125 Various considerations:
126 1) BE uses physics so if along the way encounters
127     obstacles, these can block or divert the tour.
128     Ensure that no prim of the boat touches the "backdrop"
129     on the way, could run aground.
130 2) in the linear sections of your route there is no need to insert
131     intermediate coordinates. This lets you avoid unnecessary notecard lines.
132 3) given the speed of turn is recommended to insert positions
133     facilitating softer turns.
134     
135 OPERATION USER:
136 ================================================== ===============
137 When a user touches the boat, after a few tenth of a second
138 Wait, this part of the tour begins in physical mode.
139 As the tour is ended (reached in the latest reported position
140 route.config) the vessel becomes NOT physical and resumes
141 the position and rotation set startpos and startRot.
142
143 OPERATION OWNER:
144 ================================================== ===============
145 When the owner of the boat touches a menu appears with
146 the following functions:
147
148 START: if the boat is at rest, start moving.
149
150 STOP: if the boat is moving to the reset position
151             startpos, startRot and removes the physical flag.
152
153 LOAD_PARAM: charging the parameters in param.config,
154             use it in case of change of the notecard.
155
156 LOAD_ROUTE: charging the parameters in route.config,
157             use it in case of change of the notecard.

Opensim Tour Boat

A tour system using vehicle code for Opensim

Category: Tour
By : thailow
Created: 2015-02-25 Edited: 2015-02-24
Worlds: Second Life

1 ?http://www.endivatomic.eu/article/boat_engine
2
3 =================================================================
4 This program is free software; you can redistribute it and/or
5 modify it. Additional Licenes may apply that prevent you from
6 selling this code. You must leave any author credits and any
7 headers intact in any script you use or publish.
8
9 Questo programma è libero; siete liberi di redistribuirlo e/o
10 modificarlo. E' fatto espresso divieto di vendere e/o rivendere
11 questo codice che deve rimanere Open Source.
12 Le intestazioni relative all'autore devono rimanere presenti
13 negli script che usate o pubblicate.
14 =================================================================
15 Author: thailow (thailow.mi@gmail.com)
16 created: 2014-02-02
17 last modify: 2014-02-20
18 version: 1.00
19 target sys: OpenSim
20
21 web page and english translation will soon be published on
22 www.endivatomic.eu (not ready yet at present date)
23
24
25 ISTRUZIONI
26 =================================================================
27 Questo script permette di muovere una barca secondo un percorso
28 specificato atraverso una serie di coordinate salvate in una
29 notecard.
30
31 Abbreviazioni utilizzate:
32 -------------------------
33 "BE" => indica l'oggetto boat_engine
34
35 Posizionamento & Link:
36 ----------------------
37 Collocare il BE nella vostra barca, le texture del BE indicano la
38 direzione della prua. Vi consigliamo di inserire il BE sul fondo
39 della vs. barca, più o meno in centro.
40 ATTENZIONE: quando linkerete il BE al vs. natante fate in modo
41 che risulti il prim principale (link number = 1).
42
43 Inserimento parametri (notecard param.config):
44 ----------------------------------------------
45 Le linee che iniziano con il carattere # sono commenti e vengono
46 escluse durante il caricamento. Anche le righe vuote vengono
47 escluse, tuttavia per migliorare le prestazioni, una volta
48 terminata la configurazione, sarebbe meglio rimuovere tutte le
49 righe vuote ed i commenti. Tenete presente che per leggere ogni
50 singola riga sono necessari circa 0.1 secondi, eliminare i
51 commenti e righe vuote significa migliorare la velocità di
52 caricamento dei parametri.
53
54 I parametri facoltativi sono presenti con il simbolo di commento
55 prima del nome, per impostare un valore diverso da quello
56 predefinito, rimuovere il simbolo # ad inizio riga.
57
58 I parametri sono tutti nel formato: nome = valore
59 non importano gli spazi prima o dopo il segno di =
60 Ogni riga può contenere un solo parametro.
61 Maiuscole &/o minuscole nel nome non fanno differenza.
62
63 -----------
64 STARTPOS: posizione iniziale del natante, la stessa posizione cui
65 la barca verrà inviata al termine del tour.
66 Inserire le coordinate della posizione in formato vettore <X,Y,Z>
67 La Z può essere lasciata a 0, al caricamento verrà impostata a
68 livello del mare.
69
70 esempio:
71 startPos = <92,162,20>
72 -----------
73 STARTROT: rotazione iniziale del natante, la stessa rotazione cui
74 la barca verrà impostata al termine del tour.
75 I valori del vettore sono gli angoli in gradi <X,Y,Z>.
76
77 esempio: startRot = <0,0,0>
78
79 -----------
80 HOVERWATER: altezza del BE sul livello dell'acqua espresso in
81 metri. Attenzione: trattasi dell'altezza del BE sul livello del
82 mare e non la mezzeria del natante.
83
84 esempio: hoverwater = 0,1
85
86 -----------
87 SPEED: velocità (o spinta) della barca.
88
89 esempio: speed = 2
90
91 -----------
92 PUSHTIME: ogni quanti secondi la barca riceve una spinta. Si
93 consiglia di rimanere tra i 0.2 ed i 0.6 secondi
94
95 esempio: pushtime = 0.3
96
97 -----------
98 DEBUG: attiva/disattiva i messaggi di debug inviati al
99 proprietario del BE. Se uguale ad 1 i messaggi sono attivi,
100 impostare a 0 per disabilitare i messaggi.
101
102 esempio: debug = 1
103
104 Nota: una volta terminata la fase di posizionamento si consiglia
105 di impostare debug = 0. I messaggi tendono a rallentare
106 l'esecuzione degli eventi rendendo il movimento del natante
107 a scatti.
108
109 -----------
110
111 Inserimento percorso (notecard route.config):
112 ----------------------------------------------
113 Il notecard route.config contiene la sequenza delle posizioni che
114 il natante dovrà passare nel suo tour.
115 Ogni riga deve contenere un vettore di posizione <X,Y,Z>.
116 Il valore di Z può essere lasciato a 0, verrà impostato
117 automaticamante ad altezza del mare.
118
119 ATTENZIONE!!!!: BE usa le funzioni fisiche per il movimento del
120 natante, queste NON funzionano attraverso SIM diversi.
121 Nell'impostare il vostro percorso state attenti a non superare
122 mai i confini del SIM, altrimenti la vostra barca perderà il
123 controllo e potrebbe trasferirsi di colpo in posizioni indefinite
124 (anche sott'acqua o nel cielo).
125
126 esempio:
127 Vogliamo eseguire un tour partente da <100,100,0>
128
129 <100, 110, 0>
130 <110, 110, 0>
131 <110, 100, 0>
132 <100, 100, 0>
133
134 Considerazioni varie:
135 1) BE usa la fisica quindi se durante il suo percorso incontra
136 degli ostacoli, questi possono bloccare o deviarne la corsa.
137 Controllate che nessun prim del natante tocchi il "fondale"
138 durante il tragitto, potrebbe incagliarsi.
139 2) nei tratti lineari, per quanto lunghi, non serve inserire
140 coordinate intermedie in modo da evitare righe inutili.
141 3) data la rapidità di virata si consiglia di inserire posizioni
142 che agevolino virate morbide.
143
144 FUNZIONAMENTO UTENTE:
145 =================================================================
146 Quando un utente tocca la barca, dopo qualche decimo di secondo
147 di attesa, questa parte ed esegue il tour in modalità fisica.
148 A tour terminato (raggiunta lultima posizione segnalata in
149 route.config) il natante torna ad essere NON fisico e riprende
150 la posizione e rotazione impostati in startPos e startRot.
151
152 FUNZIONAMENTO OWNER:
153 =================================================================
154 Quando il proprietario tocca la barca compare un menu con le
155 seguenti funzioni:
156
157 START: se la barca è ferma, inizia a muoversi.
158
159 STOP: se la barca è in movimento resetta alla posizione
160 startPos, startRot e toglie il flag fisico.
161
162 LOAD_PARAM: ricarica i parametri presenti in param.config,
163 utilizzarlo in caso di modifica del notecard.
164
165 LOAD_ROUTE: ricarica i parametri presenti in route.config,
166 utilizzarlo in caso di modifica del notecard.
167
168

Opensim Tour Boat

A tour boat

Category: Tour
By : thailow
Created: 2015-02-25 Edited: 2015-02-24
Worlds: Second Life

1 # ===================================================
2 # CONFIG PARAMETER
3 # ===================================================
4 # Le linee che iniziano con il carattere # sono commenti e vengono escluse
5 # durante il caricamento. Anche le righe vuote vengono escluse, tuttavia
6 # per migliorare le prestazioni, una volta terminata la configurazione, sarebbe
7 # meglio rimuovere tutte le righe vuote ed i commenti (per maggiori dettagli
8 # leggere il file read.me a corredo)
9 # ===================================================
10
11 # PARAMETRO OBBLIGATORIO
12 # posizione iniziale della barca, la stessa posizione cui la barca verrà inviata
13 # al termine del tour. Inserire le coordinate del vettore posizione.
14 # La Z può essere lasciata a 0, al caricamento verrà impostata il livello
15 # del mare.
16
17 startPos = <0,0,0>
18
19
20 # PARAMETRI FACOLTATIVI
21 # Ricordarsi di togliere il carattere # per renderli attivi.
22
23 # rotazione iniziale della barca, la stessa rotazione cui la barca verrà inviata
24 # al termine del tour. I valori del vettore sono gli angoli in X,Y,Z.
25 # Ricordarsi di togliere il carattere # per renderlo attivo.
26 #startRot = <0,0,0>
27
28 # altezza del prim "engine" sul livello dell'acua espresso in metri.
29 #hoverwater = 0,1
30
31 # velocità (o spinta) della barca.
32 #speed = 2
33
34 # ogni quanti secondi la barca riceve una spinta. Si consiglia di rimanere
35 # tra i 0.2 ed i 0.6 secondi
36 #pushtime = 0.3
37
38 # se posto ad 1, il proprietario della barca riceverà dei messaggi di stato
39 # utili per il controllo in fase di posizionamento e settaggio del percorso.
40 # Impostare a 0 per disabilitare i messaggi.
41 #debug=1

Opensim Tour Boat

Tour boat for Opensim

Category: Tour
By : thailow
Created: 2015-02-25 Edited: 2015-02-24
Worlds: Second Life

1 <96,140,0>
2 <96,27,0>
3 <102,18,0>
4 <115,11,0>
5 <216,11,0>
6 <224,16,0>
7 <224,110,0>
8 <220,120,0>
9 <202,135,0>
10 <183,145,0>
11 <164,154,0>
12 <130,155,0>
13 <104,155,0>
14 <92,162.5,0>

Opensim Tour Boat

Opensim Tour Boat

Category: Tour
By : thailow
Created: 2015-02-25 Edited: 2015-02-24
Worlds: Second Life

1 string routeNCName = "route.config";
2 string paramNCName = "param.config";
3
4 // -----------------------------------------------------
5 // PARAMETRI
6 // -----------------------------------------------------
7 vector startPos = <0,0,0>;
8 vector startRot = <0,0,0>;
9
10 float vHoverH = 0.1; // hover height del veicolo rispetto altezza acqua
11 vector vSpeed = <2,0,0>; // spinta del motore
12 vector vAxe = <1,0,0>; // orientamento (prua) del veicolo
13
14 float moveTimer = 0.3;
15
16 integer debugOn = 1;
17
18 list route = [];
19
20 // -----------------------------------------------------
21 // READ VARIABLES
22 // -----------------------------------------------------
23 integer routeNCLine = 0;
24 key routeNCKey;
25 integer paramNCLine = 0;
26 key paramNCKey;
27
28 // -----------------------------------------------------
29 // VARIABILI GLOBALI
30 // -----------------------------------------------------
31 float zWater = 20;
32 vector xyTarget;
33 integer idTarget;
34 integer nTarget = 0;
35 integer nrTargets = 0;
36 integer runSts = 0; // run status
37 key ownerKey;
38
39 // -----------------------------------------------------
40 // MENU BO
41 X// -----------------------------------------------------
42 list dlgCmd = ["Start","Stop","Load_Route", "Load_Param"];
43 string dlgInfo = "\nScegliere un comando";
44 integer dlgCh = 5555;
45
46 // -----------------------------------------------------
47 // sayDebug()
48 // -----------------------------------------------------
49 sayDebug(string msg) {
50 if(debugOn == 1) llOwnerSay(msg);
51 }
52
53 // -----------------------------------------------------
54 // Trim a string
55 // -----------------------------------------------------
56 string Trim(string s) {
57 list t = llParseString2List(s, [" "], []);
58 return llDumpList2String(t, " ");
59 }
60
61 // -----------------------------------------------------
62 // initVehicle
63 // from: OpenSim - Physical Boat Script v2.1
64 // -----------------------------------------------------
65 initVehicle() {
66 // Vehicle Type
68
69 // Type Vector ------------------------------------------------------
70 // friction
72 llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <0.50, 0.50, 1.0>); // x,y in use
73 // motor
77
78 // Type Float -------------------------------------------------------
79 // hover
80 vector posv = llGetPos();
81 llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, posv.z - zWater); // in use
85 // friction
87 // motor
88 llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1); // in use
91 llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 1.0); // in use
92 //deflection
97 // attraction
100 // banking
104 }
105
106 // -----------------------------------------------------
107 // initRoute
108 // -----------------------------------------------------
109 initRoute() {
110 nTarget = 0;
111 nrTargets = llGetListLength(route);
112 }
113
114 // -----------------------------------------------------
115 // nextTarget
116 // -----------------------------------------------------
117 nextTarget() {
118 if(nTarget >= nrTargets) { stopTarget(); return; }
119
120 xyTarget = llList2Vector(route, nTarget++);
121 xyTarget.z = startPos.z;
122 idTarget = llTarget( xyTarget, 1.0 );
123
124 sayDebug("to target: "+ (string)xyTarget);
125 }
126
127 // -----------------------------------------------------
128 // stopTarget
129 // -----------------------------------------------------
130 stopTarget() {
131 sayDebug("end targetting...");
132 runSts = 0;
137 llSleep(0.3);
138 llSetRegionPos(startPos);
139 llSetRot(llEuler2Rot(startRot*DEG_TO_RAD));
140 }
141
142 startTarget() {
143 runSts = 1;
144 initRoute();
145 initVehicle();
146 llSleep(0.3);
147 llSetStatus(STATUS_PHANTOM, FALSE);
149 llSleep(0.3);
152 llSleep(0.3);
153 nextTarget();
154 llSetTimerEvent(moveTimer);
155 }
156
157 default {
158 on_rez(integer start_param) { llResetScript(); }
159
160 state_entry() {
161 if(llGetListLength(route) < 1) { state routeread; return; }
162 if(startPos == <0,0,0>) { state paramread; return; }
163
164 runSts = 0;
165 llSetStatus(STATUS_PHANTOM, FALSE);
169
170 zWater = llWater(<0,0,0>);
171 startPos.z = zWater + vHoverH;
172
173 llSetRegionPos(startPos);
174 llSetRot(llEuler2Rot(startRot*DEG_TO_RAD));
175
176 ownerKey = llGetOwner();
177 llListen(dlgCh, "", ownerKey, "");
178 }
179
180 touch_end(integer pp) {
181 key agent = llDetectedKey(0);
182 if(agent == ownerKey) {
183 llDialog(agent, dlgInfo, dlgCmd, dlgCh);
184 return;
185 }
186 if(runSts == 0) startTarget();
187 }
188
189 listen(integer ch, string name, key id, string msg) {
190 sayDebug("command: " + msg );
191
192 msg = llToLower(msg);
193 if((msg == "start")&&(runSts==0)) { startTarget(); return; }
194 if((msg == "stop")&&(runSts==1)) { stopTarget(); return; }
195 if(msg == "load_route") { state routeread; return; }
196 if(msg == "load_param") { state paramread; return; }
197 }
198
199 timer()
200 {
201 if(runSts == 1) {
202 // spinta del motore
204
205 // direzione rispetto a quella corrente
206 vector pos = llGetPos();
208 llRotBetween( <1.0,0.0,0.0>, llVecNorm(
209 ((vector)<xyTarget.x, xyTarget.y, pos.z>) - pos)
210 ),
211 1, 1
212 );
213 }
214 }
215
216 at_target(integer tnum, vector targetpos, vector ourpos) {
217 if(tnum != idTarget) return;
218
219 sayDebug("at target: "+ (string)ourpos);
220 llTargetRemove(tnum);
221 nextTarget();
222 }
223 }
224
225 // -----------------------------------------------------
226 // READ ROUTE NOTECARD
227 // -----------------------------------------------------
228 state routeread {
229 state_entry() {
230
232 sayDebug("missing inventory notecard: " + routeNCName);
233 return;
234 }
235
236 routeNCLine = 0;
237 route = [];
238 routeNCKey = llGetNotecardLine(routeNCName, routeNCLine);
239 }
240
241 dataserver(key req_id, string data) {
242 if(req_id != routeNCKey) return;
243
244 if(data == EOF) {
245 sayDebug("end reading "+ (string)routeNCLine +" route lines");
246 state default;
247 return;
248 }
249
250 if(data != "") {
251 if(llSubStringIndex(data, "#") != 0) { route += [(vector)data]; }
252 }
253 routeNCKey = llGetNotecardLine(routeNCName, ++routeNCLine);
254 }
255 }
256
257 // -----------------------------------------------------
258 // READ PARAM NOTECARD
259 // -----------------------------------------------------
260 state paramread {
261 state_entry() {
262
264 sayDebug("missing parameter notecard: " + paramNCName);
265 return;
266 }
267
268 paramNCLine = 0;
269 paramNCKey = llGetNotecardLine(paramNCName, paramNCLine);
270 }
271
272 dataserver(key req_id, string data) {
273 if(req_id != paramNCKey) return;
274
275 if(data == EOF) {
276 if(startPos == <0,0,0>) {
277 sayDebug("parameters missing");
278 return;
279 }
280 sayDebug("end reading parameters");
281 state default;
282 return;
283 }
284
285 if(data != "") {
286
287 if(llSubStringIndex(data, "#") != 0) {
288 integer i = llSubStringIndex(data, "=");
289
290 if(i != -1) {
291 string name = llToLower(Trim(llGetSubString(data, 0, i - 1)));
292 string value = Trim(llGetSubString(data, i + 1, -1));
293
294 if(name == "startpos") startPos = (vector)value;
295 if(name == "startrot") startRot = (vector)value;
296 if(name == "hoverwater") vHoverH = (float)value;
297 if(name == "speed") vSpeed.x = (float)value;
298 if(name == "pushtime") moveTimer = (float)value;
299 if(name == "debug") debugOn = (integer)value;
300 }
301 }
302 }
303 paramNCKey = llGetNotecardLine(paramNCName, ++paramNCLine);
304 }
305 }

Back to the Best Free Tools in Second Life and OpenSim.