Add the data model for structures and prevent them from being embedded in most actors.
This commit is contained in:
parent
5286f403a1
commit
762b297895
4 changed files with 50 additions and 2 deletions
|
|
@ -232,7 +232,8 @@
|
||||||
"invalid-integer": "You must enter a valid whole number",
|
"invalid-integer": "You must enter a valid whole number",
|
||||||
"item-not-found": "Failed to find an item to delete",
|
"item-not-found": "Failed to find an item to delete",
|
||||||
"spell-create-failed": "Failed to create a custom spell",
|
"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": {
|
"warn": {
|
||||||
"negative-aspect-limit": "The Aspect limit must be 0 or greater"
|
"negative-aspect-limit": "The Aspect limit must be 0 or greater"
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import AspectItem from "./Aspect.mjs";
|
import AspectItem from "./Aspect.mjs";
|
||||||
import SpellItem from "./Spell.mjs";
|
import SpellItem from "./Spell.mjs";
|
||||||
|
import StructureItem from "./Structure.mjs";
|
||||||
|
|
||||||
/** @extends {Item} */
|
/** @extends {Item} */
|
||||||
export class ItemHandler extends Item {
|
export class ItemHandler extends Item {
|
||||||
proxyTargets = {
|
proxyTargets = {
|
||||||
aspect: AspectItem,
|
aspect: AspectItem,
|
||||||
spell: SpellItem
|
spell: SpellItem,
|
||||||
|
structure: StructureItem,
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(data, ctx) {
|
constructor(data, ctx) {
|
||||||
|
|
|
||||||
23
module/documents/Item/Structure.mjs
Normal file
23
module/documents/Item/Structure.mjs
Normal 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,
|
||||||
|
};
|
||||||
22
module/models/Item/Structure.mjs
Normal file
22
module/models/Item/Structure.mjs
Normal 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,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue