Commit df26c9c8 authored by nanahira's avatar nanahira

Merge branch 'master' of ../srvpro

parents 707698ef 1a600d3a
...@@ -409,8 +409,8 @@ ...@@ -409,8 +409,8 @@
"bad_user_name": "请输入正确的用户名", "bad_user_name": "请输入正确的用户名",
"server_full": "服务器已经爆满,请稍候再试", "server_full": "服务器已经爆满,请稍候再试",
"too_much_connection": "同时开启的客户端数量过多 ", "too_much_connection": "同时开启的客户端数量过多 ",
"banned_ip_login": "您的账号已被封禁", "banned_ip_login": "您的账号已被封禁。如果您没有进行违规操作且用的是流量网络,可能过几小时就好。是IP撞了。",
"banned_user_login": "您的账号已被封禁", "banned_user_login": "您的账号已被封禁。如果您没有进行违规操作且用的是流量网络,可能过几小时就好。是IP撞了。",
"bad_name_level3": "您的用户名存在不适当的内容", "bad_name_level3": "您的用户名存在不适当的内容",
"bad_name_level2": "您的用户名存在不适当的内容", "bad_name_level2": "您的用户名存在不适当的内容",
"bad_name_level1": "您的用户名存在不适当的内容,请注意更改", "bad_name_level1": "您的用户名存在不适当的内容,请注意更改",
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,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",
...@@ -3697,9 +3697,9 @@ ...@@ -3697,9 +3697,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"
} }
}, },
...@@ -6461,9 +6461,9 @@ ...@@ -6461,9 +6461,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=="
} }
} }
} }
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,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": {
......
...@@ -1722,6 +1722,7 @@ class Room ...@@ -1722,6 +1722,7 @@ class Room
form_data.append 'start', @start_time form_data.append 'start', @start_time
form_data.append 'end', end_time form_data.append 'end', end_time
form_data.append 'arena', @arena form_data.append 'arena', @arena
form_data.append 'nonce', Math.random().toString()
post_score_process = () -> post_score_process = () ->
axios.post settings.modules.arena_mode.post_score, form_data, axios.post settings.modules.arena_mode.post_score, form_data,
...@@ -3858,14 +3859,10 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -3858,14 +3859,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
...@@ -3874,16 +3871,14 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)-> ...@@ -3874,16 +3871,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
......
...@@ -2229,6 +2229,7 @@ ...@@ -2229,6 +2229,7 @@
form_data.append('start', this.start_time); form_data.append('start', this.start_time);
form_data.append('end', end_time); form_data.append('end', end_time);
form_data.append('arena', this.arena); form_data.append('arena', this.arena);
form_data.append('nonce', Math.random().toString());
post_score_process = function() { post_score_process = function() {
return axios.post(settings.modules.arena_mode.post_score, form_data, { return axios.post(settings.modules.arena_mode.post_score, form_data, {
validateStatus: function(status) { validateStatus: function(status) {
...@@ -5043,7 +5044,7 @@ ...@@ -5043,7 +5044,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);
...@@ -5166,16 +5167,12 @@ ...@@ -5166,16 +5167,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 {
...@@ -5185,21 +5182,20 @@ ...@@ -5185,21 +5182,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