Blacklisted: Mouse Pointer Follower

Written by Kitsune

This item has been blacklisted by Linden Labs and if you want to have that funny mouse pointer to follow you again, you will have to assemble it yourself.

 

IMAGE UUID : 11e80daf-116f-9b43-3ad6-64f4c932e7ab

Script 1: “Cross’ Particle Function Script”

updateparticles()
{
    llParticleSystem( [
 
        PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_DROP,    // DROP, EXPLODE, ANGLE, ANGLE_CONE, ANGLE_CONE_EMPTY
 
        PSYS_SRC_MAX_AGE, 0.0,                        // How long the emitter runs, 0 should be indefinite
        PSYS_PART_MAX_AGE, 0.65,                       // How long each particle lives, max 30 seconds
        PSYS_SRC_BURST_RATE, 0.5,                     // Interval between generating bursts of particles, in seconds
        PSYS_SRC_BURST_PART_COUNT, 3,              // How many particles to generate with each burst
 
        PSYS_SRC_BURST_RADIUS, 0.0,                   // How far from the source to generate particle bursts, m (not compatible with FOLLOW_SRC)
        PSYS_SRC_BURST_SPEED_MIN, 1.0,                // Minimum speed of generated particles, m/s
        PSYS_SRC_BURST_SPEED_MAX, 1.0,                // Maximum speed of generated particles, m/s
        //PSYS_SRC_ACCEL, < 0, 0, 0 >,                // Particle acceleration vector, m/s
 
        //PSYS_SRC_ANGLE_BEGIN, 0,                    // Angle (in radians) specifying a cone where particles ARE NOT generated
        //PSYS_SRC_ANGLE_END, 0,                      // Angle (in radians) specifying a cone where particles ARE generated
        //PSYS_SRC_OMEGA, < 0, 0, 0 >,                // Angular velocity for ANGLE patterns
 
        PSYS_PART_START_ALPHA, 0.5,                 // Start alpha for particles, 0-1
        //PSYS_PART_END_ALPHA, 1.0,                   // End alpha for particles, 0-1
        PSYS_PART_START_SCALE, < 0.15, 0.2, 0>,      // Start diameter of particles, m
        //PSYS_PART_END_SCALE, < 0.1, 0.1, 0>,        // End diameter of particles, m
        PSYS_PART_START_COLOR, < 1, 1, 1 >,         // Start color of particles
        //PSYS_PART_END_COLOR, < 1, 1, 1 >,           // End color of particles
        PSYS_SRC_TEXTURE, (string)"mouse_pointer",               // Name (or key) of texture to use on particles
 
        //PSYS_SRC_TARGET_KEY, (key) "",              // Particles move towards the object who's key is specified
 
        PSYS_PART_FLAGS,
 
            //PSYS_PART_BOUNCE_MASK |                 // Particles bounce off of the plane of the emitter's z-axis height
            PSYS_PART_EMISSIVE_MASK |               // Particles glow fullbright instead of reflecting light
            PSYS_PART_FOLLOW_SRC_MASK |             // Particles position remains relative with the source, ie. they move with it
            //PSYS_PART_FOLLOW_VELOCITY_MASK |        // Particles rotate to point their vertical axis in the direction of motion
            //PSYS_PART_INTERP_COLOR_MASK |           // Particles interpolate color and alpha from start to end
            //PSYS_PART_INTERP_SCALE_MASK |           // Particles interpolate scale from beginning to end
            //PSYS_PART_TARGET_POS_MASK |             // Particles move towards target defined in PSYS_SRC_TARGET_KEY
            //PSYS_PART_TARGET_LINEAR_MASK |          // Particles move in straight line to target (unofficial?)
            //PSYS_PART_WIND_MASK |                   // Particles are affected by in-world wind
 
        0 ]
    ) ;
}
 
default
{
    state_entry()
    {
        updateparticles() ;
    }
 
    touch_start(integer total_number)
    {
        llResetScript() ;
    }
}

 

 

Script 2: “Swarm Follower Script 1.2 (no colorchange)”

 

vector gvMyOffset = < 1, 0, 0 > ;       // The starting position, relative to the avatar
 
float gfSpinRate = 5 ;                  // The rate at which the objects should revolve, in degrees / second
 
integer gbIsFalling = FALSE ;           // Is the object currently dropping?
 
integer giLostOwner = FALSE ;           // I WANT MY MOMMY!!!!
 
default
{
    state_entry()
    {
        gvMyOffset *= llEuler2Rot( < 0, 0, llFrand( 360 ) > ) ;     // Randomly pick a new starting point somewhere around the avatar.
        gvMyOffset.z = llFrand( 2 ) - 0.75 ;                        // Randomly choose a starting height offset.
 
        llSetStatus( STATUS_PHYSICS | STATUS_PHANTOM, TRUE ) ;
        llCollisionSound( "", 0 ) ;
 
        llListen( 4340, "", llGetOwner(), "" ) ;
        llSensorRepeat( "", llGetOwner(), AGENT, 50, PI, 1 ) ;
    }
 
    on_rez( integer param )
    {
        llSetStatus( STATUS_PHYSICS, FALSE ) ;
        llResetScript() ;
    }
 
    sensor( integer num_detected )
    {
        llSetTimerEvent( 0 ) ;          // Stop the kill timer
        giLostOwner = FALSE ;
 
        vector targetpos = llDetectedPos( 0 ) ;
        vector destination = targetpos + gvMyOffset * llDetectedRot( 0 ) ; // Calculate target pos
 
        llMoveToTarget( destination, 1 ) ;
 
        gvMyOffset *= llEuler2Rot( < 0, 0, 5 * DEG_TO_RAD > ) ;     // Rotate the offset for next sensor pulse
 
        if ( gvMyOffset.z >= 1.0 )
        {
            gbIsFalling = TRUE ;
        }
 
        else if ( gvMyOffset.z <= -1.0 )
        {
            gbIsFalling = FALSE ;
        }
 
        if ( gbIsFalling == TRUE )
        {
            gvMyOffset.z -= llFrand( 0.25 ) ;
        }
 
        else
        {
            gvMyOffset.z += llFrand( 0.25 ) ;
        }
    }
 
    no_sensor()
    {
        if( !giLostOwner )
        {
            giLostOwner = TRUE ;
            llSetTimerEvent( 60 ) ;
        }
    }
 
    timer()
    {
        llDie() ;
    }
 
    listen( integer channel, string name, key id, string message )
    {
        if( message == "die" )
        {
            llDie() ;
        }
    }
 
}