nPoseTeam / nPose-V2

nPose is an LSL script for use in Second Life® that allows one or more avatars to sit on (and otherwise control) objects and rez props, without poseballs. A versatile animation system/engine.
10 stars 3 forks source link

The default SL "Sit" pose is no longer compulsory #78

Closed HowardBaxton closed 8 years ago

HowardBaxton commented 8 years ago

Hi Howard, regarding the issue Grey came up with, with the new OpenCollar AO and nPose. As the AO is my fault I looked into it and without having digged deep into nPose yet, the problem seems to be related to a a non-standard SL Animation set. The new AO is full server based which means, it actually is not an AO but more a interface to change the built-in SL Animations, it uses llSetAnmiationOverride functionality. When the AO has the default sitting animation for sl (which is "Sit") changed to something else, nPose starts to get issues. I have tried this only for one avatar yet but it was reproduce-able. When the AO has changed the default sitting animation (means from AO user point of view, enabled "Animate Sits") and uses an nPose object, nPose does no longer stop previous started animations but when switching to a different animation only starts the new animation and every new change adds a new active played animation to the avatar. This does not happen, if in the AO the Sit option is turned off (means reset to the default SL "Sit") before a animation change happened by nPose. I only found related to this something in the "nPose Slave 2.0" script lines 927: if(indexx != -1) { lastAnimRunning = "Sit"; lastanim += [(string)thisAV, "Sit"]; }

I hope we can find a good solution for this. Cheers Otto.

LeonaMorro commented 8 years ago

I guess a lot of scripts are depending on the default "sit" animation and it seems to be a bad idea to change it with a AO. Nevertheless nPose should handle it the correct way. So we have to get rid of the "sit" string in the slave. Additionally we have to stop the sit animation used by the AO. I guess the function llGetAnimationOverride will be handy to do so.

HowardBaxton commented 8 years ago

my biggest concern is that all existing nPose will break. I do agree is must be fixed.

I am not convinced this is the only issue as Grey was standing near and nPose was messed up for me and my alt. Something else must be going on.

HowardBaxton commented 8 years ago

Unfortunately I cannot find a reasonable way to work around this issue.

llGetAnimationOverride requires a special permission be granted and this permission is not automatically granted to an object being sat upon. This would mean every sitter would be asked for permission every time a sync was performed as well as every time they would sit for the first time.

llGetAnimationList only gives the key for the animations rather than the name. We don't actually know which key represents the "Sitting" animation we would need.

I just don't see any reasonable way to handle this issue from within nPose.

HowardBaxton commented 8 years ago

The problem arises when we have a new sitter. The slave is looking for the default "Sit" pose to determine if this is a new sitter. This is the cause of the muck-up since the default "Sit" doesn't exist. Everything that the slave script is tracking for animations becomes junk.

I've changed the way the slave determines a new sitter from existing sitter. All seems well at this time. I will branch the changes.

LeonaMorro commented 8 years ago
GarvinTwine commented 8 years ago

Well, I gave Howard a way to work around it. You are able to check if the current Server Side sitting animation is set to "sit" or something else (not what else but if it isnt "sit" it returns ""). Here is the "do" part of the little script that does that and simply plays the sit anim in case it is not played by the server and this seems to workaround the issue well `

run_time_permissions(integer perm) {
    if ((perm & PERMISSION_TRIGGER_ANIMATION)) {
        if (llToLower(llGetAnimationOverride("Sitting")) != "sit")
            llStartAnimation("Sit");
    }
}

`

LeonaMorro commented 8 years ago

You are right llGetAnimationOverride works with PERMISSION_OVERRIDE_ANIMATIONS OR PERMISSION_TRIGGER_ANIMATION. That was the point we missed.

Nevertheless it seems not to be neccessary to get the exact name of the current (default/ServerSideAO) sit animation because llStopAnimation("sit"); stops WHATEVER sit Animation is played. I made a Testobject to show it (nPose AO testobject). If someone want to check it, please IM me (slmember1 Resident). I checked it with the "OpenCollar AO 6.1.2" and the "Firestorm AO".

@HowardBaxton: So there is no need to start the default "sit" animation (but it also dosn't do any harm)

GarvinTwine commented 8 years ago

That's cool, i didnt know that either, that stop "sit" simply stops the server's sit animation. I am not sure if this really solved the issue though, as nPose relies on a "sit" pose to be played as it adds it to a list. How ever this is great to "kill" sit anims from server side AOs. I think it is still need to start the "sit" anim but if you can also kill a non standard sit there, you go step ahead even which I find cool. But as far as I know this doesnt help the firestorm AO as this is not a server side ao but I guess as most still based on franimation AO machine from back in the day. Here you can send a LockMeister message though to stop / start the AO: llRegionSayTo(AvKey,-8888,(string)AvKey+"booton"); or "bootoff" Needs the user to have the LockMeister protocol enabled in the FS settings, I think default it is.

LeonaMorro commented 8 years ago

FS: Very likely you are right, the FS may not use the ServerSideAO (I tryed to read the source Code but I can't hardly understand how it works). Nevertheless llStopAnimation("sit"); also stopps the FS AO animation and it even prevents that another Animation from the list get started (in case you ticked the "cycle" checkbox). So all should be fine even without deactivating the FS AO. BTW: there isn't a "cycle" option in the OC AO, right?

GarvinTwine commented 8 years ago

interesting, I didnt expect that but.. the better as it is really an easy way to get rid of these disturbing AO sits. The OpenCollar AO only cycles stands, no sits or other states

HowardBaxton commented 8 years ago

I saw this as well that really do not need to start the default sit for new sitter. I did not attempt this however since my thought was later on in the script it is being stopped and no harm done. Normal looping action of the script is to stop old anim and start the new and would require a fork in the script to handle a new sitter differently.

LeonaMorro commented 8 years ago

I tried it by simply comment out the line 380 in the new branch: llStartAnimation("Sit");

HowardBaxton commented 8 years ago

ok.. now the rest of these posts make sense. I am awake now :))

HowardBaxton commented 8 years ago

I have confirmed your findings. Stopping "Sit" does stop the non-default sit pose of the server side AO.

LeonaMorro commented 8 years ago

@HowardBaxton: :) @GarvinTwine: after using the OC AO (which is great) so much during the last few days:

GarvinTwine commented 8 years ago

When the Sits option is turned off the default SL sit behaviour and animation is played, as if you dont use an AO at all. No idea idea if that can be avoided at all. Well, the priority goes back to before this functionality existed so they had to be higher than the default, sure, the new way to do this wouldnt need it any more. But I we also script and arent animation creators :)

HowardBaxton commented 8 years ago

Merged and closed with a fix.