Commit f0590f82 authored by nanahira's avatar nanahira

support tag duel surrender

parent 1774e230
Pipeline #27236 failed with stages
in 3 minutes and 4 seconds
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
"32": "HS_PLAYER_ENTER", "32": "HS_PLAYER_ENTER",
"33": "HS_PLAYER_CHANGE", "33": "HS_PLAYER_CHANGE",
"34": "HS_WATCH_CHANGE", "34": "HS_WATCH_CHANGE",
"35": "TEAMMATE_SURRENDER",
"48": "FIELD_FINISH" "48": "FIELD_FINISH"
}, },
"PLAYERCHANGE":{ "PLAYERCHANGE":{
......
...@@ -108,6 +108,8 @@ ...@@ -108,6 +108,8 @@
"afk_warn_part1": "no opreation too long, will be disconnected after ", "afk_warn_part1": "no opreation too long, will be disconnected after ",
"afk_warn_part2": " seconds", "afk_warn_part2": " seconds",
"surrender_confirm": "Are you sure? Enter /surrender again to confirm.", "surrender_confirm": "Are you sure? Enter /surrender again to confirm.",
"surrender_confirm_tag": "Your partner started a surrender request, click Surrender Button or type /surrender to confirm.",
"surrender_confirm_sent": "Surrender request sent, waiting for partner to confirm.",
"surrender_canceled": "Surrender canceled.", "surrender_canceled": "Surrender canceled.",
"surrender_denied": "Please don't surrender in the first 2 turns.", "surrender_denied": "Please don't surrender in the first 2 turns.",
"unwelcome_warn_part1": "If you keep doing ", "unwelcome_warn_part1": "If you keep doing ",
...@@ -433,6 +435,8 @@ ...@@ -433,6 +435,8 @@
"afk_warn_part1": "已经很久没有操作了,若继续挂机,将于", "afk_warn_part1": "已经很久没有操作了,若继续挂机,将于",
"afk_warn_part2": "秒后被请出房间", "afk_warn_part2": "秒后被请出房间",
"surrender_confirm": "确实要投降吗?再次输入 /投降 以确认。", "surrender_confirm": "确实要投降吗?再次输入 /投降 以确认。",
"surrender_confirm_tag": "您的队友发起了投降请求,点击投降按钮或输入 /投降 以确认。",
"surrender_confirm_sent": "已发起投降请求,请等待队友确认。",
"surrender_canceled": "已取消投降,加油!", "surrender_canceled": "已取消投降,加油!",
"surrender_denied": "为保证双方玩家的游戏体验,随机对战中3回合后才能投降。", "surrender_denied": "为保证双方玩家的游戏体验,随机对战中3回合后才能投降。",
"unwelcome_warn_part1": "如果您经常", "unwelcome_warn_part1": "如果您经常",
......
...@@ -1148,6 +1148,24 @@ CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) -> ...@@ -1148,6 +1148,24 @@ CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) ->
CLIENT_is_banned_by_mc = global.CLIENT_is_banned_by_mc = (client) -> CLIENT_is_banned_by_mc = global.CLIENT_is_banned_by_mc = (client) ->
return client.ban_mc and client.ban_mc.banned and moment_now.isBefore(client.ban_mc.until) return client.ban_mc and client.ban_mc.banned and moment_now.isBefore(client.ban_mc.until)
CLIENT_get_absolute_pos = global.CLIENT_get_absolute_pos = (client) ->
room = ROOM_all[client.rid]
if room.hostinfo.mode != 2 or client.pos > 3
return client.pos
else if client.pos < 2
return 0
else
return 1
CLIENT_get_partner = global.CLIENT_get_partner = (client) ->
room = ROOM_all[client.rid]
if room.hostinfo.mode != 2 or client.pos > 3
return client
if client.pos < 2
return room.dueling_players[1 - client.pos]
else
return room.dueling_players[5 - client.pos]
CLIENT_send_replays = global.CLIENT_send_replays = (client, room) -> CLIENT_send_replays = global.CLIENT_send_replays = (client, room) ->
return false unless settings.modules.replay_delay and not (settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.block_replay_to_player) and room.replays.length and room.hostinfo.mode == 1 and !client.replays_sent and !client.isClosed return false unless settings.modules.replay_delay and not (settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.block_replay_to_player) and room.replays.length and room.hostinfo.mode == 1 and !client.replays_sent and !client.isClosed
client.replays_sent = true client.replays_sent = true
...@@ -2558,15 +2576,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)-> ...@@ -2558,15 +2576,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
if room.dueling_players[0].lp != room.dueling_players[oppo_pos].lp and room.turn > 1 if room.dueling_players[0].lp != room.dueling_players[oppo_pos].lp and room.turn > 1
win_pos = if room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp then 0 else oppo_pos win_pos = if room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp then 0 else oppo_pos
ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE)
if room.hostinfo.mode == 2 ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
room.finished_by_death = true
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos], 'DUEL_END')
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END')
room.scores[room.dueling_players[oppo_pos - win_pos].name_vpass] = -1
CLIENT_kick(room.dueling_players[oppo_pos - win_pos])
CLIENT_kick(room.dueling_players[oppo_pos - win_pos + 1])
else
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
else else
room.death = -1 room.death = -1
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE)
...@@ -2583,15 +2593,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)-> ...@@ -2583,15 +2593,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
if room.dueling_players[0].lp != room.dueling_players[oppo_pos].lp if room.dueling_players[0].lp != room.dueling_players[oppo_pos].lp
win_pos = if room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp then 0 else oppo_pos win_pos = if room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp then 0 else oppo_pos
ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE)
if room.hostinfo.mode == 2 ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
room.finished_by_death = true
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos], 'DUEL_END')
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END')
room.scores[room.dueling_players[oppo_pos - win_pos].name_vpass] = -1
CLIENT_kick(room.dueling_players[oppo_pos - win_pos])
CLIENT_kick(room.dueling_players[oppo_pos - win_pos + 1])
else
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
else else
room.death = -1 room.death = -1
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE)
...@@ -3038,11 +3040,20 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server, datas)-> ...@@ -3038,11 +3040,20 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server, datas)->
ygopro.ctos_follow 'SURRENDER', true, (buffer, info, client, server, datas)-> ygopro.ctos_follow 'SURRENDER', true, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room return unless room
if room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN or room.hostinfo.mode == 2 if room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN
return true return true
if room.random_type and room.turn < 3 and not client.flee_free and not settings.modules.test_mode.surrender_anytime and not (room.random_type=='M' and settings.modules.random_duel.record_match_scores) if room.random_type and room.turn < 3 and not client.flee_free and not settings.modules.test_mode.surrender_anytime and not (room.random_type=='M' and settings.modules.random_duel.record_match_scores)
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE)
return true return true
if room.hostinfo.mode == 2
if !client.surrend_confirm and !CLIENT_get_partner(client).closed and !CLIENT_get_partner(client).is_local
sur_player = CLIENT_get_partner(client)
ygopro.stoc_send_chat(sur_player, "${surrender_confirm_tag}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send_chat(client, "${surrender_confirm_sent}", ygopro.constants.COLORS.BABYBLUE)
sur_player.surrend_confirm = true
for player in [client, sur_player]
ygopro.stoc_send(client, 'TEAMMATE_SURRENDER')
return true
await return false await return false
report_to_big_brother = global.report_to_big_brother = (roomname, sender, ip, level, content, match) -> report_to_big_brother = global.report_to_big_brother = (roomname, sender, ip, level, content, match) ->
...@@ -3075,16 +3086,25 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)-> ...@@ -3075,16 +3086,25 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
cmd = msg.split(' ') cmd = msg.split(' ')
switch cmd[0] switch cmd[0]
when '/投降', '/surrender' when '/投降', '/surrender'
if room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN or room.hostinfo.mode == 2 if room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN
return cancel return cancel
if room.random_type and room.turn < 3 if room.random_type and room.turn < 3 and !client.flee_free
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE)
return cancel return cancel
if client.surrend_confirm if client.surrend_confirm
ygopro.ctos_send(client.server, 'SURRENDER') ygopro.ctos_send(client.server, 'SURRENDER')
else else
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE) sur_player = CLIENT_get_partner(client)
client.surrend_confirm = true if !sur_player or sur_player.closed or sur_player.is_local
sur_player = client
if room.hostinfo.mode==2 and sur_player != client
ygopro.stoc_send_chat(sur_player, "${surrender_confirm_tag}", ygopro.constants.COLORS.BABYBLUE)
ygopro.stoc_send_chat(client, "${surrender_confirm_sent}", ygopro.constants.COLORS.BABYBLUE)
for player in [client, sur_player]
ygopro.stoc_send(client, 'TEAMMATE_SURRENDER')
else
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE)
sur_player.surrend_confirm = true
when '/help' when '/help'
ygopro.stoc_send_chat(client, "${chat_order_main}") ygopro.stoc_send_chat(client, "${chat_order_main}")
......
// 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, 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, extra_mode_list, 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_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_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, extra_mode_list, 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');
...@@ -1514,6 +1514,31 @@ ...@@ -1514,6 +1514,31 @@
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_get_absolute_pos = global.CLIENT_get_absolute_pos = function(client) {
var room;
room = ROOM_all[client.rid];
if (room.hostinfo.mode !== 2 || client.pos > 3) {
return client.pos;
} else if (client.pos < 2) {
return 0;
} else {
return 1;
}
};
CLIENT_get_partner = global.CLIENT_get_partner = function(client) {
var room;
room = ROOM_all[client.rid];
if (room.hostinfo.mode !== 2 || client.pos > 3) {
return client;
}
if (client.pos < 2) {
return room.dueling_players[1 - client.pos];
} else {
return room.dueling_players[5 - client.pos];
}
};
CLIENT_send_replays = global.CLIENT_send_replays = async 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)) {
...@@ -3352,16 +3377,7 @@ ...@@ -3352,16 +3377,7 @@
if (room.dueling_players[0].lp !== room.dueling_players[oppo_pos].lp && room.turn > 1) { if (room.dueling_players[0].lp !== room.dueling_players[oppo_pos].lp && room.turn > 1) {
win_pos = room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp ? 0 : oppo_pos; win_pos = room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp ? 0 : oppo_pos;
ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE);
if (room.hostinfo.mode === 2) { ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
room.finished_by_death = true;
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos], 'DUEL_END');
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END');
room.scores[room.dueling_players[oppo_pos - win_pos].name_vpass] = -1;
CLIENT_kick(room.dueling_players[oppo_pos - win_pos]);
CLIENT_kick(room.dueling_players[oppo_pos - win_pos + 1]);
} else {
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
}
} else { } else {
room.death = -1; room.death = -1;
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE);
...@@ -3383,16 +3399,7 @@ ...@@ -3383,16 +3399,7 @@
if (room.dueling_players[0].lp !== room.dueling_players[oppo_pos].lp) { if (room.dueling_players[0].lp !== room.dueling_players[oppo_pos].lp) {
win_pos = room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp ? 0 : oppo_pos; win_pos = room.dueling_players[0].lp > room.dueling_players[oppo_pos].lp ? 0 : oppo_pos;
ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat_to_room(room, "${death_finish_part1}" + room.dueling_players[win_pos].name + "${death_finish_part2}", ygopro.constants.COLORS.BABYBLUE);
if (room.hostinfo.mode === 2) { ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
room.finished_by_death = true;
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos], 'DUEL_END');
ygopro.stoc_send(room.dueling_players[oppo_pos - win_pos + 1], 'DUEL_END');
room.scores[room.dueling_players[oppo_pos - win_pos].name_vpass] = -1;
CLIENT_kick(room.dueling_players[oppo_pos - win_pos]);
CLIENT_kick(room.dueling_players[oppo_pos - win_pos + 1]);
} else {
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
}
} else { } else {
room.death = -1; room.death = -1;
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE);
...@@ -4053,18 +4060,27 @@ ...@@ -4053,18 +4060,27 @@
}); });
ygopro.ctos_follow('SURRENDER', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow('SURRENDER', true, async function(buffer, info, client, server, datas) {
var room; var room, sur_player;
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
} }
if (room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN || room.hostinfo.mode === 2) { if (room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN) {
return true; return true;
} }
if (room.random_type && room.turn < 3 && !client.flee_free && !settings.modules.test_mode.surrender_anytime && !(room.random_type === 'M' && settings.modules.random_duel.record_match_scores)) { if (room.random_type && room.turn < 3 && !client.flee_free && !settings.modules.test_mode.surrender_anytime && !(room.random_type === 'M' && settings.modules.random_duel.record_match_scores)) {
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE);
return true; return true;
} }
if (room.hostinfo.mode === 2) {
if (!client.surrend_confirm && !CLIENT_get_partner(client).closed && !CLIENT_get_partner(client).is_local) {
sur_player = CLIENT_get_partner(client);
ygopro.stoc_send_chat(sur_player, "${surrender_confirm_tag}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send_chat(client, "${surrender_confirm_sent}", ygopro.constants.COLORS.BABYBLUE);
sur_player.surrend_confirm = true;
return true;
}
}
return false; return false;
}); });
...@@ -4097,7 +4113,7 @@ ...@@ -4097,7 +4113,7 @@
//else //else
//log.info 'BIG BROTHER OK', response.statusCode, roomname, body //log.info 'BIG BROTHER OK', response.statusCode, roomname, body
ygopro.ctos_follow('CHAT', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow('CHAT', true, async function(buffer, info, client, server, datas) {
var cancel, ccolor, cip, cmd, cmsg, cname, color, cvalue, msg, name, oldmsg, ref, room, struct, windbot; var cancel, ccolor, cip, cmd, cmsg, cname, color, cvalue, msg, name, oldmsg, ref, room, struct, sur_player, windbot;
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
...@@ -4111,18 +4127,27 @@ ...@@ -4111,18 +4127,27 @@
switch (cmd[0]) { switch (cmd[0]) {
case '/投降': case '/投降':
case '/surrender': case '/surrender':
if (room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN || room.hostinfo.mode === 2) { if (room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN) {
return cancel; return cancel;
} }
if (room.random_type && room.turn < 3) { if (room.random_type && room.turn < 3 && !client.flee_free) {
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE);
return cancel; return cancel;
} }
if (client.surrend_confirm) { if (client.surrend_confirm) {
ygopro.ctos_send(client.server, 'SURRENDER'); ygopro.ctos_send(client.server, 'SURRENDER');
} else { } else {
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE); sur_player = CLIENT_get_partner(client);
client.surrend_confirm = true; if (!sur_player || sur_player.closed || sur_player.is_local) {
sur_player = client;
}
if (room.hostinfo.mode === 2 && sur_player !== client) {
ygopro.stoc_send_chat(sur_player, "${surrender_confirm_tag}", ygopro.constants.COLORS.BABYBLUE);
ygopro.stoc_send_chat(client, "${surrender_confirm_sent}", ygopro.constants.COLORS.BABYBLUE);
} else {
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE);
}
sur_player.surrend_confirm = true;
} }
break; break;
case '/help': case '/help':
......
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