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
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
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
MyCard
srvpro
Commits
9c4b7ccc
Commit
9c4b7ccc
authored
Dec 07, 2013
by
神楽坂玲奈
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
1657f74c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
637 additions
and
634 deletions
+637
-634
ygopro-server.coffee
ygopro-server.coffee
+627
-626
ygopro-server.js
ygopro-server.js
+9
-7
ygopro-server.map
ygopro-server.map
+1
-1
No files found.
ygopro-server.coffee
View file @
9c4b7ccc
#标准库
#标准库
net
=
require
'net'
net
=
require
'net'
http
=
require
'http'
http
=
require
'http'
url
=
require
'url'
url
=
require
'url'
path
=
require
'path'
path
=
require
'path'
fs
=
require
'fs'
fs
=
require
'fs'
execFile
=
require
(
'child_process'
).
execFile
execFile
=
require
(
'child_process'
).
execFile
#三方库
#三方库
_
=
require
'underscore'
_
=
require
'underscore'
_
.
str
=
require
'underscore.string'
_
.
str
=
require
'underscore.string'
_
.
mixin
(
_
.
str
.
exports
());
_
.
mixin
(
_
.
str
.
exports
());
Inotify
=
require
(
'inotify'
).
Inotify
Inotify
=
require
(
'inotify'
).
Inotify
request
=
require
'request'
request
=
require
'request'
bunyan
=
require
'bunyan'
bunyan
=
require
'bunyan'
#配置文件
#配置文件
settings
=
require
'./config.json'
settings
=
require
'./config.json'
#组件
#组件
ygopro
=
require
'./ygopro.js'
ygopro
=
require
'./ygopro.js'
mycard
=
require
'./mycard.js'
mycard
=
require
'./mycard.js'
Room
=
require
'./room.js'
Room
=
require
'./room.js'
User
=
require
'./user.js'
if
settings
.
modules
.
database
User
=
require
'./user.js'
if
settings
.
modules
.
database
Deck
=
require
'./deck.js'
if
settings
.
modules
.
database
Deck
=
require
'./deck.js'
if
settings
.
modules
.
database
victories
=
require
'./victories.json'
victories
=
require
'./victories.json'
#debug模式 端口号+1
#debug模式 端口号+1
debug
=
false
debug
=
false
log
=
null
log
=
null
if
process
.
argv
[
2
]
==
'--debug'
if
process
.
argv
[
2
]
==
'--debug'
settings
.
port
++
settings
.
port
++
settings
.
modules
.
http
.
port
++
if
settings
.
modules
.
http
settings
.
modules
.
http
.
port
++
if
settings
.
modules
.
http
log
=
bunyan
.
createLogger
name
:
"mycard-debug"
log
=
bunyan
.
createLogger
name
:
"mycard-debug"
else
else
log
=
bunyan
.
createLogger
name
:
"mycard"
log
=
bunyan
.
createLogger
name
:
"mycard"
#网络连接
#网络连接
net
.
createServer
(
client
)
->
net
.
createServer
(
client
)
->
server
=
new
net
.
Socket
()
server
=
new
net
.
Socket
()
client
.
server
=
server
client
.
server
=
server
#释放处理
#释放处理
client
.
on
'close'
,
(
had_error
)
->
client
.
on
'close'
,
(
had_error
)
->
log
.
info
"client closed"
,
client
.
name
,
had_error
log
.
info
"client closed"
,
client
.
name
,
had_error
client
.
room
.
disconnector
=
client
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
client
.
room
.
disconnector
=
client
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
unless
client
.
closed
unless
client
.
closed
client
.
closed
=
true
client
.
closed
=
true
client
.
room
.
disconnect
(
client
)
if
client
.
room
client
.
room
.
disconnect
(
client
)
if
client
.
room
server
.
end
()
server
.
end
()
client
.
on
'error'
,
(
error
)
->
client
.
on
'error'
,
(
error
)
->
log
.
info
"client error"
,
client
.
name
,
error
log
.
info
"client error"
,
client
.
name
,
error
client
.
room
.
disconnector
=
client
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
client
.
room
.
disconnector
=
client
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
unless
client
.
closed
unless
client
.
closed
client
.
closed
=
error
client
.
closed
=
error
client
.
room
.
disconnect
(
client
,
error
)
if
client
.
room
client
.
room
.
disconnect
(
client
,
error
)
if
client
.
room
server
.
end
()
server
.
end
()
server
.
on
'close'
,
(
had_error
)
->
server
.
on
'close'
,
(
had_error
)
->
log
.
info
"server closed"
,
client
.
name
,
had_error
log
.
info
"server closed"
,
client
.
name
,
had_error
server
.
closed
=
true
unless
server
.
closed
server
.
closed
=
true
unless
server
.
closed
client
.
room
.
disconnector
=
'server'
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
client
.
room
.
disconnector
=
'server'
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
unless
client
.
closed
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器关闭了连接"
)
ygopro
.
stoc_send_chat
(
client
,
"服务器关闭了连接"
)
client
.
end
()
client
.
end
()
server
.
on
'error'
,
(
error
)
->
server
.
on
'error'
,
(
error
)
->
log
.
info
"server error"
,
client
.
name
,
error
log
.
info
"server error"
,
client
.
name
,
error
server
.
closed
=
error
server
.
closed
=
error
client
.
room
.
disconnector
=
'server'
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
client
.
room
.
disconnector
=
'server'
if
client
.
room
and
client
.
room
.
started
and
client
in
client
.
room
.
dueling_players
and
!
client
.
room
.
disconnector
unless
client
.
closed
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器错误:
#{
error
}
"
)
ygopro
.
stoc_send_chat
(
client
,
"服务器错误:
#{
error
}
"
)
client
.
end
()
client
.
end
()
#需要重构
#需要重构
#客户端到服务端(ctos)协议分析
#客户端到服务端(ctos)协议分析
ctos_buffer
=
new
Buffer
(
0
)
ctos_buffer
=
new
Buffer
(
0
)
ctos_message_length
=
0
ctos_message_length
=
0
ctos_proto
=
0
ctos_proto
=
0
client
.
pre_establish_buffers
=
new
Array
()
client
.
pre_establish_buffers
=
new
Array
()
client
.
on
'data'
,
(
data
)
->
client
.
on
'data'
,
(
data
)
->
if
client
.
is_post_watcher
if
client
.
is_post_watcher
client
.
room
.
watcher
.
write
data
client
.
room
.
watcher
.
write
data
else
else
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
if
client
.
established
if
client
.
established
server
.
write
data
server
.
write
data
else
else
client
.
pre_establish_buffers
.
push
data
client
.
pre_establish_buffers
.
push
data
while
true
while
true
if
ctos_message_length
==
0
if
ctos_message_length
==
0
if
ctos_buffer
.
length
>=
2
if
ctos_buffer
.
length
>=
2
ctos_message_length
=
ctos_buffer
.
readUInt16LE
(
0
)
ctos_message_length
=
ctos_buffer
.
readUInt16LE
(
0
)
else
else
break
break
else
if
ctos_proto
==
0
else
if
ctos_proto
==
0
if
ctos_buffer
.
length
>=
3
if
ctos_buffer
.
length
>=
3
ctos_proto
=
ctos_buffer
.
readUInt8
(
2
)
ctos_proto
=
ctos_buffer
.
readUInt8
(
2
)
else
else
break
break
else
else
if
ctos_buffer
.
length
>=
2
+
ctos_message_length
if
ctos_buffer
.
length
>=
2
+
ctos_message_length
#console.log "CTOS", ygopro.constants.CTOS[ctos_proto]
#console.log "CTOS", ygopro.constants.CTOS[ctos_proto]
if
ygopro
.
ctos_follows
[
ctos_proto
]
if
ygopro
.
ctos_follows
[
ctos_proto
]
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
)
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
)
if
struct
=
ygopro
.
structs
[
ygopro
.
proto_structs
.
CTOS
[
ygopro
.
constants
.
CTOS
[
ctos_proto
]]]
if
struct
=
ygopro
.
structs
[
ygopro
.
proto_structs
.
CTOS
[
ygopro
.
constants
.
CTOS
[
ctos_proto
]]]
struct
.
_setBuff
(
b
)
struct
.
_setBuff
(
b
)
ygopro
.
ctos_follows
[
ctos_proto
].
callback
b
,
_
.
clone
(
struct
.
fields
),
client
,
server
ygopro
.
ctos_follows
[
ctos_proto
].
callback
b
,
_
.
clone
(
struct
.
fields
),
client
,
server
else
else
ygopro
.
ctos_follows
[
ctos_proto
].
callback
b
,
null
,
client
,
server
ygopro
.
ctos_follows
[
ctos_proto
].
callback
b
,
null
,
client
,
server
ctos_buffer
=
ctos_buffer
.
slice
(
2
+
ctos_message_length
)
ctos_buffer
=
ctos_buffer
.
slice
(
2
+
ctos_message_length
)
ctos_message_length
=
0
ctos_message_length
=
0
ctos_proto
=
0
ctos_proto
=
0
else
else
break
break
#服务端到客户端(stoc)
#服务端到客户端(stoc)
stoc_buffer
=
new
Buffer
(
0
)
stoc_buffer
=
new
Buffer
(
0
)
stoc_message_length
=
0
stoc_message_length
=
0
stoc_proto
=
0
stoc_proto
=
0
server
.
on
'data'
,
(
data
)
->
server
.
on
'data'
,
(
data
)
->
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
#unless ygopro.stoc_follows[stoc_proto] and ygopro.stoc_follows[stoc_proto].synchronous
#unless ygopro.stoc_follows[stoc_proto] and ygopro.stoc_follows[stoc_proto].synchronous
client
.
write
data
client
.
write
data
while
true
while
true
if
stoc_message_length
==
0
if
stoc_message_length
==
0
if
stoc_buffer
.
length
>=
2
if
stoc_buffer
.
length
>=
2
stoc_message_length
=
stoc_buffer
.
readUInt16LE
(
0
)
stoc_message_length
=
stoc_buffer
.
readUInt16LE
(
0
)
else
else
break
break
else
if
stoc_proto
==
0
else
if
stoc_proto
==
0
if
stoc_buffer
.
length
>=
3
if
stoc_buffer
.
length
>=
3
stoc_proto
=
stoc_buffer
.
readUInt8
(
2
)
stoc_proto
=
stoc_buffer
.
readUInt8
(
2
)
else
else
break
break
else
else
if
stoc_buffer
.
length
>=
2
+
stoc_message_length
if
stoc_buffer
.
length
>=
2
+
stoc_message_length
#console.log "STOC", ygopro.constants.STOC[stoc_proto]
#console.log "STOC", ygopro.constants.STOC[stoc_proto]
if
ygopro
.
stoc_follows
[
stoc_proto
]
if
ygopro
.
stoc_follows
[
stoc_proto
]
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
)
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
)
if
struct
=
ygopro
.
structs
[
ygopro
.
proto_structs
.
STOC
[
ygopro
.
constants
.
STOC
[
stoc_proto
]]]
if
struct
=
ygopro
.
structs
[
ygopro
.
proto_structs
.
STOC
[
ygopro
.
constants
.
STOC
[
stoc_proto
]]]
struct
.
_setBuff
(
b
)
struct
.
_setBuff
(
b
)
ygopro
.
stoc_follows
[
stoc_proto
].
callback
b
,
_
.
clone
(
struct
.
fields
),
client
,
server
ygopro
.
stoc_follows
[
stoc_proto
].
callback
b
,
_
.
clone
(
struct
.
fields
),
client
,
server
else
else
ygopro
.
stoc_follows
[
stoc_proto
].
callback
b
,
null
,
client
,
server
ygopro
.
stoc_follows
[
stoc_proto
].
callback
b
,
null
,
client
,
server
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
)
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
)
stoc_message_length
=
0
stoc_message_length
=
0
stoc_proto
=
0
stoc_proto
=
0
else
else
break
break
.
listen
settings
.
port
,
->
.
listen
settings
.
port
,
->
log
.
info
"server started"
,
settings
.
ip
,
settings
.
port
log
.
info
"server started"
,
settings
.
ip
,
settings
.
port
#功能模块
#功能模块
ygopro
.
ctos_follow
'PLAYER_INFO'
,
true
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
ctos_follow
'PLAYER_INFO'
,
true
,
(
buffer
,
info
,
client
,
server
)
->
client
.
name
=
info
.
name
#在创建room之前暂存
client
.
name
=
info
.
name
#在创建room之前暂存
ygopro
.
ctos_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
ctos_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
#log.info info
#log.info info
if
info
.
version
!=
settings
.
version
if
info
.
version
!=
settings
.
version
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
4
msg
:
4
code
:
settings
.
version
code
:
settings
.
version
}
}
client
.
end
()
client
.
end
()
else
if
!
info
.
pass
.
length
else
if
!
info
.
pass
.
length
ygopro
.
stoc_send_chat
(
client
,
"房间为空,请修改房间名"
)
ygopro
.
stoc_send_chat
(
client
,
"房间为空,请修改房间名"
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
msg
:
1
code
:
2
code
:
2
}
}
client
.
end
()
client
.
end
()
else
if
!
Room
.
validate
(
info
.
pass
)
else
if
!
Room
.
validate
(
info
.
pass
)
#ygopro.stoc_send client, 'ERROR_MSG',{
#ygopro.stoc_send client, 'ERROR_MSG',{
# msg: 1
# msg: 1
# code: 1 #这返错有问题,直接双ygopro直连怎么都正常,在这里就经常弹不出提示
# code: 1 #这返错有问题,直接双ygopro直连怎么都正常,在这里就经常弹不出提示
#}
#}
ygopro
.
stoc_send_chat
(
client
,
"房间密码不正确"
)
ygopro
.
stoc_send_chat
(
client
,
"房间密码不正确"
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
msg
:
1
code
:
2
code
:
2
}
}
client
.
end
()
client
.
end
()
else
if
client
.
name
==
'[INCORRECT]'
#模拟用户验证
else
if
client
.
name
==
'[INCORRECT]'
#模拟用户验证
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
msg
:
1
code
:
2
code
:
2
}
}
client
.
end
()
client
.
end
()
else
else
log
.
info
'join_game'
,
info
.
pass
,
client
.
name
log
.
info
'join_game'
,
info
.
pass
,
client
.
name
client
.
room
=
Room
.
find_or_create_by_name
(
info
.
pass
)
client
.
room
=
Room
.
find_or_create_by_name
(
info
.
pass
)
if
client
.
room
.
started
if
client
.
room
.
started
if
settings
.
modules
.
post_start_watching
if
settings
.
modules
.
post_start_watching
client
.
is_post_watcher
=
true
client
.
is_post_watcher
=
true
ygopro
.
stoc_send_chat_to_room
client
.
room
,
"
#{
client
.
name
}
加入了观战"
ygopro
.
stoc_send_chat_to_room
client
.
room
,
"
#{
client
.
name
}
加入了观战"
client
.
room
.
watchers
.
push
client
client
.
room
.
watchers
.
push
client
for
buffer
in
client
.
room
.
watcher_buffers
for
buffer
in
client
.
room
.
watcher_buffers
client
.
write
buffer
client
.
write
buffer
ygopro
.
stoc_send_chat
client
,
"观战中."
ygopro
.
stoc_send_chat
client
,
"观战中."
else
else
ygopro
.
stoc_send_chat
(
client
,
"决斗已开始"
)
ygopro
.
stoc_send_chat
(
client
,
"决斗已开始"
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
msg
:
1
code
:
2
code
:
2
}
}
client
.
end
()
client
.
end
()
else
else
client
.
room
.
connect
(
client
)
client
.
room
.
connect
(
client
)
######################################################################################################################
######################################################################################################################
ygopro
.
stoc_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
stoc_follow
'JOIN_GAME'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
#欢迎信息
#欢迎信息
if
settings
.
modules
.
welcome
if
settings
.
modules
.
welcome
ygopro
.
stoc_send_chat
client
,
settings
.
modules
.
welcome
ygopro
.
stoc_send_chat
client
,
settings
.
modules
.
welcome
if
settings
.
modules
.
database
if
settings
.
modules
.
database
if
_
.
startsWith
(
client
.
room
.
name
,
'M#'
)
if
_
.
startsWith
(
client
.
room
.
name
,
'M#'
)
User
.
findOne
{
name
:
client
.
name
},
(
err
,
user
)
->
User
.
findOne
{
name
:
client
.
name
},
(
err
,
user
)
->
if
!
user
if
!
user
user
=
new
User
({
name
:
client
.
name
,
points
:
0
})
user
=
new
User
({
name
:
client
.
name
,
points
:
0
})
user
.
save
()
user
.
save
()
User
.
count
{
points
:
{
$gt
:
user
.
points
}},
(
err
,
count
)
->
User
.
count
{
points
:
{
$gt
:
user
.
points
}},
(
err
,
count
)
->
rank
=
count
+
1
rank
=
count
+
1
ygopro
.
stoc_send_chat
(
client
,
"积分系统测试中,你现在有
#{
user
.
points
}
点积分,排名
#{
rank
}
,这些积分以后正式使用时会重置"
)
ygopro
.
stoc_send_chat
(
client
,
"积分系统测试中,你现在有
#{
user
.
points
}
点积分,排名
#{
rank
}
,这些积分以后正式使用时会重置"
)
if
settings
.
modules
.
post_start_watching
and
!
client
.
room
.
watcher
if
settings
.
modules
.
post_start_watching
and
!
client
.
room
.
watcher
client
.
room
.
watcher
=
watcher
=
net
.
connect
client
.
room
.
port
,
->
client
.
room
.
watcher
=
watcher
=
net
.
connect
client
.
room
.
port
,
->
ygopro
.
ctos_send
watcher
,
'PLAYER_INFO'
,
{
ygopro
.
ctos_send
watcher
,
'PLAYER_INFO'
,
{
name
:
"the Big Brother"
name
:
"the Big Brother"
}
}
ygopro
.
ctos_send
watcher
,
'JOIN_GAME'
,
{
ygopro
.
ctos_send
watcher
,
'JOIN_GAME'
,
{
version
:
settings
.
version
,
version
:
settings
.
version
,
gameid
:
2577
,
gameid
:
2577
,
some_unknown_mysterious_fucking_thing
:
0
some_unknown_mysterious_fucking_thing
:
0
pass
:
""
pass
:
""
}
}
ygopro
.
ctos_send
watcher
,
'HS_TOOBSERVER'
ygopro
.
ctos_send
watcher
,
'HS_TOOBSERVER'
watcher
.
on
'data'
,
(
data
)
->
watcher
.
on
'data'
,
(
data
)
->
client
.
room
.
watcher_buffers
.
push
data
client
.
room
.
watcher_buffers
.
push
data
for
w
in
client
.
room
.
watchers
for
w
in
client
.
room
.
watchers
w
.
write
data
if
w
#a WTF fix
w
.
write
data
if
w
#a WTF fix
watcher
.
on
'error'
,
(
error
)
->
watcher
.
on
'error'
,
(
error
)
->
log
.
error
"watcher error"
,
error
log
.
error
"watcher error"
,
error
#登场台词
#登场台词
if
settings
.
modules
.
dialogues
if
settings
.
modules
.
dialogues
dialogues
=
{}
dialogues
=
{}
request
request
url
:
settings
.
modules
.
dialogues
url
:
settings
.
modules
.
dialogues
json
:
true
json
:
true
,
(
error
,
response
,
body
)
->
,
(
error
,
response
,
body
)
->
if
_
.
isString
body
if
_
.
isString
body
log
.
warn
"dialogues bad json"
,
body
log
.
warn
"dialogues bad json"
,
body
else
if
error
or
!
body
else
if
error
or
!
body
log
.
warn
'dialogues error'
,
error
,
response
log
.
warn
'dialogues error'
,
error
,
response
else
else
log
.
info
"dialogues loaded"
,
_
.
size
body
log
.
info
"dialogues loaded"
,
_
.
size
body
dialogues
=
body
dialogues
=
body
ygopro
.
stoc_follow
'GAME_MSG'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
stoc_follow
'GAME_MSG'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
msg
=
buffer
.
readInt8
(
0
)
msg
=
buffer
.
readInt8
(
0
)
#log.info 'MSG', ygopro.constants.MSG[msg]
#log.info 'MSG', ygopro.constants.MSG[msg]
if
ygopro
.
constants
.
MSG
[
msg
]
==
'START'
if
ygopro
.
constants
.
MSG
[
msg
]
==
'START'
playertype
=
buffer
.
readUInt8
(
1
)
playertype
=
buffer
.
readUInt8
(
1
)
client
.
is_first
=
!
(
playertype
&
0xf
);
client
.
is_first
=
!
(
playertype
&
0xf
);
client
.
lp
=
client
.
room
.
hostinfo
.
start_lp
client
.
lp
=
client
.
room
.
hostinfo
.
start_lp
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.name} 初始LP #{client.lp}")
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.name} 初始LP #{client.lp}")
if
ygopro
.
constants
.
MSG
[
msg
]
==
'WIN'
and
_
.
startsWith
(
client
.
room
.
name
,
'M#'
)
and
client
.
is_host
if
ygopro
.
constants
.
MSG
[
msg
]
==
'WIN'
and
_
.
startsWith
(
client
.
room
.
name
,
'M#'
)
and
client
.
is_host
pos
=
buffer
.
readUInt8
(
1
)
pos
=
buffer
.
readUInt8
(
1
)
pos
=
1
-
pos
unless
client
.
is_first
or
pos
==
2
pos
=
1
-
pos
unless
client
.
is_first
or
pos
==
2
reason
=
buffer
.
readUInt8
(
2
)
reason
=
buffer
.
readUInt8
(
2
)
log
.
info
{
winner
:
pos
,
reason
:
reason
}
log
.
info
{
winner
:
pos
,
reason
:
reason
}
client
.
room
.
duels
.
push
{
winner
:
pos
,
reason
:
reason
}
client
.
room
.
duels
.
push
{
winner
:
pos
,
reason
:
reason
}
#lp跟踪
#lp跟踪
if
ygopro
.
constants
.
MSG
[
msg
]
==
'DAMAGE'
and
client
.
is_host
if
ygopro
.
constants
.
MSG
[
msg
]
==
'DAMAGE'
and
client
.
is_host
pos
=
buffer
.
readUInt8
(
1
)
pos
=
buffer
.
readUInt8
(
1
)
pos
=
1
-
pos
unless
client
.
is_first
pos
=
1
-
pos
unless
client
.
is_first
val
=
buffer
.
readInt32LE
(
2
)
val
=
buffer
.
readInt32LE
(
2
)
client
.
room
.
dueling_players
[
pos
].
lp
-=
val
client
.
room
.
dueling_players
[
pos
].
lp
-=
val
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 受到伤害 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 受到伤害 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
if
0
<
client
.
room
.
dueling_players
[
pos
].
lp
<=
100
if
0
<
client
.
room
.
dueling_players
[
pos
].
lp
<=
100
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"你的生命已经如风中残烛了!"
)
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"你的生命已经如风中残烛了!"
)
if
ygopro
.
constants
.
MSG
[
msg
]
==
'RECOVER'
and
client
.
is_host
if
ygopro
.
constants
.
MSG
[
msg
]
==
'RECOVER'
and
client
.
is_host
pos
=
buffer
.
readUInt8
(
1
)
pos
=
buffer
.
readUInt8
(
1
)
pos
=
1
-
pos
unless
client
.
is_first
pos
=
1
-
pos
unless
client
.
is_first
val
=
buffer
.
readInt32LE
(
2
)
val
=
buffer
.
readInt32LE
(
2
)
client
.
room
.
dueling_players
[
pos
].
lp
+=
val
client
.
room
.
dueling_players
[
pos
].
lp
+=
val
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 回复 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 回复 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
if
ygopro
.
constants
.
MSG
[
msg
]
==
'LPUPDATE'
and
client
.
is_host
if
ygopro
.
constants
.
MSG
[
msg
]
==
'LPUPDATE'
and
client
.
is_host
pos
=
buffer
.
readUInt8
(
1
)
pos
=
buffer
.
readUInt8
(
1
)
pos
=
1
-
pos
unless
client
.
is_first
pos
=
1
-
pos
unless
client
.
is_first
val
=
buffer
.
readInt32LE
(
2
)
val
=
buffer
.
readInt32LE
(
2
)
client
.
room
.
dueling_players
[
pos
].
lp
=
val
client
.
room
.
dueling_players
[
pos
].
lp
=
val
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 的LP变成 #{client.room.dueling_players[pos].lp}")
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 的LP变成 #{client.room.dueling_players[pos].lp}")
if
ygopro
.
constants
.
MSG
[
msg
]
==
'PAY_LPCOST'
and
client
.
is_host
if
ygopro
.
constants
.
MSG
[
msg
]
==
'PAY_LPCOST'
and
client
.
is_host
pos
=
buffer
.
readUInt8
(
1
)
pos
=
buffer
.
readUInt8
(
1
)
pos
=
1
-
pos
unless
client
.
is_first
pos
=
1
-
pos
unless
client
.
is_first
val
=
buffer
.
readInt32LE
(
2
)
val
=
buffer
.
readInt32LE
(
2
)
client
.
room
.
dueling_players
[
pos
].
lp
-=
val
client
.
room
.
dueling_players
[
pos
].
lp
-=
val
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 支付 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.room.dueling_players[pos].name} 支付 #{val},现在的LP为 #{client.room.dueling_players[pos].lp}")
if
0
<
client
.
room
.
dueling_players
[
pos
].
lp
<=
100
if
0
<
client
.
room
.
dueling_players
[
pos
].
lp
<=
100
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"背水一战!"
)
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"背水一战!"
)
#登场台词
#登场台词
if
settings
.
modules
.
dialogues
if
settings
.
modules
.
dialogues
if
ygopro
.
constants
.
MSG
[
msg
]
==
'SUMMONING'
or
ygopro
.
constants
.
MSG
[
msg
]
==
'SPSUMMONING'
if
ygopro
.
constants
.
MSG
[
msg
]
==
'SUMMONING'
or
ygopro
.
constants
.
MSG
[
msg
]
==
'SPSUMMONING'
card
=
buffer
.
readUInt32LE
(
1
)
card
=
buffer
.
readUInt32LE
(
1
)
if
dialogues
[
card
]
if
dialogues
[
card
]
for
line
in
_
.
lines
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
[
card
].
length
)]
for
line
in
_
.
lines
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
[
card
].
length
)]
ygopro
.
stoc_send_chat
client
,
line
ygopro
.
stoc_send_chat
client
,
line
###
###
#房间管理
#房间管理
ygopro.stoc_follow 'HS_PLAYER_ENTER', false, (buffer, info, client, server)->
ygopro.stoc_follow 'HS_PLAYER_ENTER', false, (buffer, info, client, server)->
#console.log "PLAYER_ENTER to #{client.name}: #{info.name}, #{info.pos}"
#console.log "PLAYER_ENTER to #{client.name}: #{info.name}, #{info.pos}"
#room = client.room
#room = client.room
#if !room
#if !room
# console.log "[WARN]player_enter: can't find room by player #{client.player}"
# console.log "[WARN]player_enter: can't find room by player #{client.player}"
# return
# return
#room.pos_name[info.pos] = info.name
#room.pos_name[info.pos] = info.name
ygopro.stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
ygopro.stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
#client.ready = info.status & 0xF != 0
#client.ready = info.status & 0xF != 0
#client.pos = info.status >> 4
#client.pos = info.status >> 4
#console.log "PLAYER_CHANGE to #{client.name}: #{info.status & 0xF != 0}, #{info.status >> 4}"
#console.log "PLAYER_CHANGE to #{client.name}: #{info.status & 0xF != 0}, #{info.status >> 4}"
###
###
ygopro
.
stoc_follow
'TYPE_CHANGE'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
stoc_follow
'TYPE_CHANGE'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
selftype
=
info
.
type
&
0xf
;
selftype
=
info
.
type
&
0xf
;
is_host
=
((
info
.
type
>>
4
)
&
0xf
)
!=
0
;
is_host
=
((
info
.
type
>>
4
)
&
0xf
)
!=
0
;
client
.
is_host
=
is_host
client
.
is_host
=
is_host
client
.
pos
=
selftype
client
.
pos
=
selftype
#console.log "TYPE_CHANGE to #{client.name}:", info, selftype, is_host
#console.log "TYPE_CHANGE to #{client.name}:", info, selftype, is_host
#tip
#tip
ygopro
.
stoc_send_random_tip
=
(
client
)
->
ygopro
.
stoc_send_random_tip
=
(
client
)
->
ygopro
.
stoc_send_chat
client
,
"Tip: "
+
tips
[
Math
.
floor
(
Math
.
random
()
*
tips
.
length
)]
if
tips
ygopro
.
stoc_send_chat
client
,
"Tip: "
+
tips
[
Math
.
floor
(
Math
.
random
()
*
tips
.
length
)]
if
tips
tips
=
null
tips
=
null
request
if
settings
.
modules
.
tips
url
:
settings
.
modules
.
tips
request
json
:
true
url
:
settings
.
modules
.
tips
,
(
error
,
response
,
body
)
->
json
:
true
tips
=
body
,
(
error
,
response
,
body
)
->
log
.
info
"tips loaded"
,
tips
.
length
tips
=
body
log
.
info
"tips loaded"
,
tips
.
length
ygopro
.
stoc_follow
'DUEL_START'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
unless
client
.
room
.
started
#first start
ygopro
.
stoc_follow
'DUEL_START'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
client
.
room
.
started
=
true
unless
client
.
room
.
started
#first start
client
.
room
.
duels
=
[]
client
.
room
.
started
=
true
client
.
room
.
dueling_players
=
[]
client
.
room
.
duels
=
[]
for
player
in
client
.
room
.
players
when
player
.
pos
!=
7
client
.
room
.
dueling_players
=
[]
client
.
room
.
dueling_players
[
player
.
pos
]
=
player
for
player
in
client
.
room
.
players
when
player
.
pos
!=
7
if
!
player
.
main
client
.
room
.
dueling_players
[
player
.
pos
]
=
player
log
.
error
'WTF'
,
client
if
!
player
.
main
else
log
.
error
'WTF'
,
client
player
.
deck
=
mycard
.
load_card_usages_from_cards
(
player
.
main
,
player
.
side
)
else
player
.
deck
=
mycard
.
load_card_usages_from_cards
(
player
.
main
,
player
.
side
)
if
!
client
.
room
.
dueling_players
[
0
]
or
!
client
.
room
.
dueling_players
[
1
]
log
.
error
'incomplete room'
,
client
.
room
.
dueling_players
,
client
.
room
.
players
if
!
client
.
room
.
dueling_players
[
0
]
or
!
client
.
room
.
dueling_players
[
1
]
log
.
error
'incomplete room'
,
client
.
room
.
dueling_players
,
client
.
room
.
players
if
settings
.
modules
.
tips
ygopro
.
stoc_send_random_tip
(
client
)
if
settings
.
modules
.
tips
ygopro
.
stoc_send_random_tip
(
client
)
ygopro
.
ctos_follow
'CHAT'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
switch
_
.
trim
(
info
.
msg
)
ygopro
.
ctos_follow
'CHAT'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
when
'/ping'
switch
_
.
trim
(
info
.
msg
)
execFile
'ss'
,
[
'-it'
,
"dst
#{
client
.
remoteAddress
}
:
#{
client
.
remotePort
}
"
],
(
error
,
stdout
,
stderr
)
->
when
'/ping'
if
error
execFile
'ss'
,
[
'-it'
,
"dst
#{
client
.
remoteAddress
}
:
#{
client
.
remotePort
}
"
],
(
error
,
stdout
,
stderr
)
->
ygopro
.
stoc_send_chat_to_room
client
.
room
,
error
if
error
else
ygopro
.
stoc_send_chat_to_room
client
.
room
,
error
line
=
_
.
lines
(
stdout
)[
2
]
else
if
line
.
indexOf
(
'rtt'
)
!=
-
1
line
=
_
.
lines
(
stdout
)[
2
]
ygopro
.
stoc_send_chat_to_room
client
.
room
,
line
if
line
.
indexOf
(
'rtt'
)
!=
-
1
else
ygopro
.
stoc_send_chat_to_room
client
.
room
,
line
log
.
warn
'ping'
,
stdout
else
ygopro
.
stoc_send_chat_to_room
client
.
room
,
stdout
log
.
warn
'ping'
,
stdout
when
'/ranktop'
ygopro
.
stoc_send_chat_to_room
client
.
room
,
stdout
if
settings
.
modules
.
database
when
'/ranktop'
User
.
find
null
,
null
,
{
sort
:
{
points
:
-
1
},
limit
:
8
},
(
err
,
users
)
->
if
settings
.
modules
.
database
if
err
User
.
find
null
,
null
,
{
sort
:
{
points
:
-
1
},
limit
:
8
},
(
err
,
users
)
->
return
log
.
error
'ranktop'
,
err
if
err
for
index
,
user
of
users
return
log
.
error
'ranktop'
,
err
ygopro
.
stoc_send_chat
client
,
[
parseInt
(
index
)
+
1
,
user
.
points
,
user
.
name
].
join
(
' '
)
for
index
,
user
of
users
ygopro
.
stoc_send_chat
client
,
[
parseInt
(
index
)
+
1
,
user
.
points
,
user
.
name
].
join
(
' '
)
when
'/help'
ygopro
.
stoc_send_chat
(
client
,
"Mycard MatchServer 指令帮助"
)
when
'/help'
ygopro
.
stoc_send_chat
(
client
,
"/help 显示这个帮助信息"
)
ygopro
.
stoc_send_chat
(
client
,
"Mycard MatchServer 指令帮助"
)
ygopro
.
stoc_send_chat
(
client
,
"/tip 显示一条提示"
)
if
settings
.
modules
.
tips
ygopro
.
stoc_send_chat
(
client
,
"/help 显示这个帮助信息"
)
ygopro
.
stoc_send_chat
(
client
,
"/senddeck 发送自己的卡组"
)
ygopro
.
stoc_send_chat
(
client
,
"/tip 显示一条提示"
)
if
settings
.
modules
.
tips
when
'/tip'
ygopro
.
stoc_send_chat
(
client
,
"/senddeck 发送自己的卡组"
)
ygopro
.
stoc_send_random_tip
(
client
)
if
settings
.
modules
.
tips
when
'/tip'
#发送卡组
ygopro
.
stoc_send_random_tip
(
client
)
if
settings
.
modules
.
tips
when
'/senddeck'
#发送卡组
if
client
.
deck
?
when
'/senddeck'
ygopro
.
stoc_send_chat
(
client
,
"正在读取卡组信息... "
)
if
client
.
deck
?
mycard
.
deck_url_short
client
.
name
,
client
.
deck
,
(
url
)
->
ygopro
.
stoc_send_chat
(
client
,
"正在读取卡组信息... "
)
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"卡组链接: "
+
url
)
mycard
.
deck_url_short
client
.
name
,
client
.
deck
,
(
url
)
->
else
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"卡组链接: "
+
url
)
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"读取卡组信息失败"
)
else
when
'/admin showroom'
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
"读取卡组信息失败"
)
log
.
info
client
.
room
when
'/admin showroom'
ygopro
.
ctos_follow
'UPDATE_DECK'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
log
.
info
client
.
room
log
.
info
info
ygopro
.
ctos_follow
'UPDATE_DECK'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
main
=
(
info
.
deckbuf
[
i
]
for
i
in
[
0
...
info
.
mainc
])
log
.
info
info
side
=
(
info
.
deckbuf
[
i
]
for
i
in
[
info
.
mainc
...
info
.
mainc
+
info
.
sidec
])
main
=
(
info
.
deckbuf
[
i
]
for
i
in
[
0
...
info
.
mainc
])
client
.
main
=
main
side
=
(
info
.
deckbuf
[
i
]
for
i
in
[
info
.
mainc
...
info
.
mainc
+
info
.
sidec
])
client
.
side
=
side
client
.
main
=
main
client
.
side
=
side
if
settings
.
modules
.
skip_empty_side
ygopro
.
stoc_follow
'CHANGE_SIDE'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
if
settings
.
modules
.
skip_empty_side
if
not
_
.
any
(
client
.
deck
,
(
card_usage
)
->
card_usage
.
side
)
ygopro
.
stoc_follow
'CHANGE_SIDE'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ygopro
.
ctos_send
server
,
'UPDATE_DECK'
,
{
if
not
_
.
any
(
client
.
deck
,
(
card_usage
)
->
card_usage
.
side
)
mainc
:
client
.
main
.
length
,
ygopro
.
ctos_send
server
,
'UPDATE_DECK'
,
{
sidec
:
0
,
mainc
:
client
.
main
.
length
,
deckbuf
:
client
.
main
sidec
:
0
,
}
deckbuf
:
client
.
main
ygopro
.
stoc_send_chat
client
,
'等待更换副卡组中...'
}
ygopro
.
stoc_send_chat
client
,
'等待更换副卡组中...'
###
# 开包大战
###
# 开包大战
packs_weighted_cards = {}
for pack, cards of require './packs.json'
packs_weighted_cards = {}
packs_weighted_cards[pack] = []
for pack, cards of require './packs.json'
for card in cards
packs_weighted_cards[pack] = []
for i in [0..card.count]
for card in cards
packs_weighted_cards[pack].push card.card
for i in [0..card.count]
packs_weighted_cards[pack].push card.card
console.log packs_weighted_cards
console.log packs_weighted_cards
ygopro.ctos_follow 'UPDATE_DECK', false, (buffer, info, client, server)->
ygopro.ctos_send server, 'HS_NOTREADY'
ygopro.ctos_follow 'UPDATE_DECK', false, (buffer, info, client, server)->
ygopro.ctos_send server, 'HS_NOTREADY'
deck = []
for pack in client.player
deck = []
for i in [0...5]
for pack in client.player
deck.push packs_weighted_cards[pack][Math.floor(Math.random()*packs_weighted_cards[pack].length)]
for i in [0...5]
deck.push packs_weighted_cards[pack][Math.floor(Math.random()*packs_weighted_cards[pack].length)]
ygopro.ctos_send server, 'UPDATE_DECK', {
mainc: deck.length,
ygopro.ctos_send server, 'UPDATE_DECK', {
sidec: 0,
mainc: deck.length,
deckbuf: deck
sidec: 0,
}
deckbuf: deck
ygopro.ctos_send server, 'HS_READY'
}
ygopro.ctos_send server, 'HS_READY'
###
###
#http
if
settings
.
modules
.
http
#http
level_points
=
require
'./level_points.json'
if
settings
.
modules
.
http
waiting
=
[[]]
level_points
=
require
'./level_points.json'
for
i
of
level_points
waiting
=
[[]]
waiting
.
push
[]
for
i
of
level_points
waiting
.
push
[]
log
.
info
'level_points loaded'
,
level_points
http
.
createServer
(
request
,
response
)
->
log
.
info
'level_points loaded'
,
level_points
#http://122.0.65.70:7922/?operation=getroomjson
http
.
createServer
(
request
,
response
)
->
url
=
url
.
parse
(
request
.
url
)
#http://122.0.65.70:7922/?operation=getroomjson
#log.info url
url
=
url
.
parse
(
request
.
url
)
if
url
.
pathname
==
'/count.json'
#log.info url
response
.
writeHead
(
200
);
if
url
.
pathname
==
'/count.json'
response
.
end
(
Room
.
all
.
length
.
toString
())
response
.
writeHead
(
200
);
else
if
url
.
pathname
==
'/match'
response
.
end
(
Room
.
all
.
length
.
toString
())
if
request
.
headers
[
'authorization'
]
else
if
url
.
pathname
==
'/match'
[
name
,
password
]
=
new
Buffer
(
request
.
headers
[
'authorization'
].
split
(
/\s+/
).
pop
()
?
''
,
'base64'
).
toString
().
split
(
':'
)
if
request
.
headers
[
'authorization'
]
User
.
findOne
{
name
:
name
},
(
err
,
user
)
->
[
name
,
password
]
=
new
Buffer
(
request
.
headers
[
'authorization'
].
split
(
/\s+/
).
pop
()
?
''
,
'base64'
).
toString
().
split
(
':'
)
if
!
user
User
.
findOne
{
name
:
name
},
(
err
,
user
)
->
user
=
new
User
({
name
:
name
,
points
:
0
,
elo
:
1400
})
if
!
user
user
.
save
()
user
=
new
User
({
name
:
name
,
points
:
0
,
elo
:
1400
})
level
=
level_points
.
length
user
.
save
()
for
index
,
points
of
level_points
level
=
level_points
.
length
if
user
.
points
<
points
for
index
,
points
of
level_points
level
=
index
if
user
.
points
<
points
break
level
=
index
response
.
allowance
=
0
break
waiting
[
level
].
push
response
response
.
allowance
=
0
request
.
on
'close'
,
()
->
waiting
[
level
].
push
response
index
=
waiting
[
level
].
indexOf
(
response
)
request
.
on
'close'
,
()
->
waiting
[
level
].
splice
(
index
,
1
)
unless
index
==
-
1
index
=
waiting
[
level
].
indexOf
(
response
)
else
waiting
[
level
].
splice
(
index
,
1
)
unless
index
==
-
1
#log.info 'unauth match'
else
#response.writeHead(401);
#log.info 'unauth match'
#response.end("请更新mycard到1.2.8版本");
#response.writeHead(401);
level
=
1
#response.end("请更新mycard到1.2.8版本");
response
.
allowance
=
0
level
=
1
waiting
[
level
].
push
response
response
.
allowance
=
0
request
.
on
'close'
,
()
->
waiting
[
level
].
push
response
index
=
waiting
[
level
].
indexOf
(
response
)
request
.
on
'close'
,
()
->
waiting
[
level
].
splice
(
index
,
1
)
unless
index
==
-
1
index
=
waiting
[
level
].
indexOf
(
response
)
waiting
[
level
].
splice
(
index
,
1
)
unless
index
==
-
1
else
if
url
.
pathname
==
'/rooms.json'
response
.
writeHead
(
404
);
else
if
url
.
pathname
==
'/rooms.json'
response
.
end
();
response
.
writeHead
(
404
);
else
if
url
.
query
==
'operation=getroomjson'
response
.
end
();
response
.
writeHead
(
200
);
else
if
url
.
query
==
'operation=getroomjson'
response
.
end
JSON
.
stringify
rooms
:
(
for
room
in
Room
.
all
when
room
.
established
response
.
writeHead
(
200
);
roomid
:
room
.
port
.
toString
(),
response
.
end
JSON
.
stringify
rooms
:
(
for
room
in
Room
.
all
when
room
.
established
roomname
:
room
.
name
.
split
(
'$'
,
2
)[
0
],
roomid
:
room
.
port
.
toString
(),
needpass
:
(
room
.
name
.
indexOf
(
'$'
)
!=
-
1
).
toString
(),
roomname
:
room
.
name
.
split
(
'$'
,
2
)[
0
],
users
:
(
for
player
in
room
.
players
when
player
.
pos
?
needpass
:
(
room
.
name
.
indexOf
(
'$'
)
!=
-
1
).
toString
(),
id
:
(
-
1
).
toString
(),
users
:
(
for
player
in
room
.
players
when
player
.
pos
?
name
:
player
.
name
,
id
:
(
-
1
).
toString
(),
pos
:
player
.
pos
name
:
player
.
name
,
),
pos
:
player
.
pos
istart
:
if
room
.
started
then
"start"
else
"wait"
),
)
istart
:
if
room
.
started
then
"start"
else
"wait"
else
)
response
.
writeHead
(
404
);
else
response
.
end
();
response
.
writeHead
(
404
);
.
listen
settings
.
modules
.
http
.
port
response
.
end
();
.
listen
settings
.
modules
.
http
.
port
setInterval
()
->
for
level
in
[
level_points
.
length
..
0
]
setInterval
()
->
for
index
,
player
of
waiting
[
level
]
for
level
in
[
level_points
.
length
..
0
]
opponent_level
=
null
for
index
,
player
of
waiting
[
level
]
opponent
=
_
.
find
waiting
[
level
],
(
opponent
)
->
opponent_level
=
null
log
.
info
opponent
,
player
opponent
=
_
.
find
waiting
[
level
],
(
opponent
)
->
opponent
isnt
player
log
.
info
opponent
,
player
log
.
info
'--------1--------'
,
waiting
,
opponent
opponent
isnt
player
log
.
info
'--------1--------'
,
waiting
,
opponent
if
opponent
opponent_level
=
level
if
opponent
else
if
player
.
allowance
>
0
opponent_level
=
level
for
displacement
in
[
1
..
player
.
allowance
]
else
if
player
.
allowance
>
0
if
level
+
displacement
<=
level_points
.
length
for
displacement
in
[
1
..
player
.
allowance
]
opponent
=
waiting
[
level
+
displacement
][
0
]
if
level
+
displacement
<=
level_points
.
length
if
opponent
opponent
=
waiting
[
level
+
displacement
][
0
]
opponent_level
=
level
+
displacement
if
opponent
break
opponent_level
=
level
+
displacement
if
level
-
displacement
>=
0
break
opponent
=
waiting
[
level
-
displacement
][
0
]
if
level
-
displacement
>=
0
if
opponent
opponent
=
waiting
[
level
-
displacement
][
0
]
opponent_level
=
level
-
displacement
if
opponent
break
opponent_level
=
level
-
displacement
break
if
opponent
if
waiting
[
level
].
indexOf
(
player
)
==
-
1
or
waiting
[
opponent_level
].
indexOf
(
opponent
)
==
-
1
if
opponent
log
.
info
waiting
,
player
,
level
,
opponent
,
opponent_level
if
waiting
[
level
].
indexOf
(
player
)
==
-
1
or
waiting
[
opponent_level
].
indexOf
(
opponent
)
==
-
1
throw
'WTF'
log
.
info
waiting
,
player
,
level
,
opponent
,
opponent_level
waiting
[
level
].
splice
(
waiting
[
level
].
indexOf
(
player
),
1
)
throw
'WTF'
waiting
[
opponent_level
].
splice
(
waiting
[
opponent_level
].
indexOf
(
opponent
),
1
)
waiting
[
level
].
splice
(
waiting
[
level
].
indexOf
(
player
),
1
)
index
--
waiting
[
opponent_level
].
splice
(
waiting
[
opponent_level
].
indexOf
(
opponent
),
1
)
index
--
room
=
"mycard://
#{
settings
.
ip
}
:
#{
settings
.
port
}
/M#
#{
_
.
uniqueId
()
}
$
#{
_
.
random
(
999
)
}
"
log
.
info
'matched'
,
room
room
=
"mycard://
#{
settings
.
ip
}
:
#{
settings
.
port
}
/M#
#{
_
.
uniqueId
()
}
$
#{
_
.
random
(
999
)
}
"
headers
=
{
"Access-Control-Allow-Origin"
:
"*"
,
"Content-Type"
:
"text/plain"
}
log
.
info
'matched'
,
room
player
.
writeHead
(
200
,
headers
)
headers
=
{
"Access-Control-Allow-Origin"
:
"*"
,
"Content-Type"
:
"text/plain"
}
player
.
end
room
player
.
writeHead
(
200
,
headers
)
opponent
.
writeHead
(
200
,
headers
)
player
.
end
room
opponent
.
end
room
opponent
.
writeHead
(
200
,
headers
)
opponent
.
end
room
else
player
.
allowance
++
else
player
.
allowance
++
,
2000
,
2000
#清理90s没活动的房间
inotify
=
new
Inotify
()
#清理90s没活动的房间
inotify
.
addWatch
inotify
=
new
Inotify
()
path
:
'ygocore/replay'
,
inotify
.
addWatch
watch_for
:
Inotify
.
IN_CLOSE_WRITE
|
Inotify
.
IN_CREATE
|
Inotify
.
IN_MODIFY
,
path
:
'ygocore/replay'
,
callback
:
(
event
)
->
watch_for
:
Inotify
.
IN_CLOSE_WRITE
|
Inotify
.
IN_CREATE
|
Inotify
.
IN_MODIFY
,
mask
=
event
.
mask
callback
:
(
event
)
->
if
event
.
name
mask
=
event
.
mask
port
=
parseInt
path
.
basename
(
event
.
name
,
'.yrp'
)
if
event
.
name
room
=
Room
.
find_by_port
port
port
=
parseInt
path
.
basename
(
event
.
name
,
'.yrp'
)
if
room
room
=
Room
.
find_by_port
port
if
mask
&
Inotify
.
IN_CREATE
if
room
else
if
mask
&
Inotify
.
IN_CLOSE_WRITE
if
mask
&
Inotify
.
IN_CREATE
fs
.
unlink
path
.
join
(
'ygocore/replay'
),
(
err
)
->
else
if
mask
&
Inotify
.
IN_CLOSE_WRITE
else
if
mask
&
Inotify
.
IN_MODIFY
fs
.
unlink
path
.
join
(
'ygocore/replay'
),
(
err
)
->
room
.
alive
=
true
else
if
mask
&
Inotify
.
IN_MODIFY
else
room
.
alive
=
true
log
.
error
"event without filename"
else
log
.
error
"event without filename"
setInterval
()
->
for
room
in
Room
.
all
setInterval
()
->
if
room
.
alive
for
room
in
Room
.
all
room
.
alive
=
false
if
room
.
alive
else
room
.
alive
=
false
log
.
info
"kill room"
,
room
.
port
else
log
.
info
"kill room"
,
room
.
port
for
player
in
room
.
players
ygopro
.
stoc_send_chat
(
player
,
"由于长时间没有活动被关闭"
)
unless
player
.
closed
for
player
in
room
.
players
room
.
process
.
kill
()
ygopro
.
stoc_send_chat
(
player
,
"由于长时间没有活动被关闭"
)
unless
player
.
closed
room
.
process
.
kill
()
,
900000
,
900000
\ No newline at end of file
ygopro-server.js
View file @
9c4b7ccc
...
@@ -464,13 +464,15 @@
...
@@ -464,13 +464,15 @@
tips
=
null
;
tips
=
null
;
request
({
if
(
settings
.
modules
.
tips
)
{
url
:
settings
.
modules
.
tips
,
request
({
json
:
true
url
:
settings
.
modules
.
tips
,
},
function
(
error
,
response
,
body
)
{
json
:
true
tips
=
body
;
},
function
(
error
,
response
,
body
)
{
return
log
.
info
(
"
tips loaded
"
,
tips
.
length
);
tips
=
body
;
});
return
log
.
info
(
"
tips loaded
"
,
tips
.
length
);
});
}
ygopro
.
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
ygopro
.
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
player
,
_i
,
_len
,
_ref
;
var
player
,
_i
,
_len
,
_ref
;
...
...
ygopro-server.map
View file @
9c4b7ccc
...
@@ -6,5 +6,5 @@
...
@@ -6,5 +6,5 @@
"ygopro-server.coffee"
"ygopro-server.coffee"
],
],
"names": [],
"names": [],
"mappings": "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
mBA"
"mappings": ";AACA;CAAA,KAAA,gLAAA;KAAA,gJAAA;;CAAA,CAAA,CAAA,EAAM,EAAA;;CAAN,CACA,CAAO,CAAP,EAAO,CAAA;;CADP,CAEA,CAAA,EAAM,EAAA;;CAFN,CAGA,CAAO,CAAP,EAAO,CAAA;;CAHP,CAIA,CAAK,CAAA,GAAA;;CAJL,CAKA,CAAW,IAAA,CAAX,OAAW;;CALX,CAQA,CAAI,IAAA,KAAA;;CARJ,CASA,CAAA,IAAQ,YAAA;;CATR,CAUA,CAAa,EAAb,EAAQ;;CAVR,CAYA,CAAU,IAAV,EAAU;;CAZV,CAaA,CAAU,IAAV,EAAU;;CAbV,CAeA,CAAS,GAAT,CAAS,CAAA;;CAfT,CAkBA,CAAW,IAAA,CAAX,OAAW;;CAlBX,CAqBA,CAAS,GAAT,CAAS,MAAA;;CArBT,CAsBA,CAAS,GAAT,CAAS,MAAA;;CAtBT,CAuBA,CAAO,CAAP,GAAO,IAAA;;CACP,CAAA,EAA8B,GAAgB,CAAR;CAAtC,EAAO,CAAP,GAAO,IAAA;IAxBP;;CAyBA,CAAA,EAA8B,GAAgB,CAAR;CAAtC,EAAO,CAAP,GAAO,IAAA;IAzBP;;CAAA,CA2BA,CAAY,IAAA,EAAZ,SAAY;;CA3BZ,CAgCA,CAAQ,EAAR;;CAhCA,CAiCA,CAAA,CAjCA;;CAkCA,CAAA,EAAG,CAAmB,EAAZ,EAAV;AACE,CAAA,CAAA,EAAA,IAAQ;CACR,GAAA,GAAgD,CAAR;AAAxC,CAAA,CAAA,EAAqB,EAArB,CAAgB,CAAR;MADR;CAAA,EAEA,CAAA,EAAY,MAAN;CAAoB,CAAM,EAAN,EAAA,QAAA;CAF1B,KAEM;IAHR,EAAA;CAKE,EAAA,CAAA,EAAY,MAAN;CAAoB,CAAM,EAAN,EAAA,EAAA;CAA1B,KAAM;IAvCR;;CAAA,CA0CA,CAAG,GAAc,GAAC,GAAlB;CACE,OAAA,0FAAA;CAAA,EAAa,CAAb,EAAA;CAAA,EACgB,CAAhB,EAAM;CADN,CAIA,CAAmB,CAAnB,EAAM,CAAN,EAAoB;CAClB,CAA0B,CAAvB,CAAH,EAAA,GAAA,MAAA;AACwH,CAAxH,CAA6E,EAAxC,EAArC,CAAqC,KAArC,GAAuF;CAAvF,EAA2B,CAAhB,EAAL,EAAN,IAAA;QADA;AAEO,CAAP,GAAA,EAAA;CACE,EAAgB,CAAhB,EAAM,EAAN;CACA,GAAkC,EAAM,EAAxC;CAAA,GAAW,EAAL,IAAN;UAFF;QAFA;CAKO,EAAP,GAAM,OAAN;CANF,IAAmB;CAJnB,CAYA,CAAmB,CAAnB,CAAmB,CAAb,CAAN,EAAoB;CAClB,CAAyB,CAAtB,CAAH,CAAA,CAAA,QAAA;AACwH,CAAxH,CAA6E,EAAxC,EAArC,CAAqC,KAArC,GAAuF;CAAvF,EAA2B,CAAhB,EAAL,EAAN,IAAA;QADA;AAEO,CAAP,GAAA,EAAA;CACE,EAAgB,EAAhB,CAAM,EAAN;CACA,GAAyC,EAAM,EAA/C;CAAA,CAA+B,EAApB,CAAX,CAAM,IAAN;UAFF;QAFA;CAKO,EAAP,GAAM,OAAN;CANF,IAAmB;CAZnB,CAoBA,CAAmB,CAAnB,EAAM,CAAN,EAAoB;CAClB,CAA0B,CAAvB,CAAH,EAAA,GAAA,MAAA;AAC4B,CAA5B,GAAA,EAAA;CAAA,EAAgB,CAAhB,EAAM,EAAN;QADA;AAE0H,CAA1H,CAA+E,EAAxC,EAAvC,CAAuC,KAAvC,GAAyF;CAAzF,EAA2B,CAAhB,EAAL,EAAN,IAAA;QAFA;AAGO,CAAP,GAAA,EAAA;CACE,CAA8B,IAAxB,EAAN,EAAA,IAAA;CACO,EAAP,GAAM,SAAN;QANe;CAAnB,IAAmB;CApBnB,CA4BA,CAAmB,CAAnB,CAAmB,CAAb,CAAN,EAAoB;CAClB,CAAyB,CAAtB,CAAH,CAAA,CAAA,QAAA;CAAA,EACgB,EADhB,CACA;AAC0H,CAA1H,CAA+E,EAAxC,EAAvC,CAAuC,KAAvC,GAAyF;CAAzF,EAA2B,CAAhB,EAAL,EAAN,IAAA;QAFA;AAGO,CAAP,GAAA,EAAA;CACE,CAA+B,CAAQ,EAAvC,CAAM,EAAN,CAA+B,KAA/B;CACO,EAAP,GAAM,SAAN;QANe;CAAnB,IAAmB;CA5BnB,EAsCkB,CAAlB,EAAkB,KAAlB;CAtCA,EAuCsB,CAAtB,eAAA;CAvCA,EAwCa,CAAb,MAAA;CAxCA,EA0CmC,CAAnC,CAAmC,CAA7B,eAAN;CA1CA,CA4CA,CAAkB,CAAlB,EAAM,GAAa;CACjB,SAAA,SAAA;CAAA,GAAG,EAAH,SAAA;CACS,GAAI,CAAX,CAAM,CAAa,QAAnB;MADF,EAAA;CAGE,CAA0C,CAA5B,CAAc,EAAR,EAApB,GAAA;CAEA,GAAG,EAAM,EAAT,GAAA;CACE,GAAA,CAAA,CAAM,IAAN;MADF,IAAA;CAGE,GAAA,EAAM,IAAN,WAA4B;UAL9B;CAOA;GAAA,CAAA,YAAM;CACJ,GAAG,CAAuB,KAA1B,SAAG;CACD,GAAG,EAAA,KAAW,CAAd;CACE,EAAsB,QAAW,CAAX,OAAtB;MADF,QAAA;CAGE,mBAHF;cADF;CAAA,GAKQ,CAAc,CALtB,IAKQ,EALR;CAME,GAAG,EAAA,KAAW,CAAd;CACE,EAAa,MAAA,CAAb,CAAwB;MAD1B,QAAA;CAGE,mBAHF;cANF;MAAA,MAAA;CAWE,EAA6B,CAA1B,EAAA,KAAW,CAAd,OAAA;CAEE,GAAG,EAAM,IAAc,EAAA,EAAvB;CACE,CAAyB,CAArB,EAAA,MAAW,KAAf,GAAyB;CACzB,EAAY,CAAT,EAAA,CAAwB,EAA0C,CAAM,GAA5B,GAA/C;CACE,KAAM,EAAN,UAAA;CAAA,CAC4C,GAAA,CAAtC,EAAN,EAAoB,EAAA,MAApB;MAFF,YAAA;CAIE,CAA4C,EAA5C,EAAM,EAAN,EAAoB,EAAA,MAApB;kBANJ;gBAAA;CAAA,EAQc,EAAA,MAAd,GAAA,KAAc;CARd,EASsB,WAAtB,KAAA;CATA,EAUa,OAAb;MAZF,QAAA;CAcE,mBAdF;cAXF;YADF;CAAA,QAAA;yBAVF;QADgB;CAAlB,IAAkB;CA5ClB,EAoFkB,CAAlB,EAAkB,KAAlB;CApFA,EAqFsB,CAAtB,eAAA;CArFA,EAsFa,CAAb,MAAA;CAEO,CAAP,CAAkB,CAAA,EAAZ,GAAa,EAAnB;CACE,SAAA,SAAA;CAAA,CAA0C,CAA5B,CAAc,EAA5B,KAAA;CAAA,GAGA,CAAA,CAAA;CAEA;GAAA,CAAA,UAAM;CACJ,GAAG,CAAuB,GAA1B,WAAG;CACD,GAAG,EAAA,IAAH,CAAc;CACZ,EAAsB,QAAW,CAAX,OAAtB;MADF,MAAA;CAGE,iBAHF;YADF;CAAA,GAKQ,CAAc,CALtB,IAAA;CAME,GAAG,EAAA,IAAH,CAAc;CACZ,EAAa,MAAA,CAAb,CAAwB;MAD1B,MAAA;CAGE,iBAHF;YANF;MAAA,IAAA;CAWE,EAA6B,CAA1B,EAAA,IAAH,CAAc,QAAd;CAEE,GAAG,EAAM,IAAc,EAAvB;CACE,CAAyB,CAArB,EAAA,MAAW,GAAf,KAAyB;CACzB,EAAY,CAAT,EAAA,CAAwB,EAA0C,CAAM,GAA5B,CAA/C;CACE,KAAM,EAAN,QAAA;CAAA,CAC4C,GAAA,CAAtC,EAAN,EAAoB,EAAA,IAApB;MAFF,UAAA;CAIE,CAA4C,EAA5C,EAAM,EAAN,EAAoB,EAAA,IAApB;gBANJ;cAAA;CAAA,EAQc,EAAA,MAAd,CAAA,OAAc;CARd,EASsB,SAAtB,OAAA;CATA,EAUa,OAAb;MAZF,MAAA;CAcE,iBAdF;YAXF;UADF;CAAA,MAAA;uBANgB;CAAlB,IAAkB;CAzFpB,CA2HuB,CA3HN,CAAjB,EAAA,EA2HgB,CAAO;CACjB,CAAuB,CAAxB,CAAH,IAAmC,GAAnC,KAAA;CA5HF,EA2HuB;;CArKvB,CA0KA,CAAwC,CAAxC,EAAM,GAAmC,EAAzC,EAAA;CACS,EAAO,CAAd,EAAM,KAAN;CADF,EAAwC;;CA1KxC,CA6KA,CAAuC,CAAA,CAAvC,CAAM,GAAkC,EAAxC;CAEE,OAAA,MAAA;CAAA,GAAA,CAAmB,EAAhB,CAAwB;CACzB,CAAyB,IAAzB,GAAA,EAAA;CAAqC,CAC9B,CAAL,KAAA;CADmC,CAE7B,EAAN,GAFmC,CAEnC;CAFF,OAAA;CAIO,EAAP,GAAM,OAAN;AACO,CAAD,GAAA,EANR;CAOE,CAA6B,IAA7B,OAAA,CAAA;CAAA,CACyB,IAAzB,GAAA,EAAA;CAAqC,CAC9B,CAAL,KAAA;CADmC,CAE7B,EAAN,IAAA;CAHF,OACA;CAIO,EAAP,GAAM,OAAN;AACO,CAAD,GAAA,EAbR,EAaS;CAKP,CAA6B,IAA7B,GAAA,KAAA;CAAA,CACyB,IAAzB,GAAA,EAAA;CAAqC,CAC9B,CAAL,KAAA;CADmC,CAE7B,EAAN,IAAA;CAHF,OACA;CAIO,EAAP,GAAM,OAAN;CAEa,GAAP,CAAe,CAzBvB,OAAA;CA0BE,CAAyB,IAAzB,GAAA,EAAA;CAAqC,CAC9B,CAAL,KAAA;CADmC,CAE7B,EAAN,IAAA;CAFF,OAAA;CAIO,EAAP,GAAM,OAAN;MA9BF;CAgCE,CAAqB,CAAlB,CAAH,EAAA,KAAA;CAAA,EACc,CAAd,EAAA,gBAAc;CACd,GAAG,EAAH,CAAA;CACE,GAAG,GAAgB,CAAnB,WAAA;CACE,EAAyB,CAAzB,EAAM,IAAN,KAAA;CAAA,CAC2C,CAAE,CAA7C,EAAM,EAAN,EAAA,YAAA;CADA,GAEW,EAAL,EAAc,EAApB;CACA;CAAA,cAAA,4BAAA;+BAAA;CACE,IAAA,CAAM,MAAN;CADF,UAHA;CAKO,CAAuB,IAAxB,QAAN,GAAA;MANF,IAAA;CAQE,CAA6B,IAAvB,CAAN,GAAA,IAAA;CAAA,CACyB,IAAnB,GAAN,CAAA,CAAA;CAAqC,CAC9B,CAAL,SAAA;CADmC,CAE7B,EAAN,QAAA;CAHF,WACA;CAIO,EAAP,GAAM,WAAN;UAdJ;MAAA,EAAA;CAgBS,GAAI,EAAL,CAAN,QAAA;QAlDJ;MAFqC;CAAvC,EAAuC;;CA7KvC,CAqOA,CAAuC,CAAA,CAAvC,CAAM,GAAkC,EAAxC;CAEE,MAAA,CAAA;CAAA,GAAA,GAAmB,CAAR;CACT,CAA8B,IAA9B,CAA8C,CAAR,MAAtC;MADF;CAEA,GAAA,GAAmB,CAAR;CACT,CAAkC,EAA/B,EAAH,IAAG;CACD,GAAI,GAAJ,CAAA;CAAa,CAAQ,EAAN,EAAY,IAAZ;EAAqB,CAAA,CAAA,KAAC,CAArC;AACM,CAAJ,GAAG,MAAH;CACE,EAAW,CAAX,QAAA;CAAgB,CAAO,EAAN,EAAY,QAAZ;CAAD,CAA4B,IAAR,QAAA;CAApC,aAAW;CAAX,GACI,QAAJ;YAFF;CAGK,GAAD,CAAJ,YAAA;CAAW,CAAQ,IAAP,MAAA;CAAO,CAAK,CAAJ,CAAQ,EAAT,QAAC;cAAT;EAA4B,CAAA,EAAA,IAAC,GAAxC;CACE,GAAA,YAAA;CAAA,EAAO,CAAP,CAAO,OAAP;CACO,CAAwB,CAAa,CAAI,EAA1C,EAAyB,MAA/B,GAAA,EAAA;CAFF,UAAuC;CAJzC,QAAoC;QAFxC;MAFA;AAY6C,CAA7C,GAAA,EAAmD,CAAhC,CAAR,WAAR;CACD,CAA8D,CAAxC,CAAX,EAAX,CAAA,EAA8D;CAC5D,CAA0B,IAApB,CAAN,CAAA,CAAA,IAAA;CAAyC,CACjC,EAAN,MAAA,OADuC;CAAzC,SAAA;CAAA,CAG0B,IAApB,CAAN,CAAA,CAAA,EAAA;CAAuC,CAC5B,KAAT,CAAiB,EAAjB;CADqC,CAE7B,EAF6B,EAErC,IAAA;CAFqC,CAGE,QAAvC,2BAAA;CAHqC,CAI/B,EAAN,MAAA;CAPF,SAGA;CAMO,CAAmB,IAApB,CAAN,EAAA,MAAA;CAV8B,MAA8B;CAA9D,CAYA,CAAmB,CAAA,EAAnB,CAAO,EAAa;CAClB,WAAA,eAAA;CAAA,GAAW,EAAL,EAAN,OAA2B;CAC3B;CAAA;cAAA,6BAAA;wBAAA;CACE,GAAgB,MAAhB;CAAA,GAAA,CAAA;MAAA,MAAA;CAAA;YADF;CAAA;yBAFiB;CAAnB,MAAmB;CAKX,CAAR,CAAoB,EAAA,EAAb,EAAc,IAArB;CACM,CAAuB,CAAxB,EAAH,UAAA;CADF,MAAoB;MAhCe;CAAvC,EAAuC;;CAoCvC,CAAA,EAAG,GAAgB,CAAR,CAAX;CACE,CAAA,CAAY,CAAZ,KAAA;CAAA,GACA,GAAA;CACE,CAAK,CAAL,GAAA,CAAqB,CAAR,CAAb;CAAA,CACM,EAAN,EAAA;EACE,CAAA,CAAA,CAAA,CAHJ,EAGI,CAAC;CACD,GAAG,EAAH,EAAG;CACG,CAA2B,CAA5B,CAAH,WAAA,KAAA;AACgB,CAAD,GAAT,CAAA,CAFR,EAAA;CAGM,CAAwB,CAAzB,CAAH,CAAA,GAAA,OAAA,EAAA;MAHF,EAAA;CAKE,CAA6B,CAA1B,CAAH,IAAA,UAAA;CALF,EAMc,MAAZ,MAAA;QAPF;CAHJ,IAGI;IA9QN;;CAAA,CAuRA,CAAsC,CAAA,CAAtC,CAAM,GAAiC,CAAvC,CAAA;CACE,OAAA,6EAAA;CAAA,EAAA,CAAA,EAAY,EAAN;CAEN,EAAwB,CAAxB,CAAgC,CAAvB,CAAT,EAAmB;CACjB,EAAa,GAAb,GAAa,CAAb;AACmB,CADnB,EACkB,GAAlB,EAAA,EAAoB;CADpB,CAEA,CAAY,CAAW,EAAvB,EAAgC;MALlC;CAQA,CAAyE,CAAjD,CAAxB,CAAgC,CAAvB,CAAT,EAAmB,CAAuB;CACxC,EAAA,GAAA,GAAM;AACN,CAAA,EAAwC,CAAxC,CAA+C,CAA/C,EAAqB;CAArB,EAAA,KAAA;QADA;CAAA,EAES,GAAT,GAAS;CAFT,EAGG,CAAH,EAAA;CAAS,CAAS,CAAT,GAAC,EAAA;CAAD,CAAsB,IAAR,EAAA;CAHvB,OAGA;CAHA,GAIW,CAAM,CAAjB;CAAuB,CAAS,CAAT,GAAC,EAAA;CAAD,CAAsB,IAAR,EAAA;CAJrC,OAIA;MAbF;CAeA,EAAwB,CAAxB,CAAgC,CAAvB,CAAT,CAAG,CAAgB;CACjB,EAAA,GAAA,GAAM;AACe,CAArB,GAAA,EAAA,EAAA;CAAA,EAAA,KAAA;QADA;CAAA,EAEA,GAAA,KAAM;CAFN,CAGA,CAA4B,CAAjB,EAAX,SAA4B;CAG5B,EAAO,CAAJ,EAAH,SAAmC;CACjC,CAA2C,EAA3C,EAAM,EAAN,OAAA,OAAA;QARJ;MAfA;CAyBA,EAAwB,CAAxB,CAAgC,CAAvB,CAAT,EAAmB;CACjB,EAAA,GAAA,GAAM;AACe,CAArB,GAAA,EAAA,EAAA;CAAA,EAAA,KAAA;QADA;CAAA,EAEA,GAAA,KAAM;CAFN,CAGA,CAA4B,CAAjB,EAAX,SAA4B;MA7B9B;CAiCA,EAAwB,CAAxB,CAAgC,CAAvB,CAAT,EAAmB,CAAhB;CACD,EAAA,GAAA,GAAM;AACe,CAArB,GAAA,EAAA,EAAA;CAAA,EAAA,KAAA;QADA;CAAA,EAEA,GAAA,KAAM;CAFN,CAGA,CAA4B,CAAjB,EAAX,SAA4B;MArC9B;CAyCA,EAAwB,CAAxB,CAAgC,CAAvB,CAAT,EAAmB,GAAhB;CACD,EAAA,GAAA,GAAM;AACe,CAArB,GAAA,EAAA,EAAA;CAAA,EAAA,KAAA;QADA;CAAA,EAEA,GAAA,KAAM;CAFN,CAGA,CAA4B,CAAjB,EAAX,SAA4B;CAI5B,EAAO,CAAJ,CAAA,CAAH,SAAmC;CACjC,CAA2C,EAA3C,EAAM,CAAN,CAAA,cAAA;QATJ;MAzCA;CAuDA,GAAA,GAAmB,CAAR,CAAX;CACE,EAAwB,CAArB,CAA6B,CAAhC,GAAmB,EAAhB,EAAH;CACE,EAAO,CAAP,EAAa,EAAb,IAAO;CACP,GAAG,IAAH,CAAa;CACX;CAAA;gBAAA,4BAAA;8BAAA;CACE,CAA8B,EAA9B,EAAM,QAAN;CADF;2BADF;UAFF;QADF;MAxDoC;CAAtC,EAAsC;;CAqEtC;;;;;;;;;;;;;;;CA5VA;;CAAA,CA4WA,CAAyC,CAAA,CAAzC,CAAM,GAAoC,EAA1C,EAAA;CACE,OAAA,SAAA;CAAA,EAAW,CAAX,IAAA;CAAA,EACU,CAAV,CAAsC,EAAtC;CADA,EAEiB,CAAjB,EAAM,CAAN;CACO,EAAP,GAAM,KAAN;CAJF,EAAyC;;CA5WzC,CAoXA,CAA8B,GAAxB,GAAyB,WAA/B;CACE,GAAA;CAAO,CAAuB,CAAU,CAAK,CAAA,CAAvC,CAAwB,MAA9B,CAAA;MAD4B;CApX9B,EAoX8B;;CApX9B,CAuXA,CAAO,CAAP;;CA
CA,CAAA,EAAG,GAAgB,CAAR;CACT,GAAA,GAAA;CACE,CAAK,CAAL,CAAA,EAAA,CAAqB,CAAR;CAAb,CACM,EAAN,EAAA;EACE,CAAA,CAAA,CAAA,CAHJ,EAGI,CAAC;CACD,EAAO,CAAP,EAAA;CACI,CAAoB,CAArB,CAAH,EAAA,OAAA;CALJ,IAGI;IA5XN;;CAAA,CAgYA,CAAwC,CAAA,CAAxC,CAAM,GAAmC,EAAzC,CAAA;CACE,OAAA,cAAA;AAAO,CAAP,GAAA,EAAa,CAAb;CACE,EAAsB,CAAX,EAAX,CAAA;CAAA,CAAA,CACoB,CAAT,CAAX,CAAA;CADA,CAAA,CAE8B,CAAnB,EAAX,SAAA;CACA;CAAA,UAAA,gCAAA;2BAAA;CAAuC,EAAA,EAAc,CAAR;;UAC3C;CAAA,EAA4B,CAAjB,EAAL,EAAN,OAA4B;AACxB,CAAJ,GAAG,EAAO,EAAV;CACE,CAAiB,CAAd,EAAH,CAAA,IAAA;MADF,IAAA;CAGE,CAA8D,CAAhD,CAAd,EAAM,IAAN,iBAAc;UALlB;CAAA,MAHA;AAUI,CAAJ,GAAG,EAAH,SAAgC;CAC9B,CAA6B,CAA1B,CAAqC,CAAxC,CAAmC,CAAnC,CAAA,OAAA,EAAA;QAZJ;MAAA;CAcA,GAAA,GAAmB,CAAR;CACF,KAAD,OAAN,OAAA;MAhBoC;CAAxC,EAAwC;;CAhYxC,CAkZA,CAAkC,CAAA,CAAlC,CAAM,GAA6B,EAAnC;CACE,EAAO,CAAA,QAAA;CAAP,MAAA,IACO;CACM,CAAM,CAAc,CAA7B,CAAe,CAAS,EAAxB,CAA6E,CAA9D,GAAS,EAAxB;CACE,GAAA,UAAA;CAAA,GAAG,CAAH,KAAA;CACS,CAAoC,EAA3C,CAAA,CAAM,aAAN,GAAA;MADF,MAAA;CAGE,EAAO,CAAP,CAAO,CAAA,MAAP;AAC2B,CAA3B,GAAG,CAAA,EAAA,KAAH;CACS,CAAoC,EAA3C,EAAM,eAAN,CAAA;MADF,QAAA;CAGE,CAAiB,CAAd,CAAH,EAAA,QAAA;CACO,CAAoC,EAA3C,EAAM,eAAN,CAAA;cARJ;YAD0E;CAA5E,QAA4E;CAFhF,SAAA,CAYO;CACH,GAAG,GAAgB,CAAnB;CACO,CAAW,EAAZ,aAAJ;CAAsB,CAAQ,EAAN,QAAA;AAAkB,CAAZ,CAAW,IAAT,QAAA;cAAV;CAAA,CAAgC,GAAP,OAAA;EAAY,CAAA,EAAA,IAAC,GAA5D;CACE,eAAA,KAAA;CAAA,EAAA,CAAG,QAAH;CACE,CAA4B,CAAlB,EAAH,IAAA,YAAA;cADT;AAEA,CAAA;cAAA,IAAA;mCAAA;CACE,CAA8B,CAAiB,CAAO,CAAvB,CAAzB,EAAyB,MAA/B;CADF;6BAHyD;CAA3D,UAA2D;UAdjE;CAYO;CAZP,MAAA,IAoBO;CACH,CAA6B,IAAvB,EAAN,MAAA,WAAA;CAAA,CAC6B,IAAvB,EAAN,MAAA,EAAA;CACA,GAA+C,GAAgB,CAA/D;CAAA,CAA6B,IAAvB,IAAN,GAAA,CAAA;UAFA;CAGO,CAAsB,IAAvB,QAAN,CAAA,IAAA;CAxBJ,KAAA,KAyBO;CACH,GAAuC,GAAgB,CAAvD;CAAO,KAAD,WAAN,GAAA;UA1BJ;CAyBO;CAzBP,UA4BO;CACH,GAAG,IAAH,WAAA;CACE,CAA8B,IAAxB,IAAN,IAAA;CACO,CAA4B,CAAa,CAAhD,EAAM,GAA2C,KAAjD,GAAA;CACS,CAAoC,CAAW,CAAtD,EAAM,EAAqC,WAA3C,GAAA;CADF,UAAgD;MAFlD,IAAA;CAKS,CAAoC,EAA3C,EAAM,IAAN,OAAA,KAAA;UAlCN;CA4BO;CA5BP,UAmCO,MAnCP;CAoCQ,EAAD,CAAH,EAAe,SAAf;CApCJ,IADgC;CAAlC,EAAkC;;CAlZlC,CAwbA,CAAyC,CAAA,CAAzC,CAAM,GAAoC,EAA1C,EAAA;CACE,OAAA,KAAA;CAAA,EAAG,CAAH;CAAA,GACA;;AAAQ,CAAA;GAAA,SAAyB,iFAAzB;CAAA,GAAI,GAAS;CAAb;;CADR;CAAA,GAEA;;AAAQ,CAAA;GAAA,SAAyB,yHAAzB;CAAA,GAAI,GAAS;CAAb;;CAFR;CAAA,EAGc,CAAd,EAAM;CACC,EAAO,CAAd,EAAM,KAAN;CALF,EAAyC;;CAOzC,CAAA,EAAG,GAAgB,CAAR,OAAX;CACE,CAAkC,CAAO,CAAzC,CAAA,CAAM,GAAoC,EAA1C,EAAA;AACS,CAAP,CAA0B,CAAnB,CAAJ,EAAH,GAA2B,CAAD;CAAyB,SAAD,KAAV;CAAjC,MAAmB;CACxB,CAAyB,IAAnB,EAAN,CAAA,IAAA;CAAwC,CAC/B,EAAW,CAAlB,CAAa,IAAb;CADsC,CAE/B,GAAP,KAAA;CAFsC,CAG7B,EAH6B,EAGvB,CAAf,GAAA;CAHF,SAAA;CAKO,CAAuB,IAAxB,OAAN,CAAA,CAAA;QAPqC;CAAzC,IAAyC;IAhc3C;;CAycA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAzcA;;CAweA,CAAA,EAAG,GAAgB,CAAR;CACT,EAAe,CAAf,GAAe,KAAf,SAAe;CAAf,CACU,CAAA,CAAV,GAAA;AACA,CAAA,EAAA,MAAA,QAAA;CACE,CAAA,EAAA,EAAA,CAAO;CADT,IAFA;CAAA,CAKgC,CAA7B,CAAH,QAAA,SAAA;CALA,CAM4B,CAAV,CAAlB,GAAkB,CAAA,CAAC,GAAnB;CAEI,SAAA,sCAAA;CAAA,EAAA,EAAM,CAAN,CAAuB;CAEvB,EAAM,CAAH,CAAgB,CAAnB,EAAG,KAAH;CACE,EAAA,KAAA,CAAA;CACS,EAAT,CAAiB,EAAW,EAApB,OAAR;CACU,EAAD,CAAH,CAAgB,CAHxB,EAAA;CAIE,GAAG,GAAO,CAAV,OAAmB;CACjB,CAAuB,CAA6D,CAA7D,CAAA,CAAA,EAAA,EAAvB;CACK,GAAD,GAAJ,UAAA;CAAa,CAAQ,EAAN,QAAA;EAAc,CAAA,CAAA,KAAC,GAA9B;CACE,eAAA,IAAA;AAAI,CAAJ,GAAG,QAAH;CACE,EAAW,CAAX,UAAA;CAAgB,CAAO,EAAN,YAAA;CAAD,CAAqB,IAAR,UAAA;CAAb,CAA6B,CAAL,CAAxB,YAAwB;CAAxC,eAAW;CAAX,GACI,UAAJ;cAFF;CAAA,EAGQ,EAAR,CAHA,MAGA;AACA,CAAA,gBAAA,IAAA;4CAAA;CACE,EAAiB,CAAd,EAAA,QAAH;CACE,EAAQ,EAAR,WAAA;CACA,qBAFF;gBADF;CAAA,YAJA;CAAA,EAQqB,KAAb,CAAR,GAAA;CARA,GASA,CAAQ,EAAA,CAAR,IAAA;CACQ,CAAR,CAAoB,IAAb,EAAa,UAApB;CACE,EAAQ,EAAR,EAAgB,CAAR,MAAR;AACiD,CAAjD,GAAuC,CAAA,SAAvC;CAAQ,CAAqB,GAArB,CAAR,CAAQ,gBAAR;gBAFkB;CAApB,YAAoB;CAXtB,UAA6B;MAF/B,IAAA;CAoBE,EAAQ,EAAR,KAAA;CAAA,EACqB,KAAb,CAAR,CAAA;CADA,GAEA,CAAQ,EAAA,CAAR,EAAA;CACQ,CAAR,CAAoB,IAAb,EAAa,QAApB;CACE,IAAA,WAAA;CAAA,EAAQ,EAAR,EAAgB,CAAR,IAAR;AACiD,CAAjD,GAAuC,CAAA,OAAvC;CAAQ,CAAqB,GAArB,CAAR,CAAQ,cAAR;cAFkB;CAApB,UAAoB;UA3BxB;CA+BY,EAAD,CAAH,CAAgB,CA/BxB,EAAA,KAAA;CAgCE,EAAA,KAAA,CAAA;CACS,EAAT,KAAQ,OAAR;CACU,EAAD,CAAH,CAAA,CAlCR,EAAA,eAAA;CAmCE,EAAA,KAAA,CAAA;CACS,EAAT,CAAiB,IAAT,CAAK,MAAb;CAA4B,IAAA,KAAA;;CAAQ;CAAA;kBAAA,0BAAA;gCAAA;CAA+B,GAAL;CAC5D;CAAA,CAAQ,EAAI,EAAZ,EAAQ,UAAR;CAAA,CACU,CAAA,CAAI,CAAJ,GAAV,UAAA;AACsC,CAFtC,CAEU,CAAC,CAAI,CAAsB,EAA1B,CAAX,UAAA;CAFA,IAGA,aAAA;;CAAQ;CAAA;0BAAA,oBAAA;0CAAA;IAAgC;CACtC;AAAM,CAAN,CAAA,MAAI,kBAAJ;CAAA,CACM,EAAN,EAAY,oBAAZ;CADA,CAEK,CAAL,GAAW,oBAAX;CAFA;wBADM;CAAA;;CAHR;CAAA,CAQW,CAAkB,CAAd,EAAf,CAAQ,WAAR;CARA;gBADkC;CAAA;;CAAR;CAA5B,SAAa;MApCf,EAAA;CAgDE,EAAA,KAAA,CAAA;CACS,EAAT,KAAQ,OAAR;QArDY;CAAlB,GAsD6B,CAtDX,CAAlB,CAsDwB,CAAR;CA5DhB,EA8DY,CAAZ,KAAY,EAAZ;CACE,SAAA,qFAAA;AAAA,CAAA;GAAA,SAAa,2FAAb;CACE;;CAAA;CAAA;cAAA,EAAA;mCAAA;CACE,EAAiB,CAAjB,QAAA,EAAA;CAAA,CACkC,CAAvB,CAAA,CAAe,EAAA,CAA1B,CAAmC,GAAnC;CACE,CAAkB,CAAf,CAAH,EAAA,EAAA,MAAA;CADgC,IAElB,GAAd,aAAA;CAFS,YAAuB;CADlC,CAI8B,CAA3B,CAAH,GAAA,CAAA,IAAA,OAAA;CAEA,GAAG,IAAH,IAAA;CACE,EAAiB,EAAjB,SAAA;CACa,EAAY,CAAnB,EAFR,GAEQ,KAFR;AAGE,CAAA,EAAA,gBAAoB,6GAApB;CACE,EAAS,CAAN,CAAA,CAAH,MAAG,IAAH;CACE,EAAW,EAAQ,EAAA,CAAnB,IAAmB,MAAnB;CACA,GAAG,IAAH,UAAA;CACE,EAAiB,EAAA,OAAjB,EAAA,MAAA;CACA,yBAFF;oBAFF;kBAAA;CAKA,EAAS,CAAN,CAAA,OAAA,IAAH;CACE,EAAW,EAAQ,EAAA,CAAnB,IAAmB,MAAnB;CACA,GAAG,IAAH,UAAA;CACE,EAAiB,EAAA,OAAjB,EAAA,MAAA;CACA,yBAFF;oBAFF;kBANF;CAAA,cAHF;cANA;CAqBA,GAAG,IAAH,IAAA;AACwC,CAAtC,GAAG,CAAQ,CAAR,CAAQ,CAAgC,MAA3C;CACE,CAAkB,CAAf,CAAH,CAAA,CAAA,CAAA,CAAA,MAAA,EAAA;CACA,IAAA,iBAAM;gBAFR;CAAA,CAGsD,GAA9C,CAAR,CAAQ,OAAR;CAHA,CAI0E,IAA1E,CAAQ,CAAuB,MAA/B;AACA,CALA,CAAA,GAKA,SAAA;CALA,CAOQ,CAAA,CAAR,CAAQ,CAA4D,EAA1C,GAAlB,GAAR;CAPA,CAQoB,CAAjB,CAAH,KAAA,KAAA;CARA,EASU,IAAV,OAAA;CAAU,CAA+B,CAA/B,aAAC,aAAA;CAAD,CAAmD,UAAnD,EAAmC,EAAA;CAT7C,eAAA;CAAA,CAUsB,CAAtB,GAAM,CAAN,EAAA,KAAA;CAVA,EAWA,CAAA,EAAM,QAAN;CAXA,CAYwB,CAAxB,IAAA,CAAQ,CAAR,KAAA;CAZA,EAaA,CAAA,IAAQ;MAdV,QAAA;AAiBE,CAAA,KAAM,GAAN;cAvCJ;CAAA;;CAAA;CADF;uBADU;CAAZ,CA2CE,EA3CF,CAAY;IAviBd;;CAAA,CAslBA,CAAc,CAAA,GAAd;;CAtlBA,CAulBA,KAAO,CAAP;CACE,CAAM,EAAN,YAAA;CAAA,CACW,CAAyB,CAApC,GAAkB,EAAlB,KAAW;CADX,CAEU,CAAA,CAAV,CAAU,GAAV,CAAW;CACT,SAAA,MAAA;CAAA,EAAO,CAAP,CAAY,CAAZ;CACA,GAAG,CAAK,CAAR;CACE,CAA0C,CAAnC,CAAP,CAAmC,CAAnB,EAAhB;CAAA,EACO,CAAP,IAAA,IAAO;CACP,GAAG,IAAH;CACE,EAAU,CAAP,GAAc,EAAjB,CAAA;CAAA;CACuB,EAAR,CAAP,EADR,CACsB,KADtB,EAAA;CAEK,CAAD,CAAqC,CAAzB,EAAd,GAAwC,OAA9B,GAAV;CACqB,EAAR,CAAP,EAHR,CAGsB,EAHtB,GAAA;CAIO,EAAQ,CAAT,CAAJ,cAAA;YALJ;UAHF;MAAA,EAAA;CAUM,EAAD,EAAH,UAAA,SAAA;QAZM;CAFV,IAEU;CA1lBZ,GAulBA;;CAvlBA,CAwmBA,CAAY,MAAA,EAAZ;CACE,OAAA,gDAAA;CAAA;CAAA;UAAA,iCAAA;uBAAA;CACE,GAAG,CAAH,CAAA;CACE,EAAa,CAAT,CAAJ;MADF,EAAA;CAGE,CAAsB,CAAnB,CAAH,IAAA,GAAA;CAEA;CAAA,YAAA,iCAAA;8BAAA;AACuD,CAArD,GAAA,EAA2D,IAA3D;CAAA,CAA8B,IAAxB,MAAN,EAAA;YADF;CAAA,QAFA;CAAA,GAII,GAAQ;QARhB;CAAA;qBADU;CAAZ,CAUE,CAVU,GAAZ;CAx
mBA"
}
}
\ No newline at end of file
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