[Fix] V13 Migration Fixes (#2044)

* Fixed so that damageParts without an applyTo field is assumed to be hitPoints

* Added the applyTo field to the basic attack for Adversaries and Companions

* Tentative blindfix to issues of entities being null. Can't replicate it

* Added some safety for missing things if someone was on a REALLY old system version and then updated all the way

* Moved v13 countdown migration over to a migrateData

* .
This commit is contained in:
WBHarry 2026-06-29 14:22:12 +02:00 committed by GitHub
parent 1ebbad4797
commit 9c58f7058e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 61 additions and 51 deletions

View file

@ -451,7 +451,15 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
static migrateData(source) {
if (source.damage?.parts && Array.isArray(source.damage.parts)) {
let hitPointsExists = source.damage.parts.some(x => x.applyTo === 'hitPoints');
source.damage.parts = source.damage.parts.reduce((acc, part) => {
if (!part.applyTo && hitPointsExists) return acc;
if (!part.applyTo) {
hitPointsExists = true;
part.applyTo = 'hitPoints';
}
acc[part.applyTo] = part;
return acc;
}, {});

View file

@ -87,6 +87,7 @@ export default class DhpAdversary extends DhCreature {
parts: {
hitPoints: {
type: ['physical'],
applyTo: 'hitPoints',
value: {
multiplier: 'flat'
}

View file

@ -107,6 +107,7 @@ export default class DhCharacter extends DhCreature {
parts: {
hitPoints: {
type: ['physical'],
applyTo: 'hitPoints',
value: {
custom: {
enabled: true,

View file

@ -102,6 +102,7 @@ export default class DhCompanion extends DhCreature {
parts: {
hitPoints: {
type: ['physical'],
applyTo: 'hitPoints',
value: {
dice: 'd6',
multiplier: 'prof'

View file

@ -28,6 +28,39 @@ export default class DhCountdowns extends foundry.abstract.DataModel {
for (const countdownKey of changedCountdowns)
foundry.ui.countdowns.changedCountdownsForAnimation.add(countdownKey);
}
static migrateData(source) {
const migrateOldCountdowns = (data, type) => {
for (const key of Object.keys(data.countdowns)) {
const countdown = data.countdowns[key];
source.countdowns[key] = {
...countdown,
type: type,
ownership: Object.keys(countdown.ownership.players).reduce((acc, key) => {
acc[key] =
countdown.ownership.players[key].type === 1 ? 2 : countdown.ownership.players[key].type;
return acc;
}, {}),
progress: {
...countdown.progress,
type: countdown.progress.type.value
}
};
}
source[type] = null;
};
if (source.narrative) {
migrateOldCountdowns(source.narrative, 'narrative');
}
if (source.encounter) {
migrateOldCountdowns(source.encounter, 'encounter');
}
return super.migrateData(source);
}
}
export class DhCountdown extends foundry.abstract.DataModel {