Stabilize save retry flow

This commit is contained in:
2026-06-27 07:00:18 +09:00
parent c49a344d4d
commit 88207c3b6f
4 changed files with 240 additions and 3 deletions

View File

@@ -2789,8 +2789,8 @@ function applyScenarioAllyReadiness(unit: UnitData) {
function configureBattleScenario(scenario: BattleScenarioDefinition) {
battleScenario = scenario;
battleMap = scenario.map;
battleUnits = scenario.units;
battleBonds = scenario.bonds;
battleUnits = scenario.units.map(cloneUnitData);
battleBonds = scenario.bonds.map(cloneBattleBond);
battleSaveStorageKey = `heros-web:battle:${scenario.id}`;
initialBattleUnits = battleUnits.map(cloneUnitData);
initialBattleBonds = battleBonds.map(cloneBattleBond);

View File

@@ -475,7 +475,15 @@ export function setFirstBattleReport(report: FirstBattleReport) {
const stepRule = campaignBattleSteps[battleId] ?? campaignBattleSteps['first-battle-zhuo-commandery'];
const victoryStep: CampaignStep = stepRule.victory;
const retryStep: CampaignStep = stepRule.retry;
state.step = reportClone.outcome === 'victory' ? victoryStep : retryStep;
if (reportClone.outcome !== 'victory') {
state.step = retryStep;
state.latestBattleId = battleId;
state.updatedAt = new Date().toISOString();
persistCampaignState(state);
return;
}
state.step = victoryStep;
state.gold = Math.max(0, state.gold - (previousSettlement?.rewardGold ?? 0) + reportClone.rewardGold);
state.roster = mergeRosterProgress(state.roster, reportClone.units.filter((unit) => unit.faction === 'ally'));
state.bonds = reportClone.bonds.map(cloneBondSnapshot);