Commit 6c605bb7 authored by nanahira's avatar nanahira

Merge branch 'compat_pre'

parents 710b646e 6438a63f
......@@ -72,6 +72,11 @@
"enabled": false,
"generate_count": 500
},
"pre_release_compat": {
"enabled": false,
"official_database": "./ygopro/cards.cdb",
"pre_release_database": "./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel": {
"enabled": true,
"no_rematch_check": false,
......
......@@ -72,6 +72,11 @@
"enabled": false,
"generate_count": 500
},
"pre_release_compat": {
"enabled": false,
"official_database": "./ygopro/cards.cdb",
"pre_release_database": "./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel": {
"enabled": false,
"no_rematch_check": false,
......
......@@ -77,6 +77,11 @@
"enabled": false,
"generate_count": 500
},
"pre_release_compat": {
"enabled": false,
"official_database": "./ygopro/cards.cdb",
"pre_release_database": "./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel": {
"enabled": false,
"no_rematch_check": false,
......
......@@ -186,6 +186,7 @@
"vip_set_victory": "Your victory word have been set.",
"vip_password_changed": "Password changed.",
"vip_player_name_too_long": "Your username or password is too long to log in. Please change your username and try again.",
"pre_release_compat_hint": "It seems like you're a duelist with pre-release cards. The pre-release compat mode is turned on.",
"replay_hint_part1": "Sending the replay of the duel number ",
"replay_hint_part2": ".",
"athletic_arena_tip": "During an athletic match, a game quit behavior is regarded as a surrender."
......@@ -521,6 +522,7 @@
"vip_set_victory": "已设置胜利台词。",
"vip_password_changed": "密码修改成功。",
"vip_player_name_too_long": "你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。",
"pre_release_compat_hint": "看起来你是使用先行卡数据的用户,已开启先行卡兼容模式。",
"replay_hint_part1": "正在发送第",
"replay_hint_part2": "局决斗的录像。",
"athletic_arena_tip": "在竞技匹配中,比赛开始前退出游戏也会视为投降。"
......
......@@ -44,6 +44,7 @@ import_datas = [
"abuse_count",
"ban_mc",
"vip",
"is_using_pre_release",
"vpass",
"rag",
"rid",
......@@ -341,6 +342,9 @@ if settings.modules.windbot.enabled
if settings.modules.heartbeat_detection.enabled
long_resolve_cards = loadJSON('./data/long_resolve_cards.json')
if settings.modules.pre_release_compat.enabled
sqlite3 = require('sqlite3').verbose()
# 组件
ygopro = require './ygopro.js'
roomlist = require './roomlist.js' if settings.modules.http.websocket_roomlist
......@@ -1015,6 +1019,22 @@ SOCKET_flush_data = (sk, datas) ->
datas.splice(0, datas.length)
return true
replace_buffer = (buffer, list, start_pos) ->
found = 0
len = buffer.length
if len < 4 + start_pos
return 0
for i in [start_pos...len - 3]
code = buffer.readInt32LE(i)
if list[code]
code = list[code]
buffer.writeInt32LE(code, i)
found++
i += 3
if i >= len - 4
break
return found
class Room
constructor: (name, @hostinfo) ->
@name = name
......@@ -1039,6 +1059,40 @@ class Room
@replays = []
ROOM_all.push this
if settings.modules.pre_release_compat.enabled
list_official_to_pre = {}
list_pre_to_official = {}
@list_official_to_pre = list_official_to_pre
@list_pre_to_official = list_pre_to_official
temp_list = {}
try
official_database = new sqlite3.Database(settings.modules.pre_release_compat.official_database)
pre_release_database = new sqlite3.Database(settings.modules.pre_release_compat.pre_release_database)
pre_release_database.each("select id,name from texts", (err, result) ->
if err
log.warn("Error loading pre-release database.", err)
else
temp_list[result.name] = result.id
return
, () ->
official_database.each("select id,name from texts", (err, result) ->
if err
log.warn("Error loading official database.", err)
else if temp_list[result.name] and temp_list[result.name] != result.id
official_code = result.id
pre_release_code = temp_list[result.name]
list_official_to_pre[official_code] = pre_release_code
list_pre_to_official[pre_release_code] = official_code
return
#, () ->
# console.log("Load success.")
# return
)
return
)
catch error
log.warn("Error loading databases", error)
@hostinfo ||= JSON.parse(JSON.stringify(settings.hostinfo))
delete @hostinfo.comment
if lflists.length
......@@ -1733,6 +1787,8 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
client.name = name
client.vpass = vpass
client.name_vpass = if vpass then name + "$" + vpass else name
if settings.modules.pre_release_compat.enabled
client.is_using_pre_release = client.name_vpass == "COMPAT"
#console.log client.name, client.vpass
if settings.modules.vip.enabled and CLIENT_check_vip(client)
client.vip = true
......@@ -2360,6 +2416,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid]
return unless room and !client.reconnecting
msg = buffer.readInt8(0)
if settings.modules.pre_release_compat.enabled and client.is_using_pre_release
replace_buffer(buffer, room.list_official_to_pre, 1)
if settings.modules.retry_handle.enabled
if ygopro.constants.MSG[msg] == 'RETRY'
if !client.retry_count?
......@@ -3271,14 +3329,51 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
else
#log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side)
ygopro.stoc_send_chat(client, "${deck_incorrect_part1} #{found_deck} ${deck_incorrect_part2}", ygopro.constants.COLORS.RED)
return false
else
#log.info("player deck not found: " + client.name)
ygopro.stoc_send_chat(client, "#{client.name}${deck_not_found}", ygopro.constants.COLORS.RED)
return false
if settings.modules.pre_release_compat.enabled
found = false
buff_main_new = []
buff_side_new = []
for code in buff_main
code_ = code
if room.list_pre_to_official[code]
code_ = room.list_pre_to_official[code]
found = true
buff_main_new.push(code_)
for code in buff_side
code_ = code
if room.list_pre_to_official[code]
code_ = room.list_pre_to_official[code]
found = true
buff_side_new.push(code_)
if found
compat_struct = ygopro.structs["deck"]
compat_struct._setBuff(buffer)
compat_deckbuf = buff_main_new.concat(buff_side_new)
compat_struct.set("mainc", buff_main_new.length)
compat_struct.set("sidec", buff_side_new.length)
compat_struct.set("deckbuf", compat_deckbuf)
buffer = compat_struct.buffer
client.main = buff_main_new
client.side = buff_side_new
if !room.started
client.is_using_pre_release = found or client.vpass == "COMPAT"
if client.is_using_pre_release
ygopro.stoc_send_chat(client, "${pre_release_compat_hint}", ygopro.constants.COLORS.BABYBLUE)
return false
ygopro.ctos_follow 'RESPONSE', false, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid]
return unless room and (room.random_type or room.arena)
return unless room
if settings.modules.pre_release_compat.enabled and client.is_using_pre_release
replace_buffer(buffer, room.list_pre_to_official, 0)
return unless room.random_type or room.arena
room.last_active_time = moment()
return
......
// Generated by CoffeeScript 1.12.7
(function() {
var CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, 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, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, 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_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_banned, ROOM_players_oppentlist, ROOM_players_scores, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, SOCKET_flush_data, VIP_generate_cdkeys, _, addCallback, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, chat_color, concat_name, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_callback, get_memory_usage, http, http_server, https, https_server, import_datas, imported, is_requesting, j, k, l, len, len1, lflists, list, loadJSON, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, oldwords, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, ref2, refresh_challonge_cache, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, v, vip_info, wait_room_start, wait_room_start_arena, windbot_looplimit, 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_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, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, 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_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_banned, ROOM_players_oppentlist, ROOM_players_scores, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, SOCKET_flush_data, VIP_generate_cdkeys, _, addCallback, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, chat_color, concat_name, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_callback, get_memory_usage, http, http_server, https, https_server, import_datas, imported, is_requesting, j, k, l, len1, len2, lflists, list, loadJSON, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, oldwords, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, ref2, refresh_challonge_cache, release_disconnect, replace_buffer, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, sqlite3, tips, url, users_cache, v, vip_info, wait_room_start, wait_room_start_arena, windbot_looplimit, windbots, words, ygopro, zlib;
net = require('net');
......@@ -58,7 +58,7 @@
}
});
import_datas = ["abuse_count", "ban_mc", "vip", "vpass", "rag", "rid", "is_post_watcher", "retry_count", "name", "pass", "is_first", "lp", "card_count", "is_host", "pos", "surrend_confirm", "kick_count", "deck_saved", "main", "side", "side_interval", "side_tcount", "selected_preduel", "last_game_msg", "last_game_msg_title", "last_hint_msg", "start_deckbuf", "challonge_info", "ready_trap", "replays_sent"];
import_datas = ["abuse_count", "ban_mc", "vip", "is_using_pre_release", "vpass", "rag", "rid", "is_post_watcher", "retry_count", "name", "pass", "is_first", "lp", "card_count", "is_host", "pos", "surrend_confirm", "kick_count", "deck_saved", "main", "side", "side_interval", "side_tcount", "selected_preduel", "last_game_msg", "last_game_msg_title", "last_hint_msg", "start_deckbuf", "challonge_info", "ready_trap", "replays_sent"];
merge = require('deepmerge');
......@@ -176,7 +176,7 @@
};
CLIENT_use_cdkey = function(client, pkey) {
var current_date, found_type, index, j, key, keys, len, new_vip, ref, type;
var current_date, found_type, index, j, key, keys, len1, new_vip, ref, type;
if (!(settings.modules.vip.enabled && pkey)) {
return 0;
}
......@@ -184,7 +184,7 @@
ref = vip_info.cdkeys;
for (type in ref) {
keys = ref[type];
for (j = 0, len = keys.length; j < len; j++) {
for (j = 0, len1 = keys.length; j < len1; j++) {
key = keys[j];
if (!(pkey === key || pkey === (type + "D" + settings.port + ":" + key))) {
continue;
......@@ -380,7 +380,7 @@
try {
ref = fs.readFileSync('ygopro/expansions/lflist.conf', 'utf8').match(/!.*/g);
for (j = 0, len = ref.length; j < len; j++) {
for (j = 0, len1 = ref.length; j < len1; j++) {
list = ref[j];
date = list.match(/!([\d\.]+)/);
if (!date) {
......@@ -397,7 +397,7 @@
try {
ref1 = fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g);
for (l = 0, len1 = ref1.length; l < len1; l++) {
for (l = 0, len2 = ref1.length; l < len2; l++) {
list = ref1[l];
date = list.match(/!([\d\.]+)/);
if (!date) {
......@@ -429,6 +429,10 @@
long_resolve_cards = loadJSON('./data/long_resolve_cards.json');
}
if (settings.modules.pre_release_compat.enabled) {
sqlite3 = require('sqlite3').verbose();
}
ygopro = require('./ygopro.js');
if (settings.modules.http.websocket_roomlist) {
......@@ -594,15 +598,15 @@
ROOM_bad_ip = {};
ban_user = function(name) {
var bad_ip, len2, len3, m, n, player, ref3, room;
var bad_ip, len3, len4, m, n, player, ref3, room;
settings.ban.banned_user.push(name);
setting_save(settings);
bad_ip = 0;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.established) {
ref3 = room.players;
for (n = 0, len3 = ref3.length; n < len3; n++) {
for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n];
if (player && (player.name === name || player.ip === bad_ip)) {
bad_ip = player.ip;
......@@ -888,12 +892,12 @@
};
ROOM_unwelcome = function(room, bad_player, reason) {
var len2, m, player, ref3;
var len3, m, player, ref3;
if (!room) {
return;
}
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && player === bad_player) {
ygopro.stoc_send_chat(player, "${unwelcome_warn_part1}" + reason + "${unwelcome_warn_part2}", ygopro.constants.COLORS.RED);
......@@ -987,9 +991,9 @@
};
CLIENT_import_data = function(client, old_client, room) {
var index, key, len2, len3, m, n, player, ref3;
var index, key, len3, len4, m, n, player, ref3;
ref3 = room.players;
for (index = m = 0, len2 = ref3.length; m < len2; index = ++m) {
for (index = m = 0, len3 = ref3.length; m < len3; index = ++m) {
player = ref3[index];
if (player === old_client) {
room.players[index] = client;
......@@ -1006,7 +1010,7 @@
if (room.selecting_tp === old_client) {
room.selecting_tp = client;
}
for (n = 0, len3 = import_datas.length; n < len3; n++) {
for (n = 0, len4 = import_datas.length; n < len4; n++) {
key = import_datas[n];
client[key] = old_client[key];
}
......@@ -1044,10 +1048,10 @@
};
CLIENT_is_player = function(client, room) {
var is_player, len2, m, player, ref3;
var is_player, len3, m, player, ref3;
is_player = false;
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (client === player) {
is_player = true;
......@@ -1081,12 +1085,12 @@
};
CLIENT_get_kick_reconnect_target = function(client, deckbuf) {
var len2, len3, m, n, player, ref3, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
var len3, len4, m, n, player, ref3, room;
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.started && !room.windbot) {
ref3 = room.get_playing_player();
for (n = 0, len3 = ref3.length; n < len3; n++) {
for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n];
if (!player.closed && player.name === client.name && (settings.modules.challonge.enabled || player.pass === client.pass) && (settings.modules.mycard.enabled || settings.modules.tournament_mode.enabled || player.ip === client.ip || (client.vpass && client.vpass === player.vpass)) && (!deckbuf || _.isEqual(player.start_deckbuf, deckbuf))) {
return player;
......@@ -1108,7 +1112,7 @@
};
CLIENT_send_pre_reconnect_info = function(client, room, old_client) {
var len2, m, player, ref3, req_pos;
var len3, m, player, ref3, req_pos;
ygopro.stoc_send_chat(client, "${pre_reconnecting_to_room}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send(client, 'JOIN_GAME', room.join_game_buffer);
req_pos = old_client.pos;
......@@ -1119,7 +1123,7 @@
type: req_pos
});
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
ygopro.stoc_send(client, 'HS_PLAYER_ENTER', {
name: player.name,
......@@ -1302,14 +1306,14 @@
};
CLIENT_send_replays = function(client, room) {
var buffer, i, len2, m, ref3;
var buffer, i, len3, m, ref3;
if (!(settings.modules.replay_delay && room.replays.length && room.hostinfo.mode === 1 && !client.replays_sent && !client.closed)) {
return false;
}
client.replays_sent = true;
i = 0;
ref3 = room.replays;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
buffer = ref3[m];
++i;
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE);
......@@ -1319,11 +1323,11 @@
};
SOCKET_flush_data = function(sk, datas) {
var buffer, len2, m;
var buffer, len3, m;
if (!sk || sk.closed) {
return false;
}
for (m = 0, len2 = datas.length; m < len2; m++) {
for (m = 0, len3 = datas.length; m < len3; m++) {
buffer = datas[m];
sk.write(buffer);
}
......@@ -1331,9 +1335,31 @@
return true;
};
replace_buffer = function(buffer, list, start_pos) {
var code, found, i, len, m, ref3, ref4;
found = 0;
len = buffer.length;
if (len < 4 + start_pos) {
return 0;
}
for (i = m = ref3 = start_pos, ref4 = len - 3; ref3 <= ref4 ? m < ref4 : m > ref4; i = ref3 <= ref4 ? ++m : --m) {
code = buffer.readInt32LE(i);
if (list[code]) {
code = list[code];
buffer.writeInt32LE(code, i);
found++;
i += 3;
if (i >= len - 4) {
break;
}
}
}
return found;
};
Room = (function() {
function Room(name, hostinfo) {
var draw_count, lflist, param, rule, start_hand, start_lp, time_limit;
var draw_count, error, lflist, list_official_to_pre, list_pre_to_official, official_database, param, pre_release_database, rule, start_hand, start_lp, temp_list, time_limit;
this.hostinfo = hostinfo;
this.name = name;
this.alive = true;
......@@ -1357,6 +1383,39 @@
this.replays = [];
}
ROOM_all.push(this);
if (settings.modules.pre_release_compat.enabled) {
list_official_to_pre = {};
list_pre_to_official = {};
this.list_official_to_pre = list_official_to_pre;
this.list_pre_to_official = list_pre_to_official;
temp_list = {};
try {
official_database = new sqlite3.Database(settings.modules.pre_release_compat.official_database);
pre_release_database = new sqlite3.Database(settings.modules.pre_release_compat.pre_release_database);
pre_release_database.each("select id,name from texts", function(err, result) {
if (err) {
log.warn("Error loading pre-release database.", err);
} else {
temp_list[result.name] = result.id;
}
}, function() {
official_database.each("select id,name from texts", function(err, result) {
var official_code, pre_release_code;
if (err) {
log.warn("Error loading official database.", err);
} else if (temp_list[result.name] && temp_list[result.name] !== result.id) {
official_code = result.id;
pre_release_code = temp_list[result.name];
list_official_to_pre[official_code] = pre_release_code;
list_pre_to_official[pre_release_code] = official_code;
}
});
});
} catch (error1) {
error = error1;
log.warn("Error loading databases", error);
}
}
this.hostinfo || (this.hostinfo = JSON.parse(JSON.stringify(settings.hostinfo)));
delete this.hostinfo.comment;
if (lflists.length) {
......@@ -1505,9 +1564,9 @@
_this.port = parseInt(data);
_.each(_this.players, function(player) {
player.server.connect(_this.port, '127.0.0.1', function() {
var buffer, len2, m, ref3;
var buffer, len3, m, ref3;
ref3 = player.pre_establish_buffers;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
buffer = ref3[m];
player.server.write(buffer);
}
......@@ -1718,13 +1777,13 @@
};
Room.prototype.get_disconnected_count = function() {
var found, len2, m, player, ref3;
var found, len3, m, player, ref3;
if (!settings.modules.reconnect.enabled) {
return 0;
}
found = 0;
ref3 = this.get_playing_player();
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player.closed) {
found++;
......@@ -1768,17 +1827,17 @@
};
Room.prototype.send_replays = function() {
var len2, len3, m, n, player, ref3, ref4;
var len3, len4, m, n, player, ref3, ref4;
if (!(settings.modules.replay_delay && this.replays.length && this.hostinfo.mode === 1)) {
return false;
}
ref3 = this.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
CLIENT_send_replays(player, this);
}
ref4 = this.watchers;
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n];
CLIENT_send_replays(player, this);
}
......@@ -1817,9 +1876,9 @@
roomlist.update(this);
}
client.server.connect(this.port, '127.0.0.1', function() {
var buffer, len2, m, ref3;
var buffer, len3, m, ref3;
ref3 = client.pre_establish_buffers;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
buffer = ref3[m];
client.server.write(buffer);
}
......@@ -1830,7 +1889,7 @@
};
Room.prototype.disconnect = function(client, error) {
var index, len2, m, player, ref3;
var index, len3, m, player, ref3;
if (client.had_new_reconnection) {
return;
}
......@@ -1844,7 +1903,7 @@
} else {
if (this.arena && !this.started) {
ref3 = this.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player.pos !== 7) {
this.scores[player.name_vpass] = 0;
......@@ -2013,7 +2072,7 @@
}
client.pre_establish_buffers = new Array();
client.on('data', function(ctos_buffer) {
var b, bad_ip_count, buffer, cancel, ctos_message_length, ctos_proto, datas, info, len2, len3, looplimit, m, n, room, struct;
var b, bad_ip_count, buffer, cancel, ctos_message_length, ctos_proto, datas, info, len3, len4, looplimit, m, n, room, struct;
if (client.is_post_watcher) {
room = ROOM_all[client.rid];
if (room && !CLIENT_is_banned_by_mc(client)) {
......@@ -2090,12 +2149,12 @@
return;
}
if (client.established) {
for (m = 0, len2 = datas.length; m < len2; m++) {
for (m = 0, len3 = datas.length; m < len3; m++) {
buffer = datas[m];
client.server.write(buffer);
}
} else {
for (n = 0, len3 = datas.length; n < len3; n++) {
for (n = 0, len4 = datas.length; n < len4; n++) {
buffer = datas[n];
client.pre_establish_buffers.push(buffer);
}
......@@ -2103,7 +2162,7 @@
}
});
server.on('data', function(stoc_buffer) {
var b, buffer, cancel, datas, info, len2, looplimit, m, stanzas, stoc_message_length, stoc_proto, struct;
var b, buffer, cancel, datas, info, len3, looplimit, m, stanzas, stoc_message_length, stoc_proto, struct;
stoc_message_length = 0;
stoc_proto = 0;
datas = [];
......@@ -2161,7 +2220,7 @@
}
}
if (server.client && !server.client.closed) {
for (m = 0, len2 = datas.length; m < len2; m++) {
for (m = 0, len3 = datas.length; m < len3; m++) {
buffer = datas[m];
server.client.write(buffer);
}
......@@ -2219,6 +2278,9 @@
client.name = name;
client.vpass = vpass;
client.name_vpass = vpass ? name + "$" + vpass : name;
if (settings.modules.pre_release_compat.enabled) {
client.is_using_pre_release = client.name_vpass === "COMPAT";
}
if (settings.modules.vip.enabled && CLIENT_check_vip(client)) {
client.vip = true;
}
......@@ -2241,7 +2303,7 @@
});
ygopro.ctos_follow('JOIN_GAME', false, function(buffer, info, client, server, datas) {
var buffer_pos, check, decrypted_buffer, finish, i, id, len2, len3, len4, len5, len6, len7, len8, len9, line, m, n, name, o, oppo_pos, p, player, player_string, pre_room, q, r, ref3, ref4, ref5, ref6, ref7, ref8, replay_id, room, room_buffer, room_players, room_showed, s, secret, t;
var buffer_pos, check, decrypted_buffer, finish, i, id, len10, len3, len4, len5, len6, len7, len8, len9, line, m, n, name, o, oppo_pos, p, player, player_string, pre_room, q, r, ref3, ref4, ref5, ref6, ref7, ref8, replay_id, room, room_buffer, room_players, room_showed, s, secret, t;
info.pass = info.pass.trim();
client.pass = info.pass;
if (CLIENT_is_able_to_reconnect(client) || CLIENT_is_able_to_kick_reconnect(client)) {
......@@ -2276,7 +2338,7 @@
} else if (info.pass.toUpperCase() === "L" && settings.modules.koishi_roomlist.enabled) {
ygopro.stoc_send_chat(client, "${koishi_roomlist_hint}", ygopro.constants.COLORS.BABYBLUE);
room_showed = [];
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.established && room.name.indexOf('$') < 0) {
room_showed.push(room);
......@@ -2286,7 +2348,7 @@
room_buffer = Buffer.alloc(2 + 333 * room_showed.length);
room_buffer.writeUInt16LE(room_showed.length, buffer_pos);
buffer_pos += 2;
for (n = 0, len3 = room_showed.length; n < len3; n++) {
for (n = 0, len4 = room_showed.length; n < len4; n++) {
room = room_showed[n];
room_buffer.write(room.name, buffer_pos, 64, "utf8");
buffer_pos += 64;
......@@ -2299,7 +2361,7 @@
buffer_pos++;
room_players = [];
ref3 = room.get_playing_player();
for (o = 0, len4 = ref3.length; o < len4; o++) {
for (o = 0, len5 = ref3.length; o < len5; o++) {
player = ref3[o];
if (player) {
room_players[player.pos] = player;
......@@ -2404,7 +2466,7 @@
return (checksum & 0xFF) === 0;
};
finish = function(buffer) {
var action, len5, len6, len7, len8, line, name, opt1, opt2, opt3, options, p, q, r, ref4, ref5, ref6, ref7, s, title;
var action, len6, len7, len8, len9, line, name, opt1, opt2, opt3, options, p, q, r, ref4, ref5, ref6, ref7, s, title;
if (client.closed) {
return;
}
......@@ -2457,7 +2519,7 @@
room = ROOM_find_or_create_by_name('M#' + info.pass.slice(8));
if (room) {
ref4 = room.get_playing_player();
for (p = 0, len5 = ref4.length; p < len5; p++) {
for (p = 0, len6 = ref4.length; p < len6; p++) {
player = ref4[p];
if (!(player && player.name === client.name)) {
continue;
......@@ -2496,13 +2558,13 @@
client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref5 = _.lines(vip_info.players[client.name].words);
for (q = 0, len6 = ref5.length; q < len6; q++) {
for (q = 0, len7 = ref5.length; q < len7; q++) {
line = ref5[q];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.words.enabled && words.words[client.name]) {
ref6 = _.lines(words.words[client.name][Math.floor(Math.random() * words.words[client.name].length)]);
for (r = 0, len7 = ref6.length; r < len7; r++) {
for (r = 0, len8 = ref6.length; r < len8; r++) {
line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
......@@ -2511,7 +2573,7 @@
room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref7 = room.watcher_buffers;
for (s = 0, len8 = ref7.length; s < len8; s++) {
for (s = 0, len9 = ref7.length; s < len9; s++) {
buffer = ref7[s];
client.write(buffer);
}
......@@ -2530,7 +2592,7 @@
secret = id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6);
ref4 = [0, 2, 4];
for (p = 0, len5 = ref4.length; p < len5; p++) {
for (p = 0, len6 = ref4.length; p < len6; p++) {
i = ref4[p];
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
}
......@@ -2548,13 +2610,13 @@
},
json: true
}, function(error, response, body) {
var len6, q, ref5;
var len7, q, ref5;
if (body && body.user) {
users_cache[client.name] = body.user.id;
secret = body.user.id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6);
ref5 = [0, 2, 4];
for (q = 0, len6 = ref5.length; q < len6; q++) {
for (q = 0, len7 = ref5.length; q < len7; q++) {
i = ref5[q];
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
}
......@@ -2579,7 +2641,7 @@
room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref5 = room.watcher_buffers;
for (q = 0, len6 = ref5.length; q < len6; q++) {
for (q = 0, len7 = ref5.length; q < len7; q++) {
buffer = ref5[q];
client.write(buffer);
}
......@@ -2616,7 +2678,7 @@
challonge.matches._index({
id: settings.modules.challonge.tournament_id,
callback: function(err, data) {
var len10, len7, len8, len9, line, match, r, ref6, ref7, ref8, ref9, s, t, x;
var len10, len11, len8, len9, line, match, r, ref6, ref7, ref8, ref9, s, t, x;
if (client.closed) {
return;
}
......@@ -2654,13 +2716,13 @@
client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref6 = _.lines(vip_info.players[client.name].words);
for (r = 0, len7 = ref6.length; r < len7; r++) {
for (r = 0, len8 = ref6.length; r < len8; r++) {
line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.words.enabled && words.words[client.name]) {
ref7 = _.lines(words.words[client.name][Math.floor(Math.random() * words.words[client.name].length)]);
for (s = 0, len8 = ref7.length; s < len8; s++) {
for (s = 0, len9 = ref7.length; s < len9; s++) {
line = ref7[s];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
......@@ -2669,7 +2731,7 @@
room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref8 = room.watcher_buffers;
for (t = 0, len9 = ref8.length; t < len9; t++) {
for (t = 0, len10 = ref8.length; t < len10; t++) {
buffer = ref8[t];
client.write(buffer);
}
......@@ -2680,7 +2742,7 @@
ygopro.stoc_die(client, "${watch_denied_room}");
} else {
ref9 = room.get_playing_player();
for (x = 0, len10 = ref9.length; x < len10; x++) {
for (x = 0, len11 = ref9.length; x < len11; x++) {
player = ref9[x];
if (!(player && player !== client && player.challonge_info.id === client.challonge_info.id)) {
continue;
......@@ -2745,13 +2807,13 @@
client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref6 = _.lines(vip_info.players[client.name].words);
for (r = 0, len7 = ref6.length; r < len7; r++) {
for (r = 0, len8 = ref6.length; r < len8; r++) {
line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.words.enabled && words.words[client.name]) {
ref7 = _.lines(words.words[client.name][Math.floor(Math.random() * words.words[client.name].length)]);
for (s = 0, len8 = ref7.length; s < len8; s++) {
for (s = 0, len9 = ref7.length; s < len9; s++) {
line = ref7[s];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
......@@ -2760,7 +2822,7 @@
room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref8 = room.watcher_buffers;
for (t = 0, len9 = ref8.length; t < len9; t++) {
for (t = 0, len10 = ref8.length; t < len10; t++) {
buffer = ref8[t];
client.write(buffer);
}
......@@ -2778,7 +2840,7 @@
});
ygopro.stoc_follow('JOIN_GAME', false, function(buffer, info, client, server, datas) {
var len2, len3, len4, line, m, n, o, player, recorder, ref3, ref4, ref5, room, watcher;
var len3, len4, len5, line, m, n, o, player, recorder, ref3, ref4, ref5, room, watcher;
room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) {
return;
......@@ -2788,13 +2850,13 @@
}
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref3 = _.lines(vip_info.players[client.name].words);
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
line = ref3[m];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.words.enabled && words.words[client.name]) {
ref4 = _.lines(words.words[client.name][Math.floor(Math.random() * words.words[client.name].length)]);
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
line = ref4[n];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
......@@ -2824,7 +2886,7 @@
if (settings.modules.random_duel.record_match_scores && room.random_type === 'M') {
ygopro.stoc_send_chat_to_room(room, ROOM_player_get_score(client), ygopro.constants.COLORS.GREEN);
ref5 = room.players;
for (o = 0, len4 = ref5.length; o < len4; o++) {
for (o = 0, len5 = ref5.length; o < len5; o++) {
player = ref5[o];
if (player.pos !== 7 && player !== client) {
ygopro.stoc_send_chat(client, ROOM_player_get_score(player), ygopro.constants.COLORS.GREEN);
......@@ -2863,14 +2925,14 @@
ygopro.ctos_send(watcher, 'HS_TOOBSERVER');
});
watcher.on('data', function(data) {
var len5, p, ref6, w;
var len6, p, ref6, w;
room = ROOM_all[client.rid];
if (!room) {
return;
}
room.watcher_buffers.push(data);
ref6 = room.watchers;
for (p = 0, len5 = ref6.length; p < len5; p++) {
for (p = 0, len6 = ref6.length; p < len6; p++) {
w = ref6[p];
if (w) {
w.write(data);
......@@ -2942,12 +3004,15 @@
}
ygopro.stoc_follow('GAME_MSG', true, function(buffer, info, client, server, datas) {
var act_pos, card, chain, check, count, cpos, deck_found, found, hint_type, i, id, len10, len2, len3, len4, len5, len6, len7, len8, len9, limbo_found, line, loc, m, max_loop, msg, n, o, oppo_pos, p, phase, player, playertype, pos, ppos, q, r, r_player, reason, ref10, ref11, ref12, ref13, ref3, ref4, ref5, ref6, ref7, ref8, ref9, room, s, t, trigger_location, val, win_pos, x, y;
var act_pos, card, chain, check, count, cpos, deck_found, found, hint_type, i, id, len10, len11, len3, len4, len5, len6, len7, len8, len9, limbo_found, line, loc, m, max_loop, msg, n, o, oppo_pos, p, phase, player, playertype, pos, ppos, q, r, r_player, reason, ref10, ref11, ref12, ref13, ref3, ref4, ref5, ref6, ref7, ref8, ref9, room, s, t, trigger_location, val, win_pos, x, y;
room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) {
return;
}
msg = buffer.readInt8(0);
if (settings.modules.pre_release_compat.enabled && client.is_using_pre_release) {
replace_buffer(buffer, room.list_official_to_pre, 1);
}
if (settings.modules.retry_handle.enabled) {
if (ygopro.constants.MSG[msg] === 'RETRY') {
if (client.retry_count == null) {
......@@ -3068,7 +3133,7 @@
room.turn = 0;
if (settings.modules.heartbeat_detection.enabled) {
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
player.heartbeat_protected = false;
}
......@@ -3080,13 +3145,13 @@
room.scores[room.winner_name] = room.scores[room.winner_name] + 1;
if (settings.modules.vip.enabled && room.dueling_players[pos].vip && vip_info.players[room.dueling_players[pos].name].victory) {
ref4 = _.lines(vip_info.players[room.dueling_players[pos].name].victory);
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
line = ref4[n];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
} else if (room.hostinfo.mode === 2 && settings.modules.vip.enabled && room.dueling_players[pos + 1].vip && vip_info.players[room.dueling_players[pos + 1].name].victory) {
ref5 = _.lines(vip_info.players[room.dueling_players[pos + 1].name].victory);
for (o = 0, len4 = ref5.length; o < len4; o++) {
for (o = 0, len5 = ref5.length; o < len5; o++) {
line = ref5[o];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
}
......@@ -3210,7 +3275,7 @@
if (ygopro.constants.MSG[msg] === 'CHAINING') {
card = buffer.readUInt32LE(1);
found = false;
for (q = 0, len5 = long_resolve_cards.length; q < len5; q++) {
for (q = 0, len6 = long_resolve_cards.length; q < len6; q++) {
id = long_resolve_cards[q];
if (!(id === card)) {
continue;
......@@ -3234,7 +3299,7 @@
chain = buffer.readInt8(1);
if (room.long_resolve_chain[chain]) {
ref9 = room.get_playing_player();
for (r = 0, len6 = ref9.length; r < len6; r++) {
for (r = 0, len7 = ref9.length; r < len7; r++) {
player = ref9[r];
player.heartbeat_protected = true;
}
......@@ -3261,25 +3326,25 @@
if (ygopro.constants.MSG[msg] !== 'CHAINING' || (trigger_location & 0x8) && client.ready_trap) {
if (settings.modules.vip.enabled && room.dueling_players[act_pos].vip && vip_info.players[room.dueling_players[act_pos].name].dialogues[card]) {
ref10 = _.lines(vip_info.players[room.dueling_players[act_pos].name].dialogues[card]);
for (s = 0, len7 = ref10.length; s < len7; s++) {
for (s = 0, len8 = ref10.length; s < len8; s++) {
line = ref10[s];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.vip.enabled && room.hostinfo.mode === 2 && room.dueling_players[act_pos + 1].vip && vip_info.players[room.dueling_players[act_pos + 1].name].dialogues[card]) {
ref11 = _.lines(vip_info.players[room.dueling_players[act_pos + 1].name].dialogues[card]);
for (t = 0, len8 = ref11.length; t < len8; t++) {
for (t = 0, len9 = ref11.length; t < len9; t++) {
line = ref11[t];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.dialogues.enabled && dialogues.dialogues[card]) {
ref12 = _.lines(dialogues.dialogues[card][Math.floor(Math.random() * dialogues.dialogues[card].length)]);
for (x = 0, len9 = ref12.length; x < len9; x++) {
for (x = 0, len10 = ref12.length; x < len10; x++) {
line = ref12[x];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
}
} else if (settings.modules.dialogues.enabled && dialogues.dialogues_custom[card]) {
ref13 = _.lines(dialogues.dialogues_custom[card][Math.floor(Math.random() * dialogues.dialogues_custom[card].length)]);
for (y = 0, len10 = ref13.length; y < len10; y++) {
for (y = 0, len11 = ref13.length; y < len11; y++) {
line = ref13[y];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
}
......@@ -3299,7 +3364,7 @@
});
ygopro.ctos_follow('HS_TOOBSERVER', true, function(buffer, info, client, server, datas) {
var len2, m, player, ref3, room;
var len3, m, player, ref3, room;
room = ROOM_all[client.rid];
if (!room) {
return;
......@@ -3312,7 +3377,7 @@
return false;
}
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player === client) {
ygopro.stoc_send_chat(client, "${cannot_to_observer}", ygopro.constants.COLORS.BABYBLUE);
......@@ -3323,13 +3388,13 @@
});
ygopro.ctos_follow('HS_KICK', true, function(buffer, info, client, server, datas) {
var len2, m, player, ref3, room;
var len3, m, player, ref3, room;
room = ROOM_all[client.rid];
if (!room) {
return;
}
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && player.pos === info.pos && player !== client) {
if (room.arena === "athletic" || settings.modules.challonge.enabled) {
......@@ -3360,7 +3425,7 @@
});
ygopro.stoc_follow('HS_PLAYER_CHANGE', false, function(buffer, info, client, server, datas) {
var is_ready, len2, len3, m, n, p1, p2, player, pos, ref3, ref4, room;
var is_ready, len3, len4, m, n, p1, p2, player, pos, ref3, ref4, room;
room = ROOM_all[client.rid];
if (!(room && room.max_player && client.is_host)) {
return;
......@@ -3371,7 +3436,7 @@
if (room.arena) {
room.ready_player_count = 0;
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player.pos === pos) {
player.is_ready = is_ready;
......@@ -3411,7 +3476,7 @@
} else {
room.ready_player_count_without_host = 0;
ref4 = room.players;
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n];
if (player.pos === pos) {
player.is_ready = is_ready;
......@@ -3452,7 +3517,7 @@
});
ygopro.stoc_follow('DUEL_END', false, function(buffer, info, client, server, datas) {
var len2, len3, m, n, player, ref3, ref4, results, room;
var len3, len4, m, n, player, ref3, ref4, results, room;
room = ROOM_all[client.rid];
if (!(room && settings.modules.replay_delay && room.hostinfo.mode === 1)) {
return;
......@@ -3462,7 +3527,7 @@
if (!room.replays_sent_to_watchers) {
room.replays_sent_to_watchers = true;
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && player.pos > 3) {
CLIENT_send_replays(player, room);
......@@ -3470,7 +3535,7 @@
}
ref4 = room.watchers;
results = [];
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n];
if (player) {
results.push(CLIENT_send_replays(player, room));
......@@ -3481,7 +3546,7 @@
});
wait_room_start = function(room, time) {
var len2, m, player, ref3;
var len3, m, player, ref3;
if (!(!room || room.started || room.ready_player_count_without_host < room.max_player - 1)) {
time -= 1;
if (time) {
......@@ -3493,7 +3558,7 @@
}), 1000);
} else {
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && player.is_host) {
ROOM_ban_player(player.name, player.ip, "${random_ban_reason_zombie}");
......@@ -3535,17 +3600,17 @@
};
ygopro.stoc_send_random_tip_to_room = function(room) {
var len2, len3, m, n, player, ref3, ref4;
var len3, len4, m, n, player, ref3, ref4;
if (settings.modules.tips.enabled && tips.tips.length) {
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && !player.is_local && !player.closed) {
ygopro.stoc_send_random_tip(player);
}
}
ref4 = room.watchers;
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n];
if (player && !player.is_local && !player.closed) {
ygopro.stoc_send_random_tip(player);
......@@ -3596,8 +3661,8 @@
if (settings.modules.tips.enabled) {
setInterval(function() {
var len2, m, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
var len3, m, room;
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.established) {
if (!room.started || room.changing_side) {
......@@ -3609,7 +3674,7 @@
}
ygopro.stoc_follow('DUEL_START', false, function(buffer, info, client, server, datas) {
var deck_arena, deck_name, deck_text, len2, m, player, ref3, room;
var deck_arena, deck_name, deck_text, len3, m, player, ref3, room;
room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) {
return;
......@@ -3623,7 +3688,7 @@
}
room.dueling_players = [];
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (!(player.pos !== 7)) {
continue;
......@@ -4076,7 +4141,7 @@
});
ygopro.ctos_follow('UPDATE_DECK', true, function(buffer, info, client, server, datas) {
var buff_main, buff_side, card, current_deck, deck, deck_array, deck_main, deck_side, deck_text, deckbuf, decks, found_deck, i, len2, len3, line, m, n, oppo_pos, room, struct, win_pos;
var buff_main, buff_main_new, buff_side, buff_side_new, card, code, code_, compat_deckbuf, compat_struct, current_deck, deck, deck_array, deck_main, deck_side, deck_text, deckbuf, decks, found, found_deck, i, len3, len4, len5, len6, line, m, n, o, oppo_pos, p, room, struct, win_pos;
if (settings.modules.reconnect.enabled && client.pre_reconnecting) {
if (!CLIENT_is_able_to_reconnect(client) && !CLIENT_is_able_to_kick_reconnect(client)) {
ygopro.stoc_send_chat(client, "${reconnect_failed}", ygopro.constants.COLORS.RED);
......@@ -4166,7 +4231,7 @@
buffer = struct.buffer;
found_deck = false;
decks = fs.readdirSync(settings.modules.tournament_mode.deck_path);
for (m = 0, len2 = decks.length; m < len2; m++) {
for (m = 0, len3 = decks.length; m < len3; m++) {
deck = decks[m];
if (_.endsWith(deck, client.name + ".ydk")) {
found_deck = deck;
......@@ -4183,7 +4248,7 @@
deck_main = [];
deck_side = [];
current_deck = deck_main;
for (n = 0, len3 = deck_array.length; n < len3; n++) {
for (n = 0, len4 = deck_array.length; n < len4; n++) {
line = deck_array[n];
if (line.indexOf("!side") >= 0) {
current_deck = deck_side;
......@@ -4202,9 +4267,51 @@
ygopro.stoc_send_chat(client, "${deck_correct_part1} " + found_deck + " ${deck_correct_part2}", ygopro.constants.COLORS.BABYBLUE);
} else {
ygopro.stoc_send_chat(client, "${deck_incorrect_part1} " + found_deck + " ${deck_incorrect_part2}", ygopro.constants.COLORS.RED);
return false;
}
} else {
ygopro.stoc_send_chat(client, client.name + "${deck_not_found}", ygopro.constants.COLORS.RED);
return false;
}
}
if (settings.modules.pre_release_compat.enabled) {
found = false;
buff_main_new = [];
buff_side_new = [];
for (o = 0, len5 = buff_main.length; o < len5; o++) {
code = buff_main[o];
code_ = code;
if (room.list_pre_to_official[code]) {
code_ = room.list_pre_to_official[code];
found = true;
}
buff_main_new.push(code_);
}
for (p = 0, len6 = buff_side.length; p < len6; p++) {
code = buff_side[p];
code_ = code;
if (room.list_pre_to_official[code]) {
code_ = room.list_pre_to_official[code];
found = true;
}
buff_side_new.push(code_);
}
if (found) {
compat_struct = ygopro.structs["deck"];
compat_struct._setBuff(buffer);
compat_deckbuf = buff_main_new.concat(buff_side_new);
compat_struct.set("mainc", buff_main_new.length);
compat_struct.set("sidec", buff_side_new.length);
compat_struct.set("deckbuf", compat_deckbuf);
buffer = compat_struct.buffer;
client.main = buff_main_new;
client.side = buff_side_new;
}
if (!room.started) {
client.is_using_pre_release = found || client.vpass === "COMPAT";
if (client.is_using_pre_release) {
ygopro.stoc_send_chat(client, "${pre_release_compat_hint}", ygopro.constants.COLORS.BABYBLUE);
}
}
}
return false;
......@@ -4213,7 +4320,13 @@
ygopro.ctos_follow('RESPONSE', false, function(buffer, info, client, server, datas) {
var room;
room = ROOM_all[client.rid];
if (!(room && (room.random_type || room.arena))) {
if (!room) {
return;
}
if (settings.modules.pre_release_compat.enabled && client.is_using_pre_release) {
replace_buffer(buffer, room.list_pre_to_official, 0);
}
if (!(room.random_type || room.arena)) {
return;
}
room.last_active_time = moment();
......@@ -4325,7 +4438,7 @@
});
ygopro.stoc_follow('CHAT', true, function(buffer, info, client, server, datas) {
var len2, m, pid, player, ref3, room, tcolor, tplayer;
var len3, m, pid, player, ref3, room, tcolor, tplayer;
room = ROOM_all[client.rid];
pid = info.player;
if (!(room && pid < 4 && settings.modules.chat_color.enabled)) {
......@@ -4344,7 +4457,7 @@
}
}
ref3 = room.players;
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m];
if (player && player.pos === pid) {
tplayer = player;
......@@ -4457,7 +4570,7 @@
});
ygopro.stoc_follow('REPLAY', true, function(buffer, info, client, server, datas) {
var duellog, dueltime, i, len2, len3, m, n, player, ref3, ref4, replay_filename, room;
var duellog, dueltime, i, len3, len4, m, n, player, ref3, ref4, replay_filename, room;
room = ROOM_all[client.rid];
if (!room) {
return settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.replay_safe && settings.modules.tournament_mode.block_replay_to_player || settings.modules.replay_delay;
......@@ -4474,13 +4587,13 @@
replay_filename = dueltime;
if (room.hostinfo.mode !== 2) {
ref3 = room.dueling_players;
for (i = m = 0, len2 = ref3.length; m < len2; i = ++m) {
for (i = m = 0, len3 = ref3.length; m < len3; i = ++m) {
player = ref3[i];
replay_filename = replay_filename + (i > 0 ? " VS " : " ") + player.name;
}
} else {
ref4 = room.dueling_players;
for (i = n = 0, len3 = ref4.length; n < len3; i = ++n) {
for (i = n = 0, len4 = ref4.length; n < len4; i = ++n) {
player = ref4[i];
replay_filename = replay_filename + (i > 0 ? (i === 2 ? " VS " : " & ") : " ") + player.name;
}
......@@ -4494,10 +4607,10 @@
replay_filename: replay_filename,
roommode: room.hostinfo.mode,
players: (function() {
var len4, o, ref5, results;
var len5, o, ref5, results;
ref5 = room.dueling_players;
results = [];
for (o = 0, len4 = ref5.length; o < len4; o++) {
for (o = 0, len5 = ref5.length; o < len5; o++) {
player = ref5[o];
results.push({
name: player.name + (settings.modules.tournament_mode.show_ip && !player.is_local ? " (IP: " + player.ip.slice(7) + ")" : "") + (settings.modules.tournament_mode.show_info && !(room.hostinfo.mode === 2 && player.pos % 2 > 0) ? " (Score:" + room.scores[player.name_vpass] + " LP:" + (player.lp != null ? player.lp : room.hostinfo.start_lp) + (room.hostinfo.mode !== 2 ? " Cards:" + (player.card_count != null ? player.card_count : room.hostinfo.start_hand) : "") + ")" : ""),
......@@ -4526,8 +4639,8 @@
if (settings.modules.random_duel.enabled) {
setInterval(function() {
var len2, m, room, time_passed;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
var len3, m, room, time_passed;
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (!(room && room.started && room.random_type && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0)) {
continue;
......@@ -4550,8 +4663,8 @@
if (settings.modules.mycard.enabled) {
setInterval(function() {
var len2, m, room, time_passed;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
var len3, m, room, time_passed;
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (!(room && room.started && room.arena && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0)) {
continue;
......@@ -4572,12 +4685,12 @@
if (settings.modules.heartbeat_detection.enabled) {
setInterval(function() {
var len2, len3, m, n, player, ref3, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
var len3, len4, m, n, player, ref3, room;
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.started && (room.hostinfo.time_limit === 0 || !room.turn || room.turn <= 0) && !room.windbot) {
ref3 = room.get_playing_player();
for (n = 0, len3 = ref3.length; n < len3; n++) {
for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n];
if (player && (!room.changing_side || player.selected_preduel)) {
CLIENT_heartbeat_register(player, true);
......@@ -4640,7 +4753,7 @@
return callback + "( " + text + " );";
};
requestListener = function(request, response) {
var archive_args, archive_name, archive_process, check, death_room_found, duellog, error, filename, getpath, key, kick_room_found, len2, len3, len4, len5, len6, len7, m, n, o, oppo_pos, p, parseQueryString, pass_validated, player, q, r, ref3, ref4, replay, ret_keys, room, roomsjson, u, win_pos;
var archive_args, archive_name, archive_process, check, death_room_found, duellog, error, filename, getpath, key, kick_room_found, len3, len4, len5, len6, len7, len8, m, n, o, oppo_pos, p, parseQueryString, pass_validated, player, q, r, ref3, ref4, replay, ret_keys, room, roomsjson, u, win_pos;
parseQueryString = true;
u = url.parse(request.url, parseQueryString);
pass_validated = u.query.pass === settings.modules.http.password;
......@@ -4652,9 +4765,9 @@
response.writeHead(200);
roomsjson = JSON.stringify({
rooms: (function() {
var len2, m, results;
var len3, m, results;
results = [];
for (m = 0, len2 = ROOM_all.length; m < len2; m++) {
for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m];
if (room && room.established) {
results.push({
......@@ -4663,10 +4776,10 @@
roommode: room.hostinfo.mode,
needpass: (room.name.indexOf('$') !== -1).toString(),
users: _.sortBy((function() {
var len3, n, ref3, results1;
var len4, n, ref3, results1;
ref3 = room.players;
results1 = [];
for (n = 0, len3 = ref3.length; n < len3; n++) {
for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n];
if (player.pos != null) {
results1.push({
......@@ -4716,7 +4829,7 @@
response.writeHead(200);
ret_keys = "";
ref3 = vip_info.cdkeys[u.query.keytype];
for (m = 0, len2 = ref3.length; m < len2; m++) {
for (m = 0, len3 = ref3.length; m < len3; m++) {
key = ref3[m];
ret_keys = ret_keys + u.query.keytype + "D" + settings.port + ":" + key + "\n";
}
......@@ -4733,7 +4846,7 @@
archive_args = ["a", "-mx0", "-y", archive_name];
check = false;
ref4 = duel_log.duel_log;
for (n = 0, len3 = ref4.length; n < len3; n++) {
for (n = 0, len4 = ref4.length; n < len4; n++) {
replay = ref4[n];
check = true;
archive_args.push(replay.replay_filename);
......@@ -4832,7 +4945,7 @@
return;
}
if (u.query.shout) {
for (o = 0, len4 = ROOM_all.length; o < len4; o++) {
for (o = 0, len5 = ROOM_all.length; o < len5; o++) {
room = ROOM_all[o];
if (room && room.established) {
ygopro.stoc_send_chat_to_room(room, u.query.shout, ygopro.constants.COLORS.YELLOW);
......@@ -4878,7 +4991,7 @@
response.end(addCallback(u.query.callback, "['ban ok', '" + u.query.ban + "']"));
} else if (u.query.kick) {
kick_room_found = false;
for (p = 0, len5 = ROOM_all.length; p < len5; p++) {
for (p = 0, len6 = ROOM_all.length; p < len6; p++) {
room = ROOM_all[p];
if (!(room && room.established && (u.query.kick === "all" || u.query.kick === room.process_pid.toString() || u.query.kick === room.name))) {
continue;
......@@ -4901,7 +5014,7 @@
}
} else if (u.query.death) {
death_room_found = false;
for (q = 0, len6 = ROOM_all.length; q < len6; q++) {
for (q = 0, len7 = ROOM_all.length; q < len7; q++) {
room = ROOM_all[q];
if (!(room && room.established && room.started && !room.death && (u.query.death === "all" || u.query.death === room.process_pid.toString() || u.query.death === room.name))) {
continue;
......@@ -4966,7 +5079,7 @@
}
} else if (u.query.deathcancel) {
death_room_found = false;
for (r = 0, len7 = ROOM_all.length; r < len7; r++) {
for (r = 0, len8 = ROOM_all.length; r < len8; r++) {
room = ROOM_all[r];
if (!(room && room.established && room.started && room.death && (u.query.deathcancel === "all" || u.query.deathcancel === room.process_pid.toString()))) {
continue;
......
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