Add the data model for structures and prevent them from being embedded in most actors.

This commit is contained in:
Oliver-Akins 2024-01-16 19:24:56 -07:00
parent 5286f403a1
commit 762b297895
4 changed files with 50 additions and 2 deletions

View file

@ -232,7 +232,8 @@
"invalid-integer": "You must enter a valid whole number",
"item-not-found": "Failed to find an item to delete",
"spell-create-failed": "Failed to create a custom spell",
"aspect-limit-reached": "You cannot have more than {limit} aspects"
"aspect-limit-reached": "You cannot have more than {limit} aspects",
"cant-embed-item": "Cannot embed item with type \"{item.type}\" in \"{actor.type}\""
},
"warn": {
"negative-aspect-limit": "The Aspect limit must be 0 or greater"

View file

@ -1,11 +1,13 @@
import AspectItem from "./Aspect.mjs";
import SpellItem from "./Spell.mjs";
import StructureItem from "./Structure.mjs";
/** @extends {Item} */
export class ItemHandler extends Item {
proxyTargets = {
aspect: AspectItem,
spell: SpellItem
spell: SpellItem,
structure: StructureItem,
};
constructor(data, ctx) {

View file

@ -0,0 +1,23 @@
import { ItemHandler } from "./Handler.mjs";
/** @this {ItemHandler} */
async function _preCreate() {
if (this.isEmbedded) {
let actor = this.actor;
if (actor.type === "settlement") {
return await actor.preItemEmbed(this);
};
ui.notifications.error(
game.i18n.format(
`dotdungeon.notification.error.cant-embed-item`,
{ item: this, actor }
),
{ console: false, }
);
return false;
};
};
export default {
_preCreate,
};

View file

@ -0,0 +1,22 @@
import { DescribedItemData } from "./DescribedItemData.mjs";
export class StructureItemData extends DescribedItemData {
static defineSchema() {
const fields = foundry.data.fields;
return mergeObject(super.defineSchema(), {
one_night: new fields.NumberField({
initial: null,
nullable: true,
}),
upkeep: new fields.NumberField({
initial: null,
nullable: true,
}),
construction_length: new fields.NumberField({
min: 0,
initial: 0,
nullable: false,
}),
});
};
};