You need to sign in or sign up before continuing.
Commit c5c23859 authored by mercury233's avatar mercury233

add tournament mode

player must sign up and use the right deck to join the game
parent 119555bd
......@@ -16,6 +16,10 @@
"redis_port": 6379,
"mycard_auth": false,
"hang_timeout": 90,
"tournament_mode": {
"enabled": false,
"deck_path": "./decks"
},
"http": {
"port": 7922,
"password": "123456",
......
......@@ -1221,18 +1221,56 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
return cancel
ygopro.ctos_follow 'UPDATE_DECK', false, (buffer, info, client, server)->
#log.info info
main = (info.deckbuf[i] for i in [0...info.mainc])
side = (info.deckbuf[i] for i in [info.mainc...info.mainc + info.sidec])
client.main = main
client.side = side
ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server)->
room=ROOM_all[client.rid]
return unless room and room.random_type
if client.is_host
room.waiting_for_player = room.waiting_for_player2
room.last_active_time = moment()
return
return false unless room
#log.info info
buff_main = (info.deckbuf[i] for i in [0...info.mainc])
buff_side = (info.deckbuf[i] for i in [info.mainc...info.mainc + info.sidec])
##client.main = main
##client.side = side
if room.random_type
if client.is_host
room.waiting_for_player = room.waiting_for_player2
room.last_active_time = moment()
else if !room.started and room.hostinfo.mode == 1 and settings.modules.tournament_mode.enabled
struct = ygopro.structs["deck"]
struct._setBuff(buffer)
struct.set("mainc", 1)
struct.set("sidec", 1)
struct.set("deckbuf", [4392470, 4392470])
buffer = struct.buffer
found_deck=false
decks=fs.readdirSync(settings.modules.tournament_mode.deck_path)
for deck in decks
if _.endsWith(deck, client.name+".ydk")
found_deck=deck
if found_deck
deck_text=fs.readFileSync(settings.modules.tournament_mode.deck_path+"/"+found_deck,{encoding:"ASCII"})
deck_array=deck_text.split("\n")
deck_main=[]
deck_side=[]
current_deck=deck_main
for line in deck_array
if line.indexOf("!side")>=0
current_deck=deck_side
card=parseInt(line)
current_deck.push(card) unless isNaN(card)
if _.isEqual(buff_main, deck_main) and _.isEqual(buff_side, deck_side)
deckbuf=deck_main.concat(deck_side)
struct.set("mainc", deck_main.length)
struct.set("sidec", deck_side.length)
struct.set("deckbuf", deckbuf)
buffer = struct.buffer
log.info("deck ok: " + client.name)
ygopro.stoc_send_chat(client, "成功参加比赛", ygopro.constants.COLORS.BABYBLUE)
else
log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side)
ygopro.stoc_send_chat(client, "您的卡组与报名卡组不符,请重新选择", ygopro.constants.COLORS.RED)
else
log.info("player deck not found: " + client.name)
ygopro.stoc_send_chat(client, "没有找到您的报名信息,请联系主持", ygopro.constants.COLORS.RED)
return false
ygopro.ctos_follow 'RESPONSE', false, (buffer, info, client, server)->
room=ROOM_all[client.rid]
......
......@@ -1512,9 +1512,13 @@
return cancel;
});
ygopro.ctos_follow('UPDATE_DECK', false, function(buffer, info, client, server) {
var i, main, room, side;
main = (function() {
ygopro.ctos_follow('UPDATE_DECK', true, function(buffer, info, client, server) {
var buff_main, buff_side, card, current_deck, deck, deck_array, deck_main, deck_side, deck_text, deckbuf, decks, found_deck, i, k, l, len, len1, line, room, struct;
room = ROOM_all[client.rid];
if (!room) {
return false;
}
buff_main = (function() {
var k, ref, results;
results = [];
for (i = k = 0, ref = info.mainc; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
......@@ -1522,7 +1526,7 @@
}
return results;
})();
side = (function() {
buff_side = (function() {
var k, ref, ref1, results;
results = [];
for (i = k = ref = info.mainc, ref1 = info.mainc + info.sidec; ref <= ref1 ? k < ref1 : k > ref1; i = ref <= ref1 ? ++k : --k) {
......@@ -1530,16 +1534,62 @@
}
return results;
})();
client.main = main;
client.side = side;
room = ROOM_all[client.rid];
if (!(room && room.random_type)) {
return;
}
if (client.is_host) {
room.waiting_for_player = room.waiting_for_player2;
if (room.random_type) {
if (client.is_host) {
room.waiting_for_player = room.waiting_for_player2;
}
room.last_active_time = moment();
} else if (!room.started && room.hostinfo.mode === 1 && settings.modules.tournament_mode.enabled) {
struct = ygopro.structs["deck"];
struct._setBuff(buffer);
struct.set("mainc", 1);
struct.set("sidec", 1);
struct.set("deckbuf", [4392470, 4392470]);
buffer = struct.buffer;
found_deck = false;
decks = fs.readdirSync(settings.modules.tournament_mode.deck_path);
for (k = 0, len = decks.length; k < len; k++) {
deck = decks[k];
if (_.endsWith(deck, client.name + ".ydk")) {
found_deck = deck;
}
}
if (found_deck) {
deck_text = fs.readFileSync(settings.modules.tournament_mode.deck_path + "/" + found_deck, {
encoding: "ASCII"
});
deck_array = deck_text.split("\n");
deck_main = [];
deck_side = [];
current_deck = deck_main;
for (l = 0, len1 = deck_array.length; l < len1; l++) {
line = deck_array[l];
if (line.indexOf("!side") >= 0) {
current_deck = deck_side;
}
card = parseInt(line);
if (!isNaN(card)) {
current_deck.push(card);
}
}
if (_.isEqual(buff_main, deck_main) && _.isEqual(buff_side, deck_side)) {
deckbuf = deck_main.concat(deck_side);
struct.set("mainc", deck_main.length);
struct.set("sidec", deck_side.length);
struct.set("deckbuf", deckbuf);
buffer = struct.buffer;
log.info("deck ok: " + client.name);
ygopro.stoc_send_chat(client, "成功参加比赛", ygopro.constants.COLORS.BABYBLUE);
} else {
log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side);
ygopro.stoc_send_chat(client, "您的卡组与报名卡组不符,请重新选择", ygopro.constants.COLORS.RED);
}
} else {
log.info("player deck not found: " + client.name);
ygopro.stoc_send_chat(client, "没有找到您的报名信息,请联系主持", ygopro.constants.COLORS.RED);
}
}
room.last_active_time = moment();
return false;
});
ygopro.ctos_follow('RESPONSE', false, function(buffer, info, client, server) {
......
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