reldens
Version:
Reldens - MMORPG Platform
129 lines (118 loc) • 4.58 kB
JavaScript
const { ServerManager } = require('../server');
const { ObjectsImporter } = require('../lib/import/server/objects-importer');
const { PlayersExperiencePerLevelImporter } = require('../lib/import/server/players-experience-per-level-importer');
const { AttributesPerLevelImporter } = require('../lib/import/server/attributes-per-level-importer');
const { ClassPathsImporter } = require('../lib/import/server/class-paths-importer');
const { MapsImporter } = require('../lib/import/server/maps-importer');
const { SkillsImporter } = require('../lib/import/server/skills-importer');
const { FileHandler } = require('../lib/game/server/file-handler');
/**
*
* Commands:
*
* $ npx reldens-import objects custom-game-theme-test generate-data/objects-generate-data.json
*
* - Players experience per level import is not required if class-paths importer is going to be used.
* $ npx reldens-import players-experience-per-level custom-game-theme-test generate-data/players-experience-per-level.json
*
* - Class-paths importer will also import the experience per level.
* $ npx reldens-import class-paths custom-game-theme-test generate-data/class-paths.json
*
* $ npx reldens-import attributes-per-level custom-game-theme-test generate-data/class-paths-attributes-per-level.json
*
* $ npx reldens-import maps custom-game-theme-test generate-data/maps.json
*
* $ npx reldens-import skills custom-game-theme-test generate-data/skills-data.json
*
*/
let validCommands = {
'objects': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new ObjectsImporter(serverManager);
await importer.import(data);
},
'players-experience-per-level': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new PlayersExperiencePerLevelImporter(serverManager);
await importer.import(data);
},
'attributes-per-level': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new AttributesPerLevelImporter(serverManager);
await importer.import(data);
},
'class-paths': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new ClassPathsImporter(serverManager);
await importer.import(data);
},
'maps': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new MapsImporter(serverManager);
await importer.import(data);
},
'skills': async (data, projectThemeName) => {
let serverManager = await initializeServer(data, projectThemeName);
if(!serverManager){
return false;
}
let importer = new SkillsImporter(serverManager);
await importer.import(data);
}
};
async function initializeServer(data, projectThemeName)
{
if (!data) {
console.error('- Missing data.', data);
return false;
}
let appServer = new ServerManager({
projectRoot: process.cwd(),
projectThemeName
});
await appServer.initializeStorage(appServer.rawConfig, appServer.dataServerDriver);
return appServer;
}
let args = process.argv;
if(2 === args.length){
console.error('- Missing arguments.', args);
return false;
}
let extractedParams = args.slice(2);
let command = extractedParams[0] || false;
if (!command) {
console.error('- Missing command.');
return false;
}
let themeName = extractedParams[1] || '';
if (!themeName) {
console.error('- Missing active theme name.');
return false;
}
if (-1 === Object.keys(validCommands).indexOf(command)) {
console.error('- Invalid command.', command);
return false;
}
validCommands[command](FileHandler.fetchFileJson(extractedParams[2] || ''), themeName).then(() => {
console.log('Done.');
process.exit();
}).catch((error) => {
console.error(error);
process.exit();
});