hella-types 0.0.1 → 0.0.3

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/index.ts ADDED
@@ -0,0 +1,1017 @@
1
+ import * as t from 'io-ts';
2
+
3
+ export const AttributesKeyFrameIO = t.type({
4
+ level: t.number,
5
+ data: t.type({
6
+ maxHp: t.number,
7
+ atk: t.number,
8
+ def: t.number,
9
+ magicResistance: t.number,
10
+ cost: t.number,
11
+ blockCnt: t.number,
12
+ moveSpeed: t.number,
13
+ attackSpeed: t.number,
14
+ baseAttackTime: t.number,
15
+ respawnTime: t.number,
16
+ hpRecoveryPerSec: t.number,
17
+ spRecoveryPerSec: t.number,
18
+ maxDeployCount: t.number,
19
+ maxDeckStackCnt: t.number,
20
+ tauntLevel: t.number,
21
+ massLevel: t.number,
22
+ baseForceLevel: t.number,
23
+ stunImmune: t.boolean,
24
+ silenceImmune: t.boolean,
25
+ sleepImmune: t.boolean,
26
+ frozenImmune: t.boolean,
27
+ levitateImmune: t.boolean,
28
+ }),
29
+ });
30
+ export const BlackboardIO = t.type({
31
+ key: t.string,
32
+ value: t.union([t.number, t.undefined]),
33
+ valueStr: t.union([t.string, t.undefined]),
34
+ });
35
+ export const EnemyAttributesIO = t.type({
36
+ maxHp: t.type({
37
+ m_defined: t.boolean,
38
+ m_value: t.number,
39
+ }),
40
+ atk: t.type({
41
+ m_defined: t.boolean,
42
+ m_value: t.number,
43
+ }),
44
+ def: t.type({
45
+ m_defined: t.boolean,
46
+ m_value: t.number,
47
+ }),
48
+ magicResistance: t.type({
49
+ m_defined: t.boolean,
50
+ m_value: t.number,
51
+ }),
52
+ cost: t.type({
53
+ m_defined: t.boolean,
54
+ m_value: t.number,
55
+ }),
56
+ blockCnt: t.type({
57
+ m_defined: t.boolean,
58
+ m_value: t.number,
59
+ }),
60
+ moveSpeed: t.type({
61
+ m_defined: t.boolean,
62
+ m_value: t.number,
63
+ }),
64
+ attackSpeed: t.type({
65
+ m_defined: t.boolean,
66
+ m_value: t.number,
67
+ }),
68
+ baseAttackTime: t.type({
69
+ m_defined: t.boolean,
70
+ m_value: t.number,
71
+ }),
72
+ respawnTime: t.type({
73
+ m_defined: t.boolean,
74
+ m_value: t.number,
75
+ }),
76
+ hpRecoveryPerSec: t.type({
77
+ m_defined: t.boolean,
78
+ m_value: t.number,
79
+ }),
80
+ spRecoveryPerSec: t.type({
81
+ m_defined: t.boolean,
82
+ m_value: t.number,
83
+ }),
84
+ maxDeployCount: t.type({
85
+ m_defined: t.boolean,
86
+ m_value: t.number,
87
+ }),
88
+ massLevel: t.type({
89
+ m_defined: t.boolean,
90
+ m_value: t.number,
91
+ }),
92
+ baseForceLevel: t.type({
93
+ m_defined: t.boolean,
94
+ m_value: t.number,
95
+ }),
96
+ tauntLevel: t.type({
97
+ m_defined: t.boolean,
98
+ m_value: t.number,
99
+ }),
100
+ stunImmune: t.type({
101
+ m_defined: t.boolean,
102
+ m_value: t.boolean,
103
+ }),
104
+ silenceImmune: t.type({
105
+ m_defined: t.boolean,
106
+ m_value: t.boolean,
107
+ }),
108
+ sleepImmune: t.type({
109
+ m_defined: t.boolean,
110
+ m_value: t.boolean,
111
+ }),
112
+ frozenImmune: t.type({
113
+ m_defined: t.boolean,
114
+ m_value: t.boolean,
115
+ }),
116
+ levitateImmune: t.type({
117
+ m_defined: t.boolean,
118
+ m_value: t.boolean,
119
+ }),
120
+ });
121
+ export const EnemySkillsIO = t.type({
122
+ prefabKey: t.string,
123
+ priority: t.number,
124
+ cooldown: t.number,
125
+ initCooldown: t.number,
126
+ spCost: t.number,
127
+ blackboard: t.array(BlackboardIO),
128
+ });
129
+ export const EnemySpDataIO = t.type({
130
+ spType: t.number,
131
+ maxSp: t.number,
132
+ initSp: t.number,
133
+ increment: t.number,
134
+ });
135
+ export const GridRangeIO = t.type({
136
+ id: t.string,
137
+ direction: t.number,
138
+ grids: t.array(
139
+ t.type({
140
+ row: t.number,
141
+ col: t.number,
142
+ })
143
+ ),
144
+ });
145
+ export const LevelUpCostIO = t.type({
146
+ id: t.string,
147
+ count: t.number,
148
+ type: t.string,
149
+ });
150
+ export const ManufactFormulaIO = t.type({
151
+ formulaId: t.string,
152
+ itemId: t.string,
153
+ count: t.number,
154
+ weight: t.number,
155
+ costPoint: t.number,
156
+ formulaType: t.string,
157
+ buffType: t.string,
158
+ costs: t.array(LevelUpCostIO),
159
+ requireRooms: t.array(
160
+ t.type({
161
+ roomId: t.string,
162
+ roomLevel: t.number,
163
+ roomCount: t.number,
164
+ })
165
+ ),
166
+ requireStages: t.array(
167
+ t.type({
168
+ stageId: t.string,
169
+ rank: t.number,
170
+ })
171
+ ),
172
+ });
173
+ export const WorkshopFormulaIO = t.type({
174
+ sortId: t.number,
175
+ formulaId: t.string,
176
+ rarity: t.number,
177
+ itemId: t.string,
178
+ count: t.number,
179
+ goldCost: t.number,
180
+ apCost: t.number,
181
+ formulaType: t.string,
182
+ buffType: t.string,
183
+ extraOutcomeRate: t.number,
184
+ extraOutcomeGroup: t.array(
185
+ t.type({
186
+ weight: t.number,
187
+ itemId: t.string,
188
+ itemCount: t.number,
189
+ })
190
+ ),
191
+ costs: t.array(LevelUpCostIO),
192
+ requireRooms: t.array(
193
+ t.type({
194
+ roomId: t.string,
195
+ roomLevel: t.number,
196
+ roomCount: t.number,
197
+ })
198
+ ),
199
+ requireStages: t.array(
200
+ t.type({
201
+ stageId: t.string,
202
+ rank: t.number,
203
+ })
204
+ ),
205
+ });
206
+ export const OperatorUnlockCondIO = t.type({
207
+ phase: t.string,
208
+ level: t.number,
209
+ });
210
+ export const LevelUpCostCondIO = t.type({
211
+ unlockCond: OperatorUnlockCondIO,
212
+ lvlUpTime: t.number,
213
+ levelUpCost: t.array(LevelUpCostIO),
214
+ });
215
+ export const StageDefinesIO = t.type({
216
+ characterInsts: t.array(t.any),
217
+ tokenInsts: t.array(
218
+ t.type({
219
+ position: t.type({
220
+ row: t.number,
221
+ col: t.number,
222
+ }),
223
+ direction: t.number,
224
+ hidden: t.boolean,
225
+ alias: t.string,
226
+ uniEquipIds: t.array(
227
+ t.type({
228
+ key: t.string,
229
+ level: t.number,
230
+ })
231
+ ),
232
+ inst: t.type({
233
+ characterKey: t.string,
234
+ level: t.number,
235
+ phase: t.number,
236
+ favorPoint: t.number,
237
+ potentialRank: t.number,
238
+ }),
239
+ skillIndex: t.number,
240
+ mainSkillLvl: t.number,
241
+ skinId: t.string,
242
+ tmplId: t.string,
243
+ overrideSkillBlackboard: t.array(BlackboardIO),
244
+ })
245
+ ),
246
+ characterCards: t.array(t.any),
247
+ tokenCards: t.array(t.any),
248
+ });
249
+ export const StageEffectIO = t.type({
250
+ key: t.string,
251
+ offset: t.type({
252
+ x: t.number,
253
+ y: t.number,
254
+ z: t.number,
255
+ }),
256
+ direction: t.number,
257
+ });
258
+ export const StageDataIO = t.type({
259
+ options: t.type({
260
+ characterLimit: t.number,
261
+ maxLifePoint: t.number,
262
+ initialCost: t.number,
263
+ maxCost: t.number,
264
+ costIncreaseTime: t.number,
265
+ moveMultiplier: t.number,
266
+ steeringEnabled: t.boolean,
267
+ isTrainingLevel: t.boolean,
268
+ isHardTrainingLevel: t.boolean,
269
+ functionDisableMask: t.number,
270
+ }),
271
+ levelId: t.string,
272
+ mapId: t.string,
273
+ bgmEvent: t.string,
274
+ environmentSe: t.string,
275
+ mapData: t.type({
276
+ map: t.array(t.array(t.number)),
277
+ tiles: t.array(
278
+ t.type({
279
+ tileKey: t.string,
280
+ heightType: t.number,
281
+ buildableType: t.number,
282
+ passableMask: t.number,
283
+ playerSideMask: t.number,
284
+ blackboard: BlackboardIO,
285
+ effects: t.array(StageEffectIO),
286
+ })
287
+ ),
288
+ blockEdges: t.null,
289
+ tags: t.array(t.string),
290
+ effects: t.array(StageEffectIO),
291
+ layerRects: t.array(t.string),
292
+ width: t.number,
293
+ height: t.number,
294
+ }),
295
+ tilesDisallowToLocate: t.array(t.any),
296
+ runes: t.array(
297
+ t.type({
298
+ difficultyMask: t.number,
299
+ key: t.string,
300
+ professionMask: t.number,
301
+ buildableMask: t.number,
302
+ blackboard: t.array(BlackboardIO),
303
+ })
304
+ ),
305
+ globalBuffs: t.array(
306
+ t.type({
307
+ prefabKey: t.string,
308
+ blackboard: t.array(BlackboardIO),
309
+ overrideCameraEffect: t.null,
310
+ passProfessionMaskFlag: t.boolean,
311
+ professionMask: t.number,
312
+ })
313
+ ),
314
+ routes: t.array(
315
+ t.type({
316
+ motionMode: t.number,
317
+ startPosition: t.type({
318
+ row: t.number,
319
+ col: t.number,
320
+ }),
321
+ endPosition: t.type({
322
+ row: t.number,
323
+ col: t.number,
324
+ }),
325
+ spawnRandomRange: t.type({
326
+ x: t.number,
327
+ y: t.number,
328
+ }),
329
+ spawnOffset: t.type({
330
+ x: t.number,
331
+ y: t.number,
332
+ }),
333
+ checkpoints: t.array(
334
+ t.type({
335
+ type: t.number,
336
+ time: t.number,
337
+ position: t.type({
338
+ row: t.number,
339
+ col: t.number,
340
+ }),
341
+ reachOffset: t.type({
342
+ x: t.number,
343
+ y: t.number,
344
+ }),
345
+ randomizeReachOffset: t.boolean,
346
+ reachDistance: t.number,
347
+ })
348
+ ),
349
+ allowDiagonalMove: t.boolean,
350
+ visitEveryTileCenter: t.boolean,
351
+ visitEveryNodeCenter: t.boolean,
352
+ visitEveryCheckPoint: t.boolean,
353
+ })
354
+ ),
355
+ extraRoutes: t.array(t.any),
356
+ enemies: t.array(t.any),
357
+ enemyDbRefs: t.array(
358
+ t.type({
359
+ useDb: t.boolean,
360
+ id: t.string,
361
+ level: t.number,
362
+ overwrittenData: t.type({
363
+ name: t.type({
364
+ m_defined: t.boolean,
365
+ m_value: t.number,
366
+ }),
367
+ description: t.type({
368
+ m_defined: t.boolean,
369
+ m_value: t.number,
370
+ }),
371
+ prefabKey: t.type({
372
+ m_defined: t.boolean,
373
+ m_value: t.number,
374
+ }),
375
+ attributes: EnemyAttributesIO,
376
+ lifePointReduce: t.type({
377
+ m_defined: t.boolean,
378
+ m_value: t.number,
379
+ }),
380
+ rangeRadius: t.type({
381
+ m_defined: t.boolean,
382
+ m_value: t.number,
383
+ }),
384
+ talentBlackboard: t.array(BlackboardIO),
385
+ skills: t.array(EnemySkillsIO),
386
+ spData: EnemySpDataIO,
387
+ }),
388
+ })
389
+ ),
390
+ waves: t.array(
391
+ t.type({
392
+ preDelay: t.number,
393
+ postDelay: t.number,
394
+ maxTimeWaitingForNextWave: t.number,
395
+ fragments: t.array(
396
+ t.type({
397
+ preDelay: t.number,
398
+ actions: t.array(
399
+ t.type({
400
+ actionType: t.number,
401
+ managedByScheduler: t.boolean,
402
+ key: t.string,
403
+ count: t.number,
404
+ preDelay: t.number,
405
+ interval: t.number,
406
+ routeIndex: t.number,
407
+ blockFragment: t.boolean,
408
+ autoPreviewRoute: t.boolean,
409
+ isUnharmfulAndAlwaysCountAsKilled: t.boolean,
410
+ hiddenGroup: t.string,
411
+ randomSpawnGroupKey: t.string,
412
+ weight: t.number,
413
+ dontBlockWave: t.boolean,
414
+ })
415
+ ),
416
+ name: t.string,
417
+ })
418
+ ),
419
+ })
420
+ ),
421
+ branches: t.type({
422
+ frosts: t.type({
423
+ phases: t.array(
424
+ t.type({
425
+ preDelay: t.number,
426
+ actions: t.array(
427
+ t.type({
428
+ actionType: t.number,
429
+ managedByScheduler: t.boolean,
430
+ key: t.string,
431
+ count: t.number,
432
+ preDelay: t.number,
433
+ interval: t.number,
434
+ routeIndex: t.number,
435
+ blockFragment: t.boolean,
436
+ autoPreviewRoute: t.boolean,
437
+ isUnharmfulAndAlwaysCountAsKilled: t.boolean,
438
+ hiddenGroup: t.string,
439
+ randomSpawnGroupKey: t.string,
440
+ weight: t.number,
441
+ weightValue: t.number,
442
+ })
443
+ ),
444
+ })
445
+ ),
446
+ }),
447
+ }),
448
+ predefines: StageDefinesIO,
449
+ hardPredefines: StageDefinesIO,
450
+ excludeCharIdList: t.null,
451
+ randomSeed: t.number,
452
+ operaConfig: t.string,
453
+ });
454
+ export const RogueRelicIO = t.type({
455
+ id: t.string,
456
+ name: t.string,
457
+ description: t.string,
458
+ usage: t.string,
459
+ obtainApproach: t.string,
460
+ iconId: t.string,
461
+ type: t.string,
462
+ subType: t.string,
463
+ rarity: t.string,
464
+ value: t.number,
465
+ sortId: t.number,
466
+ canSacrifice: t.boolean,
467
+ unlockCondDesc: t.string,
468
+ });
469
+ export const RogueStageIO = t.type({
470
+ excel: t.type({
471
+ id: t.string,
472
+ linkedStageId: t.string,
473
+ levelId: t.string,
474
+ code: t.string,
475
+ name: t.string,
476
+ loadingPicId: t.string,
477
+ description: t.string,
478
+ eliteDesc: t.string,
479
+ isBoss: t.number,
480
+ isElite: t.number,
481
+ difficulty: t.string,
482
+ capsulePool: t.string,
483
+ capsuleProb: t.number,
484
+ vutresProb: t.array(t.number),
485
+ boxProb: t.array(t.number),
486
+ }),
487
+ levels: StageDataIO,
488
+ });
489
+ export const RogueVariationIO = t.type({
490
+ id: t.string,
491
+ type: t.string,
492
+ outerName: t.string,
493
+ innerName: t.string,
494
+ functionDesc: t.string,
495
+ desc: t.string,
496
+ iconId: t.string,
497
+ sound: t.string,
498
+ });
499
+ export const SandboxStageIO = t.type({
500
+ excel: t.type({
501
+ stageId: t.string,
502
+ levelId: t.string,
503
+ code: t.string,
504
+ name: t.string,
505
+ loadingPicId: t.string,
506
+ description: t.string,
507
+ actionCost: t.number,
508
+ powerCost: t.number,
509
+ }),
510
+ levels: StageDataIO,
511
+ });
512
+ export const BaseIO = t.type({
513
+ buffId: t.string,
514
+ buffName: t.string,
515
+ buffIcon: t.string,
516
+ skillIcon: t.string,
517
+ sortId: t.number,
518
+ buffColor: t.string,
519
+ textColor: t.string,
520
+ buffCategory: t.string,
521
+ roomType: t.string,
522
+ description: t.string,
523
+ });
524
+ export const CCStageIO = t.type({
525
+ const: t.type({
526
+ levelId: t.string,
527
+ location: t.string,
528
+ name: t.string,
529
+ description: t.string,
530
+ }),
531
+ levels: StageDataIO,
532
+ });
533
+ export const DefinitionIO = t.type({
534
+ termId: t.string,
535
+ termName: t.string,
536
+ description: t.string,
537
+ });
538
+ export const EnemyIO = t.type({
539
+ excel: t.type({
540
+ enemyId: t.string,
541
+ enemyIndex: t.string,
542
+ enemyTags: t.array(t.string),
543
+ sortId: t.number,
544
+ name: t.string,
545
+ enemyRace: t.string,
546
+ enemyLevel: t.string,
547
+ description: t.string,
548
+ attackType: t.string,
549
+ endure: t.string,
550
+ attack: t.string,
551
+ defence: t.string,
552
+ resistance: t.string,
553
+ ability: t.string,
554
+ isInvalidKilled: t.boolean,
555
+ overrideKillCntInfos: t.record(t.string, t.any),
556
+ hideInHandbook: t.boolean,
557
+ }),
558
+ levels: t.type({
559
+ Key: t.string,
560
+ Value: t.array(
561
+ t.type({
562
+ level: t.number,
563
+ enemyData: t.type({
564
+ name: t.type({
565
+ m_defined: t.boolean,
566
+ m_value: t.string,
567
+ }),
568
+ description: t.type({
569
+ m_defined: t.boolean,
570
+ m_value: t.string,
571
+ }),
572
+ prefabKey: t.type({
573
+ m_defined: t.boolean,
574
+ m_value: t.string,
575
+ }),
576
+ attributes: EnemyAttributesIO,
577
+ lifePointReduce: t.type({
578
+ m_defined: t.boolean,
579
+ m_value: t.number,
580
+ }),
581
+ levelType: t.type({
582
+ m_defined: t.boolean,
583
+ m_value: t.number,
584
+ }),
585
+ rangeRadius: t.type({
586
+ m_defined: t.boolean,
587
+ m_value: t.number,
588
+ }),
589
+ numOfExtraDrops: t.type({
590
+ m_defined: t.boolean,
591
+ m_value: t.number,
592
+ }),
593
+ talentBlackboard: t.array(BlackboardIO),
594
+ skills: t.array(EnemySkillsIO),
595
+ spData: EnemySpDataIO,
596
+ }),
597
+ })
598
+ ),
599
+ }),
600
+ });
601
+ export const GameEventIO = t.type({
602
+ id: t.string,
603
+ type: t.string,
604
+ displayType: t.string,
605
+ name: t.string,
606
+ startTime: t.number,
607
+ endTime: t.number,
608
+ rewardEndTime: t.number,
609
+ displayOnHome: t.boolean,
610
+ hasStage: t.boolean,
611
+ templateShopId: t.string,
612
+ medalGroupId: t.string,
613
+ isReplicate: t.boolean,
614
+ });
615
+ export const ItemIO = t.type({
616
+ data: t.type({
617
+ itemId: t.string,
618
+ name: t.string,
619
+ description: t.string,
620
+ rarity: t.number,
621
+ iconId: t.string,
622
+ overrideBkg: t.null,
623
+ stackIconId: t.string,
624
+ sortId: t.number,
625
+ usage: t.string,
626
+ obtainApproach: t.string,
627
+ classifyType: t.string,
628
+ itemType: t.string,
629
+ stageDropList: t.array(
630
+ t.type({
631
+ stageId: t.string,
632
+ occPer: t.string,
633
+ })
634
+ ),
635
+ buildingProductList: t.array(
636
+ t.type({
637
+ roomType: t.string,
638
+ formulaId: t.string,
639
+ })
640
+ ),
641
+ }),
642
+ formula: t.union([ManufactFormulaIO, WorkshopFormulaIO]),
643
+ });
644
+ export const ModuleIO = t.type({
645
+ info: t.type({
646
+ uniEquipId: t.string,
647
+ uniEquipName: t.string,
648
+ uniEquipIcon: t.string,
649
+ uniEquipDesc: t.string,
650
+ typeIcon: t.string,
651
+ typeName1: t.string,
652
+ typeName2: t.string,
653
+ equipShiningColor: t.string,
654
+ showEvolvePhase: t.number,
655
+ unlockEvolvePhase: t.number,
656
+ charId: t.string,
657
+ tmplId: t.string,
658
+ showLevel: t.number,
659
+ unlockLevel: t.number,
660
+ unlockFavorPoint: t.number,
661
+ missionList: t.array(t.string),
662
+ itemCost: t.record(t.string, t.array(LevelUpCostIO)),
663
+ type: t.string,
664
+ uniEquipGetTime: t.number,
665
+ charEquipOrder: t.number,
666
+ }),
667
+ data: t.type({
668
+ phases: t.array(
669
+ t.type({
670
+ equipLevel: t.number,
671
+ parts: t.array(
672
+ t.type({
673
+ resKey: t.string,
674
+ target: t.string,
675
+ isToken: t.boolean,
676
+ addOrOverrideTalentDataBundle: t.type({
677
+ candidates: t.array(
678
+ t.type({
679
+ displayRangeId: t.boolean,
680
+ upgradeDescription: t.string,
681
+ talentIndex: t.number,
682
+ unlockCondition: OperatorUnlockCondIO,
683
+ requiredPotentialRank: t.number,
684
+ prefabKey: t.string,
685
+ name: t.string,
686
+ description: t.string,
687
+ rangeId: t.string,
688
+ blackboard: t.array(BlackboardIO),
689
+ })
690
+ ),
691
+ }),
692
+ overrideTraitDataBundle: t.type({
693
+ candidates: t.array(
694
+ t.type({
695
+ additionalDescription: t.string,
696
+ unlockCondition: OperatorUnlockCondIO,
697
+ requiredPotentialRank: t.number,
698
+ blackboard: t.array(BlackboardIO),
699
+ overrideDescripton: t.string,
700
+ prefabKey: t.string,
701
+ rangeId: t.string,
702
+ })
703
+ ),
704
+ }),
705
+ })
706
+ ),
707
+ attributeBlackboard: t.array(BlackboardIO),
708
+ tokenAttributeBlackboard: t.record(t.string, t.array(BlackboardIO)),
709
+ })
710
+ ),
711
+ }),
712
+ });
713
+ export const ParadoxIO = t.type({
714
+ excel: t.type({
715
+ charId: t.string,
716
+ stageId: t.string,
717
+ levelId: t.string,
718
+ zoneId: t.string,
719
+ code: t.string,
720
+ name: t.string,
721
+ loadingPicId: t.string,
722
+ description: t.string,
723
+ unlockParam: t.array(
724
+ t.type({
725
+ unlockType: t.number,
726
+ unlockParam1: t.string,
727
+ unlockParam2: t.string,
728
+ unlockParam3: t.null,
729
+ })
730
+ ),
731
+ rewardItem: t.array(
732
+ t.type({
733
+ id: t.string,
734
+ count: t.number,
735
+ type: t.string,
736
+ })
737
+ ),
738
+ stageNameForShow: t.string,
739
+ zoneNameForShow: t.string,
740
+ picId: t.string,
741
+ stageGetTime: t.number,
742
+ }),
743
+ levels: StageDataIO,
744
+ });
745
+ export const RogueThemeIO = t.type({
746
+ name: t.string,
747
+ stageDict: t.record(t.string, RogueStageIO),
748
+ toughStageDict: t.record(t.string, RogueStageIO),
749
+ relicDict: t.record(t.string, RogueRelicIO),
750
+ variationDict: t.record(t.string, RogueVariationIO),
751
+ });
752
+ export const SandboxActIO = t.type({
753
+ stageDict: t.record(t.string, SandboxStageIO),
754
+ });
755
+ export const SkillIO = t.type({
756
+ skillId: t.string,
757
+ iconId: t.string,
758
+ hidden: t.boolean,
759
+ levels: t.array(
760
+ t.type({
761
+ name: t.string,
762
+ rangeId: t.string,
763
+ description: t.string,
764
+ skillType: t.string,
765
+ durationType: t.number,
766
+ spData: t.type({
767
+ spType: t.string,
768
+ levelUpCost: t.null,
769
+ maxChargeTime: t.number,
770
+ spCost: t.number,
771
+ initSp: t.number,
772
+ increment: t.number,
773
+ }),
774
+ prefabId: t.string,
775
+ duration: t.number,
776
+ blackboard: t.array(BlackboardIO),
777
+ })
778
+ ),
779
+ });
780
+ export const SkinIO = t.type({
781
+ skinId: t.string,
782
+ charId: t.string,
783
+ tokenSkinMap: t.array(
784
+ t.type({
785
+ tokenId: t.string,
786
+ tokenSkinId: t.string,
787
+ })
788
+ ),
789
+ illustId: t.string,
790
+ dynIllustId: t.string,
791
+ avatarId: t.string,
792
+ portraitId: t.string,
793
+ dynPortraitId: t.string,
794
+ dynEntranceId: t.string,
795
+ buildingId: t.string,
796
+ battleSkin: t.type({
797
+ overwritePrefab: t.boolean,
798
+ skinOrPrefabId: t.string,
799
+ }),
800
+ isBuySkin: t.boolean,
801
+ tmplId: t.string,
802
+ voiceId: t.string,
803
+ voiceType: t.string,
804
+ displaySkin: t.type({
805
+ skinName: t.string,
806
+ colorList: t.tuple([t.string, t.string, t.string, t.string, t.string]),
807
+ titleList: t.tuple([t.string, t.string]),
808
+ modelName: t.string,
809
+ drawerList: t.array(t.string),
810
+ skinGroupId: t.string,
811
+ skinGroupName: t.string,
812
+ skinGroupSortIndex: t.number,
813
+ content: t.string,
814
+ dialog: t.string,
815
+ usage: t.string,
816
+ description: t.string,
817
+ obtainApproach: t.string,
818
+ sortId: t.number,
819
+ displayTagId: t.string,
820
+ getTime: t.number,
821
+ onYear: t.number,
822
+ onPeriod: t.number,
823
+ }),
824
+ });
825
+ export const StageIO = t.type({
826
+ excel: t.type({
827
+ stageType: t.string,
828
+ difficulty: t.string,
829
+ performanceStageFlag: t.string,
830
+ diffGroup: t.string,
831
+ unlockCondition: t.array(
832
+ t.type({
833
+ stageId: t.string,
834
+ completeState: t.number,
835
+ })
836
+ ),
837
+ stageId: t.string,
838
+ levelId: t.string,
839
+ zoneId: t.string,
840
+ code: t.string,
841
+ name: t.string,
842
+ description: t.string,
843
+ hardStagedId: t.string,
844
+ dangerLevel: t.string,
845
+ dangerPoint: t.number,
846
+ loadingPicId: t.string,
847
+ canPractice: t.boolean,
848
+ canBattleReplay: t.boolean,
849
+ apCost: t.number,
850
+ apFailReturn: t.number,
851
+ etItemId: t.string,
852
+ etCost: t.number,
853
+ etFailReturn: t.number,
854
+ etButtonStyle: t.string,
855
+ apProtectTimes: t.number,
856
+ diamondOnceDrop: t.number,
857
+ practiceTicketCost: t.number,
858
+ dailyStageDifficulty: t.number,
859
+ expGain: t.number,
860
+ goldGain: t.number,
861
+ loseExpGain: t.number,
862
+ loseGoldGain: t.number,
863
+ passFavor: t.number,
864
+ completeFavor: t.number,
865
+ slProgress: t.number,
866
+ displayMainItem: t.string,
867
+ hilightMark: t.boolean,
868
+ bossMark: t.boolean,
869
+ isPredefined: t.boolean,
870
+ isHardPredefined: t.boolean,
871
+ isSkillSelectablePredefined: t.boolean,
872
+ isStoryOnly: t.boolean,
873
+ appearanceStyle: t.number,
874
+ stageDropInfo: t.type({
875
+ firstPassRewards: t.null,
876
+ firstCompleteRewards: t.null,
877
+ passRewards: t.null,
878
+ completeRewards: t.null,
879
+ displayRewards: t.array(
880
+ t.type({
881
+ type: t.string,
882
+ id: t.string,
883
+ dropType: t.string,
884
+ })
885
+ ),
886
+ displayDetailRewards: t.array(
887
+ t.type({
888
+ occPercent: t.number,
889
+ type: t.string,
890
+ id: t.string,
891
+ dropType: t.string,
892
+ })
893
+ ),
894
+ }),
895
+ startButtonOverrideId: t.string,
896
+ isStagePatch: t.boolean,
897
+ mainStageId: t.string,
898
+ }),
899
+ levels: StageDataIO,
900
+ });
901
+ export const OperatorIO = t.type({
902
+ id: t.string,
903
+ recruit: t.number,
904
+ archetype: t.string,
905
+ range: GridRangeIO,
906
+ skills: t.array(SkillIO),
907
+ modules: t.array(ModuleIO),
908
+ skins: t.array(SkinIO),
909
+ bases: t.array(
910
+ t.type({
911
+ condition: t.type({
912
+ buffId: t.string,
913
+ cond: OperatorUnlockCondIO,
914
+ }),
915
+ skill: BaseIO,
916
+ })
917
+ ),
918
+ paradox: ParadoxIO,
919
+ data: t.type({
920
+ name: t.string,
921
+ description: t.string,
922
+ canUseGeneralPotentialItem: t.boolean,
923
+ potentialItemId: t.string,
924
+ nationId: t.string,
925
+ groupId: t.string,
926
+ teamId: t.string,
927
+ displayNumber: t.string,
928
+ tokenKey: t.string,
929
+ appellation: t.string,
930
+ position: t.string,
931
+ tagList: t.array(t.string),
932
+ itemUsage: t.string,
933
+ itemDesc: t.string,
934
+ itemObtainApproach: t.string,
935
+ isNotObtainable: t.boolean,
936
+ isSpChar: t.boolean,
937
+ maxPotentialLevel: t.number,
938
+ rarity: t.string,
939
+ profession: t.string,
940
+ subProfessionId: t.string,
941
+ trait: t.type({
942
+ candidates: t.array(
943
+ t.type({
944
+ unlockCondition: OperatorUnlockCondIO,
945
+ requiredPotentialRank: t.number,
946
+ blackboard: t.array(BlackboardIO),
947
+ overrideDescripton: t.string,
948
+ prefabKey: t.string,
949
+ rangeId: t.string,
950
+ })
951
+ ),
952
+ }),
953
+ phases: t.array(
954
+ t.type({
955
+ characterPrefabKey: t.string,
956
+ rangeId: t.string,
957
+ maxLevel: t.number,
958
+ attributesKeyFrames: t.array(AttributesKeyFrameIO),
959
+ evolveCost: t.array(LevelUpCostIO),
960
+ })
961
+ ),
962
+ skills: t.array(
963
+ t.type({
964
+ skillId: t.string,
965
+ overridePrefabKey: t.string,
966
+ overrideTokenKey: t.string,
967
+ levelUpCostCond: t.array(LevelUpCostCondIO),
968
+ unlockCond: OperatorUnlockCondIO,
969
+ })
970
+ ),
971
+ talents: t.type({
972
+ candidates: t.array(
973
+ t.type({
974
+ unlockCondition: OperatorUnlockCondIO,
975
+ requiredPotentialRank: t.number,
976
+ prefabKey: t.string,
977
+ name: t.string,
978
+ description: t.string,
979
+ rangeId: t.string,
980
+ blackboard: t.array(BlackboardIO),
981
+ })
982
+ ),
983
+ }),
984
+ potentialRanks: t.array(
985
+ t.type({
986
+ type: t.number,
987
+ description: t.string,
988
+ buff: t.type({
989
+ attributes: t.type({
990
+ abnormalFlags: t.null,
991
+ abnormalImmunes: t.null,
992
+ abnormalAntis: t.null,
993
+ abnormalCombos: t.null,
994
+ abnormalComboImmunes: t.null,
995
+ attributeModifiers: t.array(
996
+ t.type({
997
+ attributeType: t.number,
998
+ formulaItem: t.number,
999
+ value: t.number,
1000
+ loadFromBlackboard: t.boolean,
1001
+ fetchBaseValueFromSourceEntity: t.boolean,
1002
+ })
1003
+ ),
1004
+ }),
1005
+ }),
1006
+ equivalentCost: t.null,
1007
+ })
1008
+ ),
1009
+ favorKeyFrames: t.array(AttributesKeyFrameIO),
1010
+ allSkillLvlup: t.array(
1011
+ t.type({
1012
+ unlockCond: OperatorUnlockCondIO,
1013
+ lvlUpCost: t.array(LevelUpCostIO),
1014
+ })
1015
+ ),
1016
+ }),
1017
+ });