make-mp-data 3.0.2 → 3.0.4

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.
Files changed (47) hide show
  1. package/dungeons/adspend.js +13 -26
  2. package/dungeons/anon.js +1 -1
  3. package/dungeons/array-of-object-lookup.js +1 -2
  4. package/dungeons/benchmark-heavy.js +5 -6
  5. package/dungeons/benchmark-light.js +13 -28
  6. package/dungeons/big.js +3 -3
  7. package/dungeons/business.js +11 -12
  8. package/dungeons/complex.js +1 -2
  9. package/dungeons/copilot.js +8 -6
  10. package/dungeons/education.js +21 -22
  11. package/dungeons/experiments.js +4 -5
  12. package/dungeons/fintech.js +25 -26
  13. package/dungeons/foobar.js +1 -1
  14. package/dungeons/food.js +24 -25
  15. package/dungeons/funnels.js +2 -2
  16. package/dungeons/gaming.js +39 -40
  17. package/dungeons/media.js +30 -31
  18. package/dungeons/mil.js +17 -18
  19. package/dungeons/mirror.js +2 -3
  20. package/dungeons/retention-cadence.js +1 -2
  21. package/dungeons/rpg.js +42 -43
  22. package/dungeons/sanity.js +1 -2
  23. package/dungeons/sass.js +32 -33
  24. package/dungeons/scd.js +3 -4
  25. package/dungeons/simple.js +13 -14
  26. package/dungeons/social.js +27 -28
  27. package/dungeons/soup-test.js +52 -0
  28. package/dungeons/streaming.js +17 -18
  29. package/dungeons/student-teacher.js +0 -1
  30. package/dungeons/text-generation.js +0 -1
  31. package/dungeons/user-agent.js +1 -2
  32. package/index.js +18 -6
  33. package/lib/core/config-validator.js +22 -33
  34. package/lib/core/context.js +6 -3
  35. package/lib/generators/events.js +13 -10
  36. package/lib/generators/funnels.js +7 -4
  37. package/lib/generators/scd.js +29 -17
  38. package/lib/generators/text.js +18 -12
  39. package/lib/orchestrators/mixpanel-sender.js +26 -38
  40. package/lib/orchestrators/user-loop.js +68 -15
  41. package/lib/templates/phrases.js +8 -5
  42. package/lib/utils/function-registry.js +17 -0
  43. package/lib/utils/utils.js +15 -84
  44. package/package.json +3 -1
  45. package/types.d.ts +86 -19
  46. package/lib/templates/verbose-schema.js +0 -272
  47. package/lib/utils/chart.js +0 -210
package/dungeons/media.js CHANGED
@@ -91,9 +91,8 @@ const config = {
91
91
  hasAdSpend: false,
92
92
  percentUsersBornInDataset: 50,
93
93
  hasAvatar: true,
94
- makeChart: false,
95
94
  batchSize: 2_500_000,
96
- concurrency: 10,
95
+ concurrency: 1,
97
96
  writeToDisk: false,
98
97
 
99
98
  funnels: [
@@ -167,24 +166,24 @@ const config = {
167
166
  weight: 1,
168
167
  isFirstEvent: true,
169
168
  properties: {
170
- "signup_source": u.pickAWinner(["organic", "referral", "trial_offer", "ad"]),
171
- "plan_selected": u.pickAWinner(["free", "standard", "premium"]),
169
+ "signup_source": ["organic", "referral", "trial_offer", "ad"],
170
+ "plan_selected": ["free", "standard", "premium"],
172
171
  }
173
172
  },
174
173
  {
175
174
  event: "content browsed",
176
175
  weight: 20,
177
176
  properties: {
178
- "browse_section": u.pickAWinner(["home", "trending", "new_releases", "genre", "continue_watching"]),
179
- "genre": u.pickAWinner(["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"]),
177
+ "browse_section": ["home", "trending", "new_releases", "genre", "continue_watching"],
178
+ "genre": ["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"],
180
179
  }
181
180
  },
182
181
  {
183
182
  event: "content selected",
184
183
  weight: 15,
185
184
  properties: {
186
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
187
- "genre": u.pickAWinner(["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"]),
185
+ "content_type": ["movie", "series", "documentary", "special"],
186
+ "genre": ["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"],
188
187
  "content_id": u.pickAWinner(contentIds),
189
188
  }
190
189
  },
@@ -193,9 +192,9 @@ const config = {
193
192
  weight: 18,
194
193
  properties: {
195
194
  "content_id": u.pickAWinner(contentIds),
196
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
197
- "playback_quality": u.pickAWinner(["480p", "720p", "1080p", "4k"]),
198
- "subtitle_language": u.pickAWinner(["none", "english", "spanish", "french", "japanese", "korean"], 0),
195
+ "content_type": ["movie", "series", "documentary", "special"],
196
+ "playback_quality": ["480p", "720p", "1080p", "4k"],
197
+ "subtitle_language": ["none", "english", "spanish", "french", "japanese", "korean"],
199
198
  "playback_speed": u.pickAWinner(["0.5x", "1x", "1x", "1x", "1.25x", "1.5x", "2x"]),
200
199
  }
201
200
  },
@@ -204,7 +203,7 @@ const config = {
204
203
  weight: 12,
205
204
  properties: {
206
205
  "content_id": u.pickAWinner(contentIds),
207
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
206
+ "content_type": ["movie", "series", "documentary", "special"],
208
207
  "watch_duration_min": u.weighNumRange(5, 180, 0.5, 45),
209
208
  "completion_percent": u.weighNumRange(10, 100, 1.5, 85),
210
209
  }
@@ -214,7 +213,7 @@ const config = {
214
213
  weight: 10,
215
214
  properties: {
216
215
  "content_id": u.pickAWinner(contentIds),
217
- "pause_reason": u.pickAWinner(["manual", "ad_break", "buffering", "notification"]),
216
+ "pause_reason": ["manual", "ad_break", "buffering", "notification"],
218
217
  }
219
218
  },
220
219
  {
@@ -231,8 +230,8 @@ const config = {
231
230
  weight: 8,
232
231
  properties: {
233
232
  "content_id": u.pickAWinner(contentIds),
234
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
235
- "genre": u.pickAWinner(["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"]),
233
+ "content_type": ["movie", "series", "documentary", "special"],
234
+ "genre": ["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation", "thriller", "romance"],
236
235
  }
237
236
  },
238
237
  {
@@ -240,7 +239,7 @@ const config = {
240
239
  weight: 3,
241
240
  properties: {
242
241
  "content_id": u.pickAWinner(contentIds),
243
- "reason": u.pickAWinner(["watched", "not_interested", "expired"]),
242
+ "reason": ["watched", "not_interested", "expired"],
244
243
  }
245
244
  },
246
245
  {
@@ -249,14 +248,14 @@ const config = {
249
248
  properties: {
250
249
  "search_term": () => chance.word(),
251
250
  "results_count": u.weighNumRange(0, 50, 0.5, 15),
252
- "search_type": u.pickAWinner(["title", "actor", "director", "genre"]),
251
+ "search_type": ["title", "actor", "director", "genre"],
253
252
  }
254
253
  },
255
254
  {
256
255
  event: "recommendation clicked",
257
256
  weight: 9,
258
257
  properties: {
259
- "algorithm": u.pickAWinner(["collaborative_filtering", "content_based", "trending", "editorial"]),
258
+ "algorithm": ["collaborative_filtering", "content_based", "trending", "editorial"],
260
259
  "position": u.weighNumRange(1, 20),
261
260
  }
262
261
  },
@@ -264,14 +263,14 @@ const config = {
264
263
  event: "profile switched",
265
264
  weight: 4,
266
265
  properties: {
267
- "profile_type": u.pickAWinner(["main", "kids", "partner", "guest"]),
266
+ "profile_type": ["main", "kids", "partner", "guest"],
268
267
  }
269
268
  },
270
269
  {
271
270
  event: "ad impression",
272
271
  weight: 8,
273
272
  properties: {
274
- "ad_type": u.pickAWinner(["pre_roll", "mid_roll", "banner", "interstitial"]),
273
+ "ad_type": ["pre_roll", "mid_roll", "banner", "interstitial"],
275
274
  "ad_duration_sec": u.weighNumRange(5, 30),
276
275
  "skipped": u.pickAWinner([true, false], 0.4),
277
276
  }
@@ -280,9 +279,9 @@ const config = {
280
279
  event: "subscription changed",
281
280
  weight: 2,
282
281
  properties: {
283
- "old_plan": u.pickAWinner(["free", "standard", "premium"]),
284
- "new_plan": u.pickAWinner(["free", "standard", "premium"]),
285
- "change_reason": u.pickAWinner(["upgrade", "downgrade", "cancel", "resubscribe"]),
282
+ "old_plan": ["free", "standard", "premium"],
283
+ "new_plan": ["free", "standard", "premium"],
284
+ "change_reason": ["upgrade", "downgrade", "cancel", "resubscribe"],
286
285
  }
287
286
  },
288
287
  {
@@ -290,37 +289,37 @@ const config = {
290
289
  weight: 5,
291
290
  properties: {
292
291
  "content_id": u.pickAWinner(contentIds),
293
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
294
- "download_quality": u.pickAWinner(["720p", "1080p", "4k"]),
292
+ "content_type": ["movie", "series", "documentary", "special"],
293
+ "download_quality": ["720p", "1080p", "4k"],
295
294
  }
296
295
  },
297
296
  {
298
297
  event: "share content",
299
298
  weight: 3,
300
299
  properties: {
301
- "share_method": u.pickAWinner(["link", "social", "dm", "email"]),
302
- "content_type": u.pickAWinner(["movie", "series", "documentary", "special"]),
300
+ "share_method": ["link", "social", "dm", "email"],
301
+ "content_type": ["movie", "series", "documentary", "special"],
303
302
  }
304
303
  },
305
304
  {
306
305
  event: "subtitle toggled",
307
306
  weight: 4,
308
307
  properties: {
309
- "subtitle_language": u.pickAWinner(["none", "english", "spanish", "french", "japanese", "korean"], 0),
310
- "action": u.pickAWinner(["enabled", "disabled", "changed"]),
308
+ "subtitle_language": ["none", "english", "spanish", "french", "japanese", "korean"],
309
+ "action": ["enabled", "disabled", "changed"],
311
310
  }
312
311
  },
313
312
  ],
314
313
 
315
314
  superProps: {
316
315
  subscription_plan: u.pickAWinner(["free", "free", "standard", "standard", "standard", "premium"]),
317
- device_type: u.pickAWinner(["smart_tv", "mobile", "tablet", "laptop", "desktop"]),
316
+ device_type: ["smart_tv", "mobile", "tablet", "laptop", "desktop"],
318
317
  },
319
318
 
320
319
  scdProps: {},
321
320
 
322
321
  userProps: {
323
- "preferred_genre": u.pickAWinner(["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation"]),
322
+ "preferred_genre": ["action", "comedy", "drama", "documentary", "horror", "sci_fi", "animation"],
324
323
  "avg_session_duration_min": u.weighNumRange(10, 180, 0.5, 45),
325
324
  "total_watch_hours": u.weighNumRange(0, 500, 0.8, 50),
326
325
  "profiles_count": u.weighNumRange(1, 5),
package/dungeons/mil.js CHANGED
@@ -44,10 +44,9 @@ const config = {
44
44
  hasAdSpend: false,
45
45
 
46
46
  hasAvatar: false,
47
- makeChart: false,
48
47
 
49
48
  batchSize: 2_500_000,
50
- concurrency: 10,
49
+ concurrency: 1,
51
50
  writeToDisk: false,
52
51
 
53
52
  funnels: [],
@@ -66,7 +65,7 @@ const config = {
66
65
  ]),
67
66
  "watch time": u.weighNumRange(1, 65, .89, 100),
68
67
 
69
- "category": u.pickAWinner([
68
+ "category": [
70
69
  "comedy",
71
70
  "educational",
72
71
  "music",
@@ -74,15 +73,15 @@ const config = {
74
73
  "news",
75
74
  "gaming",
76
75
  "travel",
77
- ]),
78
- quality: u.pickAWinner([
76
+ ],
77
+ quality: [
79
78
  "240p",
80
79
  "360p",
81
80
  "480p",
82
81
  "720p",
83
82
  "1080p",
84
83
  "4k",
85
- ], 4),
84
+ ],
86
85
  autoplay: [
87
86
  true,
88
87
  false,
@@ -121,13 +120,13 @@ const config = {
121
120
  weight: 3,
122
121
  properties: {
123
122
  video_id: u.pickAWinner(videoIds),
124
- "share network": u.pickAWinner([
123
+ "share network": [
125
124
  "facebook",
126
125
  "twitter",
127
126
  "reddit",
128
127
  "email",
129
128
  "whatsapp",
130
- ]),
129
+ ],
131
130
  },
132
131
  },
133
132
  {
@@ -175,18 +174,18 @@ const config = {
175
174
  event: "create playlist",
176
175
  weight: 4,
177
176
  properties: {
178
- "play list name": u.pickAWinner([
177
+ "play list name": [
179
178
  "favorites",
180
179
  "watch later",
181
180
  "my music",
182
181
  "funny videos",
183
182
  "educational",
184
- ]),
185
- privacy: u.pickAWinner([
183
+ ],
184
+ privacy: [
186
185
  "public",
187
186
  "private",
188
187
  "unlisted",
189
- ]),
188
+ ],
190
189
  },
191
190
  },
192
191
  {
@@ -205,11 +204,11 @@ const config = {
205
204
  event: "account login",
206
205
  weight: 9,
207
206
  properties: {
208
- "log in method": u.pickAWinner([
207
+ "log in method": [
209
208
  "email",
210
209
  "google",
211
210
  "facebook",
212
- ]),
211
+ ],
213
212
  success: [
214
213
  true,
215
214
  false,
@@ -233,11 +232,11 @@ const config = {
233
232
  }
234
233
  ],
235
234
  superProps: {
236
- platform: u.pickAWinner([
235
+ platform: [
237
236
  "web",
238
237
  "ios",
239
238
  "android",
240
- ]),
239
+ ],
241
240
  network_type: [
242
241
  "wifi",
243
242
  "cellular",
@@ -257,13 +256,13 @@ const config = {
257
256
  "45-54",
258
257
  "55+",
259
258
  ],
260
- preferred_genre: u.pickAWinner([
259
+ preferred_genre: [
261
260
  "comedy",
262
261
  "action",
263
262
  "drama",
264
263
  "sci-fi",
265
264
  "horror",
266
- ]),
265
+ ],
267
266
  upload_count: [
268
267
  0,
269
268
  1,
@@ -14,7 +14,7 @@ import dayjs from "dayjs";
14
14
  import utc from "dayjs/plugin/utc.js";
15
15
  dayjs.extend(utc);
16
16
  import { uid, comma } from 'ak-tools';
17
- import { pickAWinner, weighNumRange, date, integer } from "../lib/utils/utils.js";
17
+ import { weighNumRange, date, integer } from "../lib/utils/utils.js";
18
18
 
19
19
 
20
20
  /** @type {import('../types').Dungeon} */
@@ -114,8 +114,7 @@ const config = {
114
114
  events: "*",
115
115
  strategy: "update",
116
116
  values: weighNumRange(11, 20)
117
- },
118
- },
117
+ } },
119
118
  groupKeys: [],
120
119
  groupProps: {},
121
120
  lookupTables: [],
@@ -85,9 +85,8 @@ const config = {
85
85
  isAnonymous: false,
86
86
  hasAdSpend: false,
87
87
  hasAvatar: false,
88
- makeChart: false,
89
88
  batchSize: 5_500_000,
90
- concurrency: 10,
89
+ concurrency: 1,
91
90
  writeToDisk: false,
92
91
  percentUsersBornInDataset: 100,
93
92
 
package/dungeons/rpg.js CHANGED
@@ -131,10 +131,9 @@ const config = {
131
131
  percentUsersBornInDataset: 50,
132
132
 
133
133
  hasAvatar: true,
134
- makeChart: false,
135
134
 
136
135
  batchSize: 2_500_000,
137
- concurrency: 10,
136
+ concurrency: 1,
138
137
  writeToDisk: false,
139
138
 
140
139
  funnels: [
@@ -159,7 +158,7 @@ const config = {
159
158
  weight: 4,
160
159
  props: {
161
160
  "dungeon_id": u.pickAWinner(dungeonIds),
162
- "difficulty": u.pickAWinner(["Easy", "Medium", "Hard", "Deadly"]),
161
+ "difficulty": ["Easy", "Medium", "Hard", "Deadly"],
163
162
  }
164
163
  },
165
164
  {
@@ -199,21 +198,21 @@ const config = {
199
198
  weight: 1,
200
199
  isFirstEvent: true,
201
200
  properties: {
202
- "character_class": u.pickAWinner([
201
+ "character_class": [
203
202
  "Warrior",
204
203
  "Mage",
205
204
  "Rogue",
206
205
  "Cleric",
207
206
  "Ranger",
208
207
  "Paladin"
209
- ]),
210
- "starting_race": u.pickAWinner([
208
+ ],
209
+ "starting_race": [
211
210
  "Human",
212
211
  "Elf",
213
212
  "Dwarf",
214
213
  "Halfling",
215
214
  "Orc"
216
- ]),
215
+ ],
217
216
  }
218
217
  },
219
218
  {
@@ -229,13 +228,13 @@ const config = {
229
228
  weight: 15,
230
229
  properties: {
231
230
  "quest_id": u.pickAWinner(questIds),
232
- "quest_type": u.pickAWinner([
231
+ "quest_type": [
233
232
  "Main Story",
234
233
  "Side Quest",
235
234
  "Bounty",
236
235
  "Exploration",
237
236
  "Escort"
238
- ]),
237
+ ],
239
238
  "recommended_level": u.weighNumRange(1, 50),
240
239
  }
241
240
  },
@@ -261,7 +260,7 @@ const config = {
261
260
  weight: 18,
262
261
  properties: {
263
262
  "dungeon_id": u.pickAWinner(dungeonIds),
264
- "difficulty": u.pickAWinner(["Easy", "Medium", "Hard", "Deadly"]),
263
+ "difficulty": ["Easy", "Medium", "Hard", "Deadly"],
265
264
  "party_size": u.weighNumRange(1, 5),
266
265
  }
267
266
  },
@@ -271,21 +270,21 @@ const config = {
271
270
  properties: {
272
271
  "dungeon_id": u.pickAWinner(dungeonIds),
273
272
  "time_spent_mins": u.weighNumRange(5, 120, 0.6, 30),
274
- "completion_status": u.pickAWinner(["completed", "abandoned", "died"]),
273
+ "completion_status": ["completed", "abandoned", "died"],
275
274
  }
276
275
  },
277
276
  {
278
277
  event: "find treasure",
279
278
  weight: 16,
280
279
  properties: {
281
- "treasure_type": u.pickAWinner([
280
+ "treasure_type": [
282
281
  "Gold",
283
282
  "Weapon",
284
283
  "Armor",
285
284
  "Potion",
286
285
  "Scroll",
287
286
  "Rare Artifact"
288
- ]),
287
+ ],
289
288
  "treasure_value": u.weighNumRange(5, 1000, 1.2, 50),
290
289
  }
291
290
  },
@@ -293,13 +292,13 @@ const config = {
293
292
  event: "player death",
294
293
  weight: 8,
295
294
  properties: {
296
- "cause_of_death": u.pickAWinner([
295
+ "cause_of_death": [
297
296
  "Monster",
298
297
  "Trap",
299
298
  "Fall Damage",
300
299
  "Poison",
301
300
  "Friendly Fire"
302
- ]),
301
+ ],
303
302
  "player_level": u.weighNumRange(1, 50),
304
303
  "resurrection_used": u.pickAWinner([true, false], 0.25),
305
304
  }
@@ -317,16 +316,16 @@ const config = {
317
316
  weight: 11,
318
317
  properties: {
319
318
  "item_id": u.pickAWinner(itemIds),
320
- "item_type": u.pickAWinner([
319
+ "item_type": [
321
320
  "Weapon",
322
321
  "Armor",
323
322
  "Potion",
324
323
  "Scroll",
325
324
  "Mount",
326
325
  "Cosmetic"
327
- ]),
326
+ ],
328
327
  "price_gold": u.weighNumRange(10, 500, 0.8, 100),
329
- "vendor_type": u.pickAWinner(["Town", "Dungeon", "Special Event"]),
328
+ "vendor_type": ["Town", "Dungeon", "Special Event"],
330
329
  }
331
330
  },
332
331
  {
@@ -334,13 +333,13 @@ const config = {
334
333
  weight: 7,
335
334
  properties: {
336
335
  "item_id": u.pickAWinner(itemIds),
337
- "item_type": u.pickAWinner([
336
+ "item_type": [
338
337
  "Weapon",
339
338
  "Armor",
340
339
  "Potion",
341
340
  "Scroll",
342
341
  "Junk"
343
- ]),
342
+ ],
344
343
  "sell_price": u.weighNumRange(5, 250, 0.5, 50),
345
344
  }
346
345
  },
@@ -348,16 +347,16 @@ const config = {
348
347
  event: "real money purchase",
349
348
  weight: 3,
350
349
  properties: {
351
- "product": u.pickAWinner([
350
+ "product": [
352
351
  "Premium Currency (1000)",
353
352
  "Premium Currency (5000)",
354
353
  "Lucky Charm Pack",
355
354
  "Legendary Weapon Chest",
356
355
  "Cosmetic Bundle",
357
356
  "Season Pass"
358
- ]),
357
+ ],
359
358
  "price_usd": u.pickAWinner([4.99, 9.99, 19.99, 49.99, 99.99]),
360
- "payment_method": u.pickAWinner(["Credit Card", "PayPal", "Apple Pay", "Google Pay"]),
359
+ "payment_method": ["Credit Card", "PayPal", "Apple Pay", "Google Pay"],
361
360
  }
362
361
  },
363
362
  {
@@ -372,38 +371,38 @@ const config = {
372
371
  event: "guild left",
373
372
  weight: 1,
374
373
  properties: {
375
- "reason": u.pickAWinner([
374
+ "reason": [
376
375
  "Inactive",
377
376
  "Found Better Guild",
378
377
  "Conflict",
379
378
  "Disbanded"
380
- ]),
379
+ ],
381
380
  }
382
381
  },
383
382
  {
384
383
  event: "inspect",
385
384
  weight: 9,
386
385
  properties: {
387
- "inspect_target": u.pickAWinner([
386
+ "inspect_target": [
388
387
  "NPC",
389
388
  "Monster",
390
389
  "Treasure Chest",
391
390
  "Door",
392
391
  "Statue",
393
392
  "Bookshelf"
394
- ]),
393
+ ],
395
394
  }
396
395
  },
397
396
  {
398
397
  event: "search for clues",
399
398
  weight: 8,
400
399
  properties: {
401
- "location_type": u.pickAWinner([
400
+ "location_type": [
402
401
  "Dungeon Entrance",
403
402
  "Hidden Room",
404
403
  "Quest Location",
405
404
  "Town Square"
406
- ]),
405
+ ],
407
406
  "clue_found": u.pickAWinner([true, false], 0.6),
408
407
  }
409
408
  },
@@ -412,29 +411,29 @@ const config = {
412
411
  weight: 14,
413
412
  properties: {
414
413
  "item_id": u.pickAWinner(itemIds),
415
- "item_type": u.pickAWinner([
414
+ "item_type": [
416
415
  "Health Potion",
417
416
  "Mana Potion",
418
417
  "Buff Scroll",
419
418
  "Ancient Compass",
420
419
  "Lucky Charm",
421
420
  "Resurrection Stone"
422
- ]),
423
- "context": u.pickAWinner(["Combat", "Exploration", "Boss Fight", "Casual"]),
421
+ ],
422
+ "context": ["Combat", "Exploration", "Boss Fight", "Casual"],
424
423
  }
425
424
  },
426
425
  {
427
426
  event: "combat initiated",
428
427
  weight: 20,
429
428
  properties: {
430
- "enemy_type": u.pickAWinner([
429
+ "enemy_type": [
431
430
  "Goblin",
432
431
  "Skeleton",
433
432
  "Dragon",
434
433
  "Demon",
435
434
  "Undead",
436
435
  "Beast"
437
- ]),
436
+ ],
438
437
  "enemy_level": u.weighNumRange(1, 50),
439
438
  "combat_duration_sec": u.weighNumRange(10, 300, 0.7, 60),
440
439
  }
@@ -443,49 +442,49 @@ const config = {
443
442
  event: "combat completed",
444
443
  weight: 18,
445
444
  properties: {
446
- "outcome": u.pickAWinner(["Victory", "Defeat", "Fled"]),
445
+ "outcome": ["Victory", "Defeat", "Fled"],
447
446
  "loot_gained": u.pickAWinner([true, false], 0.7),
448
447
  }
449
448
  }
450
449
  ],
451
450
 
452
451
  superProps: {
453
- platform: u.pickAWinner([
452
+ platform: [
454
453
  "PC",
455
454
  "Mac",
456
455
  "PlayStation",
457
456
  "Xbox",
458
457
  "Switch"
459
- ]),
460
- graphics_quality: u.pickAWinner([
458
+ ],
459
+ graphics_quality: [
461
460
  "Low",
462
461
  "Medium",
463
462
  "High",
464
463
  "Ultra"
465
- ]),
464
+ ],
466
465
  subscription_tier: u.pickAWinner(["Free", "Free", "Free", "Premium", "Elite"]),
467
466
  },
468
467
 
469
468
  scdProps: {},
470
469
 
471
470
  userProps: {
472
- "preferred_playstyle": u.pickAWinner([
471
+ "preferred_playstyle": [
473
472
  "Solo Explorer",
474
473
  "Group Raider",
475
474
  "PvP Fighter",
476
475
  "Quest Completionist",
477
476
  "Treasure Hunter"
478
- ]),
477
+ ],
479
478
  "total_playtime_hours": u.weighNumRange(1, 500, 1.5, 50),
480
479
  "achievement_points": u.weighNumRange(0, 5000, 0.8, 500),
481
- "favorite_class": u.pickAWinner([
480
+ "favorite_class": [
482
481
  "Warrior",
483
482
  "Mage",
484
483
  "Rogue",
485
484
  "Cleric",
486
485
  "Ranger",
487
486
  "Paladin"
488
- ]),
487
+ ],
489
488
  },
490
489
 
491
490
  groupKeys: [
@@ -28,9 +28,8 @@ const config = {
28
28
  hasAnonIds: false, //if true, anonymousIds are created for each user
29
29
  hasSessionIds: false, //if true, hasSessionIds are created for each user
30
30
  alsoInferFunnels: true, //if true, infer funnels from events
31
- makeChart: true,
32
31
  writeToDisk: false,
33
- concurrency: 25,
32
+ concurrency: 1,
34
33
  funnels: [
35
34
  {
36
35
  sequence: ["qux", "garply", "durtle", "linny", "fonk", "crumn", "yak"],