Clamp battle save unit stats
This commit is contained in:
@@ -103,6 +103,8 @@ try {
|
|||||||
['unknown status unit id', { battleStatuses: [{ ...validState.battleStatuses[0], unitId: 'ghost-unit' }] }],
|
['unknown status unit id', { battleStatuses: [{ ...validState.battleStatuses[0], unitId: 'ghost-unit' }] }],
|
||||||
['duplicate status unit kind', { battleStatuses: [validState.battleStatuses[0], { ...validState.battleStatuses[0] }] }],
|
['duplicate status unit kind', { battleStatuses: [validState.battleStatuses[0], { ...validState.battleStatuses[0] }] }],
|
||||||
['invalid stats shape', { battleStats: { 'liu-bei': { damageDealt: 10 } } }],
|
['invalid stats shape', { battleStats: { 'liu-bei': { damageDealt: 10 } } }],
|
||||||
|
['invalid stats value', { battleStats: { 'liu-bei': { ...validState.battleStats['liu-bei'], actions: 1.5 } } }],
|
||||||
|
['too high stats value', { battleStats: { 'liu-bei': { ...validState.battleStats['liu-bei'], damageDealt: 1000000 } } }],
|
||||||
['unknown stats unit id', { battleStats: { 'ghost-unit': validState.battleStats['liu-bei'] } }],
|
['unknown stats unit id', { battleStats: { 'ghost-unit': validState.battleStats['liu-bei'] } }],
|
||||||
['invalid enemy usable keys', { enemyUsableUseKeys: [1] }],
|
['invalid enemy usable keys', { enemyUsableUseKeys: [1] }],
|
||||||
['malformed enemy usable key', { enemyUsableUseKeys: ['rebel-1:shout'] }],
|
['malformed enemy usable key', { enemyUsableUseKeys: ['rebel-1:shout'] }],
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ const maxBattleEffectLabelLength = 32;
|
|||||||
const maxBattleEffectTurns = 9;
|
const maxBattleEffectTurns = 9;
|
||||||
const maxBattleBuffBonus = 99;
|
const maxBattleBuffBonus = 99;
|
||||||
const maxBattleStatusPower = 99;
|
const maxBattleStatusPower = 99;
|
||||||
|
const maxBattleUnitStatValue = 999999;
|
||||||
const maxStatusKindsPerUnit = 2;
|
const maxStatusKindsPerUnit = 2;
|
||||||
const maxBattleItemStockById: Record<string, number> = {
|
const maxBattleItemStockById: Record<string, number> = {
|
||||||
bean: 3,
|
bean: 3,
|
||||||
@@ -398,6 +399,10 @@ function isValidEffectLabel(value: unknown) {
|
|||||||
return typeof value === 'string' && value.length > 0 && value.length <= maxBattleEffectLabelLength;
|
return typeof value === 'string' && value.length > 0 && value.length <= maxBattleEffectLabelLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isBattleUnitStatValue(value: unknown) {
|
||||||
|
return isIntegerInRange(value, 0, maxBattleUnitStatValue);
|
||||||
|
}
|
||||||
|
|
||||||
function isOptionalBuffArray(value: unknown, options: BattleSaveValidationOptions) {
|
function isOptionalBuffArray(value: unknown, options: BattleSaveValidationOptions) {
|
||||||
return (
|
return (
|
||||||
value === undefined ||
|
value === undefined ||
|
||||||
@@ -454,11 +459,11 @@ function isOptionalStatsRecord(value: unknown, options: BattleSaveValidationOpti
|
|||||||
([unitId, stats]) =>
|
([unitId, stats]) =>
|
||||||
isKnownUnitId(unitId, options) &&
|
isKnownUnitId(unitId, options) &&
|
||||||
isRecord(stats) &&
|
isRecord(stats) &&
|
||||||
isNonNegativeFiniteNumber(stats.damageDealt) &&
|
isBattleUnitStatValue(stats.damageDealt) &&
|
||||||
isNonNegativeFiniteNumber(stats.damageTaken) &&
|
isBattleUnitStatValue(stats.damageTaken) &&
|
||||||
isNonNegativeFiniteNumber(stats.defeats) &&
|
isBattleUnitStatValue(stats.defeats) &&
|
||||||
isNonNegativeFiniteNumber(stats.actions) &&
|
isBattleUnitStatValue(stats.actions) &&
|
||||||
isNonNegativeFiniteNumber(stats.support)
|
isBattleUnitStatValue(stats.support)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user