diff --git a/sharedPlugins/globalChat/index.js b/sharedPlugins/globalChat/index.js index 3cb05edd..65fe7738 100644 --- a/sharedPlugins/globalChat/index.js +++ b/sharedPlugins/globalChat/index.js @@ -12,6 +12,8 @@ module.exports = class remoteCommands { this.socket.on("gameChat", async data => { if(data.instanceID && data.instanceID != this.config.unique.toString()){ if(data.data.includes("[CHAT]") + // if this isn't used as an info command or something (reduce spam) + && !data.data.includes("!info") // check if we are allowed to cross chat at all, default to true && (mergedConfig.enableCrossServerShout == undefined || mergedConfig.enableCrossServerShout) // check if we are supposed to relay this message diff --git a/sharedPlugins/scenario_loader/index.js b/sharedPlugins/scenario_loader/index.js index 24c04a54..79aaaf52 100644 --- a/sharedPlugins/scenario_loader/index.js +++ b/sharedPlugins/scenario_loader/index.js @@ -11,29 +11,38 @@ module.exports = class remoteCommands { let hotpatchInstallStatus = await this.checkHotpatchInstallation(); messageInterface("Hotpach installation status: "+hotpatchInstallStatus); if(hotpatchInstallStatus){ - let scenarioDir = path.join(__dirname, "scenarios"); + let scenarioDir = "scenarios"; await fs.ensureDir(scenarioDir) let scenarios = await fs.readdir(scenarioDir); for(let i = 0; i < scenarios.length; i++){ let scenPath = path.join(scenarioDir, scenarios[i]); let stat = await fs.stat(scenPath); if(stat.isDirectory){ - let scenario = await fs.readdir(scenPath); + // let scenario = await fs.readdir(scenPath, {withFileTypes: true}); + + // this function is bad in terms of scope since it relies on a global for return values, should be refactored. + filesCollection = []; + readDirectorySynchronously(scenPath); + let scenario = filesCollection; let files = {}; for(let o = 0; o < scenario.length; o++){ let fileName = scenario[o]; if(fileName.split(".")[1] && fileName.split(".")[1].toLowerCase() == "lua"){ - messageInterface(`Loading ${scenarios[i]}/${fileName}`); - let code = await clusterTools.getLua(path.join(scenPath, fileName), false); + messageInterface(`Loading `/*${scenarios[i]}*/+`${fileName}`); + let code = await clusterTools.getLua(/*path.join(scenPath, */fileName/*)*/, false); + // trim away external path from filenames + fileName = fileName.replace("scenarios\\factoriommoscenarios\\", ""); files[fileName.split(".")[0]] = code; } } let fileImportString = `\{`; for(let k in files){ - fileImportString += `${k} = '${files[k]}, '`; + let name = k.replace(/\\/g, '/'); + name = name.replace(/ /g, ''); + fileImportString += `["${name}"] = '${files[k]}', `; } fileImportString += `\}`; - + console.log(fileImportString) if(files.control) var returnValue = await messageInterface(`/silent-command remote.call('hotpatch', 'update', '${scenarios[i]}', '1.0.0', '${files.control}', ${fileImportString})`); if(returnValue) messageInterface(returnValue); } @@ -51,3 +60,25 @@ module.exports = class remoteCommands { } } } + +// this function is bad in terms of scope since it relies on a global for return values, should be refactored. +var filesCollection = []; +const directoriesToSkip = ['bower_components', 'node_modules', 'www', 'platforms', '.git']; + +function readDirectorySynchronously(directory) { + var currentDirectorypath = /*path.join(__dirname + */directory//); + + var currentDirectory = fs.readdirSync(currentDirectorypath, 'utf8'); + + currentDirectory.forEach(file => { + var fileShouldBeSkipped = directoriesToSkip.indexOf(file) > -1; + var pathOfCurrentItem = path.join(/*__dirname + */directory + '/' + file); + if (!fileShouldBeSkipped && fs.statSync(pathOfCurrentItem).isFile()) { + filesCollection.push(pathOfCurrentItem); + } + else if (!fileShouldBeSkipped) { + var directorypath = path.join(directory, file); + readDirectorySynchronously(directorypath); + } + }); +}