Home |
Add a script
|
||
|---|---|---|---|
| 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; 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"; 21 string sound="hum.wav"; 22 key id; 24 vector POSITION; 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)"); 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 { 44 state_entry() 45 { 46 47 gOwnerKey = llGetOwner(); 48 gOwnerName = llKey2Name(llGetOwner()); 49 llSoundPreload(sound); 50 llStopSound(); 51 llLoopSoundMaster(sound, 0.0); 52 llSetTimerEvent(0.0); 53 llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", id); 56 llSleep(0.1); 59 llMoveToTarget(llGetPos(), 0); 60 llRotLookAt(llGetRot(), 0, 0); 62 LEVELS = CONTROL_FWD | CONTROL_BACK | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ML_LBUTTON; 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... 82 state_entry() 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"; 96 llStopSound(); 97 llLoopSoundMaster(sound, 95.0); 99 llSetSitText("Ride");100 Driver=llDetectedKey(total_number - 1);101 state StateDriving;102 }103 }104 else105 {106 llWhisper(0,"You must own or belong to this group to fly craft.");107 llStopSound();108 llLoopSoundMaster(sound,0.0);109 llInstantMessage(gOwnerKey,llDetectedName(total_number - 1) + " is touching your craft");110 } 111 } 112 113 // Here is the Listen callback115 {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 callback127 {128 llResetScript();129 } 130 }131 132 state StateDriving133 {134 state_entry()135 {136 llWhisper(0, "All systems go !!");137 llRequestPermissions(Driver, PERMISSION_TAKE_CONTROLS);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);153 llStopSound();154 llLoopSoundMaster(sound, 0.0);155 llSetSitText("Pilot");157 llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", id);158 llSetTimerEvent(0.0);159 llReleaseControls();160 llResetScript();161 }162 }163 165 {166 if (id==Driver)167 {168 if (llToLower(msg) == "ask!")169 {170 llReleaseControls();171 llRequestPermissions(Driver, PERMISSION_TAKE_CONTROLS);172 }173 if (llToLower(msg) == "menu")174 {175 help();176 }177 if (llToLower(msg) == "warp")178 {179 TARGET_INCREMENT = 10.0; 181 TIspew = llGetSubString(TIspew,0,3);183 }184 if (llToLower(msg) == "slow")185 {186 TARGET_INCREMENT = 0.5;188 }189 if (llToLower(msg) == "1!")190 {191 TARGET_INCREMENT = 0.75;193 }194 if (llToLower(msg) == "2!")195 {196 TARGET_INCREMENT = 1.0;198 }199 if (llToLower(msg) == "3!")200 {201 TARGET_INCREMENT = 1.5;203 }204 if (llToLower(msg) == "4!")205 {206 TARGET_INCREMENT = 2.0;208 }209 if (llToLower(msg) == "5!")210 {211 TARGET_INCREMENT = 3.0;213 }214 if (llToLower(msg) == "6!")215 {216 TARGET_INCREMENT = 4.0;218 }219 if (llToLower(msg) == "7!")220 {221 TARGET_INCREMENT = 5.0;223 }224 if (llToLower(msg) == "8!")225 {226 TARGET_INCREMENT = 6.0;228 }229 if (llToLower(msg) == "9!")230 {231 TARGET_INCREMENT = 7.0;233 }234 }235 }236 237 run_time_permissions(integer perm)238 {239 if (perm == PERMISSION_TAKE_CONTROLS)240 {241 llMessageLinked(LINK_ALL_CHILDREN, 0, "slow", id);243 244 }245 else246 {247 llWhisper(0,"Stopped");248 llSetTimerEvent(0.0);249 gFLYING = "FALSE";250 llSleep(1.5);251 llResetScript();252 }253 }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 {321 llMoveToTarget(llGetPos() + world_target, LINEAR_TAU);322 323 vector eul = face; 324 eul *= DEG_TO_RAD; 325 rotation quat = llEuler2Rot( eul ); 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; }337 llMoveToTarget(llGetPos() + world_target, LINEAR_TAU);338 }339 340 }341 // END //