Commit 656f7254 authored by nanahira's avatar nanahira

Merge branch 'master' into koishi

parents 420ab4ea 37e0f631
Pipeline #17895 passed with stages
in 10 minutes and 39 seconds
......@@ -631,8 +631,7 @@ init = () ->
room.scores[room.waiting_for_player.name_vpass] = -9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED)
CLIENT_send_replays(room.waiting_for_player, room)
CLIENT_kick(room.waiting_for_player)
CLIENT_send_replays_and_kick(room.waiting_for_player, room)
else if time_passed >= (settings.modules.random_duel.hang_timeout - 20) and not (time_passed % 10)
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${afk_warn_part1}#{settings.modules.random_duel.hang_timeout - time_passed}${afk_warn_part2}", ygopro.constants.COLORS.RED)
ROOM_unwelcome(room, room.waiting_for_player, "${random_ban_reason_AFK}")
......@@ -649,8 +648,7 @@ init = () ->
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED)
room.scores[room.waiting_for_player.name_vpass] = -9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
CLIENT_send_replays(room.waiting_for_player, room)
CLIENT_kick(room.waiting_for_player)
CLIENT_send_replays_and_kick(room.waiting_for_player, room)
else if time_passed >= (settings.modules.random_duel.hang_timeout - 20) and not (time_passed % 10)
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${afk_warn_part1}#{settings.modules.random_duel.hang_timeout - time_passed}${afk_warn_part2}", ygopro.constants.COLORS.RED)
......@@ -766,8 +764,7 @@ ban_user = global.ban_user = (name) ->
bans.push(dataManager.getBan(name, player.ip))
ROOM_bad_ip[player.ip]=99
ygopro.stoc_send_chat_to_room(room, "#{player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED)
CLIENT_send_replays(player, room)
CLIENT_kick(player)
CLIENT_send_replays_and_kick(player, room)
for ban in bans
await dataManager.banPlayer(ban)
return
......@@ -1278,10 +1275,15 @@ CLIENT_send_replays = global.CLIENT_send_replays = (client, room) ->
for buffer in room.replays
++i
if buffer
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send(client, "REPLAY", buffer)
await ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE)
await ygopro.stoc_send(client, "REPLAY", buffer)
return true
CLIENT_send_replays_and_kick = global.CLIENT_send_replays_and_kick = (client, room) ->
await CLIENT_send_replays(client, room)
CLIENT_kick(client)
return
SOCKET_flush_data = global.SOCKET_flush_data = (sk, datas) ->
if !sk or sk.isClosed
return false
......@@ -1549,7 +1551,7 @@ class Room
@has_ygopro_error = true
@ygopro_error_length = if @ygopro_error_length then @ygopro_error_length + data.length else data.length
if @ygopro_error_length > 10000
@send_replays()
await @send_replays()
@process.kill()
return
catch e
......@@ -1725,10 +1727,12 @@ class Room
send_replays: () ->
return false unless settings.modules.replay_delay and @replays.length and @hostinfo.mode == 1
send_tasks = []
for player in @players when player
CLIENT_send_replays(player, this)
send_tasks.push CLIENT_send_replays(player, this)
for player in @watchers when player
CLIENT_send_replays(player, this)
send_tasks.push CLIENT_send_replays(player, this)
await Promise.all send_tasks
return true
add_windbot: (botdata)->
......@@ -1805,7 +1809,7 @@ class Room
roomlist.update(this) if !@windbot and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and settings.modules.http.websocket_roomlist
#client.room = null
else
@send_replays()
await @send_replays()
@process.kill()
#client.room = null
this.delete()
......@@ -1839,9 +1843,9 @@ class Room
win_pos = if @scores[@dueling_players[0].name_vpass] > @scores[@dueling_players[oppo_pos].name_vpass] then 0 else oppo_pos
@finished_by_death = true
ygopro.stoc_send_chat_to_room(this, "${death2_finish_part1}" + @dueling_players[win_pos].name + "${death2_finish_part2}", ygopro.constants.COLORS.BABYBLUE)
CLIENT_send_replays(@dueling_players[oppo_pos - win_pos], this) if @hostinfo.mode == 1
ygopro.stoc_send(@dueling_players[oppo_pos - win_pos], 'DUEL_END')
ygopro.stoc_send(@dueling_players[oppo_pos - win_pos + 1], 'DUEL_END') if @hostinfo.mode == 2
await CLIENT_send_replays(@dueling_players[oppo_pos - win_pos], this) if @hostinfo.mode == 1
await ygopro.stoc_send(@dueling_players[oppo_pos - win_pos], 'DUEL_END')
await ygopro.stoc_send(@dueling_players[oppo_pos - win_pos + 1], 'DUEL_END') if @hostinfo.mode == 2
@scores[@dueling_players[oppo_pos - win_pos].name_vpass] = -1
CLIENT_kick(@dueling_players[oppo_pos - win_pos])
CLIENT_kick(@dueling_players[oppo_pos - win_pos + 1]) if @hostinfo.mode == 2
......@@ -1865,7 +1869,7 @@ class Room
@scores[@dueling_players[0].name_vpass] = 0
@scores[@dueling_players[1].name_vpass] = 0
@kicked = true
@send_replays()
await @send_replays()
if @process
try
@process.kill()
......@@ -2668,8 +2672,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
if settings.modules.retry_handle.max_retry_count and client.retry_count >= settings.modules.retry_handle.max_retry_count
ygopro.stoc_send_chat_to_room(room, client.name + "${retry_too_much_room_part1}" + settings.modules.retry_handle.max_retry_count + "${retry_too_much_room_part2}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send_chat(client, "${retry_too_much_part1}" + settings.modules.retry_handle.max_retry_count + "${retry_too_much_part2}", ygopro.constants.COLORS.RED)
CLIENT_send_replays(client, room)
CLIENT_kick(client)
CLIENT_send_replays_and_kick(client, room)
return true
if client.last_game_msg
if settings.modules.retry_handle.max_retry_count
......@@ -3074,18 +3077,18 @@ ygopro.stoc_follow 'FIELD_FINISH', true, (buffer, info, client, server, datas)->
ygopro.stoc_send(client, 'GAME_MSG', client.last_game_msg)
await return true
ygopro.stoc_follow 'DUEL_END', false, (buffer, info, client, server, datas)->
ygopro.stoc_follow 'DUEL_END', true, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid]
return unless room and settings.modules.replay_delay and room.hostinfo.mode == 1
await SOCKET_flush_data(client, datas)
CLIENT_send_replays(client, room)
await CLIENT_send_replays(client, room)
if !room.replays_sent_to_watchers
room.replays_sent_to_watchers = true
for player in room.players when player and player.pos > 3
CLIENT_send_replays(player, room)
for player in room.watchers when player
CLIENT_send_replays(player, room)
await return
return false
wait_room_start = (room, time)->
if room and room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and room.ready_player_count_without_host >= room.max_player - 1
......@@ -3477,8 +3480,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
ygopro.stoc_send_chat(client, "${banned_duel_tip}", ygopro.constants.COLORS.RED)
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}")
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3)
CLIENT_send_replays(client, room)
CLIENT_kick(client)
CLIENT_send_replays_and_kick(client, room)
return true
else
client.abuse_count=client.abuse_count+4
......@@ -3812,8 +3814,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server, datas)->
ygopro.stoc_send_chat_to_room(room, client.name + "${side_overtime_room}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send_chat(client, "${side_overtime}", ygopro.constants.COLORS.RED)
#room.scores[client.name_vpass] = -9
CLIENT_send_replays(client, room)
CLIENT_kick(client)
CLIENT_send_replays_and_kick(client, room)
clearInterval sinterval
else
client.side_tcount = client.side_tcount - 1
......
// Generated by CoffeeScript 2.6.1
(function() {
// 标准库
var CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, CLIENT_send_vip_status, CLIENT_use_cdkey, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, ip6addr, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, neosRequestListener, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, release_disconnect, report_to_big_brother, request, roomlist, rooms_count, setting_change, setting_get, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib;
var CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, CLIENT_send_replays_and_kick, CLIENT_send_vip_status, CLIENT_use_cdkey, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, ip6addr, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, neosRequestListener, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, release_disconnect, report_to_big_brother, request, roomlist, rooms_count, setting_change, setting_get, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib;
net = require('net');
......@@ -801,8 +801,7 @@
room.scores[room.waiting_for_player.name_vpass] = -9;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
ygopro.stoc_send_chat_to_room(room, `${room.waiting_for_player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED);
CLIENT_send_replays(room.waiting_for_player, room);
CLIENT_kick(room.waiting_for_player);
CLIENT_send_replays_and_kick(room.waiting_for_player, room);
} else if (time_passed >= (settings.modules.random_duel.hang_timeout - 20) && !(time_passed % 10)) {
ygopro.stoc_send_chat_to_room(room, `${room.waiting_for_player.name} \${afk_warn_part1}${settings.modules.random_duel.hang_timeout - time_passed}\${afk_warn_part2}`, ygopro.constants.COLORS.RED);
ROOM_unwelcome(room, room.waiting_for_player, "${random_ban_reason_AFK}");
......@@ -825,8 +824,7 @@
ygopro.stoc_send_chat_to_room(room, `${room.waiting_for_player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED);
room.scores[room.waiting_for_player.name_vpass] = -9;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
CLIENT_send_replays(room.waiting_for_player, room);
CLIENT_kick(room.waiting_for_player);
CLIENT_send_replays_and_kick(room.waiting_for_player, room);
} else if (time_passed >= (settings.modules.random_duel.hang_timeout - 20) && !(time_passed % 10)) {
ygopro.stoc_send_chat_to_room(room, `${room.waiting_for_player.name} \${afk_warn_part1}${settings.modules.random_duel.hang_timeout - time_passed}\${afk_warn_part2}`, ygopro.constants.COLORS.RED);
}
......@@ -982,8 +980,7 @@
bans.push(dataManager.getBan(name, player.ip));
ROOM_bad_ip[player.ip] = 99;
ygopro.stoc_send_chat_to_room(room, `${player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED);
CLIENT_send_replays(player, room);
CLIENT_kick(player);
CLIENT_send_replays_and_kick(player, room);
}
}
}
......@@ -1665,7 +1662,7 @@
}
};
CLIENT_send_replays = global.CLIENT_send_replays = function(client, room) {
CLIENT_send_replays = global.CLIENT_send_replays = async function(client, room) {
var buffer, i, j, len, ref;
if (!(settings.modules.replay_delay && !(settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.block_replay_to_player) && room.replays.length && room.hostinfo.mode === 1 && !client.replays_sent && !client.isClosed)) {
return false;
......@@ -1677,13 +1674,18 @@
buffer = ref[j];
++i;
if (buffer) {
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send(client, "REPLAY", buffer);
await ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE);
await ygopro.stoc_send(client, "REPLAY", buffer);
}
}
return true;
};
CLIENT_send_replays_and_kick = global.CLIENT_send_replays_and_kick = async function(client, room) {
await CLIENT_send_replays(client, room);
CLIENT_kick(client);
};
SOCKET_flush_data = global.SOCKET_flush_data = async function(sk, datas) {
var buffer;
if (!sk || sk.isClosed) {
......@@ -1998,7 +2000,7 @@
}, 200);
}
});
return this.process.stderr.on('data', (data) => {
return this.process.stderr.on('data', async(data) => {
data = "Debug: " + data;
data = data.replace(/\n$/, "");
log.info("YGOPRO " + data);
......@@ -2006,7 +2008,7 @@
this.has_ygopro_error = true;
this.ygopro_error_length = this.ygopro_error_length ? this.ygopro_error_length + data.length : data.length;
if (this.ygopro_error_length > 10000) {
this.send_replays();
await this.send_replays();
this.process.kill();
}
});
......@@ -2266,25 +2268,27 @@
return this.hostinfo;
}
send_replays() {
var j, l, len, len1, player, ref, ref1;
async send_replays() {
var j, l, len, len1, player, ref, ref1, send_tasks;
if (!(settings.modules.replay_delay && this.replays.length && this.hostinfo.mode === 1)) {
return false;
}
send_tasks = [];
ref = this.players;
for (j = 0, len = ref.length; j < len; j++) {
player = ref[j];
if (player) {
CLIENT_send_replays(player, this);
send_tasks.push(CLIENT_send_replays(player, this));
}
}
ref1 = this.watchers;
for (l = 0, len1 = ref1.length; l < len1; l++) {
player = ref1[l];
if (player) {
CLIENT_send_replays(player, this);
send_tasks.push(CLIENT_send_replays(player, this));
}
}
await Promise.all(send_tasks);
return true;
}
......@@ -2335,7 +2339,7 @@
}
}
disconnect(client, error) {
async disconnect(client, error) {
var index, j, l, left_name, len, len1, player, ref, ref1;
if (client.had_new_reconnection) {
return;
......@@ -2398,7 +2402,7 @@
}
} else {
//client.room = null
this.send_replays();
await this.send_replays();
this.process.kill();
//client.room = null
this.delete();
......@@ -2409,7 +2413,7 @@
}
}
start_death() {
async start_death() {
var oppo_pos, win_pos;
if (this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN || this.death) {
return false;
......@@ -2442,11 +2446,11 @@
this.finished_by_death = true;
ygopro.stoc_send_chat_to_room(this, "${death2_finish_part1}" + this.dueling_players[win_pos].name + "${death2_finish_part2}", ygopro.constants.COLORS.BABYBLUE);
if (this.hostinfo.mode === 1) {
CLIENT_send_replays(this.dueling_players[oppo_pos - win_pos], this);
await CLIENT_send_replays(this.dueling_players[oppo_pos - win_pos], this);
}
ygopro.stoc_send(this.dueling_players[oppo_pos - win_pos], 'DUEL_END');
await ygopro.stoc_send(this.dueling_players[oppo_pos - win_pos], 'DUEL_END');
if (this.hostinfo.mode === 2) {
ygopro.stoc_send(this.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END');
await ygopro.stoc_send(this.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END');
}
this.scores[this.dueling_players[oppo_pos - win_pos].name_vpass] = -1;
CLIENT_kick(this.dueling_players[oppo_pos - win_pos]);
......@@ -2476,14 +2480,14 @@
return true;
}
terminate() {
async terminate() {
var e;
if (this.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN) {
this.scores[this.dueling_players[0].name_vpass] = 0;
this.scores[this.dueling_players[1].name_vpass] = 0;
}
this.kicked = true;
this.send_replays();
await this.send_replays();
if (this.process) {
try {
this.process.kill();
......@@ -3502,8 +3506,7 @@
if (settings.modules.retry_handle.max_retry_count && client.retry_count >= settings.modules.retry_handle.max_retry_count) {
ygopro.stoc_send_chat_to_room(room, client.name + "${retry_too_much_room_part1}" + settings.modules.retry_handle.max_retry_count + "${retry_too_much_room_part2}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send_chat(client, "${retry_too_much_part1}" + settings.modules.retry_handle.max_retry_count + "${retry_too_much_part2}", ygopro.constants.COLORS.RED);
CLIENT_send_replays(client, room);
CLIENT_kick(client);
CLIENT_send_replays_and_kick(client, room);
return true;
}
if (client.last_game_msg) {
......@@ -4073,14 +4076,14 @@
return true;
});
ygopro.stoc_follow('DUEL_END', false, async function(buffer, info, client, server, datas) {
ygopro.stoc_follow('DUEL_END', true, async function(buffer, info, client, server, datas) {
var j, l, len, len1, player, ref, ref1, room;
room = ROOM_all[client.rid];
if (!(room && settings.modules.replay_delay && room.hostinfo.mode === 1)) {
return;
}
await SOCKET_flush_data(client, datas);
CLIENT_send_replays(client, room);
await CLIENT_send_replays(client, room);
if (!room.replays_sent_to_watchers) {
room.replays_sent_to_watchers = true;
ref = room.players;
......@@ -4098,6 +4101,7 @@
}
}
}
return false;
});
wait_room_start = async function(room, time) {
......@@ -4657,8 +4661,7 @@
ygopro.stoc_send_chat(client, "${banned_duel_tip}", ygopro.constants.COLORS.RED);
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}");
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3);
CLIENT_send_replays(client, room);
CLIENT_kick(client);
CLIENT_send_replays_and_kick(client, room);
return true;
} else {
client.abuse_count = client.abuse_count + 4;
......@@ -5129,8 +5132,7 @@
ygopro.stoc_send_chat_to_room(room, client.name + "${side_overtime_room}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send_chat(client, "${side_overtime}", ygopro.constants.COLORS.RED);
//room.scores[client.name_vpass] = -9
CLIENT_send_replays(client, room);
CLIENT_kick(client);
CLIENT_send_replays_and_kick(client, room);
return clearInterval(sinterval);
} else {
client.side_tcount = client.side_tcount - 1;
......
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