This also allows to assign a spell to multiple spell groups, which is the case for many spells in the SRD. Additionally, this makes many small improvements and fixes to the provided spell compendium.
117 lines
3.2 KiB
TypeScript
117 lines
3.2 KiB
TypeScript
// SPDX-FileCopyrightText: 2022 Johannes Loher
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import {
|
|
getActorUpdateDataGetter,
|
|
getCompendiumMigrator,
|
|
getSceneUpdateDataGetter,
|
|
migrateActors,
|
|
migrateCompendiums,
|
|
migrateItems,
|
|
migrateScenes,
|
|
} from "./migrationHelpers";
|
|
|
|
import type { DS4SpellDataSourceData } from "../item/spell/spell-data-source";
|
|
|
|
async function migrate(): Promise<void> {
|
|
await migrateItems(getItemUpdateData);
|
|
await migrateActors(getActorUpdateData);
|
|
await migrateScenes(getSceneUpdateData);
|
|
await migrateCompendiums(migrateCompendium);
|
|
}
|
|
|
|
function getItemUpdateData(itemData: Partial<foundry.data.ItemData["_source"]>) {
|
|
if (itemData.type !== "spell") return;
|
|
// @ts-expect-error spellCategory is removed with this migration
|
|
const spellCategory: string | undefined = itemData.data?.spellCategory;
|
|
const spellGroups = migrateSpellCategory(spellCategory);
|
|
|
|
// @ts-expect-error bonus is removed with this migration
|
|
const bonus: string | undefined = itemData.data?.bonus;
|
|
const spellModifier = migrateBonus(bonus);
|
|
|
|
const updateData: Record<string, unknown> = {
|
|
data: {
|
|
spellGroups,
|
|
"-=spellCategory": null,
|
|
spellModifier,
|
|
"-=bonus": null,
|
|
},
|
|
};
|
|
return updateData;
|
|
}
|
|
|
|
function migrateSpellCategory(spellCategory: string | undefined): DS4SpellDataSourceData["spellGroups"] {
|
|
const spellGroups = {
|
|
lightning: false,
|
|
earth: false,
|
|
water: false,
|
|
ice: false,
|
|
fire: false,
|
|
healing: false,
|
|
light: false,
|
|
air: false,
|
|
transport: false,
|
|
damage: false,
|
|
shadow: false,
|
|
protection: false,
|
|
mindAffecting: false,
|
|
demonology: false,
|
|
necromancy: false,
|
|
transmutation: false,
|
|
area: false,
|
|
};
|
|
switch (spellCategory) {
|
|
case "healing": {
|
|
spellGroups.healing = true;
|
|
break;
|
|
}
|
|
case "fire": {
|
|
spellGroups.fire = true;
|
|
break;
|
|
}
|
|
case "ice": {
|
|
spellGroups.ice = true;
|
|
break;
|
|
}
|
|
case "light": {
|
|
spellGroups.light = true;
|
|
break;
|
|
}
|
|
case "darkness": {
|
|
spellGroups.shadow = true;
|
|
break;
|
|
}
|
|
case "mindAffecting": {
|
|
spellGroups.mindAffecting = true;
|
|
break;
|
|
}
|
|
case "electricity": {
|
|
spellGroups.lightning = true;
|
|
break;
|
|
}
|
|
}
|
|
return spellGroups;
|
|
}
|
|
|
|
function migrateBonus(bonus: string | undefined): DS4SpellDataSourceData["spellModifier"] {
|
|
const spellModifier = { numerical: 0, complex: "" };
|
|
if (bonus) {
|
|
if (Number.isNumeric(bonus)) {
|
|
spellModifier.numerical = +bonus;
|
|
} else {
|
|
spellModifier.complex = bonus;
|
|
}
|
|
}
|
|
return spellModifier;
|
|
}
|
|
|
|
const getActorUpdateData = getActorUpdateDataGetter(getItemUpdateData);
|
|
const getSceneUpdateData = getSceneUpdateDataGetter(getActorUpdateData);
|
|
const migrateCompendium = getCompendiumMigrator({ getItemUpdateData, getActorUpdateData, getSceneUpdateData });
|
|
|
|
export const migration = {
|
|
migrate,
|
|
migrateCompendium,
|
|
};
|