Normalize campaign reward labels
This commit is contained in:
@@ -642,7 +642,7 @@ try {
|
|||||||
}))
|
}))
|
||||||
],
|
],
|
||||||
mvp: { unitId: 'liu-bei', name: 'Liu Bei', damageDealt: '1000000', defeats: '2' },
|
mvp: { unitId: 'liu-bei', name: 'Liu Bei', damageDealt: '1000000', defeats: '2' },
|
||||||
itemRewards: ['Bean', 'Bean', 10, 'x'.repeat(97)],
|
itemRewards: ['Bean', 'Bean', 'Bean -2', 'Bean +0', 10, 'x'.repeat(97)],
|
||||||
campaignRewards: {
|
campaignRewards: {
|
||||||
supplies: [' Bean ', 'Bean', 20, 'x'.repeat(97)],
|
supplies: [' Bean ', 'Bean', 20, 'x'.repeat(97)],
|
||||||
equipment: [' Iron Sword ', 'Iron Sword'],
|
equipment: [' Iron Sword ', 'Iron Sword'],
|
||||||
@@ -753,7 +753,7 @@ try {
|
|||||||
battleTitle: ' ',
|
battleTitle: ' ',
|
||||||
outcome: 'victory',
|
outcome: 'victory',
|
||||||
rewardGold: '120',
|
rewardGold: '120',
|
||||||
itemRewards: ['Bean', 12, 'Bean'],
|
itemRewards: ['Bean', 12, 'Bean', 'Bean -2', 'Bean +0'],
|
||||||
campaignRewards: {
|
campaignRewards: {
|
||||||
supplies: { corrupted: true },
|
supplies: { corrupted: true },
|
||||||
equipment: ['Iron Sword'],
|
equipment: ['Iron Sword'],
|
||||||
|
|||||||
@@ -906,6 +906,17 @@ function uniqueStrings(value: unknown): string[] {
|
|||||||
].slice(0, maxCampaignStringListEntries);
|
].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) {
|
function uniqueByKey<T>(entries: T[], keyForEntry: (entry: T) => string) {
|
||||||
const seen = new Set<string>();
|
const seen = new Set<string>();
|
||||||
return entries.filter((entry) => {
|
return entries.filter((entry) => {
|
||||||
@@ -1083,7 +1094,7 @@ function normalizeCampaignBattleSettlement(value: unknown): CampaignBattleSettle
|
|||||||
battleTitle,
|
battleTitle,
|
||||||
outcome: settlement.outcome,
|
outcome: settlement.outcome,
|
||||||
rewardGold: normalizeNonNegativeInteger(settlement.rewardGold),
|
rewardGold: normalizeNonNegativeInteger(settlement.rewardGold),
|
||||||
itemRewards: uniqueStrings(settlement.itemRewards),
|
itemRewards: normalizeRewardStrings(settlement.itemRewards),
|
||||||
campaignRewards: cloneCampaignRewardSnapshot(settlement.campaignRewards, battleId),
|
campaignRewards: cloneCampaignRewardSnapshot(settlement.campaignRewards, battleId),
|
||||||
objectives: normalizeLimitedArray(settlement.objectives, normalizeBattleObjectiveSnapshot, maxCampaignBattleObjectiveEntries),
|
objectives: normalizeLimitedArray(settlement.objectives, normalizeBattleObjectiveSnapshot, maxCampaignBattleObjectiveEntries),
|
||||||
units: normalizeLimitedArray(settlement.units, normalizeCampaignUnitProgressSnapshot, maxCampaignBattleUnitEntries),
|
units: normalizeLimitedArray(settlement.units, normalizeCampaignUnitProgressSnapshot, maxCampaignBattleUnitEntries),
|
||||||
@@ -1289,7 +1300,7 @@ function normalizeFirstBattleReport(report: unknown): FirstBattleReport | undefi
|
|||||||
units: normalizeLimitedArray(report.units, normalizeUnitDataSnapshot, maxCampaignBattleUnitEntries),
|
units: normalizeLimitedArray(report.units, normalizeUnitDataSnapshot, maxCampaignBattleUnitEntries),
|
||||||
bonds: normalizeLimitedArray(report.bonds, normalizeCampBondSnapshot, maxCampaignBattleBondEntries),
|
bonds: normalizeLimitedArray(report.bonds, normalizeCampBondSnapshot, maxCampaignBattleBondEntries),
|
||||||
mvp: normalizeCampMvpSnapshot(report.mvp),
|
mvp: normalizeCampMvpSnapshot(report.mvp),
|
||||||
itemRewards: uniqueStrings(report.itemRewards),
|
itemRewards: normalizeRewardStrings(report.itemRewards),
|
||||||
campaignRewards: cloneCampaignRewardSnapshot(
|
campaignRewards: cloneCampaignRewardSnapshot(
|
||||||
isPlainObject(report.campaignRewards) ? report.campaignRewards as CampaignRewardSnapshot : undefined,
|
isPlainObject(report.campaignRewards) ? report.campaignRewards as CampaignRewardSnapshot : undefined,
|
||||||
battleId
|
battleId
|
||||||
@@ -1653,6 +1664,7 @@ function cloneCampaignState(state: CampaignState): CampaignState {
|
|||||||
|
|
||||||
function cloneReport(report: FirstBattleReport): FirstBattleReport {
|
function cloneReport(report: FirstBattleReport): FirstBattleReport {
|
||||||
const cloned = JSON.parse(JSON.stringify(report)) as FirstBattleReport;
|
const cloned = JSON.parse(JSON.stringify(report)) as FirstBattleReport;
|
||||||
|
cloned.itemRewards = normalizeRewardStrings(cloned.itemRewards);
|
||||||
cloned.completedCampDialogues = uniqueStrings(cloned.completedCampDialogues);
|
cloned.completedCampDialogues = uniqueStrings(cloned.completedCampDialogues);
|
||||||
cloned.completedCampVisits = uniqueStrings(cloned.completedCampVisits);
|
cloned.completedCampVisits = uniqueStrings(cloned.completedCampVisits);
|
||||||
if (cloned.campaignRewards) {
|
if (cloned.campaignRewards) {
|
||||||
|
|||||||
Reference in New Issue
Block a user