|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const fileLister = require('../misc/fileLister');
- const events = require('../misc/events');
-
- module.exports = {
- mods: [],
-
- init: async function () {
- const modList = fileLister.getFolderList('mods');
-
- //Load all mods
- let loadList = modList.map(m => {
- const path = `../mods/${m}/index`;
-
- const mod = require(path);
- const id = mod.id ? mod.id : m.replace('iwd-', '');
-
- return {
- id,
- folderName: m,
- path,
- mod
- };
- });
-
- //Reorder mods so that mods that depend on others load later
- loadList = loadList.sort((a, b) => {
- const { id: idA, mod: { dependsOn: depA = [] } } = a;
- const { id: idB, mod: { dependsOn: depB = [] } } = b;
-
- if (depB.includes(idA) || !depA.length)
- return -1;
- else if (depA.includes(idB) || !depB.length)
- return 1;
-
- return 0;
- });
-
- //Initialize mods
- for (const m of loadList) {
- const { folderName, mod } = m;
-
- await this.onGetMod(folderName, mod);
-
- this.mods.push(mod);
- }
- },
-
- onGetMod: async function (name, mod) {
- if (mod.disabled)
- return;
-
- const isMapThread = global.instancer;
- mod.isMapThread = isMapThread;
-
- mod.events = events;
- mod.folderName = 'server/mods/' + name;
- mod.relativeFolderName = 'mods/' + name;
-
- let list = (mod.extraScripts || []);
- let lLen = list.length;
-
- for (let i = 0; i < lLen; i++) {
- let extra = require('../mods/' + name + '/' + list[i]);
- this.onGetExtra(name, mod, extra);
- }
-
- if (typeof mod.init === 'function')
- await mod.init();
-
- if (isMapThread && typeof mod.initMapThread === 'function')
- await mod.initMapThread();
- else if (!isMapThread && typeof mod.initMainThread === 'function')
- await mod.initMainThread();
- },
-
- onGetExtra: function (name, mod, extra) {
- extra.folderName = 'server/mods/' + name;
- },
-
- tick: function () {
- this.mods.forEach(m => {
- if (m.tick)
- m.tick();
- });
- }
- };
|