Join us in Phaze Demesnes

LSL Script Library Home   Add a script Show All
Category: Contributor: Description
Vehicles Anonymous Flying Saucer Script 2.lsl
Flying Saucer
Flying Saucer Script 2.lsl

Download this script - Please use this link to get this script. If you see all the code on one long line, please use Wordpad or another editor, such as LSLEdit.exe. The .LSL file you will download is an ordinary text file.

1 // CATEGORY:Vehicles
2 // DESCRIPTION:Flying Saucer
3 // ARCHIVED BY:Ferd Frederix
4
5 float LINEAR_TAU = 0.75;
6 float TARGET_INCREMENT = 0.5;
7 float ANGULAR_TAU = 1.5;
8 float ANGULAR_DAMPING = 0.85;
9 float THETA_INCREMENT = 10;// 0.3
10 integer LEVELS = 0;
11 vector pos;
12 vector face;
13 float brake = 0.5;
14 key gOwnerKey;
15 string gOwnerName;
16 key gToucher;
17 key Driver;
18 string Name1 = "Mark Coffee";
19 string Name2 = "Mom's Paintings";
20 string gFLYING = "FALSE";
21 string sound="hum.wav";
22 key id;
23 integer nudge = FALSE;
24 vector POSITION;
25 integer auto=FALSE;
26 integer CHANNEL = 6;
27
28 help()
29 {
30 llWhisper(0,"Commands:");
31 llWhisper(0,"Left click craft = Start ");
32 llWhisper(0,"Left click craft = Stop and release contol");
33 llWhisper(0,"/" + (string)CHANNEL + " 1! through" + " /" + (string)CHANNEL + " 9!," + " /" + (string)CHANNEL + " slow or" + " /" + (string)CHANNEL + " warp = Set power");
34 llWhisper(0,"/" + (string)CHANNEL + " ask! = Craft asks permission for your control. (Only when outside craft)");
35 llWhisper(0,"/" + (string)CHANNEL + " menu = Display this list");
36 llWhisper(0,"PgUp or PgDn = Gain or lose altitude");
37 llWhisper(0,"Arrow keys = Left, right, Forwards and Back");
38 llWhisper(0,"Shift + Left or Right arrow = Rotate but maintain view");
39 llWhisper(0,"PgUp + PgDn or combination similar = Set cruise on or off");
40 }
41
42 default
43 {
45 {
46
47 gOwnerKey = llGetOwner();
48 gOwnerName = llKey2Name(llGetOwner());
49 llSoundPreload(sound);
51 llLoopSoundMaster(sound, 0.0);
52 llSetTimerEvent(0.0);
53 llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", id);
55 llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, TRUE);
56 llSleep(0.1);
57 llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE);
60 llRotLookAt(llGetRot(), 0, 0);
63
64 TARGET_INCREMENT = 0.5;
65 llSitTarget(<0.4, 0.0, 0.4>, ZERO_ROTATION);
66 llSetCameraEyeOffset(<-10.0, 0.0, 4.0>);
67 llSetSitText("Pilot");
68 llSetCameraAtOffset(<0, 0.0, 0>);
69 llWhisper(0,"Deactivated ... Security conditions set. Type /" + (string)CHANNEL + " menu for a list of options.");
70
71 // this sets a Listen with no callback in this state...
72 llListen(CHANNEL, "", "", "");
73
74 state Listening;
75 }
76
77 }
78
79 state Listening
80 {
81 // Here we set up the Listen that is used in the Listening state...
83 {
84 llListen(CHANNEL, "", "", "");
85 }
86
87 // the rest was here before...
88 // This is the click callback
89 touch_start(integer total_number)
90 {
91 if (llSameGroup(llDetectedKey(total_number - 1))==1 || llDetectedName(total_number - 1)==Name1 || llDetectedName(total_number - 1)==Name2)
92 {
93 if (gFLYING == "FALSE")
94 {
95 gFLYING = "TRUE";
97 llLoopSoundMaster(sound, 95.0);
99 llSetSitText("Ride");
100 Driver=llDetectedKey(total_number - 1);
101 state StateDriving;
102 }
103 }
104 else
105 {
106 llWhisper(0,"You must own or belong to this group to fly craft.");
108 llLoopSoundMaster(sound,0.0);
109 llInstantMessage(gOwnerKey,llDetectedName(total_number - 1) + " is touching your craft");
110 }
111 }
112
113 // Here is the Listen callback
114 listen(integer CHANNEL, string name, key id, string msg)
115 {
116 if (llSameGroup(id)==1)
117 {
118 if (llToLower(msg) == "menu")
119 {
120 help();
121 }
122 }
123 }
124
125 // and this is an on-rez callback
126 on_rez(integer start_param)
127 {
129 }
130 }
131
132 state StateDriving
133 {
135 {
136 llWhisper(0, "All systems go !!");
138 llMoveToTarget(llGetPos(), LINEAR_TAU);
139 llRotLookAt(llGetRot(), ANGULAR_TAU, 1.0);
140
141 // Added listen here as well.... for same reason...
142 llListen(CHANNEL, "", "", "");
143 }
144
145 touch_start(integer total_number)
146 {
147 if (llDetectedKey(total_number - 1)==Driver)
148 {
149 llWhisper(0,"You now have control.");
150 gFLYING = "FALSE";
151 auto=FALSE;
152 llSleep(1.5);
154 llLoopSoundMaster(sound, 0.0);
155 llSetSitText("Pilot");
157 llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", id);
158 llSetTimerEvent(0.0);
161 }
162 }
163
164 listen(integer CHANNEL, string name, key id, string msg)
165 {
166 if (id==Driver)
167 {
168 if (llToLower(msg) == "ask!")
169 {
172 }
173 if (llToLower(msg) == "menu")
174 {
175 help();
176 }
177 if (llToLower(msg) == "warp")
178 {
179 TARGET_INCREMENT = 10.0;
180 string TIspew = (string)TARGET_INCREMENT;
181 TIspew = llGetSubString(TIspew,0,3);
182 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
183 }
184 if (llToLower(msg) == "slow")
185 {
186 TARGET_INCREMENT = 0.5;
187 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
188 }
189 if (llToLower(msg) == "1!")
190 {
191 TARGET_INCREMENT = 0.75;
192 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
193 }
194 if (llToLower(msg) == "2!")
195 {
196 TARGET_INCREMENT = 1.0;
197 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
198 }
199 if (llToLower(msg) == "3!")
200 {
201 TARGET_INCREMENT = 1.5;
202 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
203 }
204 if (llToLower(msg) == "4!")
205 {
206 TARGET_INCREMENT = 2.0;
207 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
208 }
209 if (llToLower(msg) == "5!")
210 {
211 TARGET_INCREMENT = 3.0;
212 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
213 }
214 if (llToLower(msg) == "6!")
215 {
216 TARGET_INCREMENT = 4.0;
217 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
218 }
219 if (llToLower(msg) == "7!")
220 {
221 TARGET_INCREMENT = 5.0;
222 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
223 }
224 if (llToLower(msg) == "8!")
225 {
226 TARGET_INCREMENT = 6.0;
227 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
228 }
229 if (llToLower(msg) == "9!")
230 {
231 TARGET_INCREMENT = 7.0;
232 llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
233 }
234 }
235 }
236
238 {
239 if (perm == PERMISSION_TAKE_CONTROLS)
240 {
241 llMessageLinked(LINK_ALL_CHILDREN, 0, "slow", id);
242 llTakeControls(LEVELS, TRUE, FALSE);
243
244 }
245 else
246 {
247 llWhisper(0,"Stopped");
248 llSetTimerEvent(0.0);
249 gFLYING = "FALSE";
250 llSleep(1.5);
252 }
253 }
254 control(key driver, integer levels, integer edges)
255 {
256 pos *= brake;
257 face.x *= brake;
258 face.z *= brake;
259 nudge = FALSE;
260 llMessageLinked(LINK_ALL_CHILDREN, 0, "slow", id);
261 if (levels & CONTROL_FWD)
262 {
263 if (pos.x < 0) { pos.x=0; }
264 else { pos.x += TARGET_INCREMENT; }
265 nudge = TRUE;
266 }
267 if (levels & CONTROL_BACK)
268 {
269 if (pos.x > 0) { pos.x=0; }
270 else { pos.x -= TARGET_INCREMENT; }
271 nudge = TRUE;
272 }
273 if (levels & CONTROL_UP)
274 {
275 llMessageLinked(LINK_ALL_CHILDREN, 0, "fast", id);
276 if(pos.z<0) { pos.z=0; }
277 else { pos.z += TARGET_INCREMENT; }
278 face.x=0;
279 nudge = TRUE;
280 }
281 if (levels & CONTROL_DOWN)
282 {
283 llMessageLinked(LINK_ALL_CHILDREN, 0, "fast", id);
284 if(pos.z>0) { pos.z=0; }
285 else { pos.z -= TARGET_INCREMENT; }
286 face.x=0;
287 nudge = TRUE;
288 }
289 if ((levels) & (CONTROL_LEFT|CONTROL_ROT_LEFT))
290 {
291 if (face.z < 0) { face.z=0; }
292 else { face.z += THETA_INCREMENT; }
293 nudge = TRUE;
294 }
295 if ((levels) & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
296 {
297 if (face.z > 0) { face.z=0; }
298 else { face.z -= THETA_INCREMENT; }
299 nudge = TRUE;
300 }
301 if ((levels & CONTROL_UP) && (levels & CONTROL_DOWN))
302 {
303 if (auto)
304 {
305 auto=FALSE;
306 llWhisper(0,"Cruise off");
307 llSetTimerEvent(0.0);
308 }
309 else
310 {
311 auto=TRUE;
312 llWhisper(0,"Cruise on");
313 llSetTimerEvent(0.5);
314 }
315 llSleep(0.5);
316 }
317
318 if (nudge)
319 {
320 vector world_target = pos * llGetRot();
321 llMoveToTarget(llGetPos() + world_target, LINEAR_TAU);
322
323 vector eul = face;
324 eul *= DEG_TO_RAD;
325 rotation quat = llEuler2Rot( eul );
326 rotation rot = quat * llGetRot();
327 llRotLookAt(rot, ANGULAR_TAU, ANGULAR_DAMPING);
328 }
329 }
330
331 timer()
332 {
333 pos *= brake;
334 if (pos.x < 0) { pos.x=0; }
335 else { pos.x += TARGET_INCREMENT; }
336 vector world_target = pos * llGetRot();
337 llMoveToTarget(llGetPos() + world_target, LINEAR_TAU);
338 }
339
340 }
341 // END //