Edie_Shoreland icon

Temporary Automatic Animation Changer with Occupancy

Edie_Shoreland | PRO | 08/30/18 12:26:01 AM UTC | 0 ⭐ | 9016 👁️ | Never ⏰ | []
Linden Scripting |

0 B

|

None

|

0 👍

/

0 👎

//This script was originally designed for gachas using AVSitter, but is also ideal for
//objects that can be modified containing AVpos notecards that cannot be edited or
//for AVpos notecards (like ones in gacha items) that you may not want to edit.
 
//CHANGE THE NAMES IN ani_names TO THE NAMES OF ANIMATIONS IN THE SIT MENU/AVpos NOTECARD
//YOU WANT TO RANDOMLY CYCLE THROUGH. (You can add more names, just use quotation marks.)
list ani_names = ["Male_01", "Male_05", "Male_06", "Male_10", "Female_05", "Female_06", "Female_08", "Male_08"];
 
//CHANGE THE INTEGER IN Tcycle TO THE NUMBER OF SECONDS YOU WANT BETWEEN ANIMATION AND
//POSE CHANGES.
integer Tcycle = 110;
 
float randomFloat;
string aniname;
integer aninumber;
integer synched; 
 
//CHANGE THIS NUMBER TO THE MAXIMUM NUMBER OF AVATARS THAT YOU WANT SEATED ON THIS OBJECT. 
//THIS VALUE IS USED IN COMBINATION WITH THE Bot_Signal FUNCTION.
integer max_sitters = 1;
 
//BotSignal uses the description field to communicate maximum occupancy to scripted agents.
//If you're using AVSitter to cycle through animations for NPCs or bots this is a low lag
//way to convey this information using llGetObjectDetails through a second script instead of
//using a listen event.
string Bot_Signal(integer Max_Occupancy)
{
    string OccORnot = "Occupied";
    if ((llGetNumberOfPrims()- llGetObjectPrimCount(llGetKey())) < Max_Occupancy) OccORnot = "Unoccupied";
    return OccORnot;
}
 
 
 
default
{
    state_entry()
    {
        synched = llGetListLength(ani_names);
        llSetTimerEvent(Tcycle);
    }
    
    timer()
    {
        randomFloat = llFrand(synched);
        aninumber = (integer)randomFloat;
        aniname = llList2String(ani_names, aninumber);
        llMessageLinked(LINK_SET,90000,aniname,"0");
    }
 
    changed(integer change)
    {
        //Here's where the Bot_Signal does it's magic...
        if (change & CHANGED_REGION_START) llSetObjectDesc(Bot_Signal(max_sitters));
        if (change & CHANGED_LINK) llSetObjectDesc(Bot_Signal(max_sitters));
        //The words "Occupied" or "Unoccupied" appear in the
        //object's description.  If the seat says "Occupied"
        //the bot can be scripted (using llGetObjectDetails)
        //to avoid that seat and find some other place to sit
        //with no listener required.
 
        if (change & CHANGED_INVENTORY) llResetScript();
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎