Support live attribute restoration mechanics

This commit is contained in:
JB
2026-07-27 21:32:04 -04:00
parent 36dd018a4a
commit 568e46cd05
19 changed files with 979 additions and 31 deletions
@@ -82,6 +82,8 @@ export type ConditionalEffectOutcomeRow = {
value_basis: DatabaseValue;
resource_kind?: DatabaseValue;
combat_timing?: DatabaseValue;
delivery_mode?: DatabaseValue;
delivery_duration_seconds?: DatabaseValue;
value_scaling: DatabaseValue;
unit: DatabaseValue;
damage_basis: DatabaseValue;
@@ -530,6 +532,17 @@ function parseOutcome(
if (combatTiming && combatTiming !== 'pre_event' && combatTiming !== 'current') {
errors.push(`${path} has invalid combat timing.`);
}
const delivery = nullableText(row.delivery_mode) ?? 'instant';
if (delivery !== 'instant' && delivery !== 'continuous') {
errors.push(`${path} has an unsupported delivery mode.`);
}
const durationSeconds = number(row.delivery_duration_seconds);
if (delivery === 'continuous' && (durationSeconds === null || durationSeconds <= 0)) {
errors.push(`${path} continuous delivery requires a positive duration.`);
}
if (delivery === 'instant' && durationSeconds !== null) {
errors.push(`${path} instant delivery cannot set a duration.`);
}
return {
clauseId: nullableText(row.clause_id),
outcome: {
@@ -546,6 +559,9 @@ function parseOutcome(
...(combatTiming === 'pre_event' || combatTiming === 'current'
? { combatTiming }
: {}),
...(delivery === 'continuous' && durationSeconds !== null
? { delivery, durationSeconds }
: {}),
...(kind === 'attribute_modifier' && nullableText(row.stat_attribute_id)
? { attributeId: text(row.stat_attribute_id) }
: {}),