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
6c605bb7
Commit
6c605bb7
authored
Jan 24, 2019
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'compat_pre'
parents
710b646e
6438a63f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
353 additions
and
128 deletions
+353
-128
config_build/config.json
config_build/config.json
+5
-0
config_tourney/config.json
config_tourney/config.json
+5
-0
data/default_config.json
data/default_config.json
+5
-0
data/i18n.json
data/i18n.json
+2
-0
ygopro-server.coffee
ygopro-server.coffee
+96
-1
ygopro-server.js
ygopro-server.js
+240
-127
No files found.
config_build/config.json
View file @
6c605bb7
...
@@ -72,6 +72,11 @@
...
@@ -72,6 +72,11 @@
"enabled"
:
false
,
"enabled"
:
false
,
"generate_count"
:
500
"generate_count"
:
500
},
},
"pre_release_compat"
:
{
"enabled"
:
false
,
"official_database"
:
"./ygopro/cards.cdb"
,
"pre_release_database"
:
"./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel"
:
{
"random_duel"
:
{
"enabled"
:
true
,
"enabled"
:
true
,
"no_rematch_check"
:
false
,
"no_rematch_check"
:
false
,
...
...
config_tourney/config.json
View file @
6c605bb7
...
@@ -72,6 +72,11 @@
...
@@ -72,6 +72,11 @@
"enabled"
:
false
,
"enabled"
:
false
,
"generate_count"
:
500
"generate_count"
:
500
},
},
"pre_release_compat"
:
{
"enabled"
:
false
,
"official_database"
:
"./ygopro/cards.cdb"
,
"pre_release_database"
:
"./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel"
:
{
"random_duel"
:
{
"enabled"
:
false
,
"enabled"
:
false
,
"no_rematch_check"
:
false
,
"no_rematch_check"
:
false
,
...
...
data/default_config.json
View file @
6c605bb7
...
@@ -77,6 +77,11 @@
...
@@ -77,6 +77,11 @@
"enabled"
:
false
,
"enabled"
:
false
,
"generate_count"
:
500
"generate_count"
:
500
},
},
"pre_release_compat"
:
{
"enabled"
:
false
,
"official_database"
:
"./ygopro/cards.cdb"
,
"pre_release_database"
:
"./../ygopro-pre-data/expansions/pre-release.cdb"
},
"random_duel"
:
{
"random_duel"
:
{
"enabled"
:
false
,
"enabled"
:
false
,
"no_rematch_check"
:
false
,
"no_rematch_check"
:
false
,
...
...
data/i18n.json
View file @
6c605bb7
...
@@ -186,6 +186,7 @@
...
@@ -186,6 +186,7 @@
"vip_set_victory"
:
"Your victory word have been set."
,
"vip_set_victory"
:
"Your victory word have been set."
,
"vip_password_changed"
:
"Password changed."
,
"vip_password_changed"
:
"Password changed."
,
"vip_player_name_too_long"
:
"Your username or password is too long to log in. Please change your username and try again."
,
"vip_player_name_too_long"
:
"Your username or password is too long to log in. Please change your username and try again."
,
"pre_release_compat_hint"
:
"It seems like you're a duelist with pre-release cards. The pre-release compat mode is turned on."
,
"replay_hint_part1"
:
"Sending the replay of the duel number "
,
"replay_hint_part1"
:
"Sending the replay of the duel number "
,
"replay_hint_part2"
:
"."
,
"replay_hint_part2"
:
"."
,
"athletic_arena_tip"
:
"During an athletic match, a game quit behavior is regarded as a surrender."
"athletic_arena_tip"
:
"During an athletic match, a game quit behavior is regarded as a surrender."
...
@@ -521,6 +522,7 @@
...
@@ -521,6 +522,7 @@
"vip_set_victory"
:
"已设置胜利台词。"
,
"vip_set_victory"
:
"已设置胜利台词。"
,
"vip_password_changed"
:
"密码修改成功。"
,
"vip_password_changed"
:
"密码修改成功。"
,
"vip_player_name_too_long"
:
"你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。"
,
"vip_player_name_too_long"
:
"你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。"
,
"pre_release_compat_hint"
:
"看起来你是使用先行卡数据的用户,已开启先行卡兼容模式。"
,
"replay_hint_part1"
:
"正在发送第"
,
"replay_hint_part1"
:
"正在发送第"
,
"replay_hint_part2"
:
"局决斗的录像。"
,
"replay_hint_part2"
:
"局决斗的录像。"
,
"athletic_arena_tip"
:
"在竞技匹配中,比赛开始前退出游戏也会视为投降。"
"athletic_arena_tip"
:
"在竞技匹配中,比赛开始前退出游戏也会视为投降。"
...
...
ygopro-server.coffee
View file @
6c605bb7
...
@@ -44,6 +44,7 @@ import_datas = [
...
@@ -44,6 +44,7 @@ import_datas = [
"abuse_count"
,
"abuse_count"
,
"ban_mc"
,
"ban_mc"
,
"vip"
,
"vip"
,
"is_using_pre_release"
,
"vpass"
,
"vpass"
,
"rag"
,
"rag"
,
"rid"
,
"rid"
,
...
@@ -341,6 +342,9 @@ if settings.modules.windbot.enabled
...
@@ -341,6 +342,9 @@ if settings.modules.windbot.enabled
if
settings
.
modules
.
heartbeat_detection
.
enabled
if
settings
.
modules
.
heartbeat_detection
.
enabled
long_resolve_cards
=
loadJSON
(
'./data/long_resolve_cards.json'
)
long_resolve_cards
=
loadJSON
(
'./data/long_resolve_cards.json'
)
if
settings
.
modules
.
pre_release_compat
.
enabled
sqlite3
=
require
(
'sqlite3'
).
verbose
()
# 组件
# 组件
ygopro
=
require
'./ygopro.js'
ygopro
=
require
'./ygopro.js'
roomlist
=
require
'./roomlist.js'
if
settings
.
modules
.
http
.
websocket_roomlist
roomlist
=
require
'./roomlist.js'
if
settings
.
modules
.
http
.
websocket_roomlist
...
@@ -1015,6 +1019,22 @@ SOCKET_flush_data = (sk, datas) ->
...
@@ -1015,6 +1019,22 @@ SOCKET_flush_data = (sk, datas) ->
datas
.
splice
(
0
,
datas
.
length
)
datas
.
splice
(
0
,
datas
.
length
)
return
true
return
true
replace_buffer
=
(
buffer
,
list
,
start_pos
)
->
found
=
0
len
=
buffer
.
length
if
len
<
4
+
start_pos
return
0
for
i
in
[
start_pos
...
len
-
3
]
code
=
buffer
.
readInt32LE
(
i
)
if
list
[
code
]
code
=
list
[
code
]
buffer
.
writeInt32LE
(
code
,
i
)
found
++
i
+=
3
if
i
>=
len
-
4
break
return
found
class
Room
class
Room
constructor
:
(
name
,
@
hostinfo
)
->
constructor
:
(
name
,
@
hostinfo
)
->
@
name
=
name
@
name
=
name
...
@@ -1039,6 +1059,40 @@ class Room
...
@@ -1039,6 +1059,40 @@ class Room
@
replays
=
[]
@
replays
=
[]
ROOM_all
.
push
this
ROOM_all
.
push
this
if
settings
.
modules
.
pre_release_compat
.
enabled
list_official_to_pre
=
{}
list_pre_to_official
=
{}
@
list_official_to_pre
=
list_official_to_pre
@
list_pre_to_official
=
list_pre_to_official
temp_list
=
{}
try
official_database
=
new
sqlite3
.
Database
(
settings
.
modules
.
pre_release_compat
.
official_database
)
pre_release_database
=
new
sqlite3
.
Database
(
settings
.
modules
.
pre_release_compat
.
pre_release_database
)
pre_release_database
.
each
(
"select id,name from texts"
,
(
err
,
result
)
->
if
err
log
.
warn
(
"Error loading pre-release database."
,
err
)
else
temp_list
[
result
.
name
]
=
result
.
id
return
,
()
->
official_database
.
each
(
"select id,name from texts"
,
(
err
,
result
)
->
if
err
log
.
warn
(
"Error loading official database."
,
err
)
else
if
temp_list
[
result
.
name
]
and
temp_list
[
result
.
name
]
!=
result
.
id
official_code
=
result
.
id
pre_release_code
=
temp_list
[
result
.
name
]
list_official_to_pre
[
official_code
]
=
pre_release_code
list_pre_to_official
[
pre_release_code
]
=
official_code
return
#, () ->
# console.log("Load success.")
# return
)
return
)
catch
error
log
.
warn
(
"Error loading databases"
,
error
)
@
hostinfo
||=
JSON
.
parse
(
JSON
.
stringify
(
settings
.
hostinfo
))
@
hostinfo
||=
JSON
.
parse
(
JSON
.
stringify
(
settings
.
hostinfo
))
delete
@
hostinfo
.
comment
delete
@
hostinfo
.
comment
if
lflists
.
length
if
lflists
.
length
...
@@ -1733,6 +1787,8 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
...
@@ -1733,6 +1787,8 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
client
.
name
=
name
client
.
name
=
name
client
.
vpass
=
vpass
client
.
vpass
=
vpass
client
.
name_vpass
=
if
vpass
then
name
+
"$"
+
vpass
else
name
client
.
name_vpass
=
if
vpass
then
name
+
"$"
+
vpass
else
name
if
settings
.
modules
.
pre_release_compat
.
enabled
client
.
is_using_pre_release
=
client
.
name_vpass
==
"COMPAT"
#console.log client.name, client.vpass
#console.log client.name, client.vpass
if
settings
.
modules
.
vip
.
enabled
and
CLIENT_check_vip
(
client
)
if
settings
.
modules
.
vip
.
enabled
and
CLIENT_check_vip
(
client
)
client
.
vip
=
true
client
.
vip
=
true
...
@@ -2360,6 +2416,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
...
@@ -2360,6 +2416,8 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
room
=
ROOM_all
[
client
.
rid
]
room
=
ROOM_all
[
client
.
rid
]
return
unless
room
and
!
client
.
reconnecting
return
unless
room
and
!
client
.
reconnecting
msg
=
buffer
.
readInt8
(
0
)
msg
=
buffer
.
readInt8
(
0
)
if
settings
.
modules
.
pre_release_compat
.
enabled
and
client
.
is_using_pre_release
replace_buffer
(
buffer
,
room
.
list_official_to_pre
,
1
)
if
settings
.
modules
.
retry_handle
.
enabled
if
settings
.
modules
.
retry_handle
.
enabled
if
ygopro
.
constants
.
MSG
[
msg
]
==
'RETRY'
if
ygopro
.
constants
.
MSG
[
msg
]
==
'RETRY'
if
!
client
.
retry_count
?
if
!
client
.
retry_count
?
...
@@ -3271,14 +3329,51 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
...
@@ -3271,14 +3329,51 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
else
else
#log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side)
#log.info("bad deck: " + client.name + " / " + buff_main + " / " + buff_side)
ygopro
.
stoc_send_chat
(
client
,
"${deck_incorrect_part1}
#{
found_deck
}
${deck_incorrect_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${deck_incorrect_part1}
#{
found_deck
}
${deck_incorrect_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
return
false
else
else
#log.info("player deck not found: " + client.name)
#log.info("player deck not found: " + client.name)
ygopro
.
stoc_send_chat
(
client
,
"
#{
client
.
name
}
${deck_not_found}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"
#{
client
.
name
}
${deck_not_found}"
,
ygopro
.
constants
.
COLORS
.
RED
)
return
false
if
settings
.
modules
.
pre_release_compat
.
enabled
found
=
false
buff_main_new
=
[]
buff_side_new
=
[]
for
code
in
buff_main
code_
=
code
if
room
.
list_pre_to_official
[
code
]
code_
=
room
.
list_pre_to_official
[
code
]
found
=
true
buff_main_new
.
push
(
code_
)
for
code
in
buff_side
code_
=
code
if
room
.
list_pre_to_official
[
code
]
code_
=
room
.
list_pre_to_official
[
code
]
found
=
true
buff_side_new
.
push
(
code_
)
if
found
compat_struct
=
ygopro
.
structs
[
"deck"
]
compat_struct
.
_setBuff
(
buffer
)
compat_deckbuf
=
buff_main_new
.
concat
(
buff_side_new
)
compat_struct
.
set
(
"mainc"
,
buff_main_new
.
length
)
compat_struct
.
set
(
"sidec"
,
buff_side_new
.
length
)
compat_struct
.
set
(
"deckbuf"
,
compat_deckbuf
)
buffer
=
compat_struct
.
buffer
client
.
main
=
buff_main_new
client
.
side
=
buff_side_new
if
!
room
.
started
client
.
is_using_pre_release
=
found
or
client
.
vpass
==
"COMPAT"
if
client
.
is_using_pre_release
ygopro
.
stoc_send_chat
(
client
,
"${pre_release_compat_hint}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
return
false
return
false
ygopro
.
ctos_follow
'RESPONSE'
,
false
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
ygopro
.
ctos_follow
'RESPONSE'
,
false
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
room
=
ROOM_all
[
client
.
rid
]
room
=
ROOM_all
[
client
.
rid
]
return
unless
room
and
(
room
.
random_type
or
room
.
arena
)
return
unless
room
if
settings
.
modules
.
pre_release_compat
.
enabled
and
client
.
is_using_pre_release
replace_buffer
(
buffer
,
room
.
list_pre_to_official
,
0
)
return
unless
room
.
random_type
or
room
.
arena
room
.
last_active_time
=
moment
()
room
.
last_active_time
=
moment
()
return
return
...
...
ygopro-server.js
View file @
6c605bb7
// Generated by CoffeeScript 1.12.7
// Generated by CoffeeScript 1.12.7
(
function
()
{
(
function
()
{
var
CLIENT_check_vip
,
CLIENT_get_absolute_pos
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
CLIENT_get_partner
,
CLIENT_heartbeat_register
,
CLIENT_heartbeat_unregister
,
CLIENT_import_data
,
CLIENT_is_able_to_kick_reconnect
,
CLIENT_is_able_to_reconnect
,
CLIENT_is_banned_by_mc
,
CLIENT_is_player
,
CLIENT_kick
,
CLIENT_kick_reconnect
,
CLIENT_pre_reconnect
,
CLIENT_reconnect
,
CLIENT_reconnect_register
,
CLIENT_reconnect_unregister
,
CLIENT_send_pre_reconnect_info
,
CLIENT_send_reconnect_info
,
CLIENT_send_replays
,
CLIENT_send_vip_status
,
CLIENT_use_cdkey
,
Cloud_replay_ids
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
ROOM_clear_disconnect
,
ROOM_connected_ip
,
ROOM_find_by_name
,
ROOM_find_by_port
,
ROOM_find_by_title
,
ROOM_find_or_create_ai
,
ROOM_find_or_create_by_name
,
ROOM_find_or_create_random
,
ROOM_player_flee
,
ROOM_player_get_score
,
ROOM_player_lose
,
ROOM_player_win
,
ROOM_players_banned
,
ROOM_players_oppentlist
,
ROOM_players_scores
,
ROOM_unwelcome
,
ROOM_validate
,
Room
,
SERVER_clear_disconnect
,
SOCKET_flush_data
,
VIP_generate_cdkeys
,
_
,
addCallback
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_queue_callbacks
,
chat_color
,
concat_name
,
config
,
cppversion
,
crypto
,
date
,
default_config
,
default_data
,
dialogues
,
disconnect_list
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
get_callback
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
import_datas
,
imported
,
is_requesting
,
j
,
k
,
l
,
len
,
len1
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_dialogues_custom
,
load_tips
,
load_tips_zh
,
load_words
,
log
,
long_resolve_cards
,
memory_usage
,
merge
,
moment
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
oldwords
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
redis
,
redisdb
,
ref
,
ref1
,
ref2
,
refresh_challonge_cache
,
release_disconnect
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
spawn_windbot
,
tips
,
url
,
users_cache
,
v
,
vip_info
,
wait_room_start
,
wait_room_start_arena
,
windbot_looplimit
,
windbots
,
words
,
ygopro
,
zlib
;
var
CLIENT_check_vip
,
CLIENT_get_absolute_pos
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
CLIENT_get_partner
,
CLIENT_heartbeat_register
,
CLIENT_heartbeat_unregister
,
CLIENT_import_data
,
CLIENT_is_able_to_kick_reconnect
,
CLIENT_is_able_to_reconnect
,
CLIENT_is_banned_by_mc
,
CLIENT_is_player
,
CLIENT_kick
,
CLIENT_kick_reconnect
,
CLIENT_pre_reconnect
,
CLIENT_reconnect
,
CLIENT_reconnect_register
,
CLIENT_reconnect_unregister
,
CLIENT_send_pre_reconnect_info
,
CLIENT_send_reconnect_info
,
CLIENT_send_replays
,
CLIENT_send_vip_status
,
CLIENT_use_cdkey
,
Cloud_replay_ids
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
ROOM_clear_disconnect
,
ROOM_connected_ip
,
ROOM_find_by_name
,
ROOM_find_by_port
,
ROOM_find_by_title
,
ROOM_find_or_create_ai
,
ROOM_find_or_create_by_name
,
ROOM_find_or_create_random
,
ROOM_player_flee
,
ROOM_player_get_score
,
ROOM_player_lose
,
ROOM_player_win
,
ROOM_players_banned
,
ROOM_players_oppentlist
,
ROOM_players_scores
,
ROOM_unwelcome
,
ROOM_validate
,
Room
,
SERVER_clear_disconnect
,
SOCKET_flush_data
,
VIP_generate_cdkeys
,
_
,
addCallback
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_queue_callbacks
,
chat_color
,
concat_name
,
config
,
cppversion
,
crypto
,
date
,
default_config
,
default_data
,
dialogues
,
disconnect_list
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
get_callback
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
import_datas
,
imported
,
is_requesting
,
j
,
k
,
l
,
len
1
,
len2
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_dialogues_custom
,
load_tips
,
load_tips_zh
,
load_words
,
log
,
long_resolve_cards
,
memory_usage
,
merge
,
moment
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
oldwords
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
redis
,
redisdb
,
ref
,
ref1
,
ref2
,
refresh_challonge_cache
,
release_disconnect
,
replace_buffer
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
spawn_windbot
,
sqlite3
,
tips
,
url
,
users_cache
,
v
,
vip_info
,
wait_room_start
,
wait_room_start_arena
,
windbot_looplimit
,
windbots
,
words
,
ygopro
,
zlib
;
net
=
require
(
'
net
'
);
net
=
require
(
'
net
'
);
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
}
}
});
});
import_datas
=
[
"
abuse_count
"
,
"
ban_mc
"
,
"
vip
"
,
"
vpass
"
,
"
rag
"
,
"
rid
"
,
"
is_post_watcher
"
,
"
retry_count
"
,
"
name
"
,
"
pass
"
,
"
is_first
"
,
"
lp
"
,
"
card_count
"
,
"
is_host
"
,
"
pos
"
,
"
surrend_confirm
"
,
"
kick_count
"
,
"
deck_saved
"
,
"
main
"
,
"
side
"
,
"
side_interval
"
,
"
side_tcount
"
,
"
selected_preduel
"
,
"
last_game_msg
"
,
"
last_game_msg_title
"
,
"
last_hint_msg
"
,
"
start_deckbuf
"
,
"
challonge_info
"
,
"
ready_trap
"
,
"
replays_sent
"
];
import_datas
=
[
"
abuse_count
"
,
"
ban_mc
"
,
"
vip
"
,
"
is_using_pre_release
"
,
"
vpass
"
,
"
rag
"
,
"
rid
"
,
"
is_post_watcher
"
,
"
retry_count
"
,
"
name
"
,
"
pass
"
,
"
is_first
"
,
"
lp
"
,
"
card_count
"
,
"
is_host
"
,
"
pos
"
,
"
surrend_confirm
"
,
"
kick_count
"
,
"
deck_saved
"
,
"
main
"
,
"
side
"
,
"
side_interval
"
,
"
side_tcount
"
,
"
selected_preduel
"
,
"
last_game_msg
"
,
"
last_game_msg_title
"
,
"
last_hint_msg
"
,
"
start_deckbuf
"
,
"
challonge_info
"
,
"
ready_trap
"
,
"
replays_sent
"
];
merge
=
require
(
'
deepmerge
'
);
merge
=
require
(
'
deepmerge
'
);
...
@@ -176,7 +176,7 @@
...
@@ -176,7 +176,7 @@
};
};
CLIENT_use_cdkey
=
function
(
client
,
pkey
)
{
CLIENT_use_cdkey
=
function
(
client
,
pkey
)
{
var
current_date
,
found_type
,
index
,
j
,
key
,
keys
,
len
,
new_vip
,
ref
,
type
;
var
current_date
,
found_type
,
index
,
j
,
key
,
keys
,
len
1
,
new_vip
,
ref
,
type
;
if
(
!
(
settings
.
modules
.
vip
.
enabled
&&
pkey
))
{
if
(
!
(
settings
.
modules
.
vip
.
enabled
&&
pkey
))
{
return
0
;
return
0
;
}
}
...
@@ -184,7 +184,7 @@
...
@@ -184,7 +184,7 @@
ref
=
vip_info
.
cdkeys
;
ref
=
vip_info
.
cdkeys
;
for
(
type
in
ref
)
{
for
(
type
in
ref
)
{
keys
=
ref
[
type
];
keys
=
ref
[
type
];
for
(
j
=
0
,
len
=
keys
.
length
;
j
<
len
;
j
++
)
{
for
(
j
=
0
,
len
1
=
keys
.
length
;
j
<
len1
;
j
++
)
{
key
=
keys
[
j
];
key
=
keys
[
j
];
if
(
!
(
pkey
===
key
||
pkey
===
(
type
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
)))
{
if
(
!
(
pkey
===
key
||
pkey
===
(
type
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
)))
{
continue
;
continue
;
...
@@ -380,7 +380,7 @@
...
@@ -380,7 +380,7 @@
try
{
try
{
ref
=
fs
.
readFileSync
(
'
ygopro/expansions/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
ref
=
fs
.
readFileSync
(
'
ygopro/expansions/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
for
(
j
=
0
,
len
1
=
ref
.
length
;
j
<
len1
;
j
++
)
{
list
=
ref
[
j
];
list
=
ref
[
j
];
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
if
(
!
date
)
{
if
(
!
date
)
{
...
@@ -397,7 +397,7 @@
...
@@ -397,7 +397,7 @@
try
{
try
{
ref1
=
fs
.
readFileSync
(
'
ygopro/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
ref1
=
fs
.
readFileSync
(
'
ygopro/lflist.conf
'
,
'
utf8
'
).
match
(
/!.*/g
);
for
(
l
=
0
,
len
1
=
ref1
.
length
;
l
<
len1
;
l
++
)
{
for
(
l
=
0
,
len
2
=
ref1
.
length
;
l
<
len2
;
l
++
)
{
list
=
ref1
[
l
];
list
=
ref1
[
l
];
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
date
=
list
.
match
(
/!
([\d\.]
+
)
/
);
if
(
!
date
)
{
if
(
!
date
)
{
...
@@ -429,6 +429,10 @@
...
@@ -429,6 +429,10 @@
long_resolve_cards
=
loadJSON
(
'
./data/long_resolve_cards.json
'
);
long_resolve_cards
=
loadJSON
(
'
./data/long_resolve_cards.json
'
);
}
}
if
(
settings
.
modules
.
pre_release_compat
.
enabled
)
{
sqlite3
=
require
(
'
sqlite3
'
).
verbose
();
}
ygopro
=
require
(
'
./ygopro.js
'
);
ygopro
=
require
(
'
./ygopro.js
'
);
if
(
settings
.
modules
.
http
.
websocket_roomlist
)
{
if
(
settings
.
modules
.
http
.
websocket_roomlist
)
{
...
@@ -594,15 +598,15 @@
...
@@ -594,15 +598,15 @@
ROOM_bad_ip
=
{};
ROOM_bad_ip
=
{};
ban_user
=
function
(
name
)
{
ban_user
=
function
(
name
)
{
var
bad_ip
,
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
room
;
var
bad_ip
,
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
room
;
settings
.
ban
.
banned_user
.
push
(
name
);
settings
.
ban
.
banned_user
.
push
(
name
);
setting_save
(
settings
);
setting_save
(
settings
);
bad_ip
=
0
;
bad_ip
=
0
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
if
(
room
&&
room
.
established
)
{
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
n
=
0
,
len
3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref3
[
n
];
player
=
ref3
[
n
];
if
(
player
&&
(
player
.
name
===
name
||
player
.
ip
===
bad_ip
))
{
if
(
player
&&
(
player
.
name
===
name
||
player
.
ip
===
bad_ip
))
{
bad_ip
=
player
.
ip
;
bad_ip
=
player
.
ip
;
...
@@ -888,12 +892,12 @@
...
@@ -888,12 +892,12 @@
};
};
ROOM_unwelcome
=
function
(
room
,
bad_player
,
reason
)
{
ROOM_unwelcome
=
function
(
room
,
bad_player
,
reason
)
{
var
len
2
,
m
,
player
,
ref3
;
var
len
3
,
m
,
player
,
ref3
;
if
(
!
room
)
{
if
(
!
room
)
{
return
;
return
;
}
}
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
player
===
bad_player
)
{
if
(
player
&&
player
===
bad_player
)
{
ygopro
.
stoc_send_chat
(
player
,
"
${unwelcome_warn_part1}
"
+
reason
+
"
${unwelcome_warn_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
player
,
"
${unwelcome_warn_part1}
"
+
reason
+
"
${unwelcome_warn_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
...
@@ -987,9 +991,9 @@
...
@@ -987,9 +991,9 @@
};
};
CLIENT_import_data
=
function
(
client
,
old_client
,
room
)
{
CLIENT_import_data
=
function
(
client
,
old_client
,
room
)
{
var
index
,
key
,
len
2
,
len3
,
m
,
n
,
player
,
ref3
;
var
index
,
key
,
len
3
,
len4
,
m
,
n
,
player
,
ref3
;
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
index
=
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
index
=
++
m
)
{
for
(
index
=
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
index
=
++
m
)
{
player
=
ref3
[
index
];
player
=
ref3
[
index
];
if
(
player
===
old_client
)
{
if
(
player
===
old_client
)
{
room
.
players
[
index
]
=
client
;
room
.
players
[
index
]
=
client
;
...
@@ -1006,7 +1010,7 @@
...
@@ -1006,7 +1010,7 @@
if
(
room
.
selecting_tp
===
old_client
)
{
if
(
room
.
selecting_tp
===
old_client
)
{
room
.
selecting_tp
=
client
;
room
.
selecting_tp
=
client
;
}
}
for
(
n
=
0
,
len
3
=
import_datas
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
import_datas
.
length
;
n
<
len4
;
n
++
)
{
key
=
import_datas
[
n
];
key
=
import_datas
[
n
];
client
[
key
]
=
old_client
[
key
];
client
[
key
]
=
old_client
[
key
];
}
}
...
@@ -1044,10 +1048,10 @@
...
@@ -1044,10 +1048,10 @@
};
};
CLIENT_is_player
=
function
(
client
,
room
)
{
CLIENT_is_player
=
function
(
client
,
room
)
{
var
is_player
,
len
2
,
m
,
player
,
ref3
;
var
is_player
,
len
3
,
m
,
player
,
ref3
;
is_player
=
false
;
is_player
=
false
;
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
client
===
player
)
{
if
(
client
===
player
)
{
is_player
=
true
;
is_player
=
true
;
...
@@ -1081,12 +1085,12 @@
...
@@ -1081,12 +1085,12 @@
};
};
CLIENT_get_kick_reconnect_target
=
function
(
client
,
deckbuf
)
{
CLIENT_get_kick_reconnect_target
=
function
(
client
,
deckbuf
)
{
var
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
room
;
var
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
room
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
started
&&
!
room
.
windbot
)
{
if
(
room
&&
room
.
started
&&
!
room
.
windbot
)
{
ref3
=
room
.
get_playing_player
();
ref3
=
room
.
get_playing_player
();
for
(
n
=
0
,
len
3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref3
[
n
];
player
=
ref3
[
n
];
if
(
!
player
.
closed
&&
player
.
name
===
client
.
name
&&
(
settings
.
modules
.
challonge
.
enabled
||
player
.
pass
===
client
.
pass
)
&&
(
settings
.
modules
.
mycard
.
enabled
||
settings
.
modules
.
tournament_mode
.
enabled
||
player
.
ip
===
client
.
ip
||
(
client
.
vpass
&&
client
.
vpass
===
player
.
vpass
))
&&
(
!
deckbuf
||
_
.
isEqual
(
player
.
start_deckbuf
,
deckbuf
)))
{
if
(
!
player
.
closed
&&
player
.
name
===
client
.
name
&&
(
settings
.
modules
.
challonge
.
enabled
||
player
.
pass
===
client
.
pass
)
&&
(
settings
.
modules
.
mycard
.
enabled
||
settings
.
modules
.
tournament_mode
.
enabled
||
player
.
ip
===
client
.
ip
||
(
client
.
vpass
&&
client
.
vpass
===
player
.
vpass
))
&&
(
!
deckbuf
||
_
.
isEqual
(
player
.
start_deckbuf
,
deckbuf
)))
{
return
player
;
return
player
;
...
@@ -1108,7 +1112,7 @@
...
@@ -1108,7 +1112,7 @@
};
};
CLIENT_send_pre_reconnect_info
=
function
(
client
,
room
,
old_client
)
{
CLIENT_send_pre_reconnect_info
=
function
(
client
,
room
,
old_client
)
{
var
len
2
,
m
,
player
,
ref3
,
req_pos
;
var
len
3
,
m
,
player
,
ref3
,
req_pos
;
ygopro
.
stoc_send_chat
(
client
,
"
${pre_reconnecting_to_room}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${pre_reconnecting_to_room}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send
(
client
,
'
JOIN_GAME
'
,
room
.
join_game_buffer
);
ygopro
.
stoc_send
(
client
,
'
JOIN_GAME
'
,
room
.
join_game_buffer
);
req_pos
=
old_client
.
pos
;
req_pos
=
old_client
.
pos
;
...
@@ -1119,7 +1123,7 @@
...
@@ -1119,7 +1123,7 @@
type
:
req_pos
type
:
req_pos
});
});
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
ygopro
.
stoc_send
(
client
,
'
HS_PLAYER_ENTER
'
,
{
ygopro
.
stoc_send
(
client
,
'
HS_PLAYER_ENTER
'
,
{
name
:
player
.
name
,
name
:
player
.
name
,
...
@@ -1302,14 +1306,14 @@
...
@@ -1302,14 +1306,14 @@
};
};
CLIENT_send_replays
=
function
(
client
,
room
)
{
CLIENT_send_replays
=
function
(
client
,
room
)
{
var
buffer
,
i
,
len
2
,
m
,
ref3
;
var
buffer
,
i
,
len
3
,
m
,
ref3
;
if
(
!
(
settings
.
modules
.
replay_delay
&&
room
.
replays
.
length
&&
room
.
hostinfo
.
mode
===
1
&&
!
client
.
replays_sent
&&
!
client
.
closed
))
{
if
(
!
(
settings
.
modules
.
replay_delay
&&
room
.
replays
.
length
&&
room
.
hostinfo
.
mode
===
1
&&
!
client
.
replays_sent
&&
!
client
.
closed
))
{
return
false
;
return
false
;
}
}
client
.
replays_sent
=
true
;
client
.
replays_sent
=
true
;
i
=
0
;
i
=
0
;
ref3
=
room
.
replays
;
ref3
=
room
.
replays
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref3
[
m
];
buffer
=
ref3
[
m
];
++
i
;
++
i
;
ygopro
.
stoc_send_chat
(
client
,
"
${replay_hint_part1}
"
+
i
+
"
${replay_hint_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${replay_hint_part1}
"
+
i
+
"
${replay_hint_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
...
@@ -1319,11 +1323,11 @@
...
@@ -1319,11 +1323,11 @@
};
};
SOCKET_flush_data
=
function
(
sk
,
datas
)
{
SOCKET_flush_data
=
function
(
sk
,
datas
)
{
var
buffer
,
len
2
,
m
;
var
buffer
,
len
3
,
m
;
if
(
!
sk
||
sk
.
closed
)
{
if
(
!
sk
||
sk
.
closed
)
{
return
false
;
return
false
;
}
}
for
(
m
=
0
,
len
2
=
datas
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
buffer
=
datas
[
m
];
sk
.
write
(
buffer
);
sk
.
write
(
buffer
);
}
}
...
@@ -1331,9 +1335,31 @@
...
@@ -1331,9 +1335,31 @@
return
true
;
return
true
;
};
};
replace_buffer
=
function
(
buffer
,
list
,
start_pos
)
{
var
code
,
found
,
i
,
len
,
m
,
ref3
,
ref4
;
found
=
0
;
len
=
buffer
.
length
;
if
(
len
<
4
+
start_pos
)
{
return
0
;
}
for
(
i
=
m
=
ref3
=
start_pos
,
ref4
=
len
-
3
;
ref3
<=
ref4
?
m
<
ref4
:
m
>
ref4
;
i
=
ref3
<=
ref4
?
++
m
:
--
m
)
{
code
=
buffer
.
readInt32LE
(
i
);
if
(
list
[
code
])
{
code
=
list
[
code
];
buffer
.
writeInt32LE
(
code
,
i
);
found
++
;
i
+=
3
;
if
(
i
>=
len
-
4
)
{
break
;
}
}
}
return
found
;
};
Room
=
(
function
()
{
Room
=
(
function
()
{
function
Room
(
name
,
hostinfo
)
{
function
Room
(
name
,
hostinfo
)
{
var
draw_count
,
lflist
,
param
,
rule
,
start_hand
,
start_lp
,
time_limit
;
var
draw_count
,
error
,
lflist
,
list_official_to_pre
,
list_pre_to_official
,
official_database
,
param
,
pre_release_database
,
rule
,
start_hand
,
start_lp
,
temp_list
,
time_limit
;
this
.
hostinfo
=
hostinfo
;
this
.
hostinfo
=
hostinfo
;
this
.
name
=
name
;
this
.
name
=
name
;
this
.
alive
=
true
;
this
.
alive
=
true
;
...
@@ -1357,6 +1383,39 @@
...
@@ -1357,6 +1383,39 @@
this
.
replays
=
[];
this
.
replays
=
[];
}
}
ROOM_all
.
push
(
this
);
ROOM_all
.
push
(
this
);
if
(
settings
.
modules
.
pre_release_compat
.
enabled
)
{
list_official_to_pre
=
{};
list_pre_to_official
=
{};
this
.
list_official_to_pre
=
list_official_to_pre
;
this
.
list_pre_to_official
=
list_pre_to_official
;
temp_list
=
{};
try
{
official_database
=
new
sqlite3
.
Database
(
settings
.
modules
.
pre_release_compat
.
official_database
);
pre_release_database
=
new
sqlite3
.
Database
(
settings
.
modules
.
pre_release_compat
.
pre_release_database
);
pre_release_database
.
each
(
"
select id,name from texts
"
,
function
(
err
,
result
)
{
if
(
err
)
{
log
.
warn
(
"
Error loading pre-release database.
"
,
err
);
}
else
{
temp_list
[
result
.
name
]
=
result
.
id
;
}
},
function
()
{
official_database
.
each
(
"
select id,name from texts
"
,
function
(
err
,
result
)
{
var
official_code
,
pre_release_code
;
if
(
err
)
{
log
.
warn
(
"
Error loading official database.
"
,
err
);
}
else
if
(
temp_list
[
result
.
name
]
&&
temp_list
[
result
.
name
]
!==
result
.
id
)
{
official_code
=
result
.
id
;
pre_release_code
=
temp_list
[
result
.
name
];
list_official_to_pre
[
official_code
]
=
pre_release_code
;
list_pre_to_official
[
pre_release_code
]
=
official_code
;
}
});
});
}
catch
(
error1
)
{
error
=
error1
;
log
.
warn
(
"
Error loading databases
"
,
error
);
}
}
this
.
hostinfo
||
(
this
.
hostinfo
=
JSON
.
parse
(
JSON
.
stringify
(
settings
.
hostinfo
)));
this
.
hostinfo
||
(
this
.
hostinfo
=
JSON
.
parse
(
JSON
.
stringify
(
settings
.
hostinfo
)));
delete
this
.
hostinfo
.
comment
;
delete
this
.
hostinfo
.
comment
;
if
(
lflists
.
length
)
{
if
(
lflists
.
length
)
{
...
@@ -1505,9 +1564,9 @@
...
@@ -1505,9 +1564,9 @@
_this
.
port
=
parseInt
(
data
);
_this
.
port
=
parseInt
(
data
);
_
.
each
(
_this
.
players
,
function
(
player
)
{
_
.
each
(
_this
.
players
,
function
(
player
)
{
player
.
server
.
connect
(
_this
.
port
,
'
127.0.0.1
'
,
function
()
{
player
.
server
.
connect
(
_this
.
port
,
'
127.0.0.1
'
,
function
()
{
var
buffer
,
len
2
,
m
,
ref3
;
var
buffer
,
len
3
,
m
,
ref3
;
ref3
=
player
.
pre_establish_buffers
;
ref3
=
player
.
pre_establish_buffers
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref3
[
m
];
buffer
=
ref3
[
m
];
player
.
server
.
write
(
buffer
);
player
.
server
.
write
(
buffer
);
}
}
...
@@ -1718,13 +1777,13 @@
...
@@ -1718,13 +1777,13 @@
};
};
Room
.
prototype
.
get_disconnected_count
=
function
()
{
Room
.
prototype
.
get_disconnected_count
=
function
()
{
var
found
,
len
2
,
m
,
player
,
ref3
;
var
found
,
len
3
,
m
,
player
,
ref3
;
if
(
!
settings
.
modules
.
reconnect
.
enabled
)
{
if
(
!
settings
.
modules
.
reconnect
.
enabled
)
{
return
0
;
return
0
;
}
}
found
=
0
;
found
=
0
;
ref3
=
this
.
get_playing_player
();
ref3
=
this
.
get_playing_player
();
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
.
closed
)
{
if
(
player
.
closed
)
{
found
++
;
found
++
;
...
@@ -1768,17 +1827,17 @@
...
@@ -1768,17 +1827,17 @@
};
};
Room
.
prototype
.
send_replays
=
function
()
{
Room
.
prototype
.
send_replays
=
function
()
{
var
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
ref4
;
var
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
ref4
;
if
(
!
(
settings
.
modules
.
replay_delay
&&
this
.
replays
.
length
&&
this
.
hostinfo
.
mode
===
1
))
{
if
(
!
(
settings
.
modules
.
replay_delay
&&
this
.
replays
.
length
&&
this
.
hostinfo
.
mode
===
1
))
{
return
false
;
return
false
;
}
}
ref3
=
this
.
players
;
ref3
=
this
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
CLIENT_send_replays
(
player
,
this
);
CLIENT_send_replays
(
player
,
this
);
}
}
ref4
=
this
.
watchers
;
ref4
=
this
.
watchers
;
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref4
[
n
];
player
=
ref4
[
n
];
CLIENT_send_replays
(
player
,
this
);
CLIENT_send_replays
(
player
,
this
);
}
}
...
@@ -1817,9 +1876,9 @@
...
@@ -1817,9 +1876,9 @@
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
()
{
var
buffer
,
len
2
,
m
,
ref3
;
var
buffer
,
len
3
,
m
,
ref3
;
ref3
=
client
.
pre_establish_buffers
;
ref3
=
client
.
pre_establish_buffers
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
ref3
[
m
];
buffer
=
ref3
[
m
];
client
.
server
.
write
(
buffer
);
client
.
server
.
write
(
buffer
);
}
}
...
@@ -1830,7 +1889,7 @@
...
@@ -1830,7 +1889,7 @@
};
};
Room
.
prototype
.
disconnect
=
function
(
client
,
error
)
{
Room
.
prototype
.
disconnect
=
function
(
client
,
error
)
{
var
index
,
len
2
,
m
,
player
,
ref3
;
var
index
,
len
3
,
m
,
player
,
ref3
;
if
(
client
.
had_new_reconnection
)
{
if
(
client
.
had_new_reconnection
)
{
return
;
return
;
}
}
...
@@ -1844,7 +1903,7 @@
...
@@ -1844,7 +1903,7 @@
}
else
{
}
else
{
if
(
this
.
arena
&&
!
this
.
started
)
{
if
(
this
.
arena
&&
!
this
.
started
)
{
ref3
=
this
.
players
;
ref3
=
this
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
.
pos
!==
7
)
{
if
(
player
.
pos
!==
7
)
{
this
.
scores
[
player
.
name_vpass
]
=
0
;
this
.
scores
[
player
.
name_vpass
]
=
0
;
...
@@ -2013,7 +2072,7 @@
...
@@ -2013,7 +2072,7 @@
}
}
client
.
pre_establish_buffers
=
new
Array
();
client
.
pre_establish_buffers
=
new
Array
();
client
.
on
(
'
data
'
,
function
(
ctos_buffer
)
{
client
.
on
(
'
data
'
,
function
(
ctos_buffer
)
{
var
b
,
bad_ip_count
,
buffer
,
cancel
,
ctos_message_length
,
ctos_proto
,
datas
,
info
,
len
2
,
len3
,
looplimit
,
m
,
n
,
room
,
struct
;
var
b
,
bad_ip_count
,
buffer
,
cancel
,
ctos_message_length
,
ctos_proto
,
datas
,
info
,
len
3
,
len4
,
looplimit
,
m
,
n
,
room
,
struct
;
if
(
client
.
is_post_watcher
)
{
if
(
client
.
is_post_watcher
)
{
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
room
&&
!
CLIENT_is_banned_by_mc
(
client
))
{
if
(
room
&&
!
CLIENT_is_banned_by_mc
(
client
))
{
...
@@ -2090,12 +2149,12 @@
...
@@ -2090,12 +2149,12 @@
return
;
return
;
}
}
if
(
client
.
established
)
{
if
(
client
.
established
)
{
for
(
m
=
0
,
len
2
=
datas
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
buffer
=
datas
[
m
];
client
.
server
.
write
(
buffer
);
client
.
server
.
write
(
buffer
);
}
}
}
else
{
}
else
{
for
(
n
=
0
,
len
3
=
datas
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
datas
.
length
;
n
<
len4
;
n
++
)
{
buffer
=
datas
[
n
];
buffer
=
datas
[
n
];
client
.
pre_establish_buffers
.
push
(
buffer
);
client
.
pre_establish_buffers
.
push
(
buffer
);
}
}
...
@@ -2103,7 +2162,7 @@
...
@@ -2103,7 +2162,7 @@
}
}
});
});
server
.
on
(
'
data
'
,
function
(
stoc_buffer
)
{
server
.
on
(
'
data
'
,
function
(
stoc_buffer
)
{
var
b
,
buffer
,
cancel
,
datas
,
info
,
len
2
,
looplimit
,
m
,
stanzas
,
stoc_message_length
,
stoc_proto
,
struct
;
var
b
,
buffer
,
cancel
,
datas
,
info
,
len
3
,
looplimit
,
m
,
stanzas
,
stoc_message_length
,
stoc_proto
,
struct
;
stoc_message_length
=
0
;
stoc_message_length
=
0
;
stoc_proto
=
0
;
stoc_proto
=
0
;
datas
=
[];
datas
=
[];
...
@@ -2161,7 +2220,7 @@
...
@@ -2161,7 +2220,7 @@
}
}
}
}
if
(
server
.
client
&&
!
server
.
client
.
closed
)
{
if
(
server
.
client
&&
!
server
.
client
.
closed
)
{
for
(
m
=
0
,
len
2
=
datas
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
datas
.
length
;
m
<
len3
;
m
++
)
{
buffer
=
datas
[
m
];
buffer
=
datas
[
m
];
server
.
client
.
write
(
buffer
);
server
.
client
.
write
(
buffer
);
}
}
...
@@ -2219,6 +2278,9 @@
...
@@ -2219,6 +2278,9 @@
client
.
name
=
name
;
client
.
name
=
name
;
client
.
vpass
=
vpass
;
client
.
vpass
=
vpass
;
client
.
name_vpass
=
vpass
?
name
+
"
$
"
+
vpass
:
name
;
client
.
name_vpass
=
vpass
?
name
+
"
$
"
+
vpass
:
name
;
if
(
settings
.
modules
.
pre_release_compat
.
enabled
)
{
client
.
is_using_pre_release
=
client
.
name_vpass
===
"
COMPAT
"
;
}
if
(
settings
.
modules
.
vip
.
enabled
&&
CLIENT_check_vip
(
client
))
{
if
(
settings
.
modules
.
vip
.
enabled
&&
CLIENT_check_vip
(
client
))
{
client
.
vip
=
true
;
client
.
vip
=
true
;
}
}
...
@@ -2241,7 +2303,7 @@
...
@@ -2241,7 +2303,7 @@
});
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
buffer_pos
,
check
,
decrypted_buffer
,
finish
,
i
,
id
,
len
2
,
len3
,
len4
,
len5
,
len6
,
len7
,
len8
,
len9
,
line
,
m
,
n
,
name
,
o
,
oppo_pos
,
p
,
player
,
player_string
,
pre_room
,
q
,
r
,
ref3
,
ref4
,
ref5
,
ref6
,
ref7
,
ref8
,
replay_id
,
room
,
room_buffer
,
room_players
,
room_showed
,
s
,
secret
,
t
;
var
buffer_pos
,
check
,
decrypted_buffer
,
finish
,
i
,
id
,
len
10
,
len3
,
len4
,
len5
,
len6
,
len7
,
len8
,
len9
,
line
,
m
,
n
,
name
,
o
,
oppo_pos
,
p
,
player
,
player_string
,
pre_room
,
q
,
r
,
ref3
,
ref4
,
ref5
,
ref6
,
ref7
,
ref8
,
replay_id
,
room
,
room_buffer
,
room_players
,
room_showed
,
s
,
secret
,
t
;
info
.
pass
=
info
.
pass
.
trim
();
info
.
pass
=
info
.
pass
.
trim
();
client
.
pass
=
info
.
pass
;
client
.
pass
=
info
.
pass
;
if
(
CLIENT_is_able_to_reconnect
(
client
)
||
CLIENT_is_able_to_kick_reconnect
(
client
))
{
if
(
CLIENT_is_able_to_reconnect
(
client
)
||
CLIENT_is_able_to_kick_reconnect
(
client
))
{
...
@@ -2276,7 +2338,7 @@
...
@@ -2276,7 +2338,7 @@
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
L
"
&&
settings
.
modules
.
koishi_roomlist
.
enabled
)
{
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
L
"
&&
settings
.
modules
.
koishi_roomlist
.
enabled
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${koishi_roomlist_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${koishi_roomlist_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
room_showed
=
[];
room_showed
=
[];
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
&&
room
.
name
.
indexOf
(
'
$
'
)
<
0
)
{
if
(
room
&&
room
.
established
&&
room
.
name
.
indexOf
(
'
$
'
)
<
0
)
{
room_showed
.
push
(
room
);
room_showed
.
push
(
room
);
...
@@ -2286,7 +2348,7 @@
...
@@ -2286,7 +2348,7 @@
room_buffer
=
Buffer
.
alloc
(
2
+
333
*
room_showed
.
length
);
room_buffer
=
Buffer
.
alloc
(
2
+
333
*
room_showed
.
length
);
room_buffer
.
writeUInt16LE
(
room_showed
.
length
,
buffer_pos
);
room_buffer
.
writeUInt16LE
(
room_showed
.
length
,
buffer_pos
);
buffer_pos
+=
2
;
buffer_pos
+=
2
;
for
(
n
=
0
,
len
3
=
room_showed
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
room_showed
.
length
;
n
<
len4
;
n
++
)
{
room
=
room_showed
[
n
];
room
=
room_showed
[
n
];
room_buffer
.
write
(
room
.
name
,
buffer_pos
,
64
,
"
utf8
"
);
room_buffer
.
write
(
room
.
name
,
buffer_pos
,
64
,
"
utf8
"
);
buffer_pos
+=
64
;
buffer_pos
+=
64
;
...
@@ -2299,7 +2361,7 @@
...
@@ -2299,7 +2361,7 @@
buffer_pos
++
;
buffer_pos
++
;
room_players
=
[];
room_players
=
[];
ref3
=
room
.
get_playing_player
();
ref3
=
room
.
get_playing_player
();
for
(
o
=
0
,
len
4
=
ref3
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len
5
=
ref3
.
length
;
o
<
len5
;
o
++
)
{
player
=
ref3
[
o
];
player
=
ref3
[
o
];
if
(
player
)
{
if
(
player
)
{
room_players
[
player
.
pos
]
=
player
;
room_players
[
player
.
pos
]
=
player
;
...
@@ -2404,7 +2466,7 @@
...
@@ -2404,7 +2466,7 @@
return
(
checksum
&
0xFF
)
===
0
;
return
(
checksum
&
0xFF
)
===
0
;
};
};
finish
=
function
(
buffer
)
{
finish
=
function
(
buffer
)
{
var
action
,
len
5
,
len6
,
len7
,
len8
,
line
,
name
,
opt1
,
opt2
,
opt3
,
options
,
p
,
q
,
r
,
ref4
,
ref5
,
ref6
,
ref7
,
s
,
title
;
var
action
,
len
6
,
len7
,
len8
,
len9
,
line
,
name
,
opt1
,
opt2
,
opt3
,
options
,
p
,
q
,
r
,
ref4
,
ref5
,
ref6
,
ref7
,
s
,
title
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
}
}
...
@@ -2457,7 +2519,7 @@
...
@@ -2457,7 +2519,7 @@
room
=
ROOM_find_or_create_by_name
(
'
M#
'
+
info
.
pass
.
slice
(
8
));
room
=
ROOM_find_or_create_by_name
(
'
M#
'
+
info
.
pass
.
slice
(
8
));
if
(
room
)
{
if
(
room
)
{
ref4
=
room
.
get_playing_player
();
ref4
=
room
.
get_playing_player
();
for
(
p
=
0
,
len
5
=
ref4
.
length
;
p
<
len5
;
p
++
)
{
for
(
p
=
0
,
len
6
=
ref4
.
length
;
p
<
len6
;
p
++
)
{
player
=
ref4
[
p
];
player
=
ref4
[
p
];
if
(
!
(
player
&&
player
.
name
===
client
.
name
))
{
if
(
!
(
player
&&
player
.
name
===
client
.
name
))
{
continue
;
continue
;
...
@@ -2496,13 +2558,13 @@
...
@@ -2496,13 +2558,13 @@
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
ref5
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
ref5
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
for
(
q
=
0
,
len
6
=
ref5
.
length
;
q
<
len6
;
q
++
)
{
for
(
q
=
0
,
len
7
=
ref5
.
length
;
q
<
len7
;
q
++
)
{
line
=
ref5
[
q
];
line
=
ref5
[
q
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref6
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
ref6
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
r
=
0
,
len
7
=
ref6
.
length
;
r
<
len7
;
r
++
)
{
for
(
r
=
0
,
len
8
=
ref6
.
length
;
r
<
len8
;
r
++
)
{
line
=
ref6
[
r
];
line
=
ref6
[
r
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -2511,7 +2573,7 @@
...
@@ -2511,7 +2573,7 @@
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref7
=
room
.
watcher_buffers
;
ref7
=
room
.
watcher_buffers
;
for
(
s
=
0
,
len
8
=
ref7
.
length
;
s
<
len8
;
s
++
)
{
for
(
s
=
0
,
len
9
=
ref7
.
length
;
s
<
len9
;
s
++
)
{
buffer
=
ref7
[
s
];
buffer
=
ref7
[
s
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
...
@@ -2530,7 +2592,7 @@
...
@@ -2530,7 +2592,7 @@
secret
=
id
%
65535
+
1
;
secret
=
id
%
65535
+
1
;
decrypted_buffer
=
Buffer
.
allocUnsafe
(
6
);
decrypted_buffer
=
Buffer
.
allocUnsafe
(
6
);
ref4
=
[
0
,
2
,
4
];
ref4
=
[
0
,
2
,
4
];
for
(
p
=
0
,
len
5
=
ref4
.
length
;
p
<
len5
;
p
++
)
{
for
(
p
=
0
,
len
6
=
ref4
.
length
;
p
<
len6
;
p
++
)
{
i
=
ref4
[
p
];
i
=
ref4
[
p
];
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
}
}
...
@@ -2548,13 +2610,13 @@
...
@@ -2548,13 +2610,13 @@
},
},
json
:
true
json
:
true
},
function
(
error
,
response
,
body
)
{
},
function
(
error
,
response
,
body
)
{
var
len
6
,
q
,
ref5
;
var
len
7
,
q
,
ref5
;
if
(
body
&&
body
.
user
)
{
if
(
body
&&
body
.
user
)
{
users_cache
[
client
.
name
]
=
body
.
user
.
id
;
users_cache
[
client
.
name
]
=
body
.
user
.
id
;
secret
=
body
.
user
.
id
%
65535
+
1
;
secret
=
body
.
user
.
id
%
65535
+
1
;
decrypted_buffer
=
Buffer
.
allocUnsafe
(
6
);
decrypted_buffer
=
Buffer
.
allocUnsafe
(
6
);
ref5
=
[
0
,
2
,
4
];
ref5
=
[
0
,
2
,
4
];
for
(
q
=
0
,
len
6
=
ref5
.
length
;
q
<
len6
;
q
++
)
{
for
(
q
=
0
,
len
7
=
ref5
.
length
;
q
<
len7
;
q
++
)
{
i
=
ref5
[
q
];
i
=
ref5
[
q
];
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
decrypted_buffer
.
writeUInt16LE
(
buffer
.
readUInt16LE
(
i
)
^
secret
,
i
);
}
}
...
@@ -2579,7 +2641,7 @@
...
@@ -2579,7 +2641,7 @@
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref5
=
room
.
watcher_buffers
;
ref5
=
room
.
watcher_buffers
;
for
(
q
=
0
,
len
6
=
ref5
.
length
;
q
<
len6
;
q
++
)
{
for
(
q
=
0
,
len
7
=
ref5
.
length
;
q
<
len7
;
q
++
)
{
buffer
=
ref5
[
q
];
buffer
=
ref5
[
q
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
...
@@ -2616,7 +2678,7 @@
...
@@ -2616,7 +2678,7 @@
challonge
.
matches
.
_index
({
challonge
.
matches
.
_index
({
id
:
settings
.
modules
.
challonge
.
tournament_id
,
id
:
settings
.
modules
.
challonge
.
tournament_id
,
callback
:
function
(
err
,
data
)
{
callback
:
function
(
err
,
data
)
{
var
len10
,
len
7
,
len8
,
len9
,
line
,
match
,
r
,
ref6
,
ref7
,
ref8
,
ref9
,
s
,
t
,
x
;
var
len10
,
len
11
,
len8
,
len9
,
line
,
match
,
r
,
ref6
,
ref7
,
ref8
,
ref9
,
s
,
t
,
x
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
}
}
...
@@ -2654,13 +2716,13 @@
...
@@ -2654,13 +2716,13 @@
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
ref6
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
ref6
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
for
(
r
=
0
,
len
7
=
ref6
.
length
;
r
<
len7
;
r
++
)
{
for
(
r
=
0
,
len
8
=
ref6
.
length
;
r
<
len8
;
r
++
)
{
line
=
ref6
[
r
];
line
=
ref6
[
r
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref7
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
ref7
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
s
=
0
,
len
8
=
ref7
.
length
;
s
<
len8
;
s
++
)
{
for
(
s
=
0
,
len
9
=
ref7
.
length
;
s
<
len9
;
s
++
)
{
line
=
ref7
[
s
];
line
=
ref7
[
s
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -2669,7 +2731,7 @@
...
@@ -2669,7 +2731,7 @@
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref8
=
room
.
watcher_buffers
;
ref8
=
room
.
watcher_buffers
;
for
(
t
=
0
,
len
9
=
ref8
.
length
;
t
<
len9
;
t
++
)
{
for
(
t
=
0
,
len
10
=
ref8
.
length
;
t
<
len10
;
t
++
)
{
buffer
=
ref8
[
t
];
buffer
=
ref8
[
t
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
...
@@ -2680,7 +2742,7 @@
...
@@ -2680,7 +2742,7 @@
ygopro
.
stoc_die
(
client
,
"
${watch_denied_room}
"
);
ygopro
.
stoc_die
(
client
,
"
${watch_denied_room}
"
);
}
else
{
}
else
{
ref9
=
room
.
get_playing_player
();
ref9
=
room
.
get_playing_player
();
for
(
x
=
0
,
len1
0
=
ref9
.
length
;
x
<
len10
;
x
++
)
{
for
(
x
=
0
,
len1
1
=
ref9
.
length
;
x
<
len11
;
x
++
)
{
player
=
ref9
[
x
];
player
=
ref9
[
x
];
if
(
!
(
player
&&
player
!==
client
&&
player
.
challonge_info
.
id
===
client
.
challonge_info
.
id
))
{
if
(
!
(
player
&&
player
!==
client
&&
player
.
challonge_info
.
id
===
client
.
challonge_info
.
id
))
{
continue
;
continue
;
...
@@ -2745,13 +2807,13 @@
...
@@ -2745,13 +2807,13 @@
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
ref6
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
ref6
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
for
(
r
=
0
,
len
7
=
ref6
.
length
;
r
<
len7
;
r
++
)
{
for
(
r
=
0
,
len
8
=
ref6
.
length
;
r
<
len8
;
r
++
)
{
line
=
ref6
[
r
];
line
=
ref6
[
r
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref7
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
ref7
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
s
=
0
,
len
8
=
ref7
.
length
;
s
<
len8
;
s
++
)
{
for
(
s
=
0
,
len
9
=
ref7
.
length
;
s
<
len9
;
s
++
)
{
line
=
ref7
[
s
];
line
=
ref7
[
s
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -2760,7 +2822,7 @@
...
@@ -2760,7 +2822,7 @@
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref8
=
room
.
watcher_buffers
;
ref8
=
room
.
watcher_buffers
;
for
(
t
=
0
,
len
9
=
ref8
.
length
;
t
<
len9
;
t
++
)
{
for
(
t
=
0
,
len
10
=
ref8
.
length
;
t
<
len10
;
t
++
)
{
buffer
=
ref8
[
t
];
buffer
=
ref8
[
t
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
...
@@ -2778,7 +2840,7 @@
...
@@ -2778,7 +2840,7 @@
});
});
ygopro
.
stoc_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
len
2
,
len3
,
len4
,
line
,
m
,
n
,
o
,
player
,
recorder
,
ref3
,
ref4
,
ref5
,
room
,
watcher
;
var
len
3
,
len4
,
len5
,
line
,
m
,
n
,
o
,
player
,
recorder
,
ref3
,
ref4
,
ref5
,
room
,
watcher
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
return
;
return
;
...
@@ -2788,13 +2850,13 @@
...
@@ -2788,13 +2850,13 @@
}
}
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
ref3
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
ref3
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
line
=
ref3
[
m
];
line
=
ref3
[
m
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref4
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
ref4
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
line
=
ref4
[
n
];
line
=
ref4
[
n
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -2824,7 +2886,7 @@
...
@@ -2824,7 +2886,7 @@
if
(
settings
.
modules
.
random_duel
.
record_match_scores
&&
room
.
random_type
===
'
M
'
)
{
if
(
settings
.
modules
.
random_duel
.
record_match_scores
&&
room
.
random_type
===
'
M
'
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
ROOM_player_get_score
(
client
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ygopro
.
stoc_send_chat_to_room
(
room
,
ROOM_player_get_score
(
client
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ref5
=
room
.
players
;
ref5
=
room
.
players
;
for
(
o
=
0
,
len
4
=
ref5
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len
5
=
ref5
.
length
;
o
<
len5
;
o
++
)
{
player
=
ref5
[
o
];
player
=
ref5
[
o
];
if
(
player
.
pos
!==
7
&&
player
!==
client
)
{
if
(
player
.
pos
!==
7
&&
player
!==
client
)
{
ygopro
.
stoc_send_chat
(
client
,
ROOM_player_get_score
(
player
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ygopro
.
stoc_send_chat
(
client
,
ROOM_player_get_score
(
player
),
ygopro
.
constants
.
COLORS
.
GREEN
);
...
@@ -2863,14 +2925,14 @@
...
@@ -2863,14 +2925,14 @@
ygopro
.
ctos_send
(
watcher
,
'
HS_TOOBSERVER
'
);
ygopro
.
ctos_send
(
watcher
,
'
HS_TOOBSERVER
'
);
});
});
watcher
.
on
(
'
data
'
,
function
(
data
)
{
watcher
.
on
(
'
data
'
,
function
(
data
)
{
var
len
5
,
p
,
ref6
,
w
;
var
len
6
,
p
,
ref6
,
w
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
if
(
!
room
)
{
return
;
return
;
}
}
room
.
watcher_buffers
.
push
(
data
);
room
.
watcher_buffers
.
push
(
data
);
ref6
=
room
.
watchers
;
ref6
=
room
.
watchers
;
for
(
p
=
0
,
len
5
=
ref6
.
length
;
p
<
len5
;
p
++
)
{
for
(
p
=
0
,
len
6
=
ref6
.
length
;
p
<
len6
;
p
++
)
{
w
=
ref6
[
p
];
w
=
ref6
[
p
];
if
(
w
)
{
if
(
w
)
{
w
.
write
(
data
);
w
.
write
(
data
);
...
@@ -2942,12 +3004,15 @@
...
@@ -2942,12 +3004,15 @@
}
}
ygopro
.
stoc_follow
(
'
GAME_MSG
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
GAME_MSG
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
act_pos
,
card
,
chain
,
check
,
count
,
cpos
,
deck_found
,
found
,
hint_type
,
i
,
id
,
len10
,
len
2
,
len3
,
len4
,
len5
,
len6
,
len7
,
len8
,
len9
,
limbo_found
,
line
,
loc
,
m
,
max_loop
,
msg
,
n
,
o
,
oppo_pos
,
p
,
phase
,
player
,
playertype
,
pos
,
ppos
,
q
,
r
,
r_player
,
reason
,
ref10
,
ref11
,
ref12
,
ref13
,
ref3
,
ref4
,
ref5
,
ref6
,
ref7
,
ref8
,
ref9
,
room
,
s
,
t
,
trigger_location
,
val
,
win_pos
,
x
,
y
;
var
act_pos
,
card
,
chain
,
check
,
count
,
cpos
,
deck_found
,
found
,
hint_type
,
i
,
id
,
len10
,
len
11
,
len3
,
len4
,
len5
,
len6
,
len7
,
len8
,
len9
,
limbo_found
,
line
,
loc
,
m
,
max_loop
,
msg
,
n
,
o
,
oppo_pos
,
p
,
phase
,
player
,
playertype
,
pos
,
ppos
,
q
,
r
,
r_player
,
reason
,
ref10
,
ref11
,
ref12
,
ref13
,
ref3
,
ref4
,
ref5
,
ref6
,
ref7
,
ref8
,
ref9
,
room
,
s
,
t
,
trigger_location
,
val
,
win_pos
,
x
,
y
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
return
;
return
;
}
}
msg
=
buffer
.
readInt8
(
0
);
msg
=
buffer
.
readInt8
(
0
);
if
(
settings
.
modules
.
pre_release_compat
.
enabled
&&
client
.
is_using_pre_release
)
{
replace_buffer
(
buffer
,
room
.
list_official_to_pre
,
1
);
}
if
(
settings
.
modules
.
retry_handle
.
enabled
)
{
if
(
settings
.
modules
.
retry_handle
.
enabled
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
RETRY
'
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
RETRY
'
)
{
if
(
client
.
retry_count
==
null
)
{
if
(
client
.
retry_count
==
null
)
{
...
@@ -3068,7 +3133,7 @@
...
@@ -3068,7 +3133,7 @@
room
.
turn
=
0
;
room
.
turn
=
0
;
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
player
.
heartbeat_protected
=
false
;
player
.
heartbeat_protected
=
false
;
}
}
...
@@ -3080,13 +3145,13 @@
...
@@ -3080,13 +3145,13 @@
room
.
scores
[
room
.
winner_name
]
=
room
.
scores
[
room
.
winner_name
]
+
1
;
room
.
scores
[
room
.
winner_name
]
=
room
.
scores
[
room
.
winner_name
]
+
1
;
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
)
{
ref4
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
);
ref4
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
);
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
line
=
ref4
[
n
];
line
=
ref4
[
n
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
room
.
hostinfo
.
mode
===
2
&&
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
)
{
}
else
if
(
room
.
hostinfo
.
mode
===
2
&&
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
)
{
ref5
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
);
ref5
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
);
for
(
o
=
0
,
len
4
=
ref5
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len
5
=
ref5
.
length
;
o
<
len5
;
o
++
)
{
line
=
ref5
[
o
];
line
=
ref5
[
o
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -3210,7 +3275,7 @@
...
@@ -3210,7 +3275,7 @@
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
CHAINING
'
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
CHAINING
'
)
{
card
=
buffer
.
readUInt32LE
(
1
);
card
=
buffer
.
readUInt32LE
(
1
);
found
=
false
;
found
=
false
;
for
(
q
=
0
,
len
5
=
long_resolve_cards
.
length
;
q
<
len5
;
q
++
)
{
for
(
q
=
0
,
len
6
=
long_resolve_cards
.
length
;
q
<
len6
;
q
++
)
{
id
=
long_resolve_cards
[
q
];
id
=
long_resolve_cards
[
q
];
if
(
!
(
id
===
card
))
{
if
(
!
(
id
===
card
))
{
continue
;
continue
;
...
@@ -3234,7 +3299,7 @@
...
@@ -3234,7 +3299,7 @@
chain
=
buffer
.
readInt8
(
1
);
chain
=
buffer
.
readInt8
(
1
);
if
(
room
.
long_resolve_chain
[
chain
])
{
if
(
room
.
long_resolve_chain
[
chain
])
{
ref9
=
room
.
get_playing_player
();
ref9
=
room
.
get_playing_player
();
for
(
r
=
0
,
len
6
=
ref9
.
length
;
r
<
len6
;
r
++
)
{
for
(
r
=
0
,
len
7
=
ref9
.
length
;
r
<
len7
;
r
++
)
{
player
=
ref9
[
r
];
player
=
ref9
[
r
];
player
.
heartbeat_protected
=
true
;
player
.
heartbeat_protected
=
true
;
}
}
...
@@ -3261,25 +3326,25 @@
...
@@ -3261,25 +3326,25 @@
if
(
ygopro
.
constants
.
MSG
[
msg
]
!==
'
CHAINING
'
||
(
trigger_location
&
0x8
)
&&
client
.
ready_trap
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
!==
'
CHAINING
'
||
(
trigger_location
&
0x8
)
&&
client
.
ready_trap
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
act_pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
])
{
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
act_pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
])
{
ref10
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
]);
ref10
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
]);
for
(
s
=
0
,
len
7
=
ref10
.
length
;
s
<
len7
;
s
++
)
{
for
(
s
=
0
,
len
8
=
ref10
.
length
;
s
<
len8
;
s
++
)
{
line
=
ref10
[
s
];
line
=
ref10
[
s
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
hostinfo
.
mode
===
2
&&
room
.
dueling_players
[
act_pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
])
{
}
else
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
hostinfo
.
mode
===
2
&&
room
.
dueling_players
[
act_pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
])
{
ref11
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
]);
ref11
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
]);
for
(
t
=
0
,
len
8
=
ref11
.
length
;
t
<
len8
;
t
++
)
{
for
(
t
=
0
,
len
9
=
ref11
.
length
;
t
<
len9
;
t
++
)
{
line
=
ref11
[
t
];
line
=
ref11
[
t
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues
[
card
])
{
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues
[
card
])
{
ref12
=
_
.
lines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
ref12
=
_
.
lines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
for
(
x
=
0
,
len
9
=
ref12
.
length
;
x
<
len9
;
x
++
)
{
for
(
x
=
0
,
len
10
=
ref12
.
length
;
x
<
len10
;
x
++
)
{
line
=
ref12
[
x
];
line
=
ref12
[
x
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues_custom
[
card
])
{
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues_custom
[
card
])
{
ref13
=
_
.
lines
(
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]);
ref13
=
_
.
lines
(
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]);
for
(
y
=
0
,
len1
0
=
ref13
.
length
;
y
<
len10
;
y
++
)
{
for
(
y
=
0
,
len1
1
=
ref13
.
length
;
y
<
len11
;
y
++
)
{
line
=
ref13
[
y
];
line
=
ref13
[
y
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
...
@@ -3299,7 +3364,7 @@
...
@@ -3299,7 +3364,7 @@
});
});
ygopro
.
ctos_follow
(
'
HS_TOOBSERVER
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
HS_TOOBSERVER
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
len
2
,
m
,
player
,
ref3
,
room
;
var
len
3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
if
(
!
room
)
{
return
;
return
;
...
@@ -3312,7 +3377,7 @@
...
@@ -3312,7 +3377,7 @@
return
false
;
return
false
;
}
}
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
===
client
)
{
if
(
player
===
client
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${cannot_to_observer}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${cannot_to_observer}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
...
@@ -3323,13 +3388,13 @@
...
@@ -3323,13 +3388,13 @@
});
});
ygopro
.
ctos_follow
(
'
HS_KICK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
HS_KICK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
len
2
,
m
,
player
,
ref3
,
room
;
var
len
3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
if
(
!
room
)
{
return
;
return
;
}
}
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
player
.
pos
===
info
.
pos
&&
player
!==
client
)
{
if
(
player
&&
player
.
pos
===
info
.
pos
&&
player
!==
client
)
{
if
(
room
.
arena
===
"
athletic
"
||
settings
.
modules
.
challonge
.
enabled
)
{
if
(
room
.
arena
===
"
athletic
"
||
settings
.
modules
.
challonge
.
enabled
)
{
...
@@ -3360,7 +3425,7 @@
...
@@ -3360,7 +3425,7 @@
});
});
ygopro
.
stoc_follow
(
'
HS_PLAYER_CHANGE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
HS_PLAYER_CHANGE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
is_ready
,
len
2
,
len3
,
m
,
n
,
p1
,
p2
,
player
,
pos
,
ref3
,
ref4
,
room
;
var
is_ready
,
len
3
,
len4
,
m
,
n
,
p1
,
p2
,
player
,
pos
,
ref3
,
ref4
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
room
.
max_player
&&
client
.
is_host
))
{
if
(
!
(
room
&&
room
.
max_player
&&
client
.
is_host
))
{
return
;
return
;
...
@@ -3371,7 +3436,7 @@
...
@@ -3371,7 +3436,7 @@
if
(
room
.
arena
)
{
if
(
room
.
arena
)
{
room
.
ready_player_count
=
0
;
room
.
ready_player_count
=
0
;
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
.
pos
===
pos
)
{
if
(
player
.
pos
===
pos
)
{
player
.
is_ready
=
is_ready
;
player
.
is_ready
=
is_ready
;
...
@@ -3411,7 +3476,7 @@
...
@@ -3411,7 +3476,7 @@
}
else
{
}
else
{
room
.
ready_player_count_without_host
=
0
;
room
.
ready_player_count_without_host
=
0
;
ref4
=
room
.
players
;
ref4
=
room
.
players
;
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref4
[
n
];
player
=
ref4
[
n
];
if
(
player
.
pos
===
pos
)
{
if
(
player
.
pos
===
pos
)
{
player
.
is_ready
=
is_ready
;
player
.
is_ready
=
is_ready
;
...
@@ -3452,7 +3517,7 @@
...
@@ -3452,7 +3517,7 @@
});
});
ygopro
.
stoc_follow
(
'
DUEL_END
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
DUEL_END
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
ref4
,
results
,
room
;
var
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
ref4
,
results
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
settings
.
modules
.
replay_delay
&&
room
.
hostinfo
.
mode
===
1
))
{
if
(
!
(
room
&&
settings
.
modules
.
replay_delay
&&
room
.
hostinfo
.
mode
===
1
))
{
return
;
return
;
...
@@ -3462,7 +3527,7 @@
...
@@ -3462,7 +3527,7 @@
if
(
!
room
.
replays_sent_to_watchers
)
{
if
(
!
room
.
replays_sent_to_watchers
)
{
room
.
replays_sent_to_watchers
=
true
;
room
.
replays_sent_to_watchers
=
true
;
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
player
.
pos
>
3
)
{
if
(
player
&&
player
.
pos
>
3
)
{
CLIENT_send_replays
(
player
,
room
);
CLIENT_send_replays
(
player
,
room
);
...
@@ -3470,7 +3535,7 @@
...
@@ -3470,7 +3535,7 @@
}
}
ref4
=
room
.
watchers
;
ref4
=
room
.
watchers
;
results
=
[];
results
=
[];
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref4
[
n
];
player
=
ref4
[
n
];
if
(
player
)
{
if
(
player
)
{
results
.
push
(
CLIENT_send_replays
(
player
,
room
));
results
.
push
(
CLIENT_send_replays
(
player
,
room
));
...
@@ -3481,7 +3546,7 @@
...
@@ -3481,7 +3546,7 @@
});
});
wait_room_start
=
function
(
room
,
time
)
{
wait_room_start
=
function
(
room
,
time
)
{
var
len
2
,
m
,
player
,
ref3
;
var
len
3
,
m
,
player
,
ref3
;
if
(
!
(
!
room
||
room
.
started
||
room
.
ready_player_count_without_host
<
room
.
max_player
-
1
))
{
if
(
!
(
!
room
||
room
.
started
||
room
.
ready_player_count_without_host
<
room
.
max_player
-
1
))
{
time
-=
1
;
time
-=
1
;
if
(
time
)
{
if
(
time
)
{
...
@@ -3493,7 +3558,7 @@
...
@@ -3493,7 +3558,7 @@
}),
1000
);
}),
1000
);
}
else
{
}
else
{
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
player
.
is_host
)
{
if
(
player
&&
player
.
is_host
)
{
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
...
@@ -3535,17 +3600,17 @@
...
@@ -3535,17 +3600,17 @@
};
};
ygopro
.
stoc_send_random_tip_to_room
=
function
(
room
)
{
ygopro
.
stoc_send_random_tip_to_room
=
function
(
room
)
{
var
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
ref4
;
var
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
ref4
;
if
(
settings
.
modules
.
tips
.
enabled
&&
tips
.
tips
.
length
)
{
if
(
settings
.
modules
.
tips
.
enabled
&&
tips
.
tips
.
length
)
{
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
!
player
.
is_local
&&
!
player
.
closed
)
{
if
(
player
&&
!
player
.
is_local
&&
!
player
.
closed
)
{
ygopro
.
stoc_send_random_tip
(
player
);
ygopro
.
stoc_send_random_tip
(
player
);
}
}
}
}
ref4
=
room
.
watchers
;
ref4
=
room
.
watchers
;
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref4
[
n
];
player
=
ref4
[
n
];
if
(
player
&&
!
player
.
is_local
&&
!
player
.
closed
)
{
if
(
player
&&
!
player
.
is_local
&&
!
player
.
closed
)
{
ygopro
.
stoc_send_random_tip
(
player
);
ygopro
.
stoc_send_random_tip
(
player
);
...
@@ -3596,8 +3661,8 @@
...
@@ -3596,8 +3661,8 @@
if
(
settings
.
modules
.
tips
.
enabled
)
{
if
(
settings
.
modules
.
tips
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
var
len
2
,
m
,
room
;
var
len
3
,
m
,
room
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
if
(
room
&&
room
.
established
)
{
if
(
!
room
.
started
||
room
.
changing_side
)
{
if
(
!
room
.
started
||
room
.
changing_side
)
{
...
@@ -3609,7 +3674,7 @@
...
@@ -3609,7 +3674,7 @@
}
}
ygopro
.
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
deck_arena
,
deck_name
,
deck_text
,
len
2
,
m
,
player
,
ref3
,
room
;
var
deck_arena
,
deck_name
,
deck_text
,
len
3
,
m
,
player
,
ref3
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
return
;
return
;
...
@@ -3623,7 +3688,7 @@
...
@@ -3623,7 +3688,7 @@
}
}
room
.
dueling_players
=
[];
room
.
dueling_players
=
[];
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
!
(
player
.
pos
!==
7
))
{
if
(
!
(
player
.
pos
!==
7
))
{
continue
;
continue
;
...
@@ -4076,7 +4141,7 @@
...
@@ -4076,7 +4141,7 @@
});
});
ygopro
.
ctos_follow
(
'
UPDATE_DECK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
UPDATE_DECK
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
buff_main
,
buff_
side
,
card
,
current_deck
,
deck
,
deck_array
,
deck_main
,
deck_side
,
deck_text
,
deckbuf
,
decks
,
found_deck
,
i
,
len2
,
len3
,
line
,
m
,
n
,
oppo_pos
,
room
,
struct
,
win_pos
;
var
buff_main
,
buff_
main_new
,
buff_side
,
buff_side_new
,
card
,
code
,
code_
,
compat_deckbuf
,
compat_struct
,
current_deck
,
deck
,
deck_array
,
deck_main
,
deck_side
,
deck_text
,
deckbuf
,
decks
,
found
,
found_deck
,
i
,
len3
,
len4
,
len5
,
len6
,
line
,
m
,
n
,
o
,
oppo_pos
,
p
,
room
,
struct
,
win_pos
;
if
(
settings
.
modules
.
reconnect
.
enabled
&&
client
.
pre_reconnecting
)
{
if
(
settings
.
modules
.
reconnect
.
enabled
&&
client
.
pre_reconnecting
)
{
if
(
!
CLIENT_is_able_to_reconnect
(
client
)
&&
!
CLIENT_is_able_to_kick_reconnect
(
client
))
{
if
(
!
CLIENT_is_able_to_reconnect
(
client
)
&&
!
CLIENT_is_able_to_kick_reconnect
(
client
))
{
ygopro
.
stoc_send_chat
(
client
,
"
${reconnect_failed}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${reconnect_failed}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
...
@@ -4166,7 +4231,7 @@
...
@@ -4166,7 +4231,7 @@
buffer
=
struct
.
buffer
;
buffer
=
struct
.
buffer
;
found_deck
=
false
;
found_deck
=
false
;
decks
=
fs
.
readdirSync
(
settings
.
modules
.
tournament_mode
.
deck_path
);
decks
=
fs
.
readdirSync
(
settings
.
modules
.
tournament_mode
.
deck_path
);
for
(
m
=
0
,
len
2
=
decks
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
decks
.
length
;
m
<
len3
;
m
++
)
{
deck
=
decks
[
m
];
deck
=
decks
[
m
];
if
(
_
.
endsWith
(
deck
,
client
.
name
+
"
.ydk
"
))
{
if
(
_
.
endsWith
(
deck
,
client
.
name
+
"
.ydk
"
))
{
found_deck
=
deck
;
found_deck
=
deck
;
...
@@ -4183,7 +4248,7 @@
...
@@ -4183,7 +4248,7 @@
deck_main
=
[];
deck_main
=
[];
deck_side
=
[];
deck_side
=
[];
current_deck
=
deck_main
;
current_deck
=
deck_main
;
for
(
n
=
0
,
len
3
=
deck_array
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
deck_array
.
length
;
n
<
len4
;
n
++
)
{
line
=
deck_array
[
n
];
line
=
deck_array
[
n
];
if
(
line
.
indexOf
(
"
!side
"
)
>=
0
)
{
if
(
line
.
indexOf
(
"
!side
"
)
>=
0
)
{
current_deck
=
deck_side
;
current_deck
=
deck_side
;
...
@@ -4202,9 +4267,51 @@
...
@@ -4202,9 +4267,51 @@
ygopro
.
stoc_send_chat
(
client
,
"
${deck_correct_part1}
"
+
found_deck
+
"
${deck_correct_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${deck_correct_part1}
"
+
found_deck
+
"
${deck_correct_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
{
}
else
{
ygopro
.
stoc_send_chat
(
client
,
"
${deck_incorrect_part1}
"
+
found_deck
+
"
${deck_incorrect_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${deck_incorrect_part1}
"
+
found_deck
+
"
${deck_incorrect_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
return
false
;
}
}
}
else
{
}
else
{
ygopro
.
stoc_send_chat
(
client
,
client
.
name
+
"
${deck_not_found}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
client
.
name
+
"
${deck_not_found}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
return
false
;
}
}
if
(
settings
.
modules
.
pre_release_compat
.
enabled
)
{
found
=
false
;
buff_main_new
=
[];
buff_side_new
=
[];
for
(
o
=
0
,
len5
=
buff_main
.
length
;
o
<
len5
;
o
++
)
{
code
=
buff_main
[
o
];
code_
=
code
;
if
(
room
.
list_pre_to_official
[
code
])
{
code_
=
room
.
list_pre_to_official
[
code
];
found
=
true
;
}
buff_main_new
.
push
(
code_
);
}
for
(
p
=
0
,
len6
=
buff_side
.
length
;
p
<
len6
;
p
++
)
{
code
=
buff_side
[
p
];
code_
=
code
;
if
(
room
.
list_pre_to_official
[
code
])
{
code_
=
room
.
list_pre_to_official
[
code
];
found
=
true
;
}
buff_side_new
.
push
(
code_
);
}
if
(
found
)
{
compat_struct
=
ygopro
.
structs
[
"
deck
"
];
compat_struct
.
_setBuff
(
buffer
);
compat_deckbuf
=
buff_main_new
.
concat
(
buff_side_new
);
compat_struct
.
set
(
"
mainc
"
,
buff_main_new
.
length
);
compat_struct
.
set
(
"
sidec
"
,
buff_side_new
.
length
);
compat_struct
.
set
(
"
deckbuf
"
,
compat_deckbuf
);
buffer
=
compat_struct
.
buffer
;
client
.
main
=
buff_main_new
;
client
.
side
=
buff_side_new
;
}
if
(
!
room
.
started
)
{
client
.
is_using_pre_release
=
found
||
client
.
vpass
===
"
COMPAT
"
;
if
(
client
.
is_using_pre_release
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${pre_release_compat_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
}
return
false
;
return
false
;
...
@@ -4213,7 +4320,13 @@
...
@@ -4213,7 +4320,13 @@
ygopro
.
ctos_follow
(
'
RESPONSE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
RESPONSE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
room
;
var
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
(
room
.
random_type
||
room
.
arena
)))
{
if
(
!
room
)
{
return
;
}
if
(
settings
.
modules
.
pre_release_compat
.
enabled
&&
client
.
is_using_pre_release
)
{
replace_buffer
(
buffer
,
room
.
list_pre_to_official
,
0
);
}
if
(
!
(
room
.
random_type
||
room
.
arena
))
{
return
;
return
;
}
}
room
.
last_active_time
=
moment
();
room
.
last_active_time
=
moment
();
...
@@ -4325,7 +4438,7 @@
...
@@ -4325,7 +4438,7 @@
});
});
ygopro
.
stoc_follow
(
'
CHAT
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
CHAT
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
len
2
,
m
,
pid
,
player
,
ref3
,
room
,
tcolor
,
tplayer
;
var
len
3
,
m
,
pid
,
player
,
ref3
,
room
,
tcolor
,
tplayer
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
pid
=
info
.
player
;
pid
=
info
.
player
;
if
(
!
(
room
&&
pid
<
4
&&
settings
.
modules
.
chat_color
.
enabled
))
{
if
(
!
(
room
&&
pid
<
4
&&
settings
.
modules
.
chat_color
.
enabled
))
{
...
@@ -4344,7 +4457,7 @@
...
@@ -4344,7 +4457,7 @@
}
}
}
}
ref3
=
room
.
players
;
ref3
=
room
.
players
;
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
player
=
ref3
[
m
];
player
=
ref3
[
m
];
if
(
player
&&
player
.
pos
===
pid
)
{
if
(
player
&&
player
.
pos
===
pid
)
{
tplayer
=
player
;
tplayer
=
player
;
...
@@ -4457,7 +4570,7 @@
...
@@ -4457,7 +4570,7 @@
});
});
ygopro
.
stoc_follow
(
'
REPLAY
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
REPLAY
'
,
true
,
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
duellog
,
dueltime
,
i
,
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
ref4
,
replay_filename
,
room
;
var
duellog
,
dueltime
,
i
,
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
ref4
,
replay_filename
,
room
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
if
(
!
room
)
{
return
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
replay_safe
&&
settings
.
modules
.
tournament_mode
.
block_replay_to_player
||
settings
.
modules
.
replay_delay
;
return
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
replay_safe
&&
settings
.
modules
.
tournament_mode
.
block_replay_to_player
||
settings
.
modules
.
replay_delay
;
...
@@ -4474,13 +4587,13 @@
...
@@ -4474,13 +4587,13 @@
replay_filename
=
dueltime
;
replay_filename
=
dueltime
;
if
(
room
.
hostinfo
.
mode
!==
2
)
{
if
(
room
.
hostinfo
.
mode
!==
2
)
{
ref3
=
room
.
dueling_players
;
ref3
=
room
.
dueling_players
;
for
(
i
=
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
i
=
++
m
)
{
for
(
i
=
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
i
=
++
m
)
{
player
=
ref3
[
i
];
player
=
ref3
[
i
];
replay_filename
=
replay_filename
+
(
i
>
0
?
"
VS
"
:
"
"
)
+
player
.
name
;
replay_filename
=
replay_filename
+
(
i
>
0
?
"
VS
"
:
"
"
)
+
player
.
name
;
}
}
}
else
{
}
else
{
ref4
=
room
.
dueling_players
;
ref4
=
room
.
dueling_players
;
for
(
i
=
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
i
=
++
n
)
{
for
(
i
=
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
i
=
++
n
)
{
player
=
ref4
[
i
];
player
=
ref4
[
i
];
replay_filename
=
replay_filename
+
(
i
>
0
?
(
i
===
2
?
"
VS
"
:
"
&
"
)
:
"
"
)
+
player
.
name
;
replay_filename
=
replay_filename
+
(
i
>
0
?
(
i
===
2
?
"
VS
"
:
"
&
"
)
:
"
"
)
+
player
.
name
;
}
}
...
@@ -4494,10 +4607,10 @@
...
@@ -4494,10 +4607,10 @@
replay_filename
:
replay_filename
,
replay_filename
:
replay_filename
,
roommode
:
room
.
hostinfo
.
mode
,
roommode
:
room
.
hostinfo
.
mode
,
players
:
(
function
()
{
players
:
(
function
()
{
var
len
4
,
o
,
ref5
,
results
;
var
len
5
,
o
,
ref5
,
results
;
ref5
=
room
.
dueling_players
;
ref5
=
room
.
dueling_players
;
results
=
[];
results
=
[];
for
(
o
=
0
,
len
4
=
ref5
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len
5
=
ref5
.
length
;
o
<
len5
;
o
++
)
{
player
=
ref5
[
o
];
player
=
ref5
[
o
];
results
.
push
({
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_vpass
]
+
"
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
)
:
""
)
+
"
)
"
:
""
),
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_vpass
]
+
"
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
)
:
""
)
+
"
)
"
:
""
),
...
@@ -4526,8 +4639,8 @@
...
@@ -4526,8 +4639,8 @@
if
(
settings
.
modules
.
random_duel
.
enabled
)
{
if
(
settings
.
modules
.
random_duel
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
var
len
2
,
m
,
room
,
time_passed
;
var
len
3
,
m
,
room
,
time_passed
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
!
(
room
&&
room
.
started
&&
room
.
random_type
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
))
{
if
(
!
(
room
&&
room
.
started
&&
room
.
random_type
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
))
{
continue
;
continue
;
...
@@ -4550,8 +4663,8 @@
...
@@ -4550,8 +4663,8 @@
if
(
settings
.
modules
.
mycard
.
enabled
)
{
if
(
settings
.
modules
.
mycard
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
var
len
2
,
m
,
room
,
time_passed
;
var
len
3
,
m
,
room
,
time_passed
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
!
(
room
&&
room
.
started
&&
room
.
arena
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
))
{
if
(
!
(
room
&&
room
.
started
&&
room
.
arena
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
))
{
continue
;
continue
;
...
@@ -4572,12 +4685,12 @@
...
@@ -4572,12 +4685,12 @@
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
var
len
2
,
len3
,
m
,
n
,
player
,
ref3
,
room
;
var
len
3
,
len4
,
m
,
n
,
player
,
ref3
,
room
;
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
started
&&
(
room
.
hostinfo
.
time_limit
===
0
||
!
room
.
turn
||
room
.
turn
<=
0
)
&&
!
room
.
windbot
)
{
if
(
room
&&
room
.
started
&&
(
room
.
hostinfo
.
time_limit
===
0
||
!
room
.
turn
||
room
.
turn
<=
0
)
&&
!
room
.
windbot
)
{
ref3
=
room
.
get_playing_player
();
ref3
=
room
.
get_playing_player
();
for
(
n
=
0
,
len
3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref3
[
n
];
player
=
ref3
[
n
];
if
(
player
&&
(
!
room
.
changing_side
||
player
.
selected_preduel
))
{
if
(
player
&&
(
!
room
.
changing_side
||
player
.
selected_preduel
))
{
CLIENT_heartbeat_register
(
player
,
true
);
CLIENT_heartbeat_register
(
player
,
true
);
...
@@ -4640,7 +4753,7 @@
...
@@ -4640,7 +4753,7 @@
return
callback
+
"
(
"
+
text
+
"
);
"
;
return
callback
+
"
(
"
+
text
+
"
);
"
;
};
};
requestListener
=
function
(
request
,
response
)
{
requestListener
=
function
(
request
,
response
)
{
var
archive_args
,
archive_name
,
archive_process
,
check
,
death_room_found
,
duellog
,
error
,
filename
,
getpath
,
key
,
kick_room_found
,
len
2
,
len3
,
len4
,
len5
,
len6
,
len7
,
m
,
n
,
o
,
oppo_pos
,
p
,
parseQueryString
,
pass_validated
,
player
,
q
,
r
,
ref3
,
ref4
,
replay
,
ret_keys
,
room
,
roomsjson
,
u
,
win_pos
;
var
archive_args
,
archive_name
,
archive_process
,
check
,
death_room_found
,
duellog
,
error
,
filename
,
getpath
,
key
,
kick_room_found
,
len
3
,
len4
,
len5
,
len6
,
len7
,
len8
,
m
,
n
,
o
,
oppo_pos
,
p
,
parseQueryString
,
pass_validated
,
player
,
q
,
r
,
ref3
,
ref4
,
replay
,
ret_keys
,
room
,
roomsjson
,
u
,
win_pos
;
parseQueryString
=
true
;
parseQueryString
=
true
;
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
;
...
@@ -4652,9 +4765,9 @@
...
@@ -4652,9 +4765,9 @@
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
roomsjson
=
JSON
.
stringify
({
roomsjson
=
JSON
.
stringify
({
rooms
:
(
function
()
{
rooms
:
(
function
()
{
var
len
2
,
m
,
results
;
var
len
3
,
m
,
results
;
results
=
[];
results
=
[];
for
(
m
=
0
,
len
2
=
ROOM_all
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ROOM_all
.
length
;
m
<
len3
;
m
++
)
{
room
=
ROOM_all
[
m
];
room
=
ROOM_all
[
m
];
if
(
room
&&
room
.
established
)
{
if
(
room
&&
room
.
established
)
{
results
.
push
({
results
.
push
({
...
@@ -4663,10 +4776,10 @@
...
@@ -4663,10 +4776,10 @@
roommode
:
room
.
hostinfo
.
mode
,
roommode
:
room
.
hostinfo
.
mode
,
needpass
:
(
room
.
name
.
indexOf
(
'
$
'
)
!==
-
1
).
toString
(),
needpass
:
(
room
.
name
.
indexOf
(
'
$
'
)
!==
-
1
).
toString
(),
users
:
_
.
sortBy
((
function
()
{
users
:
_
.
sortBy
((
function
()
{
var
len
3
,
n
,
ref3
,
results1
;
var
len
4
,
n
,
ref3
,
results1
;
ref3
=
room
.
players
;
ref3
=
room
.
players
;
results1
=
[];
results1
=
[];
for
(
n
=
0
,
len
3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref3
.
length
;
n
<
len4
;
n
++
)
{
player
=
ref3
[
n
];
player
=
ref3
[
n
];
if
(
player
.
pos
!=
null
)
{
if
(
player
.
pos
!=
null
)
{
results1
.
push
({
results1
.
push
({
...
@@ -4716,7 +4829,7 @@
...
@@ -4716,7 +4829,7 @@
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
ret_keys
=
""
;
ret_keys
=
""
;
ref3
=
vip_info
.
cdkeys
[
u
.
query
.
keytype
];
ref3
=
vip_info
.
cdkeys
[
u
.
query
.
keytype
];
for
(
m
=
0
,
len
2
=
ref3
.
length
;
m
<
len2
;
m
++
)
{
for
(
m
=
0
,
len
3
=
ref3
.
length
;
m
<
len3
;
m
++
)
{
key
=
ref3
[
m
];
key
=
ref3
[
m
];
ret_keys
=
ret_keys
+
u
.
query
.
keytype
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
+
"
\n
"
;
ret_keys
=
ret_keys
+
u
.
query
.
keytype
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
+
"
\n
"
;
}
}
...
@@ -4733,7 +4846,7 @@
...
@@ -4733,7 +4846,7 @@
archive_args
=
[
"
a
"
,
"
-mx0
"
,
"
-y
"
,
archive_name
];
archive_args
=
[
"
a
"
,
"
-mx0
"
,
"
-y
"
,
archive_name
];
check
=
false
;
check
=
false
;
ref4
=
duel_log
.
duel_log
;
ref4
=
duel_log
.
duel_log
;
for
(
n
=
0
,
len
3
=
ref4
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len
4
=
ref4
.
length
;
n
<
len4
;
n
++
)
{
replay
=
ref4
[
n
];
replay
=
ref4
[
n
];
check
=
true
;
check
=
true
;
archive_args
.
push
(
replay
.
replay_filename
);
archive_args
.
push
(
replay
.
replay_filename
);
...
@@ -4832,7 +4945,7 @@
...
@@ -4832,7 +4945,7 @@
return
;
return
;
}
}
if
(
u
.
query
.
shout
)
{
if
(
u
.
query
.
shout
)
{
for
(
o
=
0
,
len
4
=
ROOM_all
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len
5
=
ROOM_all
.
length
;
o
<
len5
;
o
++
)
{
room
=
ROOM_all
[
o
];
room
=
ROOM_all
[
o
];
if
(
room
&&
room
.
established
)
{
if
(
room
&&
room
.
established
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
u
.
query
.
shout
,
ygopro
.
constants
.
COLORS
.
YELLOW
);
ygopro
.
stoc_send_chat_to_room
(
room
,
u
.
query
.
shout
,
ygopro
.
constants
.
COLORS
.
YELLOW
);
...
@@ -4878,7 +4991,7 @@
...
@@ -4878,7 +4991,7 @@
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
['ban ok', '
"
+
u
.
query
.
ban
+
"
']
"
));
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
['ban ok', '
"
+
u
.
query
.
ban
+
"
']
"
));
}
else
if
(
u
.
query
.
kick
)
{
}
else
if
(
u
.
query
.
kick
)
{
kick_room_found
=
false
;
kick_room_found
=
false
;
for
(
p
=
0
,
len
5
=
ROOM_all
.
length
;
p
<
len5
;
p
++
)
{
for
(
p
=
0
,
len
6
=
ROOM_all
.
length
;
p
<
len6
;
p
++
)
{
room
=
ROOM_all
[
p
];
room
=
ROOM_all
[
p
];
if
(
!
(
room
&&
room
.
established
&&
(
u
.
query
.
kick
===
"
all
"
||
u
.
query
.
kick
===
room
.
process_pid
.
toString
()
||
u
.
query
.
kick
===
room
.
name
)))
{
if
(
!
(
room
&&
room
.
established
&&
(
u
.
query
.
kick
===
"
all
"
||
u
.
query
.
kick
===
room
.
process_pid
.
toString
()
||
u
.
query
.
kick
===
room
.
name
)))
{
continue
;
continue
;
...
@@ -4901,7 +5014,7 @@
...
@@ -4901,7 +5014,7 @@
}
}
}
else
if
(
u
.
query
.
death
)
{
}
else
if
(
u
.
query
.
death
)
{
death_room_found
=
false
;
death_room_found
=
false
;
for
(
q
=
0
,
len
6
=
ROOM_all
.
length
;
q
<
len6
;
q
++
)
{
for
(
q
=
0
,
len
7
=
ROOM_all
.
length
;
q
<
len7
;
q
++
)
{
room
=
ROOM_all
[
q
];
room
=
ROOM_all
[
q
];
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
!
room
.
death
&&
(
u
.
query
.
death
===
"
all
"
||
u
.
query
.
death
===
room
.
process_pid
.
toString
()
||
u
.
query
.
death
===
room
.
name
)))
{
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
!
room
.
death
&&
(
u
.
query
.
death
===
"
all
"
||
u
.
query
.
death
===
room
.
process_pid
.
toString
()
||
u
.
query
.
death
===
room
.
name
)))
{
continue
;
continue
;
...
@@ -4966,7 +5079,7 @@
...
@@ -4966,7 +5079,7 @@
}
}
}
else
if
(
u
.
query
.
deathcancel
)
{
}
else
if
(
u
.
query
.
deathcancel
)
{
death_room_found
=
false
;
death_room_found
=
false
;
for
(
r
=
0
,
len
7
=
ROOM_all
.
length
;
r
<
len7
;
r
++
)
{
for
(
r
=
0
,
len
8
=
ROOM_all
.
length
;
r
<
len8
;
r
++
)
{
room
=
ROOM_all
[
r
];
room
=
ROOM_all
[
r
];
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
room
.
death
&&
(
u
.
query
.
deathcancel
===
"
all
"
||
u
.
query
.
deathcancel
===
room
.
process_pid
.
toString
())))
{
if
(
!
(
room
&&
room
.
established
&&
room
.
started
&&
room
.
death
&&
(
u
.
query
.
deathcancel
===
"
all
"
||
u
.
query
.
deathcancel
===
room
.
process_pid
.
toString
())))
{
continue
;
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