Cap max bond experience gains

This commit is contained in:
2026-07-05 13:18:07 +09:00
parent 8d306587fc
commit 70cd7305a8
4 changed files with 86 additions and 30 deletions

View File

@@ -961,8 +961,9 @@ function normalizeBondLevel(value: unknown) {
return Math.min(100, normalizeNonNegativeInteger(value));
}
function normalizeBondExp(value: unknown) {
return Math.min(99, normalizeNonNegativeInteger(value));
function normalizeBondExpForLevel(level: number, value: unknown) {
const exp = normalizeNonNegativeInteger(value);
return Math.min(exp, level >= 100 ? 100 : 99);
}
function normalizeCampaignTimestamp(value: unknown) {
@@ -1164,7 +1165,7 @@ function normalizeCampaignBondProgressSnapshot(value: unknown): CampaignBondProg
id,
title,
level,
exp: normalizeBondExp(value.exp),
exp: normalizeBondExpForLevel(level, value.exp),
battleExp: normalizeNonNegativeInteger(value.battleExp)
};
}
@@ -1391,7 +1392,7 @@ function normalizeCampBondSnapshot(value: unknown): CampBondSnapshot | undefined
title,
unitIds: [unitIds[0], unitIds[1]] as [string, string],
level,
exp: normalizeBondExp(value.exp),
exp: normalizeBondExpForLevel(level, value.exp),
battleExp: normalizeNonNegativeInteger(value.battleExp)
};
}
@@ -1466,12 +1467,18 @@ function readLatestSlottedCampaignState() {
}
function advanceBond(bond: CampBondSnapshot, amount: number) {
bond.battleExp += amount;
bond.exp += amount;
while (bond.exp >= 100) {
bond.exp -= 100;
bond.level = Math.min(100, bond.level + 1);
const gained = normalizeNonNegativeInteger(amount);
if (gained <= 0) {
return;
}
bond.battleExp += gained;
let exp = bond.exp + gained;
while (bond.level < 100 && exp >= 100) {
exp -= 100;
bond.level += 1;
}
bond.exp = bond.level >= 100 ? Math.min(exp, 100) : exp;
}
function createBattleSettlement(report: FirstBattleReport, reserveTraining: CampaignReserveTrainingSnapshot[] = []): CampaignBattleSettlement {