fix: 전투 시뮬레이터 기본 특기 계약 복원
Ref와 같이 시나리오 defaultSpecialDomestic을 공격자와 수비자 payload에 적용한다. 기본 5병종 5x5 고정 seed Ref 차등 회귀와 API·Chromium 회귀를 추가한다.
This commit is contained in:
@@ -31,6 +31,16 @@ const resolveNumber = (record: Record<string, unknown>, keys: string[], fallback
|
||||
return fallback;
|
||||
};
|
||||
|
||||
const resolveOptionalString = (record: Record<string, unknown>, keys: string[]): string | null => {
|
||||
for (const key of keys) {
|
||||
const value = record[key];
|
||||
if (typeof value === 'string' && value.trim().length > 0) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const resolveUnitSetName = (worldState: WorldStateRow, fallback: string): string => {
|
||||
const config = asRecord(worldState.config);
|
||||
const environment = asRecord(config.environment ?? config.map);
|
||||
@@ -88,6 +98,7 @@ export interface BattleSimEnvironment {
|
||||
config: WarEngineConfig;
|
||||
startYear: number;
|
||||
scenarioEffect: ScenarioEffectKey | null;
|
||||
defaultSpecialDomestic: string;
|
||||
}
|
||||
|
||||
export const buildBattleSimSeedBase = (request: Pick<BattleSimRequestPayload, 'seed'>): string | null =>
|
||||
@@ -133,6 +144,7 @@ export const buildBattleSimEnvironment = async (
|
||||
config,
|
||||
startYear: resolveStartYear(worldState),
|
||||
scenarioEffect: normalizeScenarioEffect(scenarioEnvironment.scenarioEffect),
|
||||
defaultSpecialDomestic: resolveOptionalString(constValues, ['defaultSpecialDomestic']) ?? 'None',
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@ export const battleRouter = router({
|
||||
config: environment.config,
|
||||
unitSet: environment.unitSet,
|
||||
scenarioEffect: environment.scenarioEffect,
|
||||
defaultSpecialDomestic: environment.defaultSpecialDomestic,
|
||||
nationTypes: traits.nationTypes,
|
||||
eventDomesticTraits: traits.eventDomesticTraits,
|
||||
warTraits: traits.warTraits,
|
||||
|
||||
@@ -319,7 +319,10 @@ describe('battle router orchestration', () => {
|
||||
currentYear: 200,
|
||||
currentMonth: 1,
|
||||
tickSeconds: 600,
|
||||
config: { environment: { scenarioEffect: 'event_MoreEffect' } },
|
||||
config: {
|
||||
environment: { scenarioEffect: 'event_MoreEffect' },
|
||||
const: { defaultSpecialDomestic: 'che_event_신산' },
|
||||
},
|
||||
meta: { scenarioMeta: { startYear: 180 } },
|
||||
updatedAt: new Date('2026-01-01T00:00:00Z'),
|
||||
};
|
||||
@@ -339,6 +342,7 @@ describe('battle router orchestration', () => {
|
||||
expect(context).toMatchObject({
|
||||
world: { startYear: 180, currentYear: 200, currentMonth: 1 },
|
||||
scenarioEffect: 'event_MoreEffect',
|
||||
defaultSpecialDomestic: 'che_event_신산',
|
||||
config: { armPerPhase: 500, maxTrainByWar: 110, maxAtmosByWar: 150 },
|
||||
});
|
||||
expect(context.unitSet.crewTypes?.[0]).toMatchObject({
|
||||
|
||||
Reference in New Issue
Block a user