Commit 37e0f631 authored by nanahira's avatar nanahira

fix send replays sequence problem

parent d5e4fd1f
Pipeline #22531 passed with stages
in 9 minutes and 7 seconds
...@@ -527,8 +527,7 @@ init = () -> ...@@ -527,8 +527,7 @@ init = () ->
room.scores[room.waiting_for_player.name_vpass] = -9 room.scores[room.waiting_for_player.name_vpass] = -9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass] #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) 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_send_replays_and_kick(room.waiting_for_player, room)
CLIENT_kick(room.waiting_for_player)
else if time_passed >= (settings.modules.random_duel.hang_timeout - 20) and not (time_passed % 10) 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) 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}") ROOM_unwelcome(room, room.waiting_for_player, "${random_ban_reason_AFK}")
...@@ -545,8 +544,7 @@ init = () -> ...@@ -545,8 +544,7 @@ init = () ->
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED) 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 room.scores[room.waiting_for_player.name_vpass] = -9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass] #log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
CLIENT_send_replays(room.waiting_for_player, room) CLIENT_send_replays_and_kick(room.waiting_for_player, room)
CLIENT_kick(room.waiting_for_player)
else if time_passed >= (settings.modules.random_duel.hang_timeout - 20) and not (time_passed % 10) 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) 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)
...@@ -662,8 +660,7 @@ ban_user = global.ban_user = (name) -> ...@@ -662,8 +660,7 @@ ban_user = global.ban_user = (name) ->
bans.push(dataManager.getBan(name, player.ip)) bans.push(dataManager.getBan(name, player.ip))
ROOM_bad_ip[player.ip]=99 ROOM_bad_ip[player.ip]=99
ygopro.stoc_send_chat_to_room(room, "#{player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat_to_room(room, "#{player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED)
CLIENT_send_replays(player, room) CLIENT_send_replays_and_kick(player, room)
CLIENT_kick(player)
for ban in bans for ban in bans
await dataManager.banPlayer(ban) await dataManager.banPlayer(ban)
return return
...@@ -1156,10 +1153,15 @@ CLIENT_send_replays = global.CLIENT_send_replays = (client, room) -> ...@@ -1156,10 +1153,15 @@ CLIENT_send_replays = global.CLIENT_send_replays = (client, room) ->
for buffer in room.replays for buffer in room.replays
++i ++i
if buffer if buffer
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE) await 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(client, "REPLAY", buffer)
return true 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) -> SOCKET_flush_data = global.SOCKET_flush_data = (sk, datas) ->
if !sk or sk.isClosed if !sk or sk.isClosed
return false return false
...@@ -1381,7 +1383,7 @@ class Room ...@@ -1381,7 +1383,7 @@ class Room
@has_ygopro_error = true @has_ygopro_error = true
@ygopro_error_length = if @ygopro_error_length then @ygopro_error_length + data.length else data.length @ygopro_error_length = if @ygopro_error_length then @ygopro_error_length + data.length else data.length
if @ygopro_error_length > 10000 if @ygopro_error_length > 10000
@send_replays() await @send_replays()
@process.kill() @process.kill()
return return
catch e catch e
...@@ -1557,10 +1559,12 @@ class Room ...@@ -1557,10 +1559,12 @@ class Room
send_replays: () -> send_replays: () ->
return false unless settings.modules.replay_delay and @replays.length and @hostinfo.mode == 1 return false unless settings.modules.replay_delay and @replays.length and @hostinfo.mode == 1
send_tasks = []
for player in @players when player 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 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 return true
add_windbot: (botdata)-> add_windbot: (botdata)->
...@@ -1637,7 +1641,7 @@ class Room ...@@ -1637,7 +1641,7 @@ class Room
roomlist.update(this) if !@windbot and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and settings.modules.http.websocket_roomlist roomlist.update(this) if !@windbot and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and settings.modules.http.websocket_roomlist
#client.room = null #client.room = null
else else
@send_replays() await @send_replays()
@process.kill() @process.kill()
#client.room = null #client.room = null
this.delete() this.delete()
...@@ -1671,9 +1675,9 @@ class Room ...@@ -1671,9 +1675,9 @@ class Room
win_pos = if @scores[@dueling_players[0].name_vpass] > @scores[@dueling_players[oppo_pos].name_vpass] then 0 else oppo_pos 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 @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) 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 await 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') await 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 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 @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])
CLIENT_kick(@dueling_players[oppo_pos - win_pos + 1]) if @hostinfo.mode == 2 CLIENT_kick(@dueling_players[oppo_pos - win_pos + 1]) if @hostinfo.mode == 2
...@@ -1697,7 +1701,7 @@ class Room ...@@ -1697,7 +1701,7 @@ class Room
@scores[@dueling_players[0].name_vpass] = 0 @scores[@dueling_players[0].name_vpass] = 0
@scores[@dueling_players[1].name_vpass] = 0 @scores[@dueling_players[1].name_vpass] = 0
@kicked = true @kicked = true
@send_replays() await @send_replays()
if @process if @process
try try
@process.kill() @process.kill()
...@@ -2475,8 +2479,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)-> ...@@ -2475,8 +2479,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 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_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) 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_send_replays_and_kick(client, room)
CLIENT_kick(client)
return true return true
if client.last_game_msg if client.last_game_msg
if settings.modules.retry_handle.max_retry_count if settings.modules.retry_handle.max_retry_count
...@@ -2876,18 +2879,18 @@ ygopro.stoc_follow 'FIELD_FINISH', true, (buffer, info, client, server, datas)-> ...@@ -2876,18 +2879,18 @@ ygopro.stoc_follow 'FIELD_FINISH', true, (buffer, info, client, server, datas)->
ygopro.stoc_send(client, 'GAME_MSG', client.last_game_msg) ygopro.stoc_send(client, 'GAME_MSG', client.last_game_msg)
await return true 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] room=ROOM_all[client.rid]
return unless room and settings.modules.replay_delay and room.hostinfo.mode == 1 return unless room and settings.modules.replay_delay and room.hostinfo.mode == 1
await SOCKET_flush_data(client, datas) await SOCKET_flush_data(client, datas)
CLIENT_send_replays(client, room) await CLIENT_send_replays(client, room)
if !room.replays_sent_to_watchers if !room.replays_sent_to_watchers
room.replays_sent_to_watchers = true room.replays_sent_to_watchers = true
for player in room.players when player and player.pos > 3 for player in room.players when player and player.pos > 3
CLIENT_send_replays(player, room) CLIENT_send_replays(player, room)
for player in room.watchers when player for player in room.watchers when player
CLIENT_send_replays(player, room) CLIENT_send_replays(player, room)
await return return false
wait_room_start = (room, time)-> 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 if room and room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and room.ready_player_count_without_host >= room.max_player - 1
...@@ -3167,8 +3170,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)-> ...@@ -3167,8 +3170,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
ygopro.stoc_send_chat(client, "${banned_duel_tip}", ygopro.constants.COLORS.RED) 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}")
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3) await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3)
CLIENT_send_replays(client, room) CLIENT_send_replays_and_kick(client, room)
CLIENT_kick(client)
return true return true
else else
client.abuse_count=client.abuse_count+4 client.abuse_count=client.abuse_count+4
...@@ -3502,8 +3504,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server, datas)-> ...@@ -3502,8 +3504,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_to_room(room, client.name + "${side_overtime_room}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send_chat(client, "${side_overtime}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(client, "${side_overtime}", ygopro.constants.COLORS.RED)
#room.scores[client.name_vpass] = -9 #room.scores[client.name_vpass] = -9
CLIENT_send_replays(client, room) CLIENT_send_replays_and_kick(client, room)
CLIENT_kick(client)
clearInterval sinterval clearInterval sinterval
else else
client.side_tcount = client.side_tcount - 1 client.side_tcount = client.side_tcount - 1
......
// Generated by CoffeeScript 2.6.1 // Generated by CoffeeScript 2.6.1
(function() { (function() {
// 标准库 // 标准库
var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, 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, 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, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, 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_tips, 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, ygopro, zlib; var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, 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, 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, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, 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_tips, 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, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -673,8 +673,7 @@ ...@@ -673,8 +673,7 @@
room.scores[room.waiting_for_player.name_vpass] = -9; room.scores[room.waiting_for_player.name_vpass] = -9;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass] //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); 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_send_replays_and_kick(room.waiting_for_player, room);
CLIENT_kick(room.waiting_for_player);
} else if (time_passed >= (settings.modules.random_duel.hang_timeout - 20) && !(time_passed % 10)) { } 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); 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}"); ROOM_unwelcome(room, room.waiting_for_player, "${random_ban_reason_AFK}");
...@@ -697,8 +696,7 @@ ...@@ -697,8 +696,7 @@
ygopro.stoc_send_chat_to_room(room, `${room.waiting_for_player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED); 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; room.scores[room.waiting_for_player.name_vpass] = -9;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass] //log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
CLIENT_send_replays(room.waiting_for_player, room); CLIENT_send_replays_and_kick(room.waiting_for_player, room);
CLIENT_kick(room.waiting_for_player);
} else if (time_passed >= (settings.modules.random_duel.hang_timeout - 20) && !(time_passed % 10)) { } 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); 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);
} }
...@@ -854,8 +852,7 @@ ...@@ -854,8 +852,7 @@
bans.push(dataManager.getBan(name, player.ip)); bans.push(dataManager.getBan(name, player.ip));
ROOM_bad_ip[player.ip] = 99; ROOM_bad_ip[player.ip] = 99;
ygopro.stoc_send_chat_to_room(room, `${player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED); ygopro.stoc_send_chat_to_room(room, `${player.name} \${kicked_by_system}`, ygopro.constants.COLORS.RED);
CLIENT_send_replays(player, room); CLIENT_send_replays_and_kick(player, room);
CLIENT_kick(player);
} }
} }
} }
...@@ -1512,7 +1509,7 @@ ...@@ -1512,7 +1509,7 @@
return client.ban_mc && client.ban_mc.banned && moment_now.isBefore(client.ban_mc.until); return client.ban_mc && client.ban_mc.banned && moment_now.isBefore(client.ban_mc.until);
}; };
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; 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)) { 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; return false;
...@@ -1524,13 +1521,18 @@ ...@@ -1524,13 +1521,18 @@
buffer = ref[j]; buffer = ref[j];
++i; ++i;
if (buffer) { if (buffer) {
ygopro.stoc_send_chat(client, "${replay_hint_part1}" + i + "${replay_hint_part2}", ygopro.constants.COLORS.BABYBLUE); await 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(client, "REPLAY", buffer);
} }
} }
return true; 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) { SOCKET_flush_data = global.SOCKET_flush_data = async function(sk, datas) {
var buffer; var buffer;
if (!sk || sk.isClosed) { if (!sk || sk.isClosed) {
...@@ -1791,7 +1793,7 @@ ...@@ -1791,7 +1793,7 @@
}, 200); }, 200);
} }
}); });
return this.process.stderr.on('data', (data) => { return this.process.stderr.on('data', async(data) => {
data = "Debug: " + data; data = "Debug: " + data;
data = data.replace(/\n$/, ""); data = data.replace(/\n$/, "");
log.info("YGOPRO " + data); log.info("YGOPRO " + data);
...@@ -1799,7 +1801,7 @@ ...@@ -1799,7 +1801,7 @@
this.has_ygopro_error = true; this.has_ygopro_error = true;
this.ygopro_error_length = this.ygopro_error_length ? this.ygopro_error_length + data.length : data.length; this.ygopro_error_length = this.ygopro_error_length ? this.ygopro_error_length + data.length : data.length;
if (this.ygopro_error_length > 10000) { if (this.ygopro_error_length > 10000) {
this.send_replays(); await this.send_replays();
this.process.kill(); this.process.kill();
} }
}); });
...@@ -2059,25 +2061,27 @@ ...@@ -2059,25 +2061,27 @@
return this.hostinfo; return this.hostinfo;
} }
send_replays() { async send_replays() {
var j, l, len, len1, player, ref, ref1; var j, l, len, len1, player, ref, ref1, send_tasks;
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;
} }
send_tasks = [];
ref = this.players; ref = this.players;
for (j = 0, len = ref.length; j < len; j++) { for (j = 0, len = ref.length; j < len; j++) {
player = ref[j]; player = ref[j];
if (player) { if (player) {
CLIENT_send_replays(player, this); send_tasks.push(CLIENT_send_replays(player, this));
} }
} }
ref1 = this.watchers; ref1 = this.watchers;
for (l = 0, len1 = ref1.length; l < len1; l++) { for (l = 0, len1 = ref1.length; l < len1; l++) {
player = ref1[l]; player = ref1[l];
if (player) { if (player) {
CLIENT_send_replays(player, this); send_tasks.push(CLIENT_send_replays(player, this));
} }
} }
await Promise.all(send_tasks);
return true; return true;
} }
...@@ -2128,7 +2132,7 @@ ...@@ -2128,7 +2132,7 @@
} }
} }
disconnect(client, error) { async disconnect(client, error) {
var index, j, l, left_name, len, len1, player, ref, ref1; var index, j, l, left_name, len, len1, player, ref, ref1;
if (client.had_new_reconnection) { if (client.had_new_reconnection) {
return; return;
...@@ -2191,7 +2195,7 @@ ...@@ -2191,7 +2195,7 @@
} }
} else { } else {
//client.room = null //client.room = null
this.send_replays(); await this.send_replays();
this.process.kill(); this.process.kill();
//client.room = null //client.room = null
this.delete(); this.delete();
...@@ -2202,7 +2206,7 @@ ...@@ -2202,7 +2206,7 @@
} }
} }
start_death() { async start_death() {
var oppo_pos, win_pos; var oppo_pos, win_pos;
if (this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN || this.death) { if (this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN || this.death) {
return false; return false;
...@@ -2235,11 +2239,11 @@ ...@@ -2235,11 +2239,11 @@
this.finished_by_death = true; 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); 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) { 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) { 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; this.scores[this.dueling_players[oppo_pos - win_pos].name_vpass] = -1;
CLIENT_kick(this.dueling_players[oppo_pos - win_pos]); CLIENT_kick(this.dueling_players[oppo_pos - win_pos]);
...@@ -2269,14 +2273,14 @@ ...@@ -2269,14 +2273,14 @@
return true; return true;
} }
terminate() { async terminate() {
var e; var e;
if (this.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN) { if (this.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN) {
this.scores[this.dueling_players[0].name_vpass] = 0; this.scores[this.dueling_players[0].name_vpass] = 0;
this.scores[this.dueling_players[1].name_vpass] = 0; this.scores[this.dueling_players[1].name_vpass] = 0;
} }
this.kicked = true; this.kicked = true;
this.send_replays(); await this.send_replays();
if (this.process) { if (this.process) {
try { try {
this.process.kill(); this.process.kill();
...@@ -3249,8 +3253,7 @@ ...@@ -3249,8 +3253,7 @@
if (settings.modules.retry_handle.max_retry_count && client.retry_count >= settings.modules.retry_handle.max_retry_count) { 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_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); 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_send_replays_and_kick(client, room);
CLIENT_kick(client);
return true; return true;
} }
if (client.last_game_msg) { if (client.last_game_msg) {
...@@ -3809,14 +3812,14 @@ ...@@ -3809,14 +3812,14 @@
return true; 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; var j, l, len, len1, player, ref, ref1, 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;
} }
await SOCKET_flush_data(client, datas); await SOCKET_flush_data(client, datas);
CLIENT_send_replays(client, room); await CLIENT_send_replays(client, room);
if (!room.replays_sent_to_watchers) { if (!room.replays_sent_to_watchers) {
room.replays_sent_to_watchers = true; room.replays_sent_to_watchers = true;
ref = room.players; ref = room.players;
...@@ -3834,6 +3837,7 @@ ...@@ -3834,6 +3837,7 @@
} }
} }
} }
return false;
}); });
wait_room_start = async function(room, time) { wait_room_start = async function(room, time) {
...@@ -4240,8 +4244,7 @@ ...@@ -4240,8 +4244,7 @@
ygopro.stoc_send_chat(client, "${banned_duel_tip}", ygopro.constants.COLORS.RED); 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}");
await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3); await ROOM_ban_player(client.name, client.ip, "${random_ban_reason_abuse}", 3);
CLIENT_send_replays(client, room); CLIENT_send_replays_and_kick(client, room);
CLIENT_kick(client);
return true; return true;
} else { } else {
client.abuse_count = client.abuse_count + 4; client.abuse_count = client.abuse_count + 4;
...@@ -4712,8 +4715,7 @@ ...@@ -4712,8 +4715,7 @@
ygopro.stoc_send_chat_to_room(room, client.name + "${side_overtime_room}", ygopro.constants.COLORS.BABYBLUE); 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); ygopro.stoc_send_chat(client, "${side_overtime}", ygopro.constants.COLORS.RED);
//room.scores[client.name_vpass] = -9 //room.scores[client.name_vpass] = -9
CLIENT_send_replays(client, room); CLIENT_send_replays_and_kick(client, room);
CLIENT_kick(client);
return clearInterval(sinterval); return clearInterval(sinterval);
} else { } else {
client.side_tcount = client.side_tcount - 1; 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