Commit c13cbf39 authored by nanahira's avatar nanahira

Merge branch 'mc'

parents b718c4ad 1109ce18
Pipeline #4780 failed with stages
in 15 minutes and 12 seconds
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
"update": "请更新你的客户端版本", "update": "请更新你的客户端版本",
"wait_update": "你的客户端版本高于服务器版本,请等待服务器更新", "wait_update": "你的客户端版本高于服务器版本,请等待服务器更新",
"stop": false, "stop": false,
"full": "服务器已爆满",
"max_rooms_count": 0,
"side_timeout": false, "side_timeout": false,
"tag_duel_surrender": true, "tag_duel_surrender": true,
"replay_delay": true, "replay_delay": true,
......
...@@ -242,6 +242,8 @@ moment_now = global.moment_now = null ...@@ -242,6 +242,8 @@ moment_now = global.moment_now = null
moment_now_string = global.moment_now_string = null moment_now_string = global.moment_now_string = null
moment_long_ago_string = global.moment_long_ago_string = null moment_long_ago_string = global.moment_long_ago_string = null
rooms_count = 0
challonge = null challonge = null
challonge_cache = { challonge_cache = {
participants: null participants: null
...@@ -492,6 +494,17 @@ init = () -> ...@@ -492,6 +494,17 @@ init = () ->
moment_long_ago_string = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's').format() moment_long_ago_string = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's').format()
return return
, 500 , 500
if settings.modules.max_rooms_count
rooms_count=0
get_rooms_count = ()->
_rooms_count=0
for room in ROOM_all when room and room.established
_rooms_count++
rooms_count=_rooms_count
setTimeout get_rooms_count, 1000
return
setTimeout get_rooms_count, 1000
if settings.modules.windbot.enabled if settings.modules.windbot.enabled
log.info("Reading bot list.") log.info("Reading bot list.")
...@@ -830,7 +843,7 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player ...@@ -830,7 +843,7 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player
return await ROOM_find_or_create_random(uname, player_ip) return await ROOM_find_or_create_random(uname, player_ip)
if room = ROOM_find_by_name(name) if room = ROOM_find_by_name(name)
return room return room
else if memory_usage >= 90 else if memory_usage >= 90 or (settings.modules.max_rooms_count and rooms_count >= settings.modules.max_rooms_count)
return null return null
else else
room = new Room(name) room = new Room(name)
...@@ -872,7 +885,7 @@ ROOM_find_or_create_random = global.ROOM_find_or_create_random = (type, player_i ...@@ -872,7 +885,7 @@ ROOM_find_or_create_random = global.ROOM_find_or_create_random = (type, player_i
if result if result
result.welcome = '${random_duel_enter_room_waiting}' result.welcome = '${random_duel_enter_room_waiting}'
#log.info 'found room', player_name #log.info 'found room', player_name
else if memory_usage < 90 else if memory_usage < 90 and not (settings.modules.max_rooms_count and rooms_count >= settings.modules.max_rooms_count)
type = if type then type else settings.modules.random_duel.default_type type = if type then type else settings.modules.random_duel.default_type
name = type + ',RANDOM#' + Math.floor(Math.random() * 100000) name = type + ',RANDOM#' + Math.floor(Math.random() * 100000)
result = new Room(name) result = new Room(name)
...@@ -2389,7 +2402,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2389,7 +2402,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
return return
if !room if !room
ygopro.stoc_die(client, "${server_full}") ygopro.stoc_die(client, settings.modules.full)
else if room.error else if room.error
ygopro.stoc_die(client, room.error) ygopro.stoc_die(client, room.error)
else else
...@@ -2550,7 +2563,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2550,7 +2563,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
# room.max_player = 2 # room.max_player = 2
room.welcome = "${challonge_match_created}" room.welcome = "${challonge_match_created}"
if !room if !room
ygopro.stoc_die(client, "${server_full}") ygopro.stoc_die(client, settings.modules.full)
else if room.error else if room.error
ygopro.stoc_die(client, room.error) ygopro.stoc_die(client, room.error)
else else
...@@ -2591,7 +2604,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2591,7 +2604,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
#log.info 'join_game',info.pass, client.name #log.info 'join_game',info.pass, client.name
room = await ROOM_find_or_create_by_name(info.pass, client.ip) room = await ROOM_find_or_create_by_name(info.pass, client.ip)
if !room if !room
ygopro.stoc_die(client, "${server_full}") ygopro.stoc_die(client, settings.modules.full)
else if room.error else if room.error
ygopro.stoc_die(client, room.error) ygopro.stoc_die(client, room.error)
else else
......
// Generated by CoffeeScript 2.5.1 // Generated by CoffeeScript 2.5.1
(function() { (function() {
// 标准库 // 标准库
var CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, CLIENT_send_vip_status, CLIENT_use_cdkey, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_callback, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, is_challonge_requesting, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, refresh_challonge_cache, release_disconnect, replaced_index, report_to_big_brother, request, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib; var CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, CLIENT_send_vip_status, CLIENT_use_cdkey, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_callback, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, is_challonge_requesting, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, refresh_challonge_cache, release_disconnect, replaced_index, report_to_big_brother, request, roomlist, rooms_count, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -304,6 +304,8 @@ ...@@ -304,6 +304,8 @@
moment_long_ago_string = global.moment_long_ago_string = null; moment_long_ago_string = global.moment_long_ago_string = null;
rooms_count = 0;
challonge = null; challonge = null;
challonge_cache = { challonge_cache = {
...@@ -373,7 +375,7 @@ ...@@ -373,7 +375,7 @@
}; };
init = async function() { init = async function() {
var AthleticChecker, DataManager, challonge_module_name, challonge_type, chat_color, config, cppversion, defaultConfig, default_data, dirPath, dns, e, http_server, https, https_server, imported, j, l, len, len1, len2, m, mkdirList, options, pgClient, pg_client, pg_query, plugin_filename, plugin_list, plugin_path, postData, ref, vip_info; var AthleticChecker, DataManager, challonge_module_name, challonge_type, chat_color, config, cppversion, defaultConfig, default_data, dirPath, dns, e, get_rooms_count, http_server, https, https_server, imported, j, l, len, len1, len2, m, mkdirList, options, pgClient, pg_client, pg_query, plugin_filename, plugin_list, plugin_path, postData, ref, vip_info;
log.info('Reading config.'); log.info('Reading config.');
await createDirectoryIfNotExists("./config"); await createDirectoryIfNotExists("./config");
await importOldConfig(); await importOldConfig();
...@@ -623,6 +625,22 @@ ...@@ -623,6 +625,22 @@
moment_now_string = moment_now.format(); moment_now_string = moment_now.format();
moment_long_ago_string = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's').format(); moment_long_ago_string = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's').format();
}, 500); }, 500);
if (settings.modules.max_rooms_count) {
rooms_count = 0;
get_rooms_count = function() {
var _rooms_count, j, len, room;
_rooms_count = 0;
for (j = 0, len = ROOM_all.length; j < len; j++) {
room = ROOM_all[j];
if (room && room.established) {
_rooms_count++;
}
}
rooms_count = _rooms_count;
setTimeout(get_rooms_count, 1000);
};
setTimeout(get_rooms_count, 1000);
}
if (settings.modules.windbot.enabled) { if (settings.modules.windbot.enabled) {
log.info("Reading bot list."); log.info("Reading bot list.");
windbots = global.windbots = ((await loadJSONAsync(settings.modules.windbot.botlist))).windbots; windbots = global.windbots = ((await loadJSONAsync(settings.modules.windbot.botlist))).windbots;
...@@ -1058,7 +1076,7 @@ ...@@ -1058,7 +1076,7 @@
} }
if (room = ROOM_find_by_name(name)) { if (room = ROOM_find_by_name(name)) {
return room; return room;
} else if (memory_usage >= 90) { } else if (memory_usage >= 90 || (settings.modules.max_rooms_count && rooms_count >= settings.modules.max_rooms_count)) {
return null; return null;
} else { } else {
room = new Room(name); room = new Room(name);
...@@ -1110,7 +1128,7 @@ ...@@ -1110,7 +1128,7 @@
if (result) { if (result) {
result.welcome = '${random_duel_enter_room_waiting}'; result.welcome = '${random_duel_enter_room_waiting}';
//log.info 'found room', player_name //log.info 'found room', player_name
} else if (memory_usage < 90) { } else if (memory_usage < 90 && !(settings.modules.max_rooms_count && rooms_count >= settings.modules.max_rooms_count)) {
type = type ? type : settings.modules.random_duel.default_type; type = type ? type : settings.modules.random_duel.default_type;
name = type + ',RANDOM#' + Math.floor(Math.random() * 100000); name = type + ',RANDOM#' + Math.floor(Math.random() * 100000);
result = new Room(name); result = new Room(name);
...@@ -3149,7 +3167,7 @@ ...@@ -3149,7 +3167,7 @@
return; return;
} }
if (!room) { if (!room) {
ygopro.stoc_die(client, "${server_full}"); ygopro.stoc_die(client, settings.modules.full);
} else if (room.error) { } else if (room.error) {
ygopro.stoc_die(client, room.error); ygopro.stoc_die(client, room.error);
} else { } else {
...@@ -3339,7 +3357,7 @@ ...@@ -3339,7 +3357,7 @@
room.welcome = "${challonge_match_created}"; room.welcome = "${challonge_match_created}";
} }
if (!room) { if (!room) {
ygopro.stoc_die(client, "${server_full}"); ygopro.stoc_die(client, settings.modules.full);
} else if (room.error) { } else if (room.error) {
ygopro.stoc_die(client, room.error); ygopro.stoc_die(client, room.error);
} else { } else {
...@@ -3374,7 +3392,7 @@ ...@@ -3374,7 +3392,7 @@
//log.info 'join_game',info.pass, client.name //log.info 'join_game',info.pass, client.name
room = (await ROOM_find_or_create_by_name(info.pass, client.ip)); room = (await ROOM_find_or_create_by_name(info.pass, client.ip));
if (!room) { if (!room) {
ygopro.stoc_die(client, "${server_full}"); ygopro.stoc_die(client, settings.modules.full);
} else if (room.error) { } else if (room.error) {
ygopro.stoc_die(client, room.error); ygopro.stoc_die(client, room.error);
} else { } else {
......
...@@ -8,13 +8,16 @@ loadJSON = require('load-json-file').sync ...@@ -8,13 +8,16 @@ loadJSON = require('load-json-file').sync
@i18ns = loadJSON './data/i18n.json' @i18ns = loadJSON './data/i18n.json'
@i18nR = {} @i18nR = {}
for lang, data of @i18ns @reloadI18nR = () ->
@i18nR[lang]={} for lang, data of @i18ns
for key, text of data @i18nR[lang]={}
@i18nR[lang][key]={ for key, text of data
regex: new RegExp("\\$\\{"+key+"\\}",'g'), @i18nR[lang][key]={
text: text regex: new RegExp("\\$\\{"+key+"\\}",'g'),
} text: text
}
reloadI18nR()
YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper # 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化 YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper # 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化
@helper = new YGOProMessagesHelper(9000) @helper = new YGOProMessagesHelper(9000)
......
// Generated by CoffeeScript 2.5.1 // Generated by CoffeeScript 2.5.1
(function() { (function() {
var Struct, YGOProMessagesHelper, _, data, key, lang, loadJSON, ref, text, translateHandler; var Struct, YGOProMessagesHelper, _, loadJSON, translateHandler;
_ = require('underscore'); _ = require('underscore');
...@@ -16,18 +16,30 @@ ...@@ -16,18 +16,30 @@
this.i18nR = {}; this.i18nR = {};
ref = this.i18ns; this.reloadI18nR = function() {
for (lang in ref) { var data, key, lang, ref, results, text;
data = ref[lang]; ref = this.i18ns;
this.i18nR[lang] = {}; results = [];
for (key in data) { for (lang in ref) {
text = data[key]; data = ref[lang];
this.i18nR[lang][key] = { this.i18nR[lang] = {};
regex: new RegExp("\\$\\{" + key + "\\}", 'g'), results.push((function() {
text: text var results1;
}; results1 = [];
for (key in data) {
text = data[key];
results1.push(this.i18nR[lang][key] = {
regex: new RegExp("\\$\\{" + key + "\\}", 'g'),
text: text
});
}
return results1;
}).call(this));
} }
} return results;
};
reloadI18nR();
YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper; // 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化 YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper; // 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化
...@@ -84,20 +96,20 @@ ...@@ -84,20 +96,20 @@
//util //util
this.stoc_send_chat = function(client, msg, player = 8) { this.stoc_send_chat = function(client, msg, player = 8) {
var i, len, line, o, r, ref1, ref2; var i, len, line, o, r, ref, ref1;
if (!client) { if (!client) {
console.log("err stoc_send_chat"); console.log("err stoc_send_chat");
return; return;
} }
ref1 = _.lines(msg); ref = _.lines(msg);
for (i = 0, len = ref1.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
line = ref1[i]; line = ref[i];
if (player >= 10) { if (player >= 10) {
line = "[Server]: " + line; line = "[Server]: " + line;
} }
ref2 = this.i18nR[client.lang]; ref1 = this.i18nR[client.lang];
for (o in ref2) { for (o in ref1) {
r = ref2[o]; r = ref1[o];
line = line.replace(r.regex, r.text); line = line.replace(r.regex, r.text);
} }
this.stoc_send(client, 'CHAT', { this.stoc_send(client, 'CHAT', {
...@@ -108,21 +120,21 @@ ...@@ -108,21 +120,21 @@
}; };
this.stoc_send_chat_to_room = function(room, msg, player = 8) { this.stoc_send_chat_to_room = function(room, msg, player = 8) {
var client, i, j, len, len1, ref1, ref2; var client, i, j, len, len1, ref, ref1;
if (!room) { if (!room) {
console.log("err stoc_send_chat_to_room"); console.log("err stoc_send_chat_to_room");
return; return;
} }
ref1 = room.players; ref = room.players;
for (i = 0, len = ref1.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
client = ref1[i]; client = ref[i];
if (client) { if (client) {
this.stoc_send_chat(client, msg, player); this.stoc_send_chat(client, msg, player);
} }
} }
ref2 = room.watchers; ref1 = room.watchers;
for (j = 0, len1 = ref2.length; j < len1; j++) { for (j = 0, len1 = ref1.length; j < len1; j++) {
client = ref2[j]; client = ref1[j];
if (client) { if (client) {
this.stoc_send_chat(client, msg, player); this.stoc_send_chat(client, msg, player);
} }
...@@ -130,14 +142,14 @@ ...@@ -130,14 +142,14 @@
}; };
this.stoc_send_hint_card_to_room = function(room, card) { this.stoc_send_hint_card_to_room = function(room, card) {
var client, i, j, len, len1, ref1, ref2; var client, i, j, len, len1, ref, ref1;
if (!room) { if (!room) {
console.log("err stoc_send_hint_card_to_room"); console.log("err stoc_send_hint_card_to_room");
return; return;
} }
ref1 = room.players; ref = room.players;
for (i = 0, len = ref1.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
client = ref1[i]; client = ref[i];
if (client) { if (client) {
this.stoc_send(client, 'GAME_MSG', { this.stoc_send(client, 'GAME_MSG', {
curmsg: 2, curmsg: 2,
...@@ -147,9 +159,9 @@ ...@@ -147,9 +159,9 @@
}); });
} }
} }
ref2 = room.watchers; ref1 = room.watchers;
for (j = 0, len1 = ref2.length; j < len1; j++) { for (j = 0, len1 = ref1.length; j < len1; j++) {
client = ref2[j]; client = ref1[j];
if (client) { if (client) {
this.stoc_send(client, 'GAME_MSG', { this.stoc_send(client, 'GAME_MSG', {
curmsg: 2, curmsg: 2,
......
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