Filter invalid campaign reward recruits
This commit is contained in:
@@ -1084,7 +1084,7 @@ function normalizeCampaignBattleSettlement(value: unknown): CampaignBattleSettle
|
||||
outcome: settlement.outcome,
|
||||
rewardGold: normalizeNonNegativeInteger(settlement.rewardGold),
|
||||
itemRewards: uniqueStrings(settlement.itemRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(settlement.campaignRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(settlement.campaignRewards, battleId),
|
||||
objectives: normalizeLimitedArray(settlement.objectives, normalizeBattleObjectiveSnapshot, maxCampaignBattleObjectiveEntries),
|
||||
units: normalizeLimitedArray(settlement.units, normalizeCampaignUnitProgressSnapshot, maxCampaignBattleUnitEntries),
|
||||
bonds: normalizeLimitedArray(settlement.bonds, normalizeCampaignBondProgressSnapshot, maxCampaignBattleBondEntries),
|
||||
@@ -1291,7 +1291,8 @@ function normalizeFirstBattleReport(report: unknown): FirstBattleReport | undefi
|
||||
mvp: normalizeCampMvpSnapshot(report.mvp),
|
||||
itemRewards: uniqueStrings(report.itemRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(
|
||||
isPlainObject(report.campaignRewards) ? report.campaignRewards as CampaignRewardSnapshot : undefined
|
||||
isPlainObject(report.campaignRewards) ? report.campaignRewards as CampaignRewardSnapshot : undefined,
|
||||
battleId
|
||||
),
|
||||
completedCampDialogues: uniqueStrings(report.completedCampDialogues),
|
||||
completedCampVisits: uniqueStrings(report.completedCampVisits),
|
||||
@@ -1506,7 +1507,7 @@ function createBattleSettlement(report: FirstBattleReport, reserveTraining: Camp
|
||||
outcome: report.outcome,
|
||||
rewardGold: report.rewardGold,
|
||||
itemRewards: [...report.itemRewards],
|
||||
campaignRewards: cloneCampaignRewardSnapshot(report.campaignRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(report.campaignRewards, report.battleId),
|
||||
objectives: report.objectives.map((objective) => ({ ...objective })),
|
||||
units: report.units
|
||||
.filter((unit) => unit.faction === 'ally')
|
||||
@@ -1655,12 +1656,12 @@ function cloneReport(report: FirstBattleReport): FirstBattleReport {
|
||||
cloned.completedCampDialogues = uniqueStrings(cloned.completedCampDialogues);
|
||||
cloned.completedCampVisits = uniqueStrings(cloned.completedCampVisits);
|
||||
if (cloned.campaignRewards) {
|
||||
cloned.campaignRewards = cloneCampaignRewardSnapshot(cloned.campaignRewards);
|
||||
cloned.campaignRewards = cloneCampaignRewardSnapshot(cloned.campaignRewards, cloned.battleId);
|
||||
}
|
||||
return cloned;
|
||||
}
|
||||
|
||||
function cloneCampaignRewardSnapshot(rewards?: CampaignRewardSnapshot): CampaignRewardSnapshot | undefined {
|
||||
function cloneCampaignRewardSnapshot(rewards?: CampaignRewardSnapshot, battleId?: string): CampaignRewardSnapshot | undefined {
|
||||
if (!rewards) {
|
||||
return undefined;
|
||||
}
|
||||
@@ -1678,7 +1679,7 @@ function cloneCampaignRewardSnapshot(rewards?: CampaignRewardSnapshot): Campaign
|
||||
unitId: normalizeKeyString(recruit.unitId),
|
||||
name: normalizeDisplayString(recruit.name)
|
||||
}))
|
||||
.filter((recruit) => recruit.unitId && recruit.name),
|
||||
.filter((recruit) => recruit.unitId && recruit.name && isKnownCampaignRewardRecruit(recruit.unitId, battleId)),
|
||||
(recruit) => recruit.unitId
|
||||
)
|
||||
.slice(0, maxCampaignStringListEntries),
|
||||
@@ -1697,6 +1698,18 @@ function cloneCampaignRewardSnapshot(rewards?: CampaignRewardSnapshot): Campaign
|
||||
};
|
||||
}
|
||||
|
||||
function isKnownCampaignRewardRecruit(unitId: string, battleId?: string) {
|
||||
if (campaignRecruitUnitById.has(unitId)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!battleId || !(battleId in battleScenarios)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return battleScenarios[battleId as BattleScenarioId].units.some((unit) => unit.faction === 'ally' && unit.id === unitId);
|
||||
}
|
||||
|
||||
function cloneUnit(unit: UnitData): UnitData {
|
||||
return JSON.parse(JSON.stringify(unit)) as UnitData;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user