229 lines
4.4 KiB
JavaScript
229 lines
4.4 KiB
JavaScript
import SimpleSchema from 'simpl-schema';
|
|
import deathSaveSchema from '/imports/api/properties/subSchemas/DeathSavesSchema'
|
|
import ColorSchema from '/imports/api/properties/subSchemas/ColorSchema';
|
|
import SharingSchema from '/imports/api/sharing/SharingSchema';
|
|
import STORAGE_LIMITS from '/imports/constants/STORAGE_LIMITS';
|
|
|
|
//set up the collection for creatures
|
|
let Creatures = new Mongo.Collection('creatures');
|
|
|
|
let CreatureSettingsSchema = new SimpleSchema({
|
|
//slowed down by carrying too much?
|
|
useVariantEncumbrance: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
//hide spellcasting tab
|
|
hideSpellcasting: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
//hide rest buttons
|
|
hideRestButtons: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Swap around the modifier and stat
|
|
swapStatAndModifier: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Hide all the unused stats
|
|
hideUnusedStats: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Show the tree tab
|
|
showTreeTab: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Hide the spells tab
|
|
hideSpellsTab: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Hide calculation errors
|
|
hideCalculationErrors: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// How much each hitDice resets on a long rest
|
|
hitDiceResetMultiplier: {
|
|
type: Number,
|
|
optional: true,
|
|
min: 0,
|
|
max: 1,
|
|
},
|
|
discordWebhook: {
|
|
type: String,
|
|
optional: true,
|
|
max: STORAGE_LIMITS.url,
|
|
},
|
|
});
|
|
|
|
let IconGroupSchema = new SimpleSchema({
|
|
name: {
|
|
type: String,
|
|
max: STORAGE_LIMITS.name,
|
|
optional: true,
|
|
},
|
|
iconIds: {
|
|
type: Array,
|
|
max: 4,
|
|
defaultValue: [],
|
|
},
|
|
'iconIds.$': {
|
|
type: String,
|
|
max: STORAGE_LIMITS.variableName,
|
|
},
|
|
});
|
|
|
|
let CreatureTabletopSettingsSchema = new SimpleSchema({
|
|
iconGroups: {
|
|
type: Array,
|
|
defaultValue: [],
|
|
max: 10,
|
|
},
|
|
'iconGroups.$': {
|
|
type: IconGroupSchema,
|
|
},
|
|
});
|
|
|
|
let CreatureSchema = new SimpleSchema({
|
|
// Strings
|
|
name: {
|
|
type: String,
|
|
defaultValue: '',
|
|
optional: true,
|
|
max: STORAGE_LIMITS.name,
|
|
},
|
|
alignment: {
|
|
type: String,
|
|
optional: true,
|
|
max: STORAGE_LIMITS.name,
|
|
},
|
|
gender: {
|
|
type: String,
|
|
optional: true,
|
|
max: STORAGE_LIMITS.name,
|
|
},
|
|
picture: {
|
|
type: String,
|
|
optional: true,
|
|
max: STORAGE_LIMITS.url,
|
|
},
|
|
avatarPicture: {
|
|
type: String,
|
|
optional: true,
|
|
max: STORAGE_LIMITS.url,
|
|
},
|
|
|
|
// Libraries
|
|
allowedLibraries: {
|
|
type: Array,
|
|
optional: true,
|
|
maxCount: 100,
|
|
},
|
|
'allowedLibraries.$': {
|
|
type: String,
|
|
regEx: SimpleSchema.RegEx.Id,
|
|
},
|
|
allowedLibraryCollections: {
|
|
type: Array,
|
|
optional: true,
|
|
maxCount: 100,
|
|
},
|
|
'allowedLibraryCollections.$': {
|
|
type: String,
|
|
regEx: SimpleSchema.RegEx.Id,
|
|
},
|
|
|
|
// Mechanics
|
|
deathSave: {
|
|
type: deathSaveSchema,
|
|
defaultValue: {},
|
|
},
|
|
// Stats that are computed and denormalised outside of recomputation
|
|
denormalizedStats: {
|
|
type: Object,
|
|
defaultValue: {},
|
|
},
|
|
// Sum of all XP gained by this character
|
|
'denormalizedStats.xp': {
|
|
type: SimpleSchema.Integer,
|
|
defaultValue: 0,
|
|
},
|
|
// Sum of all levels granted by milestone XP
|
|
'denormalizedStats.milestoneLevels': {
|
|
type: SimpleSchema.Integer,
|
|
defaultValue: 0,
|
|
},
|
|
// Does the character need a recompute?
|
|
dirty: {
|
|
type: Boolean,
|
|
optional: true,
|
|
},
|
|
// Version of computation engine that was last used to compute this creature
|
|
computeVersion: {
|
|
type: String,
|
|
optional: true,
|
|
},
|
|
type: {
|
|
type: String,
|
|
defaultValue: 'pc',
|
|
allowedValues: ['pc', 'npc', 'monster'],
|
|
},
|
|
damageMultipliers: {
|
|
type: Object,
|
|
blackbox: true,
|
|
defaultValue: {}
|
|
},
|
|
computeErrors: {
|
|
type: Array,
|
|
optional: true,
|
|
},
|
|
'computeErrors.$': {
|
|
type: Object,
|
|
},
|
|
'computeErrors.$.type': {
|
|
type: String,
|
|
},
|
|
'computeErrors.$.details': {
|
|
type: Object,
|
|
blackbox: true,
|
|
optional: true,
|
|
},
|
|
|
|
// Tabletop
|
|
tabletop: {
|
|
type: String,
|
|
regEx: SimpleSchema.RegEx.id,
|
|
optional: true,
|
|
},
|
|
initiativeRoll: {
|
|
type: SimpleSchema.Integer,
|
|
optional: true,
|
|
},
|
|
tabletopSettings: {
|
|
type: CreatureTabletopSettingsSchema,
|
|
optional: true,
|
|
},
|
|
|
|
// Settings
|
|
settings: {
|
|
type: CreatureSettingsSchema,
|
|
defaultValue: {},
|
|
},
|
|
});
|
|
|
|
CreatureSchema.extend(ColorSchema);
|
|
CreatureSchema.extend(SharingSchema);
|
|
|
|
Creatures.attachSchema(CreatureSchema);
|
|
|
|
|
|
|
|
export default Creatures;
|
|
export { CreatureSchema };
|