Implement native RLV state and permissions (#79)
Some checks failed
Native code generation / deterministic (push) Failing after 2m1s
Imaging and meshing gate / native (push) Successful in 5m22s
JPEG 2000 feature / linux (push) Successful in 2m45s
Native Rust workspace compile / compile (push) Failing after 6m12s
Skia feature / linux (push) Successful in 30m44s
Some checks failed
Native code generation / deterministic (push) Failing after 2m1s
Imaging and meshing gate / native (push) Successful in 5m22s
JPEG 2000 feature / linux (push) Successful in 2m45s
Native Rust workspace compile / compile (push) Failing after 6m12s
Skia feature / linux (push) Successful in 30m44s
This commit is contained in:
123
tools/check_milestone_10_issue_79.py
Normal file
123
tools/check_milestone_10_issue_79.py
Normal file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Audit issue 79's native RLV state, inventory, lock, and permission boundary."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
import generate_api_shims
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SOURCE = ROOT / "crates" / "libremetaverse-rlv" / "src" / "state.rs"
|
||||
GENERATED = ROOT / "crates" / "libremetaverse-rlv" / "src" / "generated.rs"
|
||||
TESTS = ROOT / "crates" / "libremetaverse-rlv" / "tests" / "state_semantics.rs"
|
||||
COMPAT = ROOT / "tests" / "compat" / "tests" / "rlv_inventory_map_semantics.rs"
|
||||
DOC = ROOT / "crates" / "libremetaverse-rlv" / "README.md"
|
||||
WORKFLOW = ROOT / ".gitea" / "workflows" / "rust-workspace.yml"
|
||||
CATALOG = ROOT / "api" / "public-api.json"
|
||||
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
|
||||
|
||||
TYPES = {
|
||||
"T:LibreMetaverse.RLV.CameraRestrictions": "crate::state::CameraRestrictions",
|
||||
"T:LibreMetaverse.RLV.CameraSettings": "crate::state::CameraSettings",
|
||||
"T:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs":
|
||||
"crate::state::RestrictionUpdatedEventArgs",
|
||||
"T:LibreMetaverse.RLV.InventoryMap": "crate::state::InventoryMap",
|
||||
"T:LibreMetaverse.RLV.LockedFolderPublic": "crate::state::LockedFolderPublic",
|
||||
"T:LibreMetaverse.RLV.RlvBlacklist": "crate::state::RlvBlacklist",
|
||||
"T:LibreMetaverse.RLV.RlvInventoryItem": "crate::state::RlvInventoryItem",
|
||||
"T:LibreMetaverse.RLV.RlvPermissionsService": "crate::state::RlvPermissionsService",
|
||||
"T:LibreMetaverse.RLV.RlvRestrictionManager": "crate::state::RlvRestrictionManager",
|
||||
"T:LibreMetaverse.RLV.RlvSharedFolder": "crate::state::RlvSharedFolder",
|
||||
}
|
||||
|
||||
|
||||
def require_markers(path: Path, markers: tuple[str, ...]) -> None:
|
||||
text = path.read_text()
|
||||
missing = [marker for marker in markers if marker not in text]
|
||||
if missing:
|
||||
raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing))
|
||||
|
||||
|
||||
def catalog_members() -> set[str]:
|
||||
catalog = json.loads(CATALOG.read_text())
|
||||
assembly = next(
|
||||
value for value in catalog["assemblies"]
|
||||
if value["identity"]["name"] == "LibreMetaverse.RLV"
|
||||
)
|
||||
return {
|
||||
member["doc_id"]
|
||||
for api_type in assembly["types"]
|
||||
if api_type["doc_id"] in TYPES
|
||||
for member in api_type["members"]
|
||||
}
|
||||
|
||||
|
||||
def generated_type_block(text: str, doc_id: str) -> str:
|
||||
marker = f"/// C# type: `{doc_id}`."
|
||||
start = text.find(marker)
|
||||
if start < 0:
|
||||
raise SystemExit(f"generated declaration is missing for {doc_id}")
|
||||
next_type = text.find("/// C# type:", start + len(marker))
|
||||
return text[start:] if next_type < 0 else text[start:next_type]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
for api_type, declaration in TYPES.items():
|
||||
if generate_api_shims.NATIVE_DECLARATIONS.get(api_type) != declaration:
|
||||
raise SystemExit(f"issue 79 native declaration is missing for {api_type}")
|
||||
members = catalog_members()
|
||||
missing = sorted(members - set(generate_api_shims.NATIVE_MEMBER_BODIES))
|
||||
if missing:
|
||||
raise SystemExit("issue 79 native members missing: " + ", ".join(missing))
|
||||
|
||||
source = SOURCE.read_text()
|
||||
if STUB_RE.search(source):
|
||||
raise SystemExit("issue 79 owned Rust stubs remain in state.rs")
|
||||
generated = GENERATED.read_text()
|
||||
for api_type in TYPES:
|
||||
if STUB_RE.search(generated_type_block(generated, api_type)):
|
||||
raise SystemExit(f"issue 79 owned generated stubs remain for {api_type}")
|
||||
|
||||
require_markers(SOURCE, (
|
||||
"MAX_RLV_INVENTORY_FOLDERS", "MAX_RLV_INVENTORY_ITEMS",
|
||||
"MAX_RLV_RESTRICTIONS", "pub struct InventoryMap",
|
||||
"pub struct RlvRestrictionManager", "pub struct RlvPermissionsService",
|
||||
"pub struct CameraRestrictions", "pub struct LockedFolderPublic",
|
||||
"pub struct RlvBlacklist", "fn build_locked_folders",
|
||||
"fn secure_allowed", "fn rebuild_locked_folders", "fn emit",
|
||||
"state.revision", "Arc<RwLock", "ImmutableDictionary", "CancellationToken",
|
||||
))
|
||||
require_markers(TESTS, (
|
||||
"dispatches_after_unlocking", "concurrent_independent_sources",
|
||||
"stale_revision", "counts_repeated_inputs_before_deduplication",
|
||||
"blacklist_is_case_insensitive", "camera_restrictions_apply",
|
||||
"constructor_field_order", "secure_rules_take_precedence",
|
||||
"recursive_folder_locks", "snapshots remain immutable",
|
||||
))
|
||||
require_markers(COMPAT, (
|
||||
"try_get_folder_when_name_contains_slash",
|
||||
"try_get_folder_prefers_exact_slash_match",
|
||||
"try_get_folder_skips_hidden_folder",
|
||||
"find_folders_containing_by_prim_id",
|
||||
"find_folders_containing_by_attachment_point_single_result",
|
||||
"find_folders_containing_by_wearable_type",
|
||||
))
|
||||
require_markers(DOC, (
|
||||
"pure state boundary", "immutable dictionary/list membership snapshots",
|
||||
"after manager locks are released", "secure and explicit", "no network",
|
||||
"ubuntu-latest",
|
||||
))
|
||||
require_markers(WORKFLOW, ("python3 tools/check_milestone_10_issue_79.py",))
|
||||
print(
|
||||
"issue 79 audit: native restriction state, inventory maps, recursive locks, "
|
||||
"camera aggregation, blacklist, permission precedence, concurrency evidence, "
|
||||
"compatibility tests, and docs are present"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -466,8 +466,18 @@ NATIVE_TYPES = {
|
||||
# below. This is used for static namespace types such as OSDParser: the type is
|
||||
# hand-written, while its fixed public methods remain generator-audited.
|
||||
NATIVE_DECLARATIONS = {
|
||||
"T:LibreMetaverse.RLV.CameraRestrictions": "crate::state::CameraRestrictions",
|
||||
"T:LibreMetaverse.RLV.CameraSettings": "crate::state::CameraSettings",
|
||||
"T:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs": "crate::state::RestrictionUpdatedEventArgs",
|
||||
"T:LibreMetaverse.RLV.InventoryMap": "crate::state::InventoryMap",
|
||||
"T:LibreMetaverse.RLV.LockedFolderPublic": "crate::state::LockedFolderPublic",
|
||||
"T:LibreMetaverse.RLV.RlvBlacklist": "crate::state::RlvBlacklist",
|
||||
"T:LibreMetaverse.RLV.RlvCommon": "crate::protocol::RlvCommon",
|
||||
"T:LibreMetaverse.RLV.RlvInventoryItem": "crate::state::RlvInventoryItem",
|
||||
"T:LibreMetaverse.RLV.RlvPermissionsService": "crate::state::RlvPermissionsService",
|
||||
"T:LibreMetaverse.RLV.RlvRestriction": "crate::protocol::RlvRestriction",
|
||||
"T:LibreMetaverse.RLV.RlvRestrictionManager": "crate::state::RlvRestrictionManager",
|
||||
"T:LibreMetaverse.RLV.RlvSharedFolder": "crate::state::RlvSharedFolder",
|
||||
"T:LibreMetaverse.AgentManager": "crate::agent_manager::AgentManager",
|
||||
"T:LibreMetaverse.Animation": "crate::avatar_manager::Animation",
|
||||
"T:LibreMetaverse.Animesh.AnimationTrack": "crate::animesh_runtime::AnimationTrack",
|
||||
@@ -2427,6 +2437,194 @@ NATIVE_MEMBER_BODIES = {
|
||||
"crate::byte_order::write_double_little_endian(dest, pos, value)",
|
||||
}
|
||||
|
||||
# Native RLV state, inventory, lock, camera, and permission layer. Property
|
||||
# setter entries use the generator's ``#set`` suffix so both C# accessors stay
|
||||
# tied to explicit Rust implementations.
|
||||
NATIVE_MEMBER_BODIES.update({
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.AvDist": "self.native_av_dist()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.AvDistMax": "self.native_av_dist_max()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.AvDistMin": "self.native_av_dist_min()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.DrawAlphaMax": "self.native_draw_alpha_max()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.DrawAlphaMin": "self.native_draw_alpha_min()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.DrawColor": "self.native_draw_color()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.DrawMax": "self.native_draw_max()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.DrawMin": "self.native_draw_min()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.FovMax": "self.native_fov_max()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.FovMin": "self.native_fov_min()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.IsLocked": "self.native_is_locked()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.Texture": "self.native_texture()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.ZoomMax": "self.native_zoom_max()",
|
||||
"P:LibreMetaverse.RLV.CameraRestrictions.ZoomMin": "self.native_zoom_min()",
|
||||
"M:LibreMetaverse.RLV.CameraSettings.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)":
|
||||
"Self::native_new(av_dist_min, av_dist_max, fov_min, fov_max, zoom_min, current_fov)",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.AvDistMax": "self.native_av_dist_max()",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.AvDistMin": "self.native_av_dist_min()",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.CurrentFov": "self.native_current_fov()",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.FovMax": "self.native_fov_max()",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.FovMin": "self.native_fov_min()",
|
||||
"P:LibreMetaverse.RLV.CameraSettings.ZoomMin": "self.native_zoom_min()",
|
||||
"M:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.#ctor(LibreMetaverse.RLV.RlvRestriction,System.Boolean,System.Boolean)":
|
||||
"Self::native_new(restriction, is_new, is_deleted)",
|
||||
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.IsDeleted": "self.native_is_deleted()",
|
||||
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.IsNew": "self.native_is_new()",
|
||||
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.Restriction": "self.native_restriction()",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.#ctor(LibreMetaverse.RLV.RlvSharedFolder,System.Collections.Generic.IReadOnlyCollection{LibreMetaverse.RLV.RlvInventoryItem})":
|
||||
"Self::native_new(root, external_items)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.FindFoldersContaining(System.Boolean,System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
|
||||
"self.native_find_folders_containing(limit_to_one_result, attached_prim_id, attachment_point, wearable_type)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByAttachmentPoint(LibreMetaverse.RLV.RlvAttachmentPoint)":
|
||||
"self.native_get_items_by_attachment_point(attachment_point)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.GetItemsById(System.Guid)": "self.native_get_items_by_id(item_id)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByPrimId(System.Guid)": "self.native_get_items_by_prim_id(prim_id)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByWearableType(LibreMetaverse.RLV.RlvWearableType)":
|
||||
"self.native_get_items_by_wearable_type(wearable_type)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.TryBuildPathToFolder(System.Guid,System.String@)":
|
||||
"self.native_try_build_path_to_folder(folder_id, final_path)",
|
||||
"M:LibreMetaverse.RLV.InventoryMap.TryGetFolderFromPath(System.String,System.Boolean,LibreMetaverse.RLV.RlvSharedFolder@)":
|
||||
"self.native_try_get_folder_from_path(path, skip_private_folders, folder)",
|
||||
"P:LibreMetaverse.RLV.InventoryMap.ExternalItems": "self.native_external_items()",
|
||||
"P:LibreMetaverse.RLV.InventoryMap.Folders": "self.native_folders()",
|
||||
"P:LibreMetaverse.RLV.InventoryMap.Items": "self.native_items()",
|
||||
"P:LibreMetaverse.RLV.InventoryMap.Root": "self.native_root()",
|
||||
"M:LibreMetaverse.RLV.LockedFolderPublic.ToString": "self.native_to_string()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.AttachExceptions": "self.native_attach_exceptions()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.AttachRestrictions": "self.native_attach_restrictions()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.CanAttach": "self.native_can_attach()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.CanDetach": "self.native_can_detach()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.DetachExceptions": "self.native_detach_exceptions()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.DetachRestrictions": "self.native_detach_restrictions()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.Id": "self.native_id()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.IsLocked": "self.native_is_locked()",
|
||||
"P:LibreMetaverse.RLV.LockedFolderPublic.Name": "self.native_name()",
|
||||
"M:LibreMetaverse.RLV.RlvBlacklist.BlacklistBehavior(System.String)": "self.native_blacklist_behavior(behavior)",
|
||||
"M:LibreMetaverse.RLV.RlvBlacklist.GetBlacklist": "self.native_get_blacklist()",
|
||||
"M:LibreMetaverse.RLV.RlvBlacklist.IsBlacklisted(System.String)": "self.native_is_blacklisted(behavior)",
|
||||
"M:LibreMetaverse.RLV.RlvBlacklist.UnBlacklistBehavior(System.String)": "self.native_un_blacklist_behavior(behavior)",
|
||||
"M:LibreMetaverse.RLV.RlvInventoryItem.#ctor(System.Guid,System.String,System.Boolean,System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvWearableType},System.Nullable{LibreMetaverse.RLV.RlvGestureState})":
|
||||
"Self::native_new(id, name, is_link, external_folder_id, attached_to, attached_prim_id, worn_on, gesture_state)",
|
||||
"M:LibreMetaverse.RLV.RlvInventoryItem.ToString": "self.native_to_string()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedPrimId": "self.native_attached_prim_id()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedPrimId#set": "self.native_set_attached_prim_id(value)",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedTo": "self.native_attached_to()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedTo#set": "self.native_set_attached_to(value)",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.Folder": "self.native_folder()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.FolderId": "self.native_folder_id()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.GestureState": "self.native_gesture_state()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.GestureState#set": "self.native_set_gesture_state(value)",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.Id": "self.native_id()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.IsLink": "self.native_is_link()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.IsLink#set": "self.native_set_is_link(value)",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.Name": "self.native_name()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.Name#set": "self.native_set_name(value)",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.WornOn": "self.native_worn_on()",
|
||||
"P:LibreMetaverse.RLV.RlvInventoryItem.WornOn#set": "self.native_set_worn_on(value)",
|
||||
"E:LibreMetaverse.RLV.RlvRestrictionManager.RestrictionUpdated": "self.native_subscribe_restriction_updated(handler)",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.FindRestrictions(System.String,System.Nullable{System.Guid})":
|
||||
"self.native_find_restrictions(behavior_name_filter, sender_filter)",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetLockedFolders": "self.native_get_locked_folders()",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetRestrictionsByType(LibreMetaverse.RLV.RlvRestrictionType)":
|
||||
"self.native_get_restrictions_by_type(restriction_type)",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetTrackedPrimIds": "self.native_get_tracked_prim_ids()",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.RemoveRestrictionsForObjectsAsync(System.Collections.Generic.IEnumerable{System.Guid},System.Threading.CancellationToken)":
|
||||
"self.native_remove_restrictions_for_objects(prim_ids, cancellation_token).await",
|
||||
"M:LibreMetaverse.RLV.RlvRestrictionManager.TryGetLockedFolder(System.Guid,LibreMetaverse.RLV.LockedFolderPublic@)":
|
||||
"self.native_try_get_locked_folder(folder_id, locked_folder)",
|
||||
"M:LibreMetaverse.RLV.RlvSharedFolder.#ctor(System.Guid,System.String)": "Self::native_new(id, name)",
|
||||
"M:LibreMetaverse.RLV.RlvSharedFolder.AddChild(System.Guid,System.String)": "self.native_add_child(id, name)",
|
||||
"M:LibreMetaverse.RLV.RlvSharedFolder.AddItem(System.Guid,System.String,System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvWearableType},System.Nullable{LibreMetaverse.RLV.RlvGestureState})":
|
||||
"self.native_add_item(id, name, is_link, attached_to, attached_prim_id, worn_on, gesture_state)",
|
||||
"M:LibreMetaverse.RLV.RlvSharedFolder.ToString": "self.native_to_string()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Children": "self.native_children()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Id": "self.native_id()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Items": "self.native_items()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Name": "self.native_name()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Name#set": "self.native_set_name(value)",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Parent": "self.native_parent()",
|
||||
"P:LibreMetaverse.RLV.RlvSharedFolder.Parent#set": "self.native_set_parent(value)",
|
||||
})
|
||||
|
||||
NATIVE_MEMBER_BODIES.update({
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAllowIdle": "self.native_can_allow_idle()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAlwaysRun": "self.native_can_always_run()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAttach(LibreMetaverse.RLV.RlvInventoryItem,System.Boolean)":
|
||||
"self.native_can_attach_with_item(item, is_shared)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAttach(System.Nullable{System.Guid},System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
|
||||
"self.native_can_attach(object_folder_id, is_shared, attachment_point, wearable_type)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChat(System.Int32,System.String)":
|
||||
"self.native_can_chat(channel, message)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatNormal": "self.native_can_chat_normal()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatShout": "self.native_can_chat_shout()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatWhisper": "self.native_can_chat_whisper()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDefaultWear": "self.native_can_default_wear()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDetach(LibreMetaverse.RLV.RlvInventoryItem)":
|
||||
"self.native_can_detach_with_item(item)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDetach(System.Nullable{System.Guid},System.Nullable{System.Guid},System.Nullable{System.Guid},System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
|
||||
"self.native_can_detach(item_id, prim_id, folder_id, is_shared, attachment_point, wearable_type)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanEdit(LibreMetaverse.RLV.RlvPermissionsService.ObjectLocation,System.Nullable{System.Guid})":
|
||||
"self.native_can_edit(object_location, object_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanEmote": "self.native_can_emote()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanFly": "self.native_can_fly()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanInteract": "self.native_can_interact()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanJump": "self.native_can_jump()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanReceiveChat(System.String,System.Guid)":
|
||||
"self.native_can_receive_chat(message, user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanReceiveIM(System.String,System.Nullable{System.Guid},System.String)":
|
||||
"self.native_can_receive_im(message, user_id, group_name)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanRez": "self.native_can_rez()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendChat": "self.native_can_send_chat()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendGesture": "self.native_can_send_gesture()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendIM(System.String,System.Nullable{System.Guid},System.String)":
|
||||
"self.native_can_send_im(message, user_id, group_name)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetDebug": "self.native_can_set_debug()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetEnv": "self.native_can_set_env()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetGroup": "self.native_can_set_group()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShare(System.Nullable{System.Guid})":
|
||||
"self.native_can_share(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowHoverText(LibreMetaverse.RLV.RlvPermissionsService.HoverTextLocation,System.Nullable{System.Guid})":
|
||||
"self.native_can_show_hover_text(location, object_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowInv": "self.native_can_show_inv()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowLoc": "self.native_can_show_loc()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowMiniMap": "self.native_can_show_mini_map()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNameTags(System.Nullable{System.Guid})":
|
||||
"self.native_can_show_name_tags(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNames(System.Nullable{System.Guid})":
|
||||
"self.native_can_show_names(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNearby": "self.native_can_show_nearby()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowWorldMap": "self.native_can_show_world_map()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSit": "self.native_can_sit()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSitTp(System.Single@)": "self.native_can_sit_tp(max_distance)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanStandTp": "self.native_can_stand_tp()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanStartIM(System.Guid)": "self.native_can_start_im(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTPLure(System.Nullable{System.Guid})":
|
||||
"self.native_can_tp_lure(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTempRun": "self.native_can_temp_run()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTouch(LibreMetaverse.RLV.RlvPermissionsService.TouchLocation,System.Guid,System.Nullable{System.Guid},System.Nullable{System.Single})":
|
||||
"self.native_can_touch(location, prim_id, user_id, distance)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLm": "self.native_can_tp_lm()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLoc": "self.native_can_tp_loc()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLocal(System.Single@)": "self.native_can_tp_local(max_distance)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpRequest(System.Nullable{System.Guid})":
|
||||
"self.native_can_tp_request(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanUnsit": "self.native_can_unsit()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewNote": "self.native_can_view_note()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewScript": "self.native_can_view_script()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewTexture": "self.native_can_view_texture()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.GetCameraRestrictions": "self.native_get_camera_restrictions()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptPermissions": "self.native_is_auto_accept_permissions()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptTp(System.Nullable{System.Guid})":
|
||||
"self.native_is_auto_accept_tp(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptTpRequest(System.Nullable{System.Guid})":
|
||||
"self.native_is_auto_accept_tp_request(user_id)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoDenyPermissions": "self.native_is_auto_deny_permissions()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.IsPermissive": "self.native_is_permissive()",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetMaxFarTouchDistance(System.Single@)":
|
||||
"self.native_try_get_max_far_touch_distance(max_distance)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetRedirChatChannels(System.Collections.Generic.IReadOnlyList{System.Int32}@)":
|
||||
"self.native_try_get_redir_chat_channels(channels)",
|
||||
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetRedirEmoteChannels(System.Collections.Generic.IReadOnlyList{System.Int32}@)":
|
||||
"self.native_try_get_redir_emote_channels(channels)",
|
||||
})
|
||||
|
||||
CLIENT_CORE_NATIVE_OWNERS = (
|
||||
"AgentSettings",
|
||||
"AssetCacheSettings",
|
||||
|
||||
Reference in New Issue
Block a user