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 @@ ...@@ -16,6 +16,10 @@
"redis_port": 6379, "redis_port": 6379,
"mycard_auth": false, "mycard_auth": false,
"hang_timeout": 90, "hang_timeout": 90,
"tournament_mode": {
"enabled": false,
"deck_path": "./decks"
},
"http": { "http": {
"port": 7922, "port": 7922,
"password": "123456", "password": "123456",
......
...@@ -1221,18 +1221,56 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)-> ...@@ -1221,18 +1221,56 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
return cancel return cancel
ygopro.ctos_follow 'UPDATE_DECK', false, (buffer, info, client, server)-> ygopro.ctos_follow 'UPDATE_DECK', true, (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
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room and room.random_type return false unless room
if client.is_host #log.info info
room.waiting_for_player = room.waiting_for_player2 buff_main = (info.deckbuf[i] for i in [0...info.mainc])
room.last_active_time = moment() buff_side = (info.deckbuf[i] for i in [info.mainc...info.mainc + info.sidec])
return ##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)-> ygopro.ctos_follow 'RESPONSE', false, (buffer, info, client, server)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
......
...@@ -1512,9 +1512,13 @@ ...@@ -1512,9 +1512,13 @@
return cancel; return cancel;
}); });
ygopro.ctos_follow('UPDATE_DECK', false, function(buffer, info, client, server) { ygopro.ctos_follow('UPDATE_DECK', true, function(buffer, info, client, server) {
var i, main, room, side; 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;
main = (function() { room = ROOM_all[client.rid];
if (!room) {
return false;
}
buff_main = (function() {
var k, ref, results; var k, ref, results;
results = []; results = [];
for (i = k = 0, ref = info.mainc; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { for (i = k = 0, ref = info.mainc; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
...@@ -1522,7 +1526,7 @@ ...@@ -1522,7 +1526,7 @@
} }
return results; return results;
})(); })();
side = (function() { buff_side = (function() {
var k, ref, ref1, results; var k, ref, ref1, results;
results = []; results = [];
for (i = k = ref = info.mainc, ref1 = info.mainc + info.sidec; ref <= ref1 ? k < ref1 : k > ref1; i = ref <= ref1 ? ++k : --k) { 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 @@ ...@@ -1530,16 +1534,62 @@
} }
return results; return results;
})(); })();
client.main = main; if (room.random_type) {
client.side = side; if (client.is_host) {
room = ROOM_all[client.rid]; room.waiting_for_player = room.waiting_for_player2;
if (!(room && room.random_type)) { }
return; room.last_active_time = moment();
} } else if (!room.started && room.hostinfo.mode === 1 && settings.modules.tournament_mode.enabled) {
if (client.is_host) { struct = ygopro.structs["deck"];
room.waiting_for_player = room.waiting_for_player2; 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) { 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