Migration FOundry v13/v14
This commit is contained in:
96
src/module/models/character.mjs
Normal file
96
src/module/models/character.mjs
Normal file
@@ -0,0 +1,96 @@
|
||||
import { createCharacteristicField } from "./items/base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class CharacterData extends foundry.abstract.TypeDataModel {
|
||||
|
||||
static defineSchema() {
|
||||
return {
|
||||
name: new fields.StringField({ required: false, blank: false, trim: true }),
|
||||
life: new fields.SchemaField({
|
||||
value: new fields.NumberField({ required: false, initial: 0, integer: true }),
|
||||
max: new fields.NumberField({ required: true, initial: 0, integer: true })
|
||||
}),
|
||||
personal: new fields.SchemaField({
|
||||
title: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
species: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
speciesText: new fields.SchemaField({
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true, nullable: true }),
|
||||
descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true })
|
||||
}),
|
||||
age: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
gender: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
pronouns: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
homeworld: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
ucp: new fields.StringField({ required: false, blank: true, trim: true, initial: "" }),
|
||||
traits: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
)
|
||||
}),
|
||||
biography: new fields.HTMLField({ required: false, blank: true, trim: true }),
|
||||
|
||||
characteristics: new fields.SchemaField({
|
||||
strength: createCharacteristicField(true, true),
|
||||
dexterity: createCharacteristicField(true, true),
|
||||
endurance: createCharacteristicField(true, true),
|
||||
intellect: createCharacteristicField(true, false),
|
||||
education: createCharacteristicField(true, false),
|
||||
social: createCharacteristicField(true, false),
|
||||
morale: createCharacteristicField(true, false),
|
||||
luck: createCharacteristicField(true, false),
|
||||
sanity: createCharacteristicField(true, false),
|
||||
charm: createCharacteristicField(true, false),
|
||||
psionic: createCharacteristicField(true, false),
|
||||
other: createCharacteristicField(true, false)
|
||||
}),
|
||||
|
||||
health: new fields.SchemaField({
|
||||
radiations: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true })
|
||||
}),
|
||||
study: new fields.SchemaField({
|
||||
skill: new fields.StringField({ required: false, blank: true, trim: true, initial: "" }),
|
||||
total: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),
|
||||
completed: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true })
|
||||
}),
|
||||
finance: new fields.SchemaField({
|
||||
pension: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
credits: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
cashOnHand: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
debt: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
livingCost: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
monthlyShipPayments: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
notes: new fields.StringField({ required: false, blank: true, trim: true, initial: "" })
|
||||
}),
|
||||
containerView: new fields.StringField({ required: false, blank: true, trim: true, initial: "" }),
|
||||
containerDropIn: new fields.StringField({ required: false, blank: true, trim: true, initial: "" }),
|
||||
notes: new fields.HTMLField({ required: false, blank: true, trim: true }),
|
||||
|
||||
inventory: new fields.SchemaField({
|
||||
armor: new fields.NumberField({ required: true, initial: 0, integer: true }),
|
||||
weight: new fields.NumberField({ required: true, initial: 0, min: 0, integer: false }),
|
||||
encumbrance: new fields.SchemaField({
|
||||
normal: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
heavy: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true })
|
||||
})
|
||||
}),
|
||||
states: new fields.SchemaField({
|
||||
encumbrance: new fields.BooleanField({ required: false, initial: false }),
|
||||
fatigue: new fields.BooleanField({ required: false, initial: false }),
|
||||
unconscious: new fields.BooleanField({ required: false, initial: false }),
|
||||
surgeryRequired: new fields.BooleanField({ required: false, initial: false })
|
||||
}),
|
||||
|
||||
config: new fields.SchemaField({
|
||||
psionic: new fields.BooleanField({ required: false, initial: true }),
|
||||
initiative: new fields.StringField({ required: false, blank: true, initial: "dexterity" }),
|
||||
damages: new fields.SchemaField({
|
||||
rank1: new fields.StringField({ required: false, blank: true, initial: "strength" }),
|
||||
rank2: new fields.StringField({ required: false, blank: true, initial: "dexterity" }),
|
||||
rank3: new fields.StringField({ required: false, blank: true, initial: "endurance" })
|
||||
})
|
||||
})
|
||||
};
|
||||
}
|
||||
}
|
||||
16
src/module/models/index.mjs
Normal file
16
src/module/models/index.mjs
Normal file
@@ -0,0 +1,16 @@
|
||||
// Actor DataModels
|
||||
export { default as CharacterData } from "./character.mjs";
|
||||
export { default as VehiculeData } from "./vehicule.mjs";
|
||||
|
||||
// Item DataModels
|
||||
export { default as ItemData } from "./items/item.mjs";
|
||||
export { default as EquipmentData } from "./items/equipment.mjs";
|
||||
export { default as DiseaseData } from "./items/disease.mjs";
|
||||
export { default as CareerData } from "./items/career.mjs";
|
||||
export { default as TalentData } from "./items/talent.mjs";
|
||||
export { default as ContactData } from "./items/contact.mjs";
|
||||
export { default as WeaponData } from "./items/weapon.mjs";
|
||||
export { default as ArmorData } from "./items/armor.mjs";
|
||||
export { default as ComputerData } from "./items/computer.mjs";
|
||||
export { default as ItemContainerData } from "./items/container.mjs";
|
||||
export { default as SpeciesData } from "./items/species.mjs";
|
||||
23
src/module/models/items/armor.mjs
Normal file
23
src/module/models/items/armor.mjs
Normal file
@@ -0,0 +1,23 @@
|
||||
import { PhysicalItemData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class ArmorData extends PhysicalItemData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.equipped = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.radiations = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.protection = new fields.StringField({ required: false, blank: false, trim: true });
|
||||
// A Traveller suffers DM-1 to all checks per missing skill level in the required skill.
|
||||
schema.requireSkill = new fields.StringField({ required: false, blank: false });
|
||||
schema.requireSkillLevel = new fields.NumberField({ required: false, min: 0, integer: true });
|
||||
// Powered armour supports its own weight and is effectively weightless for encumbrance.
|
||||
schema.powered = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.options = new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
);
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
41
src/module/models/items/base-item.mjs
Normal file
41
src/module/models/items/base-item.mjs
Normal file
@@ -0,0 +1,41 @@
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export function createCharacteristicField(show = true, showMax = false) {
|
||||
return new fields.SchemaField({
|
||||
value: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),
|
||||
max: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),
|
||||
dm: new fields.NumberField({ required: false, initial: 0, integer: true }),
|
||||
show: new fields.BooleanField({ required: false, initial: show }),
|
||||
showMax: new fields.BooleanField({ required: false, initial: showMax })
|
||||
});
|
||||
}
|
||||
|
||||
export class ItemBaseData extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return {
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true, nullable: true }),
|
||||
subType: new fields.StringField({ required: false, blank: false, nullable: true })
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class PhysicalItemData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.quantity = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });
|
||||
schema.weight = new fields.NumberField({ required: true, initial: 0, min: 0, integer: false });
|
||||
schema.weightless = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });
|
||||
schema.tl = new fields.StringField({ required: true, blank: false, initial: "TL12" });
|
||||
schema.container = new fields.SchemaField({
|
||||
id: new fields.StringField({ required: false, blank: true })
|
||||
});
|
||||
schema.roll = new fields.SchemaField({
|
||||
characteristic: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
skill: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
difficulty: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
});
|
||||
schema.trash = new fields.BooleanField({ required: false, initial: false });
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
21
src/module/models/items/career.mjs
Normal file
21
src/module/models/items/career.mjs
Normal file
@@ -0,0 +1,21 @@
|
||||
import { ItemBaseData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class CareerData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.difficulty = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });
|
||||
schema.damage = new fields.StringField({ required: false, blank: true });
|
||||
schema.interval = new fields.StringField({ required: false, blank: true });
|
||||
schema.assignment = new fields.StringField({ required: false, blank: true });
|
||||
schema.terms = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.rank = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.events = new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
age: new fields.NumberField({ required: false, integer: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
);
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
18
src/module/models/items/computer.mjs
Normal file
18
src/module/models/items/computer.mjs
Normal file
@@ -0,0 +1,18 @@
|
||||
import { PhysicalItemData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class ComputerData extends PhysicalItemData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.processing = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.processingUsed = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.overload = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.options = new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
);
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
27
src/module/models/items/contact.mjs
Normal file
27
src/module/models/items/contact.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { ItemBaseData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class ContactData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.subType.initial = "skill";
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });
|
||||
schema.skill = new fields.SchemaField({
|
||||
speciality: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
characteristic: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
});
|
||||
schema.status = new fields.StringField({ required: false, blank: true, trim: true, initial: "Alive" });
|
||||
schema.attitude = new fields.StringField({ required: false, blank: true, trim: true, initial: "Unknow" });
|
||||
schema.relation = new fields.StringField({ required: false, blank: true, trim: true, initial: "Contact" });
|
||||
schema.title = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.nickname = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.species = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.gender = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.pronouns = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.homeworld = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.location = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.occupation = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.notes = new fields.HTMLField({ required: false, blank: true, trim: true });
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
16
src/module/models/items/container.mjs
Normal file
16
src/module/models/items/container.mjs
Normal file
@@ -0,0 +1,16 @@
|
||||
import { ItemBaseData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class ItemContainerData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.onHand = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.location = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.count = new fields.NumberField({ required: false, initial: 0, integer: true });
|
||||
schema.weight = new fields.NumberField({ required: false, initial: 0, integer: false });
|
||||
schema.weightless = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.locked = new fields.BooleanField({ required: false, initial: false }); // GM only
|
||||
schema.lockedDescription = new fields.StringField({ required: false, blank: true, trim: true, nullable: true });
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
13
src/module/models/items/disease.mjs
Normal file
13
src/module/models/items/disease.mjs
Normal file
@@ -0,0 +1,13 @@
|
||||
import { ItemBaseData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class DiseaseData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.subType.initial = "disease"; // disease, poison
|
||||
schema.difficulty = new fields.StringField({ required: true, initial: "Average" });
|
||||
schema.damage = new fields.StringField({ required: false, blank: true });
|
||||
schema.interval = new fields.StringField({ required: false, blank: true });
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
14
src/module/models/items/equipment.mjs
Normal file
14
src/module/models/items/equipment.mjs
Normal file
@@ -0,0 +1,14 @@
|
||||
import { PhysicalItemData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class EquipmentData extends PhysicalItemData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.equipped = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.augment = new fields.SchemaField({
|
||||
improvement: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
});
|
||||
schema.subType.initial = "equipment"; // augment, clothing, trinket, toolkit, equipment
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
15
src/module/models/items/item.mjs
Normal file
15
src/module/models/items/item.mjs
Normal file
@@ -0,0 +1,15 @@
|
||||
import { PhysicalItemData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class ItemData extends PhysicalItemData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.subType.initial = "loot";
|
||||
schema.software = new fields.SchemaField({
|
||||
bandwidth: new fields.NumberField({ required: false, initial: 0, min: 0, max: 10, integer: true }),
|
||||
effect: new fields.StringField({ required: false, blank: true, trim: true, initial: "" }),
|
||||
computerId: new fields.StringField({ required: false, blank: true, initial: "" })
|
||||
});
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
22
src/module/models/items/species.mjs
Normal file
22
src/module/models/items/species.mjs
Normal file
@@ -0,0 +1,22 @@
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class SpeciesData extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return {
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true, nullable: true }),
|
||||
descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true }),
|
||||
traits: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
),
|
||||
modifiers: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
characteristic: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
value: new fields.NumberField({ required: false, integer: true, nullable: true })
|
||||
})
|
||||
)
|
||||
};
|
||||
}
|
||||
}
|
||||
27
src/module/models/items/talent.mjs
Normal file
27
src/module/models/items/talent.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { ItemBaseData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class TalentData extends ItemBaseData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.subType.initial = "skill";
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });
|
||||
schema.level = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });
|
||||
schema.skill = new fields.SchemaField({
|
||||
speciality: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
reduceEncumbrance: new fields.BooleanField({ required: false, initial: false })
|
||||
});
|
||||
schema.psionic = new fields.SchemaField({
|
||||
reach: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
cost: new fields.NumberField({ required: false, initial: 1, min: 0, integer: true }),
|
||||
duration: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
durationUnit: new fields.StringField({ required: false })
|
||||
});
|
||||
schema.roll = new fields.SchemaField({
|
||||
characteristic: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
skill: new fields.StringField({ required: false, blank: true, trim: true }),
|
||||
difficulty: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
});
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
30
src/module/models/items/weapon.mjs
Normal file
30
src/module/models/items/weapon.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
import { PhysicalItemData } from "./base-item.mjs";
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class WeaponData extends PhysicalItemData {
|
||||
static defineSchema() {
|
||||
const schema = super.defineSchema();
|
||||
schema.equipped = new fields.BooleanField({ required: false, initial: false });
|
||||
schema.range = new fields.SchemaField({
|
||||
isMelee: new fields.BooleanField({ required: false, initial: false }),
|
||||
value: new fields.NumberField({ required: false, integer: true, nullable: true }),
|
||||
unit: new fields.StringField({ required: false, blank: true, nullable: true })
|
||||
});
|
||||
schema.damage = new fields.StringField({ required: false, blank: true, trim: true });
|
||||
schema.magazine = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.magazineCost = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });
|
||||
schema.traits = new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
);
|
||||
schema.options = new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({ required: true, blank: true, trim: true }),
|
||||
description: new fields.StringField({ required: false, blank: true, trim: true })
|
||||
})
|
||||
);
|
||||
return schema;
|
||||
}
|
||||
}
|
||||
33
src/module/models/vehicule.mjs
Normal file
33
src/module/models/vehicule.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class VehiculeData extends foundry.abstract.TypeDataModel {
|
||||
|
||||
static defineSchema() {
|
||||
return {
|
||||
name: new fields.StringField({ required: false, blank: false, trim: true }),
|
||||
skillId: new fields.StringField({ required: false, initial: "", blank: true, trim: true }),
|
||||
speed: new fields.SchemaField({
|
||||
cruise: new fields.StringField({ required: false, initial: "Slow", blank: true }),
|
||||
maximum: new fields.StringField({ required: false, initial: "Medium", blank: true })
|
||||
}),
|
||||
agility: new fields.NumberField({ required: false, min: 0, integer: true }),
|
||||
crew: new fields.NumberField({ required: false, min: 0, integer: true }),
|
||||
passengers: new fields.NumberField({ required: false, min: 0, integer: true }),
|
||||
cargo: new fields.NumberField({ required: false, min: 0, integer: false }),
|
||||
life: new fields.SchemaField({
|
||||
value: new fields.NumberField({ required: true, initial: 0, integer: true }),
|
||||
max: new fields.NumberField({ required: true, initial: 0, integer: true })
|
||||
}),
|
||||
shipping: new fields.NumberField({ required: false, min: 0, integer: true }),
|
||||
cost: new fields.NumberField({ required: false, min: 0, integer: true }),
|
||||
armor: new fields.SchemaField({
|
||||
front: new fields.NumberField({ required: true, initial: 0, integer: true }),
|
||||
rear: new fields.NumberField({ required: true, initial: 0, integer: true }),
|
||||
sides: new fields.NumberField({ required: true, initial: 0, integer: true })
|
||||
}),
|
||||
skills: new fields.SchemaField({
|
||||
autopilot: new fields.NumberField({ required: true, initial: 0, integer: true })
|
||||
})
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user