I'm sorry that dropped character thing throws ya - I only did that to test it with a fixed UUID code to see if it worked - and then dropped one digit to test that it could read it. I tried to do everything suggested and still does not work unless I hard code the UUID into the laser code manually. To complicate things a bit from your advices, I think I can only listen to one channel, so the UUID has to be interpreted on the same channel that the normal commands are sent (I think). The command "GiveUUID" and "lasers" are sent on channel -31 through a hud. Here are the codes for the rest. Sorry for the novice work.
Target Object:
integer lA = -1; // listen handler on channel /1
integer iSteps = 30;
// How many steps the door will open in, used to provide the
// illusion of sliding. Fewer steps means it opens faster,
// but more steps will make it "slide" smoother.
float vOffset = -0.25;
// Indicates how far the door will move with each step relative to the local axis.
// Multiply by iSteps to calculate the total distance the
// door will move.
integer axis = 3;
//which local axis to move on, if not 1, 2, or 3 it uses the x axis
//1 is the x axis (forward/backward)
//2 is the y axis (left/right)
//3 is the z axis (up/down)
vector vBase;
// Used to "un-stick" the door if something blocks it.
// Not sure if this is needed since 0.5.1, objects don't
// seem to block the door any more. Leaving it in just
// in case, though. I think attempting to edit the door
// while it's moving may make it stick. This will solve
// that problem as well.
float fOpenTime = 0.5;
// How long the door stays open
integer bMove = FALSE;
// Is the door moving?
integer bLock = FALSE;
// Is the door locked?
integer bVerbose = FALSE;
// Confirm when owner locks/unlocks the door.
integer vOpen = TRUE;
//Is the door open?
integer i;
string running = "off";
open()
{
llSetTimerEvent(fOpenTime);
if (running == "on"

{
if(vOpen == FALSE)
{
llSetAlpha(0.0, ALL_SIDES); // set entire prim 100% invisible.//
integer X;
vector global = llGetPos();
vector local = llRot2Fwd(llGetRot());
if(axis == 2)
local = llRot2Left(llGetRot());
if(axis == 3)
local = llRot2Up(llGetRot());
for(X = 0; X < iSteps; X++)
{
llSetPos(llGetPos() + local*vOffset);
}
llSetPos(global + vOffset*iSteps*local);
vOpen = TRUE;
}
else if(vOpen == TRUE)
{
integer X;
vector global = llGetPos();
vector local = llRot2Fwd(llGetRot());
if(axis == 2)
local = llRot2Left(llGetRot());
if(axis == 3)
local = llRot2Up(llGetRot());
for(X = 0; X < iSteps; X++)
{
llSetPos(llGetPos() - local*vOffset);
}
llSetPos(global - vOffset*iSteps*local);
vOpen = FALSE;
}
}
}
default
{
on_rez(integer start_param) {
llOwnerSay((string)llGetKey());
llRegionSay( -30, (string) llGetKey());
}
state_entry()
{
llListen( -30, "", "", "" );
}
listen( integer channel, string name, key id, string message )
{
if (message == "lasers"

{
if (running == "off"

{
running = "on";
open();
} else {
running = "off";
open();
}
}
else if (message == "GiveUUID"

{
llSay(-30,(string)llGetKey());
llOwnerSay((string)llGetKey());
}
}
timer() {
open();
}
}
/End Code
---------------
Laser Object:
//// "Glow" PARTICLE TEMPLATE v1 - by Jopsy Pendragon - 4/8/2008
//// You are free to use this script as you please, so long as you include this line:
//** The original 'free' version of this script came from THE PARTICLE LABORATORY. **//
// SETUP: Drop one optional particle texture and this script into a prim.
// Particles should start automatically. (Reset) the script if you insert a
// particle texture later on. Add one or more CONTROLLER TEMPLATES to any
// prims in the linked object to control when particles turn ON and OFF.
// Customize the particle_parameter values below to create your unique
// particle effect and click SAVE. Values are explained along with their
// min/max and default values further down in this script.
list known_asset_keys=[ <1.0,1.0,1.0>, <1.0,0.5,0.0>, <0.0,0.5,1.0>, <0.5,1.0,0.0>, <1.0,0.0,0.5>, <0.0,1.0,0.5> ];
key target = "";
//key target;
string laseron = "off";
integer ADD_CONTENTS = FALSE; // set to false to ignore textures in contents.
integer RANDOMIZE = FALSE; // set to false to cycle through texture in order.
float UPDATE_INTERVAL = 0.25; // # of seconds to wait before changing particle textures
integer num = 0;
string CONTROLLER_ID = "B"; // See comments at end regarding CONTROLLERS.
integer nextobject = 2;
integer AUTO_START = FALSE; // Optionally FALSE only if using CONTROLLERS.
integer num_textures; // # of textures in contents
list known_textures; // names found of textures in contents
integer current_texture; // tracks current texture when in sequential(non-random) mode.
integer current_texture2;
list particle_parameters=[]; // stores your custom particle effect, defined below.
list UUIDCode=[];
list target_parameters=[]; // remembers targets found using TARGET TEMPLATE scripts.
list other_texture=[];
get_texture_names() {
integer i;
known_textures = known_asset_keys;
num_textures += llGetListLength( known_asset_keys );
if ( ! RANDOMIZE && current_texture > num_textures ) current_texture = num_textures;
if ( ! RANDOMIZE && current_texture2 > num_textures ) current_texture2 = num_textures;
}
list pick_texture1() {
if ( RANDOMIZE )
return( [ PSYS_PART_START_COLOR, llList2Vector( known_textures, (integer)llFrand(llGetListLength
(known_textures) ) ), PSYS_PART_END_COLOR, llList2Vector( known_textures, (integer)llFrand(llGetListLength
(known_textures) ) )]);
else {
if ( num_textures ) current_texture = ( current_texture + 1 ) % num_textures;
if ( num_textures ) current_texture2 = ( current_texture2 + 2 ) % num_textures;
return( [ PSYS_PART_START_COLOR, llList2Vector( known_textures, current_texture ), PSYS_PART_END_COLOR,
llList2Vector( known_textures, current_texture2 )]);
}
}
default {
changed(integer change_type ) {
if ( ADD_CONTENTS && (change_type & CHANGED_INVENTORY) ) get_texture_names();
}
state_entry() {
llListen( -30, "", "", "" );
get_texture_names();
particle_parameters = [ // start of particle settings
// Texture Parameters:
PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0),
// PSYS_PART_START_SCALE, <0.1, .3, FALSE>, PSYS_PART_END_SCALE, <.1, 0.3, FALSE>,
PSYS_PART_START_ALPHA, (float)1,
PSYS_PART_END_ALPHA, (float)1,
// Production Parameters:
// PSYS_SRC_BURST_PART_COUNT, (integer)10,
PSYS_SRC_BURST_RATE, (float) 0.150,
// PSYS_PART_MAX_AGE, (float)1.0,
PSYS_SRC_MAX_AGE,(float) 0.0,
// Placement Parameters:
PSYS_SRC_PATTERN, (integer)8, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE,
// Placement Parameters (for any non-DROP pattern):
// PSYS_SRC_BURST_SPEED_MIN, (float)2.0, PSYS_SRC_BURST_SPEED_MAX, (float)2.0,
// PSYS_SRC_BURST_RADIUS, 0.1,
// Placement Parameters (only for ANGLE & CONE patterns):
// PSYS_SRC_ANGLE_BEGIN, (float) 0.15*PI, PSYS_SRC_ANGLE_END, (float)0.03*PI,
// PSYS_SRC_OMEGA, <0,0,0>,
// After-Effect & Influence Parameters:
PSYS_SRC_ACCEL, <0.0,0.0, -0.1 >,
//PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNumber() + 1),
PSYS_SRC_TARGET_KEY, target,
PSYS_PART_FLAGS, (integer)( 0 // Texture Options:
| PSYS_PART_INTERP_COLOR_MASK
| PSYS_PART_INTERP_SCALE_MASK
| PSYS_PART_EMISSIVE_MASK
| PSYS_PART_FOLLOW_VELOCITY_MASK
// After-effect & Influence Options:
// | PSYS_PART_WIND_MASK
// | PSYS_PART_BOUNCE_MASK
// | PSYS_PART_FOLLOW_SRC_MASK
// // | PSYS_PART_TARGET_POS_MASK
| PSYS_PART_TARGET_LINEAR_MASK
)
//end of particle settings
];
if ( AUTO_START ) {
other_texture = [PSYS_PART_START_SCALE, <.1, 2, FALSE>, PSYS_PART_END_SCALE, <.1, 2.0, FALSE>, PSYS_SRC_BURST_PART_COUNT,
(integer)5, PSYS_SRC_BURST_RADIUS, 0.0, PSYS_SRC_BURST_SPEED_MIN, (float)1, PSYS_SRC_BURST_SPEED_MAX, (float)7,
PSYS_PART_MAX_AGE, (float)1.0, PSYS_SRC_ANGLE_BEGIN, (float) 0.000*PI, PSYS_SRC_ANGLE_END, (float) 0.001*PI ]; //LaserBeam
llParticleSystem( particle_parameters + pick_texture1() + other_texture);
llSetTimerEvent(1.5);
}
}
listen( integer channel, string name, key id, string mesg )
{
if ( llStringLength(mesg) == 36 ) // check for the UUID of chase ball
{
target = (key)mesg;
//UUIDCode = llParseString2List(mesg, [], []);
//target = llList2Key(UUIDCode,0);
llOwnerSay(target);
}
if ( mesg == "lasers" ) // Message says to turn particles on and off
{
if ( laseron == "on" )
{
llParticleSystem( [] );
llSetTimerEvent(0.0);
laseron = "off";
} else {
other_texture = [PSYS_PART_START_SCALE, <.1, 2, FALSE>,
PSYS_PART_END_SCALE, <.1, 2.0, FALSE>, PSYS_SRC_BURST_PART_COUNT, (integer)5,
PSYS_SRC_BURST_RADIUS, 0.0, PSYS_SRC_BURST_SPEED_MIN, (float)1,
PSYS_SRC_BURST_SPEED_MAX, (float)7, PSYS_PART_MAX_AGE, (float)1.0,
PSYS_SRC_ANGLE_BEGIN, (float) 0.000*PI,
PSYS_SRC_ANGLE_END, (float) 0.001*PI ]; //Laser Beam
llParticleSystem( particle_parameters + pick_texture1() + other_texture);
llSetTimerEvent(1.5);
laseron = "on";
}
} else { // bad instruction number
// do nothing.
}
}
timer() {
llParticleSystem( particle_parameters + target_parameters + pick_texture1() + other_texture );
}
}
//== END ========
---------------------------
I guess I should have re-executed the AUTO_RUN feature to at least knock out that variable for testing. Just for clarification, the on_rez state did not work, so I added the additional command to simply send the UUID on command. I did not know if the on_rez executes on a simple script reset.
I agree with you this should be very simple, but for some reason is not

I'm missing something, and I'm beginning to feel like such a dipstick.