There currently isn't any way to determine whether an agent is able to unsit from a sit target or not.
If
SIT_FLAG_ALLOW_UNSIT
and
SIT_FLAG_SCRIPTED_ONLY
are both not set on a sit target, then sitters can be in either of the following states:
  • manually sat down, can unsit
  • force-sitted via
    llSitOnLink
    , cannot unsit
Scripts can't currently distinguish between these two scenarios. Although it's
theoretically
possible to watch for the return code of
llSitOnLink
, the experience_permissions event, and the experience_permissions_denied event, because the actual 'sit' occurs asynchronously it's impossible to know with certainty if the "unsit restriction" is in place.
One possible solution might be to add a new read-only flag to
llGetLinkSitFlags
that indicates whether an avatar is sitting and was seated by script (by
llSitOnLink
). For example,
SIT_FLAG_SEATED_BY_SCRIPT
. A script could then check that the
SIT_FLAG_ALLOW_UNSIT
flag is unset and
SIT_FLAG_SEATED_BY_SCRIPT
is set to determine whether they can actually unsit or not.