Sharing, permissions and inventory
Everything WorldBridge creates is owned by the estate owner. That is convenient for scripts (owner checks pass) and a problem for the people who visit: they cannot edit what they did not make.
Letting others edit the builds
1. Estate manager is not enough; use a shared group
With region_manager_is_god off (OpenSim's default) and automatic_gods / implicit_gods off, even an estate
manager cannot edit the estate owner's objects, and even a god must request powers each session.
- Learned: a visitor who was already an estate manager could not edit the builds.
- The Paracosm overlay (
config/paracosm.ini) now setsregion_manager_is_god = true, so an estate manager can request god powers and edit anything;automatic_godsandimplicit_godsstay off. Make estate managers only of people you trust. - The choice made here: a SHARED GROUP, not god powers. Everything the estate owner builds is set to the group with modify, copy and move for members, so members edit it without god powers.
2. Groups V2 needs a storage patch on SQLite
OpenSim's Groups V2 stores only to MySQL or PostgreSQL. A standalone region on SQLite needs
opensim-patches/sqlite-groups (SQLiteGroupsData, a port of the MySQL store, plus the [Groups] and
[Permissions] configuration in its README).
3. Share through WorldBridge group
{"action": "ensure", "name": ..., "charter": ...}finds or founds the group (the estate owner founds it).{"action": "add", "group": ..., "member": "First Last" or uuid, "role": "owners" | "everyone"}adds a member and makes it their active group.{"action": "share", "group": ..., "prefix": optional}sets every estate-owned object (or those whose name starts with the prefix) to the group with GroupMask 573440 (modify, copy, move). The group is remembered inworldbridge-share.json, and every new estate-owned object is shared as it enters the scene (OnObjectAddedToScene).{"action": "members", "group": ...}lists members.- Verify in the database (
OpenSim.db, tableprims, columnsGroupIDandGroupMask), not by eye.
Items inside objects
4. Contents need group (or everyone) rights to be useful to anyone else
Items put in a box's contents with owner-only rights appear to others as no-copy, no-modify, no-transfer.
- Learned: keepsakes left in a dresser were "no copy, no mod, no transfer" to the visitor they were for.
bundlenow gives its items group copy, modify, move and transfer rights for the box's group. A script can hand a folder over withllGiveInventoryList.
5. Keep a copy of a set of objects as one linkset
bundle (box, objects, name, optional file) copies the objects into ONE linkset stored as an object in the
box's contents (and optionally as XML on disk), leaving the scene untouched. The scene's own
DuplicateObject/LinkObjects need the acting agent PRESENT (they refuse the absent estate owner), and a
user-exposed SOG.Copy(true) builds physics and joins the backup. So WorldBridge assembles part copies in memory
(SOP.Copy(..., true) clears the physics actor) into a detached group with child offsets and rotations relative to
the root, and serialises it with SceneObjectSerializer.ToOriginalXmlFormat(group, false).
archive/prim-trees/holds linkset XML kept this way.
6. Animations must live inside the prim that plays them
LSL plays animations only by inventory name. put_inventory puts a stored asset into a prim's contents
(sitting-and-poses.md).
Giving things to people
7. give_object and give_inventory
give_object transfers an object to an avatar with full permissions; give_inventory delivers a stored asset
(texture, sound, animation, notecard, object) into the avatar's inventory with full permissions.
8. grant_estate_manager
Adds an avatar as an estate manager. The response notes that the avatar may need to relog before editing works.
The displayed balance
9. The default economy zeroes any pushed balance
The default money module answers every balance request with 0, so a balance pushed with give_money lasts only
until the viewer asks again.
- WorldBridge answers after the default module with the visitor's FAVOR, a persistent per-avatar ledger
(
worldbridge-favor.json): a point a minute while present, a welcome gift the first time each day, and awards throughfavor({"action": "award", "avatar": ..., "amount": ..., "reason": ...}). It is pushed on arrival and on every change.
Naming things you place by hand
10. Keep hand-placed objects out of builders' prefixes
Builders clean up by name prefix (meshes.md). Give anything you place by hand for a particular visit a prefix no builder owns.
- Learned: a bird replant deleted two hand-placed birds that shared its prefix.