@my-swu/simulator-client 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/client.js +6 -1
- package/dist/connection/url.d.ts +2 -0
- package/dist/connection/url.js +4 -0
- package/dist/generated/index.d.ts +4 -0
- package/dist/generated/schemas.d.ts +1 -1
- package/dist/generated/schemas.js +2412 -1434
- package/dist/generated/types/admin-match-debug-bundle.d.ts +1 -1
- package/dist/generated/types/admin-match-list-response.d.ts +1 -1
- package/dist/generated/types/admin-match-replay-response.d.ts +1 -1
- package/dist/generated/types/client-message.d.ts +1 -1
- package/dist/generated/types/common.d.ts +524 -260
- package/dist/generated/types/create-limited-event-request.d.ts +1 -1
- package/dist/generated/types/format-event-response.d.ts +1 -1
- package/dist/generated/types/game-command.d.ts +1 -1
- package/dist/generated/types/game-event.d.ts +1 -1
- package/dist/generated/types/game-state.d.ts +1 -1
- package/dist/generated/types/get-match-response.d.ts +1 -1
- package/dist/generated/types/leave-limited-event-request.d.ts +1 -0
- package/dist/generated/types/leave-limited-event-request.js +2 -0
- package/dist/generated/types/limited-event-server-message.d.ts +1 -0
- package/dist/generated/types/limited-event-server-message.js +2 -0
- package/dist/generated/types/list-active-ai-matches-response.d.ts +1 -1
- package/dist/generated/types/lobby-access-response.d.ts +1 -1
- package/dist/generated/types/lobby-chat-response.d.ts +1 -1
- package/dist/generated/types/lobby-response.d.ts +1 -1
- package/dist/generated/types/lobby-server-message.d.ts +1 -1
- package/dist/generated/types/match-access-recovery-response.d.ts +1 -1
- package/dist/generated/types/match-access-response.d.ts +1 -1
- package/dist/generated/types/match-history-replay-response.d.ts +1 -1
- package/dist/generated/types/match-recovery-response.d.ts +1 -1
- package/dist/generated/types/match-spectator-access-response.d.ts +1 -1
- package/dist/generated/types/rematch-match-response.d.ts +1 -1
- package/dist/generated/types/restore-history-response.d.ts +1 -1
- package/dist/generated/types/restore-match-save-response.d.ts +1 -1
- package/dist/generated/types/server-message.d.ts +1 -1
- package/dist/generated/types/shared-match-history-replay-response.d.ts +1 -1
- package/dist/generated/types/submit-ai-game-feedback-request.d.ts +1 -0
- package/dist/generated/types/submit-ai-game-feedback-request.js +2 -0
- package/dist/generated/types/submit-ai-game-feedback-response.d.ts +1 -0
- package/dist/generated/types/submit-ai-game-feedback-response.js +2 -0
- package/dist/generated/types/submit-match-deck-response.d.ts +1 -1
- package/dist/generated/types/tournament-room-access-response.d.ts +1 -1
- package/dist/generated/types/tournament-room-server-message.d.ts +1 -1
- package/dist/generated/types/undo-match-response.d.ts +1 -1
- package/dist/generated/types/update-lobby-settings-request.d.ts +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/http/request.d.ts +2 -0
- package/dist/http/request.js +9 -1
- package/dist/i18n/card-print-catalog.d.ts +9 -0
- package/dist/i18n/card-print-catalog.js +260 -0
- package/dist/i18n/catalog.d.ts +8 -0
- package/dist/i18n/catalog.js +195 -0
- package/dist/i18n/diagnostics.d.ts +6 -0
- package/dist/i18n/diagnostics.js +19 -0
- package/dist/i18n/fallback.d.ts +3 -0
- package/dist/i18n/fallback.js +40 -0
- package/dist/i18n/format.d.ts +8 -0
- package/dist/i18n/format.js +29 -0
- package/dist/i18n/generated/message-types.d.ts +91 -0
- package/dist/i18n/generated/message-types.js +3 -0
- package/dist/i18n/icu.d.ts +12 -0
- package/dist/i18n/icu.js +75 -0
- package/dist/i18n/index.d.ts +9 -0
- package/dist/i18n/index.js +5 -0
- package/dist/i18n/locale.d.ts +9 -0
- package/dist/i18n/locale.js +19 -0
- package/dist/i18n/types.d.ts +151 -0
- package/dist/i18n/types.js +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/internal/authenticated-socket-session.d.ts +2 -0
- package/dist/internal/authenticated-socket-session.js +3 -1
- package/dist/local/client.js +7 -2
- package/dist/local/server/http-router.js +18 -0
- package/dist/resources/admin.d.ts +8 -0
- package/dist/resources/admin.js +2 -0
- package/dist/resources/limited-event-session.d.ts +10 -0
- package/dist/resources/limited-event-session.js +35 -0
- package/dist/resources/limited-event-types.d.ts +34 -1
- package/dist/resources/limited-events.d.ts +8 -1
- package/dist/resources/limited-events.js +18 -1
- package/dist/resources/lobbies.d.ts +1 -1
- package/dist/resources/lobbies.js +1 -1
- package/dist/resources/lobby-types.d.ts +15 -2
- package/dist/resources/match-history.d.ts +8 -1
- package/dist/resources/match-history.js +10 -0
- package/dist/resources/tournament-rooms.d.ts +1 -1
- package/dist/resources/tournament-rooms.js +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/validators.d.ts +5 -1
- package/i18n/cards/de.json +121 -0
- package/i18n/cards/en.json +121 -0
- package/i18n/cards/es.json +121 -0
- package/i18n/cards/fr.json +121 -0
- package/i18n/cards/it.json +121 -0
- package/i18n/cards/manifest.json +2715 -0
- package/i18n/de.json +11 -0
- package/i18n/en.json +11 -0
- package/i18n/es.json +11 -0
- package/i18n/fr.json +11 -0
- package/i18n/it.json +11 -0
- package/i18n/messages.schema.json +28 -0
- package/package.json +12 -2
- package/schema/common.schema.json +1684 -1005
- package/schema/create-limited-event-request.schema.json +11 -0
- package/schema/game-event.schema.json +76 -0
- package/schema/game-state.schema.json +8 -0
- package/schema/leave-limited-event-request.schema.json +15 -0
- package/schema/limited-event-server-message.schema.json +63 -0
- package/schema/manifest.json +5 -1
- package/schema/match-save-payload.schema.json +1 -1
- package/schema/route-manifest.json +54 -0
- package/schema/submit-ai-game-feedback-request.schema.json +36 -0
- package/schema/submit-ai-game-feedback-response.schema.json +19 -0
- package/schema/update-lobby-settings-request.schema.json +67 -0
|
@@ -29,6 +29,16 @@ export type AbilityTarget = ({
|
|
|
29
29
|
} | {
|
|
30
30
|
seat: Seat;
|
|
31
31
|
type: "leader";
|
|
32
|
+
} | {
|
|
33
|
+
/**
|
|
34
|
+
* Zero-based position in that player's leader list.
|
|
35
|
+
*/
|
|
36
|
+
leaderIndex: number;
|
|
37
|
+
/**
|
|
38
|
+
* Player who owns the leader slot.
|
|
39
|
+
*/
|
|
40
|
+
seat: Seat;
|
|
41
|
+
type: "leaderByIndex";
|
|
32
42
|
} | {
|
|
33
43
|
seat: Seat;
|
|
34
44
|
type: "base";
|
|
@@ -39,9 +49,18 @@ export type AbilityTarget = ({
|
|
|
39
49
|
/**
|
|
40
50
|
* Trigger window for a parsed ability. Identifies WHEN the ability
|
|
41
51
|
* fires; the WHAT is carried by `TriggeredEffect`.
|
|
52
|
+
*
|
|
53
|
+
* This type is on the public SDK schema — it reaches `GameState` through
|
|
54
|
+
* `PendingAbilityView.window` and `GameEvent` — but only ever server to
|
|
55
|
+
* client: no `GameCommand` carries one, so a consumer reads it and never
|
|
56
|
+
* constructs it. The two variants that carry a [`crate::effect::UnitFilter`]
|
|
57
|
+
* are therefore exported opaquely, the way `MatchSavePayload::state` is: the
|
|
58
|
+
* variant discriminant stays on the wire so a UI can still switch on the
|
|
59
|
+
* window, while the engine filter behind it does not pin ~60 internal fields
|
|
60
|
+
* and their whole reference closure into the SDK type surface.
|
|
42
61
|
*/
|
|
43
62
|
export type AbilityWindow = (("AfterPlayOrDeploy" | "WhenActionPhaseStarts" | "WhenFirstActionPhaseStarts" | "WhenYouDrawCardsDuringActionPhase" | "WhenAnOpponentDrawsCardsDuringActionPhase" | "WhenAPlayerDrawsCardsDuringActionPhase" | "WhenYouTakeInitiative" | "WhenYouDeployLeader" | "WhenEntersPlay" | "OnAttack" | "OnDefense" | "WhenFriendlyUnitAttacks" | "WhenThisUnitIsAttacked" | "WhenThisUnitReadies" | "WhenDamageIsDealtToThisUnit" | "WhenCombatDamageIsDealtToThisUnit" | "WhenThisUnitIsHealed" | "WhenDamageIsDealtToYourBase" | "WhenFriendlyUnitDealsDamageToEnemyUnit" | "WhenEnemyUnitAttacks" | "WhenEnemyUnitAttacksYourBase" | "WhenPilotAttachesToThisUnit" | "WhenFriendlyUnitIsDefeated" | "WhenThisUnitDealsCombatDamageToBase" | "WhenThisUnitDealsCombatDamageToUnit" | "WhenFriendlyUnitDealsCombatDamageToBase" | "WhenEnemyUnitDealsCombatDamageToYourBase" | "WhenAttackEnds" | "WhenFriendlyUnitAttackEnds" | "WhenCaptured" | "WhenDefeated" | "WhenEnemyUnitDefeated" | "WhenIndirectDamageDealtToUnit" | "WhenYouDealNonCombatDamage" | "WhenRevealOrDiscardFromHand" | "WhenAPlayerDiscardsFromHand" | "WhenOpponentPlaysCard" | "WhenOpponentPlaysEvent" | "WhenOpponentPlaysSecondCardEachPhase" | "WhenYouUseTheForce" | "WhenRegroupPhaseStarts" | "WhenFriendlyForceUnitAttacks" | "AtStartOfTurn" | "AtEndOfTurn") | "WhenYouDrawCards" | "WhenEnemyUnitReadiesDuringActionPhase" | "WhenFriendlyUnitDealtDamageAndSurvives" | {
|
|
44
|
-
WhenFriendlyUnitDealtCombatDamageAndSurvives:
|
|
63
|
+
WhenFriendlyUnitDealtCombatDamageAndSurvives: unknown;
|
|
45
64
|
} | "WhenEnemyGroundUnitAttacksYourBase" | {
|
|
46
65
|
WhenAnotherFriendlyTraitUnitAttacks: string;
|
|
47
66
|
} | "WhenUpgradeAttachesToThisUnit" | "WhenAnotherFriendlyUnitIsDefeated" | "WhenFriendlyUpgradeIsDefeated" | {
|
|
@@ -49,12 +68,18 @@ export type AbilityWindow = (("AfterPlayOrDeploy" | "WhenActionPhaseStarts" | "W
|
|
|
49
68
|
} | "WhenYouDealDamageToEnemyBase" | {
|
|
50
69
|
WhenFriendlyTraitUnitAttackEnds: string;
|
|
51
70
|
} | "WhenThisUnitWouldBeCaptured" | {
|
|
52
|
-
WhenUnitDefeated:
|
|
71
|
+
WhenUnitDefeated: unknown;
|
|
53
72
|
} | {
|
|
54
73
|
WhenUnitLeavesPlay: RelationFilter;
|
|
55
74
|
} | "WhenYouReadyCardsDuringRegroup" | "WhenFriendlyUnitAttacksAndDefeats" | "WhenFriendlyUnitDefeatedWhileAttacking" | "WhenYouPlayEvent" | "WhenYouPlayAUnit" | "WhenYouPlayOrCreateAUnit" | "WhenFriendlyUnitEntersPlay" | "WhenYouPlayAnotherUnit" | "WhenYouPlayAnUpgrade" | "WhenYouCollectABounty" | "WhenYouDiscardFromDeck");
|
|
56
75
|
export type ActionAbilitySource = ({
|
|
57
76
|
type: "leader";
|
|
77
|
+
} | {
|
|
78
|
+
/**
|
|
79
|
+
* Non-primary leader slots start at one; slot zero uses legacy `Leader`.
|
|
80
|
+
*/
|
|
81
|
+
leaderIndex: number;
|
|
82
|
+
type: "leaderByIndex";
|
|
58
83
|
} | {
|
|
59
84
|
actionIndex: number;
|
|
60
85
|
type: "leaderUnit";
|
|
@@ -73,8 +98,13 @@ export type ActionAbilitySource = ({
|
|
|
73
98
|
export interface ActionAbilityView {
|
|
74
99
|
creditTokenCounts: number[];
|
|
75
100
|
label: string;
|
|
101
|
+
modeChoice?: (ModeChoiceView | null);
|
|
76
102
|
source: ActionAbilitySource;
|
|
77
103
|
targetGroups: TargetSelectionGroup[];
|
|
104
|
+
/**
|
|
105
|
+
* Exact public Action or Epic Action declaration when migrated.
|
|
106
|
+
*/
|
|
107
|
+
text?: (EffectTextRefsView | null);
|
|
78
108
|
}
|
|
79
109
|
/**
|
|
80
110
|
* Admission scope that blocked creation of an AI-backed match.
|
|
@@ -222,6 +252,12 @@ export interface ActiveEffectView {
|
|
|
222
252
|
inactive?: boolean;
|
|
223
253
|
source?: (EffectSourceView | null);
|
|
224
254
|
targets: EffectTargetView[];
|
|
255
|
+
/**
|
|
256
|
+
* Reviewed card-text and shared-message provenance when this public row
|
|
257
|
+
* was created by a resolving instruction. Absence means this registry
|
|
258
|
+
* does not retain a display declaration, never that text was inferred.
|
|
259
|
+
*/
|
|
260
|
+
text?: (EffectTextRefsView | null);
|
|
225
261
|
}
|
|
226
262
|
export interface AddLobbyAiPlayerRequest {
|
|
227
263
|
/**
|
|
@@ -265,6 +301,10 @@ export interface AdminMatchReplayResponse {
|
|
|
265
301
|
* Compact durable match data safe for an administrator list view.
|
|
266
302
|
*/
|
|
267
303
|
export interface AdminMatchSummary {
|
|
304
|
+
/**
|
|
305
|
+
* Feedback collected for individual completed AI games in this match.
|
|
306
|
+
*/
|
|
307
|
+
aiFeedback: AiGameFeedback[];
|
|
268
308
|
completedAtMs?: (number | null);
|
|
269
309
|
createdAtMs: number;
|
|
270
310
|
format: MatchFormat;
|
|
@@ -365,6 +405,19 @@ export type AiDecisionSearchMode = ("mcts" | "setupEvaluator" | "fastPath");
|
|
|
365
405
|
* adjusted without changing the SDK surface.
|
|
366
406
|
*/
|
|
367
407
|
export type AiDifficulty = ("easy" | "medium" | "hard" | "unfair");
|
|
408
|
+
/**
|
|
409
|
+
* One immutable player assessment of an AI opponent for a completed game.
|
|
410
|
+
*/
|
|
411
|
+
export interface AiGameFeedback {
|
|
412
|
+
comments?: (string | null);
|
|
413
|
+
gameNumber: number;
|
|
414
|
+
rating: AiGameFeedbackRating;
|
|
415
|
+
submittedAtMs: number;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Rating submitted by a player after completing one Solo-versus-AI game.
|
|
419
|
+
*/
|
|
420
|
+
export type AiGameFeedbackRating = ("poorly" | "okay" | "good");
|
|
368
421
|
/**
|
|
369
422
|
* Explicit AI seat configuration.
|
|
370
423
|
*/
|
|
@@ -578,6 +631,20 @@ export interface CardReferenceMatchView {
|
|
|
578
631
|
cardType: CardType;
|
|
579
632
|
title: string;
|
|
580
633
|
}
|
|
634
|
+
export interface CardTextRef {
|
|
635
|
+
/**
|
|
636
|
+
* Canonical card identity that owns this reviewed printed slot.
|
|
637
|
+
*/
|
|
638
|
+
cardId: number;
|
|
639
|
+
/**
|
|
640
|
+
* Full semantic-contract fingerprint pinning this reference to reviewed text.
|
|
641
|
+
*/
|
|
642
|
+
contractFingerprint: string;
|
|
643
|
+
/**
|
|
644
|
+
* Durable reviewed slot identifier within the canonical card contract.
|
|
645
|
+
*/
|
|
646
|
+
slot: string;
|
|
647
|
+
}
|
|
581
648
|
/**
|
|
582
649
|
* Canonical card families from production card data.
|
|
583
650
|
*/
|
|
@@ -675,6 +742,10 @@ export interface CreateLimitedEventRequest {
|
|
|
675
742
|
* Set code used for booster generation.
|
|
676
743
|
*/
|
|
677
744
|
setCode: string;
|
|
745
|
+
/**
|
|
746
|
+
* Optional lobby-owned pick and deck-construction schedule.
|
|
747
|
+
*/
|
|
748
|
+
timerSettings?: (LimitedLobbyTimerSettings | null);
|
|
678
749
|
}
|
|
679
750
|
export interface CreateLobbyRequest {
|
|
680
751
|
config: LobbyConfig;
|
|
@@ -1045,6 +1116,10 @@ export interface DelayedEffectOrderOptionView {
|
|
|
1045
1116
|
label: string;
|
|
1046
1117
|
occurrenceSequence: number;
|
|
1047
1118
|
sourceCardId?: (number | null);
|
|
1119
|
+
/**
|
|
1120
|
+
* Reviewed text retained by the delayed follow-up when it was created.
|
|
1121
|
+
*/
|
|
1122
|
+
text?: (EffectTextRefsView | null);
|
|
1048
1123
|
}
|
|
1049
1124
|
/**
|
|
1050
1125
|
* Public trigger point for a delayed effect.
|
|
@@ -1077,6 +1152,10 @@ export interface DelayedEffectView {
|
|
|
1077
1152
|
id: string;
|
|
1078
1153
|
source?: (EffectSourceView | null);
|
|
1079
1154
|
targets: EffectTargetView[];
|
|
1155
|
+
/**
|
|
1156
|
+
* Reviewed card-text and shared-message provenance for this public row.
|
|
1157
|
+
*/
|
|
1158
|
+
text?: (EffectTextRefsView | null);
|
|
1080
1159
|
timing: DelayedEffectTimingView;
|
|
1081
1160
|
}
|
|
1082
1161
|
export interface DistributionAssignment {
|
|
@@ -1105,6 +1184,24 @@ export interface DistributionTargetView {
|
|
|
1105
1184
|
target: AbilityTarget;
|
|
1106
1185
|
}
|
|
1107
1186
|
export type DistributionTokenKindView = ("experience" | "shield" | "advantage");
|
|
1187
|
+
/**
|
|
1188
|
+
* Draft pick schedule. Vectors are ordered by remaining choices: leader
|
|
1189
|
+
* values cover 2 through 8, pack values cover 2 through 14.
|
|
1190
|
+
*/
|
|
1191
|
+
export interface DraftLobbyTimerSettings {
|
|
1192
|
+
/**
|
|
1193
|
+
* Leader-pick duration in seconds for 2 through 8 leaders remaining.
|
|
1194
|
+
*/
|
|
1195
|
+
leaderPickSeconds: number[];
|
|
1196
|
+
/**
|
|
1197
|
+
* Pack-pick duration in seconds for 2 through 14 cards remaining.
|
|
1198
|
+
*/
|
|
1199
|
+
packPickSeconds: number[];
|
|
1200
|
+
/**
|
|
1201
|
+
* Review duration between booster packs in seconds.
|
|
1202
|
+
*/
|
|
1203
|
+
reviewSeconds: number;
|
|
1204
|
+
}
|
|
1108
1205
|
/**
|
|
1109
1206
|
* One configured booster round for a chaos draft.
|
|
1110
1207
|
*/
|
|
@@ -1114,14 +1211,6 @@ export interface DraftRoundConfig {
|
|
|
1114
1211
|
*/
|
|
1115
1212
|
setCode: string;
|
|
1116
1213
|
}
|
|
1117
|
-
/**
|
|
1118
|
-
* Typed game-state source for a dynamic Unit power ceiling.
|
|
1119
|
-
*/
|
|
1120
|
-
export type DynamicPowerLimit = {
|
|
1121
|
-
UpgradesOnUnits: {
|
|
1122
|
-
relation: RelationFilter;
|
|
1123
|
-
};
|
|
1124
|
-
};
|
|
1125
1214
|
/**
|
|
1126
1215
|
* Public card subset affected by a play or cost modifier.
|
|
1127
1216
|
*/
|
|
@@ -1156,36 +1245,46 @@ export type EffectResolutionDraftStepView = ({
|
|
|
1156
1245
|
purpose: TargetGroupPurpose;
|
|
1157
1246
|
selected: AbilityTarget[];
|
|
1158
1247
|
stepId: string;
|
|
1248
|
+
text?: (EffectTextRefsView | null);
|
|
1159
1249
|
} | {
|
|
1160
1250
|
editable: boolean;
|
|
1161
1251
|
kind: "amount";
|
|
1162
1252
|
label: string;
|
|
1163
1253
|
selected: number;
|
|
1164
1254
|
stepId: string;
|
|
1255
|
+
text?: (EffectTextRefsView | null);
|
|
1165
1256
|
} | {
|
|
1166
1257
|
editable: boolean;
|
|
1167
1258
|
kind: "modes";
|
|
1168
1259
|
label: string;
|
|
1260
|
+
/**
|
|
1261
|
+
* Exact reviewed Mode wrappers for every selected executable option.
|
|
1262
|
+
*/
|
|
1263
|
+
modeTextReferences?: (CardTextRef | null)[];
|
|
1169
1264
|
selected: number[];
|
|
1170
1265
|
stepId: string;
|
|
1266
|
+
text?: (EffectTextRefsView | null);
|
|
1171
1267
|
} | {
|
|
1172
1268
|
editable: boolean;
|
|
1173
1269
|
kind: "cards";
|
|
1174
1270
|
label: string;
|
|
1175
1271
|
selected: number[];
|
|
1176
1272
|
stepId: string;
|
|
1273
|
+
text?: (EffectTextRefsView | null);
|
|
1177
1274
|
} | {
|
|
1178
1275
|
editable: boolean;
|
|
1179
1276
|
kind: "name";
|
|
1180
1277
|
label: string;
|
|
1181
1278
|
selected: string;
|
|
1182
1279
|
stepId: string;
|
|
1280
|
+
text?: (EffectTextRefsView | null);
|
|
1183
1281
|
} | {
|
|
1184
1282
|
editable: boolean;
|
|
1185
1283
|
kind: "aspect";
|
|
1186
1284
|
label: string;
|
|
1187
1285
|
selected: string;
|
|
1188
1286
|
stepId: string;
|
|
1287
|
+
text?: (EffectTextRefsView | null);
|
|
1189
1288
|
} | {
|
|
1190
1289
|
attackerId: number;
|
|
1191
1290
|
editable: boolean;
|
|
@@ -1193,12 +1292,14 @@ export type EffectResolutionDraftStepView = ({
|
|
|
1193
1292
|
label: string;
|
|
1194
1293
|
stepId: string;
|
|
1195
1294
|
target: AttackTarget;
|
|
1295
|
+
text?: (EffectTextRefsView | null);
|
|
1196
1296
|
} | {
|
|
1197
1297
|
editable: boolean;
|
|
1198
1298
|
kind: "distribution";
|
|
1199
1299
|
label: string;
|
|
1200
1300
|
selected: DistributionAssignment[];
|
|
1201
1301
|
stepId: string;
|
|
1302
|
+
text?: (EffectTextRefsView | null);
|
|
1202
1303
|
});
|
|
1203
1304
|
/**
|
|
1204
1305
|
* Engine-owned answers collected for one uncommitted semantic effect.
|
|
@@ -1212,6 +1313,10 @@ export interface EffectResolutionDraftView {
|
|
|
1212
1313
|
* Printed label of originating effect, retained for descendants.
|
|
1213
1314
|
*/
|
|
1214
1315
|
originLabel: string;
|
|
1316
|
+
/**
|
|
1317
|
+
* Exact reviewed text owner for the originating command.
|
|
1318
|
+
*/
|
|
1319
|
+
originText?: (EffectTextRefsView | null);
|
|
1215
1320
|
sourceCardId: number;
|
|
1216
1321
|
steps: EffectResolutionDraftStepView[];
|
|
1217
1322
|
}
|
|
@@ -1259,6 +1364,10 @@ export type EffectTargetView = ({
|
|
|
1259
1364
|
} | {
|
|
1260
1365
|
seat: Seat;
|
|
1261
1366
|
type: "leader";
|
|
1367
|
+
} | {
|
|
1368
|
+
leaderIndex: number;
|
|
1369
|
+
seat: Seat;
|
|
1370
|
+
type: "leaderByIndex";
|
|
1262
1371
|
} | {
|
|
1263
1372
|
seat: Seat;
|
|
1264
1373
|
type: "base";
|
|
@@ -1269,6 +1378,32 @@ export type EffectTargetView = ({
|
|
|
1269
1378
|
cardId: number;
|
|
1270
1379
|
type: "card";
|
|
1271
1380
|
});
|
|
1381
|
+
/**
|
|
1382
|
+
* Locale-neutral reviewed text that owns visible effect work.
|
|
1383
|
+
*
|
|
1384
|
+
* Clients resolve these catalog references in their selected locale. Empty
|
|
1385
|
+
* fields mean runtime work came from an unmigrated declaration; they never
|
|
1386
|
+
* authorize reconstructing English from a label. Explicit system messages
|
|
1387
|
+
* remain present in `shared_messages` instead of being mistaken for absence.
|
|
1388
|
+
*/
|
|
1389
|
+
export interface EffectTextRefsView {
|
|
1390
|
+
/**
|
|
1391
|
+
* Printed ability that created this resolution.
|
|
1392
|
+
*/
|
|
1393
|
+
ability?: (CardTextRef | null);
|
|
1394
|
+
/**
|
|
1395
|
+
* Nested printed effects enclosing this visible work, outermost first.
|
|
1396
|
+
*/
|
|
1397
|
+
effects?: CardTextRef[];
|
|
1398
|
+
/**
|
|
1399
|
+
* Printed mode selected before the current continuation, if any.
|
|
1400
|
+
*/
|
|
1401
|
+
selectedMode?: (CardTextRef | null);
|
|
1402
|
+
/**
|
|
1403
|
+
* Finite SDK messages explicitly declared for this outcome.
|
|
1404
|
+
*/
|
|
1405
|
+
sharedMessages?: SimulatorMessage[];
|
|
1406
|
+
}
|
|
1272
1407
|
export interface ErrorPayload {
|
|
1273
1408
|
code: string;
|
|
1274
1409
|
message: string;
|
|
@@ -1282,6 +1417,35 @@ export interface ErrorPayload {
|
|
|
1282
1417
|
*/
|
|
1283
1418
|
retryAtMs?: (number | null);
|
|
1284
1419
|
}
|
|
1420
|
+
/**
|
|
1421
|
+
* Reviewed printed ownership for inputs accepted by one event-play command.
|
|
1422
|
+
*
|
|
1423
|
+
* Target groups retain their native ownership/order. Mode references stay
|
|
1424
|
+
* position-aligned with submitted mode indexes, including legacy `None`
|
|
1425
|
+
* entries, so sparse bindings never shift a selected option's identity.
|
|
1426
|
+
*/
|
|
1427
|
+
export interface EventPlayInputProvenance {
|
|
1428
|
+
/**
|
|
1429
|
+
* One explicit Mode reference per submitted mode index, in command order.
|
|
1430
|
+
*/
|
|
1431
|
+
modeTextReferences?: (CardTextRef | null)[];
|
|
1432
|
+
/**
|
|
1433
|
+
* One compact ownership record per submitted target or capture pair, in
|
|
1434
|
+
* command order.
|
|
1435
|
+
*
|
|
1436
|
+
* This intentionally excludes target candidates and the selected target
|
|
1437
|
+
* itself. Event history needs printed ownership, while candidate lists can
|
|
1438
|
+
* reveal hidden resources and live board information.
|
|
1439
|
+
*/
|
|
1440
|
+
targetInputs?: EventPlayTargetInputProvenance[];
|
|
1441
|
+
}
|
|
1442
|
+
/**
|
|
1443
|
+
* Printed ownership for one submitted event target.
|
|
1444
|
+
*/
|
|
1445
|
+
export interface EventPlayTargetInputProvenance {
|
|
1446
|
+
purpose: TargetGroupPurpose;
|
|
1447
|
+
textReferences?: CardTextRef[];
|
|
1448
|
+
}
|
|
1285
1449
|
export interface ExploitOptionsView {
|
|
1286
1450
|
candidateUnitIds: number[];
|
|
1287
1451
|
max: number;
|
|
@@ -1692,8 +1856,21 @@ export type GameEvent = ("setupCompleted" | {
|
|
|
1692
1856
|
} | {
|
|
1693
1857
|
eventPlayed: {
|
|
1694
1858
|
cardId: number;
|
|
1859
|
+
/**
|
|
1860
|
+
* Exact reviewed owners for inputs supplied while playing this event.
|
|
1861
|
+
*
|
|
1862
|
+
* This is emitted only for migrated declarations. It captures the
|
|
1863
|
+
* play command before later event clauses can replace the active
|
|
1864
|
+
* prompt, which lets draft/history consumers retain the source input
|
|
1865
|
+
* rather than borrowing a descendant's text.
|
|
1866
|
+
*/
|
|
1867
|
+
inputProvenance?: (EventPlayInputProvenance | null);
|
|
1695
1868
|
playedWithSmuggle: boolean;
|
|
1696
1869
|
seat: Seat;
|
|
1870
|
+
/**
|
|
1871
|
+
* Exact printed event declaration exposed when this public event was played.
|
|
1872
|
+
*/
|
|
1873
|
+
text?: (EffectTextRefsView | null);
|
|
1697
1874
|
};
|
|
1698
1875
|
} | {
|
|
1699
1876
|
upgradePlayed: {
|
|
@@ -1785,6 +1962,17 @@ export type GameEvent = ("setupCompleted" | {
|
|
|
1785
1962
|
cardIds: number[];
|
|
1786
1963
|
seat: Seat;
|
|
1787
1964
|
};
|
|
1965
|
+
} | {
|
|
1966
|
+
cardsChosenFromDiscard: {
|
|
1967
|
+
/**
|
|
1968
|
+
* Printed card identities in command order; duplicates represent distinct copies.
|
|
1969
|
+
*/
|
|
1970
|
+
cardIds: number[];
|
|
1971
|
+
/**
|
|
1972
|
+
* Player who made the selection, which may differ from the discard-pile owner.
|
|
1973
|
+
*/
|
|
1974
|
+
seat: Seat;
|
|
1975
|
+
};
|
|
1788
1976
|
} | {
|
|
1789
1977
|
namedCardChosen: {
|
|
1790
1978
|
name: string;
|
|
@@ -1824,6 +2012,10 @@ export type GameEvent = ("setupCompleted" | {
|
|
|
1824
2012
|
source: ActionAbilitySource;
|
|
1825
2013
|
sourceCardId?: (number | null);
|
|
1826
2014
|
targets?: AbilityTarget[];
|
|
2015
|
+
/**
|
|
2016
|
+
* Exact public Action or Epic Action declaration that was used.
|
|
2017
|
+
*/
|
|
2018
|
+
text?: (EffectTextRefsView | null);
|
|
1827
2019
|
};
|
|
1828
2020
|
} | {
|
|
1829
2021
|
triggeredAbilityResolved: {
|
|
@@ -1831,6 +2023,10 @@ export type GameEvent = ("setupCompleted" | {
|
|
|
1831
2023
|
seat: Seat;
|
|
1832
2024
|
sourceCardId: number;
|
|
1833
2025
|
sourceUnitId?: (number | null);
|
|
2026
|
+
/**
|
|
2027
|
+
* Exact public trigger declaration and currently resolved effect.
|
|
2028
|
+
*/
|
|
2029
|
+
text?: (EffectTextRefsView | null);
|
|
1834
2030
|
window: AbilityWindow;
|
|
1835
2031
|
};
|
|
1836
2032
|
} | {
|
|
@@ -2106,6 +2302,11 @@ export interface GameState {
|
|
|
2106
2302
|
* Whether this snapshot belongs to a server-authorized Playground match.
|
|
2107
2303
|
*/
|
|
2108
2304
|
playground?: boolean;
|
|
2305
|
+
/**
|
|
2306
|
+
* Host-only Playground ability projection. Empty for normal matches and
|
|
2307
|
+
* while a resolution owns the command boundary.
|
|
2308
|
+
*/
|
|
2309
|
+
playgroundActionAbilities?: PlaygroundActionAbilityView[];
|
|
2109
2310
|
/**
|
|
2110
2311
|
* Printed cards supplied by every configured Playground deck.
|
|
2111
2312
|
*/
|
|
@@ -2353,7 +2554,12 @@ export interface KickLobbySpectatorRequest {
|
|
|
2353
2554
|
export interface LeaderActionView {
|
|
2354
2555
|
creditTokenCounts: number[];
|
|
2355
2556
|
label: string;
|
|
2557
|
+
modeChoice?: (ModeChoiceView | null);
|
|
2356
2558
|
targetGroups: TargetSelectionGroup[];
|
|
2559
|
+
/**
|
|
2560
|
+
* Reviewed declaration text for a migrated leader action.
|
|
2561
|
+
*/
|
|
2562
|
+
text?: (EffectTextRefsView | null);
|
|
2357
2563
|
}
|
|
2358
2564
|
export interface LeaderDeployActionView {
|
|
2359
2565
|
/**
|
|
@@ -2428,6 +2634,15 @@ export interface LeaderStateView {
|
|
|
2428
2634
|
flipped: boolean;
|
|
2429
2635
|
unitId?: (number | null);
|
|
2430
2636
|
}
|
|
2637
|
+
/**
|
|
2638
|
+
* Explicit departure from one direct Limited Event seat.
|
|
2639
|
+
*/
|
|
2640
|
+
export interface LeaveLimitedEventRequest {
|
|
2641
|
+
/**
|
|
2642
|
+
* Seat token returned by create or join.
|
|
2643
|
+
*/
|
|
2644
|
+
seatToken: string;
|
|
2645
|
+
}
|
|
2431
2646
|
export interface LeaveLobbyRequest {
|
|
2432
2647
|
playerToken: string;
|
|
2433
2648
|
}
|
|
@@ -2652,6 +2867,21 @@ export interface LimitedEventSeatView {
|
|
|
2652
2867
|
*/
|
|
2653
2868
|
seatIndex: number;
|
|
2654
2869
|
}
|
|
2870
|
+
/**
|
|
2871
|
+
* Server messages emitted by direct Limited Event sockets.
|
|
2872
|
+
*/
|
|
2873
|
+
export type LimitedEventServerMessage = ({
|
|
2874
|
+
payload: LimitedEventSnapshot;
|
|
2875
|
+
type: "snapshot";
|
|
2876
|
+
} | {
|
|
2877
|
+
payload: {
|
|
2878
|
+
nonce?: (string | null);
|
|
2879
|
+
};
|
|
2880
|
+
type: "pong";
|
|
2881
|
+
} | {
|
|
2882
|
+
payload: ErrorPayload;
|
|
2883
|
+
type: "error";
|
|
2884
|
+
});
|
|
2655
2885
|
/**
|
|
2656
2886
|
* Public snapshot of one limited event.
|
|
2657
2887
|
*/
|
|
@@ -2750,6 +2980,23 @@ export interface LimitedEventViewerView {
|
|
|
2750
2980
|
*/
|
|
2751
2981
|
seatIndex: number;
|
|
2752
2982
|
}
|
|
2983
|
+
/**
|
|
2984
|
+
* Limited-event timing controls owned by a lobby host.
|
|
2985
|
+
*/
|
|
2986
|
+
export interface LimitedLobbyTimerSettings {
|
|
2987
|
+
/**
|
|
2988
|
+
* Deck construction duration in seconds.
|
|
2989
|
+
*/
|
|
2990
|
+
deckBuildingSeconds: number;
|
|
2991
|
+
/**
|
|
2992
|
+
* Enables informational deck construction deadline displays.
|
|
2993
|
+
*/
|
|
2994
|
+
deckBuildingTimerEnabled: boolean;
|
|
2995
|
+
/**
|
|
2996
|
+
* Draft-only pick and review schedule. Sealed lobbies omit it.
|
|
2997
|
+
*/
|
|
2998
|
+
draft?: (DraftLobbyTimerSettings | null);
|
|
2999
|
+
}
|
|
2753
3000
|
/**
|
|
2754
3001
|
* One generated pack card plus collation metadata.
|
|
2755
3002
|
*/
|
|
@@ -2896,6 +3143,19 @@ export interface LobbyDeckSetPreview {
|
|
|
2896
3143
|
*/
|
|
2897
3144
|
leader?: (number | null);
|
|
2898
3145
|
}
|
|
3146
|
+
/**
|
|
3147
|
+
* Per-game clock values shared by constructed and Limited lobbies.
|
|
3148
|
+
*/
|
|
3149
|
+
export interface LobbyGameTimerSettings {
|
|
3150
|
+
/**
|
|
3151
|
+
* Seconds of reserve time granted to each player.
|
|
3152
|
+
*/
|
|
3153
|
+
reserveSeconds: number;
|
|
3154
|
+
/**
|
|
3155
|
+
* Seconds allocated to each normal turn before reserve is used.
|
|
3156
|
+
*/
|
|
3157
|
+
turnSeconds: number;
|
|
3158
|
+
}
|
|
2899
3159
|
export interface LobbyKickedPayload {
|
|
2900
3160
|
/**
|
|
2901
3161
|
* Player or spectator identity removed from this lobby.
|
|
@@ -3100,6 +3360,11 @@ export interface LobbySnapshot {
|
|
|
3100
3360
|
requiredPlayerCount: number;
|
|
3101
3361
|
spectators?: LobbySpectatorView[];
|
|
3102
3362
|
status: LobbyStatus;
|
|
3363
|
+
/**
|
|
3364
|
+
* Host-selected timer schedule for this lobby. Missing values identify
|
|
3365
|
+
* records created before configurable timers were introduced.
|
|
3366
|
+
*/
|
|
3367
|
+
timerSettings?: (LobbyTimerSettings | null);
|
|
3103
3368
|
visibility: LobbyVisibility;
|
|
3104
3369
|
}
|
|
3105
3370
|
export interface LobbySpectatorView {
|
|
@@ -3134,6 +3399,19 @@ export type LobbyStatus = ("waiting" | "started" | "closed");
|
|
|
3134
3399
|
export interface LobbySyncRequest {
|
|
3135
3400
|
playerToken: string;
|
|
3136
3401
|
}
|
|
3402
|
+
/**
|
|
3403
|
+
* Host-selected timing rules for a lobby and its started event or match.
|
|
3404
|
+
*/
|
|
3405
|
+
export interface LobbyTimerSettings {
|
|
3406
|
+
/**
|
|
3407
|
+
* Per-turn and reserve-bank settings for the final game.
|
|
3408
|
+
*/
|
|
3409
|
+
game: LobbyGameTimerSettings;
|
|
3410
|
+
/**
|
|
3411
|
+
* Limited-only draft and deck-construction settings.
|
|
3412
|
+
*/
|
|
3413
|
+
limited?: (LimitedLobbyTimerSettings | null);
|
|
3414
|
+
}
|
|
3137
3415
|
export type LobbyVisibility = ("private" | "public");
|
|
3138
3416
|
export interface LobbyWelcomePayload {
|
|
3139
3417
|
lobbyId: string;
|
|
@@ -3527,7 +3805,8 @@ export interface MatchSavePayload {
|
|
|
3527
3805
|
};
|
|
3528
3806
|
/**
|
|
3529
3807
|
* Wire-format version. Always [`MATCH_SAVE_VERSION`] for newly minted
|
|
3530
|
-
* payloads; restore
|
|
3808
|
+
* payloads; restore accepts every [`SUPPORTED_SAVE_VERSIONS`] entry and
|
|
3809
|
+
* rejects anything else.
|
|
3531
3810
|
*/
|
|
3532
3811
|
version: number;
|
|
3533
3812
|
}
|
|
@@ -3720,6 +3999,10 @@ export interface PendingAbilityAspectChoiceView {
|
|
|
3720
3999
|
*/
|
|
3721
4000
|
promptProvenance?: (PromptProvenanceView | null);
|
|
3722
4001
|
sourceCardId: number;
|
|
4002
|
+
/**
|
|
4003
|
+
* Reviewed printed text owning this chooser payload.
|
|
4004
|
+
*/
|
|
4005
|
+
text?: (EffectTextRefsView | null);
|
|
3723
4006
|
}
|
|
3724
4007
|
export interface PendingAbilityAttackChoiceView {
|
|
3725
4008
|
abilityId: number;
|
|
@@ -3748,6 +4031,10 @@ export interface PendingAbilityAttackChoiceView {
|
|
|
3748
4031
|
*/
|
|
3749
4032
|
revealedCardIds?: number[];
|
|
3750
4033
|
sourceCardId: number;
|
|
4034
|
+
/**
|
|
4035
|
+
* Reviewed printed text owning this chooser payload.
|
|
4036
|
+
*/
|
|
4037
|
+
text?: (EffectTextRefsView | null);
|
|
3751
4038
|
}
|
|
3752
4039
|
export interface PendingAbilityCardChoiceView {
|
|
3753
4040
|
abilityId: number;
|
|
@@ -3781,6 +4068,10 @@ export interface PendingAbilityCardChoiceView {
|
|
|
3781
4068
|
revealMode: HiddenCardChoiceMode;
|
|
3782
4069
|
searchedCards: CardInstanceView[];
|
|
3783
4070
|
sourceCardId: number;
|
|
4071
|
+
/**
|
|
4072
|
+
* Reviewed printed text owning this private chooser payload.
|
|
4073
|
+
*/
|
|
4074
|
+
text?: (EffectTextRefsView | null);
|
|
3784
4075
|
}
|
|
3785
4076
|
/**
|
|
3786
4077
|
* Coarse family of one pending ability: [`PendingAbilityKind`]'s variant
|
|
@@ -3814,11 +4105,22 @@ export interface PendingAbilityModeChoiceView {
|
|
|
3814
4105
|
max: number;
|
|
3815
4106
|
min: number;
|
|
3816
4107
|
optionLabels: string[];
|
|
4108
|
+
/**
|
|
4109
|
+
* Reviewed printed text for each matching mode option.
|
|
4110
|
+
*
|
|
4111
|
+
* Index aligns with `option_labels`; `None` denotes an engine/system
|
|
4112
|
+
* option rather than inferred prose.
|
|
4113
|
+
*/
|
|
4114
|
+
optionTextReferences?: (CardTextRef | null)[];
|
|
3817
4115
|
/**
|
|
3818
4116
|
* Parent/stage identity and interaction policy inherited from resolution.
|
|
3819
4117
|
*/
|
|
3820
4118
|
promptProvenance?: (PromptProvenanceView | null);
|
|
3821
4119
|
sourceCardId: number;
|
|
4120
|
+
/**
|
|
4121
|
+
* Reviewed printed text owning this chooser payload.
|
|
4122
|
+
*/
|
|
4123
|
+
text?: (EffectTextRefsView | null);
|
|
3822
4124
|
}
|
|
3823
4125
|
export interface PendingAbilityNameChoiceView {
|
|
3824
4126
|
abilityId: number;
|
|
@@ -3833,6 +4135,10 @@ export interface PendingAbilityNameChoiceView {
|
|
|
3833
4135
|
*/
|
|
3834
4136
|
promptProvenance?: (PromptProvenanceView | null);
|
|
3835
4137
|
sourceCardId: number;
|
|
4138
|
+
/**
|
|
4139
|
+
* Reviewed printed text owning this chooser payload.
|
|
4140
|
+
*/
|
|
4141
|
+
text?: (EffectTextRefsView | null);
|
|
3836
4142
|
}
|
|
3837
4143
|
/**
|
|
3838
4144
|
* One queued ability shown while a player-order choice is pending.
|
|
@@ -3845,6 +4151,11 @@ export interface PendingAbilityOrderAbilityView {
|
|
|
3845
4151
|
id: number;
|
|
3846
4152
|
label: string;
|
|
3847
4153
|
sourceCardId: number;
|
|
4154
|
+
/**
|
|
4155
|
+
* Reviewed text retained by the queued ability when its producer made it
|
|
4156
|
+
* public. The order prompt does not infer ownership from source cards.
|
|
4157
|
+
*/
|
|
4158
|
+
text?: (EffectTextRefsView | null);
|
|
3848
4159
|
}
|
|
3849
4160
|
/**
|
|
3850
4161
|
* Payload for [`PromptState::ChooseTriggeredAbilityPlayerOrder`].
|
|
@@ -3910,6 +4221,10 @@ export interface PendingAbilityView {
|
|
|
3910
4221
|
* Groups retain ordering, bounds, and structural purpose together.
|
|
3911
4222
|
*/
|
|
3912
4223
|
targetPlan: TargetSelectionPlanView;
|
|
4224
|
+
/**
|
|
4225
|
+
* Reviewed printed ability, selected mode, and current effect ownership.
|
|
4226
|
+
*/
|
|
4227
|
+
text?: (EffectTextRefsView | null);
|
|
3913
4228
|
/**
|
|
3914
4229
|
* Trigger window this ability was collected in.
|
|
3915
4230
|
*
|
|
@@ -3980,6 +4295,10 @@ export interface PendingDistributionView {
|
|
|
3980
4295
|
*/
|
|
3981
4296
|
promptProvenance?: (PromptProvenanceView | null);
|
|
3982
4297
|
sourceCardId: number;
|
|
4298
|
+
/**
|
|
4299
|
+
* Reviewed printed text owning this chooser payload.
|
|
4300
|
+
*/
|
|
4301
|
+
text?: (EffectTextRefsView | null);
|
|
3983
4302
|
title: string;
|
|
3984
4303
|
validTargets: DistributionTargetView[];
|
|
3985
4304
|
}
|
|
@@ -4057,13 +4376,54 @@ export type PlayCardZone = ("hand" | "resource" | "discardPile");
|
|
|
4057
4376
|
* One server-authoritative human-player room lifecycle event.
|
|
4058
4377
|
*/
|
|
4059
4378
|
export type PlayerPresenceStatus = ("joined" | "disconnected" | "reconnected" | "left");
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4379
|
+
/**
|
|
4380
|
+
* Playground-only action ability that may be executed without normal action
|
|
4381
|
+
* timing, usage, condition, or cost gates.
|
|
4382
|
+
*/
|
|
4383
|
+
export interface PlaygroundActionAbilityView {
|
|
4384
|
+
label: string;
|
|
4385
|
+
modeChoice?: (ModeChoiceView | null);
|
|
4386
|
+
seat: Seat;
|
|
4387
|
+
source: ActionAbilitySource;
|
|
4388
|
+
targetGroups: TargetSelectionGroup[];
|
|
4389
|
+
/**
|
|
4390
|
+
* Exact public Action or Epic Action declaration when migrated.
|
|
4391
|
+
*/
|
|
4392
|
+
text?: (EffectTextRefsView | null);
|
|
4393
|
+
}
|
|
4394
|
+
/**
|
|
4395
|
+
* One in-play card whose Playground-editable state may be set exactly.
|
|
4396
|
+
*
|
|
4397
|
+
* Every field is a target value rather than a delta, so a client that shows
|
|
4398
|
+
* current counts can submit what the board should look like instead of
|
|
4399
|
+
* reconstructing the sequence of adjustments that gets there. Anything the
|
|
4400
|
+
* engine derives — keywords, clone identity, controller, arena, card text —
|
|
4401
|
+
* stays out of this patch and remains read-only.
|
|
4402
|
+
*/
|
|
4403
|
+
export type PlaygroundCardStateChange = ({
|
|
4404
|
+
advantageTokens?: (number | null);
|
|
4405
|
+
damage?: (number | null);
|
|
4406
|
+
experienceTokens?: (number | null);
|
|
4407
|
+
/**
|
|
4408
|
+
* `true` readies the unit even while an effect forbids readying.
|
|
4409
|
+
*/
|
|
4410
|
+
ready?: (boolean | null);
|
|
4411
|
+
shieldTokens?: (number | null);
|
|
4412
|
+
type: "unit";
|
|
4413
|
+
unitId: number;
|
|
4414
|
+
} | {
|
|
4415
|
+
damage: number;
|
|
4416
|
+
seat: Seat;
|
|
4417
|
+
type: "base";
|
|
4418
|
+
});
|
|
4063
4419
|
/**
|
|
4064
4420
|
* Host-authorized raw scenario mutation for a Playground match.
|
|
4065
4421
|
*/
|
|
4066
4422
|
export type PlaygroundCommand = ({
|
|
4423
|
+
cardId: number;
|
|
4424
|
+
seat: Seat;
|
|
4425
|
+
type: "addResource";
|
|
4426
|
+
} | {
|
|
4067
4427
|
card_ids: number[];
|
|
4068
4428
|
seat: Seat;
|
|
4069
4429
|
type: "setDrawQueue";
|
|
@@ -4077,10 +4437,20 @@ export type PlaygroundCommand = ({
|
|
|
4077
4437
|
cardId: number;
|
|
4078
4438
|
seat: Seat;
|
|
4079
4439
|
type: "playCardForFree";
|
|
4440
|
+
} | {
|
|
4441
|
+
modeIndices: number[];
|
|
4442
|
+
seat: Seat;
|
|
4443
|
+
source: ActionAbilitySource;
|
|
4444
|
+
target?: (AbilityTarget | null);
|
|
4445
|
+
targets: AbilityTarget[];
|
|
4446
|
+
type: "executeActionAbility";
|
|
4080
4447
|
} | {
|
|
4081
4448
|
amount: number;
|
|
4082
4449
|
target: PlaygroundDamageTarget;
|
|
4083
4450
|
type: "setDamage";
|
|
4451
|
+
} | {
|
|
4452
|
+
change: PlaygroundCardStateChange;
|
|
4453
|
+
type: "changeCardState";
|
|
4084
4454
|
} | {
|
|
4085
4455
|
target: PlaygroundDefeatTarget;
|
|
4086
4456
|
type: "defeatCard";
|
|
@@ -4089,6 +4459,15 @@ export type PlaygroundCommand = ({
|
|
|
4089
4459
|
cardId: number;
|
|
4090
4460
|
ownerSeat: Seat;
|
|
4091
4461
|
type: "captureCard";
|
|
4462
|
+
} | {
|
|
4463
|
+
cardId: number;
|
|
4464
|
+
leaderIndex: number;
|
|
4465
|
+
seat: Seat;
|
|
4466
|
+
type: "swapLeader";
|
|
4467
|
+
} | {
|
|
4468
|
+
cardId: number;
|
|
4469
|
+
seat: Seat;
|
|
4470
|
+
type: "swapBase";
|
|
4092
4471
|
});
|
|
4093
4472
|
/**
|
|
4094
4473
|
* One board target whose damage counter Playground may set exactly.
|
|
@@ -4127,7 +4506,6 @@ export interface PlaygroundExportPayload {
|
|
|
4127
4506
|
export interface PrepareLobbyLimitedAiDecksRequest {
|
|
4128
4507
|
playerToken: string;
|
|
4129
4508
|
}
|
|
4130
|
-
export type PresenceFilter = ("Any" | "Required" | "Forbidden");
|
|
4131
4509
|
/**
|
|
4132
4510
|
* Stable parent/stage identity shared by every prompt opened during an effect.
|
|
4133
4511
|
*/
|
|
@@ -4391,6 +4769,9 @@ export interface RejectedPlayView {
|
|
|
4391
4769
|
cardInstanceId: number;
|
|
4392
4770
|
reason: string;
|
|
4393
4771
|
}
|
|
4772
|
+
/**
|
|
4773
|
+
* Restricts a target by controller relation to the effect source.
|
|
4774
|
+
*/
|
|
4394
4775
|
export type RelationFilter = ("Any" | "Friendly" | "Enemy");
|
|
4395
4776
|
/**
|
|
4396
4777
|
* HTTP request body for offering, accepting, or declining a rematch.
|
|
@@ -4532,10 +4913,6 @@ export interface SaveMatchRequest {
|
|
|
4532
4913
|
* Player slot in clockwise multiplayer order.
|
|
4533
4914
|
*/
|
|
4534
4915
|
export type Seat = ("one" | "two" | "three" | "four");
|
|
4535
|
-
/**
|
|
4536
|
-
* Relative multiplayer seat direction.
|
|
4537
|
-
*/
|
|
4538
|
-
export type SeatDirection = ("Left" | "Right");
|
|
4539
4916
|
/**
|
|
4540
4917
|
* Per-seat stance on a two-sided post-game offer.
|
|
4541
4918
|
*
|
|
@@ -4644,10 +5021,6 @@ export interface SeatState {
|
|
|
4644
5021
|
*/
|
|
4645
5022
|
sideboardCount: number;
|
|
4646
5023
|
}
|
|
4647
|
-
/**
|
|
4648
|
-
* How far back an `exclude_previously_selected` filter looks.
|
|
4649
|
-
*/
|
|
4650
|
-
export type SelectionScope = ("ThisEffect" | "ThisClause");
|
|
4651
5024
|
/**
|
|
4652
5025
|
* Public reason a match series ended.
|
|
4653
5026
|
*/
|
|
@@ -4831,6 +5204,65 @@ export interface SimulatorAvailabilityResponse {
|
|
|
4831
5204
|
*/
|
|
4832
5205
|
maintenance: MaintenanceStatus;
|
|
4833
5206
|
}
|
|
5207
|
+
/**
|
|
5208
|
+
* Typed engine-origin simulator copy with a stable SDK message id.
|
|
5209
|
+
*/
|
|
5210
|
+
export type SimulatorMessage = ({
|
|
5211
|
+
kind: "abilityUnavailable";
|
|
5212
|
+
} | {
|
|
5213
|
+
kind: "action.exhaust";
|
|
5214
|
+
} | {
|
|
5215
|
+
count: number;
|
|
5216
|
+
kind: "amount.resources";
|
|
5217
|
+
} | {
|
|
5218
|
+
kind: "choice.none";
|
|
5219
|
+
} | {
|
|
5220
|
+
kind: "chooseTarget";
|
|
5221
|
+
} | {
|
|
5222
|
+
kind: "chooseTargets";
|
|
5223
|
+
max: number;
|
|
5224
|
+
min: number;
|
|
5225
|
+
} | {
|
|
5226
|
+
kind: "controls.cancel";
|
|
5227
|
+
} | {
|
|
5228
|
+
kind: "controls.confirm";
|
|
5229
|
+
} | {
|
|
5230
|
+
kind: "controls.decline";
|
|
5231
|
+
} | {
|
|
5232
|
+
kind: "controls.done";
|
|
5233
|
+
} | {
|
|
5234
|
+
kind: "duration.phase";
|
|
5235
|
+
} | {
|
|
5236
|
+
count: number;
|
|
5237
|
+
kind: "duration.rounds";
|
|
5238
|
+
} | {
|
|
5239
|
+
keyword: string;
|
|
5240
|
+
kind: "keyword.name";
|
|
5241
|
+
} | {
|
|
5242
|
+
kind: "keyword.overwhelm";
|
|
5243
|
+
} | {
|
|
5244
|
+
kind: "keyword.raid";
|
|
5245
|
+
} | {
|
|
5246
|
+
kind: "keyword.sentinel";
|
|
5247
|
+
} | {
|
|
5248
|
+
kind: "legacyText";
|
|
5249
|
+
text: string;
|
|
5250
|
+
} | {
|
|
5251
|
+
kind: "targetPurpose.attachUpgrade";
|
|
5252
|
+
} | {
|
|
5253
|
+
kind: "targetPurpose.chooseTarget";
|
|
5254
|
+
} | {
|
|
5255
|
+
amount: number;
|
|
5256
|
+
kind: "targetPurpose.dealDamage";
|
|
5257
|
+
} | {
|
|
5258
|
+
amount: number;
|
|
5259
|
+
kind: "targetPurpose.giveShield";
|
|
5260
|
+
} | {
|
|
5261
|
+
amount: number;
|
|
5262
|
+
kind: "targetPurpose.heal";
|
|
5263
|
+
} | {
|
|
5264
|
+
kind: "timing.onceEachRound";
|
|
5265
|
+
});
|
|
4834
5266
|
/**
|
|
4835
5267
|
* One cursor-paginated admin report list page.
|
|
4836
5268
|
*/
|
|
@@ -4950,6 +5382,28 @@ export interface StartLobbyRequest {
|
|
|
4950
5382
|
export interface StartTournamentEventRequest {
|
|
4951
5383
|
playerToken: string;
|
|
4952
5384
|
}
|
|
5385
|
+
/**
|
|
5386
|
+
* Participant-authorized feedback for one completed Solo-versus-AI game.
|
|
5387
|
+
*/
|
|
5388
|
+
export interface SubmitAiGameFeedbackRequest {
|
|
5389
|
+
comments?: (string | null);
|
|
5390
|
+
gameNumber: number;
|
|
5391
|
+
/**
|
|
5392
|
+
* @minItems 1
|
|
5393
|
+
*/
|
|
5394
|
+
identities: [HistoryIdentityInput, ...(HistoryIdentityInput)[]];
|
|
5395
|
+
rating: AiGameFeedbackRating;
|
|
5396
|
+
}
|
|
5397
|
+
/**
|
|
5398
|
+
* Result of an idempotent AI-game-feedback submission.
|
|
5399
|
+
*/
|
|
5400
|
+
export interface SubmitAiGameFeedbackResponse {
|
|
5401
|
+
/**
|
|
5402
|
+
* `false` means this game had already received feedback.
|
|
5403
|
+
*/
|
|
5404
|
+
created: boolean;
|
|
5405
|
+
feedback: AiGameFeedback;
|
|
5406
|
+
}
|
|
4953
5407
|
export interface SubmitLobbyLimitedDeckRequest {
|
|
4954
5408
|
deck: DeckInput;
|
|
4955
5409
|
deckId?: (string | null);
|
|
@@ -5129,6 +5583,13 @@ export interface TargetSelectionGroup {
|
|
|
5129
5583
|
* effect requests targets but has no classifiable structural meaning.
|
|
5130
5584
|
*/
|
|
5131
5585
|
purpose?: (TargetGroupPurpose | null);
|
|
5586
|
+
/**
|
|
5587
|
+
* Reviewed printed text that produced this exact group.
|
|
5588
|
+
*
|
|
5589
|
+
* References are locale-neutral and preserve nested printed-effect
|
|
5590
|
+
* ownership without placing card prose in public match state.
|
|
5591
|
+
*/
|
|
5592
|
+
textReferences?: CardTextRef[];
|
|
5132
5593
|
validTargets: AbilityTarget[];
|
|
5133
5594
|
}
|
|
5134
5595
|
/**
|
|
@@ -5198,6 +5659,10 @@ export interface TournamentRoomPlayerView {
|
|
|
5198
5659
|
deck?: (LobbyDeckPreview | null);
|
|
5199
5660
|
deckReady: boolean;
|
|
5200
5661
|
host: boolean;
|
|
5662
|
+
/**
|
|
5663
|
+
* Whether server automation permanently controls this participant.
|
|
5664
|
+
*/
|
|
5665
|
+
isAi?: boolean;
|
|
5201
5666
|
joinedAtMs: number;
|
|
5202
5667
|
name: string;
|
|
5203
5668
|
playerId: string;
|
|
@@ -5359,7 +5824,6 @@ export interface UndoRespondMatchRequest {
|
|
|
5359
5824
|
*/
|
|
5360
5825
|
seatToken: string;
|
|
5361
5826
|
}
|
|
5362
|
-
export type UniquenessFilter = ("Any" | "Unique" | "NonUnique");
|
|
5363
5827
|
export type UnitAbilitySuppressionView = ("none" | "partial" | "full");
|
|
5364
5828
|
/**
|
|
5365
5829
|
* Mirror of one [`UnitState::copied_card`] value on the wire.
|
|
@@ -5378,242 +5842,6 @@ export interface UnitCopiedCardEntry {
|
|
|
5378
5842
|
unitInstanceId: number;
|
|
5379
5843
|
}
|
|
5380
5844
|
export type UnitDefeatCause = ("other" | "damage");
|
|
5381
|
-
export type UnitExtremum = ("LeastRemainingHp" | "MostPower" | "HighestPrintedCost");
|
|
5382
|
-
export interface UnitFilter {
|
|
5383
|
-
/**
|
|
5384
|
-
* Matches when any complete alternative filter matches.
|
|
5385
|
-
*
|
|
5386
|
-
* This keeps `one_of((unit_selector_a, unit_selector_b))` orthogonal
|
|
5387
|
-
* without flattening distinct restrictions into one lossy filter.
|
|
5388
|
-
*/
|
|
5389
|
-
alternatives?: UnitFilter[];
|
|
5390
|
-
arena?: (CardArena | null);
|
|
5391
|
-
attacked_base_this_phase: boolean;
|
|
5392
|
-
/**
|
|
5393
|
-
* Requires current control by one typed player independently from the
|
|
5394
|
-
* broad source-relative relation.
|
|
5395
|
-
*/
|
|
5396
|
-
controller?: (PlayerTargetPattern | null);
|
|
5397
|
-
/**
|
|
5398
|
-
* Marks a count whose Units must all be controlled by one other player.
|
|
5399
|
-
*
|
|
5400
|
-
* This is consumed by `Condition::AnotherPlayerControlsUnitsAtLeast`
|
|
5401
|
-
* before the filter reaches ordinary target matching.
|
|
5402
|
-
*/
|
|
5403
|
-
controller_is_another_player?: boolean;
|
|
5404
|
-
controller_is_remembered_player: boolean;
|
|
5405
|
-
dealt_base_damage_this_phase: boolean;
|
|
5406
|
-
/**
|
|
5407
|
-
* Matches a Unit in the arena opposite the resolving source Unit.
|
|
5408
|
-
*/
|
|
5409
|
-
different_arena_from_source?: boolean;
|
|
5410
|
-
different_aspect_from_remembered_card: boolean;
|
|
5411
|
-
/**
|
|
5412
|
-
* Requires legal attachment for Upgrade retained by preceding choice.
|
|
5413
|
-
*/
|
|
5414
|
-
eligible_for_remembered_upgrade?: boolean;
|
|
5415
|
-
exact_cost?: (number | null);
|
|
5416
|
-
/**
|
|
5417
|
-
* Only matches units whose cost equals context.remembered_unit_cost.
|
|
5418
|
-
*/
|
|
5419
|
-
exact_cost_same_as_remembered_cost?: boolean;
|
|
5420
|
-
exact_power_equal_ready_resources: boolean;
|
|
5421
|
-
exact_remaining_hp_equal_ready_resources: boolean;
|
|
5422
|
-
exact_title?: (string | null);
|
|
5423
|
-
/**
|
|
5424
|
-
* Matches any unit whose title is in this list. When combined with
|
|
5425
|
-
* required_traits_any, either a matching title or trait satisfies the
|
|
5426
|
-
* name/trait requirement.
|
|
5427
|
-
*/
|
|
5428
|
-
exact_titles_any: string[];
|
|
5429
|
-
/**
|
|
5430
|
-
* Excludes Unit hosting resolving source Upgrade.
|
|
5431
|
-
*/
|
|
5432
|
-
exclude_attached_unit?: boolean;
|
|
5433
|
-
/**
|
|
5434
|
-
* Excludes only the Unit that dealt the immediately preceding damage.
|
|
5435
|
-
*/
|
|
5436
|
-
exclude_previous_damage_dealer?: boolean;
|
|
5437
|
-
/**
|
|
5438
|
-
* Excludes every Unit already selected earlier in the resolving effect.
|
|
5439
|
-
*
|
|
5440
|
-
* Distinct from `require_other`, which only knows the source Unit and the
|
|
5441
|
-
* single most recent selection: a third sequential choice ("Give a third
|
|
5442
|
-
* friendly unit +1/+1") has to exclude both earlier picks.
|
|
5443
|
-
*/
|
|
5444
|
-
exclude_previously_selected?: (SelectionScope | null);
|
|
5445
|
-
/**
|
|
5446
|
-
* Excludes units retained by a preceding multi-target choice.
|
|
5447
|
-
*/
|
|
5448
|
-
exclude_remembered_units?: boolean;
|
|
5449
|
-
excluded_aspects: string[];
|
|
5450
|
-
/**
|
|
5451
|
-
* Excludes units currently controlled by one typed player.
|
|
5452
|
-
*/
|
|
5453
|
-
excluded_controller?: (PlayerTargetPattern | null);
|
|
5454
|
-
/**
|
|
5455
|
-
* Excludes units with any listed canonical title.
|
|
5456
|
-
*/
|
|
5457
|
-
excluded_titles?: string[];
|
|
5458
|
-
excluded_traits: string[];
|
|
5459
|
-
/**
|
|
5460
|
-
* Restricts iteration to Units exploited while playing resolving source card.
|
|
5461
|
-
*/
|
|
5462
|
-
exploited_to_play_source?: boolean;
|
|
5463
|
-
extremum?: (UnitExtremum | null);
|
|
5464
|
-
max_cost?: (number | null);
|
|
5465
|
-
/**
|
|
5466
|
-
* Only matches units whose printed cost is strictly less than the amount of
|
|
5467
|
-
* combat damage dealt to a base this attack
|
|
5468
|
-
* (`context.combat_damage_dealt_to_base`). Shin Hati ASH 51762.
|
|
5469
|
-
*/
|
|
5470
|
-
max_cost_less_than_combat_damage_to_base?: boolean;
|
|
5471
|
-
/**
|
|
5472
|
-
* Filters out units whose cost exceeds the cost stored in context.remembered_unit_cost.
|
|
5473
|
-
*/
|
|
5474
|
-
max_cost_same_or_less_than_remembered_cost: boolean;
|
|
5475
|
-
/**
|
|
5476
|
-
* Filters out units whose printed cost exceeds resources paid to play the
|
|
5477
|
-
* source card for current trigger.
|
|
5478
|
-
*/
|
|
5479
|
-
max_cost_same_or_less_than_resources_paid_to_play?: boolean;
|
|
5480
|
-
max_cost_same_or_less_than_source: boolean;
|
|
5481
|
-
max_power?: (number | null);
|
|
5482
|
-
/**
|
|
5483
|
-
* Dynamic alternative to a fixed `max_power`.
|
|
5484
|
-
*/
|
|
5485
|
-
max_power_dynamic?: (DynamicPowerLimit | null);
|
|
5486
|
-
/**
|
|
5487
|
-
* Only matches a unit whose power is strictly less than at least one
|
|
5488
|
-
* friendly unit's power (Ahsoka Tano 51727 action target restriction).
|
|
5489
|
-
*/
|
|
5490
|
-
max_power_less_than_any_friendly?: boolean;
|
|
5491
|
-
/**
|
|
5492
|
-
* Only matches Units with strictly less power than remembered Unit.
|
|
5493
|
-
*/
|
|
5494
|
-
max_power_less_than_remembered_power?: boolean;
|
|
5495
|
-
max_power_less_than_source: boolean;
|
|
5496
|
-
/**
|
|
5497
|
-
* Filters out units whose power exceeds the power stored in context.remembered_unit_power.
|
|
5498
|
-
*/
|
|
5499
|
-
max_power_same_or_less_than_remembered_power: boolean;
|
|
5500
|
-
max_remaining_hp?: (number | null);
|
|
5501
|
-
max_remaining_hp_less_than_source: boolean;
|
|
5502
|
-
min_cost?: (number | null);
|
|
5503
|
-
/**
|
|
5504
|
-
* Only matches units whose cost is strictly greater than the cost stored in
|
|
5505
|
-
* context.remembered_unit_cost (e.g. Reckless Sacrifice's "a unit that costs
|
|
5506
|
-
* more than the discarded card").
|
|
5507
|
-
*/
|
|
5508
|
-
min_cost_greater_than_remembered_cost?: boolean;
|
|
5509
|
-
min_hp?: (number | null);
|
|
5510
|
-
min_power?: (number | null);
|
|
5511
|
-
min_remaining_hp?: (number | null);
|
|
5512
|
-
/**
|
|
5513
|
-
* Only matches Units with at least this many distinct active keywords.
|
|
5514
|
-
*/
|
|
5515
|
-
minimum_distinct_keywords?: (number | null);
|
|
5516
|
-
non_leader: boolean;
|
|
5517
|
-
/**
|
|
5518
|
-
* Requires canonical ownership by one typed player independently from
|
|
5519
|
-
* current controller relation.
|
|
5520
|
-
*/
|
|
5521
|
-
owner?: (PlayerTargetPattern | null);
|
|
5522
|
-
relation: RelationFilter;
|
|
5523
|
-
/**
|
|
5524
|
-
* Only matches units that attacked during the current phase.
|
|
5525
|
-
*/
|
|
5526
|
-
require_attacked_this_phase?: boolean;
|
|
5527
|
-
require_damaged: boolean;
|
|
5528
|
-
/**
|
|
5529
|
-
* Only matches units that entered play this phase (UnitState::entered_this_phase).
|
|
5530
|
-
*/
|
|
5531
|
-
require_entered_this_phase: boolean;
|
|
5532
|
-
require_exhausted: boolean;
|
|
5533
|
-
/**
|
|
5534
|
-
* Only matches units that have at least one keyword (printed or granted).
|
|
5535
|
-
*/
|
|
5536
|
-
require_has_keyword?: boolean;
|
|
5537
|
-
/**
|
|
5538
|
-
* Only matches Units healed at least once during current phase.
|
|
5539
|
-
*/
|
|
5540
|
-
require_healed_this_phase?: boolean;
|
|
5541
|
-
/**
|
|
5542
|
-
* Restrict to leader units (deployed leaders). Set by "a friendly leader"
|
|
5543
|
-
* targets, e.g. Mando's N-1 Starfighter (ASH 52696).
|
|
5544
|
-
*/
|
|
5545
|
-
require_leader?: boolean;
|
|
5546
|
-
/**
|
|
5547
|
-
* Filters out units that have an Experience token attached.
|
|
5548
|
-
*/
|
|
5549
|
-
require_no_experience: boolean;
|
|
5550
|
-
require_no_pilot: boolean;
|
|
5551
|
-
/**
|
|
5552
|
-
* Filters out units that attacked earlier this phase.
|
|
5553
|
-
*/
|
|
5554
|
-
require_not_attacked_this_phase: boolean;
|
|
5555
|
-
/**
|
|
5556
|
-
* Only matches Units that did not enter play during current phase.
|
|
5557
|
-
*/
|
|
5558
|
-
require_not_entered_this_phase?: boolean;
|
|
5559
|
-
/**
|
|
5560
|
-
* Only matches Units that did not enter play during current round.
|
|
5561
|
-
*/
|
|
5562
|
-
require_not_entered_this_round?: boolean;
|
|
5563
|
-
require_other: boolean;
|
|
5564
|
-
require_ready: boolean;
|
|
5565
|
-
/**
|
|
5566
|
-
* Only matches units that have at least one Shield token attached.
|
|
5567
|
-
*/
|
|
5568
|
-
require_shield_token?: boolean;
|
|
5569
|
-
require_undamaged: boolean;
|
|
5570
|
-
required_aspects: string[];
|
|
5571
|
-
required_aspects_any: string[];
|
|
5572
|
-
required_card_or_upgrade_traits_any: string[];
|
|
5573
|
-
required_keywords_any: string[];
|
|
5574
|
-
required_traits: string[];
|
|
5575
|
-
required_traits_any: string[];
|
|
5576
|
-
requires_chosen_aspect: boolean;
|
|
5577
|
-
/**
|
|
5578
|
-
* Matches the arena occupied by Unit selected earlier in this ability.
|
|
5579
|
-
*/
|
|
5580
|
-
same_arena_as_remembered_unit?: boolean;
|
|
5581
|
-
same_arena_as_source: boolean;
|
|
5582
|
-
same_name_as_remembered_card: boolean;
|
|
5583
|
-
/**
|
|
5584
|
-
* Matches Units with same name as Unit stored by preceding target choice.
|
|
5585
|
-
*/
|
|
5586
|
-
same_name_as_remembered_unit?: boolean;
|
|
5587
|
-
/**
|
|
5588
|
-
* Requires the selected units' printed costs to be at most this value.
|
|
5589
|
-
*/
|
|
5590
|
-
selected_max_combined_cost?: (number | null);
|
|
5591
|
-
/**
|
|
5592
|
-
* Requires selected Units' current combined power to be at most this value.
|
|
5593
|
-
*/
|
|
5594
|
-
selected_max_combined_power?: (number | null);
|
|
5595
|
-
/**
|
|
5596
|
-
* Requires the selected units' combined remaining HP to be at most this
|
|
5597
|
-
* value (Pre Vizsla ASH 51947: "with a total of N or less remaining HP").
|
|
5598
|
-
*/
|
|
5599
|
-
selected_max_combined_remaining_hp?: (number | null);
|
|
5600
|
-
/**
|
|
5601
|
-
* Requires every selected unit in a multi-unit selection to share an arena.
|
|
5602
|
-
*/
|
|
5603
|
-
selected_same_arena?: boolean;
|
|
5604
|
-
/**
|
|
5605
|
-
* Requires every selected Unit to share at least one Trait.
|
|
5606
|
-
*/
|
|
5607
|
-
selected_share_trait?: boolean;
|
|
5608
|
-
shares_aspect_with_context_unit: boolean;
|
|
5609
|
-
/**
|
|
5610
|
-
* Requires the target to share a trait with a leader card controlled by the source player.
|
|
5611
|
-
*/
|
|
5612
|
-
shares_trait_with_friendly_leader: boolean;
|
|
5613
|
-
token_filter: PresenceFilter;
|
|
5614
|
-
uniqueness_filter: UniquenessFilter;
|
|
5615
|
-
upgrade_filter: PresenceFilter;
|
|
5616
|
-
}
|
|
5617
5845
|
export interface UnitStateView {
|
|
5618
5846
|
/**
|
|
5619
5847
|
* Whether the unit currently loses all or most of its abilities.
|
|
@@ -5744,13 +5972,49 @@ export interface UpdateLobbySettingsRequest {
|
|
|
5744
5972
|
* Replacement BO1/BO3 length for one-deck Duel lobbies.
|
|
5745
5973
|
*/
|
|
5746
5974
|
bestOfMatches?: (number | null);
|
|
5975
|
+
/**
|
|
5976
|
+
* Clears the deterministic match seed, restoring random matches.
|
|
5977
|
+
*/
|
|
5978
|
+
clearMatchSeed?: boolean;
|
|
5979
|
+
/**
|
|
5980
|
+
* Clears the deterministic Limited pool seed, restoring random pools.
|
|
5981
|
+
*/
|
|
5982
|
+
clearPackSeed?: boolean;
|
|
5983
|
+
/**
|
|
5984
|
+
* Replacement Chaos Draft booster sequence.
|
|
5985
|
+
*/
|
|
5986
|
+
draftRounds?: (DraftRoundConfig[] | null);
|
|
5747
5987
|
gameTimerEnabled?: (boolean | null);
|
|
5748
5988
|
/**
|
|
5749
5989
|
* Replacement constructed format for one-deck Duel lobbies.
|
|
5750
5990
|
*/
|
|
5751
5991
|
matchFormat?: (ConstructedFormat | null);
|
|
5992
|
+
/**
|
|
5993
|
+
* Replacement deterministic match seed.
|
|
5994
|
+
*/
|
|
5995
|
+
matchSeed?: (string | null);
|
|
5996
|
+
/**
|
|
5997
|
+
* Replacement deterministic Limited pool seed.
|
|
5998
|
+
*/
|
|
5999
|
+
packSeed?: (string | null);
|
|
6000
|
+
/**
|
|
6001
|
+
* Enables or disables draft pick auto-selection countdowns.
|
|
6002
|
+
*/
|
|
6003
|
+
pickTimerEnabled?: (boolean | null);
|
|
5752
6004
|
playerCount?: (number | null);
|
|
5753
6005
|
playerToken: string;
|
|
6006
|
+
/**
|
|
6007
|
+
* Replacement Sealed booster count.
|
|
6008
|
+
*/
|
|
6009
|
+
sealedPackCount?: (number | null);
|
|
6010
|
+
/**
|
|
6011
|
+
* Replacement Limited set code for sealed and normal Draft lobbies.
|
|
6012
|
+
*/
|
|
6013
|
+
setCode?: (string | null);
|
|
6014
|
+
/**
|
|
6015
|
+
* Replaces timer durations for the final match and Limited event.
|
|
6016
|
+
*/
|
|
6017
|
+
timerSettings?: (LobbyTimerSettings | null);
|
|
5754
6018
|
/**
|
|
5755
6019
|
* Replacement legality profile for Trilogy lobbies.
|
|
5756
6020
|
*/
|