Detect a Ghost Prim

Expired

from Sindy Tsure:

Just a little script to tell you about the first thing it collides with. Useful for figuring out what a ghost prim is. Had to dig around for this last night so I figure I'll post it here - easier to find next time.

Put the script in a cube, move the cube a few meters over the suspected ghost, touch the cube.

default
{
     state_entry()
     {
          llSetStatus(STATUS_PHYSICS, FALSE);
     }

     touch_start(integer total_number)
     {
          llSetStatus(STATUS_PHYSICS, TRUE);
     }

     land_collision(vector position)
     {
          llOwnerSay ("hit land! no objects here..");
          llResetScript();
     }
     
     collision_start(integer count)
     {

          // todo: notice llDO returing a key and spit out web link to profile instead
          llOwnerSay ("hit '" + llDetectedName(0) + "' owned by " +
               llKey2Name((llDetectedOwner(0))));
          llResetScript();
     }
}

 

HTML Page From a Notecard on a Prim

Expired

// Example to show how a basic HTML page can be read
// from a notecard and then displayed on the face of a prim.
//
// Will also request a tinyurl to give to users on touch
// - useful for non-viewer 2.0 clients - they can still
// see the data/page but in an external browser instead.
//
// Kimm Paulino, Jan 2011
 
// Note that the HTML can only be 1024 characters long - no more!
integer HTML_FACE_DISPLAY = 2;    // See http://wiki.secondlife.com/wiki/Face
string   HTML_DEFAULT = "

HTML on a Prim Example

Kimm Paulino, Jan 2011

"; // Used when processing notecard-based questions only string HTML_NOTECARD_NAME="htmlpage"; key gNCQueryId; integer gNCLine; string gHtmlPage=""; string gTinyUrl = ""; key gUrlReqId; check_notecards() { integer nccount = llGetInventoryNumber (INVENTORY_NOTECARD); integer i; string htmlnote; gHtmlPage = ""; for (i=0 ; i

Prim Size Reducer

Expired

// Reducing Script
//
// Kimm Paulino
// Written for Stewart Bosatsu, Sept 2010
 
integer TIMER_STEPS = 18;
float   REDUCING_STEPS = 20;        // If this >= TIMER_STEPS then prim will disappear
float   TIMER_INTERVAL = 2.0;       // In seconds
integer gCount;
vector  gReducingFactor;
 
default
{
    on_rez (integer start_param)
    {
        llResetScript();
    }
 
    state_entry()
    {
        gCount = 0;
        vector size = llGetScale();
        float scaling = 1.0 / REDUCING_STEPS;
        gReducingFactor = size * scaling;
 
    }
 
    touch_start(integer total_number)
    {
        llSetTimerEvent (TIMER_INTERVAL);
    }
 
    timer ()
    {
        // Reduce the size by 1/TIMER_STEPS % each time
        gCount ++;
        if (gCount > TIMER_STEPS)
        {
            // disable and quit
            llSetTimerEvent (0.0);
            llDie();
            return;
        }
 
        // Reduce prim
        vector size = llGetScale();
 
        size = size - gReducingFactor;
        llSetScale (size);
    }
}

 

Simple Door Script

Expired

// Was asked to modify an existing door script.  I was just given
// this to update so afraid I can't give credit, but if you know where
// the original came from, do let me know.
//
// Swinging door LSL script #1
// Handles the touch event.
// Handles the collision event.
// Handles closing the door automatically via a timer event.
// Triggers sounds when the door opens or closes.
//
// Updated by Kimm Paulino, April 2010, for Synonyme Toll,
// to use local coords for the rotations instead of global
// coords.
//
// Updated by Kimm Paulino, May 2010, for Synonyme Toll,
// to use messages to link two doors together.
//
// Note: For this to work, you need a door with a path cut
//       of 0.375 to 0.875 and a width that is twice as wide
//       as you need (the cut brings it back down to the right
//       size).  Without this, it will just rotate on the spot,
//       not swing at the edge.
//
 
// Parameters you might want to change
 
float  delay = 3.0;             // time to wait before automatically closing door
                                // set to 0.0 to not automatically close
float  direction = 1.0;         // set to 1.0 or -1.0 to control direction the door swings
float  volume = 0.5;            // 0.0 is off, 1.0 is loudest
integer linked_doors = 0;       // set to 1 if using this script in a linked set of doors
float  angle = 90.0;            // angle to open in degrees
integer coll_detect = 1;        // set to 1 to make door open on approach
 
// Variables you will most likely leave the same
 
key    open_sound  = "cb340647-9680-dd5e-49c0-86edfa01b3ac";
key    close_sound = "e7ff1054-003d-d134-66be-207573f2b535";
 
// KP: Link send/recv functions
// IMPORTANT
// If you only have one pair of doors using this script, then
// these will be fine.  If you have several doors using this
// script that you don't want all opening together, then
// you'll have to change these to something unique.
//
integer LINK_MSG_NUM = 452345;
string LINK_MSG_STR_OPEN = "Open the door";
string LINK_MSG_STR_CLOSE = "Close the door";
 
linkSend (string dir)
{
    if (linked_doors)
    {
        // Note: Could try to work out the link numbers of the doors,
        // but simplest is to send to all other prims in the build.
        llMessageLinked (LINK_ALL_OTHERS, LINK_MSG_NUM, dir, NULL_KEY);
    }
}
 
integer linkRecv (integer sender_num, integer num, string str, key id, string str_to_check)
{
    if (linked_doors)
    {
        // Check it really is a message for these doors
        if (num == LINK_MSG_NUM)
        {
            if (str == str_to_check)
            {
                // All good
                return 1;
            }
        }
    }
 
    // not for us
    return 0;
}
 
// Processing for the script when it first starts up
 
default {
    // What we do when we first enter this state
 
    state_entry() {
        state open;                        // Move to the open state
    }
}
 
// Processing for the script when it is in the closed state
 
state closed {
    // What we do when we first enter this state
 
    state_entry() {
        llTriggerSound(close_sound, volume); // Trigger the sound of the door closing
        llSetLocalRot(llEuler2Rot(<0, 0, direction * angle * DEG_TO_RAD>) * llGetLocalRot());
 
    }
 
    // What we do when the door is clicked (”touched”) with the mouse
 
    touch_start(integer total_number) {
        linkSend (LINK_MSG_STR_OPEN);  // KP: Tell everyone else we are now in the open state
        state open;                        // Move to the open state
    }
 
    // What to do when something hits the door 
 
    collision_start(integer total_number)
    {
        if (coll_detect != 0)
        {
            linkSend (LINK_MSG_STR_OPEN);  // KP: Tell everyone else we are now in the open state
            state open;                        // Move to the open state
        }
    }
 
    // KP: Handle link messages
 
    link_message (integer sender_num, integer num, string str, key id)
    {
        if (linkRecv (sender_num, num, str, id, LINK_MSG_STR_OPEN))
        {
            state open;                    // Move to the open state
        }
    }
 
    // What to do when the timer goes off
 
    timer()
    {
        llSetTimerEvent(0.0);              // Set the timer to 0.0 to turn it off
    }
}
 
// Processing for the script when it is in the open state
 
state open {
    // What we do when we first enter this state
 
    state_entry() {
        llTriggerSound(open_sound, volume);// Trigger the sound of the door opening
        llSetLocalRot(llEuler2Rot(<0, 0, -direction * angle * DEG_TO_RAD>) * llGetLocalRot());
 
        llSetTimerEvent(delay);            // Set the timer to automatically close it
    }
 
    // What do do when pulling the door from Inventory if it was saved while open
 
    on_rez(integer start_param) {
        state closed;
    }
 
    // What we do when the door is clicked (”touched”) with the mouse
 
    touch_start(integer total_number) {
        linkSend (LINK_MSG_STR_CLOSE);  // KP: Tell everyone else we are now in the open state
        state closed;                      // Move to the closed state
    }
 
    // What to do when something hits the door 
 
    collision_start(integer total_number)
    {
        // Do nothing, the door is already open
    }
 
    // KP: Handle link messages
 
    link_message (integer sender_num, integer num, string str, key id)
    {
        if (linkRecv (sender_num, num, str, id, LINK_MSG_STR_CLOSE))
        {
            state closed;                    // Move to the open state
        }
    }
 
    // What to do when the timer goes off
 
    timer()
    {
        llSetTimerEvent(0.0);             // Set the timer to 0.0 to turn it off
        state closed;                     // Move to the closed state
    }
}