Commit 1a600d3a authored by nanahira's avatar nanahira

update deck identify

parent 381ad195
Pipeline #40291 passed with stages
in 8 minutes and 59 seconds
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
"underscore": "^1.11.0", "underscore": "^1.11.0",
"underscore.string": "^3.3.6", "underscore.string": "^3.3.6",
"ws": "^8.9.0", "ws": "^8.9.0",
"ygopro-deck-encode": "^1.0.9" "ygopro-deck-encode": "^1.0.14"
}, },
"devDependencies": { "devDependencies": {
"@types/bunyan": "^1.8.8", "@types/bunyan": "^1.8.8",
...@@ -3687,9 +3687,9 @@ ...@@ -3687,9 +3687,9 @@
} }
}, },
"node_modules/ygopro-deck-encode": { "node_modules/ygopro-deck-encode": {
"version": "1.0.9", "version": "1.0.14",
"resolved": "https://registry.npmjs.org/ygopro-deck-encode/-/ygopro-deck-encode-1.0.9.tgz", "resolved": "https://registry.npmjs.org/ygopro-deck-encode/-/ygopro-deck-encode-1.0.14.tgz",
"integrity": "sha512-2aw/Lr8Sg4cPXKgq71Zk/GQPTZy5GhmviptVHWqMGEW0E2qTaxwpGmsQAN2Q4OWaK1lP+3g3bZt9BaqmWYZQSw==", "integrity": "sha512-Q64f8U+okLBDKHw02eRYsdDMpALhYa55k0BhFqZ5k4ntRpPKFNvM9sNEbBlg2bmyi6LCf3rlEmISmLtlx9uDeA==",
"license": "MIT" "license": "MIT"
} }
}, },
...@@ -6446,9 +6446,9 @@ ...@@ -6446,9 +6446,9 @@
} }
}, },
"ygopro-deck-encode": { "ygopro-deck-encode": {
"version": "1.0.9", "version": "1.0.14",
"resolved": "https://registry.npmjs.org/ygopro-deck-encode/-/ygopro-deck-encode-1.0.9.tgz", "resolved": "https://registry.npmjs.org/ygopro-deck-encode/-/ygopro-deck-encode-1.0.14.tgz",
"integrity": "sha512-2aw/Lr8Sg4cPXKgq71Zk/GQPTZy5GhmviptVHWqMGEW0E2qTaxwpGmsQAN2Q4OWaK1lP+3g3bZt9BaqmWYZQSw==" "integrity": "sha512-Q64f8U+okLBDKHw02eRYsdDMpALhYa55k0BhFqZ5k4ntRpPKFNvM9sNEbBlg2bmyi6LCf3rlEmISmLtlx9uDeA=="
} }
} }
} }
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
"underscore": "^1.11.0", "underscore": "^1.11.0",
"underscore.string": "^3.3.6", "underscore.string": "^3.3.6",
"ws": "^8.9.0", "ws": "^8.9.0",
"ygopro-deck-encode": "^1.0.9" "ygopro-deck-encode": "^1.0.14"
}, },
"license": "AGPL-3.0", "license": "AGPL-3.0",
"scripts": { "scripts": {
......
...@@ -3479,14 +3479,10 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -3479,14 +3479,10 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
else else
log.warn("GET ATHLETIC FAIL", client.name, athleticCheckResult.message) log.warn("GET ATHLETIC FAIL", client.name, athleticCheckResult.message)
if settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.deck_check if settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.deck_check
client_deck_obj = YGOProDeck.fromUpdateDeckPayload(buffer)
if settings.modules.challonge.enabled and client.challonge_info and client.challonge_info.deckbuf if settings.modules.challonge.enabled and client.challonge_info and client.challonge_info.deckbuf
trim_deckbuf = (buf) -> deck_obj = YGOProDeck.fromUpdateDeckPayload(Buffer.from(client.challonge_info.deckbuf, "base64"))
mainc = buf.readUInt32LE(0) if deck_obj.isEqual(client_deck_obj, { ignoreOrder: true })
sidec = buf.readUInt32LE(4)
# take first (2 + mainc + sidec) * 4 bytes
return buf.slice(0, (2 + mainc + sidec) * 4)
deckbuf_from_challonge = Buffer.from(client.challonge_info.deckbuf, "base64")
if trim_deckbuf(deckbuf_from_challonge).equals(trim_deckbuf(buffer))
#log.info("deck ok: " + client.name) #log.info("deck ok: " + client.name)
return deck_ok("${deck_correct_part1} #{client.challonge_info.name} ${deck_correct_part2}") return deck_ok("${deck_correct_part1} #{client.challonge_info.name} ${deck_correct_part2}")
else else
...@@ -3495,16 +3491,14 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -3495,16 +3491,14 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
else else
decks = await fs.promises.readdir(settings.modules.tournament_mode.deck_path) decks = await fs.promises.readdir(settings.modules.tournament_mode.deck_path)
if decks.length if decks.length
found_deck=false found_deck = decks.find((deck) -> deck_name_match(deck, client.name))
for deck in decks
if deck_name_match(deck, client.name)
found_deck=deck
if found_deck if found_deck
deck_text = await fs.promises.readFile(settings.modules.tournament_mode.deck_path+found_deck,{encoding:"ASCII"}) deck_text = await fs.promises.readFile(settings.modules.tournament_mode.deck_path+found_deck,{encoding:"ASCII"})
deck_obj = YGOProDeck.fromYdkString(deck_text) deck_obj = YGOProDeck.fromYdkString(deck_text)
deck_main=deck_obj.main.concat(deck_obj.extra) # put extra cards to main
deck_side=deck_obj.side deck_obj.main = deck_obj.main.concat(deck_obj.extra)
if _.isEqual(buff_main, deck_main) and _.isEqual(buff_side, deck_side) deck_obj.extra = []
if client_deck_obj.isEqual(deck_obj, { ignoreOrder: true })
#log.info("deck ok: " + client.name) #log.info("deck ok: " + client.name)
return deck_ok("${deck_correct_part1} #{found_deck} ${deck_correct_part2}") return deck_ok("${deck_correct_part1} #{found_deck} ${deck_correct_part2}")
else else
......
...@@ -4541,7 +4541,7 @@ ...@@ -4541,7 +4541,7 @@
}); });
ygopro.ctos_follow('UPDATE_DECK', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow('UPDATE_DECK', true, async function(buffer, info, client, server, datas) {
var athleticCheckResult, buff_main, buff_side, deck, deck_bad, deck_main, deck_obj, deck_ok, deck_side, deck_text, deckbuf_from_challonge, decks, found_deck, i, j, len, oppo_pos, recover_player_data, recoveredDeck, room, trim_deckbuf, win_pos; var athleticCheckResult, buff_main, buff_side, client_deck_obj, deck_bad, deck_obj, deck_ok, deck_text, decks, found_deck, i, oppo_pos, recover_player_data, recoveredDeck, room, win_pos;
if (settings.modules.reconnect.enabled && client.pre_reconnecting) { if (settings.modules.reconnect.enabled && client.pre_reconnecting) {
if (!CLIENT_is_able_to_reconnect(client) && !CLIENT_is_able_to_kick_reconnect(client)) { if (!CLIENT_is_able_to_reconnect(client) && !CLIENT_is_able_to_kick_reconnect(client)) {
ygopro.stoc_send_chat(client, "${reconnect_failed}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(client, "${reconnect_failed}", ygopro.constants.COLORS.RED);
...@@ -4664,16 +4664,12 @@ ...@@ -4664,16 +4664,12 @@
} }
} }
if (settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.deck_check) { if (settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.deck_check) {
client_deck_obj = YGOProDeck.fromUpdateDeckPayload(buffer);
if (settings.modules.challonge.enabled && client.challonge_info && client.challonge_info.deckbuf) { if (settings.modules.challonge.enabled && client.challonge_info && client.challonge_info.deckbuf) {
trim_deckbuf = function(buf) { deck_obj = YGOProDeck.fromUpdateDeckPayload(Buffer.from(client.challonge_info.deckbuf, "base64"));
var mainc, sidec; if (deck_obj.isEqual(client_deck_obj, {
mainc = buf.readUInt32LE(0); ignoreOrder: true
sidec = buf.readUInt32LE(4); })) {
// take first (2 + mainc + sidec) * 4 bytes
return buf.slice(0, (2 + mainc + sidec) * 4);
};
deckbuf_from_challonge = Buffer.from(client.challonge_info.deckbuf, "base64");
if (trim_deckbuf(deckbuf_from_challonge).equals(trim_deckbuf(buffer))) {
//log.info("deck ok: " + client.name) //log.info("deck ok: " + client.name)
return deck_ok(`\${deck_correct_part1} ${client.challonge_info.name} \${deck_correct_part2}`); return deck_ok(`\${deck_correct_part1} ${client.challonge_info.name} \${deck_correct_part2}`);
} else { } else {
...@@ -4683,21 +4679,20 @@ ...@@ -4683,21 +4679,20 @@
} else { } else {
decks = (await fs.promises.readdir(settings.modules.tournament_mode.deck_path)); decks = (await fs.promises.readdir(settings.modules.tournament_mode.deck_path));
if (decks.length) { if (decks.length) {
found_deck = false; found_deck = decks.find(function(deck) {
for (j = 0, len = decks.length; j < len; j++) { return deck_name_match(deck, client.name);
deck = decks[j]; });
if (deck_name_match(deck, client.name)) {
found_deck = deck;
}
}
if (found_deck) { if (found_deck) {
deck_text = (await fs.promises.readFile(settings.modules.tournament_mode.deck_path + found_deck, { deck_text = (await fs.promises.readFile(settings.modules.tournament_mode.deck_path + found_deck, {
encoding: "ASCII" encoding: "ASCII"
})); }));
deck_obj = YGOProDeck.fromYdkString(deck_text); deck_obj = YGOProDeck.fromYdkString(deck_text);
deck_main = deck_obj.main.concat(deck_obj.extra); // put extra cards to main
deck_side = deck_obj.side; deck_obj.main = deck_obj.main.concat(deck_obj.extra);
if (_.isEqual(buff_main, deck_main) && _.isEqual(buff_side, deck_side)) { deck_obj.extra = [];
if (client_deck_obj.isEqual(deck_obj, {
ignoreOrder: true
})) {
//log.info("deck ok: " + client.name) //log.info("deck ok: " + client.name)
return deck_ok(`\${deck_correct_part1} ${found_deck} \${deck_correct_part2}`); return deck_ok(`\${deck_correct_part1} ${found_deck} \${deck_correct_part2}`);
} else { } else {
......
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