Commit 54252535 authored by nanahira's avatar nanahira

support specify path

parent 50129490
...@@ -35,6 +35,11 @@ ...@@ -35,6 +35,11 @@
"127.0.0.1/8", "127.0.0.1/8",
"::1/128" "::1/128"
], ],
"ygopro_path": "./ygopro",
"ygopro_exec_path": "./ygopro",
"expansions_path": [
"./expansions"
],
"i18n": { "i18n": {
"auto_pick": false, "auto_pick": false,
"default": "zh-cn", "default": "zh-cn",
......
...@@ -494,7 +494,7 @@ loadLFList = (path) -> ...@@ -494,7 +494,7 @@ loadLFList = (path) ->
catch catch
try try
log.info("Reading YGOPro version.") log.info("Reading YGOPro version.")
cppversion = parseInt((await fs.promises.readFile('ygopro/gframe/game.cpp', 'utf8')).match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16') cppversion = parseInt((await fs.promises.readFile(path.resolve(settings.modules.ygopro_path, 'gframe', 'game.cpp'), 'utf8')).match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16')
await setting_change(settings, "version", cppversion) await setting_change(settings, "version", cppversion)
log.info "ygopro version 0x"+settings.version.toString(16), "(from source code)" log.info "ygopro version 0x"+settings.version.toString(16), "(from source code)"
catch catch
...@@ -502,8 +502,9 @@ loadLFList = (path) -> ...@@ -502,8 +502,9 @@ loadLFList = (path) ->
log.info "ygopro version 0x"+settings.version.toString(16), "(from config)" log.info "ygopro version 0x"+settings.version.toString(16), "(from config)"
# load the lflist of current date # load the lflist of current date
log.info("Reading banlists.") log.info("Reading banlists.")
await loadLFList('ygopro/expansions/lflist.conf') for expansions in settings.modules.expansions_path
await loadLFList('ygopro/lflist.conf') await loadLFList(path.resolve(settings.modules.ygopro_path, expansions, 'lflist.conf'))
await loadLFList(path.resolve(settings.modules.ygopro_path, 'lflist.conf'))
badwordR = global.badwordR = {} badwordR = global.badwordR = {}
badwordR.level0=new RegExp('(?:'+badwords.level0.join(')|(?:')+')','i'); badwordR.level0=new RegExp('(?:'+badwords.level0.join(')|(?:')+')','i');
...@@ -748,7 +749,7 @@ loadLFList = (path) -> ...@@ -748,7 +749,7 @@ loadLFList = (path) ->
plugin_list = await fs.promises.readdir("./plugins") plugin_list = await fs.promises.readdir("./plugins")
for plugin_filename in plugin_list for plugin_filename in plugin_list
if plugin_filename.endsWith '.js' if plugin_filename.endsWith '.js'
plugin_path = process.cwd() + "/plugins/" + plugin_filename plugin_path = path.resolve(process.cwd(), "plugins", plugin_filename)
require(plugin_path) require(plugin_path)
log.info("Plugin loaded:", plugin_filename) log.info("Plugin loaded:", plugin_filename)
...@@ -1586,15 +1587,26 @@ class Room ...@@ -1586,15 +1587,26 @@ class Room
@hostinfo.start_lp, @hostinfo.start_hand, @hostinfo.draw_count, @hostinfo.time_limit, @hostinfo.replay_mode] @hostinfo.start_lp, @hostinfo.start_hand, @hostinfo.draw_count, @hostinfo.time_limit, @hostinfo.replay_mode]
if firstSeed if firstSeed
# new replay with extended header and long seed # new replay with extended header and long seed
firstSeedBuf = Buffer.allocUnsafe(firstSeed.length * 4) firstSeedBuf = Buffer.allocUnsafe(firstSeed.length * 4)
for i in [0...firstSeed.length] for i in [0...firstSeed.length]
firstSeedBuf.writeUInt32LE(firstSeed[i], i * 4) firstSeedBuf.writeUInt32LE(firstSeed[i], i * 4)
param.push(firstSeedBuf.toString('base64')) param.push(firstSeedBuf.toString('base64'))
console.log(firstSeed, firstSeedBuf.toString('base64'))
try try
@process = spawn './ygopro', param, {cwd: 'ygopro'} @process = spawn(
path.resolve(settings.modules.ygopro_path, settings.modules.ygopro_exec_path),
param,
{
cwd: path.resolve(settings.modules.ygopro_path),
env: {
...process.env,
YGOPRO_EXPANSIONS: settings.modules.expansions_path
.map(s => path.resolve(settings.modules.ygopro_path, s))
.join(',')
}
}
)
@process_pid = @process.pid @process_pid = @process.pid
@process.on 'error', (err)=> @process.on 'error', (err)=>
log.warn 'CREATE ROOM ERROR', err log.warn 'CREATE ROOM ERROR', err
......
...@@ -372,7 +372,7 @@ ...@@ -372,7 +372,7 @@
}; };
init = async function() { init = async function() {
var AthleticChecker, Challonge, DataManager, chat_color, config, cppversion, defaultConfig, default_data, dirPath, dns, e, get_rooms_count, http_server, https, httpsOptions, https_server, imported, j, key, keysFromEnv, l, len, len1, len2, m, main_http_server, mkdirList, neosHttpServer, neosWsServer, pgClient, pg_client, pg_query, plugin_filename, plugin_list, plugin_path, postData, settingKey, val, valFromDefault, vip_info, ws; var AthleticChecker, Challonge, DataManager, chat_color, config, cppversion, defaultConfig, default_data, dirPath, dns, e, expansions, get_rooms_count, http_server, https, httpsOptions, https_server, imported, j, key, keysFromEnv, l, len, len1, len2, len3, m, main_http_server, mkdirList, n, neosHttpServer, neosWsServer, pgClient, pg_client, pg_query, plugin_filename, plugin_list, plugin_path, postData, ref, settingKey, val, valFromDefault, vip_info, ws;
log.info('Reading config.'); log.info('Reading config.');
await createDirectoryIfNotExists("./config"); await createDirectoryIfNotExists("./config");
await importOldConfig(); await importOldConfig();
...@@ -637,7 +637,7 @@ ...@@ -637,7 +637,7 @@
} }
try { try {
log.info("Reading YGOPro version."); log.info("Reading YGOPro version.");
cppversion = parseInt(((await fs.promises.readFile('ygopro/gframe/game.cpp', 'utf8'))).match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16'); cppversion = parseInt(((await fs.promises.readFile(path.resolve(settings.modules.ygopro_path, 'gframe', 'game.cpp'), 'utf8'))).match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16');
await setting_change(settings, "version", cppversion); await setting_change(settings, "version", cppversion);
log.info("ygopro version 0x" + settings.version.toString(16), "(from source code)"); log.info("ygopro version 0x" + settings.version.toString(16), "(from source code)");
} catch (error1) { } catch (error1) {
...@@ -646,8 +646,12 @@ ...@@ -646,8 +646,12 @@
} }
// load the lflist of current date // load the lflist of current date
log.info("Reading banlists."); log.info("Reading banlists.");
await loadLFList('ygopro/expansions/lflist.conf'); ref = settings.modules.expansions_path;
await loadLFList('ygopro/lflist.conf'); for (l = 0, len1 = ref.length; l < len1; l++) {
expansions = ref[l];
await loadLFList(path.resolve(settings.modules.ygopro_path, expansions, 'lflist.conf'));
}
await loadLFList(path.resolve(settings.modules.ygopro_path, 'lflist.conf'));
badwordR = global.badwordR = {}; badwordR = global.badwordR = {};
badwordR.level0 = new RegExp('(?:' + badwords.level0.join(')|(?:') + ')', 'i'); badwordR.level0 = new RegExp('(?:' + badwords.level0.join(')|(?:') + ')', 'i');
badwordR.level1 = new RegExp('(?:' + badwords.level1.join(')|(?:') + ')', 'i'); badwordR.level1 = new RegExp('(?:' + badwords.level1.join(')|(?:') + ')', 'i');
...@@ -662,10 +666,10 @@ ...@@ -662,10 +666,10 @@
if (settings.modules.max_rooms_count) { if (settings.modules.max_rooms_count) {
rooms_count = 0; rooms_count = 0;
get_rooms_count = function() { get_rooms_count = function() {
var _rooms_count, l, len1, room; var _rooms_count, len2, m, room;
_rooms_count = 0; _rooms_count = 0;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (room && room.established) { if (room && room.established) {
_rooms_count++; _rooms_count++;
} }
...@@ -747,9 +751,9 @@ ...@@ -747,9 +751,9 @@
if (settings.modules.tips.enabled) { if (settings.modules.tips.enabled) {
if (settings.modules.tips.interval) { if (settings.modules.tips.interval) {
setInterval(function() { setInterval(function() {
var l, len1, room; var len2, m, room;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (room && room.established && room.duel_stage !== ygopro.constants.END) { if (room && room.established && room.duel_stage !== ygopro.constants.END) {
if (room.duel_stage !== ygopro.constants.DUEL_STAGE.DUELING) { if (room.duel_stage !== ygopro.constants.DUEL_STAGE.DUELING) {
ygopro.stoc_send_random_tip_to_room(room); ygopro.stoc_send_random_tip_to_room(room);
...@@ -760,9 +764,9 @@ ...@@ -760,9 +764,9 @@
} }
if (settings.modules.tips.interval_ingame) { if (settings.modules.tips.interval_ingame) {
setInterval(function() { setInterval(function() {
var l, len1, room; var len2, m, room;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (room && room.established && room.duel_stage !== ygopro.constants.END) { if (room && room.established && room.duel_stage !== ygopro.constants.END) {
if (room.duel_stage === ygopro.constants.DUEL_STAGE.DUELING) { if (room.duel_stage === ygopro.constants.DUEL_STAGE.DUELING) {
ygopro.stoc_send_random_tip_to_room(room); ygopro.stoc_send_random_tip_to_room(room);
...@@ -798,9 +802,9 @@ ...@@ -798,9 +802,9 @@
} }
// clean zombie rooms // clean zombie rooms
setInterval(function() { setInterval(function() {
var l, len1, room; var len2, m, room;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (room && !room.players.length) { if (room && !room.players.length) {
room.terminate(); room.terminate();
} }
...@@ -808,9 +812,9 @@ ...@@ -808,9 +812,9 @@
}, 300000); }, 300000);
if (settings.modules.random_duel.enabled) { if (settings.modules.random_duel.enabled) {
setInterval(async function() { setInterval(async function() {
var l, len1, room, time_passed; var len2, m, room, time_passed;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.random_type && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0 && (!settings.modules.side_timeout || room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING) && !room.recovered)) { if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.random_type && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0 && (!settings.modules.side_timeout || room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING) && !room.recovered)) {
continue; continue;
} }
...@@ -832,9 +836,9 @@ ...@@ -832,9 +836,9 @@
} }
if (settings.modules.mycard.enabled) { if (settings.modules.mycard.enabled) {
setInterval(function() { setInterval(function() {
var l, len1, len2, m, player, room, time_passed, waited_time; var len2, len3, m, n, player, room, time_passed, waited_time;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.arena && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0 && (!settings.modules.side_timeout || room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING) && !room.recovered)) { if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.arena && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0 && (!settings.modules.side_timeout || room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING) && !room.recovered)) {
continue; continue;
} }
...@@ -851,8 +855,8 @@ ...@@ -851,8 +855,8 @@
} }
} }
if (true) { // settings.modules.arena_mode.punish_quit_before_match if (true) { // settings.modules.arena_mode.punish_quit_before_match
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (n = 0, len3 = ROOM_all.length; n < len3; n++) {
room = ROOM_all[m]; room = ROOM_all[n];
if (!(room && room.arena && room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN && room.get_playing_player().length < 2)) { if (!(room && room.arena && room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN && room.get_playing_player().length < 2)) {
continue; continue;
} }
...@@ -872,13 +876,13 @@ ...@@ -872,13 +876,13 @@
} }
if (settings.modules.heartbeat_detection.enabled) { if (settings.modules.heartbeat_detection.enabled) {
setInterval(function() { setInterval(function() {
var l, len1, len2, m, player, ref, room; var len2, len3, m, n, player, ref1, room;
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && (room.hostinfo.time_limit === 0 || room.duel_stage !== ygopro.constants.DUEL_STAGE.DUELING) && !room.windbot) { if (room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && (room.hostinfo.time_limit === 0 || room.duel_stage !== ygopro.constants.DUEL_STAGE.DUELING) && !room.windbot) {
ref = room.get_playing_player(); ref1 = room.get_playing_player();
for (m = 0, len2 = ref.length; m < len2; m++) { for (n = 0, len3 = ref1.length; n < len3; n++) {
player = ref[m]; player = ref1[n];
if (player && (room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING || player.selected_preduel)) { if (player && (room.duel_stage !== ygopro.constants.DUEL_STAGE.SIDING || player.selected_preduel)) {
CLIENT_heartbeat_register(player, true); CLIENT_heartbeat_register(player, true);
} }
...@@ -891,10 +895,10 @@ ...@@ -891,10 +895,10 @@
spawn_windbot(); spawn_windbot();
} }
setInterval(function() { setInterval(function() {
var l, len1, results, room; var len2, m, results, room;
results = []; results = [];
for (l = 0, len1 = ROOM_all.length; l < len1; l++) { for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
room = ROOM_all[l]; room = ROOM_all[m];
if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.hostinfo.auto_death && !room.auto_death_triggered && moment_now.diff(room.start_time) > 60000 * room.hostinfo.auto_death)) { if (!(room && room.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && room.hostinfo.auto_death && !room.auto_death_triggered && moment_now.diff(room.start_time) > 60000 * room.hostinfo.auto_death)) {
continue; continue;
} }
...@@ -941,15 +945,15 @@ ...@@ -941,15 +945,15 @@
neosHttpServer.listen(settings.modules.neos.port); neosHttpServer.listen(settings.modules.neos.port);
} }
mkdirList = ["./plugins", settings.modules.tournament_mode.deck_path, settings.modules.tournament_mode.replay_path, settings.modules.tournament_mode.log_save_path, settings.modules.deck_log.local]; mkdirList = ["./plugins", settings.modules.tournament_mode.deck_path, settings.modules.tournament_mode.replay_path, settings.modules.tournament_mode.log_save_path, settings.modules.deck_log.local];
for (l = 0, len1 = mkdirList.length; l < len1; l++) { for (m = 0, len2 = mkdirList.length; m < len2; m++) {
dirPath = mkdirList[l]; dirPath = mkdirList[m];
await createDirectoryIfNotExists(dirPath); await createDirectoryIfNotExists(dirPath);
} }
plugin_list = (await fs.promises.readdir("./plugins")); plugin_list = (await fs.promises.readdir("./plugins"));
for (m = 0, len2 = plugin_list.length; m < len2; m++) { for (n = 0, len3 = plugin_list.length; n < len3; n++) {
plugin_filename = plugin_list[m]; plugin_filename = plugin_list[n];
if (plugin_filename.endsWith('.js')) { if (plugin_filename.endsWith('.js')) {
plugin_path = process.cwd() + "/plugins/" + plugin_filename; plugin_path = path.resolve(process.cwd(), "plugins", plugin_filename);
require(plugin_path); require(plugin_path);
log.info("Plugin loaded:", plugin_filename); log.info("Plugin loaded:", plugin_filename);
} }
...@@ -2049,11 +2053,16 @@ ...@@ -2049,11 +2053,16 @@
firstSeedBuf.writeUInt32LE(firstSeed[i], i * 4); firstSeedBuf.writeUInt32LE(firstSeed[i], i * 4);
} }
param.push(firstSeedBuf.toString('base64')); param.push(firstSeedBuf.toString('base64'));
console.log(firstSeed, firstSeedBuf.toString('base64'));
} }
try { try {
this.process = spawn('./ygopro', param, { this.process = spawn(path.resolve(settings.modules.ygopro_path, settings.modules.ygopro_exec_path), param, {
cwd: 'ygopro' cwd: path.resolve(settings.modules.ygopro_path),
env: {
...process.env,
YGOPRO_EXPANSIONS: settings.modules.expansions_path.map(s(() => {
return path.resolve(settings.modules.ygopro_path, s);
})).join(',')
}
}); });
this.process_pid = this.process.pid; this.process_pid = this.process.pid;
this.process.on('error', (err) => { this.process.on('error', (err) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment