Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

83 linhas
1.7 KiB

  1. const fileLister = require('../misc/fileLister');
  2. const events = require('../misc/events');
  3. module.exports = {
  4. mods: [],
  5. init: async function () {
  6. const modList = fileLister.getFolderList('mods');
  7. //Load all mods
  8. let loadList = modList.map(m => {
  9. const path = `../mods/${m}/index`;
  10. const mod = require(path);
  11. const id = mod.id ? mod.id : m.replace('iwd-', '');
  12. return {
  13. id,
  14. folderName: m,
  15. path,
  16. mod
  17. };
  18. });
  19. while (loadList.length) {
  20. for (const m of loadList) {
  21. const { id, folderName, mod } = m;
  22. const { dependsOn = [] } = mod;
  23. const wait = dependsOn.some(d => loadList.some(l => l.id === d));
  24. if (wait)
  25. continue;
  26. await this.onGetMod(folderName, mod);
  27. this.mods.push(mod);
  28. loadList.spliceWhere(l => l.id === id);
  29. }
  30. }
  31. },
  32. onGetMod: async function (name, mod) {
  33. if (mod.disabled)
  34. return;
  35. const isMapThread = !!global.instancer;
  36. mod.isMapThread = isMapThread;
  37. mod.events = events;
  38. mod.folderName = 'server/mods/' + name;
  39. mod.relativeFolderName = 'mods/' + name;
  40. let list = (mod.extraScripts || []);
  41. let lLen = list.length;
  42. for (let i = 0; i < lLen; i++) {
  43. let extra = require('../mods/' + name + '/' + list[i]);
  44. this.onGetExtra(name, mod, extra);
  45. }
  46. if (typeof mod.init === 'function')
  47. await mod.init();
  48. if (isMapThread && typeof mod.initMapThread === 'function')
  49. await mod.initMapThread();
  50. else if (!isMapThread && typeof mod.initMainThread === 'function')
  51. await mod.initMainThread();
  52. },
  53. onGetExtra: function (name, mod, extra) {
  54. extra.folderName = 'server/mods/' + name;
  55. },
  56. tick: function () {
  57. this.mods.forEach(m => {
  58. if (m.tick)
  59. m.tick();
  60. });
  61. }
  62. };