dragonroll/plugins/dnd-5e/backend/main.js

91 lines
3.2 KiB
JavaScript
Raw Normal View History

// Entrypoint
2024-10-14 13:50:47 +00:00
let Api;
function Main(api){
Api = api;
// Create our module in the backend. We only need the package name, it must be equal to the one that
// we made inside the client
let dndModule = Api.createModule('dnd-5e');
let itemModel = Api.createModel("item", {
2024-10-14 17:25:46 +00:00
name: { type: "String", required: true, default: "New item"},
type: { type: "String", required: true, default: "Item" },
2024-10-14 13:50:47 +00:00
info: { type: "Object" }, // For preview only
data: { type: "Object" }, // Advanced item
book: { type: "ObjectId", ref: "Book"}
2024-10-14 13:50:47 +00:00
});
2024-10-18 22:42:22 +00:00
let entityDataModel = Api.createModel('entitydata', {
name: { type: "String", required: true },
hp: { type: "Number", required: true },
max_hp: { type: "Number", required: true },
effects: [ { type: "ObjectId", ref: "dnd-5e/effect" } ],
attributes: { type: "Object" }, // {str, dex, ...}
saving_attributes: {type: "Object"},
skill_prof: { type: "Object" },
initiative: { type: "Number" },
speed: {type: "Number" },
ac: {type: "Number"},
proficency: { type: "Number" },
size: {type: "String"},
items: [ {type: "ObjectId", ref: 'dnd-5e/item'} ],
competences: {type: "Object"},
resources: {type: "Object"},
class: { type: "ObjectId", ref: "dnd-5e/progressable" },
race: { type: "ObjectId", ref: "dnd-5e/progressable" },
lvl: { type: "Number" },
desc: { type: "String" },
token: { type: "Object" }
2024-10-18 13:11:08 +00:00
});
2024-10-18 22:42:22 +00:00
let monsterModel = Api.createModel('monster', {
hp_formulae: { type: "String", required: true },
cr: { type: "Number" },
xp_drop: { type: "Number" }
}, entityDataModel);
let actorModel = Api.createModel('actor', {
picture: { type: "String" },
xp: { type: "Number", required: true },
death_throws: { type: "Object" }
}, entityDataModel);
2024-10-18 13:11:08 +00:00
2024-10-18 22:42:22 +00:00
let tableModel = Api.createModel('table', {
name: { type: "String", required: true },
info: { type: "Object" }
2024-10-18 13:11:08 +00:00
});
2024-10-18 22:42:22 +00:00
let progressableModel = Api.createModel('progressable', {
name: { type: "String", required: true },
type: { type: "String", required: true },
icon: { type: "String", required: true },
resources: { type: "Object" },
tables: [ { type: "ObjectId", ref: "dnd-5e/table" } ],
rewards: { type: "Object" }
2024-10-16 11:57:33 +00:00
});
2024-10-18 22:42:22 +00:00
let effectsModel = Api.createModel('effect', {
name: { type: "String", required: true },
icon: { type: "String", required: true },
desc: { type: "String" }
});
2024-10-16 11:57:33 +00:00
2024-10-18 22:42:22 +00:00
let entityModel = Api.createModel('entity', {
data: { type: "ObjectId" },
position: { type: "Object" }
2024-10-16 11:57:33 +00:00
});
2024-10-18 22:42:22 +00:00
dndModule.createModelRoutes(itemModel);
dndModule.createModelRoutes(monsterModel);
dndModule.createModelRoutes(actorModel);
dndModule.createModelRoutes(tableModel);
dndModule.createModelRoutes(progressableModel);
dndModule.createModelRoutes(effectsModel);
dndModule.createModelRoutes(entityModel);
2024-10-14 13:50:47 +00:00
2024-10-18 22:42:22 +00:00
// Api.socket.on("test", () => console.log("test"));
2024-10-14 13:50:47 +00:00
// Api.router.createModelRoutes(itemModel, 'item');
}
2024-10-14 13:50:47 +00:00
export { Main, Api };