Validate camp reward bond links
This commit is contained in:
@@ -29,6 +29,9 @@ try {
|
|||||||
const campBondReferences =
|
const campBondReferences =
|
||||||
validateCampBondReferences(dialogueEvents, 'campDialogues', knownBondsById, { matchUnitIds: true }) +
|
validateCampBondReferences(dialogueEvents, 'campDialogues', knownBondsById, { matchUnitIds: true }) +
|
||||||
validateCampBondReferences(visitEvents, 'campVisits', knownBondsById);
|
validateCampBondReferences(visitEvents, 'campVisits', knownBondsById);
|
||||||
|
const rewardBondLinks =
|
||||||
|
validateRewardBondLinks(dialogueEvents, 'campDialogues', 'rewardExp') +
|
||||||
|
validateRewardBondLinks(visitEvents, 'campVisits', 'bondExp');
|
||||||
validateNumericProperties('gold', { min: 1, max: 20000 });
|
validateNumericProperties('gold', { min: 1, max: 20000 });
|
||||||
validateNumericProperties('bondExp', { min: 0, max: 200 });
|
validateNumericProperties('bondExp', { min: 0, max: 200 });
|
||||||
validateNumericProperties('rewardExp', { min: 1, max: 200 });
|
validateNumericProperties('rewardExp', { min: 1, max: 200 });
|
||||||
@@ -38,7 +41,7 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`Verified ${dialogueEvents.length} camp dialogues, ${visitEvents.length} camp visits, ${campBattleIdEntries.length} camp battle ids, ${campaignStepReferences} campaign-step references, ${campBondReferences} camp bond references, ${itemRewardArrays.length} camp item reward lists, and camp reward numeric fields.`
|
`Verified ${dialogueEvents.length} camp dialogues, ${visitEvents.length} camp visits, ${campBattleIdEntries.length} camp battle ids, ${campaignStepReferences} campaign-step references, ${campBondReferences} camp bond references, ${rewardBondLinks} reward-bond links, ${itemRewardArrays.length} camp item reward lists, and camp reward numeric fields.`
|
||||||
);
|
);
|
||||||
} finally {
|
} finally {
|
||||||
await server.close();
|
await server.close();
|
||||||
@@ -280,6 +283,24 @@ function validateCampBondReferences(events, collectionName, knownBondsById, opti
|
|||||||
return bondReferenceCount;
|
return bondReferenceCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function validateRewardBondLinks(events, collectionName, rewardPropertyName) {
|
||||||
|
let rewardReferenceCount = 0;
|
||||||
|
events.forEach((event, index) => {
|
||||||
|
const context = `${collectionName}[${index}]`;
|
||||||
|
const rewardEntries = collectNumericProperties(event.body, rewardPropertyName, event.offset).filter((entry) => entry.value > 0);
|
||||||
|
if (rewardEntries.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rewardReferenceCount += rewardEntries.length;
|
||||||
|
if (collectStringProperties(event.body, 'bondId').length === 0) {
|
||||||
|
errors.push(
|
||||||
|
`${sourcePath}:${lineNumber(rewardEntries[0].offset)} ${context} has ${rewardPropertyName} rewards but no bondId`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return rewardReferenceCount;
|
||||||
|
}
|
||||||
|
|
||||||
function collectStringProperties(text, propertyName) {
|
function collectStringProperties(text, propertyName) {
|
||||||
const pattern = new RegExp(`\\b${propertyName}:\\s*'((?:\\\\'|[^'])*)'`, 'g');
|
const pattern = new RegExp(`\\b${propertyName}:\\s*'((?:\\\\'|[^'])*)'`, 'g');
|
||||||
return [...text.matchAll(pattern)].map((match) => ({
|
return [...text.matchAll(pattern)].map((match) => ({
|
||||||
@@ -288,6 +309,14 @@ function collectStringProperties(text, propertyName) {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function collectNumericProperties(text, propertyName, offset = 0) {
|
||||||
|
const pattern = new RegExp(`\\b${propertyName}:\\s*(-?\\d+)`, 'g');
|
||||||
|
return [...text.matchAll(pattern)].map((match) => ({
|
||||||
|
value: Number(match[1]),
|
||||||
|
offset: offset + (match.index ?? 0)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
function collectStringLiterals(text, offset = 0) {
|
function collectStringLiterals(text, offset = 0) {
|
||||||
return [...text.matchAll(/'((?:\\'|[^'])*)'/g)].map((match) => ({
|
return [...text.matchAll(/'((?:\\'|[^'])*)'/g)].map((match) => ({
|
||||||
value: match[1].replace(/\\'/g, "'"),
|
value: match[1].replace(/\\'/g, "'"),
|
||||||
|
|||||||
Reference in New Issue
Block a user