Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///////////////////////////////////////// Code start:
- // Yes, a WORKING Cross-Grid (X-Grids) Non Physical Vehicle Script.
- //
- // I have personally tested this script to work in
- // Second Life, InWorldz, & OpenSim. It works great
- // in all grids that I have tested so far, and can
- // be used as a flying/levitating vehicle of sorts.
- //
- // Pro Tips: Non physical vehicles are not as CPU intensive
- // as physical vehicles for the sim, and they can
- // help protect you from being pushed across the
- // sim from giant bullets, sim cleaners, and chaos.
- // Setting the object to phantom further reduces
- // CPU load on the sim because the physics engine
- // is no longer used for collision detection with
- // the phantom object. Micro optimizations include
- // renaming all child links in a linkset to ".",
- // keeping all object, script, and animation names
- // under 16 characters, and setting all object
- // textures to the factory "Blank" texture for
- // very small sim and viewer load reductions.
- //
- // Copyright 2013 Michael R. Horton
- //
- // Real Life ............. Michael R. Horton
- // Second Life ........... Mick Scarbridge
- // InWorldZ .............. Mick Daftwood
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; Version 32 of the License.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- // MA 02110-1301, USA.
- //
- // This header must remain in tact for your application of this script.
- // Any modifications that you do should be recorded below with each new
- // version, including your name or avatar name, etc for proper credit to
- // your modifications.
- //
- // Upgrades
- //
- // v0.4.6 Features:
- //
- // * llSetRegionPos() used for higher efficiency than llSetPos().
- // * Tested to work across all grids as of 2013.05.15
- //
- // v0.4.8 Features:
- //
- // * Tested to self-delete when user stands for AutoCleanup.
- // * Tested to self-delete when user accidentally sits on another object.
- // * Tested to self-delete when user crashes or teleports.
- //
- // v0.5.0 Features:
- //
- // * Final code cleanup.
- // * Inserted GPL licensing information.
- // * Adjusted formatting for better readability.
- // * Final testing for directional speeds.
- //
- // Instructions:
- //
- // * Build a one prim object, such as a box or sphere.
- // * Set the rotation to <0,0,0> and set texture to "Blank".
- // * Drop in an animation you like, then rename the animation to "dz" inside the object.
- // * Create a new script in the object then paste this into it.
- // * Set the default action to "Sit" for the object.
- // * Set to compile in MONO instead of LSO/LSL for greater efficiency.
- // * Rename the object you created to something you will remember, such as "npv.xgrids".
- // * Take the object into inventory before sitting or it will self-delete when you stand.
- // * Rez the object in-world and left click to sit.
- // * Enjoy!
- integer r=FALSE;
- key s;
- key t;
- key p=NULL_KEY;
- string a="";
- integer b=FALSE;
- c(key d,string n)
- {
- p=d;
- a=n;
- llRequestPermissions(d,PERMISSION_TAKE_CONTROLS);
- }
- q(){
- if(b)
- {
- p=NULL_KEY;
- b=FALSE;
- llReleaseControls();
- }
- }
- f(vector g)
- {
- llSetRot(llEuler2Rot(llRot2Euler(llGetRot())+g*DEG_TO_RAD));
- }
- default
- {
- on_rez(integer h)
- {
- llResetScript();
- llSetSitText("^,..,^");// Better than boring "Sit Here".
- llSetStatus(STATUS_PHANTOM,TRUE);// Reduces CPU load on the sim server.
- llVolumeDetect(FALSE);// Set to TRUE if you desire collision detection.
- t=llGetOwner();
- }
- state_entry()
- {
- llSitTarget(<0.0,0.0,1.0>,<0.0,0.0,0.0,1.0>);// Haxx - seems to allow sit even if rezzed inside a megaprim sensor type.
- // llSitTarget(ZERO_VECTOR,ZERO_ROTATION);// Alternative that may work better than the previous line in YOUR sim grid.
- llSetCameraEyeOffset(<-5.0,0.0,2.0>);// I nuu wanna be staring at every hair follicle in the back o my head.
- llSetCameraAtOffset(<0.0,0.0,2.0>);
- // llCollisionSound("",0.0);// If non phantom, why sound like beating them when bumping them?
- }
- touch(integer j)
- {
- if(llDetectedKey(0))
- {
- c(llDetectedKey(0),llDetectedName(0));
- }
- }
- changed(integer u)
- {
- s=llAvatarOnSitTarget();
- if(u&CHANGED_LINK)
- {
- if((s==p)&&(r))
- {
- llStopAnimation("sit_ground");
- llReleaseControls();
- r=FALSE;
- llSleep(0.1);
- llDie();
- }
- else if(!r)
- {
- t=llAvatarOnSitTarget();
- r=TRUE;
- llRequestPermissions(t,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION);
- llSetAlpha(0.0,ALL_SIDES);
- }
- }
- }
- control(key n,integer l,integer e)
- {
- if(l&CONTROL_FWD){llSetRegionPos(llGetPos()+(<4.0,0,0>)*llGetRot());}
- if(l&CONTROL_BACK){llSetRegionPos(llGetPos()+(<-4.0,0,0>)*llGetRot());}
- if(l&CONTROL_LEFT||l&CONTROL_ROT_LEFT){f(<0,0,25.0>);}
- if(l&CONTROL_RIGHT||l&CONTROL_ROT_RIGHT){f(<0,0,-25.0>);}
- if(l&CONTROL_UP){llSetRegionPos(llGetPos()+(<0,0,4.0>)*llGetRot());}
- if(l&CONTROL_DOWN){llSetRegionPos(llGetPos()+(<0,0,-4.0>)*llGetRot());}
- }
- run_time_permissions(integer k)
- {
- if(k&PERMISSION_TAKE_CONTROLS)
- {
- llTakeControls(CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|
- CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|
- CONTROL_UP|CONTROL_DOWN,TRUE,FALSE);
- b=TRUE;
- }
- if(k & PERMISSION_TRIGGER_ANIMATION)
- {
- llStartAnimation("dz");
- llStopAnimation("sit");
- }
- else
- {
- q();
- }
- }
- }
- ///////////////////////////////////////// Code end.
- // EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement