Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Open Simulator Technical Help
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
OpenSimulator Internals/Code Map/InventoryAccessModule
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== BasicInventoryAccessModule == === Configuration === [Inventory] section {| class="wikitable" ! Key !! Default !! Purpose |- | CoalesceMultipleObjectsToInventory || true || Group multiple selected objects into one coalesced inventory item |} === Event Wiring === OnNewClient() hooks per client: * OnCreateNewInventoryItem β CreateNewInventoryItem() === CreateNewInventoryItem() === Called when avatar creates a new item directly in inventory (new script, notecard, landmark, etc.). # Checks CanCreateUserInventory permission. # Resolves target folder by ID, or by type if folder not found. # If transactionID set (asset upload in progress): delegates to IAgentAssetTransactions.HandleItemCreationFromTransaction(). # Otherwise creates inline based on asset type: #* Landmark: generates landmark asset data (region_id, local_pos, region_handle), stores asset, creates inventory item. #* LSLText: uses Constants.DefaultScriptID as asset. #* Notecard: uses Constants.EmptyNotecardID. #* Settings/Material: uses environment/material defaults. #* Clothing/Bodypart: sets flags = subType. # Calls Scene.CreateNewInventoryItem() -- writes to inventoryitems table via InventoryService. ; DB writes: * assets -- INSERT: new asset (landmark, notecard, etc.) * inventoryitems -- INSERT: new inventory item === CopyToInventory() === Main path for taking objects from world to inventory (Take, TakeCopy, Delete, Return). # Groups SOGs by owner (for coalesced objects, only same-owner SOGs merge). # For each bundle: calls CopyBundleToInventory(). CopyBundleToInventory(): # Suspends keyframe motion on all SOGs. # Records and stores positions/rotations (attachment stored pos used for attachments). # Applies NextOwnerMask cleanup. # Serialises: single SOG β SceneObjectSerializer.ToOriginalXmlFormat(); multiple β CoalescedSceneObjectsSerializer.ToXml(). # Restores positions. # Calls CreateItemForObject() -- determines destination folder and creates InventoryItemBase shell. # Calls AddPermissions() -- computes effective permissions from SOG current+folded perms; applies NextOwner if ownership changes. # Creates asset: CreateAsset() β UUID.Random(), stores via AssetService.Store(). # If SaveToExistingUserInventoryItem: InventoryService.UpdateItem(). # Otherwise: Scene.AddInventoryItem() β InventoryService.AddItem(). Sends SendInventoryItemCreateUpdate() to client or owner's client. ; DB writes: * assets -- INSERT: serialised object XML * inventoryitems -- INSERT or UPDATE === CreateItemForObject() === Determines destination folder and owner: * Take / TakeCopy: remoteClient's agent ID, Object folder (or original folder if owner taking back own item). * Delete (own item): Trash folder. * Delete (other's item) / Return: Lost and Found folder of object owner. * Group-owned: Last owner's inventory. === AddPermissions() === * If new owner (remoteClient != object owner) and PropagatePermissions: applies NextOwnerMask, sets ObjectSlamPerm flag. * If same owner: copies current perms preserving folded bits. === RezObject() === Rezzes an inventory item into the scene. # Gets InventoryItemBase from InventoryService. # Gets asset from AssetService. # Calls Scene.GetObjectsToRez() -- deserialises XML into List<SceneObjectGroup>. # Calls Scene.GetNewRezLocation() -- raycasts to find rez position. # Calls DoPreRezWhenFromItem(): #* Checks CanRezObject permission for each SOG. #* Sets name/description from inventory item. #* Applies ownership change and permission slam if new owner or Slam flag set. #* Calls ApplyNextOwnerPermissions() if ownership changed. #* Sets FromUserInventoryItemID if item is copyable. # For each SOG: Scene.AddNewSceneObject(), CreateScriptInstances(), ResumeScripts(). # Calls DoPostRezWhenFromItem(): #* If item is no-copy: InventoryService.DeleteItems() -- removes item from inventory. ; DB reads: * inventoryitems -- SELECT by item UUID * assets -- SELECT by asset UUID ; DB writes (conditional): * inventoryitems -- DELETE: if no-copy item consumed on rez === CapsUpdateInventoryItemAsset() === Called via capability when avatar edits a notecard, script, gesture, etc. in-world. # Gets item, checks ownership and permissions. # Creates new asset from uploaded data. # Calls AssetService.Store() + InventoryService.UpdateItem(). # Returns new asset UUID. ; DB writes: * assets -- INSERT: updated asset * inventoryitems -- UPDATE: new assetID ----
Summary:
Please note that all contributions to Open Simulator Technical Help may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Open Simulator Technical Help:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
OpenSimulator Internals/Code Map/InventoryAccessModule
(section)
Add topic