@rezless/vm 0.6.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builtins/agents.d.ts +14 -0
- package/dist/builtins/agents.d.ts.map +1 -0
- package/dist/builtins/agents.js +117 -0
- package/dist/builtins/agents.js.map +1 -0
- package/dist/builtins/animation.d.ts +46 -0
- package/dist/builtins/animation.d.ts.map +1 -0
- package/dist/builtins/animation.js +316 -0
- package/dist/builtins/animation.js.map +1 -0
- package/dist/builtins/attachments.d.ts +9 -0
- package/dist/builtins/attachments.d.ts.map +1 -0
- package/dist/builtins/attachments.js +127 -0
- package/dist/builtins/attachments.js.map +1 -0
- package/dist/builtins/base64.d.ts +13 -2
- package/dist/builtins/base64.d.ts.map +1 -1
- package/dist/builtins/base64.js +8 -6
- package/dist/builtins/base64.js.map +1 -1
- package/dist/builtins/camera.d.ts +35 -0
- package/dist/builtins/camera.d.ts.map +1 -0
- package/dist/builtins/camera.js +104 -0
- package/dist/builtins/camera.js.map +1 -0
- package/dist/builtins/collision.d.ts +21 -0
- package/dist/builtins/collision.d.ts.map +1 -0
- package/dist/builtins/collision.js +44 -0
- package/dist/builtins/collision.js.map +1 -0
- package/dist/builtins/controls.d.ts +19 -0
- package/dist/builtins/controls.d.ts.map +1 -0
- package/dist/builtins/controls.js +27 -0
- package/dist/builtins/controls.js.map +1 -0
- package/dist/builtins/damage.d.ts +24 -0
- package/dist/builtins/damage.d.ts.map +1 -0
- package/dist/builtins/damage.js +166 -0
- package/dist/builtins/damage.js.map +1 -0
- package/dist/builtins/detected.d.ts +22 -1
- package/dist/builtins/detected.d.ts.map +1 -1
- package/dist/builtins/detected.js +28 -2
- package/dist/builtins/detected.js.map +1 -1
- package/dist/builtins/dialog.d.ts +23 -0
- package/dist/builtins/dialog.d.ts.map +1 -0
- package/dist/builtins/dialog.js +69 -0
- package/dist/builtins/dialog.js.map +1 -0
- package/dist/builtins/email.d.ts +61 -0
- package/dist/builtins/email.d.ts.map +1 -0
- package/dist/builtins/email.js +121 -0
- package/dist/builtins/email.js.map +1 -0
- package/dist/builtins/environment.d.ts +27 -0
- package/dist/builtins/environment.d.ts.map +1 -0
- package/dist/builtins/environment.js +126 -0
- package/dist/builtins/environment.js.map +1 -0
- package/dist/builtins/experience.d.ts +51 -0
- package/dist/builtins/experience.d.ts.map +1 -0
- package/dist/builtins/experience.js +202 -0
- package/dist/builtins/experience.js.map +1 -0
- package/dist/builtins/game-control.d.ts +17 -0
- package/dist/builtins/game-control.d.ts.map +1 -0
- package/dist/builtins/game-control.js +21 -0
- package/dist/builtins/game-control.js.map +1 -0
- package/dist/builtins/give.d.ts +16 -0
- package/dist/builtins/give.d.ts.map +1 -0
- package/dist/builtins/give.js +137 -0
- package/dist/builtins/give.js.map +1 -0
- package/dist/builtins/ground.d.ts +18 -0
- package/dist/builtins/ground.d.ts.map +1 -0
- package/dist/builtins/ground.js +83 -0
- package/dist/builtins/ground.js.map +1 -0
- package/dist/builtins/hash.d.ts +1 -0
- package/dist/builtins/hash.d.ts.map +1 -1
- package/dist/builtins/hash.js +12 -2
- package/dist/builtins/hash.js.map +1 -1
- package/dist/builtins/http.d.ts +99 -4
- package/dist/builtins/http.d.ts.map +1 -1
- package/dist/builtins/http.js +216 -6
- package/dist/builtins/http.js.map +1 -1
- package/dist/builtins/index.d.ts.map +1 -1
- package/dist/builtins/index.js +250 -14
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/inventory.d.ts +8 -5
- package/dist/builtins/inventory.d.ts.map +1 -1
- package/dist/builtins/inventory.js +37 -15
- package/dist/builtins/inventory.js.map +1 -1
- package/dist/builtins/json.d.ts.map +1 -1
- package/dist/builtins/json.js +45 -34
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/land.d.ts +29 -0
- package/dist/builtins/land.d.ts.map +1 -0
- package/dist/builtins/land.js +339 -0
- package/dist/builtins/land.js.map +1 -0
- package/dist/builtins/link-info.js +2 -2
- package/dist/builtins/link-info.js.map +1 -1
- package/dist/builtins/links.d.ts +20 -0
- package/dist/builtins/links.d.ts.map +1 -0
- package/dist/builtins/links.js +53 -0
- package/dist/builtins/links.js.map +1 -0
- package/dist/builtins/linksetdata.d.ts +5 -0
- package/dist/builtins/linksetdata.d.ts.map +1 -1
- package/dist/builtins/linksetdata.js +22 -9
- package/dist/builtins/linksetdata.js.map +1 -1
- package/dist/builtins/lists.d.ts +21 -0
- package/dist/builtins/lists.d.ts.map +1 -1
- package/dist/builtins/lists.js +137 -17
- package/dist/builtins/lists.js.map +1 -1
- package/dist/builtins/math.d.ts +18 -0
- package/dist/builtins/math.d.ts.map +1 -1
- package/dist/builtins/math.js +104 -5
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/media.d.ts +8 -0
- package/dist/builtins/media.d.ts.map +1 -0
- package/dist/builtins/media.js +167 -0
- package/dist/builtins/media.js.map +1 -0
- package/dist/builtins/motion.d.ts +79 -0
- package/dist/builtins/motion.d.ts.map +1 -0
- package/dist/builtins/motion.js +396 -0
- package/dist/builtins/motion.js.map +1 -0
- package/dist/builtins/notecard-search.d.ts +15 -0
- package/dist/builtins/notecard-search.d.ts.map +1 -0
- package/dist/builtins/notecard-search.js +374 -0
- package/dist/builtins/notecard-search.js.map +1 -0
- package/dist/builtins/object-animation.d.ts +21 -0
- package/dist/builtins/object-animation.d.ts.map +1 -0
- package/dist/builtins/object-animation.js +193 -0
- package/dist/builtins/object-animation.js.map +1 -0
- package/dist/builtins/object-reads.d.ts +39 -0
- package/dist/builtins/object-reads.d.ts.map +1 -0
- package/dist/builtins/object-reads.js +332 -0
- package/dist/builtins/object-reads.js.map +1 -0
- package/dist/builtins/object.d.ts +11 -2
- package/dist/builtins/object.d.ts.map +1 -1
- package/dist/builtins/object.js +32 -8
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/particles.d.ts +4 -0
- package/dist/builtins/particles.d.ts.map +1 -0
- package/dist/builtins/particles.js +65 -0
- package/dist/builtins/particles.js.map +1 -0
- package/dist/builtins/pathfinding.d.ts +39 -0
- package/dist/builtins/pathfinding.d.ts.map +1 -0
- package/dist/builtins/pathfinding.js +83 -0
- package/dist/builtins/pathfinding.js.map +1 -0
- package/dist/builtins/permissions.d.ts.map +1 -1
- package/dist/builtins/permissions.js +6 -0
- package/dist/builtins/permissions.js.map +1 -1
- package/dist/builtins/physics.d.ts +49 -0
- package/dist/builtins/physics.d.ts.map +1 -0
- package/dist/builtins/physics.js +47 -0
- package/dist/builtins/physics.js.map +1 -0
- package/dist/builtins/prim-accessors.d.ts +4 -0
- package/dist/builtins/prim-accessors.d.ts.map +1 -1
- package/dist/builtins/prim-accessors.js +75 -28
- package/dist/builtins/prim-accessors.js.map +1 -1
- package/dist/builtins/prim-params.d.ts.map +1 -1
- package/dist/builtins/prim-params.js +6 -2
- package/dist/builtins/prim-params.js.map +1 -1
- package/dist/builtins/raycast.d.ts +3 -0
- package/dist/builtins/raycast.d.ts.map +1 -0
- package/dist/builtins/raycast.js +65 -0
- package/dist/builtins/raycast.js.map +1 -0
- package/dist/builtins/region.d.ts +31 -0
- package/dist/builtins/region.d.ts.map +1 -0
- package/dist/builtins/region.js +125 -0
- package/dist/builtins/region.js.map +1 -0
- package/dist/builtins/remote-load.d.ts +3 -0
- package/dist/builtins/remote-load.d.ts.map +1 -0
- package/dist/builtins/remote-load.js +53 -0
- package/dist/builtins/remote-load.js.map +1 -0
- package/dist/builtins/rez.d.ts +10 -0
- package/dist/builtins/rez.d.ts.map +1 -0
- package/dist/builtins/rez.js +255 -0
- package/dist/builtins/rez.js.map +1 -0
- package/dist/builtins/rsa.d.ts +4 -0
- package/dist/builtins/rsa.d.ts.map +1 -0
- package/dist/builtins/rsa.js +44 -0
- package/dist/builtins/rsa.js.map +1 -0
- package/dist/builtins/script-control.d.ts +8 -3
- package/dist/builtins/script-control.d.ts.map +1 -1
- package/dist/builtins/script-control.js +27 -8
- package/dist/builtins/script-control.js.map +1 -1
- package/dist/builtins/sensor.d.ts +11 -0
- package/dist/builtins/sensor.d.ts.map +1 -0
- package/dist/builtins/sensor.js +145 -0
- package/dist/builtins/sensor.js.map +1 -0
- package/dist/builtins/sit.d.ts +23 -0
- package/dist/builtins/sit.d.ts.map +1 -0
- package/dist/builtins/sit.js +150 -0
- package/dist/builtins/sit.js.map +1 -0
- package/dist/builtins/sound.d.ts +19 -0
- package/dist/builtins/sound.d.ts.map +1 -0
- package/dist/builtins/sound.js +113 -0
- package/dist/builtins/sound.js.map +1 -0
- package/dist/builtins/strings.d.ts +6 -0
- package/dist/builtins/strings.d.ts.map +1 -1
- package/dist/builtins/strings.js +47 -6
- package/dist/builtins/strings.js.map +1 -1
- package/dist/builtins/targets.d.ts +12 -0
- package/dist/builtins/targets.d.ts.map +1 -0
- package/dist/builtins/targets.js +121 -0
- package/dist/builtins/targets.js.map +1 -0
- package/dist/builtins/time.d.ts +15 -5
- package/dist/builtins/time.d.ts.map +1 -1
- package/dist/builtins/time.js +36 -11
- package/dist/builtins/time.js.map +1 -1
- package/dist/builtins/vehicles.d.ts +22 -0
- package/dist/builtins/vehicles.d.ts.map +1 -0
- package/dist/builtins/vehicles.js +78 -0
- package/dist/builtins/vehicles.js.map +1 -0
- package/dist/builtins/viewer.d.ts +39 -0
- package/dist/builtins/viewer.d.ts.map +1 -0
- package/dist/builtins/viewer.js +74 -0
- package/dist/builtins/viewer.js.map +1 -0
- package/dist/clock.d.ts +45 -7
- package/dist/clock.d.ts.map +1 -1
- package/dist/clock.js +125 -14
- package/dist/clock.js.map +1 -1
- package/dist/dispatch.d.ts +3 -2
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +15 -10
- package/dist/dispatch.js.map +1 -1
- package/dist/experience.d.ts +39 -0
- package/dist/experience.d.ts.map +1 -0
- package/dist/experience.js +38 -0
- package/dist/experience.js.map +1 -0
- package/dist/index.d.ts +20 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +5 -10
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +143 -70
- package/dist/interpreter.js.map +1 -1
- package/dist/inventory.d.ts +2 -0
- package/dist/inventory.d.ts.map +1 -1
- package/dist/inventory.js +2 -0
- package/dist/inventory.js.map +1 -1
- package/dist/linkset.d.ts +147 -11
- package/dist/linkset.d.ts.map +1 -1
- package/dist/linkset.js +401 -28
- package/dist/linkset.js.map +1 -1
- package/dist/memory.d.ts +5 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +5 -2
- package/dist/memory.js.map +1 -1
- package/dist/prim-params.d.ts +27 -10
- package/dist/prim-params.d.ts.map +1 -1
- package/dist/prim-params.js +209 -125
- package/dist/prim-params.js.map +1 -1
- package/dist/prim.d.ts +95 -5
- package/dist/prim.d.ts.map +1 -1
- package/dist/prim.js +96 -7
- package/dist/prim.js.map +1 -1
- package/dist/runtime.d.ts +52 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/script.d.ts +171 -12
- package/dist/script.d.ts.map +1 -1
- package/dist/script.js +480 -73
- package/dist/script.js.map +1 -1
- package/dist/typecheck.d.ts +3 -1
- package/dist/typecheck.d.ts.map +1 -1
- package/dist/typecheck.js +25 -5
- package/dist/typecheck.js.map +1 -1
- package/dist/values/coerce.d.ts +1 -1
- package/dist/values/coerce.d.ts.map +1 -1
- package/dist/values/coerce.js +10 -6
- package/dist/values/coerce.js.map +1 -1
- package/dist/values/format.d.ts +3 -1
- package/dist/values/format.d.ts.map +1 -1
- package/dist/values/format.js +10 -6
- package/dist/values/format.js.map +1 -1
- package/dist/values/ops.d.ts +3 -0
- package/dist/values/ops.d.ts.map +1 -1
- package/dist/values/ops.js +2 -2
- package/dist/values/ops.js.map +1 -1
- package/dist/world.d.ts +247 -1
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +318 -6
- package/dist/world.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { NULL_KEY, ZERO_VECTOR } from '../values/types.js';
|
|
2
|
+
import { listElementType, typedList } from '../values/list-types.js';
|
|
3
|
+
import { findObjectPrim } from './object-reads.js';
|
|
4
|
+
import { llScriptDanger } from './region.js';
|
|
5
|
+
import { sayError } from './debug.js';
|
|
6
|
+
import { nextDataserverKey } from './dataserver.js';
|
|
7
|
+
import { PERMISSION_DEBIT, PERMISSION_RETURN_OBJECTS, PERMISSION_PRIVILEGED_LAND_ACCESS } from '../generated/constants.js';
|
|
8
|
+
import { PARCEL_DETAILS_NAME, PARCEL_DETAILS_DESC, PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP, PARCEL_DETAILS_AREA, PARCEL_DETAILS_ID, PARCEL_DETAILS_SEE_AVATARS, PARCEL_DETAILS_PRIM_CAPACITY, PARCEL_DETAILS_PRIM_USED, PARCEL_DETAILS_LANDING_POINT, PARCEL_DETAILS_LANDING_LOOKAT, PARCEL_DETAILS_TP_ROUTING, PARCEL_DETAILS_FLAGS, PARCEL_DETAILS_SCRIPT_DANGER, PARCEL_COUNT_TOTAL, PARCEL_COUNT_TEMP, } from '../generated/constants.js';
|
|
9
|
+
// Empty virtual land for a test that has not supplied a parcel fixture.
|
|
10
|
+
const EMPTY_PARCEL = {
|
|
11
|
+
region: '', id: NULL_KEY, owner: NULL_KEY, effects: [],
|
|
12
|
+
media: { texture: NULL_KEY, url: '', type: '', width: 0, height: 0, description: '', loop: 0 },
|
|
13
|
+
bounds: { min: { x: 0, y: 0 }, max: { x: 256, y: 256 } },
|
|
14
|
+
};
|
|
15
|
+
const sameKey = (a, b) => a.toLowerCase() === b.toLowerCase();
|
|
16
|
+
const positionArg = (args) => args[0];
|
|
17
|
+
function parcelAt(ctx, position) {
|
|
18
|
+
const { world, region } = ctx.linkset;
|
|
19
|
+
return (world && region !== undefined ? world.parcelAt(region, position) : undefined) ?? EMPTY_PARCEL;
|
|
20
|
+
}
|
|
21
|
+
function parcelsOf(ctx, parcel, simWide) {
|
|
22
|
+
return simWide && ctx.linkset.world
|
|
23
|
+
? ctx.linkset.world.parcels.filter((p) => p.region === parcel.region && sameKey(p.owner, parcel.owner))
|
|
24
|
+
: [parcel];
|
|
25
|
+
}
|
|
26
|
+
const capacity = (parcels) => Math.trunc(parcels.reduce((sum, p) => sum + (p.maxPrims ?? 0), 0));
|
|
27
|
+
const count = (p, category) => p.primCounts?.[category] ?? 0;
|
|
28
|
+
const owns = (ctx, parcel) => parcel.owner !== NULL_KEY && sameKey(parcel.owner, ctx.linkset.owner);
|
|
29
|
+
export const llGetLandOwnerAt = (ctx, args) => parcelAt(ctx, positionArg(args)).owner;
|
|
30
|
+
export const llGetParcelFlags = (ctx, args) => parcelAt(ctx, positionArg(args)).flags ?? 0;
|
|
31
|
+
export const llGetParcelMaxPrims = (ctx, args) => capacity(parcelsOf(ctx, parcelAt(ctx, positionArg(args)), args[1] !== 0));
|
|
32
|
+
export const llGetParcelPrimCount = (ctx, args) => {
|
|
33
|
+
const category = args[1];
|
|
34
|
+
if (category < PARCEL_COUNT_TOTAL || category > PARCEL_COUNT_TEMP)
|
|
35
|
+
return 0;
|
|
36
|
+
return parcelsOf(ctx, parcelAt(ctx, positionArg(args)), args[2] !== 0).reduce((sum, p) => sum + count(p, category), 0);
|
|
37
|
+
};
|
|
38
|
+
export const llGetParcelMusicURL = (ctx) => {
|
|
39
|
+
const parcel = parcelAt(ctx, ctx.prim.regionPosition());
|
|
40
|
+
return owns(ctx, parcel) ? parcel.musicURL ?? '' : '';
|
|
41
|
+
};
|
|
42
|
+
/** Group return powers are not modeled; only the parcel owner has access. */
|
|
43
|
+
export const llGetParcelPrimOwners = (ctx, args) => {
|
|
44
|
+
const parcel = parcelAt(ctx, positionArg(args));
|
|
45
|
+
if (!owns(ctx, parcel))
|
|
46
|
+
return [];
|
|
47
|
+
const values = [];
|
|
48
|
+
const types = [];
|
|
49
|
+
for (const [owner, impact] of Object.entries(parcel.primOwners ?? {}).sort(([a], [b]) => a.toLowerCase().localeCompare(b.toLowerCase())).slice(0, 100)) {
|
|
50
|
+
values.push(owner, impact);
|
|
51
|
+
types.push('key', 'integer');
|
|
52
|
+
}
|
|
53
|
+
return typedList(values, types);
|
|
54
|
+
};
|
|
55
|
+
/** Unknown integer rules stop the query; rules of other types are skipped. */
|
|
56
|
+
export const llGetParcelDetails = (ctx, args) => {
|
|
57
|
+
const position = positionArg(args);
|
|
58
|
+
const parcel = parcelAt(ctx, position);
|
|
59
|
+
const params = args[1];
|
|
60
|
+
const values = [];
|
|
61
|
+
const types = [];
|
|
62
|
+
for (let i = 0; i < params.length; i++) {
|
|
63
|
+
const rule = params[i];
|
|
64
|
+
const type = listElementType(params, i);
|
|
65
|
+
if (typeof rule !== 'number' || (type !== undefined && type !== 'integer'))
|
|
66
|
+
continue;
|
|
67
|
+
let value;
|
|
68
|
+
let resultType = 'integer';
|
|
69
|
+
switch (rule) {
|
|
70
|
+
case PARCEL_DETAILS_NAME:
|
|
71
|
+
value = parcel.name ?? '';
|
|
72
|
+
resultType = 'string';
|
|
73
|
+
break;
|
|
74
|
+
case PARCEL_DETAILS_DESC:
|
|
75
|
+
value = parcel.description ?? '';
|
|
76
|
+
resultType = 'string';
|
|
77
|
+
break;
|
|
78
|
+
case PARCEL_DETAILS_OWNER:
|
|
79
|
+
value = parcel.owner;
|
|
80
|
+
resultType = 'key';
|
|
81
|
+
break;
|
|
82
|
+
case PARCEL_DETAILS_GROUP:
|
|
83
|
+
value = parcel.group ?? NULL_KEY;
|
|
84
|
+
resultType = 'key';
|
|
85
|
+
break;
|
|
86
|
+
case PARCEL_DETAILS_AREA:
|
|
87
|
+
value = parcel.area ?? (parcel.bounds.max.x - parcel.bounds.min.x) * (parcel.bounds.max.y - parcel.bounds.min.y);
|
|
88
|
+
break;
|
|
89
|
+
case PARCEL_DETAILS_ID:
|
|
90
|
+
value = parcel.id;
|
|
91
|
+
resultType = 'key';
|
|
92
|
+
break;
|
|
93
|
+
case PARCEL_DETAILS_SEE_AVATARS:
|
|
94
|
+
value = parcel.seeAvatars === false ? 0 : 1;
|
|
95
|
+
break;
|
|
96
|
+
case PARCEL_DETAILS_PRIM_CAPACITY:
|
|
97
|
+
value = capacity(parcelsOf(ctx, parcel, true));
|
|
98
|
+
break;
|
|
99
|
+
case PARCEL_DETAILS_PRIM_USED:
|
|
100
|
+
value = parcelsOf(ctx, parcel, true).reduce((sum, p) => sum + count(p, PARCEL_COUNT_TOTAL), 0);
|
|
101
|
+
break;
|
|
102
|
+
case PARCEL_DETAILS_LANDING_POINT:
|
|
103
|
+
value = { ...(parcel.landingPoint ?? ZERO_VECTOR) };
|
|
104
|
+
resultType = 'vector';
|
|
105
|
+
break;
|
|
106
|
+
case PARCEL_DETAILS_LANDING_LOOKAT:
|
|
107
|
+
value = { ...(parcel.landingLookAt ?? ZERO_VECTOR) };
|
|
108
|
+
resultType = 'vector';
|
|
109
|
+
break;
|
|
110
|
+
case PARCEL_DETAILS_TP_ROUTING:
|
|
111
|
+
value = parcel.tpRouting ?? 1;
|
|
112
|
+
break;
|
|
113
|
+
case PARCEL_DETAILS_FLAGS:
|
|
114
|
+
value = parcel.flags ?? 0;
|
|
115
|
+
break;
|
|
116
|
+
case PARCEL_DETAILS_SCRIPT_DANGER:
|
|
117
|
+
value = llScriptDanger(ctx, [position]);
|
|
118
|
+
break;
|
|
119
|
+
default: return typedList(values, types);
|
|
120
|
+
}
|
|
121
|
+
values.push(value);
|
|
122
|
+
types.push(resultType);
|
|
123
|
+
}
|
|
124
|
+
return typedList(values, types);
|
|
125
|
+
};
|
|
126
|
+
export const llOverMyLand = (ctx, args) => {
|
|
127
|
+
const id = args[0];
|
|
128
|
+
if (id === NULL_KEY || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id))
|
|
129
|
+
return 0;
|
|
130
|
+
const prim = findObjectPrim(ctx, id);
|
|
131
|
+
let position = prim?.regionPosition();
|
|
132
|
+
if (!position) {
|
|
133
|
+
const world = ctx.linkset.world;
|
|
134
|
+
position = [...(world?.objects ?? []), ...(world?.avatars ?? [])]
|
|
135
|
+
.find((p) => p.region === ctx.linkset.region && sameKey(p.key, id))?.position;
|
|
136
|
+
}
|
|
137
|
+
return position && owns(ctx, parcelAt(ctx, position)) ? 1 : 0;
|
|
138
|
+
};
|
|
139
|
+
// Effects are fixture requests. They never contact a viewer, exchange money,
|
|
140
|
+
// remove VM objects or transfer their ownership.
|
|
141
|
+
function effect(ctx, name, args, accepted, result) {
|
|
142
|
+
const parcel = parcelAt(ctx, ctx.prim.regionPosition());
|
|
143
|
+
if (parcel === EMPTY_PARCEL)
|
|
144
|
+
return;
|
|
145
|
+
parcel.effects.push({ function: name, args: structuredClone(args), source: ctx.prim.key,
|
|
146
|
+
owner: ctx.linkset.owner, time: ctx.state.clock.now, accepted,
|
|
147
|
+
...(result === undefined ? {} : { result }) });
|
|
148
|
+
}
|
|
149
|
+
const validKey = (key) => typeof key === 'string' && key !== NULL_KEY &&
|
|
150
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(key);
|
|
151
|
+
const permission = (ctx, bit) => !!(ctx.state.permissions.granted & bit) &&
|
|
152
|
+
sameKey(ctx.state.permissions.agent, ctx.linkset.owner);
|
|
153
|
+
const current = (ctx) => parcelAt(ctx, ctx.prim.regionPosition());
|
|
154
|
+
const estateManager = (ctx) => ctx.linkset.world !== undefined && ctx.linkset.region !== undefined &&
|
|
155
|
+
(ctx.linkset.world.region(ctx.linkset.region).estateManagers ?? []).some(id => sameKey(id, ctx.linkset.owner));
|
|
156
|
+
export const llSetParcelMusicURL = (ctx, args) => {
|
|
157
|
+
const parcel = current(ctx);
|
|
158
|
+
const accepted = owns(ctx, parcel);
|
|
159
|
+
effect(ctx, 'llSetParcelMusicURL', args, accepted);
|
|
160
|
+
if (accepted)
|
|
161
|
+
parcel.musicURL = args[0];
|
|
162
|
+
};
|
|
163
|
+
function landRequest(name, target) {
|
|
164
|
+
return (ctx, args) => {
|
|
165
|
+
const accepted = owns(ctx, current(ctx)) && (!target || validKey(args[0]));
|
|
166
|
+
effect(ctx, name, args, accepted);
|
|
167
|
+
return undefined;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export const llAddToLandBanList = landRequest('llAddToLandBanList', true);
|
|
171
|
+
export const llAddToLandPassList = landRequest('llAddToLandPassList', true);
|
|
172
|
+
export const llRemoveFromLandBanList = landRequest('llRemoveFromLandBanList', true);
|
|
173
|
+
export const llRemoveFromLandPassList = landRequest('llRemoveFromLandPassList', true);
|
|
174
|
+
export const llResetLandBanList = landRequest('llResetLandBanList', false);
|
|
175
|
+
export const llResetLandPassList = landRequest('llResetLandPassList', false);
|
|
176
|
+
export const llEjectFromLand = landRequest('llEjectFromLand', true);
|
|
177
|
+
export const llReturnObjectsByID = (ctx, args) => {
|
|
178
|
+
const result = !permission(ctx, PERMISSION_RETURN_OBJECTS) ? -4
|
|
179
|
+
: !(owns(ctx, current(ctx)) || estateManager(ctx)) ? -2 : 0;
|
|
180
|
+
effect(ctx, 'llReturnObjectsByID', args, result === 0, result);
|
|
181
|
+
return result;
|
|
182
|
+
};
|
|
183
|
+
export const llReturnObjectsByOwner = (ctx, args) => {
|
|
184
|
+
const result = !validKey(args[0]) || ![1, 2, 4].includes(args[1]) ? -3
|
|
185
|
+
: !permission(ctx, PERMISSION_RETURN_OBJECTS) ? -4
|
|
186
|
+
: !(estateManager(ctx) || (args[1] !== 4 && owns(ctx, current(ctx)))) ? -2 : 0;
|
|
187
|
+
effect(ctx, 'llReturnObjectsByOwner', args, result === 0, result);
|
|
188
|
+
return result;
|
|
189
|
+
};
|
|
190
|
+
export const llManageEstateAccess = (ctx, args) => {
|
|
191
|
+
const accepted = estateManager(ctx) && validKey(args[1]) && [4, 8, 16, 32, 64, 128].includes(args[0]);
|
|
192
|
+
const result = accepted ? 1 : 0;
|
|
193
|
+
effect(ctx, 'llManageEstateAccess', args, accepted, result);
|
|
194
|
+
return result;
|
|
195
|
+
};
|
|
196
|
+
export const llSetParcelForSale = (ctx, args) => {
|
|
197
|
+
const parcel = current(ctx);
|
|
198
|
+
let result = parcel === EMPTY_PARCEL ? 1
|
|
199
|
+
: !owns(ctx, parcel) || !permission(ctx, PERMISSION_PRIVILEGED_LAND_ACCESS) ? 2
|
|
200
|
+
: parcel.inEscrow ? 3 : 0;
|
|
201
|
+
let price = 0, agent = NULL_KEY, objects = false;
|
|
202
|
+
if (result === 0 && args[0] !== 0) {
|
|
203
|
+
const options = args[1];
|
|
204
|
+
for (let i = 0; i < options.length; i += 2) {
|
|
205
|
+
const rule = options[i], value = options[i + 1];
|
|
206
|
+
if (rule === 1 && typeof value === 'number' && Number.isInteger(value))
|
|
207
|
+
price = value;
|
|
208
|
+
else if (rule === 2 && typeof value === 'string' && (value === NULL_KEY || validKey(value)))
|
|
209
|
+
agent = value;
|
|
210
|
+
else if (rule === 3 && typeof value === 'number' && Number.isInteger(value))
|
|
211
|
+
objects = value !== 0;
|
|
212
|
+
else {
|
|
213
|
+
result = 5;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (result === 0 && (price < 0 || (price === 0 && agent === NULL_KEY)))
|
|
218
|
+
result = 4;
|
|
219
|
+
}
|
|
220
|
+
effect(ctx, 'llSetParcelForSale', args, result === 0, result);
|
|
221
|
+
if (result === 0) {
|
|
222
|
+
if (args[0] === 0)
|
|
223
|
+
delete parcel.sale;
|
|
224
|
+
else
|
|
225
|
+
parcel.sale = { price, agent, objects };
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
};
|
|
229
|
+
export const llParcelMediaCommandList = (ctx, args) => {
|
|
230
|
+
const parcel = current(ctx);
|
|
231
|
+
const commands = args[0];
|
|
232
|
+
const accepted = owns(ctx, parcel);
|
|
233
|
+
effect(ctx, 'llParcelMediaCommandList', args, accepted);
|
|
234
|
+
if (!accepted)
|
|
235
|
+
return undefined;
|
|
236
|
+
// Agent-targeted commands are viewer requests, not changes to parcel settings.
|
|
237
|
+
let agentOnly = false;
|
|
238
|
+
for (let i = 0; i < commands.length; i++) {
|
|
239
|
+
const rule = commands[i];
|
|
240
|
+
if (rule === 7)
|
|
241
|
+
agentOnly = true;
|
|
242
|
+
if (rule === 11)
|
|
243
|
+
i += 2;
|
|
244
|
+
else if ([4, 5, 6, 7, 9, 10, 12, 13].includes(rule))
|
|
245
|
+
i++;
|
|
246
|
+
}
|
|
247
|
+
if (agentOnly)
|
|
248
|
+
return undefined;
|
|
249
|
+
const media = parcel.media;
|
|
250
|
+
for (let i = 0; i < commands.length; i++) {
|
|
251
|
+
const rule = commands[i];
|
|
252
|
+
if ([0, 1, 2, 3, 8].includes(rule))
|
|
253
|
+
continue;
|
|
254
|
+
const value = commands[++i];
|
|
255
|
+
if (rule === 4 && typeof value === 'string')
|
|
256
|
+
media.texture = value;
|
|
257
|
+
else if (rule === 5 && typeof value === 'string' && value.length <= 254)
|
|
258
|
+
media.url = value;
|
|
259
|
+
else if (rule === 10 && typeof value === 'string')
|
|
260
|
+
media.type = value;
|
|
261
|
+
else if (rule === 11 && typeof value === 'number' && typeof commands[i + 1] === 'number') {
|
|
262
|
+
media.width = value;
|
|
263
|
+
media.height = commands[++i];
|
|
264
|
+
}
|
|
265
|
+
else if (rule === 12 && typeof value === 'string')
|
|
266
|
+
media.description = value;
|
|
267
|
+
else if (rule === 13 && typeof value === 'number')
|
|
268
|
+
media.loop = value;
|
|
269
|
+
else if (rule !== 6 && rule !== 9)
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
return undefined;
|
|
273
|
+
};
|
|
274
|
+
export const llParcelMediaQuery = (ctx, args) => {
|
|
275
|
+
const parcel = current(ctx);
|
|
276
|
+
const accepted = owns(ctx, parcel);
|
|
277
|
+
effect(ctx, 'llParcelMediaQuery', args, accepted);
|
|
278
|
+
if (!accepted)
|
|
279
|
+
return [];
|
|
280
|
+
const values = [], types = [];
|
|
281
|
+
const media = parcel.media;
|
|
282
|
+
for (const rule of args[0]) {
|
|
283
|
+
if (rule === 4) {
|
|
284
|
+
values.push(media.texture);
|
|
285
|
+
types.push('key');
|
|
286
|
+
}
|
|
287
|
+
else if (rule === 5) {
|
|
288
|
+
values.push(media.url);
|
|
289
|
+
types.push('string');
|
|
290
|
+
}
|
|
291
|
+
else if (rule === 10) {
|
|
292
|
+
values.push(media.type);
|
|
293
|
+
types.push('string');
|
|
294
|
+
}
|
|
295
|
+
else if (rule === 11) {
|
|
296
|
+
values.push(media.width, media.height);
|
|
297
|
+
types.push('integer', 'integer');
|
|
298
|
+
}
|
|
299
|
+
else if (rule === 12) {
|
|
300
|
+
values.push(media.description);
|
|
301
|
+
types.push('string');
|
|
302
|
+
}
|
|
303
|
+
else if (rule === 13) {
|
|
304
|
+
values.push(media.loop);
|
|
305
|
+
types.push('float');
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return typedList(values, types);
|
|
309
|
+
};
|
|
310
|
+
export const llGiveMoney = (ctx, args) => {
|
|
311
|
+
const debit = permission(ctx, PERMISSION_DEBIT);
|
|
312
|
+
effect(ctx, 'llGiveMoney', args, debit && validKey(args[0]) && args[1] > 0, 0);
|
|
313
|
+
if (!debit)
|
|
314
|
+
sayError(ctx, 'Script trying to debit L$ from owner but PERMISSION_DEBIT permission not set!');
|
|
315
|
+
return 0;
|
|
316
|
+
};
|
|
317
|
+
export const llTransferLindenDollars = (ctx, args) => {
|
|
318
|
+
const key = nextDataserverKey(ctx);
|
|
319
|
+
const debit = permission(ctx, PERMISSION_DEBIT);
|
|
320
|
+
const accepted = debit && validKey(args[0]) && args[1] > 0;
|
|
321
|
+
effect(ctx, 'llTransferLindenDollars', args, accepted, key);
|
|
322
|
+
const error = !debit ? 'MISSING_PERMISSION_DEBIT'
|
|
323
|
+
: !validKey(args[0]) ? 'INVALID_DESTINATION'
|
|
324
|
+
: args[1] <= 0 ? 'INVALID_AMOUNT' : undefined;
|
|
325
|
+
if (error)
|
|
326
|
+
ctx.state.clock.schedule(ctx.state.clock.now, 'transaction_result', {
|
|
327
|
+
id: key, success: 0, data: error,
|
|
328
|
+
});
|
|
329
|
+
// Authorized requests stay pending. Tests can deliver transaction_result;
|
|
330
|
+
// the VM cannot know an account balance or the outcome of a real payment.
|
|
331
|
+
return key;
|
|
332
|
+
};
|
|
333
|
+
export const llTransferOwnership = (ctx, args) => {
|
|
334
|
+
const target = ctx.linkset.world?.avatars.some(a => a.region === ctx.linkset.region && sameKey(a.key, args[0]));
|
|
335
|
+
const result = !target ? -2 : args[2].length > 0 ? -1 : 0;
|
|
336
|
+
effect(ctx, 'llTransferOwnership', args, result === 0, result);
|
|
337
|
+
return result;
|
|
338
|
+
};
|
|
339
|
+
//# sourceMappingURL=land.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"land.js","sourceRoot":"","sources":["../../src/builtins/land.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,8 @@ export const llGetLinkName = (ctx, args) => {
|
|
|
17
17
|
return prim ? prim.name : NULL_KEY;
|
|
18
18
|
};
|
|
19
19
|
function findPrim(ctx, link) {
|
|
20
|
-
if (link === 0
|
|
21
|
-
return ctx.linkset.prims[0];
|
|
20
|
+
if (link === 0)
|
|
21
|
+
return ctx.prim.linkNumber === 1 ? undefined : ctx.linkset.prims[0];
|
|
22
22
|
if (link === LINK_THIS)
|
|
23
23
|
return ctx.prim;
|
|
24
24
|
return ctx.linkset.prims.find((p) => p.linkNumber === link);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-info.js","sourceRoot":"","sources":["../../src/builtins/link-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAA;AAExE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA;AAEhF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;AACnC,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACtD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AACpC,CAAC,CAAA;AAED,SAAS,QAAQ,CAAC,GAA+B,EAAE,IAAY;IAC7D,IAAI,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"link-info.js","sourceRoot":"","sources":["../../src/builtins/link-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAA;AAExE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA;AAEhF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;AACnC,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACtD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AACpC,CAAC,CAAA;AAED,SAAS,QAAQ,CAAC,GAA+B,EAAE,IAAY;IAC7D,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACnF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,IAAI,CAAA;IACvC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAA;AAC7D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BuiltinImpl } from '../runtime.js';
|
|
2
|
+
/**
|
|
3
|
+
* llCreateLink(key target, integer parent) — link the object holding prim
|
|
4
|
+
* `target` with this one. With `parent` TRUE this object stays root and the
|
|
5
|
+
* target's prims go in from link 2; with FALSE the target's root becomes root
|
|
6
|
+
* and this object's prims go in from link 2. A target in this object only
|
|
7
|
+
* raises changed. A key with no prim, or no PERMISSION_CHANGE_LINKS, does
|
|
8
|
+
* nothing, with no error.
|
|
9
|
+
*/
|
|
10
|
+
export declare const llCreateLink: BuiltinImpl;
|
|
11
|
+
/**
|
|
12
|
+
* llBreakLink(integer link) — break the prim at `link` out of the linkset.
|
|
13
|
+
* LINK_THIS reads as the root and any other negative number as link 2; 0
|
|
14
|
+
* and numbers past the last prim do nothing. Without
|
|
15
|
+
* PERMISSION_CHANGE_LINKS nothing happens, with no error.
|
|
16
|
+
*/
|
|
17
|
+
export declare const llBreakLink: BuiltinImpl;
|
|
18
|
+
/** llBreakAllLinks() — break every prim apart. Without PERMISSION_CHANGE_LINKS nothing happens. */
|
|
19
|
+
export declare const llBreakAllLinks: BuiltinImpl;
|
|
20
|
+
//# sourceMappingURL=links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/builtins/links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAO7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,WAQ1B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,WAUzB,CAAA;AAED,mGAAmG;AACnG,eAAO,MAAM,eAAe,EAAE,WAG7B,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { LINK_THIS, PERMISSION_CHANGE_LINKS } from '../generated/constants.js';
|
|
2
|
+
import { findObjectPrim } from './object-reads.js';
|
|
3
|
+
const mayChangeLinks = (ctx) => (ctx.state.permissions.granted & PERMISSION_CHANGE_LINKS) !== 0;
|
|
4
|
+
/**
|
|
5
|
+
* llCreateLink(key target, integer parent) — link the object holding prim
|
|
6
|
+
* `target` with this one. With `parent` TRUE this object stays root and the
|
|
7
|
+
* target's prims go in from link 2; with FALSE the target's root becomes root
|
|
8
|
+
* and this object's prims go in from link 2. A target in this object only
|
|
9
|
+
* raises changed. A key with no prim, or no PERMISSION_CHANGE_LINKS, does
|
|
10
|
+
* nothing, with no error.
|
|
11
|
+
*/
|
|
12
|
+
export const llCreateLink = (ctx, args) => {
|
|
13
|
+
if (!mayChangeLinks(ctx))
|
|
14
|
+
return undefined;
|
|
15
|
+
const target = findObjectPrim(ctx, args[0] ?? '')?.linkset;
|
|
16
|
+
if (!target)
|
|
17
|
+
return undefined;
|
|
18
|
+
const parent = args[1] ?? 0;
|
|
19
|
+
if (parent !== 0)
|
|
20
|
+
ctx.linkset.absorb(target);
|
|
21
|
+
else
|
|
22
|
+
target.absorb(ctx.linkset);
|
|
23
|
+
return undefined;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* llBreakLink(integer link) — break the prim at `link` out of the linkset.
|
|
27
|
+
* LINK_THIS reads as the root and any other negative number as link 2; 0
|
|
28
|
+
* and numbers past the last prim do nothing. Without
|
|
29
|
+
* PERMISSION_CHANGE_LINKS nothing happens, with no error.
|
|
30
|
+
*/
|
|
31
|
+
export const llBreakLink = (ctx, args) => {
|
|
32
|
+
if (!mayChangeLinks(ctx))
|
|
33
|
+
return undefined;
|
|
34
|
+
const link = args[0] ?? 0;
|
|
35
|
+
const prims = ctx.linkset.prims;
|
|
36
|
+
let prim;
|
|
37
|
+
if (link === LINK_THIS)
|
|
38
|
+
prim = prims[0];
|
|
39
|
+
else if (link < 0)
|
|
40
|
+
prim = prims[1];
|
|
41
|
+
else if (link > 0)
|
|
42
|
+
prim = prims[link - 1];
|
|
43
|
+
if (prim)
|
|
44
|
+
ctx.linkset.breakOff(prim);
|
|
45
|
+
return undefined;
|
|
46
|
+
};
|
|
47
|
+
/** llBreakAllLinks() — break every prim apart. Without PERMISSION_CHANGE_LINKS nothing happens. */
|
|
48
|
+
export const llBreakAllLinks = (ctx) => {
|
|
49
|
+
if (mayChangeLinks(ctx))
|
|
50
|
+
ctx.linkset.breakAll();
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/builtins/links.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,cAAc,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;AAE5G;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAA;IAClF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,MAAM,MAAM,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACnD,IAAI,MAAM,KAAK,CAAC;QAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAA;IAC/B,IAAI,IAAsB,CAAA;IAC1B,IAAI,IAAI,KAAK,SAAS;QAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAClC,IAAI,IAAI,GAAG,CAAC;QAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAC7B,IAAI,IAAI,GAAG,CAAC;QAAE,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IACzC,IAAI,IAAI;QAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE;IAClD,IAAI,cAAc,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC/C,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -4,6 +4,11 @@ export interface LinksetDataEntry {
|
|
|
4
4
|
/** Empty string = unprotected. */
|
|
5
5
|
password: string;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Move into `store` each pair of `from` whose key it lacks, while the pair
|
|
9
|
+
* still fits in the 131072 bytes; the rest are dropped.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mergeLinksetData(store: Map<string, LinksetDataEntry>, from: ReadonlyMap<string, LinksetDataEntry>): void;
|
|
7
12
|
export declare const llLinksetDataWrite: BuiltinImpl;
|
|
8
13
|
export declare const llLinksetDataWriteProtected: BuiltinImpl;
|
|
9
14
|
export declare const llLinksetDataRead: BuiltinImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linksetdata.d.ts","sourceRoot":"","sources":["../../src/builtins/linksetdata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAe7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB;
|
|
1
|
+
{"version":3,"file":"linksetdata.d.ts","sourceRoot":"","sources":["../../src/builtins/linksetdata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAe7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAwBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACpC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC1C,IAAI,CASN;AA2QD,eAAO,MAAM,kBAAkB,EAAE,WAmBhC,CAAA;AAED,eAAO,MAAM,2BAA2B,EAAE,WA4BzC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,WAM/B,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,WAOxC,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,WAUjC,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,WAW1C,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,WAuBtC,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,WACgC,CAAA;AAErE,eAAO,MAAM,sBAAsB,EAAE,WAEpC,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,WAInC,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,WAOnC,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,WAOrC,CAAA"}
|
|
@@ -16,6 +16,22 @@ function bytesUsed(store) {
|
|
|
16
16
|
used += entryCost(name, entry);
|
|
17
17
|
return used;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Move into `store` each pair of `from` whose key it lacks, while the pair
|
|
21
|
+
* still fits in the 131072 bytes; the rest are dropped.
|
|
22
|
+
*/
|
|
23
|
+
export function mergeLinksetData(store, from) {
|
|
24
|
+
let used = bytesUsed(store);
|
|
25
|
+
for (const [name, entry] of from) {
|
|
26
|
+
if (store.has(name))
|
|
27
|
+
continue;
|
|
28
|
+
const cost = entryCost(name, entry);
|
|
29
|
+
if (used + cost > LSD_AVAILABLE_BYTES)
|
|
30
|
+
continue;
|
|
31
|
+
store.set(name, entry);
|
|
32
|
+
used += cost;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
19
35
|
function fits(ctx, name, entry) {
|
|
20
36
|
const store = ctx.state.linksetData;
|
|
21
37
|
const existing = store.get(name);
|
|
@@ -288,19 +304,16 @@ function compilePattern(pattern) {
|
|
|
288
304
|
}
|
|
289
305
|
/**
|
|
290
306
|
* Slice helper matching LSL list-style start/count semantics for ListKeys /
|
|
291
|
-
* FindKeys: negative `start`
|
|
307
|
+
* FindKeys: callers clamp a negative `start` to 0; `count < 1` means "to the
|
|
292
308
|
* end".
|
|
293
309
|
*/
|
|
294
310
|
function slice(arr, start, count) {
|
|
295
311
|
if (arr.length === 0)
|
|
296
312
|
return [];
|
|
297
|
-
|
|
298
|
-
if (s < 0)
|
|
299
|
-
s = 0;
|
|
300
|
-
if (s >= arr.length)
|
|
313
|
+
if (start >= arr.length)
|
|
301
314
|
return [];
|
|
302
|
-
const end = count < 1 ? arr.length : Math.min(arr.length,
|
|
303
|
-
return arr.slice(
|
|
315
|
+
const end = count < 1 ? arr.length : Math.min(arr.length, start + count);
|
|
316
|
+
return arr.slice(start, end);
|
|
304
317
|
}
|
|
305
318
|
export const llLinksetDataWrite = (ctx, args) => {
|
|
306
319
|
const name = args[0] ?? '';
|
|
@@ -445,7 +458,7 @@ export const llLinksetDataCountKeys = (ctx) => {
|
|
|
445
458
|
export const llLinksetDataListKeys = (ctx, args) => {
|
|
446
459
|
const start = args[0] ?? 0;
|
|
447
460
|
const count = args[1] ?? -1;
|
|
448
|
-
return uniformList(slice(sortedKeys(ctx), start, count), 'string');
|
|
461
|
+
return uniformList(slice(sortedKeys(ctx), Math.max(start, 0), count), 'string');
|
|
449
462
|
};
|
|
450
463
|
export const llLinksetDataFindKeys = (ctx, args) => {
|
|
451
464
|
const pattern = args[0] ?? '';
|
|
@@ -454,7 +467,7 @@ export const llLinksetDataFindKeys = (ctx, args) => {
|
|
|
454
467
|
const matches = compilePattern(pattern);
|
|
455
468
|
if (!matches)
|
|
456
469
|
return [];
|
|
457
|
-
return uniformList(slice(sortedKeys(ctx).filter(matches), start, count), 'string');
|
|
470
|
+
return uniformList(slice(sortedKeys(ctx).filter(matches), Math.max(start, 0), count), 'string');
|
|
458
471
|
};
|
|
459
472
|
export const llLinksetDataCountFound = (ctx, args) => {
|
|
460
473
|
const pattern = args[0] ?? '';
|