Extend early recruit rewards

This commit is contained in:
2026-07-04 14:36:42 +09:00
parent 18bfe5fbcc
commit 836b53586e
3 changed files with 75 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
import { equipmentExpToNext, equipmentSlots } from '../data/battleItems';
import type { BattleBond, UnitData } from '../data/scenario';
import { campaignRecruitUnits, type BattleBond, type UnitData } from '../data/scenario';
import { normalizeSortieFormationAssignments, type SortieFormationAssignments } from '../data/sortieDeployment';
export type BattleObjectiveSnapshot = {
@@ -397,6 +397,8 @@ export type CampaignSaveSlotSummary = {
let campaignState: CampaignState | undefined;
const campaignRecruitUnitById = new Map(campaignRecruitUnits.map((unit) => [unit.id, unit]));
export function createInitialCampaignState(): CampaignState {
return {
version: 1,
@@ -522,7 +524,10 @@ export function setFirstBattleReport(report: FirstBattleReport) {
state.gold = Math.max(0, state.gold - (previousSettlement?.rewardGold ?? 0) + reportClone.rewardGold);
const alliedReportUnits = reportClone.units.filter((unit) => unit.faction === 'ally');
const recruitUnitIds = new Set(reportClone.campaignRewards?.recruits.map((recruit) => recruit.unitId) ?? []);
const recruitedUnits = reportClone.units.filter((unit) => unit.faction === 'ally' && recruitUnitIds.has(unit.id));
const reportUnitById = new Map(reportClone.units.filter((unit) => unit.faction === 'ally').map((unit) => [unit.id, unit]));
const recruitedUnits = [...recruitUnitIds]
.map((unitId) => reportUnitById.get(unitId) ?? campaignRecruitUnitById.get(unitId))
.filter((unit): unit is UnitData => Boolean(unit));
state.roster = mergeRosterProgress(state.roster, [...alliedReportUnits, ...recruitedUnits]);
state.bonds = reportClone.bonds.map(cloneBondSnapshot);
const reserveTraining = previousSettlement || reportClone.outcome !== 'victory'