diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index d708edc..ca3cc8a 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -15119,6 +15119,7 @@ export class CampScene extends Phaser.Scene { private normalizedSortieUnitIds(candidateIds?: string[]) { const allies = this.sortieAllies(); + const alliesById = new Map(allies.map((unit) => [unit.id, unit])); const allyIds = new Set(allies.map((unit) => unit.id)); const maxUnits = this.sortieMaxUnits(); const useDefaultSelection = !candidateIds || candidateIds.length === 0; @@ -15131,11 +15132,24 @@ export class CampScene extends Phaser.Scene { }); if (useDefaultSelection) { - allies.slice(0, maxUnits).forEach((unit) => candidateSet.add(unit.id)); + const rule = this.nextSortieRule(); + const addDefaultCandidate = (unitId: string) => { + if (allyIds.has(unitId)) { + candidateSet.add(unitId); + } + }; + rule.recommended.forEach((entry) => addDefaultCandidate(entry.unitId)); + (rule.recommendedClasses ?? []).forEach((entry) => { + allies.filter((unit) => entry.classKeys.includes(unit.classKey)).forEach((unit) => addDefaultCandidate(unit.id)); + }); + allies.forEach((unit) => addDefaultCandidate(unit.id)); } const required = allies.filter((unit) => requiredSortieUnitIds.has(unit.id)).map((unit) => unit.id); - const optional = allies + const optionalSource = useDefaultSelection + ? [...candidateSet].map((unitId) => alliesById.get(unitId)).filter((unit): unit is UnitData => Boolean(unit)) + : allies; + const optional = optionalSource .filter((unit) => !requiredSortieUnitIds.has(unit.id) && candidateSet.has(unit.id)) .slice(0, Math.max(0, maxUnits - required.length)) .map((unit) => unit.id);