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() ; } } }