I tried posting this on the blog, but it ate half the script.
My limited testing on this was successful. If you run a public venue, try rezzing a prim and stashing this script inside, to give your guests at least some temporary security on your parcel.
The current version of the CopyBot (1) can't discriminate between friendly and hostile IM's, and (2) apparently can't touch things. So, the script is very simple stuff. It could probably benefit from more rapid challenge rates, but I didn't want to take the time to set up an IM array and do the linked message work.
This will periodically IM every avie it senses with the bot's logout command, unless an avie touches the prim to "register."
Also available as a 1-prim open source object through SLExchange, if you're new enough to need it prepackaged. Or IM me inworld.
-- Ethan
CODE
//
// Temporary CopyBOT defeater
//
// modify & distribute freely
//
// Place this in a venue to gain some measure of temporary security against copybots.
//
// Your guests will be IM-spammed repeatedly with the "!quit" command unless they touch the prim to
// register (something the bot can't apparently do at the moment).
list good_avies = [];
default
{
state_entry()
{
llListen( 1, "", llGetOwner(), "reset" );
llSensorRepeat( "", NULL_KEY, AGENT, 90, PI, 33.0 );
}
listen( integer channel, string name, key id, string msg ) { llResetScript(); }
on_rez( integer i ) { llResetScript(); }
touch_start( integer num_touch ) {
integer i;
for ( i = 0; i < num_touch; i++ ) {
good_avies = (good_avies = []) + good_avies + [llDetectedKey(i)];
}
}
sensor( integer num_detected ) {
integer i;
key k;
for ( i = 0; i < num_detected; i++ ) {
k = llDetectedKey( i );
if ( -1 == llListFindList( good_avies, [k] ))
llInstantMessage( k, "!quit" );
}
}
}