~Fiona's Script Library~
vibe.lsl
| 3.26 KB
//Copyright 2025 Fiona Sweet - free to use for any purpose including but not limited to masturbation
// Dildo: play a one-shot animation on attach (OpenSim/SL-compatible)
string ANIM_NAME = "F MasterbateDildo3";
float ANIM_TIME = 180.0;
key gWearer;
integer gHasPerms;
do_swat()
{
if (llGetInventoryType(ANIM_NAME) != INVENTORY_ANIMATION)
{
llOwnerSay("[Fiona's Vibrator] Missing animation '" + ANIM_NAME + "'.");
return;
}
if (!gHasPerms) {
// request (again) in case we lost perms after crossing, etc.
gWearer = llGetOwner();
llRequestPermissions(gWearer, PERMISSION_TRIGGER_ANIMATION);
return;
}
llStartAnimation(ANIM_NAME);
llSetTimerEvent(ANIM_TIME);
}
default
{
state_entry()
{
gWearer = llGetOwner();
gHasPerms = FALSE;
// If the script is dropped in while already worn, attach() won’t fire
if (llGetAttached()) {
llOwnerSay("Hi baby, are you ready to masturbate? My batteries are fully charged... If you want some help getting off, give me a ring. hop://login.zetaworlds.com/app/agent/3faa2410-7ada-423c-98e4-cec0b6194ba5/about");
llRequestPermissions(gWearer, PERMISSION_TRIGGER_ANIMATION);
}
}
on_rez(integer start_param)
{
// fresh start if rezzed on the ground and then worn later
llResetScript();
}
// Works on platforms where it fires reliably
attach(key id)
{
if (id != NULL_KEY) {
gWearer = id;
gHasPerms = FALSE;
llOwnerSay("[Fiona's Vibrator] attach() fired; requesting perms.");
llRequestPermissions(gWearer, PERMISSION_TRIGGER_ANIMATION);
} else {
// detaching
llSetTimerEvent(0.0);
llStopAnimation(ANIM_NAME);
gHasPerms = FALSE;
}
}
run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION) {
gHasPerms = TRUE;
do_swat();
} else {
llOwnerSay("[Fiona's Vibrator] Permission denied.");
}
}
timer()
{
llStopAnimation(ANIM_NAME);
llSetTimerEvent(0.0);
}
changed(integer c)
{
// Owner change: wipe and re-perm
if (c & CHANGED_OWNER) llResetScript();
// Inventory update: animation might have been added/renamed
if ((c & CHANGED_INVENTORY) && llGetAttached()) {
// Try again if we have perms
if (gHasPerms) do_swat();
}
// Region crossing / teleport can drop perms or miss attach()
if ((c & (CHANGED_REGION | CHANGED_TELEPORT)) && llGetAttached()) {
gHasPerms = FALSE; // be safe; re-ask
llOwnerSay("[Fiona's Vibrator] Crossing/teleport detected; requesting perms.");
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}
// Fallback for some OpenSim forks: link changes on attach/detach
if ((c & CHANGED_LINK)) {
if (llGetAttached()) {
gHasPerms = FALSE;
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
} else {
llSetTimerEvent(0.0);
llStopAnimation(ANIM_NAME);
}
}
}
}