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
890da55b
Commit
890da55b
authored
Jun 14, 2018
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test srvpro in ygosharp
parent
5c4550cb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
296 additions
and
174 deletions
+296
-174
.gitignore
.gitignore
+1
-0
data/default_config.json
data/default_config.json
+10
-0
ygopro-server.coffee
ygopro-server.coffee
+61
-14
ygopro-server.js
ygopro-server.js
+224
-160
No files found.
.gitignore
View file @
890da55b
...
...
@@ -18,6 +18,7 @@ config.user.bak
/node_modules
/ssl
/ygosrv233
/ygosharp
test*
*.heapsnapshot
...
...
data/default_config.json
View file @
890da55b
...
...
@@ -131,6 +131,16 @@
"no_connect_count_limit"
:
false
,
"no_ban_player"
:
false
},
"ygosharp"
:
{
"enabled"
:
false
,
"path"
:
"./ygosharp/"
,
"param"
:
{
"root"
:
"."
,
"database"
:
"cards.cdb"
,
"lflist"
:
"lflist.conf"
,
"script"
:
"script"
}
},
"pre_util"
:
{
"enabled"
:
false
,
"port"
:
7944
,
...
...
ygopro-server.coffee
View file @
890da55b
...
...
@@ -158,6 +158,7 @@ catch
setting_save
(
chat_color
)
try
throw
1
if
settings
.
modules
.
ygosharp
.
enabled
cppversion
=
parseInt
(
fs
.
readFileSync
(
'ygopro/gframe/game.cpp'
,
'utf8'
).
match
(
/PRO_VERSION = ([x\dABCDEF]+)/
)[
1
],
'16'
)
setting_change
(
settings
,
"version"
,
cppversion
)
log
.
info
"ygopro version 0x"
+
settings
.
version
.
toString
(
16
),
"(from source code)"
...
...
@@ -166,6 +167,14 @@ catch
log
.
info
"ygopro version 0x"
+
settings
.
version
.
toString
(
16
),
"(from config)"
# load the lflist of current date
lflists
=
[]
#ygosharp
if
settings
.
modules
.
ygosharp
.
enabled
try
for
list
in
fs
.
readFileSync
(
settings
.
modules
.
ygosharp
.
path
+
'/'
+
settings
.
modules
.
ygosharp
.
param
.
lflist
,
'utf8'
).
match
(
/!.*/g
)
date
=
list
.
match
(
/!([\d\.]+)/
)
continue
unless
date
lflists
.
push
({
date
:
moment
(
list
.
match
(
/!([\d\.]+)/
)[
1
],
'YYYY.MM.DD'
).
utcOffset
(
"-08:00"
),
tcg
:
list
.
indexOf
(
'TCG'
)
!=
-
1
})
catch
# expansions/lflist
try
for
list
in
fs
.
readFileSync
(
'ygopro/expansions/lflist.conf'
,
'utf8'
).
match
(
/!.*/g
)
...
...
@@ -181,7 +190,7 @@ try
lflists
.
push
({
date
:
moment
(
list
.
match
(
/!([\d\.]+)/
)[
1
],
'YYYY.MM.DD'
).
utcOffset
(
"-08:00"
),
tcg
:
list
.
indexOf
(
'TCG'
)
!=
-
1
})
catch
if
settings
.
modules
.
cloud_replay
.
enabled
if
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
redis
=
require
'redis'
zlib
=
require
'zlib'
redisdb
=
redis
.
createClient
host
:
"127.0.0.1"
,
port
:
settings
.
modules
.
cloud_replay
.
redis_port
...
...
@@ -516,12 +525,40 @@ class Room
if
(
rule
.
match
/(^|,|,)(IGPRIORITY|PR)(,|,|$)/
)
@
hostinfo
.
enable_priority
=
true
param
=
[
0
,
@
hostinfo
.
lflist
,
@
hostinfo
.
rule
,
@
hostinfo
.
mode
,
(
if
@
hostinfo
.
enable_priority
then
'T'
else
'F'
),
proc_bin_name
=
'./ygopro'
proc_bin_path
=
'ygopro'
if
settings
.
modules
.
ygosharp
.
enabled
proc_bin_path
=
settings
.
modules
.
ygosharp
.
path
if
/^win/
.
test
(
process
.
platform
)
proc_bin_name
=
'./YGOSharp.exe'
param
=
[]
else
proc_bin_name
=
'mono'
param
=
[
'./YGOSharp.exe'
]
param
.
push
(
'ClientVersion='
+
settings
.
version
)
param
.
push
(
'BanlistFile='
+
settings
.
modules
.
ygosharp
.
param
.
lflist
)
param
.
push
(
'RootPath='
+
settings
.
modules
.
ygosharp
.
param
.
root
)
param
.
push
(
'ScriptDirectory='
+
settings
.
modules
.
ygosharp
.
param
.
script
)
param
.
push
(
'DatabaseFile='
+
settings
.
modules
.
ygosharp
.
param
.
database
)
param
.
push
(
'Mode='
+
@
hostinfo
.
mode
)
param
.
push
(
'Region='
+
@
hostinfo
.
rule
)
param
.
push
(
'BanList='
+
@
hostinfo
.
lflist
)
param
.
push
(
'StartLp='
+
@
hostinfo
.
start_lp
)
param
.
push
(
'StartHand='
+
@
hostinfo
.
start_hand
)
param
.
push
(
'DrawCount='
+
@
hostinfo
.
draw_count
)
param
.
push
(
'GameTimer='
+
@
hostinfo
.
time_limit
)
param
.
push
(
'NoCheckDeck='
+
(
if
@
hostinfo
.
no_check_deck
then
'true'
else
'false'
))
param
.
push
(
'NoShuffleDeck='
+
(
if
@
hostinfo
.
no_shuffle_deck
then
'true'
else
'false'
))
param
.
push
(
'MasterRule='
+
(
if
@
hostinfo
.
enable_priority
then
'3'
else
'4'
))
param
.
push
(
'SRVProMode=true'
)
param
.
push
(
'SRVProReplayMode='
+
@
hostinfo
.
replay_mode
)
else
param
=
[
0
,
@
hostinfo
.
lflist
,
@
hostinfo
.
rule
,
@
hostinfo
.
mode
,
(
if
@
hostinfo
.
enable_priority
then
'T'
else
'F'
),
(
if
@
hostinfo
.
no_check_deck
then
'T'
else
'F'
),
(
if
@
hostinfo
.
no_shuffle_deck
then
'T'
else
'F'
),
@
hostinfo
.
start_lp
,
@
hostinfo
.
start_hand
,
@
hostinfo
.
draw_count
,
@
hostinfo
.
time_limit
,
@
hostinfo
.
replay_mode
]
try
@
process
=
spawn
'./ygopro'
,
param
,
{
cwd
:
'ygopro'
}
@
process
=
spawn
proc_bin_name
,
param
,
{
cwd
:
proc_bin_path
}
@
process
.
on
'error'
,
(
err
)
=>
_
.
each
@
players
,
(
player
)
->
ygopro
.
stoc_die
(
player
,
"${create_room_failed}"
)
...
...
@@ -590,7 +627,7 @@ class Room
#else
# log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body
return
if
@
player_datas
.
length
and
settings
.
modules
.
cloud_replay
.
enabled
if
@
player_datas
.
length
and
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
replay_id
=
@
cloud_replay_id
if
@
has_ygopro_error
log_rep_id
=
true
...
...
@@ -792,7 +829,7 @@ net.createServer (client) ->
client
.
destroy
()
return
if
settings
.
modules
.
cloud_replay
.
enabled
if
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
client
.
open_cloud_replay
=
(
err
,
replay
)
->
if
err
or
!
replay
ygopro
.
stoc_die
(
client
,
"${cloud_replay_no}"
)
...
...
@@ -994,7 +1031,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
if
settings
.
modules
.
stop
ygopro
.
stoc_die
(
client
,
settings
.
modules
.
stop
)
else
if
info
.
pass
.
toUpperCase
()
==
"R"
and
settings
.
modules
.
cloud_replay
.
enabled
else
if
info
.
pass
.
toUpperCase
()
==
"R"
and
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
ygopro
.
stoc_send_chat
(
client
,
"${cloud_replay_hint}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
redisdb
.
lrange
client
.
ip
+
":replays"
,
0
,
2
,
(
err
,
result
)
->
_
.
each
result
,
(
replay_id
,
id
)
->
...
...
@@ -1015,7 +1052,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
client
.
destroy
()
return
),
500
else
if
info
.
pass
[
0
...
2
].
toUpperCase
()
==
"R#"
and
settings
.
modules
.
cloud_replay
.
enabled
else
if
info
.
pass
[
0
...
2
].
toUpperCase
()
==
"R#"
and
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
replay_id
=
info
.
pass
.
split
(
"#"
)[
1
]
if
(
replay_id
>
0
and
replay_id
<=
9
)
redisdb
.
lindex
client
.
ip
+
":replays"
,
replay_id
-
1
,
(
err
,
replay_id
)
->
...
...
@@ -1030,7 +1067,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
ygopro
.
stoc_die
(
client
,
"${cloud_replay_no}"
)
else
if
info
.
pass
.
toUpperCase
()
==
"W"
and
settings
.
modules
.
cloud_replay
.
enabled
else
if
info
.
pass
.
toUpperCase
()
==
"W"
and
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
replay_id
=
Cloud_replay_ids
[
Math
.
floor
(
Math
.
random
()
*
Cloud_replay_ids
.
length
)]
redisdb
.
hgetall
"replay:"
+
replay_id
,
client
.
open_cloud_replay
...
...
@@ -1138,6 +1175,11 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
if
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
if
settings
.
modules
.
ygosharp
.
enabled
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
room
.
connect
(
client
)
return
client
.
is_post_watcher
=
true
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
room
.
watchers
.
push
client
...
...
@@ -1248,6 +1290,11 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
if
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
if
settings
.
modules
.
ygosharp
.
enabled
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
room
.
connect
(
client
)
return
client
.
is_post_watcher
=
true
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
room
.
watchers
.
push
client
...
...
@@ -1286,7 +1333,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
#client.score_shown = true
return
if
!
room
.
recorder
if
!
room
.
recorder
and
!
settings
.
modules
.
ygosharp
.
enabled
room
.
recorder
=
recorder
=
net
.
connect
room
.
port
,
->
ygopro
.
ctos_send
recorder
,
'PLAYER_INFO'
,
{
name
:
"Marshtomp"
...
...
@@ -1300,14 +1347,14 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
recorder
.
on
'data'
,
(
data
)
->
room
=
ROOM_all
[
client
.
rid
]
return
unless
room
and
settings
.
modules
.
cloud_replay
.
enabled
return
unless
room
and
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
room
.
recorder_buffers
.
push
data
return
recorder
.
on
'error'
,
(
error
)
->
return
if
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
and
!
room
.
watcher
if
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
and
!
settings
.
modules
.
ygosharp
.
enabled
and
!
room
.
watcher
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'
,
{
name
:
"the Big Brother"
...
...
@@ -2080,7 +2127,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server)->
ygopro
.
stoc_follow
'REPLAY'
,
true
,
(
buffer
,
info
,
client
,
server
)
->
room
=
ROOM_all
[
client
.
rid
]
return
settings
.
modules
.
tournament_mode
.
enabled
and
settings
.
modules
.
tournament_mode
.
replay_safe
unless
room
if
settings
.
modules
.
cloud_replay
.
enabled
and
room
.
random_type
if
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
and
room
.
random_type
Cloud_replay_ids
.
push
room
.
cloud_replay_id
if
settings
.
modules
.
tournament_mode
.
enabled
and
settings
.
modules
.
tournament_mode
.
replay_safe
if
client
.
pos
==
0
...
...
@@ -2110,7 +2157,7 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server)->
fs
.
writeFile
(
settings
.
modules
.
tournament_mode
.
replay_path
+
replay_filename
,
buffer
,
(
err
)
->
if
err
then
log
.
warn
"SAVE REPLAY ERROR"
,
replay_filename
,
err
)
if
settings
.
modules
.
cloud_replay
.
enabled
if
settings
.
modules
.
cloud_replay
.
enabled
and
!
settings
.
modules
.
ygosharp
.
enabled
ygopro
.
stoc_send_chat
(
client
,
"${cloud_replay_delay_part1}R#
#{
room
.
cloud_replay_id
}
${cloud_replay_delay_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
return
settings
.
modules
.
tournament_mode
.
block_replay_to_player
else
...
...
ygopro-server.js
View file @
890da55b
// Generated by CoffeeScript 1.12.7
(
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
,
badwords
,
ban_user
,
bunyan
,
chat_color
,
config
,
cppversion
,
crypto
,
date
,
default_config
,
default_data
,
dialogues
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
j
,
k
,
l
en
,
len1
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_tips
,
log
,
memory_usage
,
merge
,
moment
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
redis
,
redisdb
,
ref
,
ref1
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
tips
,
url
,
users_cache
,
wait_room_start
,
wait_room_start_arena
,
windbot_bin
,
windbot_parameters
,
windbot_process
,
windbots
,
ygopro
,
zlib
;
var
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
,
badwords
,
ban_user
,
bunyan
,
chat_color
,
config
,
cppversion
,
crypto
,
date
,
default_config
,
default_data
,
dialogues
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
j
,
k
,
l
,
len
,
len1
,
len2
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_tips
,
log
,
memory_usage
,
merge
,
moment
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
redis
,
redisdb
,
ref
,
ref1
,
ref2
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
tips
,
url
,
users_cache
,
wait_room_start
,
wait_room_start_arena
,
windbot_bin
,
windbot_parameters
,
windbot_process
,
windbots
,
ygopro
,
zlib
;
net
=
require
(
'
net
'
);
...
...
@@ -207,6 +207,9 @@
}
try
{
if
(
settings
.
modules
.
ygosharp
.
enabled
)
{
throw
1
;
}
cppversion
=
parseInt
(
fs
.
readFileSync
(
'
ygopro/gframe/game.cpp
'
,
'
utf8
'
).
match
(
/PRO_VERSION =
([
x
\d
ABCDEF
]
+
)
/
)[
1
],
'
16
'
);
setting_change
(
settings
,
"
version
"
,
cppversion
);
log
.
info
(
"
ygopro version 0x
"
+
settings
.
version
.
toString
(
16
),
"
(from source code)
"
);
...
...
@@ -216,10 +219,29 @@
lflists
=
[];
if
(
settings
.
modules
.
ygosharp
.
enabled
)
{
try
{
ref
=
fs
.
readFileSync
(
settings
.
modules
.
ygosharp
.
path
+
'
/
'
+
settings
.
modules
.
ygosharp
.
param
.
lflist
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
list
=
ref
[
j
];
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
if
(
!
date
)
{
continue
;
}
lflists
.
push
({
date
:
moment
(
list
.
match
(
/!
([\d\.]
+
)
/
)[
1
],
'
YYYY.MM.DD
'
).
utcOffset
(
"
-08:00
"
),
tcg
:
list
.
indexOf
(
'
TCG
'
)
!==
-
1
});
}
}
catch
(
error1
)
{
}
}
try
{
ref
=
fs
.
readFileSync
(
'
ygopro/expansions/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
list
=
ref
[
j
];
ref
1
=
fs
.
readFileSync
(
'
ygopro/expansions/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
k
=
0
,
len1
=
ref1
.
length
;
k
<
len1
;
k
++
)
{
list
=
ref
1
[
k
];
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
if
(
!
date
)
{
continue
;
...
...
@@ -234,9 +256,9 @@
}
try
{
ref
1
=
fs
.
readFileSync
(
'
ygopro/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
k
=
0
,
len1
=
ref1
.
length
;
k
<
len1
;
k
++
)
{
list
=
ref
1
[
k
];
ref
2
=
fs
.
readFileSync
(
'
ygopro/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
list
=
ref
2
[
l
];
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
if
(
!
date
)
{
continue
;
...
...
@@ -250,7 +272,7 @@
}
if
(
settings
.
modules
.
cloud_replay
.
enabled
)
{
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
redis
=
require
(
'
redis
'
);
zlib
=
require
(
'
zlib
'
);
redisdb
=
redis
.
createClient
({
...
...
@@ -341,16 +363,16 @@
ROOM_bad_ip
=
{};
ban_user
=
function
(
name
)
{
var
bad_ip
,
l
,
len2
,
len3
,
m
,
player
,
ref2
,
room
;
var
bad_ip
,
l
en3
,
len4
,
m
,
n
,
player
,
ref3
,
room
;
settings
.
ban
.
banned_user
.
push
(
name
);
setting_save
(
settings
);
bad_ip
=
0
;
for
(
l
=
0
,
len2
=
ROOM_all
.
length
;
l
<
len2
;
l
++
)
{
room
=
ROOM_all
[
l
];
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
ref
2
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref2
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
2
[
m
];
ref
3
=
room
.
players
;
for
(
n
=
0
,
len4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref
3
[
n
];
if
(
player
&&
(
player
.
name
===
name
||
player
.
ip
===
bad_ip
))
{
bad_ip
=
player
.
ip
;
ROOM_bad_ip
[
bad_ip
]
=
99
;
...
...
@@ -546,13 +568,13 @@
};
ROOM_unwelcome
=
function
(
room
,
bad_player
,
reason
)
{
var
l
,
len2
,
player
,
ref2
;
var
l
en3
,
m
,
player
,
ref3
;
if
(
!
room
)
{
return
;
}
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
&&
player
===
bad_player
)
{
ygopro
.
stoc_send_chat
(
player
,
"
${unwelcome_warn_part1}
"
+
reason
+
"
${unwelcome_warn_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
else
if
(
player
&&
player
.
pos
!==
7
&&
player
!==
bad_player
)
{
...
...
@@ -564,7 +586,7 @@
Room
=
(
function
()
{
function
Room
(
name
,
hostinfo
)
{
var
draw_count
,
lflist
,
param
,
rule
,
start_hand
,
start_lp
,
time_limit
;
var
draw_count
,
lflist
,
param
,
proc_bin_name
,
proc_bin_path
,
rule
,
start_hand
,
start_lp
,
time_limit
;
this
.
hostinfo
=
hostinfo
;
this
.
name
=
name
;
this
.
alive
=
true
;
...
...
@@ -692,10 +714,40 @@
this
.
hostinfo
.
enable_priority
=
true
;
}
}
param
=
[
0
,
this
.
hostinfo
.
lflist
,
this
.
hostinfo
.
rule
,
this
.
hostinfo
.
mode
,
(
this
.
hostinfo
.
enable_priority
?
'
T
'
:
'
F
'
),
(
this
.
hostinfo
.
no_check_deck
?
'
T
'
:
'
F
'
),
(
this
.
hostinfo
.
no_shuffle_deck
?
'
T
'
:
'
F
'
),
this
.
hostinfo
.
start_lp
,
this
.
hostinfo
.
start_hand
,
this
.
hostinfo
.
draw_count
,
this
.
hostinfo
.
time_limit
,
this
.
hostinfo
.
replay_mode
];
proc_bin_name
=
'
./ygopro
'
;
proc_bin_path
=
'
ygopro
'
;
if
(
settings
.
modules
.
ygosharp
.
enabled
)
{
proc_bin_path
=
settings
.
modules
.
ygosharp
.
path
;
if
(
/^win/
.
test
(
process
.
platform
))
{
proc_bin_name
=
'
./YGOSharp.exe
'
;
param
=
[];
}
else
{
proc_bin_name
=
'
mono
'
;
param
=
[
'
./YGOSharp.exe
'
];
}
param
.
push
(
'
ClientVersion=
'
+
settings
.
version
);
param
.
push
(
'
BanlistFile=
'
+
settings
.
modules
.
ygosharp
.
param
.
lflist
);
param
.
push
(
'
RootPath=
'
+
settings
.
modules
.
ygosharp
.
param
.
root
);
param
.
push
(
'
ScriptDirectory=
'
+
settings
.
modules
.
ygosharp
.
param
.
script
);
param
.
push
(
'
DatabaseFile=
'
+
settings
.
modules
.
ygosharp
.
param
.
database
);
param
.
push
(
'
Mode=
'
+
this
.
hostinfo
.
mode
);
param
.
push
(
'
Region=
'
+
this
.
hostinfo
.
rule
);
param
.
push
(
'
BanList=
'
+
this
.
hostinfo
.
lflist
);
param
.
push
(
'
StartLp=
'
+
this
.
hostinfo
.
start_lp
);
param
.
push
(
'
StartHand=
'
+
this
.
hostinfo
.
start_hand
);
param
.
push
(
'
DrawCount=
'
+
this
.
hostinfo
.
draw_count
);
param
.
push
(
'
GameTimer=
'
+
this
.
hostinfo
.
time_limit
);
param
.
push
(
'
NoCheckDeck=
'
+
(
this
.
hostinfo
.
no_check_deck
?
'
true
'
:
'
false
'
));
param
.
push
(
'
NoShuffleDeck=
'
+
(
this
.
hostinfo
.
no_shuffle_deck
?
'
true
'
:
'
false
'
));
param
.
push
(
'
MasterRule=
'
+
(
this
.
hostinfo
.
enable_priority
?
'
3
'
:
'
4
'
));
param
.
push
(
'
SRVProMode=true
'
);
param
.
push
(
'
SRVProReplayMode=
'
+
this
.
hostinfo
.
replay_mode
);
}
else
{
param
=
[
0
,
this
.
hostinfo
.
lflist
,
this
.
hostinfo
.
rule
,
this
.
hostinfo
.
mode
,
(
this
.
hostinfo
.
enable_priority
?
'
T
'
:
'
F
'
),
(
this
.
hostinfo
.
no_check_deck
?
'
T
'
:
'
F
'
),
(
this
.
hostinfo
.
no_shuffle_deck
?
'
T
'
:
'
F
'
),
this
.
hostinfo
.
start_lp
,
this
.
hostinfo
.
start_hand
,
this
.
hostinfo
.
draw_count
,
this
.
hostinfo
.
time_limit
,
this
.
hostinfo
.
replay_mode
];
}
try
{
this
.
process
=
spawn
(
'
./ygopro
'
,
param
,
{
cwd
:
'
ygopro
'
this
.
process
=
spawn
(
proc_bin_name
,
param
,
{
cwd
:
proc_bin_path
});
this
.
process
.
on
(
'
error
'
,
(
function
(
_this
)
{
return
function
(
err
)
{
...
...
@@ -723,10 +775,10 @@
_this
.
port
=
parseInt
(
data
);
_
.
each
(
_this
.
players
,
function
(
player
)
{
player
.
server
.
connect
(
_this
.
port
,
'
127.0.0.1
'
,
function
()
{
var
buffer
,
l
,
len2
,
ref2
;
ref
2
=
player
.
pre_establish_buffers
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
buffer
=
ref
2
[
l
];
var
buffer
,
l
en3
,
m
,
ref3
;
ref
3
=
player
.
pre_establish_buffers
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref
3
[
m
];
player
.
server
.
write
(
buffer
);
}
player
.
established
=
true
;
...
...
@@ -759,14 +811,14 @@
}
Room
.
prototype
[
"
delete
"
]
=
function
()
{
var
end_time
,
index
,
log_rep_id
,
name
,
player_ips
,
player_names
,
recorder_buffer
,
ref
2
,
replay_id
,
score
,
score_array
;
var
end_time
,
index
,
log_rep_id
,
name
,
player_ips
,
player_names
,
recorder_buffer
,
ref
3
,
replay_id
,
score
,
score_array
;
if
(
this
.
deleted
)
{
return
;
}
score_array
=
[];
ref
2
=
this
.
scores
;
for
(
name
in
ref
2
)
{
score
=
ref
2
[
name
];
ref
3
=
this
.
scores
;
for
(
name
in
ref
3
)
{
score
=
ref
3
[
name
];
score_array
.
push
({
name
:
name
,
score
:
score
...
...
@@ -803,7 +855,7 @@
})(
this
));
}
}
if
(
this
.
player_datas
.
length
&&
settings
.
modules
.
cloud_replay
.
enabled
)
{
if
(
this
.
player_datas
.
length
&&
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
replay_id
=
this
.
cloud_replay_id
;
if
(
this
.
has_ygopro_error
)
{
log_rep_id
=
true
;
...
...
@@ -908,10 +960,10 @@
roomlist
.
update
(
this
);
}
client
.
server
.
connect
(
this
.
port
,
'
127.0.0.1
'
,
function
()
{
var
buffer
,
l
,
len2
,
ref2
;
ref
2
=
client
.
pre_establish_buffers
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
buffer
=
ref
2
[
l
];
var
buffer
,
l
en3
,
m
,
ref3
;
ref
3
=
client
.
pre_establish_buffers
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref
3
[
m
];
client
.
server
.
write
(
buffer
);
}
client
.
established
=
true
;
...
...
@@ -921,7 +973,7 @@
};
Room
.
prototype
.
disconnect
=
function
(
client
,
error
)
{
var
index
,
l
,
len2
,
player
,
ref2
;
var
index
,
l
en3
,
m
,
player
,
ref3
;
if
(
client
.
is_post_watcher
)
{
ygopro
.
stoc_send_chat_to_room
(
this
,
(
client
.
name
+
"
${quit_watch}
"
)
+
(
error
?
"
:
"
+
error
:
''
));
index
=
_
.
indexOf
(
this
.
watchers
,
client
);
...
...
@@ -930,9 +982,9 @@
}
}
else
{
if
(
this
.
arena
===
"
athletic
"
&&
!
this
.
started
&&
this
.
players
.
length
===
2
)
{
ref
2
=
this
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
this
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
.
pos
!==
7
)
{
this
.
scores
[
player
.
name
]
=
0
;
}
...
...
@@ -1044,7 +1096,7 @@
client
.
destroy
();
return
;
}
if
(
settings
.
modules
.
cloud_replay
.
enabled
)
{
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
client
.
open_cloud_replay
=
function
(
err
,
replay
)
{
var
buffer
;
if
(
err
||
!
replay
)
{
...
...
@@ -1069,7 +1121,7 @@
}
client
.
pre_establish_buffers
=
new
Array
();
client
.
on
(
'
data
'
,
function
(
ctos_buffer
)
{
var
b
,
bad_ip_count
,
buffer
,
cancel
,
ctos_message_length
,
ctos_proto
,
datas
,
info
,
l
,
len2
,
len3
,
looplimit
,
m
,
room
,
struct
;
var
b
,
bad_ip_count
,
buffer
,
cancel
,
ctos_message_length
,
ctos_proto
,
datas
,
info
,
l
en3
,
len4
,
looplimit
,
m
,
n
,
room
,
struct
;
if
(
client
.
is_post_watcher
)
{
room
=
ROOM_all
[
client
.
rid
];
if
(
room
)
{
...
...
@@ -1140,20 +1192,20 @@
}
}
if
(
client
.
established
)
{
for
(
l
=
0
,
len2
=
datas
.
length
;
l
<
len2
;
l
++
)
{
buffer
=
datas
[
l
];
for
(
m
=
0
,
len3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
server
.
write
(
buffer
);
}
}
else
{
for
(
m
=
0
,
len3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
for
(
n
=
0
,
len4
=
datas
.
length
;
n
<
len4
;
n
++
)
{
buffer
=
datas
[
n
];
client
.
pre_establish_buffers
.
push
(
buffer
);
}
}
}
});
server
.
on
(
'
data
'
,
function
(
stoc_buffer
)
{
var
b
,
buffer
,
cancel
,
datas
,
info
,
l
,
len2
,
looplimit
,
stanzas
,
stoc_message_length
,
stoc_proto
,
struct
;
var
b
,
buffer
,
cancel
,
datas
,
info
,
l
en3
,
looplimit
,
m
,
stanzas
,
stoc_message_length
,
stoc_proto
,
struct
;
stoc_message_length
=
0
;
stoc_proto
=
0
;
datas
=
[];
...
...
@@ -1210,8 +1262,8 @@
break
;
}
}
for
(
l
=
0
,
len2
=
datas
.
length
;
l
<
len2
;
l
++
)
{
buffer
=
datas
[
l
];
for
(
m
=
0
,
len3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
client
.
write
(
buffer
);
}
});
...
...
@@ -1262,11 +1314,11 @@
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
l
,
len2
,
len3
,
m
,
name
,
ref2
,
ref3
,
replay_id
,
room
,
secret
;
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
l
en3
,
len4
,
m
,
n
,
name
,
ref3
,
ref4
,
replay_id
,
room
,
secret
;
info
.
pass
=
info
.
pass
.
trim
();
if
(
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
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${cloud_replay_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
redisdb
.
lrange
(
client
.
ip
+
"
:replays
"
,
0
,
2
,
function
(
err
,
result
)
{
_
.
each
(
result
,
function
(
replay_id
,
id
)
{
...
...
@@ -1288,7 +1340,7 @@
});
client
.
destroy
();
}),
500
);
}
else
if
(
info
.
pass
.
slice
(
0
,
2
).
toUpperCase
()
===
"
R#
"
&&
settings
.
modules
.
cloud_replay
.
enabled
)
{
}
else
if
(
info
.
pass
.
slice
(
0
,
2
).
toUpperCase
()
===
"
R#
"
&&
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
replay_id
=
info
.
pass
.
split
(
"
#
"
)[
1
];
if
(
replay_id
>
0
&&
replay_id
<=
9
)
{
redisdb
.
lindex
(
client
.
ip
+
"
:replays
"
,
replay_id
-
1
,
function
(
err
,
replay_id
)
{
...
...
@@ -1306,7 +1358,7 @@
}
else
{
ygopro
.
stoc_die
(
client
,
"
${cloud_replay_no}
"
);
}
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
W
"
&&
settings
.
modules
.
cloud_replay
.
enabled
)
{
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
W
"
&&
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
replay_id
=
Cloud_replay_ids
[
Math
.
floor
(
Math
.
random
()
*
Cloud_replay_ids
.
length
)];
redisdb
.
hgetall
(
"
replay:
"
+
replay_id
,
client
.
open_cloud_replay
);
}
else
if
(
info
.
version
!==
settings
.
version
)
{
...
...
@@ -1330,15 +1382,15 @@
return
;
}
check
=
function
(
buf
)
{
var
checksum
,
i
,
l
,
ref2
;
var
checksum
,
i
,
m
,
ref3
;
checksum
=
0
;
for
(
i
=
l
=
0
,
ref2
=
buf
.
length
;
0
<=
ref2
?
l
<
ref2
:
l
>
ref2
;
i
=
0
<=
ref2
?
++
l
:
--
l
)
{
for
(
i
=
m
=
0
,
ref3
=
buf
.
length
;
0
<=
ref3
?
m
<
ref3
:
m
>
ref3
;
i
=
0
<=
ref3
?
++
m
:
--
m
)
{
checksum
+=
buf
.
readUInt8
(
i
);
}
return
(
checksum
&
0xFF
)
===
0
;
};
finish
=
function
(
buffer
)
{
var
action
,
l
,
len2
,
name
,
opt1
,
opt2
,
opt3
,
options
,
ref2
,
room
,
title
;
var
action
,
l
en3
,
m
,
name
,
opt1
,
opt2
,
opt3
,
options
,
ref3
,
room
,
title
;
action
=
buffer
.
readUInt8
(
1
)
>>
4
;
if
(
buffer
!==
decrypted_buffer
&&
(
action
===
1
||
action
===
2
||
action
===
4
))
{
ygopro
.
stoc_die
(
client
,
'
${invalid_password_unauthorized}
'
);
...
...
@@ -1411,13 +1463,19 @@
if
(
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
)
{
client
.
setTimeout
(
300000
);
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
if
(
settings
.
modules
.
ygosharp
.
enabled
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
${watch_join}
"
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
room
.
connect
(
client
);
return
;
}
client
.
is_post_watcher
=
true
;
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
${watch_join}
"
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
2
=
room
.
watcher_buffers
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
buffer
=
ref
2
[
l
];
ref
3
=
room
.
watcher_buffers
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref
3
[
m
];
client
.
write
(
buffer
);
}
}
else
{
...
...
@@ -1432,9 +1490,9 @@
if
(
id
=
users_cache
[
client
.
name
])
{
secret
=
id
%
65535
+
1
;
decrypted_buffer
=
new
Buffer
(
6
);
ref
2
=
[
0
,
2
,
4
];
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
i
=
ref
2
[
l
];
ref
3
=
[
0
,
2
,
4
];
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
i
=
ref
3
[
m
];
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
}
if
(
check
(
decrypted_buffer
))
{
...
...
@@ -1451,14 +1509,14 @@
},
json
:
true
},
function
(
error
,
response
,
body
)
{
var
len
3
,
m
,
ref3
;
var
len
4
,
n
,
ref4
;
if
(
body
&&
body
.
user
)
{
users_cache
[
client
.
name
]
=
body
.
user
.
id
;
secret
=
body
.
user
.
id
%
65535
+
1
;
decrypted_buffer
=
new
Buffer
(
6
);
ref
3
=
[
0
,
2
,
4
];
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
i
=
ref
3
[
m
];
ref
4
=
[
0
,
2
,
4
];
for
(
n
=
0
,
len4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
i
=
ref
4
[
n
];
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
}
if
(
check
(
decrypted_buffer
))
{
...
...
@@ -1517,13 +1575,19 @@
if
(
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
)
{
client
.
setTimeout
(
300000
);
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
if
(
settings
.
modules
.
ygosharp
.
enabled
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
${watch_join}
"
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
room
.
connect
(
client
);
return
;
}
client
.
is_post_watcher
=
true
;
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
${watch_join}
"
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
3
=
room
.
watcher_buffers
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref
3
[
m
];
ref
4
=
room
.
watcher_buffers
;
for
(
n
=
0
,
len4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
buffer
=
ref
4
[
n
];
client
.
write
(
buffer
);
}
}
else
{
...
...
@@ -1565,7 +1629,7 @@
}
});
}
if
(
!
room
.
recorder
)
{
if
(
!
room
.
recorder
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
room
.
recorder
=
recorder
=
net
.
connect
(
room
.
port
,
function
()
{
ygopro
.
ctos_send
(
recorder
,
'
PLAYER_INFO
'
,
{
name
:
"
Marshtomp
"
...
...
@@ -1578,14 +1642,14 @@
});
recorder
.
on
(
'
data
'
,
function
(
data
)
{
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
settings
.
modules
.
cloud_replay
.
enabled
))
{
if
(
!
(
room
&&
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
))
{
return
;
}
room
.
recorder_buffers
.
push
(
data
);
});
recorder
.
on
(
'
error
'
,
function
(
error
)
{});
}
if
(
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
&&
!
room
.
watcher
)
{
if
(
settings
.
modules
.
cloud_replay
.
enable_halfway_watch
&&
!
settings
.
modules
.
ygosharp
.
enabled
&&
!
room
.
watcher
)
{
room
.
watcher
=
watcher
=
settings
.
modules
.
test_mode
.
watch_public_hand
?
room
.
recorder
:
net
.
connect
(
room
.
port
,
function
()
{
ygopro
.
ctos_send
(
watcher
,
'
PLAYER_INFO
'
,
{
name
:
"
the Big Brother
"
...
...
@@ -1597,15 +1661,15 @@
ygopro
.
ctos_send
(
watcher
,
'
HS_TOOBSERVER
'
);
});
watcher
.
on
(
'
data
'
,
function
(
data
)
{
var
l
,
len2
,
ref2
,
w
;
var
l
en3
,
m
,
ref3
,
w
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
}
room
.
watcher_buffers
.
push
(
data
);
ref
2
=
room
.
watchers
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
w
=
ref
2
[
l
];
ref
3
=
room
.
watchers
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
w
=
ref
3
[
m
];
if
(
w
)
{
w
.
write
(
data
);
}
...
...
@@ -1636,7 +1700,7 @@
}
ygopro
.
stoc_follow
(
'
GAME_MSG
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
card
,
count
,
l
,
len2
,
line
,
loc
,
msg
,
oppo_pos
,
phase
,
playertype
,
pos
,
reason
,
ref2
,
ref3
,
ref4
,
room
,
trigger_location
,
val
,
win_pos
;
var
card
,
count
,
l
en3
,
line
,
loc
,
m
,
msg
,
oppo_pos
,
phase
,
playertype
,
pos
,
reason
,
ref3
,
ref4
,
ref5
,
room
,
trigger_location
,
val
,
win_pos
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
...
...
@@ -1785,7 +1849,7 @@
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
room
.
dueling_players
[
pos
].
lp
=
0
;
}
if
((
0
<
(
ref
2
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref2
<=
100
))
{
if
((
0
<
(
ref
3
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref3
<=
100
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_opponent}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
...
@@ -1824,7 +1888,7 @@
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
room
.
dueling_players
[
pos
].
lp
=
0
;
}
if
((
0
<
(
ref
3
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref3
<=
100
))
{
if
((
0
<
(
ref
4
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref4
<=
100
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_self}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
...
@@ -1861,9 +1925,9 @@
card
=
buffer
.
readUInt32LE
(
1
);
trigger_location
=
buffer
.
readUInt8
(
6
);
if
(
dialogues
.
dialogues
[
card
]
&&
(
ygopro
.
constants
.
MSG
[
msg
]
!==
'
CHAINING
'
||
(
trigger_location
&
0x8
)
&&
!
(
trigger_location
&
0x200
)))
{
ref
4
=
_
.
lines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
for
(
l
=
0
,
len2
=
ref4
.
length
;
l
<
len2
;
l
++
)
{
line
=
ref
4
[
l
];
ref
5
=
_
.
lines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
for
(
m
=
0
,
len3
=
ref5
.
length
;
m
<
len3
;
m
++
)
{
line
=
ref
5
[
m
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
...
@@ -1873,7 +1937,7 @@
});
ygopro
.
ctos_follow
(
'
HS_TOOBSERVER
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
l
,
len2
,
player
,
ref2
,
room
;
var
l
en3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
...
...
@@ -1881,9 +1945,9 @@
if
(
!
room
.
arena
||
client
.
is_local
)
{
return
false
;
}
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
===
client
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${cannot_to_observer}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
return
true
;
...
...
@@ -1893,14 +1957,14 @@
});
ygopro
.
ctos_follow
(
'
HS_KICK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
l
,
len2
,
player
,
ref2
,
room
;
var
l
en3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
}
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
&&
player
.
pos
===
info
.
pos
&&
player
!==
client
)
{
if
(
room
.
arena
===
"
athletic
"
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
${kicked_by_system}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
...
...
@@ -1929,7 +1993,7 @@
});
ygopro
.
stoc_follow
(
'
HS_PLAYER_CHANGE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
is_ready
,
l
,
len2
,
len3
,
m
,
p1
,
p2
,
player
,
pos
,
ref2
,
ref3
,
room
;
var
is_ready
,
l
en3
,
len4
,
m
,
n
,
p1
,
p2
,
player
,
pos
,
ref3
,
ref4
,
room
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
room
.
max_player
&&
client
.
is_host
))
{
return
;
...
...
@@ -1939,9 +2003,9 @@
if
(
pos
<
room
.
max_player
)
{
if
(
room
.
arena
)
{
room
.
ready_player_count
=
0
;
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
.
pos
===
pos
)
{
player
.
is_ready
=
is_ready
;
}
...
...
@@ -1979,9 +2043,9 @@
}
}
else
{
room
.
ready_player_count_without_host
=
0
;
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
ref
4
=
room
.
players
;
for
(
n
=
0
,
len4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref
4
[
n
];
if
(
player
.
pos
===
pos
)
{
player
.
is_ready
=
is_ready
;
}
...
...
@@ -1999,7 +2063,7 @@
});
wait_room_start
=
function
(
room
,
time
)
{
var
l
,
len2
,
player
,
ref2
;
var
l
en3
,
m
,
player
,
ref3
;
if
(
!
(
!
room
||
room
.
started
||
room
.
ready_player_count_without_host
<
room
.
max_player
-
1
))
{
time
-=
1
;
if
(
time
)
{
...
...
@@ -2010,9 +2074,9 @@
wait_room_start
(
room
,
time
);
}),
1000
);
}
else
{
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
&&
player
.
is_host
)
{
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
ygopro
.
stoc_send_chat_to_room
(
room
,
player
.
name
+
"
${kicked_by_system}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
...
...
@@ -2072,9 +2136,9 @@
if
(
settings
.
modules
.
tips
.
get
)
{
load_tips
();
setInterval
(
function
()
{
var
l
,
len2
,
room
;
for
(
l
=
0
,
len2
=
ROOM_all
.
length
;
l
<
len2
;
l
++
)
{
room
=
ROOM_all
[
l
];
var
l
en3
,
m
,
room
;
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
if
(
!
room
.
started
||
room
.
changing_side
)
{
ygopro
.
stoc_send_random_tip_to_room
(
room
);
...
...
@@ -2085,7 +2149,7 @@
}
ygopro
.
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
deck_arena
,
deck_name
,
deck_text
,
l
,
len2
,
player
,
ref2
,
room
;
var
deck_arena
,
deck_name
,
deck_text
,
l
en3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
...
...
@@ -2097,9 +2161,9 @@
roomlist
.
start
(
room
);
}
room
.
dueling_players
=
[];
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
!
(
player
.
pos
!==
7
))
{
continue
;
}
...
...
@@ -2205,7 +2269,7 @@
};
ygopro
.
ctos_follow
(
'
CHAT
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
cancel
,
ccolor
,
cip
,
cmd
,
cmsg
,
cname
,
color
,
cvalue
,
msg
,
name
,
oldmsg
,
ref
2
,
room
,
struct
,
windbot
;
var
cancel
,
ccolor
,
cip
,
cmd
,
cmsg
,
cname
,
color
,
cvalue
,
msg
,
name
,
oldmsg
,
ref
3
,
room
,
struct
,
windbot
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
;
...
...
@@ -2284,9 +2348,9 @@
if
(
cmsg
=
cmd
[
1
])
{
if
(
cmsg
.
toLowerCase
()
===
"
help
"
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${show_color_list}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
2
=
ygopro
.
constants
.
COLORS
;
for
(
cname
in
ref
2
)
{
cvalue
=
ref
2
[
cname
];
ref
3
=
ygopro
.
constants
.
COLORS
;
for
(
cname
in
ref
3
)
{
cvalue
=
ref
3
[
cname
];
if
(
cvalue
>
10
)
{
ygopro
.
stoc_send_chat
(
client
,
cname
,
cvalue
);
}
...
...
@@ -2405,23 +2469,23 @@
});
ygopro
.
ctos_follow
(
'
UPDATE_DECK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
buff_main
,
buff_side
,
card
,
current_deck
,
deck
,
deck_array
,
deck_main
,
deck_side
,
deck_text
,
deckbuf
,
decks
,
found_deck
,
i
,
l
,
len2
,
len3
,
line
,
m
,
oppo_pos
,
room
,
struct
,
win_pos
;
var
buff_main
,
buff_side
,
card
,
current_deck
,
deck
,
deck_array
,
deck_main
,
deck_side
,
deck_text
,
deckbuf
,
decks
,
found_deck
,
i
,
l
en3
,
len4
,
line
,
m
,
n
,
oppo_pos
,
room
,
struct
,
win_pos
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
false
;
}
buff_main
=
(
function
()
{
var
l
,
ref2
,
results
;
var
m
,
ref3
,
results
;
results
=
[];
for
(
i
=
l
=
0
,
ref2
=
info
.
mainc
;
0
<=
ref2
?
l
<
ref2
:
l
>
ref2
;
i
=
0
<=
ref2
?
++
l
:
--
l
)
{
for
(
i
=
m
=
0
,
ref3
=
info
.
mainc
;
0
<=
ref3
?
m
<
ref3
:
m
>
ref3
;
i
=
0
<=
ref3
?
++
m
:
--
m
)
{
results
.
push
(
info
.
deckbuf
[
i
]);
}
return
results
;
})();
buff_side
=
(
function
()
{
var
l
,
ref2
,
ref3
,
results
;
var
m
,
ref3
,
ref4
,
results
;
results
=
[];
for
(
i
=
l
=
ref2
=
info
.
mainc
,
ref3
=
info
.
mainc
+
info
.
sidec
;
ref2
<=
ref3
?
l
<
ref3
:
l
>
ref3
;
i
=
ref2
<=
ref3
?
++
l
:
--
l
)
{
for
(
i
=
m
=
ref3
=
info
.
mainc
,
ref4
=
info
.
mainc
+
info
.
sidec
;
ref3
<=
ref4
?
m
<
ref4
:
m
>
ref4
;
i
=
ref3
<=
ref4
?
++
m
:
--
m
)
{
results
.
push
(
info
.
deckbuf
[
i
]);
}
return
results
;
...
...
@@ -2462,8 +2526,8 @@
buffer
=
struct
.
buffer
;
found_deck
=
false
;
decks
=
fs
.
readdirSync
(
settings
.
modules
.
tournament_mode
.
deck_path
);
for
(
l
=
0
,
len2
=
decks
.
length
;
l
<
len2
;
l
++
)
{
deck
=
decks
[
l
];
for
(
m
=
0
,
len3
=
decks
.
length
;
m
<
len3
;
m
++
)
{
deck
=
decks
[
m
];
if
(
_
.
endsWith
(
deck
,
client
.
name
+
"
.ydk
"
))
{
found_deck
=
deck
;
}
...
...
@@ -2479,8 +2543,8 @@
deck_main
=
[];
deck_side
=
[];
current_deck
=
deck_main
;
for
(
m
=
0
,
len3
=
deck_array
.
length
;
m
<
len3
;
m
++
)
{
line
=
deck_array
[
m
];
for
(
n
=
0
,
len4
=
deck_array
.
length
;
n
<
len4
;
n
++
)
{
line
=
deck_array
[
n
];
if
(
line
.
indexOf
(
"
!side
"
)
>=
0
)
{
current_deck
=
deck_side
;
}
...
...
@@ -2537,7 +2601,7 @@
});
ygopro
.
stoc_follow
(
'
CHAT
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
l
,
len2
,
pid
,
player
,
ref2
,
room
,
tcolor
,
tplayer
;
var
l
en3
,
m
,
pid
,
player
,
ref3
,
room
,
tcolor
,
tplayer
;
room
=
ROOM_all
[
client
.
rid
];
pid
=
info
.
player
;
if
(
!
(
room
&&
pid
<
4
&&
settings
.
modules
.
chat_color
.
enabled
))
{
...
...
@@ -2555,9 +2619,9 @@
pid
=
1
-
pid
;
}
}
ref
2
=
room
.
players
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
player
=
ref
2
[
l
];
ref
3
=
room
.
players
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
3
[
m
];
if
(
player
&&
player
.
pos
===
pid
)
{
tplayer
=
player
;
}
...
...
@@ -2641,12 +2705,12 @@
});
ygopro
.
stoc_follow
(
'
REPLAY
'
,
true
,
function
(
buffer
,
info
,
client
,
server
)
{
var
duellog
,
dueltime
,
i
,
l
,
len2
,
len3
,
m
,
player
,
ref2
,
ref3
,
replay_filename
,
room
;
var
duellog
,
dueltime
,
i
,
l
en3
,
len4
,
m
,
n
,
player
,
ref3
,
ref4
,
replay_filename
,
room
;
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
return
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
replay_safe
;
}
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
room
.
random_type
)
{
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
&&
room
.
random_type
)
{
Cloud_replay_ids
.
push
(
room
.
cloud_replay_id
);
}
if
(
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
replay_safe
)
{
...
...
@@ -2654,15 +2718,15 @@
dueltime
=
moment
().
format
(
'
YYYY-MM-DD HH-mm-ss
'
);
replay_filename
=
dueltime
;
if
(
room
.
hostinfo
.
mode
!==
2
)
{
ref2
=
room
.
dueling_players
;
for
(
i
=
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
i
=
++
l
)
{
player
=
ref2
[
i
];
replay_filename
=
replay_filename
+
(
i
>
0
?
"
VS
"
:
"
"
)
+
player
.
name
;
}
}
else
{
ref3
=
room
.
dueling_players
;
for
(
i
=
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
i
=
++
m
)
{
player
=
ref3
[
i
];
replay_filename
=
replay_filename
+
(
i
>
0
?
"
VS
"
:
"
"
)
+
player
.
name
;
}
}
else
{
ref4
=
room
.
dueling_players
;
for
(
i
=
n
=
0
,
len4
=
ref4
.
length
;
n
<
len4
;
i
=
++
n
)
{
player
=
ref4
[
i
];
replay_filename
=
replay_filename
+
(
i
>
0
?
(
i
===
2
?
"
VS
"
:
"
&
"
)
:
"
"
)
+
player
.
name
;
}
}
...
...
@@ -2675,11 +2739,11 @@
replay_filename
:
replay_filename
,
roommode
:
room
.
hostinfo
.
mode
,
players
:
(
function
()
{
var
len
4
,
n
,
ref4
,
results
;
ref
4
=
room
.
dueling_players
;
var
len
5
,
o
,
ref5
,
results
;
ref
5
=
room
.
dueling_players
;
results
=
[];
for
(
n
=
0
,
len4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref
4
[
n
];
for
(
o
=
0
,
len5
=
ref5
.
length
;
o
<
len5
;
o
++
)
{
player
=
ref
5
[
o
];
results
.
push
({
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
%
2
>
0
)
?
"
(Score:
"
+
room
.
scores
[
player
.
name
]
+
"
LP:
"
+
(
player
.
lp
!=
null
?
player
.
lp
:
room
.
hostinfo
.
start_lp
)
+
(
room
.
hostinfo
.
mode
!==
2
?
"
Cards:
"
+
(
player
.
card_count
!=
null
?
player
.
card_count
:
room
.
hostinfo
.
start_hand
)
:
""
)
+
"
)
"
:
""
),
winner
:
player
.
pos
===
room
.
winner
...
...
@@ -2696,7 +2760,7 @@
}
});
}
if
(
settings
.
modules
.
cloud_replay
.
enabled
)
{
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
!
settings
.
modules
.
ygosharp
.
enabled
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${cloud_replay_delay_part1}R#
"
+
room
.
cloud_replay_id
+
"
${cloud_replay_delay_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
return
settings
.
modules
.
tournament_mode
.
block_replay_to_player
;
...
...
@@ -2707,9 +2771,9 @@
if
(
settings
.
modules
.
random_duel
.
enabled
)
{
setInterval
(
function
()
{
var
l
,
len2
,
room
,
time_passed
;
for
(
l
=
0
,
len2
=
ROOM_all
.
length
;
l
<
len2
;
l
++
)
{
room
=
ROOM_all
[
l
];
var
l
en3
,
m
,
room
,
time_passed
;
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
if
(
!
(
room
&&
room
.
started
&&
room
.
random_type
&&
room
.
last_active_time
&&
room
.
waiting_for_player
))
{
continue
;
}
...
...
@@ -2729,9 +2793,9 @@
if
(
settings
.
modules
.
mycard
.
enabled
)
{
setInterval
(
function
()
{
var
l
,
len2
,
room
,
time_passed
;
for
(
l
=
0
,
len2
=
ROOM_all
.
length
;
l
<
len2
;
l
++
)
{
room
=
ROOM_all
[
l
];
var
l
en3
,
m
,
room
,
time_passed
;
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
if
(
!
(
room
&&
room
.
started
&&
room
.
arena
&&
room
.
last_active_time
&&
room
.
waiting_for_player
))
{
continue
;
}
...
...
@@ -2785,7 +2849,7 @@
return
callback
+
"
(
"
+
text
+
"
);
"
;
};
requestListener
=
function
(
request
,
response
)
{
var
archive_args
,
archive_name
,
archive_process
,
check
,
death_room_found
,
duellog
,
error
,
filename
,
getpath
,
l
,
len2
,
len3
,
len4
,
len5
,
m
,
n
,
o
,
oppo_pos
,
parseQueryString
,
pass_validated
,
player
,
ref2
,
replay
,
room
,
roomsjson
,
u
,
win_pos
;
var
archive_args
,
archive_name
,
archive_process
,
check
,
death_room_found
,
duellog
,
error
,
filename
,
getpath
,
l
en3
,
len4
,
len5
,
len6
,
m
,
n
,
o
,
oppo_pos
,
p
,
parseQueryString
,
pass_validated
,
player
,
ref3
,
replay
,
room
,
roomsjson
,
u
,
win_pos
;
parseQueryString
=
true
;
u
=
url
.
parse
(
request
.
url
,
parseQueryString
);
pass_validated
=
u
.
query
.
pass
===
settings
.
modules
.
http
.
password
;
...
...
@@ -2797,10 +2861,10 @@
response
.
writeHead
(
200
);
roomsjson
=
JSON
.
stringify
({
rooms
:
(
function
()
{
var
l
,
len2
,
results
;
var
l
en3
,
m
,
results
;
results
=
[];
for
(
l
=
0
,
len2
=
ROOM_all
.
length
;
l
<
len2
;
l
++
)
{
room
=
ROOM_all
[
l
];
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
results
.
push
({
pid
:
room
.
process
.
pid
.
toString
(),
...
...
@@ -2809,11 +2873,11 @@
roommode
:
room
.
hostinfo
.
mode
,
needpass
:
(
room
.
name
.
indexOf
(
'
$
'
)
!==
-
1
).
toString
(),
users
:
(
function
()
{
var
len
3
,
m
,
ref2
,
results1
;
ref
2
=
room
.
players
;
var
len
4
,
n
,
ref3
,
results1
;
ref
3
=
room
.
players
;
results1
=
[];
for
(
m
=
0
,
len3
=
ref2
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref
2
[
m
];
for
(
n
=
0
,
len4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref
3
[
n
];
if
(
player
.
pos
!=
null
)
{
results1
.
push
({
id
:
(
-
1
).
toString
(),
...
...
@@ -2853,9 +2917,9 @@
archive_name
=
moment
().
format
(
'
YYYY-MM-DD HH-mm-ss
'
)
+
"
.zip
"
;
archive_args
=
[
"
a
"
,
"
-mx0
"
,
"
-y
"
,
archive_name
];
check
=
false
;
ref
2
=
duel_log
.
duel_log
;
for
(
l
=
0
,
len2
=
ref2
.
length
;
l
<
len2
;
l
++
)
{
replay
=
ref
2
[
l
];
ref
3
=
duel_log
.
duel_log
;
for
(
m
=
0
,
len3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
replay
=
ref
3
[
m
];
check
=
true
;
archive_args
.
push
(
replay
.
replay_filename
);
}
...
...
@@ -2953,8 +3017,8 @@
return
;
}
if
(
u
.
query
.
shout
)
{
for
(
m
=
0
,
len3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
for
(
n
=
0
,
len4
=
ROOM_all
.
length
;
n
<
len4
;
n
++
)
{
room
=
ROOM_all
[
n
];
if
(
room
&&
room
.
established
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
u
.
query
.
shout
,
ygopro
.
constants
.
COLORS
.
YELLOW
);
}
...
...
@@ -2989,8 +3053,8 @@
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
['ban ok', '
"
+
u
.
query
.
ban
+
"
']
"
));
}
else
if
(
u
.
query
.
death
)
{
death_room_found
=
false
;
for
(
n
=
0
,
len4
=
ROOM_all
.
length
;
n
<
len4
;
n
++
)
{
room
=
ROOM_all
[
n
];
for
(
o
=
0
,
len5
=
ROOM_all
.
length
;
o
<
len5
;
o
++
)
{
room
=
ROOM_all
[
o
];
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
!
room
.
death
&&
(
u
.
query
.
death
===
"
all
"
||
u
.
query
.
death
===
room
.
port
.
toString
())))
{
continue
;
}
...
...
@@ -3050,8 +3114,8 @@
}
}
else
if
(
u
.
query
.
deathcancel
)
{
death_room_found
=
false
;
for
(
o
=
0
,
len5
=
ROOM_all
.
length
;
o
<
len5
;
o
++
)
{
room
=
ROOM_all
[
o
];
for
(
p
=
0
,
len6
=
ROOM_all
.
length
;
p
<
len6
;
p
++
)
{
room
=
ROOM_all
[
p
];
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
room
.
death
&&
(
u
.
query
.
deathcancel
===
"
all
"
||
u
.
query
.
deathcancel
===
room
.
port
.
toString
())))
{
continue
;
}
...
...
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