Commit 32d30f14 authored by nanahira's avatar nanahira

detect long resolve chains

parent 6f525172
[
11110587,
32362575,
43040603,
58577036,
79106360
]
......@@ -220,6 +220,9 @@ if settings.modules.cloud_replay.enabled
if settings.modules.windbot.enabled
windbots = loadJSON(settings.modules.windbot.botlist).windbots
if settings.modules.heartbeat_detection.enabled
long_resolve_cards = loadJSON('./data/long_resolve_cards.json')
# 组件
ygopro = require './ygopro.js'
roomlist = require './roomlist.js' if settings.modules.http.websocket_roomlist
......@@ -1897,6 +1900,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server)->
if settings.modules.heartbeat_detection.enabled
for player in room.players
player.heartbeat_protected = false
delete room.long_resolve_card
delete room.long_resolve_chain
if room and !room.finished and room.dueling_players[pos]
room.winner_name = room.dueling_players[pos].name
#log.info room.dueling_players, pos
......@@ -2003,6 +2008,41 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server)->
#console.log("Confirming cards:" + client.name)
client.heartbeat_protected = true
# chain detection
if settings.modules.heartbeat_detection.enabled and client.pos == 0
if ygopro.constants.MSG[msg] == 'CHAINING'
card = buffer.readUInt32LE(1)
found = false
for id in long_resolve_cards when id == card
found = true
break
if found
room.long_resolve_card = card
# console.log(0,card)
else
delete room.long_resolve_card
else if ygopro.constants.MSG[msg] == 'CHAINED' and room.long_resolve_card
chain = buffer.readInt8(1)
if !room.long_resolve_chain
room.long_resolve_chain = []
room.long_resolve_chain[chain] = true
# console.log(1,chain)
delete room.long_resolve_card
else if ygopro.constants.MSG[msg] == 'CHAIN_SOLVING' and room.long_resolve_chain
chain = buffer.readInt8(1)
# console.log(2,chain)
if room.long_resolve_chain[chain]
for player in room.get_playing_player()
player.heartbeat_protected = true
else if (ygopro.constants.MSG[msg] == 'CHAIN_NEGATED' or ygopro.constants.MSG[msg] == 'CHAIN_DISABLED') and room.long_resolve_chain
chain = buffer.readInt8(1)
# console.log(3,chain)
delete room.long_resolve_chain[chain]
else if ygopro.constants.MSG[msg] == 'CHAIN_END'
# console.log(4,chain)
delete room.long_resolve_card
delete room.long_resolve_chain
#登场台词
if settings.modules.dialogues.enabled
if ygopro.constants.MSG[msg] == 'SUMMONING' or ygopro.constants.MSG[msg] == 'SPSUMMONING' or ygopro.constants.MSG[msg] == 'CHAINING'
......
// Generated by CoffeeScript 1.12.7
(function() {
var CLIENT_get_authorize_key, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_reconnect, CLIENT_is_player, CLIENT_kick, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, ygopro, zlib;
var CLIENT_get_authorize_key, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_reconnect, CLIENT_is_player, CLIENT_kick, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, ygopro, zlib;
net = require('net');
......@@ -268,6 +268,10 @@
windbots = loadJSON(settings.modules.windbot.botlist).windbots;
}
if (settings.modules.heartbeat_detection.enabled) {
long_resolve_cards = loadJSON('./data/long_resolve_cards.json');
}
ygopro = require('./ygopro.js');
if (settings.modules.http.websocket_roomlist) {
......@@ -2145,7 +2149,7 @@
}
ygopro.stoc_follow('GAME_MSG', true, function(buffer, info, client, server) {
var card, check, count, cpos, deck_found, hint_type, i, len2, len3, limbo_found, line, loc, m, max_loop, msg, n, o, oppo_pos, phase, player, playertype, pos, ppos, reason, ref2, ref3, ref4, ref5, ref6, room, trigger_location, val, win_pos;
var card, chain, check, count, cpos, deck_found, found, hint_type, i, id, len2, len3, len4, len5, limbo_found, line, loc, m, max_loop, msg, n, o, oppo_pos, p, phase, player, playertype, pos, ppos, q, reason, ref2, ref3, ref4, ref5, ref6, ref7, room, trigger_location, val, win_pos;
room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) {
return;
......@@ -2289,6 +2293,8 @@
player = ref2[m];
player.heartbeat_protected = false;
}
delete room.long_resolve_card;
delete room.long_resolve_chain;
}
if (room && !room.finished && room.dueling_players[pos]) {
room.winner_name = room.dueling_players[pos].name;
......@@ -2435,14 +2441,60 @@
client.heartbeat_protected = true;
}
}
if (settings.modules.heartbeat_detection.enabled && client.pos === 0) {
if (ygopro.constants.MSG[msg] === 'CHAINING') {
card = buffer.readUInt32LE(1);
found = false;
for (o = 0, len3 = long_resolve_cards.length; o < len3; o++) {
id = long_resolve_cards[o];
if (!(id === card)) {
continue;
}
found = true;
break;
}
if (found) {
room.long_resolve_card = card;
console.log(0, card);
} else {
delete room.long_resolve_card;
}
} else if (ygopro.constants.MSG[msg] === 'CHAINED' && room.long_resolve_card) {
chain = buffer.readInt8(1);
if (!room.long_resolve_chain) {
room.long_resolve_chain = [];
}
room.long_resolve_chain[chain] = true;
console.log(1, chain);
delete room.long_resolve_card;
} else if (ygopro.constants.MSG[msg] === 'CHAIN_SOLVING' && room.long_resolve_chain) {
chain = buffer.readInt8(1);
console.log(2, chain);
if (room.long_resolve_chain[chain]) {
ref6 = room.get_playing_player();
for (p = 0, len4 = ref6.length; p < len4; p++) {
player = ref6[p];
player.heartbeat_protected = true;
}
}
} else if ((ygopro.constants.MSG[msg] === 'CHAIN_NEGATED' || ygopro.constants.MSG[msg] === 'CHAIN_DISABLED') && room.long_resolve_chain) {
chain = buffer.readInt8(1);
console.log(3, chain);
delete room.long_resolve_chain[chain];
} else if (ygopro.constants.MSG[msg] === 'CHAIN_END') {
console.log(4, chain);
delete room.long_resolve_card;
delete room.long_resolve_chain;
}
}
if (settings.modules.dialogues.enabled) {
if (ygopro.constants.MSG[msg] === 'SUMMONING' || ygopro.constants.MSG[msg] === 'SPSUMMONING' || ygopro.constants.MSG[msg] === 'CHAINING') {
card = buffer.readUInt32LE(1);
trigger_location = buffer.readUInt8(6);
if (dialogues.dialogues[card] && (ygopro.constants.MSG[msg] !== 'CHAINING' || (trigger_location & 0x8) && client.ready_trap)) {
ref6 = _.lines(dialogues.dialogues[card][Math.floor(Math.random() * dialogues.dialogues[card].length)]);
for (o = 0, len3 = ref6.length; o < len3; o++) {
line = ref6[o];
ref7 = _.lines(dialogues.dialogues[card][Math.floor(Math.random() * dialogues.dialogues[card].length)]);
for (q = 0, len5 = ref7.length; q < len5; q++) {
line = ref7[q];
ygopro.stoc_send_chat(client, line, ygopro.constants.COLORS.PINK);
}
}
......
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