fleethub-core 1.12.14 → 1.12.16

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.
@@ -1,7 +1,7 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
- export function parse_ship_conditions(value: ShipConditions): ShipConditions;
4
3
  export function set_panic_hook(): void;
4
+ export function parse_ship_conditions(value: ShipConditions): ShipConditions;
5
5
  export type ShipAttr =
6
6
  | "Unknown"
7
7
  | "NightCarrier"
@@ -26,128 +26,163 @@ export type ShipAttr =
26
26
 
27
27
  export type Histogram<K extends keyof any, V> = Partial<Record<K, V>>;
28
28
 
29
- export interface MoveShipPayload {
30
- current: [string, string, ShipKey];
31
- target: [string | null, string, ShipKey];
29
+ export interface NationalityDef {
30
+ id: number;
31
+ ctypes: number[];
32
32
  }
33
33
 
34
- export type AirWaveType = "Jet" | "LandBase" | "Carrier";
35
-
36
- export type FleetType = "Main" | "Escort" | "RouteSup" | "BossSup";
37
-
38
- export interface SlotSizeVecState {
39
- ss1?: number;
40
- ss2?: number;
41
- ss3?: number;
42
- ss4?: number;
43
- ss5?: number;
34
+ export interface MasterData extends MasterBattleDefinitions {
35
+ created_at: number;
36
+ gears: MasterGear[];
37
+ gear_attrs: MasterAttrRule<GearAttr>[];
38
+ ships: MasterShip[];
39
+ ship_attrs: MasterAttrRule<ShipAttr>[];
40
+ ibonuses: MasterIBonuses;
41
+ equippability: MasterEquippability;
44
42
  }
45
43
 
46
- export type ShipKey = "s1" | "s2" | "s3" | "s4" | "s5" | "s6" | "s7";
47
-
48
- export interface ShipState extends GearVecState, SlotSizeVecState {
49
- id?: string;
50
- ship_id: number;
51
- level?: number;
52
- current_hp?: number;
53
- morale?: number;
54
- ammo?: number;
55
- fuel?: number;
56
- max_hp_mod?: number;
57
- firepower_mod?: number;
58
- torpedo_mod?: number;
59
- armor_mod?: number;
60
- anti_air_mod?: number;
61
- evasion_mod?: number;
62
- asw_mod?: number;
63
- los_mod?: number;
64
- luck_mod?: number;
65
- day_gunfit_accuracy?: number;
66
- night_gunfit_accuracy?: number;
67
- custom_power_mods?: CustomPowerModifiers;
44
+ export interface MasterAttrRule<T> {
45
+ tag: T;
46
+ name: string;
47
+ expr: CompiledEvaler;
68
48
  }
69
49
 
70
- export type AirSquadronMode = "Sortie" | "AirDefense";
50
+ export type CompiledEvaler = string;
71
51
 
72
- export interface AirSquadronState extends GearVecState, SlotSizeVecState {
73
- id?: string;
74
- mode?: AirSquadronMode;
52
+ export interface NightFleetConditions {
53
+ night_contact_rank?: ContactRank | null;
54
+ starshell_index?: number | null;
55
+ searchlight_index?: number | null;
56
+ activates_large_searchlight?: boolean;
75
57
  }
76
58
 
77
- export interface CompMeta {
78
- fleets: Record<FleetType, FleetMeta>;
59
+ export interface NightConditions {
60
+ player?: NightFleetConditions;
61
+ enemy?: NightFleetConditions;
79
62
  }
80
63
 
81
- export interface ShipMeta {
82
- id: string;
83
- ship_id: number;
64
+ export interface BattleConditions {
65
+ org_type: OrgType;
66
+ role: Role;
67
+ ship_index: number;
68
+ fleet_len: number;
69
+ formation: Formation;
70
+ fleet_los_mod: number | null;
71
+ night_conditions: NightFleetConditions;
84
72
  }
85
73
 
86
- export interface FleetMeta {
87
- id: string;
88
- len: number;
89
- ships: [string, ShipMeta | null][];
74
+ export interface ShipPosition {
75
+ org_type?: OrgType;
76
+ fleet_type?: FleetType;
77
+ fleet_len?: number;
78
+ index?: number;
90
79
  }
91
80
 
92
- export type Role = "Main" | "Escort";
81
+ export type GearAttr =
82
+ | "Unknown"
83
+ | "HighAngleMount"
84
+ | "NightFighter"
85
+ | "NightAttacker"
86
+ | "HeavyBomber"
87
+ | "NightRecon"
88
+ | "NightBomber"
89
+ | "MainGun"
90
+ | "Radar"
91
+ | "SurfaceRadar"
92
+ | "AirRadar"
93
+ | "DepthChargeProjector"
94
+ | "SynergisticDepthCharge"
95
+ | "AntiSubMortar"
96
+ | "AntiSubWeapon"
97
+ | "ApDepthCharge"
98
+ | "AntiSubAircraft"
99
+ | "LateModelBowTorpedo"
100
+ | "Seaplane"
101
+ | "CbAircraft"
102
+ | "LbAircraft"
103
+ | "JetAircraft"
104
+ | "Fighter"
105
+ | "Recon"
106
+ | "ObservationSeaplane"
107
+ | "CbFighterBomber"
108
+ | "AntiInstDiveBomber"
109
+ | "CbSwordfish"
110
+ | "SemiNightPlane"
111
+ | "HighAltitudeInterceptor";
93
112
 
94
- export type Align = "Left" | "Right";
113
+ export interface MasterBattleDefinitions {
114
+ formation: NestedFormationDef[];
115
+ anti_air_cutin: AntiAirCutinDef[];
116
+ day_cutin: DayCutinDef[];
117
+ night_cutin: NightCutinDef[];
118
+ historical_bonuses?: HistoricalBonusDef[];
119
+ }
95
120
 
96
- export type Side = "Player" | "Enemy";
121
+ export type ContactRank = "Rank1" | "Rank2" | "Rank3";
97
122
 
98
- export interface ShipInput {
99
- ship_id: number;
100
- ctype: number;
101
- stype: number;
102
- yomi: string;
123
+ export interface ActionReport<T> {
124
+ data: Record<string, AttackReport<T>>;
125
+ damage_state_density: Histogram<DamageState, number> | null;
126
+ is_active: boolean;
103
127
  }
104
128
 
105
- export interface EBonuses {
106
- firepower: number;
107
- torpedo: number;
108
- anti_air: number;
109
- armor: number;
110
- evasion: number;
111
- asw: number;
112
- los: number;
113
- bombing: number;
114
- accuracy: number;
115
- range: number;
129
+ export interface AttackReport<T> {
130
+ style: T;
131
+ proc_rate: number | null;
132
+ attack_power: AttackPower | null;
133
+ attack_power_params: AttackPowerParams | null;
134
+ hits: number;
135
+ hit_rate: HitRate | null;
136
+ hit_rate_params: HitRateParams | null;
137
+ damage: DamageReport | null;
116
138
  }
117
139
 
118
- export interface GearInput {
119
- gear_id: number;
120
- types: GearTypeIdArray;
121
- firepower: number;
122
- torpedo: number;
123
- anti_air: number;
124
- armor: number;
125
- evasion: number;
126
- asw: number;
127
- los: number;
128
- bombing: number;
129
- accuracy: number;
130
- range: number;
131
- radius: number;
132
- stars: number;
133
- ace: number;
134
- }
140
+ export type DayCutinLike = DayCutin | FleetCutin;
135
141
 
136
- export type GearVecInput = GearInput[];
142
+ export type NightCutin =
143
+ | "MainTorpRadar"
144
+ | "TorpLookoutRadar"
145
+ | "TorpTsloTorp"
146
+ | "TorpTsloDrum"
147
+ | "NightZuiun2Radar"
148
+ | "NightZuiun2"
149
+ | "NightZuiunRadar"
150
+ | "NightZuiun"
151
+ | "DoubleAttack"
152
+ | "TorpTorpMain"
153
+ | "TorpTorpTorp"
154
+ | "MainMainSec"
155
+ | "MainMainMain"
156
+ | "SubTorpTorp"
157
+ | "SubRadarTorp"
158
+ | "Cvci1_25"
159
+ | "Cvci1_20"
160
+ | "Photobomber"
161
+ | "Cvci1_18";
137
162
 
138
- export type GearCategory =
139
- | "Fighter"
140
- | "Bomber"
141
- | "Recon"
142
- | "MainGun"
143
- | "Secondary"
144
- | "Torpedo"
145
- | "AntiSub"
146
- | "Radar"
147
- | "Landing"
148
- | "Ration"
149
- | "LandBased"
150
- | "Misc";
163
+ export type DayCutin =
164
+ | "Zuiun"
165
+ | "AirSea"
166
+ | "MainMain"
167
+ | "MainAp"
168
+ | "MainRadar"
169
+ | "MainSec"
170
+ | "DoubleAttack"
171
+ | "FBA"
172
+ | "BBA"
173
+ | "BA";
174
+
175
+ export type FleetCutin =
176
+ | "NelsonTouch"
177
+ | "NagatoClassCutin"
178
+ | "ColoradoClassCutin"
179
+ | "KongouClassCutin"
180
+ | "Yamato2ShipCutin"
181
+ | "Yamato3ShipCutin"
182
+ | "QueenElizabethClassCutin"
183
+ | "RichelieuClassCutin";
184
+
185
+ export type NightCutinLike = NightCutin | FleetCutin;
151
186
 
152
187
  export type GearType =
153
188
  | "Unknown"
@@ -213,125 +248,107 @@ export type GearType =
213
248
  | "CbRecon2"
214
249
  | "SecondaryGun2";
215
250
 
216
- export interface OrgState {
217
- id?: string;
218
- f1?: FleetState;
219
- f2?: FleetState;
220
- f3?: FleetState;
221
- f4?: FleetState;
222
- a1?: AirSquadronState;
223
- a2?: AirSquadronState;
224
- a3?: AirSquadronState;
225
- hq_level?: number;
226
- org_type?: OrgType;
227
- sortie?: FleetKey;
228
- route_sup?: FleetKey;
229
- boss_sup?: FleetKey;
230
- }
231
-
232
- export type FleetKey = "f1" | "f2" | "f3" | "f4";
233
-
234
- export interface CompAnalyzerConfig {
235
- engagement: Engagement;
236
- formation: Formation;
237
- anti_air_cutin: number | null;
238
- ship_anti_air_resist: number;
239
- fleet_anti_air_resist: number;
240
- left_night_fleet_conditions: NightFleetConditions;
241
- right_night_fleet_conditions: NightFleetConditions;
242
- }
243
-
244
- export interface CompAnalysis {
245
- day: CompDayAnalysis;
246
- night: CompNightAnalysis;
247
- contact: ContactAnalysis;
248
- anti_air: CompAntiAirAnalysis;
249
- }
250
-
251
- export interface CompDayAnalysis {
252
- day_cutin: CompDayCutinAnalysis;
253
- fleet_cutin: FleetCutinReport<ShellingStyle>[];
254
- }
255
-
256
- export interface CompNightAnalysis {
257
- night_cutin: CompNightCutinAnalysis;
258
- fleet_cutin: FleetCutinReport<NightAttackStyle>[];
259
- }
251
+ export type GearCategory =
252
+ | "Fighter"
253
+ | "Bomber"
254
+ | "Recon"
255
+ | "MainGun"
256
+ | "Secondary"
257
+ | "Torpedo"
258
+ | "AntiSub"
259
+ | "Radar"
260
+ | "Landing"
261
+ | "Ration"
262
+ | "LandBased"
263
+ | "Misc";
260
264
 
261
- export interface ShipAnalyzerConfig {
262
- air_state?: AirState;
263
- engagement?: Engagement;
264
- left?: AttackAnalyzerShipConfig;
265
- right?: AttackAnalyzerShipConfig;
266
- }
265
+ export type ShipType =
266
+ | "Unknown"
267
+ | "DE"
268
+ | "DD"
269
+ | "CL"
270
+ | "CLT"
271
+ | "CA"
272
+ | "CAV"
273
+ | "CVL"
274
+ | "FBB"
275
+ | "BB"
276
+ | "BBV"
277
+ | "CV"
278
+ | "XBB"
279
+ | "SS"
280
+ | "SSV"
281
+ | "AP"
282
+ | "AV"
283
+ | "LHA"
284
+ | "CVB"
285
+ | "AR"
286
+ | "AS"
287
+ | "CT"
288
+ | "AO";
267
289
 
268
- export interface AttackAnalyzerShipConfig
269
- extends ShipConditions,
270
- NightFleetConditions {
271
- balloons?: number;
272
- fleet_los_mod?: number | null;
273
- }
290
+ export type ShipCategory =
291
+ | "Battleship"
292
+ | "AircraftCarrier"
293
+ | "HeavyCruiser"
294
+ | "LightCruiser"
295
+ | "Destroyer"
296
+ | "CoastalDefenseShip"
297
+ | "Submarine"
298
+ | "AuxiliaryShip";
274
299
 
275
- export interface SimulatorResultItem {
276
- id: string;
277
- fleet_type: FleetType;
278
- index: number;
279
- damage_state_map: Record<DamageState, number>;
300
+ export interface AttackPowerParams {
301
+ is_cutin: boolean;
302
+ basic: number;
303
+ cap: number;
304
+ precap_mod: AttackPowerModifier;
305
+ postcap_mod: AttackPowerModifier;
306
+ ap_shell_mod: number | null;
307
+ aerial_power: number | null;
308
+ proficiency_critical_mod: number;
309
+ armor_penetration: number;
310
+ remaining_ammo_mod: number;
311
+ balloon_mod: number;
312
+ special_enemy_mods: SpecialEnemyModifiers;
313
+ historical_mod: AttackPowerModifier;
314
+ custom_mods: CustomPowerModifiers;
280
315
  }
281
316
 
282
- export interface SimulatorResult {
283
- items: SimulatorResultItem[];
284
- sunk_vec: [number, number, number][];
317
+ export interface AttackPower {
318
+ precap: number;
319
+ is_capped: boolean;
320
+ capped: number;
321
+ normal: number;
322
+ critical: number;
323
+ armor_penetration: number;
324
+ remaining_ammo_mod: number;
285
325
  }
286
326
 
287
- export interface MasterShip {
288
- ship_id: number;
289
- name: string;
290
- yomi: string;
291
- stype: number;
292
- ctype: number;
293
- nationality?: number;
294
- sort_id?: number;
295
- max_hp: StatInterval;
296
- firepower: StatInterval;
297
- armor: StatInterval;
298
- torpedo: StatInterval;
299
- evasion: StatInterval;
300
- anti_air: StatInterval;
301
- asw: StatInterval;
302
- los: StatInterval;
303
- luck: StatInterval;
304
- torpedo_accuracy?: number;
305
- basic_evasion_term?: number;
306
- speed: number;
307
- range?: number;
308
- fuel?: number;
309
- ammo?: number;
310
- next_id?: number;
311
- next_level?: number;
312
- slotnum: number;
313
- slots: SlotSizeVec;
314
- stock: GearState[];
315
- speed_group?: SpeedGroup;
316
- useful?: boolean;
327
+ export interface HitRate {
328
+ normal: number;
329
+ critical: number;
330
+ total: number;
317
331
  }
318
332
 
319
- export type StatInterval = [number | null, number | null];
320
-
321
- export interface GearVecState {
322
- g1?: GearState;
323
- g2?: GearState;
324
- g3?: GearState;
325
- g4?: GearState;
326
- g5?: GearState;
327
- gx?: GearState;
333
+ export interface HitRateParams {
334
+ accuracy_term: number;
335
+ evasion_term: number;
336
+ target_morale_mod: number;
337
+ critical_rate_constant: number;
338
+ critical_percentage_bonus: number;
339
+ hit_percentage_bonus: number;
328
340
  }
329
341
 
330
- export interface GearState {
331
- id?: string;
332
- gear_id: number;
333
- exp?: number;
334
- stars?: number;
342
+ export interface AttackAnalysis {
343
+ attacker_is_player: boolean;
344
+ attacker_ship_id: number;
345
+ target_ship_id: number;
346
+ historical_params: HistoricalParams;
347
+ day: ActionReport<DayPhaseAttackStyle>;
348
+ night: ActionReport<NightPhaseAttackStyle>;
349
+ closing_torpedo: ActionReport<TorpedoAttackStyle>;
350
+ opening_asw: ActionReport<AswAttackStyle>;
351
+ support_shelling: ActionReport<SupportShellingStyle>;
335
352
  }
336
353
 
337
354
  export interface FleetState {
@@ -346,108 +363,66 @@ export interface FleetState {
346
363
  s7?: ShipState;
347
364
  }
348
365
 
349
- export type DayPhaseAttackStyle = ShellingStyle | AswAttackStyle;
366
+ export type SpeedGroup = "A" | "B1" | "B2" | "C";
350
367
 
351
- export interface ShellingStyle {
352
- tag: "ShellingStyle";
353
- attack_type: ShellingType;
354
- cutin: DayCutinLike | null;
355
- power_mod: number;
356
- accuracy_mod: number;
357
- hits: number;
358
- }
368
+ export type FhResult<T> = { Ok: T } | { Err: string };
359
369
 
360
- export interface SupportShellingStyle {
361
- tag: "SupportShellingStyle";
362
- attack_type: SupportShellingType;
370
+ export interface ShipAnalyzerConfig {
371
+ air_state?: AirState;
372
+ engagement?: Engagement;
373
+ left?: AttackAnalyzerShipConfig;
374
+ right?: AttackAnalyzerShipConfig;
363
375
  }
364
376
 
365
- export interface AswAttackStyle {
366
- tag: "AswAttackStyle";
367
- attack_type: AswAttackType;
377
+ export interface MoveShipPayload {
378
+ current: [string, string, ShipKey];
379
+ target: [string | null, string, ShipKey];
368
380
  }
369
381
 
370
- export interface NightAttackStyle {
371
- tag: "NightAttackStyle";
372
- attack_type: NightAttackType;
373
- cutin: NightCutinLike | null;
374
- power_mod: number;
375
- accuracy_mod: number;
376
- hits: number;
377
- }
382
+ export type AirWaveType = "Jet" | "LandBase" | "Carrier";
378
383
 
379
- export type NightPhaseAttackStyle = NightAttackStyle | AswAttackStyle;
384
+ export type FleetType = "Main" | "Escort" | "RouteSup" | "BossSup";
380
385
 
381
- export interface TorpedoAttackStyle {
382
- tag: "TorpedoAttackStyle";
383
- attack_type: TorpedoAttackType;
386
+ export interface ShipState extends GearVecState, SlotSizeVecState {
387
+ id?: string;
388
+ ship_id: number;
389
+ level?: number;
390
+ current_hp?: number;
391
+ morale?: number;
392
+ ammo?: number;
393
+ fuel?: number;
394
+ max_hp_mod?: number;
395
+ firepower_mod?: number;
396
+ torpedo_mod?: number;
397
+ armor_mod?: number;
398
+ anti_air_mod?: number;
399
+ evasion_mod?: number;
400
+ asw_mod?: number;
401
+ los_mod?: number;
402
+ luck_mod?: number;
403
+ day_gunfit_accuracy?: number;
404
+ night_gunfit_accuracy?: number;
405
+ custom_power_mods?: CustomPowerModifiers;
384
406
  }
385
407
 
386
- export interface ShipConditions extends ShipPosition {
387
- formation?: Formation;
388
- amagiri_index?: number | null;
389
- }
408
+ export type ShipKey = "s1" | "s2" | "s3" | "s4" | "s5" | "s6" | "s7";
390
409
 
391
- export interface NodeAttackAnalyzerConfig {
392
- air_state?: AirState;
393
- engagement?: Engagement;
394
- node_state?: NodeState;
395
- left?: NodeAttackAnalyzerShipConfig;
396
- right?: NodeAttackAnalyzerShipConfig;
410
+ export interface SlotSizeVecState {
411
+ ss1?: number;
412
+ ss2?: number;
413
+ ss3?: number;
414
+ ss4?: number;
415
+ ss5?: number;
397
416
  }
398
417
 
399
- export interface NodeAttackAnalysis {
400
- left: AttackAnalysis;
401
- right: AttackAnalysis;
402
- shelling_fleet_cutin: FleetCutinReport<ShellingStyle>[];
403
- night_fleet_cutin: FleetCutinReport<NightAttackStyle>[];
404
- }
418
+ export type MoraleState = "Sparkle" | "Normal" | "Orange" | "Red";
405
419
 
406
- export interface NodeAttackAnalyzerShipConfig extends NightFleetConditions {
407
- formation?: Formation;
408
- }
409
-
410
- export interface NodeState {
411
- map?: number;
412
- node?: NodeId;
413
- phase?: number;
414
- debuff?: boolean;
415
- disable_historical_mod?: boolean;
416
- landing_battle?: boolean;
420
+ export interface AirSquadronState extends GearVecState, SlotSizeVecState {
421
+ id?: string;
422
+ mode?: AirSquadronMode;
417
423
  }
418
424
 
419
- export type NodeId = string;
420
-
421
- export type DayPhaseAttackType =
422
- | { t: "Shelling"; c: ShellingType }
423
- | { t: "Asw"; c: AswAttackType };
424
-
425
- export type ShellingType = "Normal" | "Aerial";
426
-
427
- export type SupportShellingType = ShellingType;
428
-
429
- export type AttackType =
430
- | { t: "Asw"; c: AswAttackType }
431
- | { t: "Shelling"; c: ShellingType }
432
- | { t: "Night"; c: NightAttackType }
433
- | { t: "Torpedo" }
434
- | { t: "SupportShelling"; c: SupportShellingType };
435
-
436
- export type NightPhaseAttackType =
437
- | { t: "Night"; c: NightAttackType }
438
- | { t: "Asw"; c: AswAttackType };
439
-
440
- export type TorpedoAttackType = null;
441
-
442
- export type AswAttackType = "DepthCharge" | "Aerial";
443
-
444
- export type NightAttackType = "Normal" | "Swordfish" | "Aerial";
445
-
446
- export type MoraleState = "Sparkle" | "Normal" | "Orange" | "Red";
447
-
448
- export type SlotSizeVec = (number | null)[];
449
-
450
- export type GearTypeIdArray = [number, number, number, number, number];
425
+ export type AirSquadronMode = "Sortie" | "AirDefense";
451
426
 
452
427
  export type SpecialEnemyType =
453
428
  | "None"
@@ -466,338 +441,257 @@ export type SpecialEnemyType =
466
441
  | "SummerAircraftCarrierDemon"
467
442
  | "EuropeanWaterPrincess";
468
443
 
469
- export type FleetCutin =
470
- | "NelsonTouch"
471
- | "NagatoClassCutin"
472
- | "ColoradoClassCutin"
473
- | "KongouClassCutin"
474
- | "Yamato2ShipCutin"
475
- | "Yamato3ShipCutin"
476
- | "QueenElizabethClassCutin"
477
- | "RichelieuClassCutin";
444
+ export interface ShipMeta {
445
+ id: string;
446
+ ship_id: number;
447
+ }
478
448
 
479
- export type NightCutinLike = NightCutin | FleetCutin;
449
+ export interface CompMeta {
450
+ fleets: Record<FleetType, FleetMeta>;
451
+ }
480
452
 
481
- export type NightCutin =
482
- | "MainTorpRadar"
483
- | "TorpLookoutRadar"
484
- | "TorpTsloTorp"
485
- | "TorpTsloDrum"
486
- | "NightZuiun2Radar"
487
- | "NightZuiun2"
488
- | "NightZuiunRadar"
489
- | "NightZuiun"
490
- | "DoubleAttack"
491
- | "TorpTorpMain"
492
- | "TorpTorpTorp"
493
- | "MainMainSec"
494
- | "MainMainMain"
495
- | "SubTorpTorp"
496
- | "SubRadarTorp"
497
- | "Cvci1_25"
498
- | "Cvci1_20"
499
- | "Cvci1_18"
500
- | "Photobomber";
453
+ export interface FleetMeta {
454
+ id: string;
455
+ len: number;
456
+ ships: [string, ShipMeta | null][];
457
+ }
501
458
 
502
- export type DayCutinLike = DayCutin | FleetCutin;
459
+ export type Role = "Main" | "Escort";
503
460
 
504
- export type DayCutin =
505
- | "Zuiun"
506
- | "AirSea"
507
- | "MainMain"
508
- | "MainAp"
509
- | "MainRadar"
510
- | "MainSec"
511
- | "DoubleAttack"
512
- | "FBA"
513
- | "BBA"
514
- | "BA";
461
+ export type Side = "Player" | "Enemy";
515
462
 
516
- export type ShipCategory =
517
- | "Battleship"
518
- | "AircraftCarrier"
519
- | "HeavyCruiser"
520
- | "LightCruiser"
521
- | "Destroyer"
522
- | "CoastalDefenseShip"
523
- | "Submarine"
524
- | "AuxiliaryShip";
463
+ export type Align = "Left" | "Right";
525
464
 
526
- export type ShipType =
527
- | "Unknown"
528
- | "DE"
529
- | "DD"
530
- | "CL"
531
- | "CLT"
532
- | "CA"
533
- | "CAV"
534
- | "CVL"
535
- | "FBB"
536
- | "BB"
537
- | "BBV"
538
- | "CV"
539
- | "XBB"
540
- | "SS"
541
- | "SSV"
542
- | "AP"
543
- | "AV"
544
- | "LHA"
545
- | "CVB"
546
- | "AR"
547
- | "AS"
548
- | "CT"
549
- | "AO";
465
+ export interface GearInput {
466
+ gear_id: number;
467
+ types: GearTypeIdArray;
468
+ firepower: number;
469
+ torpedo: number;
470
+ anti_air: number;
471
+ armor: number;
472
+ evasion: number;
473
+ asw: number;
474
+ los: number;
475
+ bombing: number;
476
+ accuracy: number;
477
+ range: number;
478
+ radius: number;
479
+ stars: number;
480
+ ace: number;
481
+ }
550
482
 
551
- export interface HitRateParams {
552
- accuracy_term: number;
553
- evasion_term: number;
554
- target_morale_mod: number;
555
- critical_rate_constant: number;
556
- critical_percentage_bonus: number;
557
- hit_percentage_bonus: number;
483
+ export interface ShipInput {
484
+ ship_id: number;
485
+ ctype: number;
486
+ stype: number;
487
+ yomi: string;
558
488
  }
559
489
 
560
- export interface HitRate {
561
- normal: number;
562
- critical: number;
563
- total: number;
490
+ export type GearVecInput = GearInput[];
491
+
492
+ export interface EBonuses {
493
+ firepower: number;
494
+ torpedo: number;
495
+ anti_air: number;
496
+ armor: number;
497
+ evasion: number;
498
+ asw: number;
499
+ los: number;
500
+ bombing: number;
501
+ accuracy: number;
502
+ range: number;
564
503
  }
565
504
 
566
- export interface DamageReport {
567
- miss_damage_min: number;
568
- miss_damage_max: number;
569
- normal_damage_min: number;
570
- normal_damage_max: number;
571
- critical_damage_min: number;
572
- critical_damage_max: number;
573
- normal_scratch_rate: number;
574
- critical_scratch_rate: number;
575
- damage_density: Histogram<number, number>;
576
- damage_state_density: Histogram<DamageState, number>;
505
+ export interface OrgState {
506
+ id?: string;
507
+ f1?: FleetState;
508
+ f2?: FleetState;
509
+ f3?: FleetState;
510
+ f4?: FleetState;
511
+ a1?: AirSquadronState;
512
+ a2?: AirSquadronState;
513
+ a3?: AirSquadronState;
514
+ hq_level?: number;
515
+ org_type?: OrgType;
516
+ sortie?: FleetKey;
517
+ route_sup?: FleetKey;
518
+ boss_sup?: FleetKey;
577
519
  }
578
520
 
579
- export interface DayCutinReport extends ActionReport<DayPhaseAttackStyle> {
580
- observation_term: number | null;
521
+ export type FleetKey = "f1" | "f2" | "f3" | "f4";
522
+
523
+ export interface CompNightAnalysis {
524
+ night_cutin: CompNightCutinAnalysis;
525
+ fleet_cutin: FleetCutinReport<NightAttackStyle>[];
581
526
  }
582
527
 
583
- export interface ShipDayCutinAnalysis {
584
- ship_id: number;
585
- role: Role;
586
- index: number;
587
- rank3: DayCutinReport;
588
- rank2: DayCutinReport;
528
+ export interface CompAnalyzerConfig {
529
+ engagement: Engagement;
530
+ formation: Formation;
531
+ anti_air_cutin: number | null;
532
+ ship_anti_air_resist: number;
533
+ fleet_anti_air_resist: number;
534
+ left_night_fleet_conditions: NightFleetConditions;
535
+ right_night_fleet_conditions: NightFleetConditions;
589
536
  }
590
537
 
591
- export interface CompDayCutinAnalysis {
592
- rank3_air_state: AirState;
593
- rank2_air_state: AirState;
594
- main_fleet_los_mod: number | null;
595
- escort_fleet_los_mod: number | null;
596
- ships: ShipDayCutinAnalysis[];
538
+ export interface CompDayAnalysis {
539
+ day_cutin: CompDayCutinAnalysis;
540
+ fleet_cutin: FleetCutinReport<ShellingStyle>[];
597
541
  }
598
542
 
599
- export interface ShipNightCutinAnalysis {
600
- ship_id: number;
601
- index: number;
602
- normal: NightCutinActionReport;
603
- chuuha: NightCutinActionReport;
543
+ export interface CompAnalysis {
544
+ day: CompDayAnalysis;
545
+ night: CompNightAnalysis;
546
+ contact: ContactAnalysis;
547
+ anti_air: CompAntiAirAnalysis;
604
548
  }
605
549
 
606
- export interface NightCutinActionReport
607
- extends ActionReport<NightPhaseAttackStyle> {
608
- cutin_term: number | null;
550
+ export interface AttackAnalyzerShipConfig
551
+ extends ShipConditions,
552
+ NightFleetConditions {
553
+ balloons?: number;
554
+ fleet_los_mod?: number | null;
609
555
  }
610
556
 
611
- export interface NightContactChance {
612
- rank1: number;
613
- rank2: number;
614
- rank3: number;
557
+ export interface SimulatorResult {
558
+ items: SimulatorResultItem[];
559
+ sunk_vec: [number, number, number][];
615
560
  }
616
561
 
617
- export interface CompNightCutinAnalysis {
618
- night_contact_chance: NightContactChance;
619
- ships: ShipNightCutinAnalysis[];
562
+ export interface SimulatorResultItem {
563
+ id: string;
564
+ fleet_type: FleetType;
565
+ index: number;
566
+ damage_state_map: Record<DamageState, number>;
620
567
  }
621
568
 
622
- export interface MasterGear {
623
- gear_id: number;
624
- name: string;
625
- types: GearTypeIdArray;
626
- special_type?: number;
627
- max_hp?: number;
628
- firepower?: number;
629
- armor?: number;
630
- torpedo?: number;
631
- anti_air?: number;
632
- speed?: number;
633
- bombing?: number;
634
- asw?: number;
635
- los?: number;
636
- luck?: number;
637
- accuracy?: number;
638
- evasion?: number;
639
- range?: number;
640
- radius?: number;
641
- cost?: number;
642
- improvable?: boolean;
643
- ship_anti_air_resist?: number;
644
- fleet_anti_air_resist?: number;
645
- historical_aircraft_group?: number;
569
+ export type NodeId = string;
570
+
571
+ export interface NodeState {
572
+ map?: number;
573
+ node?: NodeId;
574
+ phase?: number;
575
+ debuff?: boolean;
576
+ disable_historical_mod?: boolean;
577
+ landing_battle?: boolean;
646
578
  }
647
579
 
648
- export type SpeedGroup = "A" | "B1" | "B2" | "C";
580
+ export type AttackType =
581
+ | { t: "Asw"; c: AswAttackType }
582
+ | { t: "Shelling"; c: ShellingType }
583
+ | { t: "Night"; c: NightAttackType }
584
+ | { t: "Torpedo" }
585
+ | { t: "SupportShelling"; c: SupportShellingType };
586
+
587
+ export type NightAttackType = "Normal" | "Swordfish" | "Aerial";
588
+
589
+ export type ShellingType = "Normal" | "Aerial";
590
+
591
+ export type AswAttackType = "DepthCharge" | "Aerial";
649
592
 
650
- export type FhResult<T> = { Ok: T } | { Err: string };
593
+ export type NightPhaseAttackType =
594
+ | { t: "Night"; c: NightAttackType }
595
+ | { t: "Asw"; c: AswAttackType };
651
596
 
652
- export interface SupportShellingSimulatorParams {
653
- attacker_formation?: Formation;
654
- target_formation?: Formation;
655
- engagement: Engagement;
656
- node_state: NodeState;
657
- }
597
+ export type TorpedoAttackType = null;
658
598
 
659
- export interface MasterData extends MasterBattleDefinitions {
660
- created_at: number;
661
- gears: MasterGear[];
662
- gear_attrs: MasterAttrRule<GearAttr>[];
663
- ships: MasterShip[];
664
- ship_attrs: MasterAttrRule<ShipAttr>[];
665
- ibonuses: MasterIBonuses;
666
- equippability: MasterEquippability;
667
- }
599
+ export type DayPhaseAttackType =
600
+ | { t: "Shelling"; c: ShellingType }
601
+ | { t: "Asw"; c: AswAttackType };
668
602
 
669
- export interface NationalityDef {
670
- id: number;
671
- ctypes: number[];
672
- }
603
+ export type SupportShellingType = ShellingType;
673
604
 
674
- export interface MasterAttrRule<T> {
675
- tag: T;
676
- name: string;
677
- expr: CompiledEvaler;
678
- }
605
+ export type SlotSizeVec = (number | null)[];
679
606
 
680
- export type CompiledEvaler = string;
607
+ export type GearTypeIdArray = [number, number, number, number, number];
681
608
 
682
- export interface NightConditions {
683
- player?: NightFleetConditions;
684
- enemy?: NightFleetConditions;
609
+ export interface DamageReport {
610
+ miss_damage_min: number;
611
+ miss_damage_max: number;
612
+ normal_damage_min: number;
613
+ normal_damage_max: number;
614
+ critical_damage_min: number;
615
+ critical_damage_max: number;
616
+ normal_scratch_rate: number;
617
+ critical_scratch_rate: number;
618
+ damage_density: Histogram<number, number>;
619
+ damage_state_density: Histogram<DamageState, number>;
685
620
  }
686
621
 
687
- export interface BattleConditions {
688
- org_type: OrgType;
689
- role: Role;
690
- ship_index: number;
691
- fleet_len: number;
692
- formation: Formation;
693
- fleet_los_mod: number | null;
694
- night_conditions: NightFleetConditions;
622
+ export interface ContactAnalysis {
623
+ single: DayContactChance[] | null;
624
+ combined: DayContactChance[] | null;
695
625
  }
696
626
 
697
- export interface NightFleetConditions {
698
- night_contact_rank?: ContactRank | null;
699
- starshell_index?: number | null;
700
- searchlight_index?: number | null;
701
- activates_large_searchlight?: boolean;
627
+ export interface DayContactChance {
628
+ air_state: AirState;
629
+ trigger_rate: number;
630
+ rank3: number;
631
+ rank2: number;
632
+ rank1: number;
633
+ total: number;
702
634
  }
703
635
 
704
- export interface ShipPosition {
705
- org_type?: OrgType;
706
- fleet_type?: FleetType;
707
- fleet_len?: number;
708
- index?: number;
636
+ export interface DayCutinReport extends ActionReport<DayPhaseAttackStyle> {
637
+ observation_term: number | null;
709
638
  }
710
639
 
711
- export type GearAttr =
712
- | "Unknown"
713
- | "HighAngleMount"
714
- | "NightFighter"
715
- | "NightAttacker"
716
- | "HeavyBomber"
717
- | "NightRecon"
718
- | "MainGun"
719
- | "Radar"
720
- | "SurfaceRadar"
721
- | "AirRadar"
722
- | "DepthChargeProjector"
723
- | "SynergisticDepthCharge"
724
- | "AntiSubMortar"
725
- | "AntiSubWeapon"
726
- | "ApDepthCharge"
727
- | "AntiSubAircraft"
728
- | "LateModelBowTorpedo"
729
- | "Seaplane"
730
- | "CbAircraft"
731
- | "LbAircraft"
732
- | "JetAircraft"
733
- | "Fighter"
734
- | "Recon"
735
- | "ObservationSeaplane"
736
- | "CbFighterBomber"
737
- | "AntiInstDiveBomber"
738
- | "CbSwordfish"
739
- | "SemiNightPlane"
740
- | "HighAltitudeInterceptor";
640
+ export interface ShipDayCutinAnalysis {
641
+ ship_id: number;
642
+ role: Role;
643
+ index: number;
644
+ rank3: DayCutinReport;
645
+ rank2: DayCutinReport;
646
+ }
741
647
 
742
- export interface MasterIBonuses {
743
- shelling_power: MasterIBonusRule[];
744
- shelling_accuracy: MasterIBonusRule[];
745
- shelling_aerial_power: MasterIBonusRule[];
746
- torpedo_power: MasterIBonusRule[];
747
- torpedo_accuracy: MasterIBonusRule[];
748
- torpedo_evasion: MasterIBonusRule[];
749
- asw_power: MasterIBonusRule[];
750
- asw_accuracy: MasterIBonusRule[];
751
- night_power: MasterIBonusRule[];
752
- night_aerial_power: MasterIBonusRule[];
753
- night_accuracy: MasterIBonusRule[];
754
- defense_power: MasterIBonusRule[];
755
- contact_selection: MasterIBonusRule[];
756
- fighter_power: MasterIBonusRule[];
757
- ship_anti_air: MasterIBonusRule[];
758
- fleet_anti_air: MasterIBonusRule[];
759
- elos: MasterIBonusRule[];
648
+ export interface CompDayCutinAnalysis {
649
+ rank3_air_state: AirState;
650
+ rank2_air_state: AirState;
651
+ main_fleet_los_mod: number | null;
652
+ escort_fleet_los_mod: number | null;
653
+ ships: ShipDayCutinAnalysis[];
760
654
  }
761
655
 
762
- export interface MasterIBonusRule {
763
- expr: CompiledEvaler;
764
- formula: CompiledEvaler;
656
+ export interface CompNightCutinAnalysis {
657
+ night_contact_chance: NightContactChance;
658
+ ships: ShipNightCutinAnalysis[];
765
659
  }
766
660
 
767
- export interface MasterBattleDefinitions {
768
- formation: NestedFormationDef[];
769
- anti_air_cutin: AntiAirCutinDef[];
770
- day_cutin: DayCutinDef[];
771
- night_cutin: NightCutinDef[];
772
- historical_bonuses?: HistoricalBonusDef[];
661
+ export interface NightCutinActionReport
662
+ extends ActionReport<NightPhaseAttackStyle> {
663
+ cutin_term: number | null;
773
664
  }
774
665
 
775
- export interface ActionReport<T> {
776
- data: Record<string, AttackReport<T>>;
777
- damage_state_density: Histogram<DamageState, number> | null;
778
- is_active: boolean;
666
+ export interface NightContactChance {
667
+ rank1: number;
668
+ rank2: number;
669
+ rank3: number;
779
670
  }
780
671
 
781
- export interface AttackReport<T> {
782
- style: T;
783
- proc_rate: number | null;
784
- attack_power: AttackPower | null;
785
- attack_power_params: AttackPowerParams | null;
786
- hits: number;
787
- hit_rate: HitRate | null;
788
- hit_rate_params: HitRateParams | null;
789
- damage: DamageReport | null;
672
+ export interface ShipNightCutinAnalysis {
673
+ ship_id: number;
674
+ index: number;
675
+ normal: NightCutinActionReport;
676
+ chuuha: NightCutinActionReport;
790
677
  }
791
678
 
792
679
  export type Engagement = "GreenT" | "Parallel" | "HeadOn" | "RedT";
793
680
 
794
681
  export type DamageState = "Normal" | "Shouha" | "Chuuha" | "Taiha" | "Sunk";
795
682
 
796
- export interface HistoricalParams {
797
- power_mod: AttackPowerModifier;
798
- armor_penetration: number;
799
- accuracy_mod: number;
800
- target_evasion_mod: number;
683
+ export interface NightCutinDef {
684
+ tag: NightCutin;
685
+ hits: number;
686
+ type_factor: number | null;
687
+ power_mod: number | null;
688
+ accuracy_mod: number | null;
689
+ }
690
+
691
+ export interface FormationCombatModifiersDef {
692
+ power_mod?: number;
693
+ accuracy_mod?: number;
694
+ evasion_mod?: number;
801
695
  }
802
696
 
803
697
  export interface BattleDefinitions {
@@ -821,24 +715,6 @@ export interface HistoricalBonusDef {
821
715
  evasion_mod?: number;
822
716
  }
823
717
 
824
- export type NestedFormationDef =
825
- | FormationDef
826
- | { top_half: FormationDef; bottom_half: FormationDef };
827
-
828
- export interface NightCutinDef {
829
- tag: NightCutin;
830
- hits: number;
831
- type_factor: number | null;
832
- power_mod: number | null;
833
- accuracy_mod: number | null;
834
- }
835
-
836
- export interface FormationCombatModifiersDef {
837
- power_mod?: number;
838
- accuracy_mod?: number;
839
- evasion_mod?: number;
840
- }
841
-
842
718
  export interface FormationDef {
843
719
  tag: Formation;
844
720
  protection_rate: number | null;
@@ -850,12 +726,11 @@ export interface FormationDef {
850
726
  support_shelling: FormationCombatModifiersDef;
851
727
  }
852
728
 
853
- export interface DayCutinDef {
854
- tag: DayCutin;
855
- hits: number;
856
- type_factor: number | null;
857
- power_mod: number | null;
858
- accuracy_mod: number | null;
729
+ export interface HistoricalParams {
730
+ power_mod: AttackPowerModifier;
731
+ armor_penetration: number;
732
+ accuracy_mod: number;
733
+ target_evasion_mod: number;
859
734
  }
860
735
 
861
736
  export interface AntiAirCutinDef {
@@ -866,6 +741,23 @@ export interface AntiAirCutinDef {
866
741
  sequential: boolean | null;
867
742
  }
868
743
 
744
+ export interface DayCutinDef {
745
+ tag: DayCutin;
746
+ hits: number;
747
+ type_factor: number | null;
748
+ power_mod: number | null;
749
+ accuracy_mod: number | null;
750
+ }
751
+
752
+ export type NestedFormationDef =
753
+ | FormationDef
754
+ | { top_half: FormationDef; bottom_half: FormationDef };
755
+
756
+ export interface AttackPowerModifier {
757
+ a?: number;
758
+ b?: number;
759
+ }
760
+
869
761
  export interface SpecialEnemyModifiers {
870
762
  precap_general_mod: AttackPowerModifier;
871
763
  stype_mod: AttackPowerModifier;
@@ -889,11 +781,6 @@ export interface SpecialEnemyModifiers {
889
781
  pt_mod: AttackPowerModifier | null;
890
782
  }
891
783
 
892
- export interface AttackPowerModifier {
893
- a?: number;
894
- b?: number;
895
- }
896
-
897
784
  export interface CustomPowerModifiers {
898
785
  precap_mod?: AttackPowerModifier;
899
786
  postcap_mod?: AttackPowerModifier;
@@ -916,16 +803,8 @@ export type AirState =
916
803
  | "AirDenial"
917
804
  | "AirIncapability";
918
805
 
919
- export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
920
-
921
- export type Formation = SingleFormation | CombinedFormation;
922
-
923
- export type CombinedFormation =
924
- | "Cruising1"
925
- | "Cruising2"
926
- | "Cruising3"
927
- | "Cruising4";
928
-
806
+ export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
807
+
929
808
  export type SingleFormation =
930
809
  | "LineAhead"
931
810
  | "DoubleLine"
@@ -934,6 +813,20 @@ export type SingleFormation =
934
813
  | "LineAbreast"
935
814
  | "Vanguard";
936
815
 
816
+ export type CombinedFormation =
817
+ | "Cruising1"
818
+ | "Cruising2"
819
+ | "Cruising3"
820
+ | "Cruising4";
821
+
822
+ export type Formation = SingleFormation | CombinedFormation;
823
+
824
+ export interface CompAntiAirAnalysis {
825
+ fleet_adjusted_anti_air: number;
826
+ ships: AntiAirReport[];
827
+ anti_air_cutin_chance: [number, number][];
828
+ }
829
+
937
830
  export interface AntiAirReport {
938
831
  ship_id: number;
939
832
  role: Role;
@@ -946,12 +839,6 @@ export interface AntiAirReport {
946
839
  anti_air_propellant_barrage_chance: number | null;
947
840
  }
948
841
 
949
- export interface CompAntiAirAnalysis {
950
- fleet_adjusted_anti_air: number;
951
- ships: AntiAirReport[];
952
- anti_air_cutin_chance: [number, number][];
953
- }
954
-
955
842
  export interface FleetCutinReport<T> {
956
843
  cutin: FleetCutin;
957
844
  rate: number | null;
@@ -965,62 +852,172 @@ export interface FleetCutinAttackReport<T> extends AttackReport<T> {
965
852
  power_mod: number;
966
853
  }
967
854
 
968
- export interface AttackPower {
969
- precap: number;
970
- is_capped: boolean;
971
- capped: number;
972
- normal: number;
973
- critical: number;
974
- armor_penetration: number;
975
- remaining_ammo_mod: number;
855
+ export interface MasterGear {
856
+ gear_id: number;
857
+ name: string;
858
+ types: GearTypeIdArray;
859
+ special_type?: number;
860
+ max_hp?: number;
861
+ firepower?: number;
862
+ armor?: number;
863
+ torpedo?: number;
864
+ anti_air?: number;
865
+ speed?: number;
866
+ bombing?: number;
867
+ asw?: number;
868
+ los?: number;
869
+ luck?: number;
870
+ accuracy?: number;
871
+ evasion?: number;
872
+ range?: number;
873
+ radius?: number;
874
+ cost?: number;
875
+ improvable?: boolean;
876
+ ship_anti_air_resist?: number;
877
+ fleet_anti_air_resist?: number;
878
+ historical_aircraft_group?: number;
976
879
  }
977
880
 
978
- export interface AttackPowerParams {
979
- is_cutin: boolean;
980
- basic: number;
981
- cap: number;
982
- precap_mod: AttackPowerModifier;
983
- postcap_mod: AttackPowerModifier;
984
- ap_shell_mod: number | null;
985
- aerial_power: number | null;
986
- proficiency_critical_mod: number;
987
- armor_penetration: number;
988
- remaining_ammo_mod: number;
989
- balloon_mod: number;
990
- special_enemy_mods: SpecialEnemyModifiers;
991
- historical_mod: AttackPowerModifier;
992
- custom_mods: CustomPowerModifiers;
881
+ export type StatInterval = [number | null, number | null];
882
+
883
+ export interface MasterShip {
884
+ ship_id: number;
885
+ name: string;
886
+ yomi: string;
887
+ stype: number;
888
+ ctype: number;
889
+ nationality?: number;
890
+ sort_id?: number;
891
+ max_hp: StatInterval;
892
+ firepower: StatInterval;
893
+ armor: StatInterval;
894
+ torpedo: StatInterval;
895
+ evasion: StatInterval;
896
+ anti_air: StatInterval;
897
+ asw: StatInterval;
898
+ los: StatInterval;
899
+ luck: StatInterval;
900
+ torpedo_accuracy?: number;
901
+ basic_evasion_term?: number;
902
+ speed: number;
903
+ range?: number;
904
+ fuel?: number;
905
+ ammo?: number;
906
+ next_id?: number;
907
+ next_level?: number;
908
+ slotnum: number;
909
+ slots: SlotSizeVec;
910
+ stock: GearState[];
911
+ speed_group?: SpeedGroup;
912
+ useful?: boolean;
993
913
  }
994
914
 
995
- export interface AttackAnalysis {
996
- attacker_is_player: boolean;
997
- attacker_ship_id: number;
998
- target_ship_id: number;
999
- historical_params: HistoricalParams;
1000
- day: ActionReport<DayPhaseAttackStyle>;
1001
- night: ActionReport<NightPhaseAttackStyle>;
1002
- closing_torpedo: ActionReport<TorpedoAttackStyle>;
1003
- opening_asw: ActionReport<AswAttackStyle>;
1004
- support_shelling: ActionReport<SupportShellingStyle>;
915
+ export interface GearVecState {
916
+ g1?: GearState;
917
+ g2?: GearState;
918
+ g3?: GearState;
919
+ g4?: GearState;
920
+ g5?: GearState;
921
+ gx?: GearState;
1005
922
  }
1006
923
 
1007
- export interface ContactAnalysis {
1008
- single: DayContactChance[] | null;
1009
- combined: DayContactChance[] | null;
924
+ export interface GearState {
925
+ id?: string;
926
+ gear_id: number;
927
+ exp?: number;
928
+ stars?: number;
1010
929
  }
1011
930
 
1012
- export interface DayContactChance {
1013
- air_state: AirState;
1014
- trigger_rate: number;
1015
- rank3: number;
1016
- rank2: number;
1017
- rank1: number;
1018
- total: number;
931
+ export type DayPhaseAttackStyle = ShellingStyle | AswAttackStyle;
932
+
933
+ export type NightPhaseAttackStyle = NightAttackStyle | AswAttackStyle;
934
+
935
+ export interface AswAttackStyle {
936
+ tag: "AswAttackStyle";
937
+ attack_type: AswAttackType;
1019
938
  }
1020
939
 
1021
- export interface MstStype {
1022
- api_id: number;
1023
- api_equip_type: Record<number, number>;
940
+ export interface ShellingStyle {
941
+ tag: "ShellingStyle";
942
+ attack_type: ShellingType;
943
+ cutin: DayCutinLike | null;
944
+ power_mod: number;
945
+ accuracy_mod: number;
946
+ hits: number;
947
+ }
948
+
949
+ export interface TorpedoAttackStyle {
950
+ tag: "TorpedoAttackStyle";
951
+ attack_type: TorpedoAttackType;
952
+ }
953
+
954
+ export interface NightAttackStyle {
955
+ tag: "NightAttackStyle";
956
+ attack_type: NightAttackType;
957
+ cutin: NightCutinLike | null;
958
+ power_mod: number;
959
+ accuracy_mod: number;
960
+ hits: number;
961
+ }
962
+
963
+ export interface SupportShellingStyle {
964
+ tag: "SupportShellingStyle";
965
+ attack_type: SupportShellingType;
966
+ }
967
+
968
+ export interface ShipConditions extends ShipPosition {
969
+ formation?: Formation;
970
+ amagiri_index?: number | null;
971
+ }
972
+
973
+ export interface NodeAttackAnalyzerConfig {
974
+ air_state?: AirState;
975
+ engagement?: Engagement;
976
+ node_state?: NodeState;
977
+ left?: NodeAttackAnalyzerShipConfig;
978
+ right?: NodeAttackAnalyzerShipConfig;
979
+ }
980
+
981
+ export interface NodeAttackAnalysis {
982
+ left: AttackAnalysis;
983
+ right: AttackAnalysis;
984
+ shelling_fleet_cutin: FleetCutinReport<ShellingStyle>[];
985
+ night_fleet_cutin: FleetCutinReport<NightAttackStyle>[];
986
+ }
987
+
988
+ export interface NodeAttackAnalyzerShipConfig extends NightFleetConditions {
989
+ formation?: Formation;
990
+ }
991
+
992
+ export interface MasterIBonuses {
993
+ shelling_power: MasterIBonusRule[];
994
+ shelling_accuracy: MasterIBonusRule[];
995
+ shelling_aerial_power: MasterIBonusRule[];
996
+ torpedo_power: MasterIBonusRule[];
997
+ torpedo_accuracy: MasterIBonusRule[];
998
+ torpedo_evasion: MasterIBonusRule[];
999
+ asw_power: MasterIBonusRule[];
1000
+ asw_accuracy: MasterIBonusRule[];
1001
+ night_power: MasterIBonusRule[];
1002
+ night_aerial_power: MasterIBonusRule[];
1003
+ night_accuracy: MasterIBonusRule[];
1004
+ defense_power: MasterIBonusRule[];
1005
+ contact_selection: MasterIBonusRule[];
1006
+ fighter_power: MasterIBonusRule[];
1007
+ ship_anti_air: MasterIBonusRule[];
1008
+ fleet_anti_air: MasterIBonusRule[];
1009
+ elos: MasterIBonusRule[];
1010
+ }
1011
+
1012
+ export interface MasterIBonusRule {
1013
+ expr: CompiledEvaler;
1014
+ formula: CompiledEvaler;
1015
+ }
1016
+
1017
+ export interface MstEquipExslotShip {
1018
+ api_ctypes: Record<number, number> | null;
1019
+ api_ship_ids: Record<number, number> | null;
1020
+ api_stypes: Record<number, number> | null;
1024
1021
  }
1025
1022
 
1026
1023
  export interface MasterEquippability {
@@ -1031,8 +1028,6 @@ export interface MasterEquippability {
1031
1028
  rules: EquippabilityRule[];
1032
1029
  }
1033
1030
 
1034
- export type MstEquipShipValue = null | number[];
1035
-
1036
1031
  export interface EquippabilityRule {
1037
1032
  ship: CompiledEvaler;
1038
1033
  keys?: string[];
@@ -1040,18 +1035,24 @@ export interface EquippabilityRule {
1040
1035
  exclude?: string;
1041
1036
  }
1042
1037
 
1038
+ export type MstEquipShipValue = null | number[];
1039
+
1040
+ export interface MstStype {
1041
+ api_id: number;
1042
+ api_equip_type: Record<number, number>;
1043
+ }
1044
+
1043
1045
  export interface MstEquipShip {
1044
1046
  api_equip_type: Record<number, MstEquipShipValue>;
1045
1047
  }
1046
1048
 
1047
- export interface MstEquipExslotShip {
1048
- api_ctypes: Record<number, number> | null;
1049
- api_ship_ids: Record<number, number> | null;
1050
- api_stypes: Record<number, number> | null;
1049
+ export interface SupportShellingSimulatorParams {
1050
+ attacker_formation?: Formation;
1051
+ target_formation?: Formation;
1052
+ engagement: Engagement;
1053
+ node_state: NodeState;
1051
1054
  }
1052
1055
 
1053
- export type ContactRank = "Rank1" | "Rank2" | "Rank3";
1054
-
1055
1056
  export class AirSquadron {
1056
1057
  private constructor();
1057
1058
  free(): void;
@@ -1213,6 +1214,7 @@ export class Gear {
1213
1214
  is_night_plane(): boolean;
1214
1215
  max_exp_eq_120(): boolean;
1215
1216
  has_proficiency(): boolean;
1217
+ is_night_bomber(): boolean;
1216
1218
  expedition_bonus(): number;
1217
1219
  is_night_fighter(): boolean;
1218
1220
  is_night_attacker(): boolean;
@@ -1319,6 +1321,12 @@ export class Ship {
1319
1321
  private constructor();
1320
1322
  free(): void;
1321
1323
  [Symbol.dispose](): void;
1324
+ /**
1325
+ * フィット砲補正
1326
+ */
1327
+ gunfit_accuracy(is_night: boolean): number;
1328
+ state_day_gunfit_accuracy(): number | undefined;
1329
+ state_night_gunfit_accuracy(): number | undefined;
1322
1330
  get_ebonus(key: string): number;
1323
1331
  is_abyssal(): boolean;
1324
1332
  is_amagiri(): boolean;
@@ -1377,12 +1385,6 @@ export class Ship {
1377
1385
  can_equip(gear: Gear, key: string): boolean;
1378
1386
  gear_keys(): string[];
1379
1387
  is_pt_imp(): boolean;
1380
- /**
1381
- * フィット砲補正
1382
- */
1383
- gunfit_accuracy(is_night: boolean): number;
1384
- state_day_gunfit_accuracy(): number | undefined;
1385
- state_night_gunfit_accuracy(): number | undefined;
1386
1388
  id: string;
1387
1389
  readonly hash: bigint;
1388
1390
  readonly ship_id: number;