diff --git a/lib/playerPlugins/commands.js b/lib/playerPlugins/commands.js index 13f9a5e..23a2c2e 100644 --- a/lib/playerPlugins/commands.js +++ b/lib/playerPlugins/commands.js @@ -87,6 +87,10 @@ function inject(serv, player, options) { }); } } + else if (results = command.match(/^reload/)) { + serv.reloadPlugins(); + player.chat('Reloaded ' + serv.plugins.length + ' plugins.'); + } else player.chat("Invalid command."); } diff --git a/lib/serverPlugins/login.js b/lib/serverPlugins/login.js index ce9ee05..8f4fbbf 100644 --- a/lib/serverPlugins/login.js +++ b/lib/serverPlugins/login.js @@ -19,7 +19,8 @@ function inject(serv,options) player.plugins = Array(); for(var pluginName in serv.plugins) { // External plugins player.plugins[serv.plugins[pluginName].id] = {}; // Give object to save data per plugin per player, referenced by plugin ID - require(serv.plugins[pluginName].path)(serv, player, serv.plugins[pluginName], options); + var plug = require(serv.plugins[pluginName].path)(serv, player, serv.plugins[pluginName], options); + } }); } \ No newline at end of file diff --git a/lib/serverPlugins/plugins.js b/lib/serverPlugins/plugins.js index 27e75ea..6c4d505 100644 --- a/lib/serverPlugins/plugins.js +++ b/lib/serverPlugins/plugins.js @@ -3,7 +3,54 @@ module.exports = inject; var fs = require('fs'); function inject(serv) { - getNodeModules(serv, setPluginsFromModules); + + serv.loadPlugins = loadPlugins; + + serv.loadPlugins(); + + function resetPlayers() { + for (var p in serv.players) { + var player = serv.players[p] + player.plugins = Array(); + for (var pl in serv.plugins) { + var plugin = serv.plugins[pl]; + player.plugins[plugin.id] = {}; + require(plugin.path)(serv, player, plugin); + } + console.log(serv.players[p].plugins); + } + } + + serv.reloadPlugins = function() { + console.log('RELOADING DOES NOT WORK'); + return; + serv.emit('pluginend'); + resetPlayers(); + } + + serv.fullReloadPlugins = function(cb) { + console.log('RELOADING DOES NOT WORK'); + return; + serv.emit('pluginend'); + serv.loadPlugins(function() { + resetPlayers(); + cb(); + }); + } + + serv.getPlugin = function(name) { + return serv.plugins[name] || null; + } +} + +function loadPlugins(cb) { + var serv = this; + serv.plugins = Array(); + + loadCount = 0; + allPlugins = null; + + getNodeModules(serv, setPluginsFromModules, cb); var pluginPath = __dirname.match(/(.*?)\/lib/)[1] + '/plugins'; // Prob a cleaner way to do this fs.readdir(pluginPath, function(err, arr) { @@ -17,17 +64,12 @@ function inject(serv) { path: pluginPath + '/' + arr[a] }); } - setPlugins(plugins, serv); + setPlugins(plugins, serv, cb); } }); - - serv.plugins = Array(); - serv.getPlugin = function(name) { - return serv.plugins[name] || null; - } } -function setPluginsFromModules(err, modules, serv) { +function setPluginsFromModules(err, modules, serv, cb) { if (err) { console.log('ERROR: Error loading node_modules; Cannot load external plugins! /lib/serverPlugins/plugins.js'); serv.emit('error',err); @@ -44,12 +86,12 @@ function setPluginsFromModules(err, modules, serv) { }); } } - setPlugins(plugins, serv); + setPlugins(plugins, serv, cb); } var loadCount = 0; var allPlugins; -function setPlugins(plugins, serv) { +function setPlugins(plugins, serv, cb) { loadCount++; if (loadCount < 2) { // Wait for both plugins folder and node_modules to load allPlugins = plugins; @@ -67,16 +109,17 @@ function setPlugins(plugins, serv) { }; console.log('Loaded plugin: ' + plugins[p].name); id++; - if (p < plugins.length-1 && plugins[p].name == plugins[p+1].name) { // Only checks for two duplicates, TODO: check for 3+ duplicates + if (p < plugins.length-1 && plugins[p].name == plugins[parseInt(p)+1].name) { // Only checks for two duplicates, TODO: check for 3+ duplicates p++; } } console.log('Loaded ' + id + ' Plugin' + (id != 1 ? 's' : '') ); + if (cb) cb(); } -function getNodeModules(serv, cb) { +function getNodeModules(serv, cb, cb2) { require('child_process').exec('npm ls --json', function(err, stdout, stderr) { - if (err) return cb(err, null, serv); - cb(null, JSON.parse(stdout).dependencies, serv); + if (err) return cb(err, null, serv, cb2); + cb(null, JSON.parse(stdout).dependencies, serv, cb2); }); } \ No newline at end of file