Commit 38ab64a8 authored by nanahira's avatar nanahira

add tag duel surrender

parent 45394170
......@@ -20,6 +20,7 @@
"update": "请更新游戏版本",
"stop": false,
"side_timeout": false,
"tag_duel_surrender": false,
"i18n": {
"auto_pick": false,
"default": "zh-cn",
......
......@@ -98,6 +98,8 @@
"afk_warn_part1": "no opreation too long, will be disconnected after ",
"afk_warn_part2": " seconds",
"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_denied": "Please don't surrender in the first 2 turns.",
"unwelcome_warn_part1": "If you keep doing ",
......@@ -420,6 +422,8 @@
"afk_warn_part1": "已经很久没有操作了,若继续挂机,将于",
"afk_warn_part2": "秒后被请出房间",
"surrender_confirm": "确实要投降吗?再次输入 /投降 以确认。",
"surrender_confirm_tag": "您的队友发起了投降请求,点击投降按钮或输入 /投降 以确认。",
"surrender_confirm_sent": "已发起投降请求,请等待队友确认。",
"surrender_canceled": "已取消投降,加油!",
"surrender_denied": "为保证双方玩家的游戏体验,随机对战中3回合后才能投降。",
"unwelcome_warn_part1": "如果您经常",
......
......@@ -844,6 +844,24 @@ CLIENT_heartbeat_register = (client, send) ->
CLIENT_is_banned_by_mc = (client) ->
return client.ban_mc and client.ban_mc.banned and moment().isBefore(client.ban_mc.until)
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 = (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]
class Room
constructor: (name, @hostinfo) ->
@name = name
......@@ -2097,15 +2115,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server)->
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
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
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] = -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')
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
else
room.death = -1
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE)
......@@ -2122,15 +2132,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server)->
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
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
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] = -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')
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER')
else
room.death = -1
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE)
......@@ -2555,11 +2557,20 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
ygopro.ctos_follow 'SURRENDER', true, (buffer, info, client, server)->
room=ROOM_all[client.rid]
return unless room
if !room.started or room.hostinfo.mode==2
if !room.started
return true
if room.random_type and room.turn < 3 and not client.flee_free
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE)
return true
if room.hostinfo.mode == 2
if !settings.modules.tag_duel_surrender
return true
else if !client.surrend_confirm and !CLIENT_get_partner(client).closed
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
report_to_big_brother = (roomname, sender, ip, level, content, match) ->
......@@ -2592,7 +2603,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
cmd = msg.split(' ')
switch cmd[0]
when '/投降', '/surrender'
if !room.started or room.hostinfo.mode==2
if !room.started or (room.hostinfo.mode==2 and !settings.modules.tag_duel_surrender)
return cancel
if room.random_type and room.turn < 3
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE)
......@@ -2600,8 +2611,15 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
if client.surrend_confirm
ygopro.ctos_send(client.server, 'SURRENDER')
else
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE)
client.surrend_confirm = true
sur_player = CLIENT_get_partner(client)
if sur_player.closed
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)
else
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE)
sur_player.surrend_confirm = true
when '/help'
ygopro.stoc_send_chat(client, "${chat_order_main}")
......
// Generated by CoffeeScript 1.12.7
(function() {
var CLIENT_check_vip, 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_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_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, VIP_generate_cdkeys, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, concat_name, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, imported, j, k, l, len, len1, lflists, list, loadJSON, load_dialogues, load_dialogues_custom, load_tips, 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, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, v, vip_info, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, 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_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_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_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, VIP_generate_cdkeys, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, concat_name, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, imported, j, k, l, len, len1, lflists, list, loadJSON, load_dialogues, load_dialogues_custom, load_tips, 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, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, v, vip_info, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, words, ygopro, zlib;
net = require('net');
......@@ -1102,6 +1102,31 @@
return client.ban_mc && client.ban_mc.banned && moment().isBefore(client.ban_mc.until);
};
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 = 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];
}
};
Room = (function() {
function Room(name, hostinfo) {
var draw_count, lflist, param, rule, start_hand, start_lp, time_limit;
......@@ -2566,16 +2591,7 @@
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;
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) {
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] = -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');
}
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
} else {
room.death = -1;
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE);
......@@ -2597,16 +2613,7 @@
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;
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) {
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] = -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');
}
ygopro.ctos_send(room.dueling_players[oppo_pos - win_pos].server, 'SURRENDER');
} else {
room.death = -1;
ygopro.stoc_send_chat_to_room(room, "${death_remain_final}", ygopro.constants.COLORS.BABYBLUE);
......@@ -3205,18 +3212,29 @@
});
ygopro.ctos_follow('SURRENDER', true, function(buffer, info, client, server) {
var room;
var room, sur_player;
room = ROOM_all[client.rid];
if (!room) {
return;
}
if (!room.started || room.hostinfo.mode === 2) {
if (!room.started) {
return true;
}
if (room.random_type && room.turn < 3 && !client.flee_free) {
ygopro.stoc_send_chat(client, "${surrender_denied}", ygopro.constants.COLORS.BABYBLUE);
return true;
}
if (room.hostinfo.mode === 2) {
if (!settings.modules.tag_duel_surrender) {
return true;
} else if (!client.surrend_confirm && !CLIENT_get_partner(client).closed) {
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;
});
......@@ -3247,7 +3265,7 @@
};
ygopro.ctos_follow('CHAT', true, function(buffer, info, client, server) {
var buy_result, cancel, ccolor, cip, cmd, cmsg, cname, code, color, cvalue, key, msg, name, oldmsg, ref3, room, struct, uname, windbot, word;
var buy_result, cancel, ccolor, cip, cmd, cmsg, cname, code, color, cvalue, key, msg, name, oldmsg, ref3, room, struct, sur_player, uname, windbot, word;
room = ROOM_all[client.rid];
if (!room) {
return;
......@@ -3261,7 +3279,7 @@
switch (cmd[0]) {
case '/投降':
case '/surrender':
if (!room.started || room.hostinfo.mode === 2) {
if (!room.started || (room.hostinfo.mode === 2 && !settings.modules.tag_duel_surrender)) {
return cancel;
}
if (room.random_type && room.turn < 3) {
......@@ -3271,8 +3289,17 @@
if (client.surrend_confirm) {
ygopro.ctos_send(client.server, 'SURRENDER');
} else {
ygopro.stoc_send_chat(client, "${surrender_confirm}", ygopro.constants.COLORS.BABYBLUE);
client.surrend_confirm = true;
sur_player = CLIENT_get_partner(client);
if (sur_player.closed) {
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;
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