Connect battle rewards to campaign equipment
This commit is contained in:
@@ -287,6 +287,8 @@ export type CampaignBattleSettlement = {
|
||||
completedAt: string;
|
||||
};
|
||||
|
||||
export type CampaignSortieItemAssignments = Record<string, Record<string, number>>;
|
||||
|
||||
export type CampaignState = {
|
||||
version: 1;
|
||||
updatedAt: string;
|
||||
@@ -298,6 +300,7 @@ export type CampaignState = {
|
||||
inventory: Record<string, number>;
|
||||
selectedSortieUnitIds: string[];
|
||||
sortieFormationAssignments: SortieFormationAssignments;
|
||||
sortieItemAssignments: CampaignSortieItemAssignments;
|
||||
reserveTrainingFocus: CampaignReserveTrainingFocusId;
|
||||
completedCampDialogues: string[];
|
||||
completedCampVisits: string[];
|
||||
@@ -401,6 +404,7 @@ export function createInitialCampaignState(): CampaignState {
|
||||
inventory: {},
|
||||
selectedSortieUnitIds: [],
|
||||
sortieFormationAssignments: {},
|
||||
sortieItemAssignments: {},
|
||||
reserveTrainingFocus: defaultCampaignReserveTrainingFocusId,
|
||||
completedCampDialogues: [],
|
||||
completedCampVisits: [],
|
||||
@@ -690,6 +694,7 @@ function normalizeCampaignState(state: CampaignState): CampaignState {
|
||||
normalized.inventory = { ...(normalized.inventory ?? {}) };
|
||||
normalized.selectedSortieUnitIds = [...new Set(normalized.selectedSortieUnitIds ?? [])];
|
||||
normalized.sortieFormationAssignments = normalizeSortieFormationAssignments(normalized.sortieFormationAssignments);
|
||||
normalized.sortieItemAssignments = normalizeSortieItemAssignments(normalized.sortieItemAssignments);
|
||||
normalized.reserveTrainingFocus = normalizeReserveTrainingFocusId(normalized.reserveTrainingFocus);
|
||||
normalized.battleHistory = normalized.battleHistory ?? {};
|
||||
if (normalized.firstBattleReport) {
|
||||
@@ -698,6 +703,23 @@ function normalizeCampaignState(state: CampaignState): CampaignState {
|
||||
return normalized;
|
||||
}
|
||||
|
||||
function normalizeSortieItemAssignments(assignments?: CampaignSortieItemAssignments) {
|
||||
return Object.entries(assignments ?? {}).reduce<CampaignSortieItemAssignments>((next, [unitId, stocks]) => {
|
||||
const unitStocks = Object.entries(stocks ?? {}).reduce<Record<string, number>>((nextStocks, [itemId, amount]) => {
|
||||
const normalizedAmount = Math.floor(Number(amount));
|
||||
if (itemId && normalizedAmount > 0) {
|
||||
nextStocks[itemId] = normalizedAmount;
|
||||
}
|
||||
return nextStocks;
|
||||
}, {});
|
||||
|
||||
if (Object.keys(unitStocks).length > 0) {
|
||||
next[unitId] = unitStocks;
|
||||
}
|
||||
return next;
|
||||
}, {});
|
||||
}
|
||||
|
||||
function normalizeReserveTrainingFocusId(focusId?: string): CampaignReserveTrainingFocusId {
|
||||
return campaignReserveTrainingFocusDefinitions.some((focus) => focus.id === focusId)
|
||||
? focusId as CampaignReserveTrainingFocusId
|
||||
|
||||
Reference in New Issue
Block a user