525 lines
29 KiB
C++
525 lines
29 KiB
C++
/**
|
||
*
|
||
* Copyright (c) 2009-2020, Kitty Barnett
|
||
*
|
||
* The source code in this file is provided to you under the terms of the
|
||
* GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY;
|
||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||
* PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt
|
||
* in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt
|
||
*
|
||
* By copying, modifying or distributing this software, you acknowledge that
|
||
* you have read and understood your obligations described above, and agree to
|
||
* abide by those obligations.
|
||
*
|
||
*/
|
||
|
||
#pragma once
|
||
|
||
#ifdef CATZNIP_STRINGVIEW
|
||
#include "llstringview.h"
|
||
#endif // CATZNIP_STRINGVIE
|
||
|
||
// ============================================================================
|
||
// Defines
|
||
//
|
||
|
||
// Version of the specifcation we report
|
||
const S32 RLV_VERSION_MAJOR = 3;
|
||
const S32 RLV_VERSION_MINOR = 4;
|
||
const S32 RLV_VERSION_PATCH = 3;
|
||
const S32 RLV_VERSION_BUILD = 0;
|
||
|
||
// Version of the specifcation we report (in compatibility mode)
|
||
const S32 RLV_VERSION_MAJOR_COMPAT = 2;
|
||
const S32 RLV_VERSION_MINOR_COMPAT = 9;
|
||
const S32 RLV_VERSION_PATCH_COMPAT = 28;
|
||
const S32 RLV_VERSION_BUILD_COMPAT = 0;
|
||
|
||
// Implementation version
|
||
const S32 RLVa_VERSION_MAJOR = 2;
|
||
const S32 RLVa_VERSION_MINOR = 4;
|
||
const S32 RLVa_VERSION_PATCH = 2;
|
||
const S32 RLVa_IMPL_ID = 13;
|
||
|
||
// Uncomment before a final release
|
||
#define RLV_RELEASE
|
||
|
||
// Defining these makes it easier if we ever need to change our tag
|
||
#define RLV_WARNS LL_WARNS("RLV")
|
||
#define RLV_INFOS LL_INFOS("RLV")
|
||
#define RLV_DEBUGS LL_DEBUGS("RLV")
|
||
#define RLV_ENDL LL_ENDL
|
||
#define RLV_VERIFY(f) if (!(f)) { RlvUtil::notifyFailedAssertion(#f, __FILE__, __LINE__); }
|
||
|
||
#if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG
|
||
// Turn on extended debugging information
|
||
#define RLV_DEBUG
|
||
// Make sure we halt execution on errors
|
||
#define RLV_ERRS LL_ERRS("RLV")
|
||
// Keep our asserts separate from LL's
|
||
#define RLV_ASSERT(f) if (!(f)) { RLV_ERRS << "ASSERT (" << #f << ")" << RLV_ENDL; }
|
||
#define RLV_ASSERT_DBG(f) RLV_ASSERT(f)
|
||
#else
|
||
// Don't halt execution on errors in release
|
||
#define RLV_ERRS LL_WARNS("RLV")
|
||
// We don't want to check assertions in release builds
|
||
#ifndef RLV_RELEASE
|
||
#define RLV_ASSERT(f) RLV_VERIFY(f)
|
||
#define RLV_ASSERT_DBG(f)
|
||
#else
|
||
#define RLV_ASSERT(f)
|
||
#define RLV_ASSERT_DBG(f)
|
||
#endif // RLV_RELEASE
|
||
#endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG
|
||
|
||
#define RLV_ROOT_FOLDER "#RLV"
|
||
#define RLV_CMD_PREFIX '@'
|
||
#define RLV_MODIFIER_ANIMATION_FREQUENCY 10
|
||
#define RLV_MODIFIER_TPLOCAL_DEFAULT 256.f // Any teleport that's more than a region away is non-local
|
||
#define RLV_MODIFIER_FARTOUCH_DEFAULT 1.5f // Specifies the default @fartouch distance
|
||
#define RLV_MODIFIER_SITTP_DEFAULT 1.5f // Specifies the default @sittp distance
|
||
#define RLV_OPTION_SEPARATOR ";" // Default separator used in command options
|
||
#define RLV_PUTINV_PREFIX "#RLV/~"
|
||
#define RLV_PUTINV_SEPARATOR "/"
|
||
#define RLV_PUTINV_MAXDEPTH 4
|
||
#define RLV_SETGROUP_THROTTLE 60.f
|
||
#define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90 degrees with the rest of SL
|
||
#define RLV_STRINGS_FILE "rlva_strings.xml"
|
||
|
||
#define RLV_FOLDER_FLAG_NOSTRIP "nostrip"
|
||
#define RLV_FOLDER_PREFIX_HIDDEN '.'
|
||
#define RLV_FOLDER_PREFIX_PUTINV '~'
|
||
#define RLV_FOLDER_INVALID_CHARS "/"
|
||
|
||
// ============================================================================
|
||
// Enumeration declarations
|
||
//
|
||
|
||
// NOTE: any changes to this enumeration should be reflected in the RlvBehaviourDictionary constructor
|
||
enum ERlvBehaviour {
|
||
RLV_BHVR_DETACH = 0, // "detach"
|
||
RLV_BHVR_ADDATTACH, // "addattach"
|
||
RLV_BHVR_REMATTACH, // "remattach"
|
||
RLV_BHVR_ADDOUTFIT, // "addoutfit"
|
||
RLV_BHVR_REMOUTFIT, // "remoutfit"
|
||
RLV_BHVR_SHAREDWEAR, // "sharedwear"
|
||
RLV_BHVR_SHAREDUNWEAR, // "sharedunwear"
|
||
RLV_BHVR_UNSHAREDWEAR, // "unsharedwear"
|
||
RLV_BHVR_UNSHAREDUNWEAR, // "unsharedunwear"
|
||
RLV_BHVR_EMOTE, // "emote"
|
||
RLV_BHVR_SENDCHAT, // "sendchat"
|
||
RLV_BHVR_RECVCHAT, // "recvchat"
|
||
RLV_BHVR_RECVCHATFROM, // "recvchatfrom"
|
||
RLV_BHVR_RECVEMOTE, // "recvemote"
|
||
RLV_BHVR_RECVEMOTEFROM, // "recvemotefrom"
|
||
RLV_BHVR_REDIRCHAT, // "redirchat"
|
||
RLV_BHVR_REDIREMOTE, // "rediremote"
|
||
RLV_BHVR_CHATWHISPER, // "chatwhisper"
|
||
RLV_BHVR_CHATNORMAL, // "chatnormal"
|
||
RLV_BHVR_CHATSHOUT, // "chatshout"
|
||
RLV_BHVR_SENDCHANNEL,
|
||
RLV_BHVR_SENDCHANNELEXCEPT,
|
||
RLV_BHVR_SENDIM, // "sendim"
|
||
RLV_BHVR_SENDIMTO, // "sendimto"
|
||
RLV_BHVR_RECVIM, // "recvim"
|
||
RLV_BHVR_RECVIMFROM, // "recvimfrom"
|
||
RLV_BHVR_STARTIM, // "startim"
|
||
RLV_BHVR_STARTIMTO, // "startimto"
|
||
RLV_BHVR_SENDGESTURE,
|
||
RLV_BHVR_PERMISSIVE, // "permissive"
|
||
RLV_BHVR_NOTIFY, // "notify"
|
||
RLV_BHVR_SHARE,
|
||
RLV_BHVR_SHOWINV, // "showinv"
|
||
RLV_BHVR_SHOWMINIMAP, // "showminimap"
|
||
RLV_BHVR_SHOWWORLDMAP, // "showworldmap"
|
||
RLV_BHVR_SHOWLOC, // "showloc"
|
||
RLV_BHVR_SHOWNAMES, // "shownames"
|
||
RLV_BHVR_SHOWNAMETAGS, // "shownametags"
|
||
RLV_BHVR_SHOWNEARBY,
|
||
RLV_BHVR_SHOWHOVERTEXT, // "showhovertext"
|
||
RLV_BHVR_SHOWHOVERTEXTHUD, // "showhovertexthud"
|
||
RLV_BHVR_SHOWHOVERTEXTWORLD, // "showhovertextworld"
|
||
RLV_BHVR_SHOWHOVERTEXTALL, // "showhovertextall"
|
||
RLV_BHVR_SHOWSELF,
|
||
RLV_BHVR_SHOWSELFHEAD,
|
||
RLV_BHVR_TPLM, // "tplm"
|
||
RLV_BHVR_TPLOC, // "tploc"
|
||
RLV_BHVR_TPLOCAL,
|
||
RLV_BHVR_TPLURE, // "tplure"
|
||
RLV_BHVR_TPREQUEST, // "tprequest"
|
||
RLV_BHVR_VIEWNOTE, // "viewnote"
|
||
RLV_BHVR_VIEWSCRIPT, // "viewscript"
|
||
RLV_BHVR_VIEWTEXTURE, // "viewtexture"
|
||
RLV_BHVR_ACCEPTPERMISSION, // "acceptpermission"
|
||
RLV_BHVR_ACCEPTTP, // "accepttp"
|
||
RLV_BHVR_ACCEPTTPREQUEST, // "accepttprequest"
|
||
RLV_BHVR_ALLOWIDLE, // "allowidle"
|
||
RLV_BHVR_BUY, // "buy"
|
||
RLV_BHVR_EDIT, // "edit"
|
||
RLV_BHVR_EDITATTACH,
|
||
RLV_BHVR_EDITOBJ, // "editobj"
|
||
RLV_BHVR_EDITWORLD,
|
||
RLV_BHVR_VIEWTRANSPARENT,
|
||
RLV_BHVR_VIEWWIREFRAME,
|
||
RLV_BHVR_PAY, // "pay"
|
||
RLV_BHVR_REZ, // "rez"
|
||
RLV_BHVR_FARTOUCH, // "fartouch"
|
||
RLV_BHVR_INTERACT, // "interact"
|
||
RLV_BHVR_TOUCHTHIS, // "touchthis"
|
||
RLV_BHVR_TOUCHATTACH, // "touchattach"
|
||
RLV_BHVR_TOUCHATTACHSELF, // "touchattachself"
|
||
RLV_BHVR_TOUCHATTACHOTHER, // "touchattachother"
|
||
RLV_BHVR_TOUCHHUD, // "touchhud"
|
||
RLV_BHVR_TOUCHWORLD, // "touchworld"
|
||
RLV_BHVR_TOUCHALL, // "touchall"
|
||
RLV_BHVR_TOUCHME, // "touchme"
|
||
RLV_BHVR_FLY, // "fly"
|
||
RLV_BHVR_JUMP, // "jump"
|
||
RLV_BHVR_SETGROUP, // "setgroup"
|
||
RLV_BHVR_UNSIT, // "unsit"
|
||
RLV_BHVR_SIT, // "sit"
|
||
RLV_BHVR_SITGROUND,
|
||
RLV_BHVR_SITTP, // "sittp"
|
||
RLV_BHVR_STANDTP, // "standtp"
|
||
RLV_BHVR_SETDEBUG, // "setdebug"
|
||
RLV_BHVR_SETENV, // "setenv"
|
||
RLV_BHVR_ALWAYSRUN, // "alwaysrun"
|
||
RLV_BHVR_TEMPRUN, // "temprun"
|
||
RLV_BHVR_DETACHME, // "detachme"
|
||
RLV_BHVR_ATTACHTHIS, // "attachthis"
|
||
RLV_BHVR_ATTACHTHISEXCEPT, // "attachthis_except"
|
||
RLV_BHVR_DETACHTHIS, // "detachthis"
|
||
RLV_BHVR_DETACHTHISEXCEPT, // "detachthis_except"
|
||
RLV_BHVR_ADJUSTHEIGHT, // "adjustheight"
|
||
RLV_BHVR_GETHEIGHTOFFSET, // "getheightoffset"
|
||
RLV_BHVR_TPTO, // "tpto"
|
||
RLV_BHVR_VERSION, // "version"
|
||
RLV_BHVR_VERSIONNEW, // "versionnew"
|
||
RLV_BHVR_VERSIONNUM, // "versionnum"
|
||
RLV_BHVR_GETATTACH, // "getattach"
|
||
RLV_BHVR_GETATTACHNAMES, // "getattachnames"
|
||
RLV_BHVR_GETADDATTACHNAMES, // "getaddattachnames"
|
||
RLV_BHVR_GETREMATTACHNAMES, // "getremattachnames"
|
||
RLV_BHVR_GETOUTFIT, // "getoutfit"
|
||
RLV_BHVR_GETOUTFITNAMES, // "getoutfitnames"
|
||
RLV_BHVR_GETADDOUTFITNAMES, // "getaddoutfitnames"
|
||
RLV_BHVR_GETREMOUTFITNAMES, // "getremoutfitnames"
|
||
RLV_BHVR_FINDFOLDER, // "findfolder"
|
||
RLV_BHVR_FINDFOLDERS, // "findfolders"
|
||
RLV_BHVR_GETPATH, // "getpath"
|
||
RLV_BHVR_GETPATHNEW, // "getpathnew"
|
||
RLV_BHVR_GETINV, // "getinv"
|
||
RLV_BHVR_GETINVWORN, // "getinvworn"
|
||
RLV_BHVR_GETGROUP, // "getgroup"
|
||
RLV_BHVR_GETSITID, // "getsitid"
|
||
RLV_BHVR_GETCOMMAND, // "getcommand"
|
||
RLV_BHVR_GETSTATUS, // "getstatus"
|
||
RLV_BHVR_GETSTATUSALL, // "getstatusall"
|
||
RLV_CMD_FORCEWEAR, // Internal representation of all force wear commands
|
||
|
||
// Camera (behaviours)
|
||
RLV_BHVR_SETCAM, // Gives an object exclusive control of the user's camera
|
||
RLV_BHVR_SETCAM_AVDIST, // Distance at which nearby avatars turn into a silhouette
|
||
RLV_BHVR_SETCAM_AVDISTMIN, // Enforces a minimum distance from the avatar (in m)
|
||
RLV_BHVR_SETCAM_AVDISTMAX, // Enforces a maximum distance from the avatar (in m)
|
||
RLV_BHVR_SETCAM_ORIGINDISTMIN, // Enforces a minimum distance from the camera origin (in m)
|
||
RLV_BHVR_SETCAM_ORIGINDISTMAX, // Enforces a maximum distance from the camera origin (in m)
|
||
RLV_BHVR_SETCAM_EYEOFFSET, // Changes the default camera offset
|
||
RLV_BHVR_SETCAM_EYEOFFSETSCALE, // Changes the default camera offset scale
|
||
RLV_BHVR_SETCAM_FOCUSOFFSET, // Changes the default camera focus offset
|
||
RLV_BHVR_SETCAM_FOCUS, // Forces the camera focus and/or position to a specific object, avatar or position
|
||
RLV_BHVR_SETCAM_FOV, // Changes the current - vertical - field of view
|
||
RLV_BHVR_SETCAM_FOVMIN, // Enforces a minimum - vertical - FOV (in degrees)
|
||
RLV_BHVR_SETCAM_FOVMAX, // Enforces a maximum - vertical - FOV (in degrees)
|
||
RLV_BHVR_SETCAM_MOUSELOOK, // Prevent the user from going into mouselook
|
||
RLV_BHVR_SETCAM_TEXTURES, // Replaces all textures with the specified texture (or the default unrezzed one)
|
||
RLV_BHVR_SETCAM_UNLOCK, // Forces the camera focus to the user's avatar
|
||
// Camera (behaviours - deprecated)
|
||
RLV_BHVR_CAMZOOMMIN, // Enforces a minimum - vertical - FOV angle of 60<36> / multiplier
|
||
RLV_BHVR_CAMZOOMMAX, // Enforces a maximum - vertical - FOV angle of 60<36> / multiplier
|
||
// Camera (reply)
|
||
RLV_BHVR_GETCAM_AVDIST, // Returns the current minimum distance between the camera and the user's avatar
|
||
RLV_BHVR_GETCAM_AVDISTMIN, // Returns the active (if any) minimum distance between the camera and the user's avatar
|
||
RLV_BHVR_GETCAM_AVDISTMAX, // Returns the active (if any) maxmimum distance between the camera and the user's avatar
|
||
RLV_BHVR_GETCAM_FOV, // Returns the current field of view angle (in radians)
|
||
RLV_BHVR_GETCAM_FOVMIN, // Returns the active (if any) minimum field of view angle (in radians)
|
||
RLV_BHVR_GETCAM_FOVMAX, // Enforces a maximum (if any) maximum field of view angle (in radians)
|
||
RLV_BHVR_GETCAM_TEXTURES, // Returns the active (if any) replace texture UUID
|
||
// Camera (force)
|
||
RLV_BHVR_SETCAM_MODE, // Switch the user's camera into the specified mode (e.g. mouselook or thirdview)
|
||
|
||
// Effects
|
||
RLV_BHVR_SETSPHERE, // Gives an object exclusive control of the 'vision spheres' effect
|
||
RLV_BHVR_SETOVERLAY, // Gives an object exclusive control of the overlay
|
||
RLV_BHVR_SETOVERLAY_TOUCH, // Determines whether the overlay texture's alpha channel will be used to allow/block world interaction
|
||
RLV_BHVR_SETOVERLAY_TWEEN, // Animate between the current overlay settings and the supplied values
|
||
|
||
RLV_BHVR_COUNT,
|
||
RLV_BHVR_UNKNOWN
|
||
};
|
||
|
||
enum ERlvBehaviourModifier
|
||
{
|
||
RLV_MODIFIER_FARTOUCHDIST, // Radius of a sphere around the user in which they can interact with the world
|
||
RLV_MODIFIER_RECVIMDISTMIN, // Minimum distance to receive an IM from an otherwise restricted sender (squared value)
|
||
RLV_MODIFIER_RECVIMDISTMAX, // Maximum distance to receive an IM from an otherwise restricted sender (squared value)
|
||
RLV_MODIFIER_SENDIMDISTMIN, // Minimum distance to send an IM to an otherwise restricted recipient (squared value)
|
||
RLV_MODIFIER_SENDIMDISTMAX, // Maximum distance to send an IM to an otherwise restricted recipient (squared value)
|
||
RLV_MODIFIER_STARTIMDISTMIN, // Minimum distance to start an IM to an otherwise restricted recipient (squared value)
|
||
RLV_MODIFIER_STARTIMDISTMAX, // Maximum distance to start an IM to an otherwise restricted recipient (squared value)
|
||
RLV_MODIFIER_SETCAM_AVDIST, // Distance at which nearby avatars turn into a silhouette (normal value)
|
||
RLV_MODIFIER_SETCAM_AVDISTMIN, // Minimum distance between the camera position and the user's avatar (normal value)
|
||
RLV_MODIFIER_SETCAM_AVDISTMAX, // Maximum distance between the camera position and the user's avatar (normal value)
|
||
RLV_MODIFIER_SETCAM_ORIGINDISTMIN, // Minimum distance between the camera position and the origin point (normal value)
|
||
RLV_MODIFIER_SETCAM_ORIGINDISTMAX, // Maximum distance between the camera position and the origin point (normal value)
|
||
RLV_MODIFIER_SETCAM_EYEOFFSET, // Specifies the default camera's offset from the camera (vector)
|
||
RLV_MODIFIER_SETCAM_EYEOFFSETSCALE, // Specifies the default camera's offset scale (multiplier)
|
||
RLV_MODIFIER_SETCAM_FOCUSOFFSET, // Specifies the default camera's focus (vector)
|
||
RLV_MODIFIER_SETCAM_FOVMIN, // Minimum value for the camera's field of view (angle in radians)
|
||
RLV_MODIFIER_SETCAM_FOVMAX, // Maximum value for the camera's field of view (angle in radians)
|
||
RLV_MODIFIER_SETCAM_TEXTURE, // Specifies the UUID of the texture used to texture the world view
|
||
RLV_MODIFIER_SHOWNAMETAGSDIST, // Distance at which name tags will still be shown
|
||
RLV_MODIFIER_SITTPDIST,
|
||
RLV_MODIFIER_TPLOCALDIST,
|
||
|
||
RLV_MODIFIER_COUNT,
|
||
RLV_MODIFIER_UNKNOWN
|
||
};
|
||
|
||
enum class ERlvLocalBhvrModifier
|
||
{
|
||
// @setoverlay
|
||
OverlayAlpha, // Transparency level of the overlay texture (in addition to the texture's own alpha channel)
|
||
OverlayTexture, // Specifies the UUID of the overlay texture
|
||
OverlayTint, // The tint that's applied to the overlay texture
|
||
// @setsphere
|
||
SphereMode, // The type of effect that will apply to any pixel that intersects with the sphere (e.g. blend, blur, ...)
|
||
SphereOrigin, // The origin of the sphere can either be the avatar or the camera position
|
||
SphereColor, // [Blend only] Colour to mix with the actual pixel colour (stored as params)
|
||
SphereParams, // Effect parameters (dependent on mode - see RlvSphereEffect)
|
||
SphereDistMin, // Distance at which the effect starts and has weight minValue; e.g. for blend this would be colour = mix(colour, sphere_colour, min_alpha)
|
||
SphereDistMax, // Distance at which the effect starts and has weight maxValue; e.g. for blend this would be colour = mix(colour, sphere_colour, max_alpha)
|
||
SphereDistExtend, // Specifies the value beyond min dist or max dist (by default the sphere extends beyond max distance at max vlaue)
|
||
SphereValueMin, // Value of the effect at minimum distance
|
||
SphereValueMax, // Value of the effect at maximum distance
|
||
SphereTween, // Amount of seconds it takes to lerp from value A to value B
|
||
|
||
Unknown,
|
||
};
|
||
|
||
enum ERlvBehaviourOptionType
|
||
{
|
||
RLV_OPTION_NONE, // Behaviour takes no parameters
|
||
RLV_OPTION_EXCEPTION, // Behaviour requires an exception as a parameter
|
||
RLV_OPTION_NONE_OR_EXCEPTION, // Behaviour takes either no parameters or an exception
|
||
RLV_OPTION_MODIFIER, // Behaviour requires a modifier as a parameter
|
||
RLV_OPTION_NONE_OR_MODIFIER // Behaviour takes either no parameters or a modifier
|
||
};
|
||
|
||
enum ERlvParamType {
|
||
RLV_TYPE_UNKNOWN = 0x00,
|
||
RLV_TYPE_ADD = 0x01, // <param> == "n"|"add"
|
||
RLV_TYPE_REMOVE = 0x02, // <param> == "y"|"rem"
|
||
RLV_TYPE_FORCE = 0x04, // <param> == "force"
|
||
RLV_TYPE_REPLY = 0x08, // <param> == <number>
|
||
RLV_TYPE_CLEAR = 0x10,
|
||
RLV_TYPE_ADDREM = RLV_TYPE_ADD | RLV_TYPE_REMOVE
|
||
};
|
||
|
||
enum ERlvCmdRet {
|
||
RLV_RET_UNKNOWN = 0x0000, // Unknown error (should only be used internally)
|
||
RLV_RET_RETAINED, // Command was retained
|
||
RLV_RET_SUCCESS = 0x0100, // Command executed succesfully
|
||
RLV_RET_SUCCESS_UNSET, // Command executed succesfully (RLV_TYPE_REMOVE for an unrestricted behaviour)
|
||
RLV_RET_SUCCESS_DUPLICATE, // Command executed succesfully (RLV_TYPE_ADD for an already restricted behaviour)
|
||
RLV_RET_SUCCESS_DEPRECATED, // Command executed succesfully but has been marked as deprecated
|
||
RLV_RET_SUCCESS_DELAYED, // Command parsed valid but will execute at a later time
|
||
RLV_RET_FAILED = 0x0200, // Command failed (general failure)
|
||
RLV_RET_FAILED_SYNTAX, // Command failed (syntax error)
|
||
RLV_RET_FAILED_OPTION, // Command failed (invalid option)
|
||
RLV_RET_FAILED_PARAM, // Command failed (invalid param)
|
||
RLV_RET_FAILED_LOCK, // Command failed (command is locked by another object)
|
||
RLV_RET_FAILED_DISABLED, // Command failed (command disabled by user)
|
||
RLV_RET_FAILED_UNKNOWN, // Command failed (unknown command)
|
||
RLV_RET_FAILED_NOSHAREDROOT, // Command failed (missing #RLV)
|
||
RLV_RET_FAILED_DEPRECATED, // Command failed (deprecated and no longer supported)
|
||
RLV_RET_FAILED_NOBEHAVIOUR, // Command failed (force modifier on an object with no active restrictions)
|
||
RLV_RET_FAILED_UNHELDBEHAVIOUR, // Command failed (local modifier on an object that doesn't hold the base behaviour)
|
||
RLV_RET_FAILED_BLOCKED, // Command failed (object is blocked)
|
||
RLV_RET_FAILED_THROTTLED, // Command failed (throttled)
|
||
RLV_RET_NO_PROCESSOR // Command doesn't have a template processor define (legacy code)
|
||
};
|
||
#define RLV_RET_SUCCEEDED(eCmdRet) (((eCmdRet) & RLV_RET_SUCCESS) == RLV_RET_SUCCESS)
|
||
|
||
enum class ERlvExceptionCheck
|
||
{
|
||
Permissive, // Exception can be set by any object
|
||
Strict, // Exception must be set by all objects holding the restriction
|
||
Default, // Permissive or strict will be determined by currently enforced restrictions
|
||
};
|
||
|
||
enum ERlvLockMask
|
||
{
|
||
RLV_LOCK_NONE = 0x00,
|
||
RLV_LOCK_ADD = 0x01,
|
||
RLV_LOCK_REMOVE = 0x02,
|
||
RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE
|
||
};
|
||
|
||
enum ERlvWearMask
|
||
{
|
||
RLV_WEAR_LOCKED = 0x00, // User can not wear the item at all
|
||
RLV_WEAR_ADD = 0x01, // User can wear the item in addition to what's already worn
|
||
RLV_WEAR_REPLACE = 0x02, // User can wear the item and replace what's currently worn
|
||
RLV_WEAR = 0x03 // Convenience: combines RLV_WEAR_ADD and RLV_WEAR_REPLACE
|
||
};
|
||
|
||
enum ERlvAttachGroupType
|
||
{
|
||
RLV_ATTACHGROUP_HEAD = 0,
|
||
RLV_ATTACHGROUP_TORSO,
|
||
RLV_ATTACHGROUP_ARMS,
|
||
RLV_ATTACHGROUP_LEGS,
|
||
RLV_ATTACHGROUP_HUD,
|
||
RLV_ATTACHGROUP_COUNT,
|
||
RLV_ATTACHGROUP_INVALID
|
||
};
|
||
|
||
// ============================================================================
|
||
// Settings
|
||
//
|
||
|
||
namespace RlvSettingNames
|
||
{
|
||
#ifdef CATZNIP_STRINGVIEW
|
||
/*inline*/ constexpr boost::string_view Main = make_string_view("RestrainedLove");
|
||
/*inline*/ constexpr boost::string_view Debug = make_string_view("RestrainedLoveDebug");
|
||
/*inline*/ constexpr boost::string_view CanOoc = make_string_view("RestrainedLoveCanOOC");
|
||
/*inline*/ constexpr boost::string_view ForbidGiveToRlv = make_string_view("RestrainedLoveForbidGiveToRLV");
|
||
/*inline*/ constexpr boost::string_view NoSetEnv = make_string_view("RestrainedLoveNoSetEnv");
|
||
/*inline*/ constexpr boost::string_view ShowEllipsis = make_string_view("RestrainedLoveShowEllipsis");
|
||
/*inline*/ constexpr boost::string_view WearAddPrefix = make_string_view("RestrainedLoveStackWhenFolderBeginsWith");
|
||
/*inline*/ constexpr boost::string_view WearReplacePrefix = make_string_view("RestrainedLoveReplaceWhenFolderBeginsWith");
|
||
|
||
/*inline*/ constexpr boost::string_view DebugHideUnsetDup = make_string_view("RLVaDebugHideUnsetDuplicate");
|
||
/*inline*/ constexpr boost::string_view EnableIMQuery = make_string_view("RLVaEnableIMQuery");
|
||
/*inline*/ constexpr boost::string_view EnableLegacyNaming = make_string_view("RLVaEnableLegacyNaming");
|
||
/*inline*/ constexpr boost::string_view EnableSharedWear = make_string_view("RLVaEnableSharedWear");
|
||
/*inline*/ constexpr boost::string_view EnableTempAttach = make_string_view("RLVaEnableTemporaryAttachments");
|
||
/*inline*/ constexpr boost::string_view HideLockedLayer = make_string_view("RLVaHideLockedLayers");
|
||
/*inline*/ constexpr boost::string_view HideLockedAttach = make_string_view("RLVaHideLockedAttachments");
|
||
/*inline*/ constexpr boost::string_view HideLockedInventory = make_string_view("RLVaHideLockedInventory");
|
||
/*inline*/ constexpr boost::string_view LoginLastLocation = make_string_view("RLVaLoginLastLocation");
|
||
/*inline*/ constexpr boost::string_view SharedInvAutoRename = make_string_view("RLVaSharedInvAutoRename");
|
||
/*inline*/ constexpr boost::string_view ShowAssertionFail = make_string_view("RLVaShowAssertionFailures");
|
||
/*inline*/ constexpr boost::string_view ShowRedirectChatTyping = make_string_view("RLVaShowRedirectChatTyping");
|
||
/*inline*/ constexpr boost::string_view SplitRedirectChat = make_string_view("RLVaSplitRedirectChat");
|
||
/*inline*/ constexpr boost::string_view TopLevelMenu = make_string_view("RLVaTopLevelMenu");
|
||
/*inline*/ constexpr boost::string_view WearReplaceUnlocked = make_string_view("RLVaWearReplaceUnlocked");
|
||
#else
|
||
constexpr const char Main[] = "RestrainedLove";
|
||
constexpr const char Debug[] = "RestrainedLoveDebug";
|
||
constexpr const char CanOoc[] = "RestrainedLoveCanOOC";
|
||
constexpr const char ForbidGiveToRlv[] = "RestrainedLoveForbidGiveToRLV";
|
||
constexpr const char NoSetEnv[] = "RestrainedLoveNoSetEnv";
|
||
constexpr const char ShowEllipsis[] = "RestrainedLoveShowEllipsis";
|
||
constexpr const char WearAddPrefix[] = "RestrainedLoveStackWhenFolderBeginsWith";
|
||
constexpr const char WearReplacePrefix[] = "RestrainedLoveReplaceWhenFolderBeginsWith";
|
||
|
||
constexpr const char DebugHideUnsetDup[] = "RLVaDebugHideUnsetDuplicate";
|
||
constexpr const char EnableIMQuery[] = "RLVaEnableIMQuery";
|
||
constexpr const char EnableLegacyNaming[] = "RLVaEnableLegacyNaming";
|
||
constexpr const char EnableSharedWear[] = "RLVaEnableSharedWear";
|
||
constexpr const char EnableTempAttach[] = "RLVaEnableTemporaryAttachments";
|
||
constexpr const char HideLockedLayer[] = "RLVaHideLockedLayers";
|
||
constexpr const char HideLockedAttach[] = "RLVaHideLockedAttachments";
|
||
constexpr const char HideLockedInventory[] = "RLVaHideLockedInventory";
|
||
constexpr const char LoginLastLocation[] = "RLVaLoginLastLocation";
|
||
constexpr const char SharedInvAutoRename[] = "RLVaSharedInvAutoRename";
|
||
constexpr const char ShowAssertionFail[] = "RLVaShowAssertionFailures";
|
||
constexpr const char ShowRedirectChatTyping[] = "RLVaShowRedirectChatTyping";
|
||
constexpr const char SplitRedirectChat[] = "RLVaSplitRedirectChat";
|
||
constexpr const char TopLevelMenu[] = "RLVaTopLevelMenu";
|
||
constexpr const char WearReplaceUnlocked[] = "RLVaWearReplaceUnlocked";
|
||
#endif // CATZNIP_STRINGVIEW
|
||
}
|
||
|
||
// ============================================================================
|
||
// Strings (see rlva_strings.xml)
|
||
//
|
||
|
||
namespace RlvStringKeys
|
||
{
|
||
namespace Blocked
|
||
{
|
||
#ifdef CATZNIP_STRINGVIEW
|
||
/*inline*/ constexpr boost::string_view AutoPilot = make_string_view("blocked_autopilot");
|
||
/*inline*/ constexpr boost::string_view Generic = make_string_view("blocked_generic");
|
||
/*inline*/ constexpr boost::string_view GroupChange = make_string_view("blocked_groupchange");
|
||
/*inline*/ constexpr boost::string_view InvFolder = make_string_view("blocked_invfolder");
|
||
/*inline*/ constexpr boost::string_view PermissionAttach = make_string_view("blocked_permattach");
|
||
/*inline*/ constexpr boost::string_view PermissionTeleport = make_string_view("blocked_permteleport");
|
||
/*inline*/ constexpr boost::string_view RecvIm = make_string_view("blocked_recvim");
|
||
/*inline*/ constexpr boost::string_view RecvImRemote = make_string_view("blocked_recvim_remote");
|
||
/*inline*/ constexpr boost::string_view SendIm = make_string_view("blocked_sendim");
|
||
/*inline*/ constexpr boost::string_view Share = make_string_view("blocked_share");
|
||
/*inline*/ constexpr boost::string_view ShareGeneric = make_string_view("blocked_share_generic");
|
||
/*inline*/ constexpr boost::string_view StartConference = make_string_view("blocked_startconf");
|
||
/*inline*/ constexpr boost::string_view StartIm = make_string_view("blocked_startim");
|
||
/*inline*/ constexpr boost::string_view Teleport = make_string_view("blocked_teleport");
|
||
/*inline*/ constexpr boost::string_view TeleportOffer = make_string_view("blocked_teleport_offer");
|
||
/*inline*/ constexpr boost::string_view TpLureRequestRemote = make_string_view("blocked_tplurerequest_remote");
|
||
/*inline*/ constexpr boost::string_view ViewXxx = make_string_view("blocked_viewxxx");
|
||
/*inline*/ constexpr boost::string_view Wireframe = make_string_view("blocked_wireframe");
|
||
#else
|
||
constexpr const char AutoPilot[] = "blocked_autopilot";
|
||
constexpr const char Generic[] = "blocked_generic";
|
||
constexpr const char GroupChange[] = "blocked_groupchange";
|
||
constexpr const char InvFolder[] = "blocked_invfolder";
|
||
constexpr const char PermissionAttach[] = "blocked_permattach";
|
||
constexpr const char PermissionTeleport[] = "blocked_permteleport";
|
||
constexpr const char RecvIm[] = "blocked_recvim";
|
||
constexpr const char RecvImRemote[] = "blocked_recvim_remote";
|
||
constexpr const char SendIm[] = "blocked_sendim";
|
||
constexpr const char Share[] = "blocked_share";
|
||
constexpr const char ShareGeneric[] = "blocked_share_generic";
|
||
constexpr const char StartConference[] = "blocked_startconf";
|
||
constexpr const char StartIm[] = "blocked_startim";
|
||
constexpr const char Teleport[] = "blocked_teleport";
|
||
constexpr const char TeleportOffer[] = "blocked_teleport_offer";
|
||
constexpr const char TpLureRequestRemote[] = "blocked_tplurerequest_remote";
|
||
constexpr const char ViewXxx[] = "blocked_viewxxx";
|
||
constexpr const char Wireframe[] = "blocked_wireframe";
|
||
#endif // CATZNIP_STRINGVIEW
|
||
}
|
||
|
||
namespace Hidden
|
||
{
|
||
#ifdef CATZNIP_STRINGVIEW
|
||
/*inline*/ constexpr boost::string_view Generic = make_string_view("hidden_generic");
|
||
/*inline*/ constexpr boost::string_view Parcel = make_string_view("hidden_parcel");
|
||
/*inline*/ constexpr boost::string_view Region = make_string_view("hidden_region");
|
||
#else
|
||
constexpr const char Generic[] = "hidden_generic";
|
||
constexpr const char Parcel[] = "hidden_parcel";
|
||
constexpr const char Region[] = "hidden_region";
|
||
#endif // CATZNIP_STRINGVIEW
|
||
}
|
||
|
||
namespace StopIm
|
||
{
|
||
#ifdef CATZNIP_STRINGVIEW
|
||
/*inline*/ constexpr boost::string_view NoSession = make_string_view("stopim_nosession");
|
||
/*inline*/ constexpr boost::string_view EndSessionRemote = make_string_view("stopim_endsession_remote");
|
||
/*inline*/ constexpr boost::string_view EndSessionLocal = make_string_view("stopim_endsession_local");
|
||
#else
|
||
constexpr const char NoSession[] = "stopim_nosession";
|
||
constexpr const char EndSessionRemote[] = "stopim_endsession_remote";
|
||
constexpr const char EndSessionLocal[] = "stopim_endsession_local";
|
||
#endif // CATZNIP_STRINGVIEW
|
||
}
|
||
}
|
||
|
||
// ============================================================================
|