Commit 91c6c3ed authored by mercury233's avatar mercury233

update config

parent 236cf33b
{ {
"port": 7911, "port": 7911,
"modules": { "version": 4924,
"welcome": "YGOPRO Server", "hostinfo": {
"update": "请更新游戏版本",
"stop": false,
"tips": "http://mercury233.me/ygosrv233/tips.json",
"dialogues": "http://mercury233.me/ygosrv233/dialogues.json",
"enable_random_duel": false,
"enable_halfway_watch": true,
"enable_cloud_replay": false,
"enable_windbot": false,
"enable_websocket_roomlist": false,
"enable_public_roomlist": false,
"redis_port": 6379,
"windbot_port": 2399,
"spawn_windbot": false,
"hang_timeout": 90,
"default_version": 4924,
"default_room_info": {
"lflist": 0, "lflist": 0,
"rule": 0, "rule": 0,
"mode": 0, "mode": 0,
...@@ -30,6 +14,33 @@ ...@@ -30,6 +14,33 @@
"draw_count": 1, "draw_count": 1,
"time_limit": 180 "time_limit": 180
}, },
"modules": {
"welcome": "Mycard YGOPRO Server",
"update": "请更新游戏版本",
"stop": false,
"tips": {
"enabled": true,
"get": false
},
"dialogues": {
"enabled": true,
"get": "http://mercury233.me/ygosrv233/dialogues.json"
},
"random_duel": {
"enabled": false,
"hang_timeout": 90
},
"cloud_replay": {
"enabled": false,
"redis_port": 6379,
"enable_halfway_watch": true
},
"windbot": {
"enabled": false,
"botlist": "./windbot/bots.json",
"spawn": false,
"port": 2399
},
"mycard": { "mycard": {
"enabled": false, "enabled": false,
"auth_base_url": "https://ygobbs.com", "auth_base_url": "https://ygobbs.com",
...@@ -87,6 +98,8 @@ ...@@ -87,6 +98,8 @@
"http": { "http": {
"port": 7922, "port": 7922,
"password": "123456", "password": "123456",
"websocket_roomlist": false,
"public_roomlist": false,
"ssl": { "ssl": {
"enabled": false, "enabled": false,
"port": 7923, "port": 7923,
...@@ -103,5 +116,17 @@ ...@@ -103,5 +116,17 @@
"badword_level2": ["死妈", "草你妈"], "badword_level2": ["死妈", "草你妈"],
"badword_level3": ["迷奸", "仿真枪"], "badword_level3": ["迷奸", "仿真枪"],
"illegal_id": ["^Lv.\\d+", "^VIP.\\d+"] "illegal_id": ["^Lv.\\d+", "^VIP.\\d+"]
},
"tip": [
"欢迎来到本服务器",
"本服务器使用萌卡代码搭建"
],
"dialogues": {
"46986414": [
"出来吧,我最强的仆人,黑魔导!"
],
"58481572": [
"我们来做朋友吧!"
]
} }
} }
\ No newline at end of file
...@@ -2,13 +2,15 @@ ...@@ -2,13 +2,15 @@
"port": 7911, "port": 7911,
"modules": { "modules": {
"welcome": "Mycard YGOPro Server", "welcome": "Mycard YGOPro Server",
"update": "请更新游戏版本,可在社区手动下载更新包", "update": "请更新游戏版本,可在社区(https://ygobbs.com)手动下载更新包",
"tips": "http://mycard.moe/tips.json", "tips": {
"dialogues": "http://mercury233.me/ygosrv233/dialogues.json", "enabled": true,
"enable_windbot": true, "get": "http://mycard.moe/tips.json"
"enable_websocket_roomlist": true, },
"windbot_port": 2399, "dialogues": {
"spawn_windbot": true, "enabled": true,
"get": "http://mercury233.me/ygosrv233/dialogues.json"
},
"mycard": { "mycard": {
"enabled": true, "enabled": true,
"auth_base_url": "https://ygobbs.com", "auth_base_url": "https://ygobbs.com",
...@@ -28,9 +30,16 @@ ...@@ -28,9 +30,16 @@
"post_score": "https://mycard.moe/ygopro/arena/index.php?c=update", "post_score": "https://mycard.moe/ygopro/arena/index.php?c=update",
"get_score": "https://mycard.moe/ygopro/arena/index.php?c=query&username=" "get_score": "https://mycard.moe/ygopro/arena/index.php?c=query&username="
}, },
"windbot": {
"enabled": true,
"botlist": "./windbot/bots.json",
"spawn": false,
"port": 2399
},
"http": { "http": {
"port": 7922, "port": 7922,
"password": "123456", "password": "123456",
"websocket_roomlist": true,
"ssl": { "ssl": {
"enabled": true, "enabled": true,
"port": 7923, "port": 7923,
......
...@@ -83,10 +83,11 @@ ban_user = (name) -> ...@@ -83,10 +83,11 @@ ban_user = (name) ->
return return
try try
settings.version = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16') cppversion = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16')
nconf.myset(settings, "version", cppversion)
log.info "ygopro version 0x"+settings.version.toString(16), "(from source code)" log.info "ygopro version 0x"+settings.version.toString(16), "(from source code)"
catch catch
settings.version = settings.modules.default_version #settings.version = settings.version_default
log.info "ygopro version 0x"+settings.version.toString(16), "(from config)" log.info "ygopro version 0x"+settings.version.toString(16), "(from config)"
# load the lflist of current date # load the lflist of current date
settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g) settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g)
...@@ -94,20 +95,20 @@ settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').mat ...@@ -94,20 +95,20 @@ settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').mat
continue unless date continue unless date
{date: moment(list.match(/!([\d\.]+)/)[1], 'YYYY.MM.DD').utcOffset("-08:00"), tcg: list.indexOf('TCG') != -1}) {date: moment(list.match(/!([\d\.]+)/)[1], 'YYYY.MM.DD').utcOffset("-08:00"), tcg: list.indexOf('TCG') != -1})
if settings.modules.enable_cloud_replay if settings.modules.cloud_replay.enabled
redis = require 'redis' redis = require 'redis'
zlib = require 'zlib' zlib = require 'zlib'
redisdb = redis.createClient host: "127.0.0.1", port: settings.modules.redis_port redisdb = redis.createClient host: "127.0.0.1", port: settings.modules.cloud_replay.redis_port
redisdb.on 'error', (err)-> redisdb.on 'error', (err)->
log.warn err log.warn err
return return
if settings.modules.enable_windbot if settings.modules.windbot.enabled
settings.modules.windbots = require('./windbot/bots.json').windbots settings.modules.windbots = require(settings.modules.windbot.botlist).windbots
# 组件 # 组件
ygopro = require './ygopro.js' ygopro = require './ygopro.js'
roomlist = require './roomlist.js' if settings.modules.enable_websocket_roomlist roomlist = require './roomlist.js' if settings.modules.http.websocket_roomlist
# cache users of mycard login # cache users of mycard login
users_cache = {} users_cache = {}
...@@ -189,9 +190,9 @@ ROOM_ban_player = (name, ip, reason, countadd = 1)-> ...@@ -189,9 +190,9 @@ ROOM_ban_player = (name, ip, reason, countadd = 1)->
ROOM_find_or_create_by_name = (name, player_ip)-> ROOM_find_or_create_by_name = (name, player_ip)->
uname=name.toUpperCase() uname=name.toUpperCase()
if settings.modules.enable_windbot and (uname[0...2] == 'AI' or (!settings.modules.enable_random_duel and uname == '')) if settings.modules.windbot.enabled and (uname[0...2] == 'AI' or (!settings.modules.random_duel.enabled and uname == ''))
return ROOM_find_or_create_ai(name) return ROOM_find_or_create_ai(name)
if settings.modules.enable_random_duel and (uname == '' or uname == 'S' or uname == 'M' or uname == 'T') if settings.modules.random_duel.enabled and (uname == '' or uname == 'S' or uname == 'M' or uname == 'T')
return ROOM_find_or_create_random(uname, player_ip) return ROOM_find_or_create_random(uname, player_ip)
if room = ROOM_find_by_name(name) if room = ROOM_find_by_name(name)
return room return room
...@@ -306,7 +307,7 @@ class Room ...@@ -306,7 +307,7 @@ class Room
@scores = {} @scores = {}
ROOM_all.push this ROOM_all.push this
@hostinfo ||= settings.modules.default_room_info @hostinfo ||= settings.hostinfo
if settings.lflist.length if settings.lflist.length
if @hostinfo.rule == 1 and @hostinfo.lflist == 0 if @hostinfo.rule == 1 and @hostinfo.lflist == 0
@hostinfo.lflist = _.findIndex settings.lflist, (list)-> list.tcg @hostinfo.lflist = _.findIndex settings.lflist, (list)-> list.tcg
...@@ -406,7 +407,7 @@ class Room ...@@ -406,7 +407,7 @@ class Room
@process.stdout.setEncoding('utf8') @process.stdout.setEncoding('utf8')
@process.stdout.once 'data', (data)=> @process.stdout.once 'data', (data)=>
@established = true @established = true
roomlist.create(this) if !@private and settings.modules.enable_websocket_roomlist roomlist.create(this) if !@private and settings.modules.http.websocket_roomlist
@port = parseInt data @port = parseInt data
_.each @players, (player)=> _.each @players, (player)=>
player.server.connect @port, '127.0.0.1', -> player.server.connect @port, '127.0.0.1', ->
...@@ -457,7 +458,7 @@ class Room ...@@ -457,7 +458,7 @@ class Room
else else
log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body
return return
if @player_datas.length and settings.modules.enable_cloud_replay if @player_datas.length and settings.modules.cloud_replay.enabled
replay_id = @cloud_replay_id replay_id = @cloud_replay_id
if @has_ygopro_error if @has_ygopro_error
log_rep_id = true log_rep_id = true
...@@ -500,7 +501,7 @@ class Room ...@@ -500,7 +501,7 @@ class Room
index = _.indexOf(ROOM_all, this) index = _.indexOf(ROOM_all, this)
ROOM_all[index] = null unless index == -1 ROOM_all[index] = null unless index == -1
#ROOM_all.splice(index, 1) unless index == -1 #ROOM_all.splice(index, 1) unless index == -1
roomlist.delete @name if !@private and !@started and @established and settings.modules.enable_websocket_roomlist roomlist.delete @name if !@private and !@started and @established and settings.modules.http.websocket_roomlist
return return
get_playing_player: -> get_playing_player: ->
...@@ -520,7 +521,7 @@ class Room ...@@ -520,7 +521,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://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)}"
, (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
...@@ -544,7 +545,7 @@ class Room ...@@ -544,7 +545,7 @@ class Room
ROOM_players_oppentlist[client.ip] = null ROOM_players_oppentlist[client.ip] = null
if @established if @established
roomlist.update(this) if !@private and !@started and settings.modules.enable_websocket_roomlist roomlist.update(this) if !@private and !@started and settings.modules.http.websocket_roomlist
client.server.connect @port, '127.0.0.1', -> client.server.connect @port, '127.0.0.1', ->
client.server.write buffer for buffer in client.pre_establish_buffers client.server.write buffer for buffer in client.pre_establish_buffers
client.established = true client.established = true
...@@ -569,7 +570,7 @@ class Room ...@@ -569,7 +570,7 @@ class Room
ROOM_ban_player(client.name, client.ip, "强退") ROOM_ban_player(client.name, client.ip, "强退")
if @players.length and !(@windbot and client.is_host) if @players.length and !(@windbot and client.is_host)
ygopro.stoc_send_chat_to_room this, "#{client.name} 离开了游戏" + if error then ": #{error}" else '' ygopro.stoc_send_chat_to_room this, "#{client.name} 离开了游戏" + if error then ": #{error}" else ''
roomlist.update(this) if !@private and !@started and settings.modules.enable_websocket_roomlist roomlist.update(this) if !@private and !@started and settings.modules.http.websocket_roomlist
#client.room = null #client.room = null
else else
@process.kill() @process.kill()
...@@ -657,7 +658,7 @@ net.createServer (client) -> ...@@ -657,7 +658,7 @@ net.createServer (client) ->
client.destroy() client.destroy()
return return
if settings.modules.enable_cloud_replay if settings.modules.cloud_replay.enabled
client.open_cloud_replay= (err, replay)-> client.open_cloud_replay= (err, replay)->
if err or !replay if err or !replay
ygopro.stoc_die(client, "没有找到录像") ygopro.stoc_die(client, "没有找到录像")
...@@ -836,7 +837,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -836,7 +837,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
if settings.modules.stop if settings.modules.stop
ygopro.stoc_die(client, settings.modules.stop) ygopro.stoc_die(client, settings.modules.stop)
else if info.pass.toUpperCase()=="R" and settings.modules.enable_cloud_replay else if info.pass.toUpperCase()=="R" and settings.modules.cloud_replay.enabled
ygopro.stoc_send_chat(client,"以下是您近期的云录像,密码处输入 R#录像编号 即可观看", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat(client,"以下是您近期的云录像,密码处输入 R#录像编号 即可观看", ygopro.constants.COLORS.BABYBLUE)
redisdb.lrange client.ip+":replays", 0, 2, (err, result)-> redisdb.lrange client.ip+":replays", 0, 2, (err, result)->
_.each result, (replay_id,id)-> _.each result, (replay_id,id)->
...@@ -857,7 +858,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -857,7 +858,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
client.destroy() client.destroy()
return), 500 return), 500
else if info.pass[0...2].toUpperCase()=="R#" and settings.modules.enable_cloud_replay else if info.pass[0...2].toUpperCase()=="R#" and settings.modules.cloud_replay.enabled
replay_id=info.pass.split("#")[1] replay_id=info.pass.split("#")[1]
if (replay_id>0 and replay_id<=9) if (replay_id>0 and replay_id<=9)
redisdb.lindex client.ip+":replays", replay_id-1, (err, replay_id)-> redisdb.lindex client.ip+":replays", replay_id-1, (err, replay_id)->
...@@ -872,7 +873,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -872,7 +873,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else else
ygopro.stoc_die(client, "没有找到录像") ygopro.stoc_die(client, "没有找到录像")
else if info.pass.toUpperCase()=="W" and settings.modules.enable_cloud_replay else if info.pass.toUpperCase()=="W" and settings.modules.cloud_replay.enabled
replay_id=Cloud_replay_ids[Math.floor(Math.random()*Cloud_replay_ids.length)] replay_id=Cloud_replay_ids[Math.floor(Math.random()*Cloud_replay_ids.length)]
redisdb.hgetall "replay:"+replay_id, client.open_cloud_replay redisdb.hgetall "replay:"+replay_id, client.open_cloud_replay
...@@ -884,7 +885,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -884,7 +885,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
} }
client.destroy() client.destroy()
else if !info.pass.length and !settings.modules.enable_random_duel and !settings.modules.enable_windbot else if !info.pass.length and !settings.modules.random_duel.enabled and !settings.modules.windbot.enabled
ygopro.stoc_die(client, "房间名不能为空,请在主机密码处填写房间名") ygopro.stoc_die(client, "房间名不能为空,请在主机密码处填写房间名")
else if info.pass.length and settings.modules.mycard.enabled and info.pass[0...3] != 'AI#' else if info.pass.length and settings.modules.mycard.enabled and info.pass[0...3] != 'AI#'
...@@ -1055,7 +1056,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -1055,7 +1056,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else if room.error else if room.error
ygopro.stoc_die(client, room.error) ygopro.stoc_die(client, room.error)
else if room.started else if room.started
if settings.modules.enable_halfway_watch if settings.modules.cloud_replay.enable_halfway_watch
client.setTimeout(300000) #连接后超时5分钟 client.setTimeout(300000) #连接后超时5分钟
client.rid = _.indexOf(ROOM_all, room) client.rid = _.indexOf(ROOM_all, room)
client.is_post_watcher = true client.is_post_watcher = true
...@@ -1112,14 +1113,14 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -1112,14 +1113,14 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
recorder.on 'data', (data)-> recorder.on 'data', (data)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room and settings.modules.enable_cloud_replay return unless room and settings.modules.cloud_replay.enabled
room.recorder_buffers.push data room.recorder_buffers.push data
return return
recorder.on 'error', (error)-> recorder.on 'error', (error)->
return return
if settings.modules.enable_halfway_watch and !room.watcher if settings.modules.cloud_replay.enable_halfway_watch and !room.watcher
room.watcher = watcher = net.connect room.port, -> room.watcher = watcher = net.connect room.port, ->
ygopro.ctos_send watcher, 'PLAYER_INFO', { ygopro.ctos_send watcher, 'PLAYER_INFO', {
name: "the Big Brother" name: "the Big Brother"
...@@ -1149,7 +1150,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -1149,7 +1150,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
# 登场台词 # 登场台词
load_dialogues = () -> load_dialogues = () ->
request request
url: settings.modules.dialogues url: settings.modules.dialogues.get
json: true json: true
, (error, response, body)-> , (error, response, body)->
if _.isString body if _.isString body
...@@ -1162,7 +1163,7 @@ load_dialogues = () -> ...@@ -1162,7 +1163,7 @@ load_dialogues = () ->
return return
return return
if settings.modules.dialogues if settings.modules.dialogues.get
load_dialogues() load_dialogues()
ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
...@@ -1224,7 +1225,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ...@@ -1224,7 +1225,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
ygopro.stoc_send_chat_to_room(room, "背水一战!", ygopro.constants.COLORS.PINK) ygopro.stoc_send_chat_to_room(room, "背水一战!", ygopro.constants.COLORS.PINK)
#登场台词 #登场台词
if settings.modules.dialogues if settings.modules.dialogues.enabled
if ygopro.constants.MSG[msg] == 'SUMMONING' or ygopro.constants.MSG[msg] == 'SPSUMMONING' if ygopro.constants.MSG[msg] == 'SUMMONING' or ygopro.constants.MSG[msg] == 'SPSUMMONING'
card = buffer.readUInt32LE(1) card = buffer.readUInt32LE(1)
if settings.dialogues[card] if settings.dialogues[card]
...@@ -1289,15 +1290,17 @@ wait_room_start = (room, time)-> ...@@ -1289,15 +1290,17 @@ wait_room_start = (room, time)->
#tip #tip
ygopro.stoc_send_random_tip = (client)-> ygopro.stoc_send_random_tip = (client)->
ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]) if settings.modules.tips if settings.modules.tips.enabled && settings.tips.length
ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)])
return return
ygopro.stoc_send_random_tip_to_room = (room)-> ygopro.stoc_send_random_tip_to_room = (room)->
ygopro.stoc_send_chat_to_room(room, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]) if settings.modules.tips if settings.modules.tips.enabled && settings.tips.length
ygopro.stoc_send_chat_to_room(room, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)])
return return
load_tips = ()-> load_tips = ()->
request request
url: settings.modules.tips url: settings.modules.tips.get
json: true json: true
, (error, response, body)-> , (error, response, body)->
if _.isString body if _.isString body
...@@ -1310,7 +1313,7 @@ load_tips = ()-> ...@@ -1310,7 +1313,7 @@ load_tips = ()->
return return
return return
if settings.modules.tips if settings.modules.tips.get
load_tips() load_tips()
setInterval ()-> setInterval ()->
for room in ROOM_all when room and room.established for room in ROOM_all when room and room.established
...@@ -1324,14 +1327,14 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)-> ...@@ -1324,14 +1327,14 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
unless room.started #first start unless room.started #first start
room.started = true room.started = true
room.start_time = moment().format() room.start_time = moment().format()
roomlist.delete room.name if settings.modules.enable_websocket_roomlist and not room.private roomlist.delete room.name if settings.modules.http.websocket_roomlist and not room.private
#room.duels = [] #room.duels = []
room.dueling_players = [] room.dueling_players = []
for player in room.players when player.pos != 7 for player in room.players when player.pos != 7
room.dueling_players[player.pos] = player room.dueling_players[player.pos] = player
room.scores[player.name] = 0 room.scores[player.name] = 0
room.player_datas.push ip: player.ip, name: player.name room.player_datas.push ip: player.ip, name: player.name
if settings.modules.tips if settings.modules.tips.enabled
ygopro.stoc_send_random_tip(client) ygopro.stoc_send_random_tip(client)
if settings.modules.deck_log.enabled and client.main and client.main.length and not client.deck_saved and client.ip != '::ffff:127.0.0.1' if settings.modules.deck_log.enabled and client.main and client.main.length and not client.deck_saved and client.ip != '::ffff:127.0.0.1'
deck_text = '#ygopro-server deck log\n#main\n' + client.main.join('\n') + '\n!side\n' + client.side.join('\n') + '\n' deck_text = '#ygopro-server deck log\n#main\n' + client.main.join('\n') + '\n!side\n' + client.side.join('\n') + '\n'
...@@ -1370,14 +1373,14 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)-> ...@@ -1370,14 +1373,14 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助") ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助")
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息") ygopro.stoc_send_chat(client, "/help 显示这个帮助信息")
ygopro.stoc_send_chat(client, "/roomname 显示当前房间的名字") if !settings.modules.mycard.enabled ygopro.stoc_send_chat(client, "/roomname 显示当前房间的名字") if !settings.modules.mycard.enabled
ygopro.stoc_send_chat(client, "/ai 添加一个AI,/ai 角色名 可指定添加的角色") if settings.modules.enable_windbot ygopro.stoc_send_chat(client, "/ai 添加一个AI,/ai 角色名 可指定添加的角色") if settings.modules.windbot.enabled
ygopro.stoc_send_chat(client, "/tip 显示一条提示") if settings.modules.tips ygopro.stoc_send_chat(client, "/tip 显示一条提示") if settings.modules.tips.enabled
when '/tip' when '/tip'
ygopro.stoc_send_random_tip(client) if settings.modules.tips ygopro.stoc_send_random_tip(client) if settings.modules.tips.enabled
when '/ai' when '/ai'
if settings.modules.enable_windbot if settings.modules.windbot.enabled
if name = cmd[1] if name = cmd[1]
windbot = _.sample _.filter settings.modules.windbots, (w)-> windbot = _.sample _.filter settings.modules.windbots, (w)->
w.name == name or w.deck == name w.name == name or w.deck == name
...@@ -1512,7 +1515,7 @@ ygopro.ctos_follow 'HAND_RESULT', false, (buffer, info, client, server)-> ...@@ -1512,7 +1515,7 @@ ygopro.ctos_follow 'HAND_RESULT', false, (buffer, info, client, server)->
return unless room and room.random_type return unless room and room.random_type
if client.is_host if client.is_host
room.waiting_for_player = room.waiting_for_player2 room.waiting_for_player = room.waiting_for_player2
room.last_active_time = moment().subtract(settings.modules.hang_timeout - 19, 's') room.last_active_time = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's')
return return
ygopro.ctos_follow 'TP_RESULT', false, (buffer, info, client, server)-> ygopro.ctos_follow 'TP_RESULT', false, (buffer, info, client, server)->
...@@ -1528,7 +1531,7 @@ ygopro.stoc_follow 'SELECT_HAND', false, (buffer, info, client, server)-> ...@@ -1528,7 +1531,7 @@ ygopro.stoc_follow 'SELECT_HAND', false, (buffer, info, client, server)->
room.waiting_for_player = client room.waiting_for_player = client
else else
room.waiting_for_player2 = client room.waiting_for_player2 = client
room.last_active_time = moment().subtract(settings.modules.hang_timeout - 19, 's') room.last_active_time = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's')
return return
ygopro.stoc_follow 'SELECT_TP', false, (buffer, info, client, server)-> ygopro.stoc_follow 'SELECT_TP', false, (buffer, info, client, server)->
...@@ -1551,7 +1554,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server)-> ...@@ -1551,7 +1554,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server)->
ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)-> ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return settings.modules.tournament_mode.enabled unless room return settings.modules.tournament_mode.enabled unless room
if settings.modules.enable_cloud_replay and room.random_type if settings.modules.cloud_replay.enabled and room.random_type
Cloud_replay_ids.push room.cloud_replay_id Cloud_replay_ids.push room.cloud_replay_id
if settings.modules.tournament_mode.enabled if settings.modules.tournament_mode.enabled
if client.is_host if client.is_host
...@@ -1567,29 +1570,30 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)-> ...@@ -1567,29 +1570,30 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)->
} }
settings.modules.tournament_mode.duel_log.push duellog settings.modules.tournament_mode.duel_log.push duellog
nconf.myset(settings, "modules:tournament_mode:duel_log", settings.modules.tournament_mode.duel_log) nconf.myset(settings, "modules:tournament_mode:duel_log", settings.modules.tournament_mode.duel_log)
if settings.modules.enable_cloud_replay if settings.modules.cloud_replay.enabled
ygopro.stoc_send_chat(client, "本场比赛云录像:R##{room.cloud_replay_id}。将于本局结束后可播放。", ygopro.constants.COLORS.BABYBLUE) ygopro.stoc_send_chat(client, "本场比赛云录像:R##{room.cloud_replay_id}。将于本局结束后可播放。", ygopro.constants.COLORS.BABYBLUE)
return true return true
else else
return false return false
if settings.modules.enable_random_duel if settings.modules.random_duel.enabled
setInterval ()-> setInterval ()->
for room in ROOM_all when room and room.started and room.random_type and room.last_active_time and room.waiting_for_player for room in ROOM_all when room and room.started and room.random_type and room.last_active_time and room.waiting_for_player
time_passed = Math.floor((moment() - room.last_active_time) / 1000) time_passed = Math.floor((moment() - room.last_active_time) / 1000)
#log.info time_passed #log.info time_passed
if time_passed >= settings.modules.hang_timeout if time_passed >= settings.modules.random_duel.hang_timeout
room.last_active_time = moment() room.last_active_time = moment()
ROOM_ban_player(room.waiting_for_player.name, room.waiting_for_player.ip, "挂机") ROOM_ban_player(room.waiting_for_player.name, room.waiting_for_player.ip, "挂机")
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} 被系统请出了房间", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} 被系统请出了房间", ygopro.constants.COLORS.RED)
room.waiting_for_player.server.destroy() room.waiting_for_player.server.destroy()
else if time_passed >= (settings.modules.hang_timeout - 20) and not (time_passed % 10) else if time_passed >= (settings.modules.random_duel.hang_timeout - 20) and not (time_passed % 10)
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} 已经很久没有操作了,若继续挂机,将于#{settings.modules.hang_timeout - time_passed}秒后被请出房间", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} 已经很久没有操作了,若继续挂机,将于#{settings.modules.random_duel.hang_timeout - time_passed}秒后被请出房间", ygopro.constants.COLORS.RED)
return return
, 1000 , 1000
if settings.modules.spawn_windbot # spawn windbot
windbot_process = spawn 'mono', ['WindBot.exe', settings.modules.windbot_port], {cwd: 'windbot'} if settings.modules.windbot.spawn
windbot_process = spawn 'mono', ['WindBot.exe', settings.modules.windbot.port], {cwd: 'windbot'}
windbot_process.on 'error', (err)-> windbot_process.on 'error', (err)->
log.warn 'WindBot ERROR', err log.warn 'WindBot ERROR', err
return return
...@@ -1618,7 +1622,7 @@ if settings.modules.http ...@@ -1618,7 +1622,7 @@ if settings.modules.http
pass_validated = u.query.pass == settings.modules.http.password pass_validated = u.query.pass == settings.modules.http.password
if u.pathname == '/api/getrooms' if u.pathname == '/api/getrooms'
if !pass_validated and !settings.modules.enable_public_roomlist if !pass_validated and !settings.modules.http.public_roomlist
response.writeHead(200) response.writeHead(200)
response.end(addCallback(u.query.callback, '{"rooms":[{"roomid":"0","roomname":"密码错误","needpass":"true"}]}')) response.end(addCallback(u.query.callback, '{"rooms":[{"roomid":"0","roomname":"密码错误","needpass":"true"}]}'))
else else
...@@ -1678,12 +1682,12 @@ if settings.modules.http ...@@ -1678,12 +1682,12 @@ if settings.modules.http
else if u.query.loadtips else if u.query.loadtips
load_tips() load_tips()
response.writeHead(200) response.writeHead(200)
response.end(addCallback(u.query.callback, "['loading tip', '" + settings.modules.tips + "']")) response.end(addCallback(u.query.callback, "['loading tip', '" + settings.modules.tips.get + "']"))
else if u.query.loaddialogues else if u.query.loaddialogues
load_dialogues() load_dialogues()
response.writeHead(200) response.writeHead(200)
response.end(addCallback(u.query.callback, "['loading dialogues', '" + settings.modules.dialogues + "']")) response.end(addCallback(u.query.callback, "['loading dialogues', '" + settings.modules.dialogues.get + "']"))
else if u.query.ban else if u.query.ban
ban_user(u.query.ban) ban_user(u.query.ban)
......
// Generated by CoffeeScript 1.12.1 // Generated by CoffeeScript 1.12.1
(function() { (function() {
var Cloud_replay_ids, Graveyard, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_validate, Room, _, addCallback, ban_user, bunyan, crypto, date, defaultconfig, execFile, fs, get_memory_usage, http, http_server, https, https_server, list, load_dialogues, load_tips, log, moment, nconf, net, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, request, requestListener, roomlist, settings, spawn, spawnSync, tribute, url, users_cache, wait_room_start, windbot_process, ygopro, zlib; var Cloud_replay_ids, Graveyard, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_validate, Room, _, addCallback, ban_user, bunyan, cppversion, crypto, date, defaultconfig, execFile, fs, get_memory_usage, http, http_server, https, https_server, list, load_dialogues, load_tips, log, moment, nconf, net, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, request, requestListener, roomlist, settings, spawn, spawnSync, tribute, url, users_cache, wait_room_start, windbot_process, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -112,10 +112,10 @@ ...@@ -112,10 +112,10 @@
}; };
try { try {
settings.version = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16'); cppversion = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16');
nconf.myset(settings, "version", cppversion);
log.info("ygopro version 0x" + settings.version.toString(16), "(from source code)"); log.info("ygopro version 0x" + settings.version.toString(16), "(from source code)");
} catch (error1) { } catch (error1) {
settings.version = settings.modules.default_version;
log.info("ygopro version 0x" + settings.version.toString(16), "(from config)"); log.info("ygopro version 0x" + settings.version.toString(16), "(from config)");
} }
...@@ -137,25 +137,25 @@ ...@@ -137,25 +137,25 @@
return results; return results;
})(); })();
if (settings.modules.enable_cloud_replay) { if (settings.modules.cloud_replay.enabled) {
redis = require('redis'); redis = require('redis');
zlib = require('zlib'); zlib = require('zlib');
redisdb = redis.createClient({ redisdb = redis.createClient({
host: "127.0.0.1", host: "127.0.0.1",
port: settings.modules.redis_port port: settings.modules.cloud_replay.redis_port
}); });
redisdb.on('error', function(err) { redisdb.on('error', function(err) {
log.warn(err); log.warn(err);
}); });
} }
if (settings.modules.enable_windbot) { if (settings.modules.windbot.enabled) {
settings.modules.windbots = require('./windbot/bots.json').windbots; settings.modules.windbots = require(settings.modules.windbot.botlist).windbots;
} }
ygopro = require('./ygopro.js'); ygopro = require('./ygopro.js');
if (settings.modules.enable_websocket_roomlist) { if (settings.modules.http.websocket_roomlist) {
roomlist = require('./roomlist.js'); roomlist = require('./roomlist.js');
} }
...@@ -264,10 +264,10 @@ ...@@ -264,10 +264,10 @@
ROOM_find_or_create_by_name = function(name, player_ip) { ROOM_find_or_create_by_name = function(name, player_ip) {
var room, uname; var room, uname;
uname = name.toUpperCase(); uname = name.toUpperCase();
if (settings.modules.enable_windbot && (uname.slice(0, 2) === 'AI' || (!settings.modules.enable_random_duel && uname === ''))) { if (settings.modules.windbot.enabled && (uname.slice(0, 2) === 'AI' || (!settings.modules.random_duel.enabled && uname === ''))) {
return ROOM_find_or_create_ai(name); return ROOM_find_or_create_ai(name);
} }
if (settings.modules.enable_random_duel && (uname === '' || uname === 'S' || uname === 'M' || uname === 'T')) { if (settings.modules.random_duel.enabled && (uname === '' || uname === 'S' || uname === 'M' || uname === 'T')) {
return ROOM_find_or_create_random(uname, player_ip); return ROOM_find_or_create_random(uname, player_ip);
} }
if (room = ROOM_find_by_name(name)) { if (room = ROOM_find_by_name(name)) {
...@@ -419,7 +419,7 @@ ...@@ -419,7 +419,7 @@
this.welcome = ''; this.welcome = '';
this.scores = {}; this.scores = {};
ROOM_all.push(this); ROOM_all.push(this);
this.hostinfo || (this.hostinfo = settings.modules.default_room_info); this.hostinfo || (this.hostinfo = settings.hostinfo);
if (settings.lflist.length) { if (settings.lflist.length) {
if (this.hostinfo.rule === 1 && this.hostinfo.lflist === 0) { if (this.hostinfo.rule === 1 && this.hostinfo.lflist === 0) {
this.hostinfo.lflist = _.findIndex(settings.lflist, function(list) { this.hostinfo.lflist = _.findIndex(settings.lflist, function(list) {
...@@ -542,7 +542,7 @@ ...@@ -542,7 +542,7 @@
this.process.stdout.once('data', (function(_this) { this.process.stdout.once('data', (function(_this) {
return function(data) { return function(data) {
_this.established = true; _this.established = true;
if (!_this["private"] && settings.modules.enable_websocket_roomlist) { if (!_this["private"] && settings.modules.http.websocket_roomlist) {
roomlist.create(_this); roomlist.create(_this);
} }
_this.port = parseInt(data); _this.port = parseInt(data);
...@@ -623,7 +623,7 @@ ...@@ -623,7 +623,7 @@
})(this)); })(this));
} }
} }
if (this.player_datas.length && settings.modules.enable_cloud_replay) { if (this.player_datas.length && settings.modules.cloud_replay.enabled) {
replay_id = this.cloud_replay_id; replay_id = this.cloud_replay_id;
if (this.has_ygopro_error) { if (this.has_ygopro_error) {
log_rep_id = true; log_rep_id = true;
...@@ -669,7 +669,7 @@ ...@@ -669,7 +669,7 @@
if (index !== -1) { if (index !== -1) {
ROOM_all[index] = null; ROOM_all[index] = null;
} }
if (!this["private"] && !this.started && this.established && settings.modules.enable_websocket_roomlist) { if (!this["private"] && !this.started && this.established && settings.modules.http.websocket_roomlist) {
roomlist["delete"](this.name); roomlist["delete"](this.name);
} }
}; };
...@@ -699,7 +699,7 @@ ...@@ -699,7 +699,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://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))
}, (function(_this) { }, (function(_this) {
return function(error, response, body) { return function(error, response, body) {
if (error) { if (error) {
...@@ -724,7 +724,7 @@ ...@@ -724,7 +724,7 @@
} }
} }
if (this.established) { if (this.established) {
if (!this["private"] && !this.started && settings.modules.enable_websocket_roomlist) { if (!this["private"] && !this.started && settings.modules.http.websocket_roomlist) {
roomlist.update(this); roomlist.update(this);
} }
client.server.connect(this.port, '127.0.0.1', function() { client.server.connect(this.port, '127.0.0.1', function() {
...@@ -762,7 +762,7 @@ ...@@ -762,7 +762,7 @@
} }
if (this.players.length && !(this.windbot && client.is_host)) { if (this.players.length && !(this.windbot && client.is_host)) {
ygopro.stoc_send_chat_to_room(this, (client.name + " 离开了游戏") + (error ? ": " + error : '')); ygopro.stoc_send_chat_to_room(this, (client.name + " 离开了游戏") + (error ? ": " + error : ''));
if (!this["private"] && !this.started && settings.modules.enable_websocket_roomlist) { if (!this["private"] && !this.started && settings.modules.http.websocket_roomlist) {
roomlist.update(this); roomlist.update(this);
} }
} else { } else {
...@@ -857,7 +857,7 @@ ...@@ -857,7 +857,7 @@
client.destroy(); client.destroy();
return; return;
} }
if (settings.modules.enable_cloud_replay) { if (settings.modules.cloud_replay.enabled) {
client.open_cloud_replay = function(err, replay) { client.open_cloud_replay = function(err, replay) {
var buffer; var buffer;
if (err || !replay) { if (err || !replay) {
...@@ -1052,7 +1052,7 @@ ...@@ -1052,7 +1052,7 @@
var check, decrypted_buffer, finish, i, id, k, l, len, len1, name, ref, ref1, replay_id, room, secret, struct; var check, decrypted_buffer, finish, i, id, k, l, len, len1, name, ref, ref1, replay_id, room, secret, struct;
if (settings.modules.stop) { if (settings.modules.stop) {
ygopro.stoc_die(client, settings.modules.stop); ygopro.stoc_die(client, settings.modules.stop);
} else if (info.pass.toUpperCase() === "R" && settings.modules.enable_cloud_replay) { } else if (info.pass.toUpperCase() === "R" && settings.modules.cloud_replay.enabled) {
ygopro.stoc_send_chat(client, "以下是您近期的云录像,密码处输入 R#录像编号 即可观看", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "以下是您近期的云录像,密码处输入 R#录像编号 即可观看", ygopro.constants.COLORS.BABYBLUE);
redisdb.lrange(client.ip + ":replays", 0, 2, function(err, result) { redisdb.lrange(client.ip + ":replays", 0, 2, function(err, result) {
_.each(result, function(replay_id, id) { _.each(result, function(replay_id, id) {
...@@ -1074,7 +1074,7 @@ ...@@ -1074,7 +1074,7 @@
}); });
client.destroy(); client.destroy();
}), 500); }), 500);
} else if (info.pass.slice(0, 2).toUpperCase() === "R#" && settings.modules.enable_cloud_replay) { } else if (info.pass.slice(0, 2).toUpperCase() === "R#" && settings.modules.cloud_replay.enabled) {
replay_id = info.pass.split("#")[1]; replay_id = info.pass.split("#")[1];
if (replay_id > 0 && replay_id <= 9) { if (replay_id > 0 && replay_id <= 9) {
redisdb.lindex(client.ip + ":replays", replay_id - 1, function(err, replay_id) { redisdb.lindex(client.ip + ":replays", replay_id - 1, function(err, replay_id) {
...@@ -1092,7 +1092,7 @@ ...@@ -1092,7 +1092,7 @@
} else { } else {
ygopro.stoc_die(client, "没有找到录像"); ygopro.stoc_die(client, "没有找到录像");
} }
} else if (info.pass.toUpperCase() === "W" && settings.modules.enable_cloud_replay) { } else if (info.pass.toUpperCase() === "W" && settings.modules.cloud_replay.enabled) {
replay_id = Cloud_replay_ids[Math.floor(Math.random() * Cloud_replay_ids.length)]; replay_id = Cloud_replay_ids[Math.floor(Math.random() * Cloud_replay_ids.length)];
redisdb.hgetall("replay:" + replay_id, client.open_cloud_replay); redisdb.hgetall("replay:" + replay_id, client.open_cloud_replay);
} else if (info.version !== settings.version && (info.version !== 4921 || settings.version !== 4922)) { } else if (info.version !== settings.version && (info.version !== 4921 || settings.version !== 4922)) {
...@@ -1102,7 +1102,7 @@ ...@@ -1102,7 +1102,7 @@
code: settings.version code: settings.version
}); });
client.destroy(); client.destroy();
} else if (!info.pass.length && !settings.modules.enable_random_duel && !settings.modules.enable_windbot) { } else if (!info.pass.length && !settings.modules.random_duel.enabled && !settings.modules.windbot.enabled) {
ygopro.stoc_die(client, "房间名不能为空,请在主机密码处填写房间名"); ygopro.stoc_die(client, "房间名不能为空,请在主机密码处填写房间名");
} else if (info.pass.length && settings.modules.mycard.enabled && info.pass.slice(0, 3) !== 'AI#') { } else if (info.pass.length && settings.modules.mycard.enabled && info.pass.slice(0, 3) !== 'AI#') {
ygopro.stoc_send_chat(client, '正在读取用户信息...', ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, '正在读取用户信息...', ygopro.constants.COLORS.BABYBLUE);
...@@ -1277,7 +1277,7 @@ ...@@ -1277,7 +1277,7 @@
} else if (room.error) { } else if (room.error) {
ygopro.stoc_die(client, room.error); ygopro.stoc_die(client, room.error);
} else if (room.started) { } else if (room.started) {
if (settings.modules.enable_halfway_watch) { if (settings.modules.cloud_replay.enable_halfway_watch) {
client.setTimeout(300000); client.setTimeout(300000);
client.rid = _.indexOf(ROOM_all, room); client.rid = _.indexOf(ROOM_all, room);
client.is_post_watcher = true; client.is_post_watcher = true;
...@@ -1344,14 +1344,14 @@ ...@@ -1344,14 +1344,14 @@
}); });
recorder.on('data', function(data) { recorder.on('data', function(data) {
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!(room && settings.modules.enable_cloud_replay)) { if (!(room && settings.modules.cloud_replay.enabled)) {
return; return;
} }
room.recorder_buffers.push(data); room.recorder_buffers.push(data);
}); });
recorder.on('error', function(error) {}); recorder.on('error', function(error) {});
} }
if (settings.modules.enable_halfway_watch && !room.watcher) { if (settings.modules.cloud_replay.enable_halfway_watch && !room.watcher) {
room.watcher = watcher = net.connect(room.port, function() { room.watcher = watcher = net.connect(room.port, function() {
ygopro.ctos_send(watcher, 'PLAYER_INFO', { ygopro.ctos_send(watcher, 'PLAYER_INFO', {
name: "the Big Brother" name: "the Big Brother"
...@@ -1385,7 +1385,7 @@ ...@@ -1385,7 +1385,7 @@
load_dialogues = function() { load_dialogues = function() {
request({ request({
url: settings.modules.dialogues, url: settings.modules.dialogues.get,
json: true json: true
}, function(error, response, body) { }, function(error, response, body) {
if (_.isString(body)) { if (_.isString(body)) {
...@@ -1399,7 +1399,7 @@ ...@@ -1399,7 +1399,7 @@
}); });
}; };
if (settings.modules.dialogues) { if (settings.modules.dialogues.get) {
load_dialogues(); load_dialogues();
} }
...@@ -1469,7 +1469,7 @@ ...@@ -1469,7 +1469,7 @@
ygopro.stoc_send_chat_to_room(room, "背水一战!", ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, "背水一战!", ygopro.constants.COLORS.PINK);
} }
} }
if (settings.modules.dialogues) { if (settings.modules.dialogues.enabled) {
if (ygopro.constants.MSG[msg] === 'SUMMONING' || ygopro.constants.MSG[msg] === 'SPSUMMONING') { if (ygopro.constants.MSG[msg] === 'SUMMONING' || ygopro.constants.MSG[msg] === 'SPSUMMONING') {
card = buffer.readUInt32LE(1); card = buffer.readUInt32LE(1);
if (settings.dialogues[card]) { if (settings.dialogues[card]) {
...@@ -1568,20 +1568,20 @@ ...@@ -1568,20 +1568,20 @@
}; };
ygopro.stoc_send_random_tip = function(client) { ygopro.stoc_send_random_tip = function(client) {
if (settings.modules.tips) { if (settings.modules.tips.enabled && settings.tips.length) {
ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]); ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]);
} }
}; };
ygopro.stoc_send_random_tip_to_room = function(room) { ygopro.stoc_send_random_tip_to_room = function(room) {
if (settings.modules.tips) { if (settings.modules.tips.enabled && settings.tips.length) {
ygopro.stoc_send_chat_to_room(room, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]); ygopro.stoc_send_chat_to_room(room, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]);
} }
}; };
load_tips = function() { load_tips = function() {
request({ request({
url: settings.modules.tips, url: settings.modules.tips.get,
json: true json: true
}, function(error, response, body) { }, function(error, response, body) {
if (_.isString(body)) { if (_.isString(body)) {
...@@ -1595,7 +1595,7 @@ ...@@ -1595,7 +1595,7 @@
}); });
}; };
if (settings.modules.tips) { if (settings.modules.tips.get) {
load_tips(); load_tips();
setInterval(function() { setInterval(function() {
var k, len, room; var k, len, room;
...@@ -1619,7 +1619,7 @@ ...@@ -1619,7 +1619,7 @@
if (!room.started) { if (!room.started) {
room.started = true; room.started = true;
room.start_time = moment().format(); room.start_time = moment().format();
if (settings.modules.enable_websocket_roomlist && !room["private"]) { if (settings.modules.http.websocket_roomlist && !room["private"]) {
roomlist["delete"](room.name); roomlist["delete"](room.name);
} }
room.dueling_players = []; room.dueling_players = [];
...@@ -1637,7 +1637,7 @@ ...@@ -1637,7 +1637,7 @@
}); });
} }
} }
if (settings.modules.tips) { if (settings.modules.tips.enabled) {
ygopro.stoc_send_random_tip(client); ygopro.stoc_send_random_tip(client);
} }
if (settings.modules.deck_log.enabled && client.main && client.main.length && !client.deck_saved && client.ip !== '::ffff:127.0.0.1') { if (settings.modules.deck_log.enabled && client.main && client.main.length && !client.deck_saved && client.ip !== '::ffff:127.0.0.1') {
...@@ -1694,20 +1694,20 @@ ...@@ -1694,20 +1694,20 @@
if (!settings.modules.mycard.enabled) { if (!settings.modules.mycard.enabled) {
ygopro.stoc_send_chat(client, "/roomname 显示当前房间的名字"); ygopro.stoc_send_chat(client, "/roomname 显示当前房间的名字");
} }
if (settings.modules.enable_windbot) { if (settings.modules.windbot.enabled) {
ygopro.stoc_send_chat(client, "/ai 添加一个AI,/ai 角色名 可指定添加的角色"); ygopro.stoc_send_chat(client, "/ai 添加一个AI,/ai 角色名 可指定添加的角色");
} }
if (settings.modules.tips) { if (settings.modules.tips.enabled) {
ygopro.stoc_send_chat(client, "/tip 显示一条提示"); ygopro.stoc_send_chat(client, "/tip 显示一条提示");
} }
break; break;
case '/tip': case '/tip':
if (settings.modules.tips) { if (settings.modules.tips.enabled) {
ygopro.stoc_send_random_tip(client); ygopro.stoc_send_random_tip(client);
} }
break; break;
case '/ai': case '/ai':
if (settings.modules.enable_windbot) { if (settings.modules.windbot.enabled) {
if (name = cmd[1]) { if (name = cmd[1]) {
windbot = _.sample(_.filter(settings.modules.windbots, function(w) { windbot = _.sample(_.filter(settings.modules.windbots, function(w) {
return w.name === name || w.deck === name; return w.name === name || w.deck === name;
...@@ -1891,7 +1891,7 @@ ...@@ -1891,7 +1891,7 @@
if (client.is_host) { if (client.is_host) {
room.waiting_for_player = room.waiting_for_player2; room.waiting_for_player = room.waiting_for_player2;
} }
room.last_active_time = moment().subtract(settings.modules.hang_timeout - 19, 's'); room.last_active_time = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's');
}); });
ygopro.ctos_follow('TP_RESULT', false, function(buffer, info, client, server) { ygopro.ctos_follow('TP_RESULT', false, function(buffer, info, client, server) {
...@@ -1914,7 +1914,7 @@ ...@@ -1914,7 +1914,7 @@
} else { } else {
room.waiting_for_player2 = client; room.waiting_for_player2 = client;
} }
room.last_active_time = moment().subtract(settings.modules.hang_timeout - 19, 's'); room.last_active_time = moment().subtract(settings.modules.random_duel.hang_timeout - 19, 's');
}); });
ygopro.stoc_follow('SELECT_TP', false, function(buffer, info, client, server) { ygopro.stoc_follow('SELECT_TP', false, function(buffer, info, client, server) {
...@@ -1947,7 +1947,7 @@ ...@@ -1947,7 +1947,7 @@
if (!room) { if (!room) {
return settings.modules.tournament_mode.enabled; return settings.modules.tournament_mode.enabled;
} }
if (settings.modules.enable_cloud_replay && room.random_type) { if (settings.modules.cloud_replay.enabled && room.random_type) {
Cloud_replay_ids.push(room.cloud_replay_id); Cloud_replay_ids.push(room.cloud_replay_id);
} }
if (settings.modules.tournament_mode.enabled) { if (settings.modules.tournament_mode.enabled) {
...@@ -1974,7 +1974,7 @@ ...@@ -1974,7 +1974,7 @@
settings.modules.tournament_mode.duel_log.push(duellog); settings.modules.tournament_mode.duel_log.push(duellog);
nconf.myset(settings, "modules:tournament_mode:duel_log", settings.modules.tournament_mode.duel_log); nconf.myset(settings, "modules:tournament_mode:duel_log", settings.modules.tournament_mode.duel_log);
} }
if (settings.modules.enable_cloud_replay) { if (settings.modules.cloud_replay.enabled) {
ygopro.stoc_send_chat(client, "本场比赛云录像:R#" + room.cloud_replay_id + "。将于本局结束后可播放。", ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "本场比赛云录像:R#" + room.cloud_replay_id + "。将于本局结束后可播放。", ygopro.constants.COLORS.BABYBLUE);
} }
return true; return true;
...@@ -1983,7 +1983,7 @@ ...@@ -1983,7 +1983,7 @@
} }
}); });
if (settings.modules.enable_random_duel) { if (settings.modules.random_duel.enabled) {
setInterval(function() { setInterval(function() {
var k, len, room, time_passed; var k, len, room, time_passed;
for (k = 0, len = ROOM_all.length; k < len; k++) { for (k = 0, len = ROOM_all.length; k < len; k++) {
...@@ -1992,20 +1992,20 @@ ...@@ -1992,20 +1992,20 @@
continue; continue;
} }
time_passed = Math.floor((moment() - room.last_active_time) / 1000); time_passed = Math.floor((moment() - room.last_active_time) / 1000);
if (time_passed >= settings.modules.hang_timeout) { if (time_passed >= settings.modules.random_duel.hang_timeout) {
room.last_active_time = moment(); room.last_active_time = moment();
ROOM_ban_player(room.waiting_for_player.name, room.waiting_for_player.ip, "挂机"); ROOM_ban_player(room.waiting_for_player.name, room.waiting_for_player.ip, "挂机");
ygopro.stoc_send_chat_to_room(room, room.waiting_for_player.name + " 被系统请出了房间", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat_to_room(room, room.waiting_for_player.name + " 被系统请出了房间", ygopro.constants.COLORS.RED);
room.waiting_for_player.server.destroy(); room.waiting_for_player.server.destroy();
} else if (time_passed >= (settings.modules.hang_timeout - 20) && !(time_passed % 10)) { } else if (time_passed >= (settings.modules.random_duel.hang_timeout - 20) && !(time_passed % 10)) {
ygopro.stoc_send_chat_to_room(room, room.waiting_for_player.name + " 已经很久没有操作了,若继续挂机,将于" + (settings.modules.hang_timeout - time_passed) + "秒后被请出房间", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat_to_room(room, room.waiting_for_player.name + " 已经很久没有操作了,若继续挂机,将于" + (settings.modules.random_duel.hang_timeout - time_passed) + "秒后被请出房间", ygopro.constants.COLORS.RED);
} }
} }
}, 1000); }, 1000);
} }
if (settings.modules.spawn_windbot) { if (settings.modules.windbot.spawn) {
windbot_process = spawn('mono', ['WindBot.exe', settings.modules.windbot_port], { windbot_process = spawn('mono', ['WindBot.exe', settings.modules.windbot.port], {
cwd: 'windbot' cwd: 'windbot'
}); });
windbot_process.on('error', function(err) { windbot_process.on('error', function(err) {
...@@ -2037,7 +2037,7 @@ ...@@ -2037,7 +2037,7 @@
u = url.parse(request.url, parseQueryString); u = url.parse(request.url, parseQueryString);
pass_validated = u.query.pass === settings.modules.http.password; pass_validated = u.query.pass === settings.modules.http.password;
if (u.pathname === '/api/getrooms') { if (u.pathname === '/api/getrooms') {
if (!pass_validated && !settings.modules.enable_public_roomlist) { if (!pass_validated && !settings.modules.http.public_roomlist) {
response.writeHead(200); response.writeHead(200);
response.end(addCallback(u.query.callback, '{"rooms":[{"roomid":"0","roomname":"密码错误","needpass":"true"}]}')); response.end(addCallback(u.query.callback, '{"rooms":[{"roomid":"0","roomname":"密码错误","needpass":"true"}]}'));
} else { } else {
...@@ -2121,11 +2121,11 @@ ...@@ -2121,11 +2121,11 @@
} else if (u.query.loadtips) { } else if (u.query.loadtips) {
load_tips(); load_tips();
response.writeHead(200); response.writeHead(200);
response.end(addCallback(u.query.callback, "['loading tip', '" + settings.modules.tips + "']")); response.end(addCallback(u.query.callback, "['loading tip', '" + settings.modules.tips.get + "']"));
} else if (u.query.loaddialogues) { } else if (u.query.loaddialogues) {
load_dialogues(); load_dialogues();
response.writeHead(200); response.writeHead(200);
response.end(addCallback(u.query.callback, "['loading dialogues', '" + settings.modules.dialogues + "']")); response.end(addCallback(u.query.callback, "['loading dialogues', '" + settings.modules.dialogues.get + "']"));
} else if (u.query.ban) { } else if (u.query.ban) {
ban_user(u.query.ban); ban_user(u.query.ban);
response.writeHead(200); response.writeHead(200);
......
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