Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
srvpro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
srvpro
Commits
44e3a13b
Commit
44e3a13b
authored
Nov 10, 2017
by
nanahira
Committed by
GitHub
Nov 10, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1 from moecube/master
mg
parents
4e22671d
c12e2ad3
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
745 additions
and
51 deletions
+745
-51
LICENSE
LICENSE
+661
-0
README.md
README.md
+24
-7
config.json
config.json
+6
-0
ygopro-pre.js
ygopro-pre.js
+3
-3
ygopro-server.coffee
ygopro-server.coffee
+29
-18
ygopro-server.js
ygopro-server.js
+20
-21
ygopro.coffee
ygopro.coffee
+1
-1
ygopro.js
ygopro.js
+1
-1
No files found.
LICENSE
0 → 100644
View file @
44e3a13b
This diff is collapsed.
Click to expand it.
README.md
View file @
44e3a13b
##
ygopro-server
##
SRVPro
一个YGOPro服务器。
一个YGOPro服务器。
现用于
[
萌卡
](
https://mycard.moe/
)
和
[
YGOP
RO 233服
](
http://mercury233.me/ygosrv233
/
)
。
现用于
[
萌卡
](
https://mycard.moe/
)
和
[
YGOP
ro 233服
](
https://ygo233.com
/
)
。
### 支持功能
### 支持功能
*
Linux上运行
*
Linux上运行
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
*
广播消息
*
广播消息
*
召唤台词
*
召唤台词
*
先行卡一键更新
*
先行卡一键更新
*
Wind
b
ot在线AI
*
Wind
B
ot在线AI
*
萌卡用户登陆
*
萌卡用户登陆
### 不支持功能
### 不支持功能
...
@@ -21,13 +21,12 @@
...
@@ -21,13 +21,12 @@
### 使用方法
### 使用方法
*
可参考
[
wiki
](
https://github.com/mercury233/ygopro-server/wiki
)
安装
*
可参考
[
wiki
](
https://github.com/mercury233/ygopro-server/wiki
)
安装
*
手动安装:
*
手动安装:
*
安装修改后的YGOPro服务端:https://github.com/m
ycard
/ygopro/tree/server
*
安装修改后的YGOPro服务端:https://github.com/m
oecube
/ygopro/tree/server
*
`git clone https://github.com/m
ycard/ygopro-server
.git`
*
`git clone https://github.com/m
oecube/srvpro
.git`
*
`cd
ygopro-server
`
*
`cd
srvpro
`
*
`npm install`
*
`npm install`
*
将
`config.json`
复制为
`config.user.json`
并进行修改
*
将
`config.json`
复制为
`config.user.json`
并进行修改
*
`port`
为你想要的端口
*
`port`
为你想要的端口
*
`modules.stop`
为文本时,表示服务器关闭
*
~~更多选项参见wiki~~
*
~~更多选项参见wiki~~
*
`node ygopro-server.js`
即可运行
*
`node ygopro-server.js`
即可运行
*
简易的控制台在 http://mercury233.me/ygosrv233/dashboard.html
*
简易的控制台在 http://mercury233.me/ygosrv233/dashboard.html
...
@@ -61,3 +60,21 @@
...
@@ -61,3 +60,21 @@
*
expansions updater
*
expansions updater
*
user and admin account system
*
user and admin account system
*
new database for cloud replay
*
new database for cloud replay
### License
SRVPro
Copyright (C) 2013-2017 MoeCube Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see
<https://www.gnu.org/licenses/>
.
config.json
View file @
44e3a13b
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
},
},
"random_duel"
:
{
"random_duel"
:
{
"enabled"
:
false
,
"enabled"
:
false
,
"no_rematch_check"
:
false
,
"hang_timeout"
:
90
"hang_timeout"
:
90
},
},
"cloud_replay"
:
{
"cloud_replay"
:
{
...
@@ -89,6 +90,11 @@
...
@@ -89,6 +90,11 @@
"password"
:
"123456"
,
"password"
:
"123456"
,
"port"
:
7933
"port"
:
7933
},
},
"test_mode"
:
{
"watch_public_hand"
:
false
,
"no_connect_count_limit"
:
false
,
"no_ban_player"
:
false
},
"pre_util"
:
{
"pre_util"
:
{
"enabled"
:
false
,
"enabled"
:
false
,
"port"
:
7944
,
"port"
:
7944
,
...
...
ygopro-pre.js
View file @
44e3a13b
...
@@ -344,7 +344,7 @@ var packDatas = function () {
...
@@ -344,7 +344,7 @@ var packDatas = function () {
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
script" "
'
+
config
.
db_path
+
'
expansions/script"
'
);
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
script" "
'
+
config
.
db_path
+
'
expansions/script"
'
);
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
pics" "
'
+
config
.
db_path
+
'
expansions/pics"
'
);
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
pics" "
'
+
config
.
db_path
+
'
expansions/pics"
'
);
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
pics/field" "
'
+
config
.
db_path
+
'
picture/field"
'
);
execSync
(
'
cp -r "
'
+
config
.
db_path
+
'
pics/field" "
'
+
config
.
db_path
+
'
picture/field"
'
);
var
proc
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!mobile.cdb
"
,
"
-x!cdb
"
,
"
-x!script
"
,
"
-x!pics
"
,
"
-x!picture
"
,
"
ygosrv233-pre.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
var
proc
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!mobile.cdb
"
,
"
-x!cdb
"
,
"
-x!script
"
,
"
-x!pics
"
,
"
-x!
expansions/pics/thumbnail
"
,
"
-x!
picture
"
,
"
ygosrv233-pre.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
proc
.
stdout
.
setEncoding
(
'
utf8
'
);
proc
.
stdout
.
setEncoding
(
'
utf8
'
);
proc
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
proc
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
//sendResponse("7z: "+data);
//sendResponse("7z: "+data);
...
@@ -358,7 +358,7 @@ var packDatas = function () {
...
@@ -358,7 +358,7 @@ var packDatas = function () {
execSync
(
'
rm -rf "
'
+
config
.
db_path
+
'
expansions/script" "
'
+
config
.
db_path
+
'
expansions/pics"
'
);
execSync
(
'
rm -rf "
'
+
config
.
db_path
+
'
expansions/script" "
'
+
config
.
db_path
+
'
expansions/pics"
'
);
sendResponse
(
"
电脑更新包打包完成。
"
);
sendResponse
(
"
电脑更新包打包完成。
"
);
});
});
var
proc2
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!expansions
"
,
"
-x!cdb
"
,
"
-x!pics/thumbnail
"
,
"
-x!picture
"
,
"
ygosrv233-pre-mobile.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
var
proc2
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!expansions
/pics
"
,
"
-x!expansions/script
"
,
"
-x!cdb
"
,
"
-x!pics/thumbnail
"
,
"
-x!picture
"
,
"
ygosrv233-pre-mobile.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
proc2
.
stdout
.
setEncoding
(
'
utf8
'
);
proc2
.
stdout
.
setEncoding
(
'
utf8
'
);
proc2
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
proc2
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
//sendResponse("7z: "+data);
//sendResponse("7z: "+data);
...
@@ -371,7 +371,7 @@ var packDatas = function () {
...
@@ -371,7 +371,7 @@ var packDatas = function () {
execSync
(
'
mv -f "
'
+
config
.
db_path
+
'
ygosrv233-pre-mobile.zip" "
'
+
file_path
+
'
"
'
);
execSync
(
'
mv -f "
'
+
config
.
db_path
+
'
ygosrv233-pre-mobile.zip" "
'
+
file_path
+
'
"
'
);
sendResponse
(
"
手机更新包打包完成。
"
);
sendResponse
(
"
手机更新包打包完成。
"
);
});
});
var
proc3
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!
mobile.cdb
"
,
"
-x!
expansions
"
,
"
-x!pics
"
,
"
ygosrv233-pre-2.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
var
proc3
=
spawn
(
"
7za
"
,
[
"
a
"
,
"
-x!*.zip
"
,
"
-x!expansions
"
,
"
-x!pics
"
,
"
ygosrv233-pre-2.zip
"
,
"
*
"
],
{
cwd
:
config
.
db_path
,
env
:
process
.
env
});
proc3
.
stdout
.
setEncoding
(
'
utf8
'
);
proc3
.
stdout
.
setEncoding
(
'
utf8
'
);
proc3
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
proc3
.
stdout
.
on
(
'
data
'
,
function
(
data
)
{
//sendResponse("7z: "+data);
//sendResponse("7z: "+data);
...
...
ygopro-server.coffee
View file @
44e3a13b
...
@@ -163,6 +163,7 @@ ban_user = (name) ->
...
@@ -163,6 +163,7 @@ ban_user = (name) ->
# automatically ban user to use random duel
# automatically ban user to use random duel
ROOM_ban_player
=
(
name
,
ip
,
reason
,
countadd
=
1
)
->
ROOM_ban_player
=
(
name
,
ip
,
reason
,
countadd
=
1
)
->
return
if
settings
.
modules
.
test_mode
.
no_ban_player
bannedplayer
=
_
.
find
ROOM_players_banned
,
(
bannedplayer
)
->
bannedplayer
=
_
.
find
ROOM_players_banned
,
(
bannedplayer
)
->
ip
==
bannedplayer
.
ip
ip
==
bannedplayer
.
ip
if
bannedplayer
if
bannedplayer
...
@@ -211,7 +212,8 @@ ROOM_find_or_create_random = (type, player_ip)->
...
@@ -211,7 +212,8 @@ ROOM_find_or_create_random = (type, player_ip)->
return
room
and
room
.
random_type
!=
''
and
!
room
.
started
and
return
room
and
room
.
random_type
!=
''
and
!
room
.
started
and
((
type
==
''
and
room
.
random_type
!=
'T'
)
or
room
.
random_type
==
type
)
and
((
type
==
''
and
room
.
random_type
!=
'T'
)
or
room
.
random_type
==
type
)
and
room
.
get_playing_player
().
length
<
max_player
and
room
.
get_playing_player
().
length
<
max_player
and
(
room
.
get_host
()
==
null
or
room
.
get_host
().
ip
!=
ROOM_players_oppentlist
[
player_ip
])
and
(
settings
.
modules
.
random_duel
.
no_rematch_check
or
room
.
get_host
()
==
null
or
room
.
get_host
().
ip
!=
ROOM_players_oppentlist
[
player_ip
])
and
(
playerbanned
==
room
.
deprecated
or
type
==
'T'
)
(
playerbanned
==
room
.
deprecated
or
type
==
'T'
)
if
result
if
result
result
.
welcome
=
'${random_duel_enter_room_waiting}'
result
.
welcome
=
'${random_duel_enter_room_waiting}'
...
@@ -596,7 +598,7 @@ class Room
...
@@ -596,7 +598,7 @@ class Room
net
.
createServer
(
client
)
->
net
.
createServer
(
client
)
->
client
.
ip
=
client
.
remoteAddress
client
.
ip
=
client
.
remoteAddress
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
or
0
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
or
0
if
client
.
ip
!=
'::ffff:127.0.0.1'
if
!
settings
.
modules
.
test_mode
.
no_connect_count_limit
and
client
.
ip
!=
'::ffff:127.0.0.1'
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]
...
@@ -862,6 +864,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)->
...
@@ -862,6 +864,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)->
ygopro
.
ctos_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
ctos_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
#log.info info
#log.info info
info
.
pass
=
info
.
pass
.
trim
()
if
settings
.
modules
.
stop
if
settings
.
modules
.
stop
ygopro
.
stoc_die
(
client
,
settings
.
modules
.
stop
)
ygopro
.
stoc_die
(
client
,
settings
.
modules
.
stop
)
...
@@ -905,7 +908,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -905,7 +908,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
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
and
(
info
.
version
<
9020
or
settings
.
version
!=
4927
)
#强行兼容23333版
else
if
info
.
version
!=
settings
.
version
#
and (info.version < 9020 or settings.version != 4927) #强行兼容23333版
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,
{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,
{
msg
:
4
msg
:
4
...
@@ -922,12 +925,12 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -922,12 +925,12 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
ygopro
.
stoc_die
(
client
,
'${invalid_password_length}'
)
ygopro
.
stoc_die
(
client
,
'${invalid_password_length}'
)
return
return
if
info
.
version
>=
9020
and
settings
.
version
==
4927
#强行兼容23333版
#
if info.version >= 9020 and settings.version == 4927 #强行兼容23333版
info
.
version
=
settings
.
version
#
info.version = settings.version
struct
=
ygopro
.
structs
[
"CTOS_JoinGame"
]
#
struct = ygopro.structs["CTOS_JoinGame"]
struct
.
_setBuff
(
buffer
)
#
struct._setBuff(buffer)
struct
.
set
(
"version"
,
info
.
version
)
#
struct.set("version", info.version)
buffer
=
struct
.
buffer
#
buffer = struct.buffer
buffer
=
new
Buffer
(
info
.
pass
[
0
...
8
],
'base64'
)
buffer
=
new
Buffer
(
info
.
pass
[
0
...
8
],
'base64'
)
...
@@ -1097,13 +1100,13 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -1097,13 +1100,13 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
ygopro
.
stoc_die
(
client
,
"${invalid_password_room}"
)
ygopro
.
stoc_die
(
client
,
"${invalid_password_room}"
)
else
else
if
info
.
version
>=
9020
and
settings
.
version
==
4927
#强行兼容23333版
#
if info.version >= 9020 and settings.version == 4927 #强行兼容23333版
info
.
version
=
settings
.
version
#
info.version = settings.version
struct
=
ygopro
.
structs
[
"CTOS_JoinGame"
]
#
struct = ygopro.structs["CTOS_JoinGame"]
struct
.
_setBuff
(
buffer
)
#
struct._setBuff(buffer)
struct
.
set
(
"version"
,
info
.
version
)
#
struct.set("version", info.version)
buffer
=
struct
.
buffer
#
buffer = struct.buffer
#ygopro.stoc_send_chat(client, "看起来你是YGOMobile的用户,请记得更新先行卡补丁,否则会看到白卡", ygopro.constants.COLORS.GREEN)
#
#ygopro.stoc_send_chat(client, "看起来你是YGOMobile的用户,请记得更新先行卡补丁,否则会看到白卡", ygopro.constants.COLORS.GREEN)
#log.info 'join_game',info.pass, client.name
#log.info 'join_game',info.pass, client.name
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
...
@@ -1175,7 +1178,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -1175,7 +1178,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
return
return
if
settings
.
modules
.
cloud_replay
.
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
=
if
settings
.
modules
.
test_mode
.
watch_public_hand
then
room
.
recorder
else
net
.
connect
room
.
port
,
->
ygopro
.
ctos_send
watcher
,
'PLAYER_INFO'
,
{
ygopro
.
ctos_send
watcher
,
'PLAYER_INFO'
,
{
name
:
"the Big Brother"
name
:
"the Big Brother"
}
}
...
@@ -1767,7 +1770,15 @@ if settings.modules.mycard.enabled
...
@@ -1767,7 +1770,15 @@ if settings.modules.mycard.enabled
# spawn windbot
# spawn windbot
if
settings
.
modules
.
windbot
.
spawn
if
settings
.
modules
.
windbot
.
spawn
windbot_process
=
spawn
'mono'
,
[
'WindBot.exe'
,
settings
.
modules
.
windbot
.
port
],
{
cwd
:
'windbot'
}
if
/^win/
.
test
(
process
.
platform
)
windbot_bin
=
'WindBot.exe'
windbot_parameters
=
[]
else
windbot_bin
=
'mono'
windbot_parameters
=
[
'WindBot.exe'
]
windbot_parameters
.
push
(
'ServerMode=true'
)
windbot_parameters
.
push
(
'ServerPort='
+
settings
.
modules
.
windbot
.
port
)
windbot_process
=
spawn
windbot_bin
,
windbot_parameters
,
{
cwd
:
'windbot'
}
windbot_process
.
on
'error'
,
(
err
)
->
windbot_process
.
on
'error'
,
(
err
)
->
log
.
warn
'WindBot ERROR'
,
err
log
.
warn
'WindBot ERROR'
,
err
return
return
...
...
ygopro-server.js
View file @
44e3a13b
// Generated by CoffeeScript 1.12.2
// Generated by CoffeeScript 1.12.2
(
function
()
{
(
function
()
{
var
Cloud_replay_ids
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
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
,
_
,
addCallback
,
ban_user
,
bunyan
,
cppversion
,
crypto
,
date
,
defaultconfig
,
execFile
,
fs
,
geoip
,
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
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
settings
,
spawn
,
spawnSync
,
url
,
users_cache
,
wait_room_start
,
windbot_process
,
ygopro
,
zlib
;
var
Cloud_replay_ids
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
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
,
_
,
addCallback
,
ban_user
,
bunyan
,
cppversion
,
crypto
,
date
,
defaultconfig
,
execFile
,
fs
,
geoip
,
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
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
settings
,
spawn
,
spawnSync
,
url
,
users_cache
,
wait_room_start
,
windbot_
bin
,
windbot_parameters
,
windbot_
process
,
ygopro
,
zlib
;
net
=
require
(
'
net
'
);
net
=
require
(
'
net
'
);
...
@@ -221,6 +221,9 @@
...
@@ -221,6 +221,9 @@
if
(
countadd
==
null
)
{
if
(
countadd
==
null
)
{
countadd
=
1
;
countadd
=
1
;
}
}
if
(
settings
.
modules
.
test_mode
.
no_ban_player
)
{
return
;
}
bannedplayer
=
_
.
find
(
ROOM_players_banned
,
function
(
bannedplayer
)
{
bannedplayer
=
_
.
find
(
ROOM_players_banned
,
function
(
bannedplayer
)
{
return
ip
===
bannedplayer
.
ip
;
return
ip
===
bannedplayer
.
ip
;
});
});
...
@@ -292,7 +295,7 @@
...
@@ -292,7 +295,7 @@
max_player
=
type
===
'
T
'
?
4
:
2
;
max_player
=
type
===
'
T
'
?
4
:
2
;
playerbanned
=
bannedplayer
&&
bannedplayer
.
count
>
3
&&
moment
()
<
bannedplayer
.
time
;
playerbanned
=
bannedplayer
&&
bannedplayer
.
count
>
3
&&
moment
()
<
bannedplayer
.
time
;
result
=
_
.
find
(
ROOM_all
,
function
(
room
)
{
result
=
_
.
find
(
ROOM_all
,
function
(
room
)
{
return
room
&&
room
.
random_type
!==
''
&&
!
room
.
started
&&
((
type
===
''
&&
room
.
random_type
!==
'
T
'
)
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
room
.
get_host
()
===
null
||
room
.
get_host
().
ip
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
||
type
===
'
T
'
);
return
room
&&
room
.
random_type
!==
''
&&
!
room
.
started
&&
((
type
===
''
&&
room
.
random_type
!==
'
T
'
)
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
settings
.
modules
.
random_duel
.
no_rematch_check
||
room
.
get_host
()
===
null
||
room
.
get_host
().
ip
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
||
type
===
'
T
'
);
});
});
if
(
result
)
{
if
(
result
)
{
result
.
welcome
=
'
${random_duel_enter_room_waiting}
'
;
result
.
welcome
=
'
${random_duel_enter_room_waiting}
'
;
...
@@ -799,7 +802,7 @@
...
@@ -799,7 +802,7 @@
var
connect_count
,
server
;
var
connect_count
,
server
;
client
.
ip
=
client
.
remoteAddress
;
client
.
ip
=
client
.
remoteAddress
;
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
||
0
;
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
||
0
;
if
(
client
.
ip
!==
'
::ffff:127.0.0.1
'
)
{
if
(
!
settings
.
modules
.
test_mode
.
no_connect_count_limit
&&
client
.
ip
!==
'
::ffff:127.0.0.1
'
)
{
connect_count
++
;
connect_count
++
;
}
}
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
;
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
;
...
@@ -1086,7 +1089,8 @@
...
@@ -1086,7 +1089,8 @@
});
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
j
,
k
,
len
,
len1
,
name
,
ref
,
ref1
,
replay_id
,
room
,
secret
,
struct
;
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
j
,
k
,
len
,
len1
,
name
,
ref
,
ref1
,
replay_id
,
room
,
secret
;
info
.
pass
=
info
.
pass
.
trim
();
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
.
cloud_replay
.
enabled
)
{
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
R
"
&&
settings
.
modules
.
cloud_replay
.
enabled
)
{
...
@@ -1132,7 +1136,7 @@
...
@@ -1132,7 +1136,7 @@
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
W
"
&&
settings
.
modules
.
cloud_replay
.
enabled
)
{
}
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
<
9020
||
settings
.
version
!==
4927
)
)
{
}
else
if
(
info
.
version
!==
settings
.
version
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
4
,
msg
:
4
,
...
@@ -1147,13 +1151,6 @@
...
@@ -1147,13 +1151,6 @@
ygopro
.
stoc_die
(
client
,
'
${invalid_password_length}
'
);
ygopro
.
stoc_die
(
client
,
'
${invalid_password_length}
'
);
return
;
return
;
}
}
if
(
info
.
version
>=
9020
&&
settings
.
version
===
4927
)
{
info
.
version
=
settings
.
version
;
struct
=
ygopro
.
structs
[
"
CTOS_JoinGame
"
];
struct
.
_setBuff
(
buffer
);
struct
.
set
(
"
version
"
,
info
.
version
);
buffer
=
struct
.
buffer
;
}
buffer
=
new
Buffer
(
info
.
pass
.
slice
(
0
,
8
),
'
base64
'
);
buffer
=
new
Buffer
(
info
.
pass
.
slice
(
0
,
8
),
'
base64
'
);
if
(
buffer
.
length
!==
6
)
{
if
(
buffer
.
length
!==
6
)
{
ygopro
.
stoc_die
(
client
,
'
${invalid_password_payload}
'
);
ygopro
.
stoc_die
(
client
,
'
${invalid_password_payload}
'
);
...
@@ -1333,13 +1330,6 @@
...
@@ -1333,13 +1330,6 @@
}
else
if
(
info
.
pass
.
length
&&
!
ROOM_validate
(
info
.
pass
))
{
}
else
if
(
info
.
pass
.
length
&&
!
ROOM_validate
(
info
.
pass
))
{
ygopro
.
stoc_die
(
client
,
"
${invalid_password_room}
"
);
ygopro
.
stoc_die
(
client
,
"
${invalid_password_room}
"
);
}
else
{
}
else
{
if
(
info
.
version
>=
9020
&&
settings
.
version
===
4927
)
{
info
.
version
=
settings
.
version
;
struct
=
ygopro
.
structs
[
"
CTOS_JoinGame
"
];
struct
.
_setBuff
(
buffer
);
struct
.
set
(
"
version
"
,
info
.
version
);
buffer
=
struct
.
buffer
;
}
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
);
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
);
if
(
!
room
)
{
if
(
!
room
)
{
ygopro
.
stoc_die
(
client
,
"
${server_full}
"
);
ygopro
.
stoc_die
(
client
,
"
${server_full}
"
);
...
@@ -1418,7 +1408,7 @@
...
@@ -1418,7 +1408,7 @@
recorder
.
on
(
'
error
'
,
function
(
error
)
{});
recorder
.
on
(
'
error
'
,
function
(
error
)
{});
}
}
if
(
settings
.
modules
.
cloud_replay
.
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
=
settings
.
modules
.
test_mode
.
watch_public_hand
?
room
.
recorder
:
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
"
});
});
...
@@ -2220,7 +2210,16 @@
...
@@ -2220,7 +2210,16 @@
}
}
if
(
settings
.
modules
.
windbot
.
spawn
)
{
if
(
settings
.
modules
.
windbot
.
spawn
)
{
windbot_process
=
spawn
(
'
mono
'
,
[
'
WindBot.exe
'
,
settings
.
modules
.
windbot
.
port
],
{
if
(
/^win/
.
test
(
process
.
platform
))
{
windbot_bin
=
'
WindBot.exe
'
;
windbot_parameters
=
[];
}
else
{
windbot_bin
=
'
mono
'
;
windbot_parameters
=
[
'
WindBot.exe
'
];
}
windbot_parameters
.
push
(
'
ServerMode=true
'
);
windbot_parameters
.
push
(
'
ServerPort=
'
+
settings
.
modules
.
windbot
.
port
);
windbot_process
=
spawn
(
windbot_bin
,
windbot_parameters
,
{
cwd
:
'
windbot
'
cwd
:
'
windbot
'
});
});
windbot_process
.
on
(
'
error
'
,
function
(
err
)
{
windbot_process
.
on
(
'
error
'
,
function
(
err
)
{
...
...
ygopro.coffee
View file @
44e3a13b
...
@@ -117,7 +117,7 @@ for name, declaration of structs_declaration
...
@@ -117,7 +117,7 @@ for name, declaration of structs_declaration
return
return
for
line
in
_
.
lines
(
msg
)
for
line
in
_
.
lines
(
msg
)
if
player
>=
10
if
player
>=
10
line
=
"[S
ystem
]: "
+
line
line
=
"[S
erver
]: "
+
line
for
o
,
r
of
i18ns
[
client
.
lang
]
for
o
,
r
of
i18ns
[
client
.
lang
]
re
=
new
RegExp
(
"
\\
$
\\
{"
+
o
+
"
\\
}"
,
'g'
)
re
=
new
RegExp
(
"
\\
$
\\
{"
+
o
+
"
\\
}"
,
'g'
)
line
=
line
.
replace
(
re
,
r
)
line
=
line
.
replace
(
re
,
r
)
...
...
ygopro.js
View file @
44e3a13b
...
@@ -181,7 +181,7 @@
...
@@ -181,7 +181,7 @@
for
(
j
=
0
,
len1
=
ref
.
length
;
j
<
len1
;
j
++
)
{
for
(
j
=
0
,
len1
=
ref
.
length
;
j
<
len1
;
j
++
)
{
line
=
ref
[
j
];
line
=
ref
[
j
];
if
(
player
>=
10
)
{
if
(
player
>=
10
)
{
line
=
"
[S
ystem
]:
"
+
line
;
line
=
"
[S
erver
]:
"
+
line
;
}
}
ref1
=
i18ns
[
client
.
lang
];
ref1
=
i18ns
[
client
.
lang
];
for
(
o
in
ref1
)
{
for
(
o
in
ref1
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment