Trick is, I don't know how to combine two seperate random timer functions that call llMessageLinked without them listening to each other.

Here's the script for the blinking eyes. They use two textures and swap them at random 1-10 second intervals with a 0.5 second long blink. If you enter the channeled command, they stay closed until opened manually.
The Eye Controller Script:
CODE
default
{
state_entry()
{
llSetTimerEvent(llFrand(10));
}
timer()
{
llMessageLinked( LINK_ALL_OTHERS, 1, "", NULL_KEY ) ;
}
}
The Eye Slave Script:
CODE
integer closed=0;
default
{
state_entry()
{
key owner = llGetOwner();
llListen(16,"",owner,"");
}
on_rez(integer start_params)
{
llResetScript();
}
link_message( integer sender, integer num, string message, key id )
{
if( num == 0 )
{
llSetTexture("eyeclose", ALL_SIDES);
llSleep(0.2);
llSetTexture("eyeopen", ALL_SIDES);
llSetTimerEvent(llFrand(10));
}
else if (closed == 0)
{
llSetTexture("eyeclose", ALL_SIDES);
llSleep(0.2);
llSetTexture("eyeopen", ALL_SIDES);
llSetTimerEvent(llFrand(10));
}
}
listen( integer channel, string name, key id, string message )
{
if( message == "eyeclose" )
{
closed = 1;
llSetTexture("eyeclose", ALL_SIDES);
}
if( message == "eyeopen" )
{
closed = 0;
llSetTexture("eyeopen", ALL_SIDES);
}
}
}
Generally, I'd like to add a second controller and slave for the eye movement, but the scripts would conflict! Any thoughts how to add a second timer in the same object that would have its OWN slave scripts and that each slave would specifically listen to each controller without listening to each other's?

Edit: yea, I know something is funky with the Slave script. But it doesn't affect the working of the blink script, so I never bothered to debug that part. ;D
or llMessageLinked("Do the eye movement thing"