portals-mcp 1.3.0-beta.0 → 1.3.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/resources/index/effects.json +703 -699
- package/dist/resources/index/items.json +393 -393
- package/dist/resources/logic/js-use-effector.md +29 -4
- package/dist/resources/python/lib/portals_core.py +1122 -1093
- package/dist/resources/python/lib/portals_ops.py +60 -13
- package/dist/resources/ref/items/cube.json +76 -73
- package/dist/resources/ref/items/spawn.json +51 -50
- package/dist/resources/ref/items/spotlight.json +63 -51
- package/dist/resources/ref/systems/parent-child.json +52 -43
- package/dist/resources/reference/api-cheatsheet.md +216 -216
- package/dist/resources/reference/interactions.md +863 -854
- package/dist/resources/reference/items/building.md +277 -265
- package/dist/resources/reference/items/lighting.md +95 -80
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +5 -1
- package/package.json +1 -1
|
@@ -1,699 +1,703 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "0.1.0",
|
|
3
|
-
"description": "Compact lookup of all Portals effects. Wrap in TaskEffectorSubscription (quest-driven) or DirectEffector (basic interaction).",
|
|
4
|
-
"effects": [
|
|
5
|
-
{
|
|
6
|
-
"$type": "ShowObjectEvent",
|
|
7
|
-
"category": "visibility",
|
|
8
|
-
"parameters": {},
|
|
9
|
-
"gotchas": []
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"$type": "HideObjectEvent",
|
|
13
|
-
"category": "visibility",
|
|
14
|
-
"parameters": {},
|
|
15
|
-
"gotchas": ["Hidden items lose collider too — players pass through them"]
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"$type": "ShowOutline",
|
|
19
|
-
"category": "visibility",
|
|
20
|
-
"parameters": {},
|
|
21
|
-
"gotchas": []
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"$type": "HideOutline",
|
|
25
|
-
"category": "visibility",
|
|
26
|
-
"parameters": {},
|
|
27
|
-
"gotchas": []
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"$type": "MoveToSpot",
|
|
31
|
-
"category": "movement",
|
|
32
|
-
"parameters": {
|
|
33
|
-
"_transformState": "object — {position:[x,y,z], rotation:[qx,qy,qz,qw], scale:[x,y,z], duration:float}",
|
|
34
|
-
"relative": "bool — false(default)=absolute world coords, true=offset from current transform"
|
|
35
|
-
},
|
|
36
|
-
"gotchas": [
|
|
37
|
-
"All values ABSOLUTE by default — position is world coords, not offset",
|
|
38
|
-
"relative:true makes values accumulate per trigger (3 clicks = 3x offset)",
|
|
39
|
-
"Scale in relative mode is ADDITIVE (scale [1,1,1] adds 1 to each axis per trigger)"
|
|
40
|
-
]
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"$type": "PortalsAnimation",
|
|
44
|
-
"category": "movement",
|
|
45
|
-
"parameters": {
|
|
46
|
-
"_transformStates": "array — [{position, rotation, scale},...] quaternion-based keyframes",
|
|
47
|
-
"states": "array — [{x,y,z,rx,sx,sy,sz,duration},...] euler-based keyframes
|
|
48
|
-
"stateEvents": "array — MUST be flat [] for basic animations. NOT a parallel array — never use [[], []] matching keyframe count, as this silently breaks the animation",
|
|
49
|
-
"loopAnimation": "bool — loop continuously",
|
|
50
|
-
"seamless": "bool — smooth loop transition",
|
|
51
|
-
"fixedUpdate": "bool — optimize for collision detection"
|
|
52
|
-
},
|
|
53
|
-
"gotchas": [
|
|
54
|
-
"_transformStates and states arrays must have same length
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
"
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
"
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
"
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
"
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
"
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
"
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
"
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
"
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
"
|
|
210
|
-
"
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
"
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
"
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
"
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
"
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
"
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
"
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
"
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
"
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
"
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
"
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
"
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
"
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
"
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
"
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
"
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
"
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
"
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
"
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
"
|
|
307
|
-
|
|
308
|
-
"
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
"
|
|
320
|
-
"
|
|
321
|
-
"
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
"
|
|
332
|
-
"
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
"
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
"
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
"
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
"
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
"
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
"
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
"
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
"
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
"
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
"
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
"
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
"
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
"
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
"
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
"
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
"
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
"
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
"
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
"
|
|
435
|
-
"
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
"
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
"
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
"
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
"
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
"
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
"
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
"
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
"
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
"
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
"
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
"
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
"
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
"
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
"
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
"
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
"
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
"
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
"
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
"
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
"
|
|
538
|
-
"
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
"
|
|
544
|
-
"
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
"
|
|
550
|
-
"
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
"
|
|
556
|
-
"
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
"
|
|
562
|
-
"
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
"
|
|
568
|
-
"
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
"
|
|
574
|
-
"
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
"
|
|
580
|
-
"
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
"
|
|
586
|
-
"
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
"
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
"
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
"
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
"
|
|
611
|
-
"
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
"
|
|
617
|
-
"
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
"
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
"
|
|
634
|
-
"
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
"
|
|
640
|
-
"
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
"
|
|
646
|
-
"
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
"
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
"
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
"
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
"
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
"
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
"
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
"
|
|
677
|
-
"
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
"
|
|
684
|
-
"
|
|
685
|
-
"
|
|
686
|
-
"
|
|
687
|
-
"
|
|
688
|
-
"
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
"
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"description": "Compact lookup of all Portals effects. Wrap in TaskEffectorSubscription (quest-driven) or DirectEffector (basic interaction).",
|
|
4
|
+
"effects": [
|
|
5
|
+
{
|
|
6
|
+
"$type": "ShowObjectEvent",
|
|
7
|
+
"category": "visibility",
|
|
8
|
+
"parameters": {},
|
|
9
|
+
"gotchas": []
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"$type": "HideObjectEvent",
|
|
13
|
+
"category": "visibility",
|
|
14
|
+
"parameters": {},
|
|
15
|
+
"gotchas": ["Hidden items lose collider too — players pass through them"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"$type": "ShowOutline",
|
|
19
|
+
"category": "visibility",
|
|
20
|
+
"parameters": {},
|
|
21
|
+
"gotchas": []
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"$type": "HideOutline",
|
|
25
|
+
"category": "visibility",
|
|
26
|
+
"parameters": {},
|
|
27
|
+
"gotchas": []
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"$type": "MoveToSpot",
|
|
31
|
+
"category": "movement",
|
|
32
|
+
"parameters": {
|
|
33
|
+
"_transformState": "object — {position:[x,y,z], rotation:[qx,qy,qz,qw], scale:[x,y,z], duration:float}",
|
|
34
|
+
"relative": "bool — false(default)=absolute world coords, true=offset from current transform"
|
|
35
|
+
},
|
|
36
|
+
"gotchas": [
|
|
37
|
+
"All values ABSOLUTE by default — position is world coords, not offset",
|
|
38
|
+
"relative:true makes values accumulate per trigger (3 clicks = 3x offset)",
|
|
39
|
+
"Scale in relative mode is ADDITIVE (scale [1,1,1] adds 1 to each axis per trigger)"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"$type": "PortalsAnimation",
|
|
44
|
+
"category": "movement",
|
|
45
|
+
"parameters": {
|
|
46
|
+
"_transformStates": "array — [{position:[x,y,z], rotation:[qx,qy,qz,qw], scale:[x,y,z]},...] quaternion-based keyframes. Drives POSITION and SCALE only; the rotation quaternion is not animated at runtime.",
|
|
47
|
+
"states": "array — [{x,y,z,rx,ry,rz,sx,sy,sz,duration},...] euler-based keyframes. DRIVES ROTATION via rx/ry/rz (degrees per axis) and provides per-keyframe duration in seconds.",
|
|
48
|
+
"stateEvents": "array — MUST be flat [] for basic animations. NOT a parallel array — never use [[], []] matching keyframe count, as this silently breaks the animation",
|
|
49
|
+
"loopAnimation": "bool — loop continuously",
|
|
50
|
+
"seamless": "bool — smooth loop transition",
|
|
51
|
+
"fixedUpdate": "bool — optimize for collision detection"
|
|
52
|
+
},
|
|
53
|
+
"gotchas": [
|
|
54
|
+
"_transformStates and states arrays must have same length",
|
|
55
|
+
"Rotation comes from states[].rx/ry/rz (Euler degrees), NOT from _transformStates[].rotation (the quaternion is not animated at runtime). Include rx/ry/rz on every states entry, even when 0.",
|
|
56
|
+
"Multi-turn rotation REQUIRES Euler. Quaternions are modulo 360° — to spin through several full turns, keep rx/ry/rz monotonically increasing across keyframes (e.g. 0, 360, 720, 1080).",
|
|
57
|
+
"First keyframe IS the starting pose — the animation snaps to it on trigger. For a smooth start, make the first keyframe a near-zero-duration copy of the item's current transform.",
|
|
58
|
+
"Children of a rotating parent need a local rotation matching their angular offset around the rotation axis, otherwise their faces don't follow as the parent spins.",
|
|
59
|
+
"Does NOT support relative mode — always absolute",
|
|
60
|
+
"Each keyframe in states has its own duration",
|
|
61
|
+
"stateEvents must be a flat array [] for basic animations — do NOT create a parallel array like [[], []] matching the keyframe count, as this silently breaks the animation"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"$type": "DuplicateItem",
|
|
66
|
+
"category": "movement",
|
|
67
|
+
"parameters": {
|
|
68
|
+
"TS": "object — {position:[x,y,z], rotation:[qx,qy,qz,qw], scale:[x,y,z]}",
|
|
69
|
+
"destroyAfterTime": "float — seconds before auto-destroy (0=permanent)"
|
|
70
|
+
},
|
|
71
|
+
"gotchas": ["Uses 'TS' not '_transformState' for transform"]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"$type": "MoveItemToPlayer",
|
|
75
|
+
"category": "movement",
|
|
76
|
+
"parameters": {},
|
|
77
|
+
"gotchas": []
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"$type": "AddVelocityToPlayer",
|
|
81
|
+
"category": "player",
|
|
82
|
+
"parameters": {
|
|
83
|
+
"vel": "array — [x,y,z] velocity vector",
|
|
84
|
+
"local": "bool — true=relative to player facing, false=world"
|
|
85
|
+
},
|
|
86
|
+
"gotchas": []
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"$type": "TeleportEvent",
|
|
90
|
+
"category": "player",
|
|
91
|
+
"parameters": {
|
|
92
|
+
"id": "string — destination room ID",
|
|
93
|
+
"sn": "string — spawn name",
|
|
94
|
+
"sr": "float — spawn radius (meters). Random scatter distance from spawn point. NOT rotation. Default 0. Typically 0–5."
|
|
95
|
+
},
|
|
96
|
+
"gotchas": ["sr is spawn RADIUS in meters (random scatter distance), NOT rotation in degrees. Values like 90 or 180 will scatter players 90–180m away. Use 0 for exact spawn placement, or 1–5 for small spread."]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"$type": "ChangePlayerHealth",
|
|
100
|
+
"category": "player",
|
|
101
|
+
"parameters": {
|
|
102
|
+
"healthChange": "int — amount to heal/damage",
|
|
103
|
+
"op": "int — omit=heal, 2=damage"
|
|
104
|
+
},
|
|
105
|
+
"gotchas": ["Omit 'op' for healing. Set op:2 for damage."]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"$type": "DamageOverTime",
|
|
109
|
+
"category": "player",
|
|
110
|
+
"parameters": {},
|
|
111
|
+
"gotchas": ["Continuous damage on contact — use with trigger zones"]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"$type": "LockMovement",
|
|
115
|
+
"category": "player",
|
|
116
|
+
"parameters": {},
|
|
117
|
+
"gotchas": []
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"$type": "UnlockMovement",
|
|
121
|
+
"category": "player",
|
|
122
|
+
"parameters": {},
|
|
123
|
+
"gotchas": []
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"$type": "StartAutoRun",
|
|
127
|
+
"category": "player",
|
|
128
|
+
"parameters": {},
|
|
129
|
+
"gotchas": []
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"$type": "StopAutoRun",
|
|
133
|
+
"category": "player",
|
|
134
|
+
"parameters": {},
|
|
135
|
+
"gotchas": []
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"$type": "PlayerEmote",
|
|
139
|
+
"category": "player",
|
|
140
|
+
"parameters": {
|
|
141
|
+
"animationName": "string — Sitting, Can Can, Wave, Salute, Jive, Salsa, Shuffling, Chicken, Slide n Jive, Robot"
|
|
142
|
+
},
|
|
143
|
+
"gotchas": []
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"$type": "MutePlayer",
|
|
147
|
+
"category": "player",
|
|
148
|
+
"parameters": {},
|
|
149
|
+
"gotchas": []
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"$type": "HideAllPlayersEvent",
|
|
153
|
+
"category": "player",
|
|
154
|
+
"parameters": {},
|
|
155
|
+
"gotchas": []
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"$type": "LockAvatarChange",
|
|
159
|
+
"category": "player",
|
|
160
|
+
"parameters": {},
|
|
161
|
+
"gotchas": []
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"$type": "UnlockAvatarChange",
|
|
165
|
+
"category": "player",
|
|
166
|
+
"parameters": {},
|
|
167
|
+
"gotchas": []
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"$type": "DisplayAvatarScreen",
|
|
171
|
+
"category": "player",
|
|
172
|
+
"parameters": {},
|
|
173
|
+
"gotchas": []
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"$type": "ChangeAvatarEffector",
|
|
177
|
+
"category": "player",
|
|
178
|
+
"parameters": {
|
|
179
|
+
"Url": "string — GLB model URL",
|
|
180
|
+
"Persistent": "bool — persist across sessions"
|
|
181
|
+
},
|
|
182
|
+
"gotchas": []
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"$type": "ChangeMovementProfile",
|
|
186
|
+
"category": "player",
|
|
187
|
+
"parameters": {
|
|
188
|
+
"mvmtProfile": "string — movement profile name"
|
|
189
|
+
},
|
|
190
|
+
"gotchas": []
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"$type": "ChangeRoundyWearableEffector",
|
|
194
|
+
"category": "player",
|
|
195
|
+
"parameters": {
|
|
196
|
+
"ItemID": "string — wearable item ID"
|
|
197
|
+
},
|
|
198
|
+
"gotchas": []
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"$type": "LockCamera",
|
|
202
|
+
"category": "camera",
|
|
203
|
+
"parameters": {},
|
|
204
|
+
"gotchas": []
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"$type": "UnlockCamera",
|
|
208
|
+
"category": "camera",
|
|
209
|
+
"parameters": {},
|
|
210
|
+
"gotchas": []
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"$type": "ChangeCameraZoom",
|
|
214
|
+
"category": "camera",
|
|
215
|
+
"parameters": {
|
|
216
|
+
"zoomAmount": "float — zoom level",
|
|
217
|
+
"lockZoom": "bool — prevent player zoom adjustment"
|
|
218
|
+
},
|
|
219
|
+
"gotchas": []
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"$type": "ToggleFreeCam",
|
|
223
|
+
"category": "camera",
|
|
224
|
+
"parameters": {
|
|
225
|
+
"enterFreeCam": "bool (optional) — true=enter, false=exit. Omit all params to toggle.",
|
|
226
|
+
"x": "float (optional) — camera X position",
|
|
227
|
+
"y": "float (optional) — camera Y position",
|
|
228
|
+
"z": "float (optional) — camera Z position",
|
|
229
|
+
"lookAtPlayer": "bool (optional) — camera looks at player"
|
|
230
|
+
},
|
|
231
|
+
"gotchas": ["No params = toggle. With params = explicit control with optional position and orientation."]
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"$type": "ChangeCamState",
|
|
235
|
+
"category": "camera",
|
|
236
|
+
"parameters": {
|
|
237
|
+
"camState": "string — camera state name (matches CameraObject sn)",
|
|
238
|
+
"transitionSpeed": "float — transition speed"
|
|
239
|
+
},
|
|
240
|
+
"gotchas": []
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"$type": "SetCameraFilter",
|
|
244
|
+
"category": "camera",
|
|
245
|
+
"parameters": {
|
|
246
|
+
"url": "string — image overlay URL",
|
|
247
|
+
"alpha": "float — overlay opacity"
|
|
248
|
+
},
|
|
249
|
+
"gotchas": []
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"$type": "ToggleLockCursor",
|
|
253
|
+
"category": "camera",
|
|
254
|
+
"parameters": {
|
|
255
|
+
"lockCursor": "bool (optional) — true=lock, false=unlock. Omit to toggle."
|
|
256
|
+
},
|
|
257
|
+
"gotchas": ["No params = toggle. With lockCursor = explicit lock/unlock."]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"$type": "NotificationPillEvent",
|
|
261
|
+
"category": "ui",
|
|
262
|
+
"parameters": {
|
|
263
|
+
"nt": "string — notification text",
|
|
264
|
+
"c": "string — hex color",
|
|
265
|
+
"hideBackground": "bool — transparent background"
|
|
266
|
+
},
|
|
267
|
+
"gotchas": ["Supports |varName| pipe syntax for inline variable display"]
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"$type": "DisplayValueEvent",
|
|
271
|
+
"category": "values",
|
|
272
|
+
"parameters": {
|
|
273
|
+
"label": "string — variable name to display",
|
|
274
|
+
"color": "string — hex color"
|
|
275
|
+
},
|
|
276
|
+
"gotchas": []
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"$type": "HideValueEvent",
|
|
280
|
+
"category": "values",
|
|
281
|
+
"parameters": {
|
|
282
|
+
"label": "string — variable name to hide"
|
|
283
|
+
},
|
|
284
|
+
"gotchas": []
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"$type": "UpdateScoreEvent",
|
|
288
|
+
"category": "values",
|
|
289
|
+
"parameters": {
|
|
290
|
+
"scoreChange": "float — value to apply",
|
|
291
|
+
"op": "int — omit=set, 1=add, 2=sub, 3=mul, 4=div"
|
|
292
|
+
},
|
|
293
|
+
"gotchas": ["Omit 'op' entirely to SET the value. Include op for math operations."]
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"$type": "UpdateScoreEventString",
|
|
297
|
+
"category": "values",
|
|
298
|
+
"parameters": {
|
|
299
|
+
"targetText": "string — text value to set",
|
|
300
|
+
"label": "string — variable name"
|
|
301
|
+
},
|
|
302
|
+
"gotchas": []
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"$type": "FunctionEffector",
|
|
306
|
+
"category": "logic",
|
|
307
|
+
"parameters": {
|
|
308
|
+
"V": "string — NCalc expression"
|
|
309
|
+
},
|
|
310
|
+
"gotchas": [
|
|
311
|
+
"Task names OMIT numbered prefix: quest Name='0_redteam' but NCalc uses 'redteam'",
|
|
312
|
+
"All numeric values MUST use decimals (0.0 not 0)",
|
|
313
|
+
"Strings use single quotes ('Active' not \"Active\")"
|
|
314
|
+
]
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"$type": "RunTriggersFromEffector",
|
|
318
|
+
"category": "logic",
|
|
319
|
+
"parameters": {
|
|
320
|
+
"linkedTasks": "array — [{Trigger:{}, Id, TargetState, Name, TaskTriggerId},...] state changes to fire",
|
|
321
|
+
"useRandom": "bool — randomly pick one linkedTask instead of firing all"
|
|
322
|
+
},
|
|
323
|
+
"gotchas": [
|
|
324
|
+
"TargetState uses encoded values: 101=any>NotActive, 151=any>Active, 141=any>Completed, 111=NotActive>Active, 121=Active>Completed, 171=Completed>NotActive",
|
|
325
|
+
"Trigger:{} = immediate. Trigger:{Delay:1.0} = delay in seconds"
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"$type": "ResetAllTasks",
|
|
330
|
+
"category": "logic",
|
|
331
|
+
"parameters": {},
|
|
332
|
+
"gotchas": []
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"$type": "StartTimerEffect",
|
|
336
|
+
"category": "timers",
|
|
337
|
+
"parameters": {
|
|
338
|
+
"tn": "string — timer name",
|
|
339
|
+
"ci": "string — custom identifier (usually empty)",
|
|
340
|
+
"showTimerUI": "bool — display timer on screen"
|
|
341
|
+
},
|
|
342
|
+
"gotchas": []
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"$type": "StopTimerEffect",
|
|
346
|
+
"category": "timers",
|
|
347
|
+
"parameters": {
|
|
348
|
+
"tn": "string — timer name",
|
|
349
|
+
"ci": "string — custom identifier (usually empty)"
|
|
350
|
+
},
|
|
351
|
+
"gotchas": ["Fires OnTimerStopped trigger"]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"$type": "CancelTimerEffect",
|
|
355
|
+
"category": "timers",
|
|
356
|
+
"parameters": {
|
|
357
|
+
"tn": "string — timer name"
|
|
358
|
+
},
|
|
359
|
+
"gotchas": ["Does NOT fire OnTimerStopped — cancels silently"]
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"$type": "PostScoreToLeaderboard",
|
|
363
|
+
"category": "leaderboard",
|
|
364
|
+
"parameters": {
|
|
365
|
+
"label": "string — variable name to post"
|
|
366
|
+
},
|
|
367
|
+
"gotchas": ["Only for numeric values, not timers directly"]
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"$type": "ClearLeaderboard",
|
|
371
|
+
"category": "leaderboard",
|
|
372
|
+
"parameters": {
|
|
373
|
+
"label": "string — leaderboard name"
|
|
374
|
+
},
|
|
375
|
+
"gotchas": []
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"$type": "OpenLeaderboardEffect",
|
|
379
|
+
"category": "leaderboard",
|
|
380
|
+
"parameters": {
|
|
381
|
+
"lb": "string — leaderboard name"
|
|
382
|
+
},
|
|
383
|
+
"gotchas": []
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"$type": "PlaySoundOnce",
|
|
387
|
+
"category": "audio",
|
|
388
|
+
"parameters": {
|
|
389
|
+
"Url": "string — MP3 URL (capital U!)",
|
|
390
|
+
"Dist": "float — audible distance (capital D!)"
|
|
391
|
+
},
|
|
392
|
+
"gotchas": ["Field names use CAPITAL 'Url' and 'Dist' — not lowercase"]
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"$type": "PlaySoundInALoop",
|
|
396
|
+
"category": "audio",
|
|
397
|
+
"parameters": {
|
|
398
|
+
"Url": "string — MP3 URL (capital U!)",
|
|
399
|
+
"Dist": "float — audible distance (-1=global, capital D!)",
|
|
400
|
+
"Preload": "bool — preload audio"
|
|
401
|
+
},
|
|
402
|
+
"gotchas": ["Field names use CAPITAL 'Url' and 'Dist' — not lowercase"]
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"$type": "StopSound",
|
|
406
|
+
"category": "audio",
|
|
407
|
+
"parameters": {
|
|
408
|
+
"url": "string — MP3 URL (lowercase u!)",
|
|
409
|
+
"fadeOut": "float — fade out duration seconds"
|
|
410
|
+
},
|
|
411
|
+
"gotchas": ["Uses LOWERCASE 'url' — opposite of PlaySoundOnce/PlaySoundInALoop"]
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"$type": "ChangeAudiusEffect",
|
|
415
|
+
"category": "audio",
|
|
416
|
+
"parameters": {
|
|
417
|
+
"ap": "string — Audius playlist name"
|
|
418
|
+
},
|
|
419
|
+
"gotchas": []
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"$type": "ChangeBloom",
|
|
423
|
+
"category": "environment",
|
|
424
|
+
"parameters": {
|
|
425
|
+
"Intensity": "float — bloom intensity",
|
|
426
|
+
"Clamp": "float — bloom clamp",
|
|
427
|
+
"Diffusion": "float — bloom diffusion"
|
|
428
|
+
},
|
|
429
|
+
"gotchas": []
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"$type": "ChangeTimeOfDay",
|
|
433
|
+
"category": "environment",
|
|
434
|
+
"parameters": {},
|
|
435
|
+
"gotchas": []
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"$type": "RotateSkybox",
|
|
439
|
+
"category": "environment",
|
|
440
|
+
"parameters": {
|
|
441
|
+
"rotation": "float — degrees",
|
|
442
|
+
"duration": "float — seconds"
|
|
443
|
+
},
|
|
444
|
+
"gotchas": []
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"$type": "ChangeFog",
|
|
448
|
+
"category": "environment",
|
|
449
|
+
"parameters": {
|
|
450
|
+
"color": "string — hex color",
|
|
451
|
+
"distance": "float — fog distance"
|
|
452
|
+
},
|
|
453
|
+
"gotchas": []
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"$type": "SendMessageToIframes",
|
|
457
|
+
"category": "communication",
|
|
458
|
+
"parameters": {
|
|
459
|
+
"iframeMsg": "string — message text"
|
|
460
|
+
},
|
|
461
|
+
"gotchas": ["Supports |variable| interpolation (|username|, |position|, player vars). Legacy — prefer native displayHtml() for new custom UI (docs://logic/js-display-html)."]
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"$type": "ChangeVoiceGroup",
|
|
465
|
+
"category": "communication",
|
|
466
|
+
"parameters": {
|
|
467
|
+
"group": "string — voice group name"
|
|
468
|
+
},
|
|
469
|
+
"gotchas": []
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"$type": "IframeEvent",
|
|
473
|
+
"category": "communication",
|
|
474
|
+
"parameters": {
|
|
475
|
+
"url": "string — iframe URL (supports ?maximized=true, ?noCloseBtn=true)"
|
|
476
|
+
},
|
|
477
|
+
"gotchas": ["Legacy — prefer native displayHtml() for custom UI/HUDs (docs://logic/js-display-html)"]
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"$type": "IframeStopEvent",
|
|
481
|
+
"category": "communication",
|
|
482
|
+
"parameters": {
|
|
483
|
+
"iframeUrl": "string — URL must match the opened iframe"
|
|
484
|
+
},
|
|
485
|
+
"gotchas": ["URL must exactly match the IframeEvent url to close it. Legacy — prefer native displayHtml() for custom UI/HUDs (docs://logic/js-display-html)"]
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"$type": "NPCMessageEvent",
|
|
489
|
+
"category": "npc",
|
|
490
|
+
"parameters": {
|
|
491
|
+
"n": "string — NPC name",
|
|
492
|
+
"m": "string — message text",
|
|
493
|
+
"r": "bool"
|
|
494
|
+
},
|
|
495
|
+
"gotchas": ["GLBNPC only"]
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"$type": "WalkNpcToSpot",
|
|
499
|
+
"category": "npc",
|
|
500
|
+
"parameters": {
|
|
501
|
+
"walkSpeed": "float — walk speed",
|
|
502
|
+
"endPosition": "array — [x,y,z] destination",
|
|
503
|
+
"endRotation": "array — [qx,qy,qz,qw] final rotation"
|
|
504
|
+
},
|
|
505
|
+
"gotchas": ["GLBNPC only. endPosition/endRotation are arrays, not objects."]
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"$type": "NpcAnimation",
|
|
509
|
+
"category": "npc",
|
|
510
|
+
"parameters": {
|
|
511
|
+
"animationName": "string — Sitting, Can Can, Wave, Salute, Jive, Salsa, Shuffling, Chicken, Slide n Jive, Robot"
|
|
512
|
+
},
|
|
513
|
+
"gotchas": ["GLBNPC only"]
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"$type": "NpcCopyPlayerPath",
|
|
517
|
+
"category": "npc",
|
|
518
|
+
"parameters": {
|
|
519
|
+
"positions": "array — [[x,y,z],...] world-space waypoints, one per recorded sample",
|
|
520
|
+
"rotations": "array — [[qx,qy,qz,qw],...] quaternion rotation at each point, same length as positions",
|
|
521
|
+
"animatorParameterDatas": "array — movement animation state per point. Each entry: {g: bool (grounded), s: bool (sprint, omit if false), o: string ('0.0'=idle, '1.0'=moving), m: string ('0.0'=idle, '0.5'=walk, '1.0'=jog, '1.5'=sprint), d/a/v/i/r: string (typically '0.0')}",
|
|
522
|
+
"shouldLoop": "bool — true=loop continuously, omit/false=play once"
|
|
523
|
+
},
|
|
524
|
+
"gotchas": ["GLBNPC only", "All three arrays (positions, rotations, animatorParameterDatas) must be the same length", "Sprint requires both s:true AND m:'1.5'"]
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
"$type": "NpcCopyPlayerPathStop",
|
|
528
|
+
"category": "npc",
|
|
529
|
+
"parameters": {
|
|
530
|
+
"RP": "bool — true=reset to original position"
|
|
531
|
+
},
|
|
532
|
+
"gotchas": ["GLBNPC only"]
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"$type": "TurnToPlayer",
|
|
536
|
+
"category": "npc",
|
|
537
|
+
"parameters": {},
|
|
538
|
+
"gotchas": ["GLBNPC only"]
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"$type": "StartSpeaking",
|
|
542
|
+
"category": "npc",
|
|
543
|
+
"parameters": {},
|
|
544
|
+
"gotchas": ["GLBNPC only"]
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"$type": "StopSpeaking",
|
|
548
|
+
"category": "npc",
|
|
549
|
+
"parameters": {},
|
|
550
|
+
"gotchas": ["GLBNPC only"]
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"$type": "EquipGunEffect",
|
|
554
|
+
"category": "gun",
|
|
555
|
+
"parameters": {},
|
|
556
|
+
"gotchas": ["Gun/Shotgun only"]
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"$type": "TossGunEffect",
|
|
560
|
+
"category": "gun",
|
|
561
|
+
"parameters": {},
|
|
562
|
+
"gotchas": ["Gun/Shotgun only"]
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"$type": "ResetGunEffect",
|
|
566
|
+
"category": "gun",
|
|
567
|
+
"parameters": {},
|
|
568
|
+
"gotchas": ["Gun/Shotgun only"]
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"$type": "ReviveEnemy",
|
|
572
|
+
"category": "enemy",
|
|
573
|
+
"parameters": {},
|
|
574
|
+
"gotchas": ["EnemyNPC only"]
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"$type": "ResetEnemy",
|
|
578
|
+
"category": "enemy",
|
|
579
|
+
"parameters": {},
|
|
580
|
+
"gotchas": ["EnemyNPC only — resets to full health at origin"]
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"$type": "AttackPlayer",
|
|
584
|
+
"category": "enemy",
|
|
585
|
+
"parameters": {},
|
|
586
|
+
"gotchas": ["EnemyNPC only — forces attack on nearest player"]
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"$type": "ChangeEnemyHealth",
|
|
590
|
+
"category": "enemy",
|
|
591
|
+
"parameters": {
|
|
592
|
+
"op": "int — 1=add, 2=subtract",
|
|
593
|
+
"healthChange": "int — HP amount"
|
|
594
|
+
},
|
|
595
|
+
"gotchas": ["EnemyNPC only"]
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
"$type": "DuplicateEnemy",
|
|
599
|
+
"category": "enemy",
|
|
600
|
+
"parameters": {
|
|
601
|
+
"spawnName": "string — SpawnPoint name",
|
|
602
|
+
"count": "int — number of copies",
|
|
603
|
+
"randomRadius": "float — spawn spread radius"
|
|
604
|
+
},
|
|
605
|
+
"gotchas": ["EnemyNPC only — spawns at named SpawnPoint"]
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"$type": "EnterVehicle",
|
|
609
|
+
"category": "vehicle",
|
|
610
|
+
"parameters": {},
|
|
611
|
+
"gotchas": ["Vehicle only"]
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"$type": "ExitVehicle",
|
|
615
|
+
"category": "vehicle",
|
|
616
|
+
"parameters": {},
|
|
617
|
+
"gotchas": ["Vehicle only"]
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"$type": "VehicleBoost",
|
|
621
|
+
"category": "vehicle",
|
|
622
|
+
"parameters": {
|
|
623
|
+
"duration": "float — boost duration seconds",
|
|
624
|
+
"speedOfBoost": "float — boost speed",
|
|
625
|
+
"rampUpTime": "float — ramp up seconds",
|
|
626
|
+
"rampDownTime": "float — ramp down seconds"
|
|
627
|
+
},
|
|
628
|
+
"gotchas": ["Vehicle only"]
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"$type": "ActivateTriggerZoneEffect",
|
|
632
|
+
"category": "trigger-zone",
|
|
633
|
+
"parameters": {},
|
|
634
|
+
"gotchas": ["Trigger only — re-enables a deactivated zone"]
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
"$type": "DeactivateTriggerZoneEffect",
|
|
638
|
+
"category": "trigger-zone",
|
|
639
|
+
"parameters": {},
|
|
640
|
+
"gotchas": ["Trigger only"]
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"$type": "RespawnDestructible",
|
|
644
|
+
"category": "destructible",
|
|
645
|
+
"parameters": {},
|
|
646
|
+
"gotchas": ["Destructible only"]
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
"$type": "PlayAnimationOnce",
|
|
650
|
+
"category": "glb-animation",
|
|
651
|
+
"parameters": {
|
|
652
|
+
"speed": "float — playback speed (negative=reverse)"
|
|
653
|
+
},
|
|
654
|
+
"gotchas": ["Plays embedded GLB animation once"]
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"$type": "StopAnimationEvt",
|
|
658
|
+
"category": "glb-animation",
|
|
659
|
+
"parameters": {
|
|
660
|
+
"stop": "float — normalized time 0.0(start) to 1.0(end)"
|
|
661
|
+
},
|
|
662
|
+
"gotchas": ["Freezes GLB animation at specified frame. Common pattern: OnPlayerLoggedIn > stop:0.0 to freeze, then PlayAnimationOnce on trigger."]
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
"$type": "DisplaySellSwap",
|
|
666
|
+
"category": "other",
|
|
667
|
+
"parameters": {
|
|
668
|
+
"id": "string — swap config ID",
|
|
669
|
+
"typ": "int — swap type"
|
|
670
|
+
},
|
|
671
|
+
"gotchas": []
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
"$type": "HideSellSwap",
|
|
675
|
+
"category": "other",
|
|
676
|
+
"parameters": {},
|
|
677
|
+
"gotchas": []
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"$type": "DialogEffectorDisplay",
|
|
681
|
+
"category": "other",
|
|
682
|
+
"parameters": {
|
|
683
|
+
"tasksN": "array — [{N: '-0_task_name'},...] ordered task refs",
|
|
684
|
+
"GN": "string — character name",
|
|
685
|
+
"S": "string — story UUID prefixed with _",
|
|
686
|
+
"Audio": "bool — enable audio",
|
|
687
|
+
"HF": "bool — hide on finish",
|
|
688
|
+
"R": "bool — allow repeat",
|
|
689
|
+
"DV": "string — voice ID (empty=no TTS)",
|
|
690
|
+
"GB": "string — goodbye action ('leave'=close)",
|
|
691
|
+
"Story": "string — same as S",
|
|
692
|
+
"tasksSorM": "object — {taskName: {completed: quest, inProgress: quest},...}"
|
|
693
|
+
},
|
|
694
|
+
"gotchas": ["Most complex effect — embeds inline quest entries per dialogue node. See docs://reference/interactions for full schema."]
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"$type": "RefreshUserInventory",
|
|
698
|
+
"category": "other",
|
|
699
|
+
"parameters": {},
|
|
700
|
+
"gotchas": []
|
|
701
|
+
}
|
|
702
|
+
]
|
|
703
|
+
}
|