Normalize campaign reward labels
This commit is contained in:
@@ -906,6 +906,17 @@ function uniqueStrings(value: unknown): string[] {
|
||||
].slice(0, maxCampaignStringListEntries);
|
||||
}
|
||||
|
||||
function normalizeRewardStrings(value: unknown): string[] {
|
||||
return [
|
||||
...new Set(
|
||||
arrayOrEmpty<unknown>(value)
|
||||
.filter((entry): entry is string => typeof entry === 'string')
|
||||
.map((entry) => entry.replace(/\s+/g, ' ').trim())
|
||||
.filter((entry) => entry.length > 0 && entry.length <= maxCampaignStringListLength && Boolean(parseRewardLabel(entry)))
|
||||
)
|
||||
].slice(0, maxCampaignStringListEntries);
|
||||
}
|
||||
|
||||
function uniqueByKey<T>(entries: T[], keyForEntry: (entry: T) => string) {
|
||||
const seen = new Set<string>();
|
||||
return entries.filter((entry) => {
|
||||
@@ -1083,7 +1094,7 @@ function normalizeCampaignBattleSettlement(value: unknown): CampaignBattleSettle
|
||||
battleTitle,
|
||||
outcome: settlement.outcome,
|
||||
rewardGold: normalizeNonNegativeInteger(settlement.rewardGold),
|
||||
itemRewards: uniqueStrings(settlement.itemRewards),
|
||||
itemRewards: normalizeRewardStrings(settlement.itemRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(settlement.campaignRewards, battleId),
|
||||
objectives: normalizeLimitedArray(settlement.objectives, normalizeBattleObjectiveSnapshot, maxCampaignBattleObjectiveEntries),
|
||||
units: normalizeLimitedArray(settlement.units, normalizeCampaignUnitProgressSnapshot, maxCampaignBattleUnitEntries),
|
||||
@@ -1289,7 +1300,7 @@ function normalizeFirstBattleReport(report: unknown): FirstBattleReport | undefi
|
||||
units: normalizeLimitedArray(report.units, normalizeUnitDataSnapshot, maxCampaignBattleUnitEntries),
|
||||
bonds: normalizeLimitedArray(report.bonds, normalizeCampBondSnapshot, maxCampaignBattleBondEntries),
|
||||
mvp: normalizeCampMvpSnapshot(report.mvp),
|
||||
itemRewards: uniqueStrings(report.itemRewards),
|
||||
itemRewards: normalizeRewardStrings(report.itemRewards),
|
||||
campaignRewards: cloneCampaignRewardSnapshot(
|
||||
isPlainObject(report.campaignRewards) ? report.campaignRewards as CampaignRewardSnapshot : undefined,
|
||||
battleId
|
||||
@@ -1653,6 +1664,7 @@ function cloneCampaignState(state: CampaignState): CampaignState {
|
||||
|
||||
function cloneReport(report: FirstBattleReport): FirstBattleReport {
|
||||
const cloned = JSON.parse(JSON.stringify(report)) as FirstBattleReport;
|
||||
cloned.itemRewards = normalizeRewardStrings(cloned.itemRewards);
|
||||
cloned.completedCampDialogues = uniqueStrings(cloned.completedCampDialogues);
|
||||
cloned.completedCampVisits = uniqueStrings(cloned.completedCampVisits);
|
||||
if (cloned.campaignRewards) {
|
||||
|
||||
Reference in New Issue
Block a user