AO Overriding Pose Ball
Revision as of 17:29, 28 November 2007 by Jesse Barnett (talk | contribs) (→AO Overrider Pose Ball)
AO Overrider Pose Ball
Tired of having to turn your animation overrider off and on whenever you want to sit on a poseball? Just drop this script in along with the pose and it will automatically stop your active animations. When you stand up, your AO will still be running and active.
//AO Overrider Pose Ball Script V 1.2 //Updated 11/09/2006 //Created by Jesse Barnett //Edited to check if there is an animation to stop //and Sit Position is stored in Object Description //Drop this in a prim along with an animation. Store the sit //position in the Object description //Example; <0.0, 0.0, 1.0> //If you change this then reset the script by using right //click/reset for changes to apply immediately. If you forget then it will display //"reset script" when you sit. Just stand and sit again for changes to take effect //To see how it works and hear it go through the animations it is stopping, then //make idebug = TRUE; integer idebug = FALSE;//if TRUE then llOwnerSay sdebugs string sdebug; integer perm;//permissions string anim2run;//animation in inventory vector sit_pos;//adjust as needed in object description Example: <0.0, 0.0, 1.0> list anims2stop;//default or AO sit animation float sleep = 0.5;//duration of llSleep in seconds debug(){ if(idebug == 1) llOwnerSay(sdebug); } sit_desc_change(){ if((sit_pos + (vector)llGetObjectDesc()) != (sit_pos* 2)) llResetScript(); //This checks to see if the description field matchs the stored position else llSitTarget(sit_pos, ZERO_ROTATION); } stop_anim(){ integer list_pos = 0; integer list_length = llGetListLength(anims2stop); sdebug = (string)list_length; debug(); if(list_length > 0){ while(list_pos < list_length){ llStopAnimation(llList2String(anims2stop, list_pos)); sdebug = (string)list_pos; debug(); list_pos++; } } } default{ state_entry(){ llSetTouchText("Reset"); llOwnerSay("Script Reset."); anim2run=llGetInventoryName(INVENTORY_ANIMATION,0) ; sit_pos = (vector)llGetObjectDesc(); sit_desc_change(); perm=llGetPermissions(); } touch_start(integer num_detected) { llResetScript(); } changed(integer change){ if (change & CHANGED_LINK) if (llAvatarOnSitTarget() != NULL_KEY){ llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TRIGGER_ANIMATION); } else{ perm=llGetPermissions(); if ((perm & PERMISSION_TRIGGER_ANIMATION) && llStringLength(anim2run)>0) llStopAnimation(anim2run); llSetAlpha(1.0, ALL_SIDES); } } run_time_permissions(integer perm){ if (perm & PERMISSION_TRIGGER_ANIMATION) anims2stop = [];//Clears the list sdebug = "perms granted"; llStopAnimation("sit"); llSleep(sleep);//need sleep to give avatar time to cycle from stand //to default sit to AO sit anims2stop = llGetAnimationList(llAvatarOnSitTarget()); sdebug = llList2CSV(anims2stop); debug(); stop_anim();//This runs the subroutine up top . llSetAlpha(0.0, ALL_SIDES); llStartAnimation(anim2run); sdebug = "anim2run started"; debug(); } }