Commit 50cca341 authored by nanahira's avatar nanahira

Merge branch 'master' into tcg_random

parents 072343dd 8785a2ea
...@@ -1365,7 +1365,7 @@ class Room ...@@ -1365,7 +1365,7 @@ class Room
@recover_from_turn = parseInt(param[4]) @recover_from_turn = parseInt(param[4])
duel_log_id = parseInt(param[3]) duel_log_id = parseInt(param[3])
@recover_duel_log = _.find(duel_log.duel_log, (duel) -> @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) if !@recover_duel_log || !fs.existsSync(settings.modules.tournament_mode.replay_path + @recover_duel_log.replay_filename)
@error = "${cloud_replay_no}" @error = "${cloud_replay_no}"
...@@ -1387,6 +1387,9 @@ class Room ...@@ -1387,6 +1387,9 @@ class Room
if @recovered if @recovered
param.push(@recover_replay.header.seed) 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 try
@process = spawn './ygopro', param, {cwd: 'ygopro'} @process = spawn './ygopro', param, {cwd: 'ygopro'}
...@@ -2158,7 +2161,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)-> ...@@ -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 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) ygopro.stoc_send_chat(client,"${recover_replay_hint}", ygopro.constants.COLORS.BABYBLUE)
available_logs = duel_log.duel_log.filter((duel) -> 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 return player.real_name == client.name_vpass
) )
).slice(0, 8) ).slice(0, 8)
...@@ -3723,6 +3726,9 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -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")) return player.real_name == client.name_vpass and _.isEqual(buffer, Buffer.from(player.deckbuf, "base64"))
) )
if recover_player_data 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 if recover_player_data.is_first
room.determine_firstgo = client room.determine_firstgo = client
else else
...@@ -3997,6 +4003,10 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server, datas)-> ...@@ -3997,6 +4003,10 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server, datas)->
players: (for player in room.dueling_players players: (for player in room.dueling_players
real_name: player.name_vpass, real_name: player.name_vpass,
deckbuf: player.start_deckbuf.toString("base64"), deckbuf: player.start_deckbuf.toString("base64"),
deck: {
main: player.main,
side: player.side
}
pos: player.pos pos: player.pos
is_first: player.is_first 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 ""), 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 @@ ...@@ -1601,7 +1601,7 @@
Room = class Room { Room = class Room {
constructor(name, hostinfo) { 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.hostinfo = hostinfo;
this.name = name; this.name = name;
//@alive = true //@alive = true
...@@ -1803,7 +1803,7 @@ ...@@ -1803,7 +1803,7 @@
this.recover_from_turn = parseInt(param[4]); this.recover_from_turn = parseInt(param[4]);
duel_log_id = parseInt(param[3]); duel_log_id = parseInt(param[3]);
this.recover_duel_log = _.find(duel_log.duel_log, function(duel) { 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)) { if (!this.recover_duel_log || !fs.existsSync(settings.modules.tournament_mode.replay_path + this.recover_duel_log.replay_filename)) {
this.error = "${cloud_replay_no}"; this.error = "${cloud_replay_no}";
...@@ -1824,6 +1824,13 @@ ...@@ -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]; 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) { if (this.recovered) {
param.push(this.recover_replay.header.seed); 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 { try {
this.process = spawn('./ygopro', param, { this.process = spawn('./ygopro', param, {
...@@ -1851,10 +1858,10 @@ ...@@ -1851,10 +1858,10 @@
this.port = parseInt(data); this.port = parseInt(data);
_.each(this.players, (player) => { _.each(this.players, (player) => {
player.server.connect(this.port, '127.0.0.1', function() { 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; ref4 = player.pre_establish_buffers;
for (n = 0, len3 = ref4.length; n < len3; n++) { for (p = 0, len3 = ref4.length; p < len3; p++) {
buffer = ref4[n]; buffer = ref4[p];
player.server.write(buffer); player.server.write(buffer);
} }
player.established = true; player.established = true;
...@@ -2876,7 +2883,7 @@ ...@@ -2876,7 +2883,7 @@
} else if (info.pass.toUpperCase() === "RC" && settings.modules.tournament_mode.enable_recover) { } else if (info.pass.toUpperCase() === "RC" && settings.modules.tournament_mode.enable_recover) {
ygopro.stoc_send_chat(client, "${recover_replay_hint}", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "${recover_replay_hint}", ygopro.constants.COLORS.BABYBLUE);
available_logs = duel_log.duel_log.filter(function(duel) { 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; return player.real_name === client.name_vpass;
}); });
}).slice(0, 8); }).slice(0, 8);
...@@ -4981,6 +4988,9 @@ ...@@ -4981,6 +4988,9 @@
return player.real_name === client.name_vpass && _.isEqual(buffer, Buffer.from(player.deckbuf, "base64")); return player.real_name === client.name_vpass && _.isEqual(buffer, Buffer.from(player.deckbuf, "base64"));
}); });
if (recover_player_data) { 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) { if (recover_player_data.is_first) {
room.determine_firstgo = client; room.determine_firstgo = client;
} }
...@@ -5370,6 +5380,10 @@ ...@@ -5370,6 +5380,10 @@
results.push({ results.push({
real_name: player.name_vpass, real_name: player.name_vpass,
deckbuf: player.start_deckbuf.toString("base64"), deckbuf: player.start_deckbuf.toString("base64"),
deck: {
main: player.main,
side: player.side
},
pos: player.pos, pos: player.pos,
is_first: player.is_first, 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) : "") + ")" : ""), 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