Commit 50cca341 authored by nanahira's avatar nanahira

Merge branch 'master' into tcg_random

parents 072343dd 8785a2ea
......@@ -1365,7 +1365,7 @@ class Room
@recover_from_turn = parseInt(param[4])
duel_log_id = parseInt(param[3])
@recover_duel_log = _.find(duel_log.duel_log, (duel) ->
return duel.id == duel_log_id and duel.roommode != 2
return duel.id == duel_log_id and duel.roommode != 2 and duel.players[0].deck
)
if !@recover_duel_log || !fs.existsSync(settings.modules.tournament_mode.replay_path + @recover_duel_log.replay_filename)
@error = "${cloud_replay_no}"
......@@ -1387,6 +1387,9 @@ class Room
if @recovered
param.push(@recover_replay.header.seed)
param.push(Math.floor(Math.random() * 2147483647)) for i in [1..2]
else
param.push(Math.floor(Math.random() * 2147483647)) for i in [1..3]
try
@process = spawn './ygopro', param, {cwd: 'ygopro'}
......@@ -2158,7 +2161,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
else if info.pass.toUpperCase()=="RC" and settings.modules.tournament_mode.enable_recover
ygopro.stoc_send_chat(client,"${recover_replay_hint}", ygopro.constants.COLORS.BABYBLUE)
available_logs = duel_log.duel_log.filter((duel) ->
return duel.roommode != 2 and _.any(duel.players, (player) ->
return duel.id and duel.players[0].deck and duel.roommode != 2 and _.any(duel.players, (player) ->
return player.real_name == client.name_vpass
)
).slice(0, 8)
......@@ -3723,6 +3726,9 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
return player.real_name == client.name_vpass and _.isEqual(buffer, Buffer.from(player.deckbuf, "base64"))
)
if recover_player_data
struct.set("mainc", recover_player_data.deck.main.length)
struct.set("sidec", recover_player_data.deck.side.length)
struct.set("deckbuf", recover_player_data.deck.main.concat(recover_player_data.deck.side))
if recover_player_data.is_first
room.determine_firstgo = client
else
......@@ -3997,6 +4003,10 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server, datas)->
players: (for player in room.dueling_players
real_name: player.name_vpass,
deckbuf: player.start_deckbuf.toString("base64"),
deck: {
main: player.main,
side: player.side
}
pos: player.pos
is_first: player.is_first
name: player.name + (if settings.modules.tournament_mode.show_ip and !player.is_local then (" (IP: " + player.ip.slice(7) + ")") else "") + (if settings.modules.tournament_mode.show_info and not (room.hostinfo.mode == 2 and player.pos % 2 > 0) then (" (Score:" + room.scores[player.name_vpass] + " LP:" + (if player.lp? then player.lp else room.hostinfo.start_lp) + (if room.hostinfo.mode != 2 then (" Cards:" + (if player.card_count? then player.card_count else room.hostinfo.start_hand)) else "") + ")") else ""),
......
......@@ -1601,7 +1601,7 @@
Room = class Room {
constructor(name, hostinfo) {
var death_time, draw_count, duel_log_id, duel_rule, lflist, param, rule, start_hand, start_lp, time_limit;
var death_time, draw_count, duel_log_id, duel_rule, i, lflist, n, o, param, rule, start_hand, start_lp, time_limit;
this.hostinfo = hostinfo;
this.name = name;
//@alive = true
......@@ -1803,7 +1803,7 @@
this.recover_from_turn = parseInt(param[4]);
duel_log_id = parseInt(param[3]);
this.recover_duel_log = _.find(duel_log.duel_log, function(duel) {
return duel.id === duel_log_id && duel.roommode !== 2;
return duel.id === duel_log_id && duel.roommode !== 2 && duel.players[0].deck;
});
if (!this.recover_duel_log || !fs.existsSync(settings.modules.tournament_mode.replay_path + this.recover_duel_log.replay_filename)) {
this.error = "${cloud_replay_no}";
......@@ -1824,6 +1824,13 @@
param = [0, this.hostinfo.lflist, this.hostinfo.rule, this.hostinfo.mode, this.hostinfo.duel_rule, (this.hostinfo.no_check_deck ? 'T' : 'F'), (this.hostinfo.no_shuffle_deck ? 'T' : 'F'), this.hostinfo.start_lp, this.hostinfo.start_hand, this.hostinfo.draw_count, this.hostinfo.time_limit, this.hostinfo.replay_mode];
if (this.recovered) {
param.push(this.recover_replay.header.seed);
for (i = n = 1; n <= 2; i = ++n) {
param.push(Math.floor(Math.random() * 2147483647));
}
} else {
for (i = o = 1; o <= 3; i = ++o) {
param.push(Math.floor(Math.random() * 2147483647));
}
}
try {
this.process = spawn('./ygopro', param, {
......@@ -1851,10 +1858,10 @@
this.port = parseInt(data);
_.each(this.players, (player) => {
player.server.connect(this.port, '127.0.0.1', function() {
var buffer, len3, n, ref4;
var buffer, len3, p, ref4;
ref4 = player.pre_establish_buffers;
for (n = 0, len3 = ref4.length; n < len3; n++) {
buffer = ref4[n];
for (p = 0, len3 = ref4.length; p < len3; p++) {
buffer = ref4[p];
player.server.write(buffer);
}
player.established = true;
......@@ -2876,7 +2883,7 @@
} else if (info.pass.toUpperCase() === "RC" && settings.modules.tournament_mode.enable_recover) {
ygopro.stoc_send_chat(client, "${recover_replay_hint}", ygopro.constants.COLORS.BABYBLUE);
available_logs = duel_log.duel_log.filter(function(duel) {
return duel.roommode !== 2 && _.any(duel.players, function(player) {
return duel.id && duel.players[0].deck && duel.roommode !== 2 && _.any(duel.players, function(player) {
return player.real_name === client.name_vpass;
});
}).slice(0, 8);
......@@ -4981,6 +4988,9 @@
return player.real_name === client.name_vpass && _.isEqual(buffer, Buffer.from(player.deckbuf, "base64"));
});
if (recover_player_data) {
struct.set("mainc", recover_player_data.deck.main.length);
struct.set("sidec", recover_player_data.deck.side.length);
struct.set("deckbuf", recover_player_data.deck.main.concat(recover_player_data.deck.side));
if (recover_player_data.is_first) {
room.determine_firstgo = client;
}
......@@ -5370,6 +5380,10 @@
results.push({
real_name: player.name_vpass,
deckbuf: player.start_deckbuf.toString("base64"),
deck: {
main: player.main,
side: player.side
},
pos: player.pos,
is_first: player.is_first,
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) : "") + ")" : ""),
......
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