This is a half-hour's work, one prim and multi anim. Not changing the color thet is true, but if she really wants I can make it.
And it is free (if she wants can pay me I'm not gona say no).
// TWO-BUTTON ANIMATION VENDOR not any more
// Origional script by Thili Playfair
// Heavily Modified by Karandas Banjo
// Radically modified by Ariane Brodie who converted the texture vendor into an animation vendor script
// Modified to a multi anim posball Pickles Leeeroy
// Please include these names if you modify or
// re-distribute this code
// Just drop your animations into the main prim,
// and touch the prim, and you're ready
float time = 0; // Enter a value if you want time based
// scrolling otherwise set to zero.
// NO TOUCHY BELOW HERE
string vendorname;
integer total;
integer counter;
integer change;
integer anim_on = FALSE;
string curranim;
string lastanim;
vector offset=<0,0,1.0>;
key avatar;
default
{
state_entry()
{
rotation rot = llEuler2Rot(<0,0,PI>);
llSetSitText("Animate");
llSitTarget(offset,rot);
llSetCameraAtOffset(<0.0,0.0,1.0>);
llSetCameraEyeOffset(<-4.0,0.0,1.0>);
}
touch_start(integer total_number)
{
total=llGetInventoryNumber(INVENTORY_ANIMATION);
vendorname = llGetObjectName();
counter++;
if(counter>=total)
{
counter=0;
}
lastanim = curranim;
curranim = llGetInventoryName(INVENTORY_ANIMATION, counter);
if (anim_on)
{
llStopAnimation(lastanim);
llStartAnimation(curranim);
}
}
changed(integer change)
{
if(change == CHANGED_LINK)
{
avatar = llAvatarOnSitTarget();
if(avatar != NULL_KEY)
{
llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
}
else
{
if (llGetPermissionsKey() != NULL_KEY) {
llStopAnimation(curranim);
anim_on = FALSE;
}
}
}
}
run_time_permissions(integer perm)
{
if(perm == PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation("sit");
llStartAnimation(curranim);
anim_on = TRUE;
}
}
}