Commit 0d34825e authored by mercury233's avatar mercury233

add support for remote windbot

parent 3a7e6938
...@@ -53,7 +53,9 @@ ...@@ -53,7 +53,9 @@
"enabled": false, "enabled": false,
"botlist": "./windbot/bots.json", "botlist": "./windbot/bots.json",
"spawn": false, "spawn": false,
"port": 2399 "port": 2399,
"server_ip": "127.0.0.1",
"my_ip": "127.0.0.1"
}, },
"mycard": { "mycard": {
"enabled": false, "enabled": false,
......
...@@ -627,7 +627,7 @@ class Room ...@@ -627,7 +627,7 @@ class Room
add_windbot: (botdata)-> add_windbot: (botdata)->
@windbot = botdata @windbot = botdata
request request
url: "http://127.0.0.1:#{settings.modules.windbot.port}/?name=#{encodeURIComponent(botdata.name)}&deck=#{encodeURIComponent(botdata.deck)}&host=127.0.0.1&port=#{settings.port}&dialog=#{encodeURIComponent(botdata.dialog)}&version=#{settings.version}&password=#{encodeURIComponent(@name)}" url: "http://#{settings.modules.windbot.server_ip}:#{settings.modules.windbot.port}/?name=#{encodeURIComponent(botdata.name)}&deck=#{encodeURIComponent(botdata.deck)}&host=#{settings.modules.windbot.my_ip}&port=#{settings.port}&dialog=#{encodeURIComponent(botdata.dialog)}&version=#{settings.version}&password=#{encodeURIComponent(@name)}"
, (error, response, body)=> , (error, response, body)=>
if error if error
log.warn 'windbot add error', error, this.name log.warn 'windbot add error', error, this.name
...@@ -692,8 +692,10 @@ class Room ...@@ -692,8 +692,10 @@ class Room
# 网络连接 # 网络连接
net.createServer (client) -> net.createServer (client) ->
client.ip = client.remoteAddress client.ip = client.remoteAddress
client.is_local = client.ip.includes('127.0.0.1') or client.ip.includes(settings.modules.windbot.server_ip)
connect_count = ROOM_connected_ip[client.ip] or 0 connect_count = ROOM_connected_ip[client.ip] or 0
if !settings.modules.test_mode.no_connect_count_limit and client.ip != '::ffff:127.0.0.1' if !settings.modules.test_mode.no_connect_count_limit and !client.is_local
connect_count++ connect_count++
ROOM_connected_ip[client.ip] = connect_count ROOM_connected_ip[client.ip] = connect_count
#log.info "connect", client.ip, ROOM_connected_ip[client.ip] #log.info "connect", client.ip, ROOM_connected_ip[client.ip]
...@@ -783,7 +785,7 @@ net.createServer (client) -> ...@@ -783,7 +785,7 @@ net.createServer (client) ->
return return
return return
return return
# 需要重构 # 需要重构
# 客户端到服务端(ctos)协议分析 # 客户端到服务端(ctos)协议分析
...@@ -945,7 +947,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)-> ...@@ -945,7 +947,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)->
buffer = struct.buffer buffer = struct.buffer
client.name = name client.name = name
if not settings.modules.i18n.auto_pick or client.ip=="::ffff:127.0.0.1" if not settings.modules.i18n.auto_pick or client.is_local
client.lang=settings.modules.i18n.default client.lang=settings.modules.i18n.default
else else
geo = geoip.lookup(client.ip) geo = geoip.lookup(client.ip)
...@@ -1242,7 +1244,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -1242,7 +1244,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
ygopro.stoc_send_chat(client, settings.modules.welcome, ygopro.constants.COLORS.GREEN) ygopro.stoc_send_chat(client, settings.modules.welcome, ygopro.constants.COLORS.GREEN)
if room.welcome if room.welcome
ygopro.stoc_send_chat(client, room.welcome, ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat(client, room.welcome, ygopro.constants.COLORS.BABYBLUE)
if settings.modules.arena_mode.enabled and client.ip != '::ffff:127.0.0.1' #and not client.score_shown if settings.modules.arena_mode.enabled and !client.is_local #and not client.score_shown
request request
url: settings.modules.arena_mode.get_score + encodeURIComponent(client.name), url: settings.modules.arena_mode.get_score + encodeURIComponent(client.name),
json: true json: true
...@@ -1426,7 +1428,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ...@@ -1426,7 +1428,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
ygopro.ctos_follow 'HS_TOOBSERVER', true, (buffer, info, client, server)-> ygopro.ctos_follow 'HS_TOOBSERVER', true, (buffer, info, client, server)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room return unless room
if not room.arena or client.ip == "::ffff:127.0.0.1" if not room.arena or client.is_local
return false return false
for player in room.players for player in room.players
if player == client if player == client
...@@ -1623,7 +1625,6 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)-> ...@@ -1623,7 +1625,6 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
client.deck_saved = true client.deck_saved = true
return return
ygopro.ctos_follow 'SURRENDER', true, (buffer, info, client, server)-> ygopro.ctos_follow 'SURRENDER', true, (buffer, info, client, server)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room return unless room
...@@ -1903,7 +1904,7 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)-> ...@@ -1903,7 +1904,7 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)->
cloud_replay_id: "R#"+room.cloud_replay_id, cloud_replay_id: "R#"+room.cloud_replay_id,
replay_filename: replay_filename, replay_filename: replay_filename,
players: (for player in room.dueling_players players: (for player in room.dueling_players
name: player.name + (if settings.modules.tournament_mode.show_ip and player.ip != '::ffff:127.0.0.1' then (" (IP: " + player.ip.slice(7) + ")") else "") + (if settings.modules.tournament_mode.show_info and not (room.hostinfo.mode == 2 and player.pos > 1) then (" (Score:" + room.scores[player.name] + " LP:" + (if player.lp? then player.lp else room.hostinfo.start_lp) + ")") else ""), name: player.name + (if settings.modules.tournament_mode.show_ip and !player.is_local then (" (IP: " + player.ip.slice(7) + ")") else "") + (if settings.modules.tournament_mode.show_info and not (room.hostinfo.mode == 2 and player.pos > 1) then (" (Score:" + room.scores[player.name] + " LP:" + (if player.lp? then player.lp else room.hostinfo.start_lp) + ")") else ""),
winner: player.pos == room.winner winner: player.pos == room.winner
) )
} }
...@@ -2001,7 +2002,7 @@ if settings.modules.http ...@@ -2001,7 +2002,7 @@ if settings.modules.http
needpass: (room.name.indexOf('$') != -1).toString(), needpass: (room.name.indexOf('$') != -1).toString(),
users: (for player in room.players when player.pos? users: (for player in room.players when player.pos?
id: (-1).toString(), id: (-1).toString(),
name: player.name + (if settings.modules.http.show_ip and pass_validated and player.ip != '::ffff:127.0.0.1' then (" (IP: " + player.ip.slice(7) + ")") else "") + (if settings.modules.http.show_info and room.started and not (room.hostinfo.mode == 2 and player.pos > 1) then (" (Score:" + room.scores[player.name] + " LP:" + (if player.lp? then player.lp else room.hostinfo.start_lp) + ")") else ""), name: player.name + (if settings.modules.http.show_ip and pass_validated and !player.is_local then (" (IP: " + player.ip.slice(7) + ")") else "") + (if settings.modules.http.show_info and room.started and not (room.hostinfo.mode == 2 and player.pos > 1) then (" (Score:" + room.scores[player.name] + " LP:" + (if player.lp? then player.lp else room.hostinfo.start_lp) + ")") else ""),
pos: player.pos pos: player.pos
), ),
istart: if room.started then (if settings.modules.http.show_info then ("Duel:" + room.duel_count + " " + (if room.changing_side then "Siding" else "Turn:" + (if room.turn? then room.turn else 0) + (if room.death then "/" + (if room.death > 0 then room.death - 1 else "Death") else ""))) else 'start') else 'wait' istart: if room.started then (if settings.modules.http.show_info then ("Duel:" + room.duel_count + " " + (if room.changing_side then "Siding" else "Turn:" + (if room.turn? then room.turn else 0) + (if room.death then "/" + (if room.death > 0 then room.death - 1 else "Death") else ""))) else 'start') else 'wait'
......
...@@ -840,7 +840,7 @@ ...@@ -840,7 +840,7 @@
Room.prototype.add_windbot = function(botdata) { Room.prototype.add_windbot = function(botdata) {
this.windbot = botdata; this.windbot = botdata;
request({ request({
url: "http://127.0.0.1:" + settings.modules.windbot.port + "/?name=" + (encodeURIComponent(botdata.name)) + "&deck=" + (encodeURIComponent(botdata.deck)) + "&host=127.0.0.1&port=" + settings.port + "&dialog=" + (encodeURIComponent(botdata.dialog)) + "&version=" + settings.version + "&password=" + (encodeURIComponent(this.name)) url: "http://" + settings.modules.windbot.server_ip + ":" + settings.modules.windbot.port + "/?name=" + (encodeURIComponent(botdata.name)) + "&deck=" + (encodeURIComponent(botdata.deck)) + "&host=" + settings.modules.windbot.my_ip + "&port=" + settings.port + "&dialog=" + (encodeURIComponent(botdata.dialog)) + "&version=" + settings.version + "&password=" + (encodeURIComponent(this.name))
}, (function(_this) { }, (function(_this) {
return function(error, response, body) { return function(error, response, body) {
if (error) { if (error) {
...@@ -930,8 +930,9 @@ ...@@ -930,8 +930,9 @@
net.createServer(function(client) { net.createServer(function(client) {
var connect_count, server; var connect_count, server;
client.ip = client.remoteAddress; client.ip = client.remoteAddress;
client.is_local = client.ip.includes('127.0.0.1') || client.ip.includes(settings.modules.windbot.server_ip);
connect_count = ROOM_connected_ip[client.ip] || 0; connect_count = ROOM_connected_ip[client.ip] || 0;
if (!settings.modules.test_mode.no_connect_count_limit && client.ip !== '::ffff:127.0.0.1') { if (!settings.modules.test_mode.no_connect_count_limit && !client.is_local) {
connect_count++; connect_count++;
} }
ROOM_connected_ip[client.ip] = connect_count; ROOM_connected_ip[client.ip] = connect_count;
...@@ -1203,7 +1204,7 @@ ...@@ -1203,7 +1204,7 @@
struct.set("name", name); struct.set("name", name);
buffer = struct.buffer; buffer = struct.buffer;
client.name = name; client.name = name;
if (!settings.modules.i18n.auto_pick || client.ip === "::ffff:127.0.0.1") { if (!settings.modules.i18n.auto_pick || client.is_local) {
client.lang = settings.modules.i18n["default"]; client.lang = settings.modules.i18n["default"];
} else { } else {
geo = geoip.lookup(client.ip); geo = geoip.lookup(client.ip);
...@@ -1509,7 +1510,7 @@ ...@@ -1509,7 +1510,7 @@
if (room.welcome) { if (room.welcome) {
ygopro.stoc_send_chat(client, room.welcome, ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, room.welcome, ygopro.constants.COLORS.BABYBLUE);
} }
if (settings.modules.arena_mode.enabled && client.ip !== '::ffff:127.0.0.1') { if (settings.modules.arena_mode.enabled && !client.is_local) {
request({ request({
url: settings.modules.arena_mode.get_score + encodeURIComponent(client.name), url: settings.modules.arena_mode.get_score + encodeURIComponent(client.name),
json: true json: true
...@@ -1722,7 +1723,7 @@ ...@@ -1722,7 +1723,7 @@
if (!room) { if (!room) {
return; return;
} }
if (!room.arena || client.ip === "::ffff:127.0.0.1") { if (!room.arena || client.is_local) {
return false; return false;
} }
ref = room.players; ref = room.players;
...@@ -2394,7 +2395,7 @@ ...@@ -2394,7 +2395,7 @@
for (k = 0, len1 = ref1.length; k < len1; k++) { for (k = 0, len1 = ref1.length; k < len1; k++) {
player = ref1[k]; player = ref1[k];
results.push({ results.push({
name: player.name + (settings.modules.tournament_mode.show_ip && player.ip !== '::ffff:127.0.0.1' ? " (IP: " + player.ip.slice(7) + ")" : "") + (settings.modules.tournament_mode.show_info && !(room.hostinfo.mode === 2 && player.pos > 1) ? " (Score:" + room.scores[player.name] + " LP:" + (player.lp != null ? player.lp : room.hostinfo.start_lp) + ")" : ""), name: player.name + (settings.modules.tournament_mode.show_ip && !player.is_local ? " (IP: " + player.ip.slice(7) + ")" : "") + (settings.modules.tournament_mode.show_info && !(room.hostinfo.mode === 2 && player.pos > 1) ? " (Score:" + room.scores[player.name] + " LP:" + (player.lp != null ? player.lp : room.hostinfo.start_lp) + ")" : ""),
winner: player.pos === room.winner winner: player.pos === room.winner
}); });
} }
...@@ -2529,7 +2530,7 @@ ...@@ -2529,7 +2530,7 @@
if (player.pos != null) { if (player.pos != null) {
results1.push({ results1.push({
id: (-1).toString(), id: (-1).toString(),
name: player.name + (settings.modules.http.show_ip && pass_validated && player.ip !== '::ffff:127.0.0.1' ? " (IP: " + player.ip.slice(7) + ")" : "") + (settings.modules.http.show_info && room.started && !(room.hostinfo.mode === 2 && player.pos > 1) ? " (Score:" + room.scores[player.name] + " LP:" + (player.lp != null ? player.lp : room.hostinfo.start_lp) + ")" : ""), name: player.name + (settings.modules.http.show_ip && pass_validated && !player.is_local ? " (IP: " + player.ip.slice(7) + ")" : "") + (settings.modules.http.show_info && room.started && !(room.hostinfo.mode === 2 && player.pos > 1) ? " (Score:" + room.scores[player.name] + " LP:" + (player.lp != null ? player.lp : room.hostinfo.start_lp) + ")" : ""),
pos: player.pos pos: player.pos
}); });
} }
......
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