Commit 6c605bb7 authored by nanahira's avatar nanahira

Merge branch 'compat_pre'

parents 710b646e 6438a63f
...@@ -72,6 +72,11 @@ ...@@ -72,6 +72,11 @@
"enabled": false, "enabled": false,
"generate_count": 500 "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": { "random_duel": {
"enabled": true, "enabled": true,
"no_rematch_check": false, "no_rematch_check": false,
......
...@@ -72,6 +72,11 @@ ...@@ -72,6 +72,11 @@
"enabled": false, "enabled": false,
"generate_count": 500 "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": { "random_duel": {
"enabled": false, "enabled": false,
"no_rematch_check": false, "no_rematch_check": false,
......
...@@ -77,6 +77,11 @@ ...@@ -77,6 +77,11 @@
"enabled": false, "enabled": false,
"generate_count": 500 "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": { "random_duel": {
"enabled": false, "enabled": false,
"no_rematch_check": false, "no_rematch_check": false,
......
...@@ -186,6 +186,7 @@ ...@@ -186,6 +186,7 @@
"vip_set_victory": "Your victory word have been set.", "vip_set_victory": "Your victory word have been set.",
"vip_password_changed": "Password changed.", "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.", "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_part1": "Sending the replay of the duel number ",
"replay_hint_part2": ".", "replay_hint_part2": ".",
"athletic_arena_tip": "During an athletic match, a game quit behavior is regarded as a surrender." "athletic_arena_tip": "During an athletic match, a game quit behavior is regarded as a surrender."
...@@ -521,6 +522,7 @@ ...@@ -521,6 +522,7 @@
"vip_set_victory": "已设置胜利台词。", "vip_set_victory": "已设置胜利台词。",
"vip_password_changed": "密码修改成功。", "vip_password_changed": "密码修改成功。",
"vip_player_name_too_long": "你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。", "vip_player_name_too_long": "你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。",
"pre_release_compat_hint": "看起来你是使用先行卡数据的用户,已开启先行卡兼容模式。",
"replay_hint_part1": "正在发送第", "replay_hint_part1": "正在发送第",
"replay_hint_part2": "局决斗的录像。", "replay_hint_part2": "局决斗的录像。",
"athletic_arena_tip": "在竞技匹配中,比赛开始前退出游戏也会视为投降。" "athletic_arena_tip": "在竞技匹配中,比赛开始前退出游戏也会视为投降。"
......
...@@ -44,6 +44,7 @@ import_datas = [ ...@@ -44,6 +44,7 @@ import_datas = [
"abuse_count", "abuse_count",
"ban_mc", "ban_mc",
"vip", "vip",
"is_using_pre_release",
"vpass", "vpass",
"rag", "rag",
"rid", "rid",
...@@ -341,6 +342,9 @@ if settings.modules.windbot.enabled ...@@ -341,6 +342,9 @@ if settings.modules.windbot.enabled
if settings.modules.heartbeat_detection.enabled if settings.modules.heartbeat_detection.enabled
long_resolve_cards = loadJSON('./data/long_resolve_cards.json') long_resolve_cards = loadJSON('./data/long_resolve_cards.json')
if settings.modules.pre_release_compat.enabled
sqlite3 = require('sqlite3').verbose()
# 组件 # 组件
ygopro = require './ygopro.js' ygopro = require './ygopro.js'
roomlist = require './roomlist.js' if settings.modules.http.websocket_roomlist roomlist = require './roomlist.js' if settings.modules.http.websocket_roomlist
...@@ -1015,6 +1019,22 @@ SOCKET_flush_data = (sk, datas) -> ...@@ -1015,6 +1019,22 @@ SOCKET_flush_data = (sk, datas) ->
datas.splice(0, datas.length) datas.splice(0, datas.length)
return true 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 class Room
constructor: (name, @hostinfo) -> constructor: (name, @hostinfo) ->
@name = name @name = name
...@@ -1039,6 +1059,40 @@ class Room ...@@ -1039,6 +1059,40 @@ class Room
@replays = [] @replays = []
ROOM_all.push this 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)) @hostinfo ||= JSON.parse(JSON.stringify(settings.hostinfo))
delete @hostinfo.comment delete @hostinfo.comment
if lflists.length if lflists.length
...@@ -1733,6 +1787,8 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)-> ...@@ -1733,6 +1787,8 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
client.name = name client.name = name
client.vpass = vpass client.vpass = vpass
client.name_vpass = if vpass then name + "$" + vpass else name 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 #console.log client.name, client.vpass
if settings.modules.vip.enabled and CLIENT_check_vip(client) if settings.modules.vip.enabled and CLIENT_check_vip(client)
client.vip = true client.vip = true
...@@ -2360,6 +2416,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)-> ...@@ -2360,6 +2416,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room and !client.reconnecting return unless room and !client.reconnecting
msg = buffer.readInt8(0) 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 settings.modules.retry_handle.enabled
if ygopro.constants.MSG[msg] == 'RETRY' if ygopro.constants.MSG[msg] == 'RETRY'
if !client.retry_count? if !client.retry_count?
...@@ -3271,14 +3329,51 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -3271,14 +3329,51 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
else else
#log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side) #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) ygopro.stoc_send_chat(client, "${deck_incorrect_part1} #{found_deck} ${deck_incorrect_part2}", ygopro.constants.COLORS.RED)
return false
else else
#log.info("player deck not found: " + client.name) #log.info("player deck not found: " + client.name)
ygopro.stoc_send_chat(client, "#{client.name}${deck_not_found}", ygopro.constants.COLORS.RED) 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 return false
ygopro.ctos_follow 'RESPONSE', false, (buffer, info, client, server, datas)-> ygopro.ctos_follow 'RESPONSE', false, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid] 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() room.last_active_time = moment()
return return
......
// Generated by CoffeeScript 1.12.7 // Generated by CoffeeScript 1.12.7
(function() { (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'); net = require('net');
...@@ -58,7 +58,7 @@ ...@@ -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'); merge = require('deepmerge');
...@@ -176,7 +176,7 @@ ...@@ -176,7 +176,7 @@
}; };
CLIENT_use_cdkey = function(client, pkey) { 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)) { if (!(settings.modules.vip.enabled && pkey)) {
return 0; return 0;
} }
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
ref = vip_info.cdkeys; ref = vip_info.cdkeys;
for (type in ref) { for (type in ref) {
keys = ref[type]; keys = ref[type];
for (j = 0, len = keys.length; j < len; j++) { for (j = 0, len1 = keys.length; j < len1; j++) {
key = keys[j]; key = keys[j];
if (!(pkey === key || pkey === (type + "D" + settings.port + ":" + key))) { if (!(pkey === key || pkey === (type + "D" + settings.port + ":" + key))) {
continue; continue;
...@@ -380,7 +380,7 @@ ...@@ -380,7 +380,7 @@
try { try {
ref = fs.readFileSync('ygopro/expansions/lflist.conf', 'utf8').match(/!.*/g); 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]; list = ref[j];
date = list.match(/!([\d\.]+)/); date = list.match(/!([\d\.]+)/);
if (!date) { if (!date) {
...@@ -397,7 +397,7 @@ ...@@ -397,7 +397,7 @@
try { try {
ref1 = fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g); 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]; list = ref1[l];
date = list.match(/!([\d\.]+)/); date = list.match(/!([\d\.]+)/);
if (!date) { if (!date) {
...@@ -429,6 +429,10 @@ ...@@ -429,6 +429,10 @@
long_resolve_cards = loadJSON('./data/long_resolve_cards.json'); long_resolve_cards = loadJSON('./data/long_resolve_cards.json');
} }
if (settings.modules.pre_release_compat.enabled) {
sqlite3 = require('sqlite3').verbose();
}
ygopro = require('./ygopro.js'); ygopro = require('./ygopro.js');
if (settings.modules.http.websocket_roomlist) { if (settings.modules.http.websocket_roomlist) {
...@@ -594,15 +598,15 @@ ...@@ -594,15 +598,15 @@
ROOM_bad_ip = {}; ROOM_bad_ip = {};
ban_user = function(name) { 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); settings.ban.banned_user.push(name);
setting_save(settings); setting_save(settings);
bad_ip = 0; 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]; room = ROOM_all[m];
if (room && room.established) { if (room && room.established) {
ref3 = room.players; ref3 = room.players;
for (n = 0, len3 = ref3.length; n < len3; n++) { for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n]; player = ref3[n];
if (player && (player.name === name || player.ip === bad_ip)) { if (player && (player.name === name || player.ip === bad_ip)) {
bad_ip = player.ip; bad_ip = player.ip;
...@@ -888,12 +892,12 @@ ...@@ -888,12 +892,12 @@
}; };
ROOM_unwelcome = function(room, bad_player, reason) { ROOM_unwelcome = function(room, bad_player, reason) {
var len2, m, player, ref3; var len3, m, player, ref3;
if (!room) { if (!room) {
return; return;
} }
ref3 = room.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]; player = ref3[m];
if (player && player === bad_player) { if (player && player === bad_player) {
ygopro.stoc_send_chat(player, "${unwelcome_warn_part1}" + reason + "${unwelcome_warn_part2}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(player, "${unwelcome_warn_part1}" + reason + "${unwelcome_warn_part2}", ygopro.constants.COLORS.RED);
...@@ -987,9 +991,9 @@ ...@@ -987,9 +991,9 @@
}; };
CLIENT_import_data = function(client, old_client, room) { 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; 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]; player = ref3[index];
if (player === old_client) { if (player === old_client) {
room.players[index] = client; room.players[index] = client;
...@@ -1006,7 +1010,7 @@ ...@@ -1006,7 +1010,7 @@
if (room.selecting_tp === old_client) { if (room.selecting_tp === old_client) {
room.selecting_tp = 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]; key = import_datas[n];
client[key] = old_client[key]; client[key] = old_client[key];
} }
...@@ -1044,10 +1048,10 @@ ...@@ -1044,10 +1048,10 @@
}; };
CLIENT_is_player = function(client, room) { CLIENT_is_player = function(client, room) {
var is_player, len2, m, player, ref3; var is_player, len3, m, player, ref3;
is_player = false; is_player = false;
ref3 = room.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]; player = ref3[m];
if (client === player) { if (client === player) {
is_player = true; is_player = true;
...@@ -1081,12 +1085,12 @@ ...@@ -1081,12 +1085,12 @@
}; };
CLIENT_get_kick_reconnect_target = function(client, deckbuf) { CLIENT_get_kick_reconnect_target = function(client, deckbuf) {
var len2, len3, m, n, player, ref3, room; var len3, len4, m, n, player, ref3, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m]; room = ROOM_all[m];
if (room && room.started && !room.windbot) { if (room && room.started && !room.windbot) {
ref3 = room.get_playing_player(); 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]; 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))) { 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; return player;
...@@ -1108,7 +1112,7 @@ ...@@ -1108,7 +1112,7 @@
}; };
CLIENT_send_pre_reconnect_info = function(client, room, old_client) { 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_chat(client, "${pre_reconnecting_to_room}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send(client, 'JOIN_GAME', room.join_game_buffer); ygopro.stoc_send(client, 'JOIN_GAME', room.join_game_buffer);
req_pos = old_client.pos; req_pos = old_client.pos;
...@@ -1119,7 +1123,7 @@ ...@@ -1119,7 +1123,7 @@
type: req_pos type: req_pos
}); });
ref3 = room.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]; player = ref3[m];
ygopro.stoc_send(client, 'HS_PLAYER_ENTER', { ygopro.stoc_send(client, 'HS_PLAYER_ENTER', {
name: player.name, name: player.name,
...@@ -1302,14 +1306,14 @@ ...@@ -1302,14 +1306,14 @@
}; };
CLIENT_send_replays = function(client, room) { 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)) { if (!(settings.modules.replay_delay && room.replays.length && room.hostinfo.mode === 1 && !client.replays_sent && !client.closed)) {
return false; return false;
} }
client.replays_sent = true; client.replays_sent = true;
i = 0; i = 0;
ref3 = room.replays; ref3 = room.replays;
for (m = 0, len2 = ref3.length; m < len2; m++) { for (m = 0, len3 = ref3.length; m < len3; m++) {
buffer = ref3[m]; buffer = ref3[m];
++i; ++i;
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE);
...@@ -1319,11 +1323,11 @@ ...@@ -1319,11 +1323,11 @@
}; };
SOCKET_flush_data = function(sk, datas) { SOCKET_flush_data = function(sk, datas) {
var buffer, len2, m; var buffer, len3, m;
if (!sk || sk.closed) { if (!sk || sk.closed) {
return false; return false;
} }
for (m = 0, len2 = datas.length; m < len2; m++) { for (m = 0, len3 = datas.length; m < len3; m++) {
buffer = datas[m]; buffer = datas[m];
sk.write(buffer); sk.write(buffer);
} }
...@@ -1331,9 +1335,31 @@ ...@@ -1331,9 +1335,31 @@
return true; 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() { Room = (function() {
function Room(name, hostinfo) { 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.hostinfo = hostinfo;
this.name = name; this.name = name;
this.alive = true; this.alive = true;
...@@ -1357,6 +1383,39 @@ ...@@ -1357,6 +1383,39 @@
this.replays = []; this.replays = [];
} }
ROOM_all.push(this); 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))); this.hostinfo || (this.hostinfo = JSON.parse(JSON.stringify(settings.hostinfo)));
delete this.hostinfo.comment; delete this.hostinfo.comment;
if (lflists.length) { if (lflists.length) {
...@@ -1505,9 +1564,9 @@ ...@@ -1505,9 +1564,9 @@
_this.port = parseInt(data); _this.port = parseInt(data);
_.each(_this.players, function(player) { _.each(_this.players, function(player) {
player.server.connect(_this.port, '127.0.0.1', function() { 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; 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]; buffer = ref3[m];
player.server.write(buffer); player.server.write(buffer);
} }
...@@ -1718,13 +1777,13 @@ ...@@ -1718,13 +1777,13 @@
}; };
Room.prototype.get_disconnected_count = function() { Room.prototype.get_disconnected_count = function() {
var found, len2, m, player, ref3; var found, len3, m, player, ref3;
if (!settings.modules.reconnect.enabled) { if (!settings.modules.reconnect.enabled) {
return 0; return 0;
} }
found = 0; found = 0;
ref3 = this.get_playing_player(); 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]; player = ref3[m];
if (player.closed) { if (player.closed) {
found++; found++;
...@@ -1768,17 +1827,17 @@ ...@@ -1768,17 +1827,17 @@
}; };
Room.prototype.send_replays = function() { 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)) { if (!(settings.modules.replay_delay && this.replays.length && this.hostinfo.mode === 1)) {
return false; return false;
} }
ref3 = this.players; ref3 = this.players;
for (m = 0, len2 = ref3.length; m < len2; m++) { for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m]; player = ref3[m];
CLIENT_send_replays(player, this); CLIENT_send_replays(player, this);
} }
ref4 = this.watchers; ref4 = this.watchers;
for (n = 0, len3 = ref4.length; n < len3; n++) { for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n]; player = ref4[n];
CLIENT_send_replays(player, this); CLIENT_send_replays(player, this);
} }
...@@ -1817,9 +1876,9 @@ ...@@ -1817,9 +1876,9 @@
roomlist.update(this); roomlist.update(this);
} }
client.server.connect(this.port, '127.0.0.1', function() { 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; 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]; buffer = ref3[m];
client.server.write(buffer); client.server.write(buffer);
} }
...@@ -1830,7 +1889,7 @@ ...@@ -1830,7 +1889,7 @@
}; };
Room.prototype.disconnect = function(client, error) { Room.prototype.disconnect = function(client, error) {
var index, len2, m, player, ref3; var index, len3, m, player, ref3;
if (client.had_new_reconnection) { if (client.had_new_reconnection) {
return; return;
} }
...@@ -1844,7 +1903,7 @@ ...@@ -1844,7 +1903,7 @@
} else { } else {
if (this.arena && !this.started) { if (this.arena && !this.started) {
ref3 = this.players; ref3 = this.players;
for (m = 0, len2 = ref3.length; m < len2; m++) { for (m = 0, len3 = ref3.length; m < len3; m++) {
player = ref3[m]; player = ref3[m];
if (player.pos !== 7) { if (player.pos !== 7) {
this.scores[player.name_vpass] = 0; this.scores[player.name_vpass] = 0;
...@@ -2013,7 +2072,7 @@ ...@@ -2013,7 +2072,7 @@
} }
client.pre_establish_buffers = new Array(); client.pre_establish_buffers = new Array();
client.on('data', function(ctos_buffer) { 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) { if (client.is_post_watcher) {
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (room && !CLIENT_is_banned_by_mc(client)) { if (room && !CLIENT_is_banned_by_mc(client)) {
...@@ -2090,12 +2149,12 @@ ...@@ -2090,12 +2149,12 @@
return; return;
} }
if (client.established) { if (client.established) {
for (m = 0, len2 = datas.length; m < len2; m++) { for (m = 0, len3 = datas.length; m < len3; m++) {
buffer = datas[m]; buffer = datas[m];
client.server.write(buffer); client.server.write(buffer);
} }
} else { } else {
for (n = 0, len3 = datas.length; n < len3; n++) { for (n = 0, len4 = datas.length; n < len4; n++) {
buffer = datas[n]; buffer = datas[n];
client.pre_establish_buffers.push(buffer); client.pre_establish_buffers.push(buffer);
} }
...@@ -2103,7 +2162,7 @@ ...@@ -2103,7 +2162,7 @@
} }
}); });
server.on('data', function(stoc_buffer) { 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_message_length = 0;
stoc_proto = 0; stoc_proto = 0;
datas = []; datas = [];
...@@ -2161,7 +2220,7 @@ ...@@ -2161,7 +2220,7 @@
} }
} }
if (server.client && !server.client.closed) { 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]; buffer = datas[m];
server.client.write(buffer); server.client.write(buffer);
} }
...@@ -2219,6 +2278,9 @@ ...@@ -2219,6 +2278,9 @@
client.name = name; client.name = name;
client.vpass = vpass; client.vpass = vpass;
client.name_vpass = vpass ? name + "$" + vpass : name; 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)) { if (settings.modules.vip.enabled && CLIENT_check_vip(client)) {
client.vip = true; client.vip = true;
} }
...@@ -2241,7 +2303,7 @@ ...@@ -2241,7 +2303,7 @@
}); });
ygopro.ctos_follow('JOIN_GAME', false, function(buffer, info, client, server, datas) { 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(); info.pass = info.pass.trim();
client.pass = info.pass; client.pass = info.pass;
if (CLIENT_is_able_to_reconnect(client) || CLIENT_is_able_to_kick_reconnect(client)) { if (CLIENT_is_able_to_reconnect(client) || CLIENT_is_able_to_kick_reconnect(client)) {
...@@ -2276,7 +2338,7 @@ ...@@ -2276,7 +2338,7 @@
} else if (info.pass.toUpperCase() === "L" && settings.modules.koishi_roomlist.enabled) { } else if (info.pass.toUpperCase() === "L" && settings.modules.koishi_roomlist.enabled) {
ygopro.stoc_send_chat(client, "${koishi_roomlist_hint}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${koishi_roomlist_hint}", ygopro.constants.COLORS.BABYBLUE);
room_showed = []; 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]; room = ROOM_all[m];
if (room && room.established && room.name.indexOf('$') < 0) { if (room && room.established && room.name.indexOf('$') < 0) {
room_showed.push(room); room_showed.push(room);
...@@ -2286,7 +2348,7 @@ ...@@ -2286,7 +2348,7 @@
room_buffer = Buffer.alloc(2 + 333 * room_showed.length); room_buffer = Buffer.alloc(2 + 333 * room_showed.length);
room_buffer.writeUInt16LE(room_showed.length, buffer_pos); room_buffer.writeUInt16LE(room_showed.length, buffer_pos);
buffer_pos += 2; 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 = room_showed[n];
room_buffer.write(room.name, buffer_pos, 64, "utf8"); room_buffer.write(room.name, buffer_pos, 64, "utf8");
buffer_pos += 64; buffer_pos += 64;
...@@ -2299,7 +2361,7 @@ ...@@ -2299,7 +2361,7 @@
buffer_pos++; buffer_pos++;
room_players = []; room_players = [];
ref3 = room.get_playing_player(); 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]; player = ref3[o];
if (player) { if (player) {
room_players[player.pos] = player; room_players[player.pos] = player;
...@@ -2404,7 +2466,7 @@ ...@@ -2404,7 +2466,7 @@
return (checksum & 0xFF) === 0; return (checksum & 0xFF) === 0;
}; };
finish = function(buffer) { 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) { if (client.closed) {
return; return;
} }
...@@ -2457,7 +2519,7 @@ ...@@ -2457,7 +2519,7 @@
room = ROOM_find_or_create_by_name('M#' + info.pass.slice(8)); room = ROOM_find_or_create_by_name('M#' + info.pass.slice(8));
if (room) { if (room) {
ref4 = room.get_playing_player(); 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]; player = ref4[p];
if (!(player && player.name === client.name)) { if (!(player && player.name === client.name)) {
continue; continue;
...@@ -2496,13 +2558,13 @@ ...@@ -2496,13 +2558,13 @@
client.is_post_watcher = true; client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) { if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref5 = _.lines(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]; line = ref5[q];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.words.enabled && words.words[client.name]) { } 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)]); 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]; line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
...@@ -2511,7 +2573,7 @@ ...@@ -2511,7 +2573,7 @@
room.watchers.push(client); room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref7 = room.watcher_buffers; 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]; buffer = ref7[s];
client.write(buffer); client.write(buffer);
} }
...@@ -2530,7 +2592,7 @@ ...@@ -2530,7 +2592,7 @@
secret = id % 65535 + 1; secret = id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6); decrypted_buffer = Buffer.allocUnsafe(6);
ref4 = [0, 2, 4]; 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]; i = ref4[p];
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i); decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
} }
...@@ -2548,13 +2610,13 @@ ...@@ -2548,13 +2610,13 @@
}, },
json: true json: true
}, function(error, response, body) { }, function(error, response, body) {
var len6, q, ref5; var len7, q, ref5;
if (body && body.user) { if (body && body.user) {
users_cache[client.name] = body.user.id; users_cache[client.name] = body.user.id;
secret = body.user.id % 65535 + 1; secret = body.user.id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6); decrypted_buffer = Buffer.allocUnsafe(6);
ref5 = [0, 2, 4]; 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]; i = ref5[q];
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i); decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
} }
...@@ -2579,7 +2641,7 @@ ...@@ -2579,7 +2641,7 @@
room.watchers.push(client); room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref5 = room.watcher_buffers; 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]; buffer = ref5[q];
client.write(buffer); client.write(buffer);
} }
...@@ -2616,7 +2678,7 @@ ...@@ -2616,7 +2678,7 @@
challonge.matches._index({ challonge.matches._index({
id: settings.modules.challonge.tournament_id, id: settings.modules.challonge.tournament_id,
callback: function(err, data) { 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) { if (client.closed) {
return; return;
} }
...@@ -2654,13 +2716,13 @@ ...@@ -2654,13 +2716,13 @@
client.is_post_watcher = true; client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) { if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref6 = _.lines(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]; line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.words.enabled && words.words[client.name]) { } 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)]); 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]; line = ref7[s];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
...@@ -2669,7 +2731,7 @@ ...@@ -2669,7 +2731,7 @@
room.watchers.push(client); room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref8 = room.watcher_buffers; 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]; buffer = ref8[t];
client.write(buffer); client.write(buffer);
} }
...@@ -2680,7 +2742,7 @@ ...@@ -2680,7 +2742,7 @@
ygopro.stoc_die(client, "${watch_denied_room}"); ygopro.stoc_die(client, "${watch_denied_room}");
} else { } else {
ref9 = room.get_playing_player(); 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]; player = ref9[x];
if (!(player && player !== client && player.challonge_info.id === client.challonge_info.id)) { if (!(player && player !== client && player.challonge_info.id === client.challonge_info.id)) {
continue; continue;
...@@ -2745,13 +2807,13 @@ ...@@ -2745,13 +2807,13 @@
client.is_post_watcher = true; client.is_post_watcher = true;
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) { if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref6 = _.lines(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]; line = ref6[r];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.words.enabled && words.words[client.name]) { } 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)]); 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]; line = ref7[s];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
...@@ -2760,7 +2822,7 @@ ...@@ -2760,7 +2822,7 @@
room.watchers.push(client); room.watchers.push(client);
ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${watch_watching}", ygopro.constants.COLORS.BABYBLUE);
ref8 = room.watcher_buffers; 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]; buffer = ref8[t];
client.write(buffer); client.write(buffer);
} }
...@@ -2778,7 +2840,7 @@ ...@@ -2778,7 +2840,7 @@
}); });
ygopro.stoc_follow('JOIN_GAME', false, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) { if (!(room && !client.reconnecting)) {
return; return;
...@@ -2788,13 +2850,13 @@ ...@@ -2788,13 +2850,13 @@
} }
if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) { if (settings.modules.vip.enabled && client.vip && vip_info.players[client.name].words) {
ref3 = _.lines(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]; line = ref3[m];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.words.enabled && words.words[client.name]) { } 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)]); 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]; line = ref4[n];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
...@@ -2824,7 +2886,7 @@ ...@@ -2824,7 +2886,7 @@
if (settings.modules.random_duel.record_match_scores && room.random_type === 'M') { 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); ygopro.stoc_send_chat_to_room(room, ROOM_player_get_score(client), ygopro.constants.COLORS.GREEN);
ref5 = room.players; ref5 = room.players;
for (o = 0, len4 = ref5.length; o < len4; o++) { for (o = 0, len5 = ref5.length; o < len5; o++) {
player = ref5[o]; player = ref5[o];
if (player.pos !== 7 && player !== client) { if (player.pos !== 7 && player !== client) {
ygopro.stoc_send_chat(client, ROOM_player_get_score(player), ygopro.constants.COLORS.GREEN); ygopro.stoc_send_chat(client, ROOM_player_get_score(player), ygopro.constants.COLORS.GREEN);
...@@ -2863,14 +2925,14 @@ ...@@ -2863,14 +2925,14 @@
ygopro.ctos_send(watcher, 'HS_TOOBSERVER'); ygopro.ctos_send(watcher, 'HS_TOOBSERVER');
}); });
watcher.on('data', function(data) { watcher.on('data', function(data) {
var len5, p, ref6, w; var len6, p, ref6, w;
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
} }
room.watcher_buffers.push(data); room.watcher_buffers.push(data);
ref6 = room.watchers; ref6 = room.watchers;
for (p = 0, len5 = ref6.length; p < len5; p++) { for (p = 0, len6 = ref6.length; p < len6; p++) {
w = ref6[p]; w = ref6[p];
if (w) { if (w) {
w.write(data); w.write(data);
...@@ -2942,12 +3004,15 @@ ...@@ -2942,12 +3004,15 @@
} }
ygopro.stoc_follow('GAME_MSG', true, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) { if (!(room && !client.reconnecting)) {
return; return;
} }
msg = buffer.readInt8(0); 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 (settings.modules.retry_handle.enabled) {
if (ygopro.constants.MSG[msg] === 'RETRY') { if (ygopro.constants.MSG[msg] === 'RETRY') {
if (client.retry_count == null) { if (client.retry_count == null) {
...@@ -3068,7 +3133,7 @@ ...@@ -3068,7 +3133,7 @@
room.turn = 0; room.turn = 0;
if (settings.modules.heartbeat_detection.enabled) { if (settings.modules.heartbeat_detection.enabled) {
ref3 = room.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]; player = ref3[m];
player.heartbeat_protected = false; player.heartbeat_protected = false;
} }
...@@ -3080,13 +3145,13 @@ ...@@ -3080,13 +3145,13 @@
room.scores[room.winner_name] = room.scores[room.winner_name] + 1; 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) { 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); 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]; line = ref4[n];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); 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) { } 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); 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]; line = ref5[o];
ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, line, ygopro.constants.COLORS.PINK);
} }
...@@ -3210,7 +3275,7 @@ ...@@ -3210,7 +3275,7 @@
if (ygopro.constants.MSG[msg] === 'CHAINING') { if (ygopro.constants.MSG[msg] === 'CHAINING') {
card = buffer.readUInt32LE(1); card = buffer.readUInt32LE(1);
found = false; 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]; id = long_resolve_cards[q];
if (!(id === card)) { if (!(id === card)) {
continue; continue;
...@@ -3234,7 +3299,7 @@ ...@@ -3234,7 +3299,7 @@
chain = buffer.readInt8(1); chain = buffer.readInt8(1);
if (room.long_resolve_chain[chain]) { if (room.long_resolve_chain[chain]) {
ref9 = room.get_playing_player(); 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 = ref9[r];
player.heartbeat_protected = true; player.heartbeat_protected = true;
} }
...@@ -3261,25 +3326,25 @@ ...@@ -3261,25 +3326,25 @@
if (ygopro.constants.MSG[msg] !== 'CHAINING' || (trigger_location & 0x8) && client.ready_trap) { 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]) { 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]); 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]; line = ref10[s];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK); 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]) { } 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]); 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]; line = ref11[t];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.dialogues.enabled && dialogues.dialogues[card]) { } else if (settings.modules.dialogues.enabled && dialogues.dialogues[card]) {
ref12 = _.lines(dialogues.dialogues[card][Math.floor(Math.random() * dialogues.dialogues[card].length)]); 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]; line = ref12[x];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
} }
} else if (settings.modules.dialogues.enabled && dialogues.dialogues_custom[card]) { } 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)]); 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]; line = ref13[y];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
} }
...@@ -3299,7 +3364,7 @@ ...@@ -3299,7 +3364,7 @@
}); });
ygopro.ctos_follow('HS_TOOBSERVER', true, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
...@@ -3312,7 +3377,7 @@ ...@@ -3312,7 +3377,7 @@
return false; return false;
} }
ref3 = room.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]; player = ref3[m];
if (player === client) { if (player === client) {
ygopro.stoc_send_chat(client, "${cannot_to_observer}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${cannot_to_observer}", ygopro.constants.COLORS.BABYBLUE);
...@@ -3323,13 +3388,13 @@ ...@@ -3323,13 +3388,13 @@
}); });
ygopro.ctos_follow('HS_KICK', true, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
} }
ref3 = room.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]; player = ref3[m];
if (player && player.pos === info.pos && player !== client) { if (player && player.pos === info.pos && player !== client) {
if (room.arena === "athletic" || settings.modules.challonge.enabled) { if (room.arena === "athletic" || settings.modules.challonge.enabled) {
...@@ -3360,7 +3425,7 @@ ...@@ -3360,7 +3425,7 @@
}); });
ygopro.stoc_follow('HS_PLAYER_CHANGE', false, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!(room && room.max_player && client.is_host)) { if (!(room && room.max_player && client.is_host)) {
return; return;
...@@ -3371,7 +3436,7 @@ ...@@ -3371,7 +3436,7 @@
if (room.arena) { if (room.arena) {
room.ready_player_count = 0; room.ready_player_count = 0;
ref3 = room.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]; player = ref3[m];
if (player.pos === pos) { if (player.pos === pos) {
player.is_ready = is_ready; player.is_ready = is_ready;
...@@ -3411,7 +3476,7 @@ ...@@ -3411,7 +3476,7 @@
} else { } else {
room.ready_player_count_without_host = 0; room.ready_player_count_without_host = 0;
ref4 = room.players; ref4 = room.players;
for (n = 0, len3 = ref4.length; n < len3; n++) { for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n]; player = ref4[n];
if (player.pos === pos) { if (player.pos === pos) {
player.is_ready = is_ready; player.is_ready = is_ready;
...@@ -3452,7 +3517,7 @@ ...@@ -3452,7 +3517,7 @@
}); });
ygopro.stoc_follow('DUEL_END', false, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!(room && settings.modules.replay_delay && room.hostinfo.mode === 1)) { if (!(room && settings.modules.replay_delay && room.hostinfo.mode === 1)) {
return; return;
...@@ -3462,7 +3527,7 @@ ...@@ -3462,7 +3527,7 @@
if (!room.replays_sent_to_watchers) { if (!room.replays_sent_to_watchers) {
room.replays_sent_to_watchers = true; room.replays_sent_to_watchers = true;
ref3 = room.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]; player = ref3[m];
if (player && player.pos > 3) { if (player && player.pos > 3) {
CLIENT_send_replays(player, room); CLIENT_send_replays(player, room);
...@@ -3470,7 +3535,7 @@ ...@@ -3470,7 +3535,7 @@
} }
ref4 = room.watchers; ref4 = room.watchers;
results = []; results = [];
for (n = 0, len3 = ref4.length; n < len3; n++) { for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n]; player = ref4[n];
if (player) { if (player) {
results.push(CLIENT_send_replays(player, room)); results.push(CLIENT_send_replays(player, room));
...@@ -3481,7 +3546,7 @@ ...@@ -3481,7 +3546,7 @@
}); });
wait_room_start = function(room, time) { 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)) { if (!(!room || room.started || room.ready_player_count_without_host < room.max_player - 1)) {
time -= 1; time -= 1;
if (time) { if (time) {
...@@ -3493,7 +3558,7 @@ ...@@ -3493,7 +3558,7 @@
}), 1000); }), 1000);
} else { } else {
ref3 = room.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]; player = ref3[m];
if (player && player.is_host) { if (player && player.is_host) {
ROOM_ban_player(player.name, player.ip, "${random_ban_reason_zombie}"); ROOM_ban_player(player.name, player.ip, "${random_ban_reason_zombie}");
...@@ -3535,17 +3600,17 @@ ...@@ -3535,17 +3600,17 @@
}; };
ygopro.stoc_send_random_tip_to_room = function(room) { 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) { if (settings.modules.tips.enabled && tips.tips.length) {
ref3 = room.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]; player = ref3[m];
if (player && !player.is_local && !player.closed) { if (player && !player.is_local && !player.closed) {
ygopro.stoc_send_random_tip(player); ygopro.stoc_send_random_tip(player);
} }
} }
ref4 = room.watchers; ref4 = room.watchers;
for (n = 0, len3 = ref4.length; n < len3; n++) { for (n = 0, len4 = ref4.length; n < len4; n++) {
player = ref4[n]; player = ref4[n];
if (player && !player.is_local && !player.closed) { if (player && !player.is_local && !player.closed) {
ygopro.stoc_send_random_tip(player); ygopro.stoc_send_random_tip(player);
...@@ -3596,8 +3661,8 @@ ...@@ -3596,8 +3661,8 @@
if (settings.modules.tips.enabled) { if (settings.modules.tips.enabled) {
setInterval(function() { setInterval(function() {
var len2, m, room; var len3, m, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m]; room = ROOM_all[m];
if (room && room.established) { if (room && room.established) {
if (!room.started || room.changing_side) { if (!room.started || room.changing_side) {
...@@ -3609,7 +3674,7 @@ ...@@ -3609,7 +3674,7 @@
} }
ygopro.stoc_follow('DUEL_START', false, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) { if (!(room && !client.reconnecting)) {
return; return;
...@@ -3623,7 +3688,7 @@ ...@@ -3623,7 +3688,7 @@
} }
room.dueling_players = []; room.dueling_players = [];
ref3 = room.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]; player = ref3[m];
if (!(player.pos !== 7)) { if (!(player.pos !== 7)) {
continue; continue;
...@@ -4076,7 +4141,7 @@ ...@@ -4076,7 +4141,7 @@
}); });
ygopro.ctos_follow('UPDATE_DECK', true, function(buffer, info, client, server, datas) { 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 (settings.modules.reconnect.enabled && client.pre_reconnecting) {
if (!CLIENT_is_able_to_reconnect(client) && !CLIENT_is_able_to_kick_reconnect(client)) { 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); ygopro.stoc_send_chat(client, "${reconnect_failed}", ygopro.constants.COLORS.RED);
...@@ -4166,7 +4231,7 @@ ...@@ -4166,7 +4231,7 @@
buffer = struct.buffer; buffer = struct.buffer;
found_deck = false; found_deck = false;
decks = fs.readdirSync(settings.modules.tournament_mode.deck_path); 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]; deck = decks[m];
if (_.endsWith(deck, client.name + ".ydk")) { if (_.endsWith(deck, client.name + ".ydk")) {
found_deck = deck; found_deck = deck;
...@@ -4183,7 +4248,7 @@ ...@@ -4183,7 +4248,7 @@
deck_main = []; deck_main = [];
deck_side = []; deck_side = [];
current_deck = deck_main; 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]; line = deck_array[n];
if (line.indexOf("!side") >= 0) { if (line.indexOf("!side") >= 0) {
current_deck = deck_side; current_deck = deck_side;
...@@ -4202,9 +4267,51 @@ ...@@ -4202,9 +4267,51 @@
ygopro.stoc_send_chat(client, "${deck_correct_part1} " + found_deck + " ${deck_correct_part2}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${deck_correct_part1} " + found_deck + " ${deck_correct_part2}", ygopro.constants.COLORS.BABYBLUE);
} else { } else {
ygopro.stoc_send_chat(client, "${deck_incorrect_part1} " + found_deck + " ${deck_incorrect_part2}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(client, "${deck_incorrect_part1} " + found_deck + " ${deck_incorrect_part2}", ygopro.constants.COLORS.RED);
return false;
} }
} else { } else {
ygopro.stoc_send_chat(client, client.name + "${deck_not_found}", ygopro.constants.COLORS.RED); 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; return false;
...@@ -4213,7 +4320,13 @@ ...@@ -4213,7 +4320,13 @@
ygopro.ctos_follow('RESPONSE', false, function(buffer, info, client, server, datas) { ygopro.ctos_follow('RESPONSE', false, function(buffer, info, client, server, datas) {
var room; var room;
room = ROOM_all[client.rid]; 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; return;
} }
room.last_active_time = moment(); room.last_active_time = moment();
...@@ -4325,7 +4438,7 @@ ...@@ -4325,7 +4438,7 @@
}); });
ygopro.stoc_follow('CHAT', true, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
pid = info.player; pid = info.player;
if (!(room && pid < 4 && settings.modules.chat_color.enabled)) { if (!(room && pid < 4 && settings.modules.chat_color.enabled)) {
...@@ -4344,7 +4457,7 @@ ...@@ -4344,7 +4457,7 @@
} }
} }
ref3 = room.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]; player = ref3[m];
if (player && player.pos === pid) { if (player && player.pos === pid) {
tplayer = player; tplayer = player;
...@@ -4457,7 +4570,7 @@ ...@@ -4457,7 +4570,7 @@
}); });
ygopro.stoc_follow('REPLAY', true, function(buffer, info, client, server, datas) { 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]; room = ROOM_all[client.rid];
if (!room) { 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; 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 @@ ...@@ -4474,13 +4587,13 @@
replay_filename = dueltime; replay_filename = dueltime;
if (room.hostinfo.mode !== 2) { if (room.hostinfo.mode !== 2) {
ref3 = room.dueling_players; 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]; player = ref3[i];
replay_filename = replay_filename + (i > 0 ? " VS " : " ") + player.name; replay_filename = replay_filename + (i > 0 ? " VS " : " ") + player.name;
} }
} else { } else {
ref4 = room.dueling_players; 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]; player = ref4[i];
replay_filename = replay_filename + (i > 0 ? (i === 2 ? " VS " : " & ") : " ") + player.name; replay_filename = replay_filename + (i > 0 ? (i === 2 ? " VS " : " & ") : " ") + player.name;
} }
...@@ -4494,10 +4607,10 @@ ...@@ -4494,10 +4607,10 @@
replay_filename: replay_filename, replay_filename: replay_filename,
roommode: room.hostinfo.mode, roommode: room.hostinfo.mode,
players: (function() { players: (function() {
var len4, o, ref5, results; var len5, o, ref5, results;
ref5 = room.dueling_players; ref5 = room.dueling_players;
results = []; results = [];
for (o = 0, len4 = ref5.length; o < len4; o++) { for (o = 0, len5 = ref5.length; o < len5; o++) {
player = ref5[o]; player = ref5[o];
results.push({ 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) : "") + ")" : ""), 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 @@ ...@@ -4526,8 +4639,8 @@
if (settings.modules.random_duel.enabled) { if (settings.modules.random_duel.enabled) {
setInterval(function() { setInterval(function() {
var len2, m, room, time_passed; var len3, m, room, time_passed;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[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)) { if (!(room && room.started && room.random_type && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0)) {
continue; continue;
...@@ -4550,8 +4663,8 @@ ...@@ -4550,8 +4663,8 @@
if (settings.modules.mycard.enabled) { if (settings.modules.mycard.enabled) {
setInterval(function() { setInterval(function() {
var len2, m, room, time_passed; var len3, m, room, time_passed;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m]; room = ROOM_all[m];
if (!(room && room.started && room.arena && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0)) { if (!(room && room.started && room.arena && room.last_active_time && room.waiting_for_player && room.get_disconnected_count() === 0)) {
continue; continue;
...@@ -4572,12 +4685,12 @@ ...@@ -4572,12 +4685,12 @@
if (settings.modules.heartbeat_detection.enabled) { if (settings.modules.heartbeat_detection.enabled) {
setInterval(function() { setInterval(function() {
var len2, len3, m, n, player, ref3, room; var len3, len4, m, n, player, ref3, room;
for (m = 0, len2 = ROOM_all.length; m < len2; m++) { for (m = 0, len3 = ROOM_all.length; m < len3; m++) {
room = ROOM_all[m]; room = ROOM_all[m];
if (room && room.started && (room.hostinfo.time_limit === 0 || !room.turn || room.turn <= 0) && !room.windbot) { if (room && room.started && (room.hostinfo.time_limit === 0 || !room.turn || room.turn <= 0) && !room.windbot) {
ref3 = room.get_playing_player(); 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]; player = ref3[n];
if (player && (!room.changing_side || player.selected_preduel)) { if (player && (!room.changing_side || player.selected_preduel)) {
CLIENT_heartbeat_register(player, true); CLIENT_heartbeat_register(player, true);
...@@ -4640,7 +4753,7 @@ ...@@ -4640,7 +4753,7 @@
return callback + "( " + text + " );"; return callback + "( " + text + " );";
}; };
requestListener = function(request, response) { 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; parseQueryString = true;
u = url.parse(request.url, parseQueryString); u = url.parse(request.url, parseQueryString);
pass_validated = u.query.pass === settings.modules.http.password; pass_validated = u.query.pass === settings.modules.http.password;
...@@ -4652,9 +4765,9 @@ ...@@ -4652,9 +4765,9 @@
response.writeHead(200); response.writeHead(200);
roomsjson = JSON.stringify({ roomsjson = JSON.stringify({
rooms: (function() { rooms: (function() {
var len2, m, results; var len3, m, results;
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]; room = ROOM_all[m];
if (room && room.established) { if (room && room.established) {
results.push({ results.push({
...@@ -4663,10 +4776,10 @@ ...@@ -4663,10 +4776,10 @@
roommode: room.hostinfo.mode, roommode: room.hostinfo.mode,
needpass: (room.name.indexOf('$') !== -1).toString(), needpass: (room.name.indexOf('$') !== -1).toString(),
users: _.sortBy((function() { users: _.sortBy((function() {
var len3, n, ref3, results1; var len4, n, ref3, results1;
ref3 = room.players; ref3 = room.players;
results1 = []; results1 = [];
for (n = 0, len3 = ref3.length; n < len3; n++) { for (n = 0, len4 = ref3.length; n < len4; n++) {
player = ref3[n]; player = ref3[n];
if (player.pos != null) { if (player.pos != null) {
results1.push({ results1.push({
...@@ -4716,7 +4829,7 @@ ...@@ -4716,7 +4829,7 @@
response.writeHead(200); response.writeHead(200);
ret_keys = ""; ret_keys = "";
ref3 = vip_info.cdkeys[u.query.keytype]; 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]; key = ref3[m];
ret_keys = ret_keys + u.query.keytype + "D" + settings.port + ":" + key + "\n"; ret_keys = ret_keys + u.query.keytype + "D" + settings.port + ":" + key + "\n";
} }
...@@ -4733,7 +4846,7 @@ ...@@ -4733,7 +4846,7 @@
archive_args = ["a", "-mx0", "-y", archive_name]; archive_args = ["a", "-mx0", "-y", archive_name];
check = false; check = false;
ref4 = duel_log.duel_log; 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]; replay = ref4[n];
check = true; check = true;
archive_args.push(replay.replay_filename); archive_args.push(replay.replay_filename);
...@@ -4832,7 +4945,7 @@ ...@@ -4832,7 +4945,7 @@
return; return;
} }
if (u.query.shout) { 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]; room = ROOM_all[o];
if (room && room.established) { if (room && room.established) {
ygopro.stoc_send_chat_to_room(room, u.query.shout, ygopro.constants.COLORS.YELLOW); ygopro.stoc_send_chat_to_room(room, u.query.shout, ygopro.constants.COLORS.YELLOW);
...@@ -4878,7 +4991,7 @@ ...@@ -4878,7 +4991,7 @@
response.end(addCallback(u.query.callback, "['ban ok', '" + u.query.ban + "']")); response.end(addCallback(u.query.callback, "['ban ok', '" + u.query.ban + "']"));
} else if (u.query.kick) { } else if (u.query.kick) {
kick_room_found = false; 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]; room = ROOM_all[p];
if (!(room && room.established && (u.query.kick === "all" || u.query.kick === room.process_pid.toString() || u.query.kick === room.name))) { if (!(room && room.established && (u.query.kick === "all" || u.query.kick === room.process_pid.toString() || u.query.kick === room.name))) {
continue; continue;
...@@ -4901,7 +5014,7 @@ ...@@ -4901,7 +5014,7 @@
} }
} else if (u.query.death) { } else if (u.query.death) {
death_room_found = false; 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]; 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))) { 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; continue;
...@@ -4966,7 +5079,7 @@ ...@@ -4966,7 +5079,7 @@
} }
} else if (u.query.deathcancel) { } else if (u.query.deathcancel) {
death_room_found = false; 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]; room = ROOM_all[r];
if (!(room && room.established && room.started && room.death && (u.query.deathcancel === "all" || u.query.deathcancel === room.process_pid.toString()))) { if (!(room && room.established && room.started && room.death && (u.query.deathcancel === "all" || u.query.deathcancel === room.process_pid.toString()))) {
continue; 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