make-mp-data 3.0.3 → 3.0.5
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/README.md +46 -0
- package/dungeons/array-of-object-lookup-schema.json +327 -0
- package/dungeons/array-of-object-lookup.js +29 -9
- package/dungeons/capstone/capstone-ic3.js +291 -0
- package/dungeons/capstone/capstone-ic4.js +598 -0
- package/dungeons/capstone/capstone-ic5.js +668 -0
- package/dungeons/capstone/generate-product-lookup.js +309 -0
- package/dungeons/ecommerce-schema.json +462 -0
- package/dungeons/{copilot.js → ecommerce.js} +79 -17
- package/dungeons/education-schema.json +2409 -0
- package/dungeons/education.js +226 -462
- package/dungeons/fintech-schema.json +14034 -0
- package/dungeons/fintech.js +134 -413
- package/dungeons/foobar-schema.json +403 -0
- package/dungeons/foobar.js +27 -4
- package/dungeons/food-delivery-schema.json +192 -0
- package/dungeons/food-delivery.js +602 -0
- package/dungeons/food-schema.json +1152 -0
- package/dungeons/food.js +173 -406
- package/dungeons/gaming-schema.json +1270 -0
- package/dungeons/gaming.js +182 -42
- package/dungeons/insurance-application-schema.json +204 -0
- package/dungeons/insurance-application.js +605 -0
- package/dungeons/media-schema.json +906 -0
- package/dungeons/media.js +250 -420
- package/dungeons/retention-cadence-schema.json +78 -0
- package/dungeons/retention-cadence.js +35 -1
- package/dungeons/rpg-schema.json +4526 -0
- package/dungeons/rpg.js +171 -429
- package/dungeons/sanity-schema.json +255 -0
- package/dungeons/sanity.js +21 -10
- package/dungeons/sass-schema.json +1291 -0
- package/dungeons/sass.js +241 -368
- package/dungeons/scd-schema.json +919 -0
- package/dungeons/scd.js +41 -13
- package/dungeons/simple-schema.json +608 -0
- package/dungeons/simple.js +52 -15
- package/dungeons/simplest-schema.json +1418 -0
- package/dungeons/simplest.js +392 -0
- package/dungeons/social-schema.json +1118 -0
- package/dungeons/social.js +150 -391
- package/dungeons/text-generation-schema.json +3096 -0
- package/dungeons/text-generation.js +71 -0
- package/index.js +8 -6
- package/lib/core/config-validator.js +28 -8
- package/lib/core/storage.js +5 -5
- package/lib/generators/events.js +4 -4
- package/lib/orchestrators/mixpanel-sender.js +16 -13
- package/lib/orchestrators/user-loop.js +14 -6
- package/lib/templates/soup-presets.js +188 -0
- package/lib/utils/utils.js +52 -6
- package/package.json +1 -1
- package/types.d.ts +20 -3
- package/dungeons/adspend.js +0 -130
- package/dungeons/anon.js +0 -128
- package/dungeons/benchmark-heavy.js +0 -240
- package/dungeons/benchmark-light.js +0 -140
- package/dungeons/big.js +0 -226
- package/dungeons/business.js +0 -391
- package/dungeons/complex.js +0 -428
- package/dungeons/experiments.js +0 -137
- package/dungeons/funnels.js +0 -309
- package/dungeons/mil.js +0 -323
- package/dungeons/mirror.js +0 -161
- package/dungeons/soup-test.js +0 -52
- package/dungeons/streaming.js +0 -372
- package/dungeons/strict-event-test.js +0 -30
- package/dungeons/student-teacher.js +0 -438
- package/dungeons/too-big-events.js +0 -203
- package/dungeons/user-agent.js +0 -209
|
@@ -0,0 +1,1270 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"token": "",
|
|
4
|
+
"seed": "i am gamer face",
|
|
5
|
+
"numDays": 180,
|
|
6
|
+
"numEvents": 1080000,
|
|
7
|
+
"numUsers": 12000,
|
|
8
|
+
"hasAnonIds": false,
|
|
9
|
+
"hasSessionIds": false,
|
|
10
|
+
"format": "json",
|
|
11
|
+
"alsoInferFunnels": true,
|
|
12
|
+
"hasLocation": true,
|
|
13
|
+
"hasAndroidDevices": false,
|
|
14
|
+
"hasIOSDevices": false,
|
|
15
|
+
"hasDesktopDevices": false,
|
|
16
|
+
"hasBrowser": false,
|
|
17
|
+
"hasCampaigns": false,
|
|
18
|
+
"isAnonymous": false,
|
|
19
|
+
"hasAdSpend": false,
|
|
20
|
+
"percentUsersBornInDataset": 25,
|
|
21
|
+
"hasAvatar": true,
|
|
22
|
+
"batchSize": 2500000,
|
|
23
|
+
"concurrency": 1,
|
|
24
|
+
"writeToDisk": false,
|
|
25
|
+
"funnels": [
|
|
26
|
+
{
|
|
27
|
+
"sequence": [
|
|
28
|
+
"app install",
|
|
29
|
+
"character creation",
|
|
30
|
+
"join party"
|
|
31
|
+
],
|
|
32
|
+
"isFirstFunnel": true,
|
|
33
|
+
"conversionRate": 0.8,
|
|
34
|
+
"timeToConvert": 0.25
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"sequence": [
|
|
38
|
+
"start quest",
|
|
39
|
+
"gameplay summary",
|
|
40
|
+
"complete quest"
|
|
41
|
+
],
|
|
42
|
+
"conversionRate": 0.99,
|
|
43
|
+
"timeToConvert": 1,
|
|
44
|
+
"props": {
|
|
45
|
+
"quest type": [
|
|
46
|
+
"Rescue",
|
|
47
|
+
"Retrieve",
|
|
48
|
+
"Explore",
|
|
49
|
+
"Destroy",
|
|
50
|
+
"Investigate"
|
|
51
|
+
],
|
|
52
|
+
"quest difficulty": [
|
|
53
|
+
"Easy",
|
|
54
|
+
"Medium",
|
|
55
|
+
"Hard",
|
|
56
|
+
"Legendary"
|
|
57
|
+
],
|
|
58
|
+
"quest location": [
|
|
59
|
+
"Forest",
|
|
60
|
+
"Dungeon",
|
|
61
|
+
"Mountain",
|
|
62
|
+
"City",
|
|
63
|
+
"Desert"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"events": [
|
|
69
|
+
{
|
|
70
|
+
"event": "app install",
|
|
71
|
+
"weight": 10,
|
|
72
|
+
"isFirstEvent": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"event": "character creation",
|
|
76
|
+
"weight": 2,
|
|
77
|
+
"properties": {
|
|
78
|
+
"mode": [
|
|
79
|
+
"fast",
|
|
80
|
+
"slow",
|
|
81
|
+
"template"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"event": "join party",
|
|
87
|
+
"weight": 8,
|
|
88
|
+
"properties": {
|
|
89
|
+
"party size": [
|
|
90
|
+
1,
|
|
91
|
+
3,
|
|
92
|
+
3,
|
|
93
|
+
6,
|
|
94
|
+
2,
|
|
95
|
+
2,
|
|
96
|
+
3,
|
|
97
|
+
3,
|
|
98
|
+
6,
|
|
99
|
+
4,
|
|
100
|
+
1,
|
|
101
|
+
4,
|
|
102
|
+
4,
|
|
103
|
+
3,
|
|
104
|
+
5,
|
|
105
|
+
2,
|
|
106
|
+
3,
|
|
107
|
+
2,
|
|
108
|
+
3,
|
|
109
|
+
5,
|
|
110
|
+
4,
|
|
111
|
+
4,
|
|
112
|
+
1,
|
|
113
|
+
3,
|
|
114
|
+
4,
|
|
115
|
+
3,
|
|
116
|
+
3,
|
|
117
|
+
3,
|
|
118
|
+
2,
|
|
119
|
+
4,
|
|
120
|
+
4,
|
|
121
|
+
2,
|
|
122
|
+
2,
|
|
123
|
+
5,
|
|
124
|
+
3,
|
|
125
|
+
2,
|
|
126
|
+
5,
|
|
127
|
+
2,
|
|
128
|
+
3,
|
|
129
|
+
2,
|
|
130
|
+
4,
|
|
131
|
+
3,
|
|
132
|
+
3,
|
|
133
|
+
2,
|
|
134
|
+
4,
|
|
135
|
+
3,
|
|
136
|
+
3,
|
|
137
|
+
3,
|
|
138
|
+
3,
|
|
139
|
+
4
|
|
140
|
+
],
|
|
141
|
+
"party leader": [
|
|
142
|
+
"Bard",
|
|
143
|
+
"Cleric",
|
|
144
|
+
"Fighter",
|
|
145
|
+
"Rogue",
|
|
146
|
+
"Wizard",
|
|
147
|
+
"Paladin",
|
|
148
|
+
"Ranger",
|
|
149
|
+
"Sorcerer",
|
|
150
|
+
"Warlock"
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"event": "start quest",
|
|
156
|
+
"weight": 12,
|
|
157
|
+
"properties": {
|
|
158
|
+
"quest type": [
|
|
159
|
+
"Rescue",
|
|
160
|
+
"Retrieve",
|
|
161
|
+
"Explore",
|
|
162
|
+
"Destroy",
|
|
163
|
+
"Investigate"
|
|
164
|
+
],
|
|
165
|
+
"quest difficulty": [
|
|
166
|
+
"Easy",
|
|
167
|
+
"Medium",
|
|
168
|
+
"Hard",
|
|
169
|
+
"Legendary"
|
|
170
|
+
],
|
|
171
|
+
"quest location": [
|
|
172
|
+
"Forest",
|
|
173
|
+
"Dungeon",
|
|
174
|
+
"Mountain",
|
|
175
|
+
"City",
|
|
176
|
+
"Desert"
|
|
177
|
+
],
|
|
178
|
+
"party size": [
|
|
179
|
+
2,
|
|
180
|
+
3,
|
|
181
|
+
3,
|
|
182
|
+
3,
|
|
183
|
+
3,
|
|
184
|
+
2,
|
|
185
|
+
3,
|
|
186
|
+
3,
|
|
187
|
+
4,
|
|
188
|
+
2,
|
|
189
|
+
3,
|
|
190
|
+
3,
|
|
191
|
+
5,
|
|
192
|
+
2,
|
|
193
|
+
5,
|
|
194
|
+
5,
|
|
195
|
+
4,
|
|
196
|
+
2,
|
|
197
|
+
5,
|
|
198
|
+
3,
|
|
199
|
+
4,
|
|
200
|
+
5,
|
|
201
|
+
4,
|
|
202
|
+
3,
|
|
203
|
+
5,
|
|
204
|
+
3,
|
|
205
|
+
3,
|
|
206
|
+
3,
|
|
207
|
+
3,
|
|
208
|
+
2,
|
|
209
|
+
3,
|
|
210
|
+
3,
|
|
211
|
+
3,
|
|
212
|
+
3,
|
|
213
|
+
2,
|
|
214
|
+
4,
|
|
215
|
+
1,
|
|
216
|
+
1,
|
|
217
|
+
3,
|
|
218
|
+
3,
|
|
219
|
+
4,
|
|
220
|
+
3,
|
|
221
|
+
4,
|
|
222
|
+
4,
|
|
223
|
+
3,
|
|
224
|
+
2,
|
|
225
|
+
1,
|
|
226
|
+
2,
|
|
227
|
+
2,
|
|
228
|
+
3
|
|
229
|
+
],
|
|
230
|
+
"used hint": {
|
|
231
|
+
"functionName": "arrow",
|
|
232
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
233
|
+
},
|
|
234
|
+
"used boost": {
|
|
235
|
+
"functionName": "arrow",
|
|
236
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
237
|
+
},
|
|
238
|
+
"level at start": [
|
|
239
|
+
17,
|
|
240
|
+
5,
|
|
241
|
+
6,
|
|
242
|
+
3,
|
|
243
|
+
7,
|
|
244
|
+
8,
|
|
245
|
+
9,
|
|
246
|
+
14,
|
|
247
|
+
8,
|
|
248
|
+
9,
|
|
249
|
+
17,
|
|
250
|
+
9,
|
|
251
|
+
6,
|
|
252
|
+
7,
|
|
253
|
+
7,
|
|
254
|
+
3,
|
|
255
|
+
7,
|
|
256
|
+
16,
|
|
257
|
+
10,
|
|
258
|
+
10,
|
|
259
|
+
12,
|
|
260
|
+
7,
|
|
261
|
+
5,
|
|
262
|
+
7,
|
|
263
|
+
13,
|
|
264
|
+
6,
|
|
265
|
+
8,
|
|
266
|
+
6,
|
|
267
|
+
8,
|
|
268
|
+
9,
|
|
269
|
+
15,
|
|
270
|
+
16,
|
|
271
|
+
7,
|
|
272
|
+
4,
|
|
273
|
+
11,
|
|
274
|
+
12,
|
|
275
|
+
10,
|
|
276
|
+
5,
|
|
277
|
+
5,
|
|
278
|
+
9,
|
|
279
|
+
6,
|
|
280
|
+
11,
|
|
281
|
+
15,
|
|
282
|
+
10,
|
|
283
|
+
5,
|
|
284
|
+
18,
|
|
285
|
+
10,
|
|
286
|
+
5,
|
|
287
|
+
12,
|
|
288
|
+
13
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"event": "complete quest",
|
|
294
|
+
"weight": 12,
|
|
295
|
+
"properties": {
|
|
296
|
+
"completion time (mins)": [
|
|
297
|
+
62,
|
|
298
|
+
79,
|
|
299
|
+
39,
|
|
300
|
+
42,
|
|
301
|
+
33,
|
|
302
|
+
54,
|
|
303
|
+
62,
|
|
304
|
+
63,
|
|
305
|
+
20,
|
|
306
|
+
18,
|
|
307
|
+
29,
|
|
308
|
+
117,
|
|
309
|
+
30,
|
|
310
|
+
38,
|
|
311
|
+
34,
|
|
312
|
+
34,
|
|
313
|
+
31,
|
|
314
|
+
23,
|
|
315
|
+
64,
|
|
316
|
+
41,
|
|
317
|
+
100,
|
|
318
|
+
72,
|
|
319
|
+
46,
|
|
320
|
+
46,
|
|
321
|
+
54,
|
|
322
|
+
54,
|
|
323
|
+
33,
|
|
324
|
+
80,
|
|
325
|
+
75,
|
|
326
|
+
85
|
|
327
|
+
],
|
|
328
|
+
"quest reward (gold)": [
|
|
329
|
+
100,
|
|
330
|
+
111,
|
|
331
|
+
210,
|
|
332
|
+
457,
|
|
333
|
+
439,
|
|
334
|
+
165,
|
|
335
|
+
84,
|
|
336
|
+
122,
|
|
337
|
+
142,
|
|
338
|
+
317,
|
|
339
|
+
170,
|
|
340
|
+
150,
|
|
341
|
+
307,
|
|
342
|
+
318,
|
|
343
|
+
277,
|
|
344
|
+
157,
|
|
345
|
+
287,
|
|
346
|
+
227,
|
|
347
|
+
141,
|
|
348
|
+
439,
|
|
349
|
+
389,
|
|
350
|
+
138,
|
|
351
|
+
394,
|
|
352
|
+
288,
|
|
353
|
+
241,
|
|
354
|
+
235,
|
|
355
|
+
72,
|
|
356
|
+
334,
|
|
357
|
+
130,
|
|
358
|
+
251,
|
|
359
|
+
315,
|
|
360
|
+
223,
|
|
361
|
+
120,
|
|
362
|
+
174,
|
|
363
|
+
195,
|
|
364
|
+
136,
|
|
365
|
+
218,
|
|
366
|
+
256,
|
|
367
|
+
149,
|
|
368
|
+
206,
|
|
369
|
+
231,
|
|
370
|
+
157,
|
|
371
|
+
135,
|
|
372
|
+
97,
|
|
373
|
+
143,
|
|
374
|
+
214,
|
|
375
|
+
269,
|
|
376
|
+
404,
|
|
377
|
+
200,
|
|
378
|
+
95,
|
|
379
|
+
284,
|
|
380
|
+
332,
|
|
381
|
+
371,
|
|
382
|
+
136,
|
|
383
|
+
295,
|
|
384
|
+
51,
|
|
385
|
+
199,
|
|
386
|
+
373,
|
|
387
|
+
193,
|
|
388
|
+
275,
|
|
389
|
+
204,
|
|
390
|
+
155,
|
|
391
|
+
256,
|
|
392
|
+
289,
|
|
393
|
+
411,
|
|
394
|
+
126,
|
|
395
|
+
116,
|
|
396
|
+
184,
|
|
397
|
+
128,
|
|
398
|
+
128,
|
|
399
|
+
281,
|
|
400
|
+
128,
|
|
401
|
+
323,
|
|
402
|
+
429,
|
|
403
|
+
75,
|
|
404
|
+
187,
|
|
405
|
+
138,
|
|
406
|
+
367,
|
|
407
|
+
170,
|
|
408
|
+
85,
|
|
409
|
+
168,
|
|
410
|
+
163,
|
|
411
|
+
137,
|
|
412
|
+
143,
|
|
413
|
+
176,
|
|
414
|
+
250,
|
|
415
|
+
17,
|
|
416
|
+
307,
|
|
417
|
+
192,
|
|
418
|
+
320,
|
|
419
|
+
219,
|
|
420
|
+
255,
|
|
421
|
+
126,
|
|
422
|
+
198,
|
|
423
|
+
429,
|
|
424
|
+
101,
|
|
425
|
+
381,
|
|
426
|
+
342,
|
|
427
|
+
231,
|
|
428
|
+
144
|
|
429
|
+
],
|
|
430
|
+
"quest success": {
|
|
431
|
+
"functionName": "arrow",
|
|
432
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
433
|
+
},
|
|
434
|
+
"used hint": {
|
|
435
|
+
"functionName": "arrow",
|
|
436
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
437
|
+
},
|
|
438
|
+
"used boost": {
|
|
439
|
+
"functionName": "arrow",
|
|
440
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
441
|
+
},
|
|
442
|
+
"number of deaths": [
|
|
443
|
+
1,
|
|
444
|
+
1
|
|
445
|
+
],
|
|
446
|
+
"level at start": [
|
|
447
|
+
14,
|
|
448
|
+
6,
|
|
449
|
+
6,
|
|
450
|
+
8,
|
|
451
|
+
11,
|
|
452
|
+
11,
|
|
453
|
+
5,
|
|
454
|
+
16,
|
|
455
|
+
2,
|
|
456
|
+
7,
|
|
457
|
+
15,
|
|
458
|
+
12,
|
|
459
|
+
4,
|
|
460
|
+
9,
|
|
461
|
+
5,
|
|
462
|
+
11,
|
|
463
|
+
6,
|
|
464
|
+
8,
|
|
465
|
+
6,
|
|
466
|
+
9,
|
|
467
|
+
5,
|
|
468
|
+
14,
|
|
469
|
+
13,
|
|
470
|
+
9,
|
|
471
|
+
14,
|
|
472
|
+
7,
|
|
473
|
+
13,
|
|
474
|
+
9,
|
|
475
|
+
7,
|
|
476
|
+
8,
|
|
477
|
+
10,
|
|
478
|
+
4,
|
|
479
|
+
10,
|
|
480
|
+
11,
|
|
481
|
+
10,
|
|
482
|
+
16,
|
|
483
|
+
12,
|
|
484
|
+
7,
|
|
485
|
+
11,
|
|
486
|
+
6,
|
|
487
|
+
8,
|
|
488
|
+
9,
|
|
489
|
+
7,
|
|
490
|
+
14,
|
|
491
|
+
13,
|
|
492
|
+
4,
|
|
493
|
+
3,
|
|
494
|
+
7,
|
|
495
|
+
17,
|
|
496
|
+
14
|
|
497
|
+
],
|
|
498
|
+
"level at end": [
|
|
499
|
+
7,
|
|
500
|
+
8,
|
|
501
|
+
13,
|
|
502
|
+
8,
|
|
503
|
+
7,
|
|
504
|
+
13,
|
|
505
|
+
8,
|
|
506
|
+
13,
|
|
507
|
+
6,
|
|
508
|
+
7,
|
|
509
|
+
11,
|
|
510
|
+
9,
|
|
511
|
+
7,
|
|
512
|
+
16,
|
|
513
|
+
16,
|
|
514
|
+
6,
|
|
515
|
+
9,
|
|
516
|
+
7,
|
|
517
|
+
6,
|
|
518
|
+
7,
|
|
519
|
+
2,
|
|
520
|
+
14,
|
|
521
|
+
6,
|
|
522
|
+
6,
|
|
523
|
+
7,
|
|
524
|
+
7,
|
|
525
|
+
4,
|
|
526
|
+
8,
|
|
527
|
+
15,
|
|
528
|
+
8,
|
|
529
|
+
13,
|
|
530
|
+
6,
|
|
531
|
+
5,
|
|
532
|
+
5,
|
|
533
|
+
17,
|
|
534
|
+
10,
|
|
535
|
+
6,
|
|
536
|
+
12,
|
|
537
|
+
7,
|
|
538
|
+
1,
|
|
539
|
+
12,
|
|
540
|
+
14,
|
|
541
|
+
13,
|
|
542
|
+
7,
|
|
543
|
+
5,
|
|
544
|
+
7,
|
|
545
|
+
8,
|
|
546
|
+
5,
|
|
547
|
+
10,
|
|
548
|
+
6
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"event": "gameplay summary",
|
|
554
|
+
"weight": 14,
|
|
555
|
+
"properties": {
|
|
556
|
+
"# enemies defeated": [
|
|
557
|
+
29,
|
|
558
|
+
27,
|
|
559
|
+
49,
|
|
560
|
+
14,
|
|
561
|
+
32,
|
|
562
|
+
50,
|
|
563
|
+
60,
|
|
564
|
+
43,
|
|
565
|
+
47,
|
|
566
|
+
11,
|
|
567
|
+
14,
|
|
568
|
+
67,
|
|
569
|
+
74,
|
|
570
|
+
19,
|
|
571
|
+
32,
|
|
572
|
+
2,
|
|
573
|
+
30,
|
|
574
|
+
51,
|
|
575
|
+
24,
|
|
576
|
+
35,
|
|
577
|
+
57,
|
|
578
|
+
22,
|
|
579
|
+
63,
|
|
580
|
+
41,
|
|
581
|
+
68,
|
|
582
|
+
19,
|
|
583
|
+
69,
|
|
584
|
+
22,
|
|
585
|
+
57,
|
|
586
|
+
33,
|
|
587
|
+
65,
|
|
588
|
+
26,
|
|
589
|
+
28,
|
|
590
|
+
22,
|
|
591
|
+
54,
|
|
592
|
+
32,
|
|
593
|
+
28,
|
|
594
|
+
33,
|
|
595
|
+
79,
|
|
596
|
+
34,
|
|
597
|
+
80,
|
|
598
|
+
18,
|
|
599
|
+
12,
|
|
600
|
+
27,
|
|
601
|
+
40,
|
|
602
|
+
27,
|
|
603
|
+
64,
|
|
604
|
+
60,
|
|
605
|
+
42,
|
|
606
|
+
19
|
|
607
|
+
],
|
|
608
|
+
"# respawns": [
|
|
609
|
+
1,
|
|
610
|
+
5,
|
|
611
|
+
4,
|
|
612
|
+
4,
|
|
613
|
+
5,
|
|
614
|
+
5,
|
|
615
|
+
4,
|
|
616
|
+
5,
|
|
617
|
+
4,
|
|
618
|
+
5,
|
|
619
|
+
5,
|
|
620
|
+
2,
|
|
621
|
+
3,
|
|
622
|
+
5,
|
|
623
|
+
2,
|
|
624
|
+
5,
|
|
625
|
+
4,
|
|
626
|
+
7,
|
|
627
|
+
5,
|
|
628
|
+
5,
|
|
629
|
+
5,
|
|
630
|
+
5,
|
|
631
|
+
3,
|
|
632
|
+
5,
|
|
633
|
+
5,
|
|
634
|
+
5,
|
|
635
|
+
5,
|
|
636
|
+
5,
|
|
637
|
+
4,
|
|
638
|
+
7,
|
|
639
|
+
3,
|
|
640
|
+
5,
|
|
641
|
+
4,
|
|
642
|
+
5,
|
|
643
|
+
5,
|
|
644
|
+
5,
|
|
645
|
+
5,
|
|
646
|
+
7,
|
|
647
|
+
5,
|
|
648
|
+
5,
|
|
649
|
+
5,
|
|
650
|
+
0,
|
|
651
|
+
5,
|
|
652
|
+
4,
|
|
653
|
+
4,
|
|
654
|
+
5,
|
|
655
|
+
8,
|
|
656
|
+
4,
|
|
657
|
+
5,
|
|
658
|
+
5
|
|
659
|
+
],
|
|
660
|
+
"# attacks": [
|
|
661
|
+
48,
|
|
662
|
+
50,
|
|
663
|
+
50,
|
|
664
|
+
50,
|
|
665
|
+
50,
|
|
666
|
+
63,
|
|
667
|
+
46,
|
|
668
|
+
50,
|
|
669
|
+
50,
|
|
670
|
+
78,
|
|
671
|
+
50,
|
|
672
|
+
51
|
|
673
|
+
],
|
|
674
|
+
"# gold found": [
|
|
675
|
+
685,
|
|
676
|
+
482,
|
|
677
|
+
844,
|
|
678
|
+
551,
|
|
679
|
+
216,
|
|
680
|
+
453,
|
|
681
|
+
516,
|
|
682
|
+
412,
|
|
683
|
+
494,
|
|
684
|
+
268,
|
|
685
|
+
272,
|
|
686
|
+
553,
|
|
687
|
+
489,
|
|
688
|
+
407,
|
|
689
|
+
365,
|
|
690
|
+
209,
|
|
691
|
+
314,
|
|
692
|
+
60,
|
|
693
|
+
894,
|
|
694
|
+
413,
|
|
695
|
+
312,
|
|
696
|
+
535,
|
|
697
|
+
556,
|
|
698
|
+
504,
|
|
699
|
+
162,
|
|
700
|
+
544,
|
|
701
|
+
231,
|
|
702
|
+
716,
|
|
703
|
+
214,
|
|
704
|
+
770,
|
|
705
|
+
246,
|
|
706
|
+
351,
|
|
707
|
+
400,
|
|
708
|
+
653,
|
|
709
|
+
199,
|
|
710
|
+
671,
|
|
711
|
+
289,
|
|
712
|
+
426,
|
|
713
|
+
241,
|
|
714
|
+
626,
|
|
715
|
+
661,
|
|
716
|
+
423,
|
|
717
|
+
724,
|
|
718
|
+
382,
|
|
719
|
+
249,
|
|
720
|
+
712,
|
|
721
|
+
422,
|
|
722
|
+
277,
|
|
723
|
+
355,
|
|
724
|
+
507
|
|
725
|
+
]
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
"event": "in-game purchase",
|
|
730
|
+
"weight": 2,
|
|
731
|
+
"properties": {
|
|
732
|
+
"purchase type": [
|
|
733
|
+
"Gold",
|
|
734
|
+
"Gems",
|
|
735
|
+
"Items: Weapons",
|
|
736
|
+
"Items: Armor",
|
|
737
|
+
"Items: Potions",
|
|
738
|
+
"Items: Scrolls",
|
|
739
|
+
"Boosts",
|
|
740
|
+
"Currency"
|
|
741
|
+
],
|
|
742
|
+
"purchase amount": [
|
|
743
|
+
31,
|
|
744
|
+
42,
|
|
745
|
+
22,
|
|
746
|
+
3,
|
|
747
|
+
37,
|
|
748
|
+
16,
|
|
749
|
+
12,
|
|
750
|
+
23,
|
|
751
|
+
21,
|
|
752
|
+
26,
|
|
753
|
+
1,
|
|
754
|
+
14,
|
|
755
|
+
24,
|
|
756
|
+
20,
|
|
757
|
+
38,
|
|
758
|
+
31,
|
|
759
|
+
16,
|
|
760
|
+
37,
|
|
761
|
+
30,
|
|
762
|
+
27
|
|
763
|
+
]
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
"event": "fight boss",
|
|
768
|
+
"weight": 3,
|
|
769
|
+
"properties": {
|
|
770
|
+
"boss type": [
|
|
771
|
+
"Dragon",
|
|
772
|
+
"Demon",
|
|
773
|
+
"Lich",
|
|
774
|
+
"Vampire",
|
|
775
|
+
"Beholder"
|
|
776
|
+
],
|
|
777
|
+
"boss level": [
|
|
778
|
+
18,
|
|
779
|
+
14,
|
|
780
|
+
18,
|
|
781
|
+
12,
|
|
782
|
+
19,
|
|
783
|
+
13,
|
|
784
|
+
12,
|
|
785
|
+
14,
|
|
786
|
+
11,
|
|
787
|
+
12,
|
|
788
|
+
15,
|
|
789
|
+
14,
|
|
790
|
+
13,
|
|
791
|
+
12,
|
|
792
|
+
15,
|
|
793
|
+
15,
|
|
794
|
+
15,
|
|
795
|
+
12,
|
|
796
|
+
15,
|
|
797
|
+
17,
|
|
798
|
+
12,
|
|
799
|
+
17,
|
|
800
|
+
17,
|
|
801
|
+
17,
|
|
802
|
+
14,
|
|
803
|
+
11,
|
|
804
|
+
11,
|
|
805
|
+
16,
|
|
806
|
+
17,
|
|
807
|
+
14,
|
|
808
|
+
17,
|
|
809
|
+
14,
|
|
810
|
+
16,
|
|
811
|
+
17,
|
|
812
|
+
15,
|
|
813
|
+
11,
|
|
814
|
+
18,
|
|
815
|
+
14,
|
|
816
|
+
16,
|
|
817
|
+
17,
|
|
818
|
+
18,
|
|
819
|
+
18,
|
|
820
|
+
13,
|
|
821
|
+
11,
|
|
822
|
+
15,
|
|
823
|
+
15,
|
|
824
|
+
12,
|
|
825
|
+
19,
|
|
826
|
+
15,
|
|
827
|
+
14
|
|
828
|
+
],
|
|
829
|
+
"boss difficulty": [
|
|
830
|
+
"Hard",
|
|
831
|
+
"Legendary",
|
|
832
|
+
"Impossible"
|
|
833
|
+
],
|
|
834
|
+
"fight duration (mins)": [
|
|
835
|
+
31,
|
|
836
|
+
14,
|
|
837
|
+
34,
|
|
838
|
+
32,
|
|
839
|
+
15,
|
|
840
|
+
19,
|
|
841
|
+
34,
|
|
842
|
+
11,
|
|
843
|
+
21,
|
|
844
|
+
15,
|
|
845
|
+
13,
|
|
846
|
+
44,
|
|
847
|
+
31,
|
|
848
|
+
36,
|
|
849
|
+
27,
|
|
850
|
+
37,
|
|
851
|
+
19,
|
|
852
|
+
38,
|
|
853
|
+
29,
|
|
854
|
+
15,
|
|
855
|
+
44,
|
|
856
|
+
39,
|
|
857
|
+
16,
|
|
858
|
+
26,
|
|
859
|
+
11,
|
|
860
|
+
33,
|
|
861
|
+
24,
|
|
862
|
+
23,
|
|
863
|
+
21,
|
|
864
|
+
21,
|
|
865
|
+
28,
|
|
866
|
+
35,
|
|
867
|
+
13,
|
|
868
|
+
42,
|
|
869
|
+
57,
|
|
870
|
+
31,
|
|
871
|
+
18,
|
|
872
|
+
8,
|
|
873
|
+
12,
|
|
874
|
+
31,
|
|
875
|
+
20,
|
|
876
|
+
29,
|
|
877
|
+
40,
|
|
878
|
+
29,
|
|
879
|
+
36,
|
|
880
|
+
22,
|
|
881
|
+
23,
|
|
882
|
+
22,
|
|
883
|
+
47,
|
|
884
|
+
15
|
|
885
|
+
]
|
|
886
|
+
}
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
"event": "level up",
|
|
890
|
+
"weight": 1,
|
|
891
|
+
"properties": {
|
|
892
|
+
"new abilities": [
|
|
893
|
+
"Attack",
|
|
894
|
+
"Spell",
|
|
895
|
+
"Feat",
|
|
896
|
+
"Skill"
|
|
897
|
+
]
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
"event": "attack",
|
|
902
|
+
"weight": 5,
|
|
903
|
+
"properties": {
|
|
904
|
+
"generic_prop": [
|
|
905
|
+
"foo",
|
|
906
|
+
"bar",
|
|
907
|
+
"baz",
|
|
908
|
+
"qux"
|
|
909
|
+
]
|
|
910
|
+
}
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
"event": "defend",
|
|
914
|
+
"weight": 3,
|
|
915
|
+
"properties": {
|
|
916
|
+
"generic_prop": [
|
|
917
|
+
"foo",
|
|
918
|
+
"bar",
|
|
919
|
+
"baz",
|
|
920
|
+
"qux"
|
|
921
|
+
]
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
],
|
|
925
|
+
"superProps": {
|
|
926
|
+
"platform": [
|
|
927
|
+
"Mobile",
|
|
928
|
+
"Xbox",
|
|
929
|
+
"Playstation",
|
|
930
|
+
"Switch",
|
|
931
|
+
"Web"
|
|
932
|
+
],
|
|
933
|
+
"game mode": {
|
|
934
|
+
"functionName": "arrow",
|
|
935
|
+
"body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
|
|
936
|
+
},
|
|
937
|
+
"language": [
|
|
938
|
+
"English",
|
|
939
|
+
"Spanish",
|
|
940
|
+
"French",
|
|
941
|
+
"German",
|
|
942
|
+
"Japanese",
|
|
943
|
+
"Korean",
|
|
944
|
+
"Chinese"
|
|
945
|
+
]
|
|
946
|
+
},
|
|
947
|
+
"scdProps": {},
|
|
948
|
+
"userProps": {
|
|
949
|
+
"experiment": [
|
|
950
|
+
"fast leveling",
|
|
951
|
+
"tension economy",
|
|
952
|
+
"free trial"
|
|
953
|
+
],
|
|
954
|
+
"variant": [
|
|
955
|
+
"A",
|
|
956
|
+
"B",
|
|
957
|
+
"C",
|
|
958
|
+
"Control"
|
|
959
|
+
],
|
|
960
|
+
"race": [
|
|
961
|
+
"Human",
|
|
962
|
+
"Elf",
|
|
963
|
+
"Dwarf",
|
|
964
|
+
"Halfling",
|
|
965
|
+
"Dragonborn",
|
|
966
|
+
"Gnome",
|
|
967
|
+
"Half-Elf",
|
|
968
|
+
"Half-Orc",
|
|
969
|
+
"Tiefling"
|
|
970
|
+
],
|
|
971
|
+
"class": [
|
|
972
|
+
"Barbarian",
|
|
973
|
+
"Bard",
|
|
974
|
+
"Cleric",
|
|
975
|
+
"Druid",
|
|
976
|
+
"Fighter",
|
|
977
|
+
"Monk",
|
|
978
|
+
"Paladin",
|
|
979
|
+
"Ranger",
|
|
980
|
+
"Rogue",
|
|
981
|
+
"Sorcerer",
|
|
982
|
+
"Warlock",
|
|
983
|
+
"Wizard"
|
|
984
|
+
],
|
|
985
|
+
"alignment": [
|
|
986
|
+
"Lawful Good",
|
|
987
|
+
"Neutral Good",
|
|
988
|
+
"Chaotic Good",
|
|
989
|
+
"Lawful Neutral",
|
|
990
|
+
"True Neutral",
|
|
991
|
+
"Chaotic Neutral",
|
|
992
|
+
"Lawful Evil",
|
|
993
|
+
"Neutral Evil",
|
|
994
|
+
"Chaotic Evil"
|
|
995
|
+
],
|
|
996
|
+
"level": [
|
|
997
|
+
13,
|
|
998
|
+
13,
|
|
999
|
+
8,
|
|
1000
|
+
6,
|
|
1001
|
+
7,
|
|
1002
|
+
10,
|
|
1003
|
+
9,
|
|
1004
|
+
8,
|
|
1005
|
+
5,
|
|
1006
|
+
8,
|
|
1007
|
+
3,
|
|
1008
|
+
5,
|
|
1009
|
+
11,
|
|
1010
|
+
4,
|
|
1011
|
+
9,
|
|
1012
|
+
6,
|
|
1013
|
+
6,
|
|
1014
|
+
16,
|
|
1015
|
+
10,
|
|
1016
|
+
14,
|
|
1017
|
+
8,
|
|
1018
|
+
4,
|
|
1019
|
+
11,
|
|
1020
|
+
7,
|
|
1021
|
+
5,
|
|
1022
|
+
8,
|
|
1023
|
+
9,
|
|
1024
|
+
7,
|
|
1025
|
+
5,
|
|
1026
|
+
8,
|
|
1027
|
+
11,
|
|
1028
|
+
11,
|
|
1029
|
+
10,
|
|
1030
|
+
5,
|
|
1031
|
+
2,
|
|
1032
|
+
7,
|
|
1033
|
+
6,
|
|
1034
|
+
7,
|
|
1035
|
+
3,
|
|
1036
|
+
13,
|
|
1037
|
+
14,
|
|
1038
|
+
4,
|
|
1039
|
+
12,
|
|
1040
|
+
14,
|
|
1041
|
+
9,
|
|
1042
|
+
3,
|
|
1043
|
+
8,
|
|
1044
|
+
3,
|
|
1045
|
+
11,
|
|
1046
|
+
6
|
|
1047
|
+
],
|
|
1048
|
+
"background": [
|
|
1049
|
+
"Acolyte",
|
|
1050
|
+
"Charlatan",
|
|
1051
|
+
"Criminal",
|
|
1052
|
+
"Entertainer",
|
|
1053
|
+
"Folk Hero",
|
|
1054
|
+
"Guild Artisan",
|
|
1055
|
+
"Hermit",
|
|
1056
|
+
"Noble",
|
|
1057
|
+
"Outlander",
|
|
1058
|
+
"Sage",
|
|
1059
|
+
"Sailor",
|
|
1060
|
+
"Soldier",
|
|
1061
|
+
"Urchin"
|
|
1062
|
+
],
|
|
1063
|
+
"subscription MRR": [
|
|
1064
|
+
143,
|
|
1065
|
+
84,
|
|
1066
|
+
97,
|
|
1067
|
+
56,
|
|
1068
|
+
117,
|
|
1069
|
+
66,
|
|
1070
|
+
92,
|
|
1071
|
+
49,
|
|
1072
|
+
33,
|
|
1073
|
+
16,
|
|
1074
|
+
112,
|
|
1075
|
+
147,
|
|
1076
|
+
89,
|
|
1077
|
+
78,
|
|
1078
|
+
64,
|
|
1079
|
+
157,
|
|
1080
|
+
139,
|
|
1081
|
+
199,
|
|
1082
|
+
91,
|
|
1083
|
+
155,
|
|
1084
|
+
35,
|
|
1085
|
+
109,
|
|
1086
|
+
102,
|
|
1087
|
+
94,
|
|
1088
|
+
40,
|
|
1089
|
+
164,
|
|
1090
|
+
161,
|
|
1091
|
+
45,
|
|
1092
|
+
195,
|
|
1093
|
+
62,
|
|
1094
|
+
161,
|
|
1095
|
+
149,
|
|
1096
|
+
144,
|
|
1097
|
+
224,
|
|
1098
|
+
215,
|
|
1099
|
+
54,
|
|
1100
|
+
98,
|
|
1101
|
+
36,
|
|
1102
|
+
67,
|
|
1103
|
+
98,
|
|
1104
|
+
187,
|
|
1105
|
+
72,
|
|
1106
|
+
74,
|
|
1107
|
+
136,
|
|
1108
|
+
85,
|
|
1109
|
+
42,
|
|
1110
|
+
122,
|
|
1111
|
+
93,
|
|
1112
|
+
91,
|
|
1113
|
+
83,
|
|
1114
|
+
99,
|
|
1115
|
+
94,
|
|
1116
|
+
87,
|
|
1117
|
+
123,
|
|
1118
|
+
89,
|
|
1119
|
+
72,
|
|
1120
|
+
99,
|
|
1121
|
+
36,
|
|
1122
|
+
82,
|
|
1123
|
+
140,
|
|
1124
|
+
189,
|
|
1125
|
+
122,
|
|
1126
|
+
122,
|
|
1127
|
+
54,
|
|
1128
|
+
97,
|
|
1129
|
+
62,
|
|
1130
|
+
125,
|
|
1131
|
+
114,
|
|
1132
|
+
155,
|
|
1133
|
+
106,
|
|
1134
|
+
169,
|
|
1135
|
+
153,
|
|
1136
|
+
47,
|
|
1137
|
+
79,
|
|
1138
|
+
80,
|
|
1139
|
+
211,
|
|
1140
|
+
103,
|
|
1141
|
+
59,
|
|
1142
|
+
88,
|
|
1143
|
+
165,
|
|
1144
|
+
102,
|
|
1145
|
+
196,
|
|
1146
|
+
206,
|
|
1147
|
+
184,
|
|
1148
|
+
222,
|
|
1149
|
+
148,
|
|
1150
|
+
117,
|
|
1151
|
+
126,
|
|
1152
|
+
163,
|
|
1153
|
+
110,
|
|
1154
|
+
236,
|
|
1155
|
+
99,
|
|
1156
|
+
135,
|
|
1157
|
+
103,
|
|
1158
|
+
45,
|
|
1159
|
+
218,
|
|
1160
|
+
76,
|
|
1161
|
+
188,
|
|
1162
|
+
160,
|
|
1163
|
+
120,
|
|
1164
|
+
129,
|
|
1165
|
+
59,
|
|
1166
|
+
69,
|
|
1167
|
+
59,
|
|
1168
|
+
132,
|
|
1169
|
+
90,
|
|
1170
|
+
38,
|
|
1171
|
+
31,
|
|
1172
|
+
78,
|
|
1173
|
+
246,
|
|
1174
|
+
150,
|
|
1175
|
+
68,
|
|
1176
|
+
158,
|
|
1177
|
+
23,
|
|
1178
|
+
125,
|
|
1179
|
+
77,
|
|
1180
|
+
27,
|
|
1181
|
+
78,
|
|
1182
|
+
51,
|
|
1183
|
+
85,
|
|
1184
|
+
53,
|
|
1185
|
+
106,
|
|
1186
|
+
113,
|
|
1187
|
+
80,
|
|
1188
|
+
153,
|
|
1189
|
+
184,
|
|
1190
|
+
61,
|
|
1191
|
+
46,
|
|
1192
|
+
244,
|
|
1193
|
+
39,
|
|
1194
|
+
152,
|
|
1195
|
+
103,
|
|
1196
|
+
125,
|
|
1197
|
+
147,
|
|
1198
|
+
135,
|
|
1199
|
+
142,
|
|
1200
|
+
74,
|
|
1201
|
+
35,
|
|
1202
|
+
97,
|
|
1203
|
+
197,
|
|
1204
|
+
112,
|
|
1205
|
+
128,
|
|
1206
|
+
84,
|
|
1207
|
+
83,
|
|
1208
|
+
91,
|
|
1209
|
+
158,
|
|
1210
|
+
57,
|
|
1211
|
+
123,
|
|
1212
|
+
47,
|
|
1213
|
+
155,
|
|
1214
|
+
102,
|
|
1215
|
+
175,
|
|
1216
|
+
82,
|
|
1217
|
+
60,
|
|
1218
|
+
98,
|
|
1219
|
+
109,
|
|
1220
|
+
138,
|
|
1221
|
+
56,
|
|
1222
|
+
171,
|
|
1223
|
+
84,
|
|
1224
|
+
109,
|
|
1225
|
+
100,
|
|
1226
|
+
65,
|
|
1227
|
+
78,
|
|
1228
|
+
98,
|
|
1229
|
+
117,
|
|
1230
|
+
19,
|
|
1231
|
+
157,
|
|
1232
|
+
80,
|
|
1233
|
+
201,
|
|
1234
|
+
200,
|
|
1235
|
+
64,
|
|
1236
|
+
100,
|
|
1237
|
+
46,
|
|
1238
|
+
155,
|
|
1239
|
+
115,
|
|
1240
|
+
73,
|
|
1241
|
+
94,
|
|
1242
|
+
147,
|
|
1243
|
+
114,
|
|
1244
|
+
14,
|
|
1245
|
+
74,
|
|
1246
|
+
183,
|
|
1247
|
+
31,
|
|
1248
|
+
232,
|
|
1249
|
+
103,
|
|
1250
|
+
95,
|
|
1251
|
+
118,
|
|
1252
|
+
68,
|
|
1253
|
+
114,
|
|
1254
|
+
40,
|
|
1255
|
+
65,
|
|
1256
|
+
150,
|
|
1257
|
+
170,
|
|
1258
|
+
191,
|
|
1259
|
+
91,
|
|
1260
|
+
87,
|
|
1261
|
+
187,
|
|
1262
|
+
87,
|
|
1263
|
+
132
|
|
1264
|
+
]
|
|
1265
|
+
}
|
|
1266
|
+
},
|
|
1267
|
+
"hooks": "function (record, type, meta) {\n\n\t\tif (type === \"event\") {\n\t\t\t// Pattern 1: Higher-level players earn more gold and defeat more enemies\n\t\t\tif (record.event === \"complete quest\") {\n\t\t\t\tconst level = record[\"level at end\"] || 1;\n\t\t\t\trecord[\"quest reward (gold)\"] = Math.round((record[\"quest reward (gold)\"] || 50) * (1 + level * 0.1));\n\t\t\t}\n\n\t\t\t// Pattern 2: In-game purchases are bigger for \"free trial\" experiment users\n\t\t\tif (record.event === \"in-game purchase\") {\n\t\t\t\t// We don't have profile here, so use a hash-based approach\n\t\t\t\tconst uid = record.user_id || record.distinct_id || \"\";\n\t\t\t\tif (uid.charCodeAt(0) % 3 === 0) {\n\t\t\t\t\trecord[\"purchase amount\"] = Math.round((record[\"purchase amount\"] || 10) * 1.8);\n\t\t\t\t\trecord.is_whale = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (type === \"user\") {\n\t\t\t// Pattern 3: Chaotic Evil players get a \"villain\" tag; Lawful Good get \"hero\"\n\t\t\tif (record.alignment === \"Chaotic Evil\" || record.alignment === \"Neutral Evil\") {\n\t\t\t\trecord.archetype = \"villain\";\n\t\t\t} else if (record.alignment === \"Lawful Good\" || record.alignment === \"Neutral Good\") {\n\t\t\t\trecord.archetype = \"hero\";\n\t\t\t} else {\n\t\t\t\trecord.archetype = \"neutral\";\n\t\t\t}\n\t\t}\n\n\t\tif (type === \"funnel-post\") {\n\n\t\t}\n\n\t\tif (type === \"funnel-pre\") {\n\n\t\t}\n\n\t\tif (type === \"scd\") {\n\n\t\t}\n\n\t\tif (type === \"everything\") {\n\n\t\t}\n\n\t\treturn record;\n\t}",
|
|
1268
|
+
"timestamp": "2026-04-10T01:39:07.110Z",
|
|
1269
|
+
"version": "4.0"
|
|
1270
|
+
}
|