User:Fred Gandt/Scripts/Continued 5

From Second Life Wiki
Revision as of 12:12, 25 March 2017 by Fred Gandt (talk | contribs) (minor tidy of shutter door scripts)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
I get in-world very rarely these days. The knock-on effect of this, is that I am not in the best position to keep these scripts updated. Please message me in-world (forwarded to email) if you discover any bugs (that can't be simply fixed), and I'll do my best to find a solution.

My Contributions

If unsure about how to use these scripts

I have implemented a version number system to make it more obvious if a script is updated. The V# is a comment at the top of each script.

If you have any comments about the content of this page please post them HERE

All my scripts are written for compilation as MONO

More Scripts

Legal Stuff

The legal stuff about contributing to this wiki. (worth reading)

PJIRA Issue Tracker

The issues I have filed on the PJIRA

Tuition

Tuition scripts, notes, videos and screenshots etc. (hardly any content yet)

Free Scripts

Prim Property Scrubber

Just drop it onto/into the prim you want to clean of a property and choose from the menu which properties to remove either 1 at a time or all at once.

<syntaxhighlight lang="lsl2">// V2 //

key owner;

integer passes = 0;

integer channel;

list properties = ["All", // All the properties listed below.

                  "Text",        // Floating text. Used to display text typically above a prim.
                  "Particles",   // Used in "Poofers" for example.
                  "TextureAnim", // Texture Animation. Used to make textures on faces of prims move.
                  "Sit Target",  // Used in seats and poseballs. Sets an alternative sit position than the default.
                  "Mouselook",   // Forced Mouselook. Used to force an agents view to mouselook when sitting on the prim.
                  "Sit Text",    // Text other than the default "Sit Here" shown on the right click pie menu.
                  "Touch Text",  // Text other than the default "Touch" shown on the right click pie menu.
                  "Status's",    // There are many status's that can be set in prims. See the wiki (llSetStatus) for details.
                  "Sound",       // Looping sound emitting from the prim.
                  "Light"];      // Light emitting from the prim.

RP(integer i) {

   ++passes;
   if(i == 1)
   llSetText("", <0.0,0.0,0.0>, 0.0);
   else if(i == 2)
   llParticleSystem([]);
   else if(i == 3)
   llSetTextureAnim(0, -1, 0, 0, 0.0, 0.0, 1.0);
   else if(i == 4)
   llSitTarget(<0.0,0.0,0.0>, <0.0,0.0,0.0,1.0>);
   else if(i == 5)
   llForceMouselook(0);
   else if(i == 6)
   llSetSitText("");
   else if(i == 7)
   llSetTouchText("");
   else if(i == 8)
   {
       llSetStatus(14, 1);
       llSetStatus(251, 0);
   }
   else if(i == 9)
   llStopSound();
   else if(i == 10)
   llSetPrimitiveParams([23, 0, <0.0,0.0,0.0>, 0.0, 0.0, 0.0]);

}

RemoveProperty(integer i) {

   if(!i)
   {
       while(i < 10)
       RP(++i);
       RemoveScript();
   }
   else
   RP(i);
   if(passes < 10)
   llDialog(owner, "\nRemove Properties", ["Finished"] +
   (properties = llListReplaceList(properties, ["-"], i, i)), channel);
   else
   RemoveScript();

}

RemoveScript() {

   llRemoveInventory(llGetScriptName());

}

default {

   state_entry()
   {
       owner = llGetOwner();
       llListen((channel = (llRound(llFrand(-10000000)) - 100000)), llKey2Name(owner), owner, "");
       llDialog(owner, "\nRemove Properties", ["Finished"] + properties, channel);
       llSetTimerEvent(60.0);
   }
   listen(integer chan, string name, key id, string msg)
   {
       llSetTimerEvent(60.0);
       integer index = 0;
       if((index = llListFindList(properties, [msg])) != -1)
       {
           if(msg != "-")
           RemoveProperty(index);
           else
           llDialog(owner, "\nRemove Properties", ["Finished"] + properties, channel);
       }
       else if(msg == "Finished")
       RemoveScript();
   }
   timer()
   {
       llOwnerSay("Removing script since you're not using it.");
       RemoveScript();
   }

}</syntaxhighlight>

Bling Scrubber

This is specifically for removing particles and the scripts that set them from objects. It will cure link_sets or single prims. If the option to scrub the scripts is chosen (as well as to scrub the particles) ALL the scripts in the whole object will be removed.

<syntaxhighlight lang="lsl2">// V1 //

string instructions = "";

integer channel = -9865443;

string scrub = "SCRUB";

string no = "NO";

integer link_num;

Dialog(integer d) {

   key owner = llGetOwner();
   llListen(channel, "", owner, "");
   if(d)
   llDialog(owner, "\n\n" + instructions + "ARE YOU SURE YOU WANT TO REMOVE ALL SCRIPTS?" + 
                   "CLICKING \"" + no +
                   "\" WILL STILL REMOVE ALL PARTICLES BUT, THEY MIGHT COME BACK.", [scrub, no], channel);

}

default {

   on_rez(integer param)
   {
       Dialog(1);
   }
   state_entry()
   {
       if((link_num = llGetLinkNumber()) == 1)
       {
           integer i = 2;
           do
           llGiveInventory(llGetLinkKey(i), llGetScriptName());
           while((++i) <= llGetNumberOfPrims());
           instructions = "Open an edit on me and goto your viewer \"Tools\" menu.\n" +
                          "Near the bottom of the menu click \"Set Scripts Running in Selection\".\n" +
                          "Once ALL the scripts are set running, click the \"" + scrub + "\" button.\n\n";
           llOwnerSay("Take then rez me. Follow the instructions given on rez.");
       }
       else if(!link_num)
       Dialog(1);
       else
       Dialog(0);
   }
   listen(integer chan, string name, key id, string msg)
   {
       chan = 0;
       if(msg == scrub)
       {
           string name;
           while((llGetInventoryNumber(INVENTORY_SCRIPT) - 1))
           {
               if((name = llGetInventoryName(INVENTORY_SCRIPT, chan)) != llGetScriptName())
               llRemoveInventory(name);
               else
               chan = 1;
           }
       }
       if(((chan = link_num) == 1))
       {
           do
           llLinkParticleSystem(chan, []);
           while((++chan) <= llGetNumberOfPrims());
       }
       else
       llParticleSystem([]);
       if(link_num < 2)
       llOwnerSay("All done!");
       llRemoveInventory(llGetScriptName());
   }

}</syntaxhighlight>

Basic Notecard Readers

Two simple methods of reading from a notecard in the prim contents with one of these scripts.

Cyclically Sequential Lines

<syntaxhighlight lang="lsl2">// V1 //

key iq;

integer line;

GetLine(integer i) {

   iq = llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD, 0), i);

}

default {

   dataserver(key q, string data)
   {
       if(q == iq)
       {
           ++line;
           if(data != EOF)
           {
               if(data != "")
               llSay(0, data);
               else
               GetLine(line);
           }
           else
           GetLine((line = 0));
       }
   }
   touch_start(integer nd)
   {
       if(llGetInventoryNumber(INVENTORY_NOTECARD))
       GetLine(line);
   }

}</syntaxhighlight>

Random Lines

<syntaxhighlight lang="lsl2">// V1 //

key iq;

key qi;

integer line;

integer lines;

GetLine(integer i) {

   iq = llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD, 0), i);

}

default {

   changed(integer change)
   {
       if(change & CHANGED_INVENTORY)
       llResetScript();
   }
   state_entry()
   {
       if(llGetInventoryNumber(INVENTORY_NOTECARD))
       qi = llGetNumberOfNotecardLines(llGetInventoryName(INVENTORY_NOTECARD, 0));
   }
   dataserver(key q, string data)
   {
       if(q == qi)
       lines = (((integer)data) - 1);
       else if(q == iq)
       {
           if(data != "")
           llSay(0, data);
           else
           GetLine((++line));
       }
   }
   touch_start(integer nd)
   {
       if(llGetInventoryNumber(INVENTORY_NOTECARD))
       GetLine((line = llRound(llFrand(((float)lines)))));
   }

}</syntaxhighlight>

CamHUD

Simple two function scripted camera controller. When turned on, the camera position locks in whatever place it was at the time of activation. To change the camera position, turn the HUD off...move the camera to the desired position...turn the HUD back on.

  • There are two buttons - One marked "Track" and another marked "Power".
    • "Power" (I think) has a fairly obvious function.
    • "Track" switches on and off, tracking of the owner. With tracking off the camera is locked solid. With tracking on the camera position is locked but it rotates to follow you around if you move.

The usefulness of this is up to you to decide.

Create the Object

To create the object use the following script. Just drop it onto/into a fresh prim. The resulting prim is quite small since it is designed to be a low impact HUD.

<syntaxhighlight lang="lsl2">// V1 //

default {

   state_entry()
   {
       llSetObjectName("CamHUD"); // You can change this after if you want.
       llSetPrimitiveParams([7, <0.01, 0.05, 0.025>,
                             8, <1.0, 0.0, 0.0, 0.0>,
                             9, 0, 0, <0.125, 0.625, 0.0>, 0.1, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>,
                             17, -1, "5748decc-f629-461c-9a36-a35a221fe21f", <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, 0.0]);
       llRemoveInventory(llGetScriptName()); // Done its job so self deletes.
   }

}</syntaxhighlight>

CamHUD Script

Drop this script into the prim you just created. Wear the object as a HUD. If you do not see two distinct buttons separated by a black line, it is probably back to front or something.

<syntaxhighlight lang="lsl2">// V1 //

integer perms;

integer track;

integer on;

vector red = <1.0,0.0,0.0>;

vector green = <0.0,1.0,0.0>;

SetCameraParams(integer o, integer t) {

   list focus = [];
   llClearCameraParams();
   if(t)
   focus = [CAMERA_FOCUS, llGetPos()];
   else
   focus = [CAMERA_FOCUS_LOCKED, TRUE];
   llSetCameraParams([CAMERA_ACTIVE, o, CAMERA_POSITION_LOCKED, TRUE] + focus);

}

default {

   on_rez(integer param)
   {
       llResetScript();
   }
   state_entry()
   {
       if(llGetAttached())
       llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_CONTROL_CAMERA)
       {
           perms = TRUE;
           llSetText("   Track

More Scripts...

If you have any comments about the content of this page please post them HERE