Checks the Second Life Grid Status every five minutes to see if there are any new issues. If there are it will IM you.

Checks the Second Life Grid Status every five minutes to see if there are any new issues. If there are it will IM you.

Line 359:

Line 359:

{{note|The format of the source of the Grid Status has changed many times since the creation of this script, and there's therefore every reason to assume it may change again. Should this happen, the output of this script may be malformed. I endeavour to keep up to date with the changes, but should really rebuild this script to parse whatever is thrown at it; don't hold your breath!}}

{{note|The format of the source of the Grid Status has changed many times since the creation of this script, and there's therefore every reason to assume it may change again. Should this happen, the output of this script may be malformed. I endeavour to keep up to date with the changes, but should really rebuild this script to parse whatever is thrown at it; don't hold your breath!}}

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.

PJIRA Issue Tracker

Tuition

Free Scripts

L$ Gift Giver ( V2 )

TAKE CARE WITH THIS ONE. IT WILL DEDUCT L$ FROM YOUR ACCOUNT ONCE YOU GRANT PERMISSIONS.

The script will give a gift of the stated amount of L$ to whoever touches the object it is in. The money will be deducted from the object owner's account. Only one gift will be given to each agent and only if the total amount given since the last time permissions were granted has not been maxed. Once the amount given is equal to the total stated, the script will enter a quiet state and wait to be reset.

// V2 //integer total =100; // Total amount the script is allowed to give away.integer gift =1; // Amount to give per gift./////////////////////////////////////////////key owner; // Used to store the owners UUID.integer perms; // Used to store if permissions were granted.integer given; // Used to count the total amount given.list agents =[]; // Used to store the UUIDs of the agents who have had a gift.default{on_rez(integer param){llResetScript(); // Clear all lists and reset all variables. This action will also clear the permissions.}changed(integer change){if(change & CHANGED_OWNER)// If the script or object changes ownership the script will not be ablellResetScript(); // to deduct cash from the previous owners account.}state_entry(){
owner =llGetOwner(); // Store the owners key.llRequestPermissions(owner, PERMISSION_DEBIT); // !! THIS MEANS IT WILL TAKE YOUR MONEY !!}run_time_permissions(integer perm){if(perm & PERMISSION_DEBIT)// Have we got the permissions we requested?
perms =TRUE; // Store the result of success.elsellRequestPermissions(owner, PERMISSION_DEBIT); // If not we ask for them again.}touch_start(integer nd){while(nd && (given < total) && perms)// Have we got permissions? Have we given less than the total allowed?{key agent =llDetectedKey(--nd); // grab the UUID of the touching agent.if(llListFindList(agents, [agent])==-1)// Have we already given a gift to this agent?{
agents +=[agent]; // Add the agent to the list.llGiveMoney(agent, gift); // Give the gift to the agent who touched us.if((given += gift)== total)// Increment the amount given by the amount just given and check if we have maxxed out yet.state maxxed_out; // If maxxed out, go to a state with no touch_ event so we are not repeatedly messaged.}}}}state maxxed_out
{state_entry(){llInstantMessage(owner, "The total amount this object can give away has been given."+// Contact the owner."\nTo allow more to be given the script must be reset.");
}}

Linked Multi-Prim Drawers (2 scripts) ( V4 )

Could also be used for doors etc.

Instructions (Copy to NC or Script)

// V4 //
// INSTRUCTIONS FOR USE (there are two scripts that make up the set)
// Make your chest of drawers and link the whole set together with the body (any prim that doesn't move) of the chest as the root.
// Name every prim used as a part of a drawer (include handles, drawer fronts, bases etc.) "drawer " plus a number.
// All the prims of one drawer should now all be named the same. e.g. "drawer 1".
// Name every drawer a different number. e.g. "drawer 1", "drawer 2" etc.
// With all the parts named correctly, edit the object so that all the drawers are closed.
// At this point you might want to take a copy.
// Be sure that no prims are named "drawer (something)" unless they are supposed to be (according to the above).
// Drop both the scripts (at the same time or "Linkypooz" first) into the root of the object.
// You will get further instructions in local chat. Follow them.

Script Delivery Script

// V4 //default{state_entry(){integer count;
integer links =llGetNumberOfPrims();
do{string name =llGetLinkName(count);
if(llGetSubString(name, 0, 5)=="drawer"){key link_key =llGetLinkKey(count);
llGiveInventory(link_key, "Linkypooz"); // This is why the other script needs to be called "Linkypooz"}// You can change it if you like.}while((++count) < (links +1));
llOwnerSay("\n\nNow take the object to inventory and re-rez.
\n\nOpen an edit on the object.
\n\nGo to the tools menu and, at the bottom of the menu click \"Set Scripts Running in Selection\".
\n\nEdit all the prims of the drawers from the closed position/rotation to the open position/rotation.
\n\nWhen all the prims of the drawers are set open (you can do one prim at a time or all together, which ever you prefer), touch each prim.
\n\nWhen the prim is touched it will automatically close.
\n\nWhen all the prims of all the drawers are in the closed position/rotation the scripts are fully set up.
\n\nThey will chat that they are active when ready.
\n\nNow touch the root and the script in it will self delete.
\n\nThat's all!!");
llRemoveInventory(llGetScriptName());
}}

Grid Status Updater ( V24 )

Checks the Second Life Grid Status every five minutes to see if there are any new issues. If there are it will IM you.

Drop this script onto any prim that is currently not expected to do something else (e.g. a wall or floor etc) and let it run. If it is in an attachment it will work fine but, only while you are logged in. The script will maintain the name of the prim (or object if in a root) but when sending an update will use a special name set by you. This is simply more aesthetically pleasing. Getting an update from "Ceiling Fan" can seem a little odd.

NOTE: The format of the source of the Grid Status has changed many times since the creation of this script, and there's therefore every reason to assume it may change again. Should this happen, the output of this script may be malformed. I endeavour to keep up to date with the changes, but should really rebuild this script to parse whatever is thrown at it; don't hold your breath!

Simple Texturing Helpers

Touch Texture Getter ( V2 )

Put this script in the root prim of an object and touch whichever face of whichever prim you want the texture UUID of. It will be chatted to you. If you do not have permission to get the UUID you will not get it! A long held touch will delete the script.

Enzeroizer (Rotation Fixer) ( V3 )

Drop this into the root of your linked object and it will self seed to all links in a set (object). After re-rezzing the object and setting the scripts running it will set the rotations to whatever they were but with the smallest 3 decimal places made 000.

This will make minor rotational drifts that occur due to one of our favorite bugs less of an issue.
I have done light testing and think it's fine. Make a copy of your object before using this script just in case it goes wrong.
I will post an updated version using llGetLinkPrimitiveParams & llSetLinkPrimitiveParamsFast at some time.

// V3 //
SelfSeed()// The function name.{string name =llGetScriptName(); // Store the name of this script to save calling for it over and over.integer links_in_set =llGetObjectPrimCount(llGetKey()); // Store how many links there are.integer count =2; // Establish a counter that will start at the next link in the set.do// This is the point from which we loop if the while condition is met.llGiveInventory(llGetLinkKey(count), name); // Deliver a copy of this script to the link number "count".while((++count) <= links_in_set); // Increment "count" and check if it is still less than or equal to the number of links.}// If "count" is not more than the number of links loop back to "do".float Float(float f)// The function name and the float data it carries.{return((float)(llDeleteSubString(((string)f), -3, -1)+"000")); // Typecast the delivered float to a string.// Chop the last 3 characters off the string and add 3 zeros.// Then typecast the result to a float and return it.}
Enzeroize()// The function name.{vector rot =(llRot2Euler(llGetLocalRot())*RAD_TO_DEG); // Store the local rotation of the prim as a vector.// Below : Take each of the axes (X, Y & Z) and feed to the "Float()" function then convert the vector to a rotation and set it.llSetLocalRot(llEuler2Rot(<Float(rot.x), Float(rot.y), Float(rot.z)>*DEG_TO_RAD));
}default// Create a state.{state_entry()// On entering the state...{if(llGetLinkNumber()==1)// ...Check if we are the root of a LINK_SET.{
SelfSeed(); // Call the "SelfSeed()" function.
Enzeroize(); // Call the "Enzeroize()" function.// Below : Issue instructions in chat to the owner of the object.llOwnerSay("\nTake me to your inventory and re-rez me."+"\nThen open an edit on me and goto your \"Tools\" menu."+"\nNear the bottom of the menu click \"Set Scripts Running In Selection\"."+"\nAll the scripts will self delete after Enzeroizing.");
}else// If not in the root or if not in a LINK_SET...
Enzeroize(); // ...Call the "Enzeroize()" function.llRemoveInventory(llGetScriptName()); // Whether in the root or not, this script removes itself from the prim.}}

Pose Stand ( V4 )

Multi type, multi sex, multi story car park? Nope it just does poses.

Create a fresh prim and drop this script on it. You have an instant pose stand. Then fill it with various poses and animations and copy the names of the animations into the lists at the top of the script. As you can see there are categories for 3 sex types and 3 body types. You could change these to suit (e.g. 3 styles (action, silly, erotic)) and 3 other things if you liked.

Just put the names in the list that it makes most sense to put it in. As you sit on the stand (maybe these things should be called pose seats) you will be posted a dialog menu asking for "What type" then "What sex" then the list of anims appropriate for those choices. After making the animation choice, to recall the dialog menu click the pose stand.

I kinda rushed to the finish with this one because something else came up. I will probably get back to it sometime but for now it seems to work ok.