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
693361fd
Commit
693361fd
authored
Nov 14, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
random duel ban
parent
c8b15204
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
311 additions
and
183 deletions
+311
-183
.dockerignore
.dockerignore
+1
-0
.gitignore
.gitignore
+1
-0
data-manager/DataManager.js
data-manager/DataManager.js
+58
-0
data-manager/DataManager.ts
data-manager/DataManager.ts
+57
-0
data-manager/entities/RandomDuelBan.js
data-manager/entities/RandomDuelBan.js
+49
-0
data-manager/entities/RandomDuelBan.ts
data-manager/entities/RandomDuelBan.ts
+28
-0
ygopro-server.coffee
ygopro-server.coffee
+39
-78
ygopro-server.js
ygopro-server.js
+78
-105
No files found.
.dockerignore
View file @
693361fd
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
jsconfig.json
jsconfig.json
coffeelint.json
coffeelint.json
.vscode/
.vscode/
.idea
password.json
password.json
config.*.json
config.*.json
...
...
.gitignore
View file @
693361fd
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
jsconfig.json
jsconfig.json
coffeelint.json
coffeelint.json
.vscode/
.vscode/
.idea
password.json
password.json
config.*.json
config.*.json
...
...
data-manager/DataManager.js
View file @
693361fd
...
@@ -9,6 +9,8 @@ const typeorm_1 = require("typeorm");
...
@@ -9,6 +9,8 @@ const typeorm_1 = require("typeorm");
const
CloudReplay_1
=
require
(
"
./entities/CloudReplay
"
);
const
CloudReplay_1
=
require
(
"
./entities/CloudReplay
"
);
const
CloudReplayPlayer_1
=
require
(
"
./entities/CloudReplayPlayer
"
);
const
CloudReplayPlayer_1
=
require
(
"
./entities/CloudReplayPlayer
"
);
const
Ban_1
=
require
(
"
./entities/Ban
"
);
const
Ban_1
=
require
(
"
./entities/Ban
"
);
const
RandomDuelBan_1
=
require
(
"
./entities/RandomDuelBan
"
);
const
underscore_1
=
__importDefault
(
require
(
"
underscore
"
));
class
DataManager
{
class
DataManager
{
constructor
(
config
,
log
)
{
constructor
(
config
,
log
)
{
this
.
config
=
config
;
this
.
config
=
config
;
...
@@ -125,6 +127,62 @@ class DataManager {
...
@@ -125,6 +127,62 @@ class DataManager {
return
null
;
return
null
;
}
}
}
}
async
getRandomDuelBan
(
ip
)
{
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan_1
.
RandomDuelBan
);
try
{
const
ban
=
await
repo
.
findOne
(
ip
);
//console.log(ip, ban);
return
ban
;
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to fetch random duel ban
${
ip
}
:
${
e
.
toString
()}
`
);
return
null
;
}
}
async
updateRandomDuelBan
(
ban
)
{
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan_1
.
RandomDuelBan
);
try
{
await
repo
.
save
(
ban
);
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to update random duel ban
${
ban
.
ip
}
:
${
e
.
toString
()}
`
);
}
}
async
randomDuelBanPlayer
(
ip
,
reason
,
countadd
)
{
const
count
=
countadd
||
1
;
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan_1
.
RandomDuelBan
);
try
{
let
ban
=
await
repo
.
findOne
(
ip
);
if
(
ban
)
{
ban
.
count
+=
count
;
const
banTime
=
ban
.
count
>
3
?
Math
.
pow
(
2
,
ban
.
count
-
3
)
*
2
:
0
;
const
banDate
=
moment_1
.
default
(
ban
.
time
);
if
(
moment_1
.
default
().
isAfter
(
banDate
))
{
ban
.
time
=
moment_1
.
default
().
add
(
banTime
,
'
m
'
).
toDate
();
}
else
{
ban
.
time
=
moment_1
.
default
(
banDate
).
add
(
banTime
,
'
m
'
).
toDate
();
}
if
(
!
underscore_1
.
default
.
contains
(
ban
.
reasons
,
reason
))
{
ban
.
reasons
.
push
(
reason
);
}
ban
.
needTip
=
1
;
}
else
{
ban
=
new
RandomDuelBan_1
.
RandomDuelBan
();
ban
.
ip
=
ip
;
ban
.
time
=
moment_1
.
default
().
toDate
();
ban
.
count
=
count
;
ban
.
reasons
=
[
reason
];
ban
.
needTip
=
1
;
}
return
await
repo
.
save
(
ban
);
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to update random duel ban
${
ip
}
:
${
e
.
toString
()}
`
);
return
null
;
}
}
}
}
exports
.
DataManager
=
DataManager
;
exports
.
DataManager
=
DataManager
;
//# sourceMappingURL=DataManager.js.map
//# sourceMappingURL=DataManager.js.map
\ No newline at end of file
data-manager/DataManager.ts
View file @
693361fd
...
@@ -5,6 +5,8 @@ import { Connection, ConnectionOptions, createConnection, Transaction } from "ty
...
@@ -5,6 +5,8 @@ import { Connection, ConnectionOptions, createConnection, Transaction } from "ty
import
{
CloudReplay
}
from
"
./entities/CloudReplay
"
;
import
{
CloudReplay
}
from
"
./entities/CloudReplay
"
;
import
{
CloudReplayPlayer
}
from
"
./entities/CloudReplayPlayer
"
;
import
{
CloudReplayPlayer
}
from
"
./entities/CloudReplayPlayer
"
;
import
{
Ban
}
from
"
./entities/Ban
"
;
import
{
Ban
}
from
"
./entities/Ban
"
;
import
{
RandomDuelBan
}
from
"
./entities/RandomDuelBan
"
;
import
_
from
"
underscore
"
;
export
interface
CloudReplayPlayerInfo
{
export
interface
CloudReplayPlayerInfo
{
...
@@ -134,4 +136,59 @@ export class DataManager {
...
@@ -134,4 +136,59 @@ export class DataManager {
return
null
;
return
null
;
}
}
}
}
async
getRandomDuelBan
(
ip
:
string
)
{
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan
);
try
{
const
ban
=
await
repo
.
findOne
(
ip
);
//console.log(ip, ban);
return
ban
;
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to fetch random duel ban
${
ip
}
:
${
e
.
toString
()}
`
);
return
null
;
}
}
async
updateRandomDuelBan
(
ban
:
RandomDuelBan
)
{
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan
);
try
{
await
repo
.
save
(
ban
);
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to update random duel ban
${
ban
.
ip
}
:
${
e
.
toString
()}
`
);
}
}
async
randomDuelBanPlayer
(
ip
:
string
,
reason
:
string
,
countadd
?:
number
){
const
count
=
countadd
||
1
;
const
repo
=
this
.
db
.
getRepository
(
RandomDuelBan
);
try
{
let
ban
=
await
repo
.
findOne
(
ip
);
if
(
ban
)
{
ban
.
count
+=
count
;
const
banTime
=
ban
.
count
>
3
?
Math
.
pow
(
2
,
ban
.
count
-
3
)
*
2
:
0
;
const
banDate
=
moment
(
ban
.
time
);
if
(
moment
().
isAfter
(
banDate
))
{
ban
.
time
=
moment
().
add
(
banTime
,
'
m
'
).
toDate
();
}
else
{
ban
.
time
=
moment
(
banDate
).
add
(
banTime
,
'
m
'
).
toDate
();
}
if
(
!
_
.
contains
(
ban
.
reasons
,
reason
))
{
ban
.
reasons
.
push
(
reason
);
}
ban
.
needTip
=
1
;
}
else
{
ban
=
new
RandomDuelBan
();
ban
.
ip
=
ip
;
ban
.
time
=
moment
().
toDate
();
ban
.
count
=
count
;
ban
.
reasons
=
[
reason
];
ban
.
needTip
=
1
;
}
return
await
repo
.
save
(
ban
);
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to update random duel ban
${
ip
}
:
${
e
.
toString
()}
`
);
return
null
;
}
}
}
}
data-manager/entities/RandomDuelBan.js
0 → 100644
View file @
693361fd
"
use strict
"
;
var
__decorate
=
(
this
&&
this
.
__decorate
)
||
function
(
decorators
,
target
,
key
,
desc
)
{
var
c
=
arguments
.
length
,
r
=
c
<
3
?
target
:
desc
===
null
?
desc
=
Object
.
getOwnPropertyDescriptor
(
target
,
key
)
:
desc
,
d
;
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
decorate
===
"
function
"
)
r
=
Reflect
.
decorate
(
decorators
,
target
,
key
,
desc
);
else
for
(
var
i
=
decorators
.
length
-
1
;
i
>=
0
;
i
--
)
if
(
d
=
decorators
[
i
])
r
=
(
c
<
3
?
d
(
r
)
:
c
>
3
?
d
(
target
,
key
,
r
)
:
d
(
target
,
key
))
||
r
;
return
c
>
3
&&
r
&&
Object
.
defineProperty
(
target
,
key
,
r
),
r
;
};
var
__metadata
=
(
this
&&
this
.
__metadata
)
||
function
(
k
,
v
)
{
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
};
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
RandomDuelBan
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
let
RandomDuelBan
=
/** @class */
(()
=>
{
let
RandomDuelBan
=
class
RandomDuelBan
{
setNeedTip
(
need
)
{
this
.
needTip
=
need
?
1
:
0
;
}
getNeedTip
()
{
return
this
.
needTip
>
0
?
true
:
false
;
}
};
__decorate
([
typeorm_1
.
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
64
}),
__metadata
(
"
design:type
"
,
String
)
],
RandomDuelBan
.
prototype
,
"
ip
"
,
void
0
);
__decorate
([
typeorm_1
.
Column
(
"
datetime
"
),
__metadata
(
"
design:type
"
,
Date
)
],
RandomDuelBan
.
prototype
,
"
time
"
,
void
0
);
__decorate
([
typeorm_1
.
Column
(
"
smallint
"
),
__metadata
(
"
design:type
"
,
Number
)
],
RandomDuelBan
.
prototype
,
"
count
"
,
void
0
);
__decorate
([
typeorm_1
.
Column
({
type
:
"
simple-array
"
}),
__metadata
(
"
design:type
"
,
Array
)
],
RandomDuelBan
.
prototype
,
"
reasons
"
,
void
0
);
__decorate
([
typeorm_1
.
Column
({
type
:
"
tinyint
"
,
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
],
RandomDuelBan
.
prototype
,
"
needTip
"
,
void
0
);
RandomDuelBan
=
__decorate
([
typeorm_1
.
Entity
()
],
RandomDuelBan
);
return
RandomDuelBan
;
})();
exports
.
RandomDuelBan
=
RandomDuelBan
;
//# sourceMappingURL=RandomDuelBan.js.map
\ No newline at end of file
data-manager/entities/RandomDuelBan.ts
0 → 100644
View file @
693361fd
import
{
Column
,
Entity
,
PrimaryColumn
}
from
"
typeorm
"
;
@
Entity
()
export
class
RandomDuelBan
{
@
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
64
})
ip
:
string
;
@
Column
(
"
datetime
"
)
time
:
Date
;
@
Column
(
"
smallint
"
)
count
:
number
;
@
Column
({
type
:
"
simple-array
"
})
reasons
:
string
[]
@
Column
({
type
:
"
tinyint
"
,
unsigned
:
true
})
needTip
:
number
;
setNeedTip
(
need
:
boolean
)
{
this
.
needTip
=
need
?
1
:
0
;
}
getNeedTip
()
{
return
this
.
needTip
>
0
?
true
:
false
;
}
}
\ No newline at end of file
ygopro-server.coffee
View file @
693361fd
...
@@ -479,11 +479,8 @@ get_memory_usage = get_memory_usage = ()->
...
@@ -479,11 +479,8 @@ get_memory_usage = get_memory_usage = ()->
get_memory_usage
()
get_memory_usage
()
setInterval
(
get_memory_usage
,
3000
)
setInterval
(
get_memory_usage
,
3000
)
Cloud_replay_ids
=
global
.
Cloud_replay_ids
=
[]
ROOM_all
=
global
.
ROOM_all
=
[]
ROOM_all
=
global
.
ROOM_all
=
[]
ROOM_players_oppentlist
=
global
.
ROOM_players_oppentlist
=
{}
ROOM_players_oppentlist
=
global
.
ROOM_players_oppentlist
=
{}
ROOM_players_banned
=
global
.
ROOM_players_banned
=
[]
ROOM_players_scores
=
global
.
ROOM_players_scores
=
{}
ROOM_players_scores
=
global
.
ROOM_players_scores
=
{}
ROOM_connected_ip
=
global
.
ROOM_connected_ip
=
{}
ROOM_connected_ip
=
global
.
ROOM_connected_ip
=
{}
ROOM_bad_ip
=
global
.
ROOM_bad_ip
=
{}
ROOM_bad_ip
=
global
.
ROOM_bad_ip
=
{}
...
@@ -507,20 +504,8 @@ ban_user = global.ban_user = (name) ->
...
@@ -507,20 +504,8 @@ ban_user = global.ban_user = (name) ->
# automatically ban user to use random duel
# automatically ban user to use random duel
ROOM_ban_player
=
global
.
ROOM_ban_player
=
(
name
,
ip
,
reason
,
countadd
=
1
)
->
ROOM_ban_player
=
global
.
ROOM_ban_player
=
(
name
,
ip
,
reason
,
countadd
=
1
)
->
return
if
settings
.
modules
.
test_mode
.
no_ban_player
return
if
settings
.
modules
.
test_mode
.
no_ban_player
or
!
settings
.
modules
.
mysql
.
enabled
bannedplayer
=
_
.
find
ROOM_players_banned
,
(
bannedplayer
)
->
await
dataManager
.
randomDuelBanPlayer
(
ip
,
reason
,
countadd
)
ip
==
bannedplayer
.
ip
if
bannedplayer
bannedplayer
.
count
=
bannedplayer
.
count
+
countadd
bantime
=
if
bannedplayer
.
count
>
3
then
Math
.
pow
(
2
,
bannedplayer
.
count
-
3
)
*
2
else
0
bannedplayer
.
time
=
if
moment
()
<
bannedplayer
.
time
then
moment
(
bannedplayer
.
time
).
add
(
bantime
,
'm'
)
else
moment
().
add
(
bantime
,
'm'
)
bannedplayer
.
reasons
.
push
(
reason
)
if
not
_
.
find
bannedplayer
.
reasons
,
(
bannedreason
)
->
bannedreason
==
reason
bannedplayer
.
need_tip
=
true
else
bannedplayer
=
{
"ip"
:
ip
,
"time"
:
moment
(),
"count"
:
countadd
,
"reasons"
:
[
reason
],
"need_tip"
:
true
}
ROOM_players_banned
.
push
(
bannedplayer
)
#log.info("banned", name, ip, reason, bannedplayer.count)
return
return
ROOM_kick
=
(
name
,
callback
)
->
ROOM_kick
=
(
name
,
callback
)
->
...
@@ -601,7 +586,7 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player
...
@@ -601,7 +586,7 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player
if
settings
.
modules
.
windbot
.
enabled
and
(
uname
[
0
...
2
]
==
'AI'
or
(
!
settings
.
modules
.
random_duel
.
enabled
and
uname
==
''
))
if
settings
.
modules
.
windbot
.
enabled
and
(
uname
[
0
...
2
]
==
'AI'
or
(
!
settings
.
modules
.
random_duel
.
enabled
and
uname
==
''
))
return
ROOM_find_or_create_ai
(
name
)
return
ROOM_find_or_create_ai
(
name
)
if
settings
.
modules
.
random_duel
.
enabled
and
(
uname
==
''
or
uname
==
'S'
or
uname
==
'M'
or
uname
==
'T'
)
if
settings
.
modules
.
random_duel
.
enabled
and
(
uname
==
''
or
uname
==
'S'
or
uname
==
'M'
or
uname
==
'T'
)
return
ROOM_find_or_create_random
(
uname
,
player_ip
)
return
await
ROOM_find_or_create_random
(
uname
,
player_ip
)
if
room
=
ROOM_find_by_name
(
name
)
if
room
=
ROOM_find_by_name
(
name
)
return
room
return
room
else
if
memory_usage
>=
90
else
if
memory_usage
>=
90
...
@@ -610,21 +595,24 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player
...
@@ -610,21 +595,24 @@ ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player
return
new
Room
(
name
)
return
new
Room
(
name
)
ROOM_find_or_create_random
=
global
.
ROOM_find_or_create_random
=
(
type
,
player_ip
)
->
ROOM_find_or_create_random
=
global
.
ROOM_find_or_create_random
=
(
type
,
player_ip
)
->
bannedplayer
=
_
.
find
ROOM_players_banned
,
(
bannedplayer
)
->
if
settings
.
modules
.
mysql
.
enabled
return
player_ip
==
bannedplayer
.
ip
randomDuelBanRecord
=
await
dataManager
.
getRandomDuelBan
(
player_ip
)
if
bannedplayer
if
randomDuelBanRecord
if
bannedplayer
.
count
>
6
and
moment
()
<
bannedplayer
.
time
if
randomDuelBanRecord
.
count
>
6
and
moment
().
isBefore
(
randomDuelBanRecord
.
time
)
return
{
"error"
:
"${random_banned_part1}
#{
bannedplayer
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_banned_part2}
#{
moment
(
bannedplayer
.
time
).
fromNow
(
true
)
}
${random_banned_part3}"
}
return
{
"error"
:
"${random_banned_part1}
#{
randomDuelBanRecord
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_banned_part2}
#{
moment
(
randomDuelBanRecord
.
time
).
fromNow
(
true
)
}
${random_banned_part3}"
}
if
bannedplayer
.
count
>
3
and
moment
()
<
bannedplayer
.
time
and
bannedplayer
.
need_tip
and
type
!=
'T'
if
randomDuelBanRecord
.
count
>
3
and
moment
().
isBefore
(
randomDuelBanRecord
.
time
)
and
randomDuelBanRecord
.
getNeedTip
()
and
type
!=
'T'
bannedplayer
.
need_tip
=
false
randomDuelBanRecord
.
setNeedTip
(
false
)
return
{
"error"
:
"${random_deprecated_part1}
#{
bannedplayer
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_deprecated_part2}
#{
moment
(
bannedplayer
.
time
).
fromNow
(
true
)
}
${random_deprecated_part3}"
}
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
)
else
if
bannedplayer
.
need_tip
return
{
"error"
:
"${random_deprecated_part1}
#{
randomDuelBanRecord
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_deprecated_part2}
#{
moment
(
randomDuelBanRecord
.
time
).
fromNow
(
true
)
}
${random_deprecated_part3}"
}
bannedplayer
.
need_tip
=
false
else
if
randomDuelBanRecord
.
getNeedTip
()
return
{
"error"
:
"${random_warn_part1}
#{
bannedplayer
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_warn_part2}"
}
randomDuelBanRecord
.
setNeedTip
(
false
)
else
if
bannedplayer
.
count
>
2
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
)
bannedplayer
.
need_tip
=
true
return
{
"error"
:
"${random_warn_part1}
#{
randomDuelBanRecord
.
reasons
.
join
(
'${random_ban_reason_separator}'
)
}
${random_warn_part2}"
}
else
if
randomDuelBanRecord
.
count
>
2
randomDuelBanRecord
.
setNeedTip
(
true
)
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
)
max_player
=
if
type
==
'T'
then
4
else
2
max_player
=
if
type
==
'T'
then
4
else
2
playerbanned
=
(
bannedplayer
and
bannedplayer
.
count
>
3
and
moment
()
<
bannedplayer
.
time
)
playerbanned
=
(
randomDuelBanRecord
and
randomDuelBanRecord
.
count
>
3
and
moment
()
<
randomDuelBanRecord
.
time
)
result
=
_
.
find
ROOM_all
,
(
room
)
->
result
=
_
.
find
ROOM_all
,
(
room
)
->
return
room
and
room
.
random_type
!=
''
and
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
!
room
.
windbot
and
return
room
and
room
.
random_type
!=
''
and
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
!
room
.
windbot
and
((
type
==
''
and
((
type
==
''
and
...
@@ -2013,7 +2001,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2013,7 +2001,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
if
match_permit
and
!
match_permit
.
permit
if
match_permit
and
!
match_permit
.
permit
ygopro
.
stoc_die
(
client
,
'${invalid_password_unauthorized}'
)
ygopro
.
stoc_die
(
client
,
'${invalid_password_unauthorized}'
)
return
return
room
=
ROOM_find_or_create_by_name
(
'M#'
+
info
.
pass
.
slice
(
8
))
room
=
await
ROOM_find_or_create_by_name
(
'M#'
+
info
.
pass
.
slice
(
8
))
if
room
if
room
for
player
in
room
.
get_playing_player
()
when
player
and
player
.
name
==
client
.
name
for
player
in
room
.
get_playing_player
()
when
player
and
player
.
name
==
client
.
name
ygopro
.
stoc_die
(
client
,
'${invalid_password_unauthorized}'
)
ygopro
.
stoc_die
(
client
,
'${invalid_password_unauthorized}'
)
...
@@ -2211,7 +2199,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2211,7 +2199,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
create_room_name
=
'M#'
+
found
.
id
create_room_name
=
'M#'
+
found
.
id
if
recover_match
if
recover_match
create_room_name
=
recover_match
[
0
]
+
','
+
create_room_name
create_room_name
=
recover_match
[
0
]
+
','
+
create_room_name
room
=
ROOM_find_or_create_by_name
(
create_room_name
)
room
=
await
ROOM_find_or_create_by_name
(
create_room_name
)
if
room
if
room
room
.
challonge_info
=
found
room
.
challonge_info
=
found
# room.max_player = 2
# room.max_player = 2
...
@@ -2297,7 +2285,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2297,7 +2285,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
buffer
=
struct
.
buffer
buffer
=
struct
.
buffer
#log.info 'join_game',info.pass, client.name
#log.info 'join_game',info.pass, client.name
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
room
=
await
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
if
!
room
if
!
room
ygopro
.
stoc_die
(
client
,
"${server_full}"
)
ygopro
.
stoc_die
(
client
,
"${server_full}"
)
else
if
room
.
error
else
if
room
.
error
...
@@ -2741,7 +2729,7 @@ ygopro.ctos_follow 'HS_KICK', true, (buffer, info, client, server, datas)->
...
@@ -2741,7 +2729,7 @@ ygopro.ctos_follow 'HS_KICK', true, (buffer, info, client, server, datas)->
client
.
kick_count
=
if
client
.
kick_count
then
client
.
kick_count
+
1
else
1
client
.
kick_count
=
if
client
.
kick_count
then
client
.
kick_count
+
1
else
1
if
client
.
kick_count
>=
5
and
room
.
random_type
if
client
.
kick_count
>=
5
and
room
.
random_type
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"${random_ban_reason_zombie}"
)
await
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"${random_ban_reason_zombie}"
)
CLIENT_kick
(
client
)
CLIENT_kick
(
client
)
return
true
return
true
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
${kicked_by_player}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
${kicked_by_player}"
,
ygopro
.
constants
.
COLORS
.
RED
)
...
@@ -2856,7 +2844,7 @@ wait_room_start = (room, time)->
...
@@ -2856,7 +2844,7 @@ wait_room_start = (room, time)->
else
else
for
player
in
room
.
players
for
player
in
room
.
players
if
player
and
player
.
is_host
if
player
and
player
.
is_host
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"${random_ban_reason_zombie}"
)
await
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"${random_ban_reason_zombie}"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
CLIENT_kick
(
player
)
CLIENT_kick
(
player
)
await
return
await
return
...
@@ -3119,8 +3107,8 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3119,8 +3107,8 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
cancel
=
true
cancel
=
true
if
client
.
abuse_count
>
0
if
client
.
abuse_count
>
0
ygopro
.
stoc_send_chat
(
client
,
"${banned_duel_tip}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${banned_duel_tip}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
)
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
,
3
)
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
,
3
)
CLIENT_send_replays
(
client
,
room
)
CLIENT_send_replays
(
client
,
room
)
CLIENT_kick
(
client
)
CLIENT_kick
(
client
)
return
true
return
true
...
@@ -3174,7 +3162,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3174,7 +3162,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
ROOM_unwelcome
(
room
,
client
,
"${random_ban_reason_abuse}"
)
ROOM_unwelcome
(
room
,
client
,
"${random_ban_reason_abuse}"
)
if
client
.
abuse_count
>=
5
if
client
.
abuse_count
>=
5
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${chat_banned}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${chat_banned}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
)
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_abuse}"
)
if
!
cancel
and
settings
.
modules
.
display_watchers
and
client
.
is_post_watcher
if
!
cancel
and
settings
.
modules
.
display_watchers
and
client
.
is_post_watcher
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
:
#{
msg
}
"
,
9
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
:
#{
msg
}
"
,
9
)
return
true
return
true
...
@@ -3484,8 +3472,6 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server, datas)->
...
@@ -3484,8 +3472,6 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server, datas)->
ygopro
.
stoc_follow
'REPLAY'
,
true
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
ygopro
.
stoc_follow
'REPLAY'
,
true
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
room
=
ROOM_all
[
client
.
rid
]
room
=
ROOM_all
[
client
.
rid
]
return
settings
.
modules
.
tournament_mode
.
enabled
and
settings
.
modules
.
tournament_mode
.
block_replay_to_player
or
settings
.
modules
.
replay_delay
unless
room
return
settings
.
modules
.
tournament_mode
.
enabled
and
settings
.
modules
.
tournament_mode
.
block_replay_to_player
or
settings
.
modules
.
replay_delay
unless
room
if
settings
.
modules
.
cloud_replay
.
enabled
and
room
.
random_type
Cloud_replay_ids
.
push
room
.
cloud_replay_id
if
!
room
.
replays
[
room
.
duel_count
-
1
]
if
!
room
.
replays
[
room
.
duel_count
-
1
]
# console.log("Replay saved: ", room.duel_count - 1, client.pos)
# console.log("Replay saved: ", room.duel_count - 1, client.pos)
room
.
replays
[
room
.
duel_count
-
1
]
=
buffer
room
.
replays
[
room
.
duel_count
-
1
]
=
buffer
...
@@ -3534,15 +3520,12 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server, datas)->
...
@@ -3534,15 +3520,12 @@ ygopro.stoc_follow 'REPLAY', true, (buffer, info, client, server, datas)->
if
settings
.
modules
.
random_duel
.
enabled
if
settings
.
modules
.
random_duel
.
enabled
setInterval
()
->
setInterval
()
->
_async
.
each
(
ROOM_all
,
(
room
,
done
)
->
for
room
in
ROOM_all
when
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
random_type
and
room
.
last_active_time
and
room
.
waiting_for_player
and
room
.
get_disconnected_count
()
==
0
and
(
!
settings
.
modules
.
side_timeout
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
and
!
room
.
recovered
if
!
(
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
random_type
and
room
.
last_active_time
and
room
.
waiting_for_player
and
room
.
get_disconnected_count
()
==
0
and
(
!
settings
.
modules
.
side_timeout
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
and
!
room
.
recovered
)
done
()
return
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
)
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
)
#log.info time_passed
#log.info time_passed
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
room
.
last_active_time
=
moment
()
room
.
last_active_time
=
moment
()
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"${random_ban_reason_AFK}"
)
await
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"${random_ban_reason_AFK}"
)
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
...
@@ -3551,18 +3534,12 @@ if settings.modules.random_duel.enabled
...
@@ -3551,18 +3534,12 @@ if settings.modules.random_duel.enabled
else
if
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
and
not
(
time_passed
%
10
)
else
if
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
and
not
(
time_passed
%
10
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${afk_warn_part1}
#{
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
${afk_warn_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${afk_warn_part1}
#{
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
${afk_warn_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_unwelcome
(
room
,
room
.
waiting_for_player
,
"${random_ban_reason_AFK}"
)
ROOM_unwelcome
(
room
,
room
.
waiting_for_player
,
"${random_ban_reason_AFK}"
)
done
()
return
)
return
return
,
1000
,
1000
if
settings
.
modules
.
mycard
.
enabled
if
settings
.
modules
.
mycard
.
enabled
setInterval
()
->
setInterval
()
->
_async
.
each
(
ROOM_all
,
(
room
,
done
)
->
for
room
in
ROOM_all
when
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
arena
and
room
.
last_active_time
and
room
.
waiting_for_player
and
room
.
get_disconnected_count
()
==
0
and
(
!
settings
.
modules
.
side_timeout
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
and
!
room
.
recovered
if
not
(
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
arena
and
room
.
last_active_time
and
room
.
waiting_for_player
and
room
.
get_disconnected_count
()
==
0
and
(
!
settings
.
modules
.
side_timeout
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
and
!
room
.
recovered
)
done
()
return
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
)
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
)
#log.info time_passed
#log.info time_passed
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
...
@@ -3574,15 +3551,10 @@ if settings.modules.mycard.enabled
...
@@ -3574,15 +3551,10 @@ if settings.modules.mycard.enabled
CLIENT_kick
(
room
.
waiting_for_player
)
CLIENT_kick
(
room
.
waiting_for_player
)
else
if
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
and
not
(
time_passed
%
10
)
else
if
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
and
not
(
time_passed
%
10
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${afk_warn_part1}
#{
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
${afk_warn_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${afk_warn_part1}
#{
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
${afk_warn_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
done
()
return
return
)
if
true
# settings.modules.arena_mode.punish_quit_before_match
if
true
# settings.modules.arena_mode.punish_quit_before_match
_async
.
each
(
ROOM_all
,
(
room
,
done
)
->
for
room
in
ROOM_all
when
room
and
room
.
arena
and
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
get_playing_player
().
length
<
2
if
not
(
room
and
room
.
arena
and
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
get_playing_player
().
length
<
2
)
done
()
return
player
=
room
.
get_playing_player
()[
0
]
player
=
room
.
get_playing_player
()[
0
]
if
player
and
player
.
join_time
and
!
player
.
arena_quit_free
if
player
and
player
.
join_time
and
!
player
.
arena_quit_free
waited_time
=
moment
()
-
player
.
join_time
waited_time
=
moment
()
-
player
.
join_time
...
@@ -3591,33 +3563,22 @@ if settings.modules.mycard.enabled
...
@@ -3591,33 +3563,22 @@ if settings.modules.mycard.enabled
player
.
arena_quit_free
=
true
player
.
arena_quit_free
=
true
else
if
waited_time
>=
5000
and
waited_time
<
6000
else
if
waited_time
>=
5000
and
waited_time
<
6000
ygopro
.
stoc_send_chat
(
player
,
"${arena_wait_hint}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
player
,
"${arena_wait_hint}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
done
()
return
)
return
return
,
1000
,
1000
if
settings
.
modules
.
heartbeat_detection
.
enabled
if
settings
.
modules
.
heartbeat_detection
.
enabled
setInterval
()
->
setInterval
()
->
_async
.
each
ROOM_all
,
(
room
,
done
)
->
for
room
in
ROOM_all
when
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
(
room
.
hostinfo
.
time_limit
==
0
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
DUELING
)
and
!
room
.
windbot
if
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
(
room
.
hostinfo
.
time_limit
==
0
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
DUELING
)
and
!
room
.
windbot
for
player
in
room
.
get_playing_player
()
when
player
and
(
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
or
player
.
selected_preduel
)
_async
.
each
(
room
.
get_playing_player
(),
(
player
,
_done
)
->
if
player
and
(
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
or
player
.
selected_preduel
)
CLIENT_heartbeat_register
(
player
,
true
)
CLIENT_heartbeat_register
(
player
,
true
)
_done
()
,
done
)
else
done
()
return
return
,
settings
.
modules
.
heartbeat_detection
.
interval
,
settings
.
modules
.
heartbeat_detection
.
interval
setInterval
()
->
setInterval
()
->
current_time
=
moment
()
current_time
=
moment
()
_async
.
each
ROOM_all
,
(
room
,
done
)
->
for
room
in
ROOM_all
when
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
hostinfo
.
auto_death
and
!
room
.
auto_death_triggered
and
current_time
-
moment
(
room
.
start_time
)
>
60000
*
room
.
hostinfo
.
auto_death
if
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
hostinfo
.
auto_death
and
!
room
.
auto_death_triggered
and
current_time
-
moment
(
room
.
start_time
)
>
60000
*
room
.
hostinfo
.
auto_death
room
.
auto_death_triggered
=
true
room
.
auto_death_triggered
=
true
room
.
start_death
()
room
.
start_death
()
done
()
,
1000
,
1000
...
...
ygopro-server.js
View file @
693361fd
// Generated by CoffeeScript 2.5.1
// Generated by CoffeeScript 2.5.1
(
function
()
{
(
function
()
{
// 标准库
// 标准库
var
AthleticChecker
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
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
,
Cloud_replay_ids
,
DataManager
,
Q
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
ROOM_clear_disconnect
,
ROOM_connected_ip
,
ROOM_find_by_name
,
ROOM_find_by_pid
,
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_kick
,
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
,
ReplayParser
,
ResolveData
,
Room
,
SERVER_clear_disconnect
,
SERVER_kick
,
SOCKET_flush_data
,
_
,
_async
,
addCallback
,
athleticChecker
,
auth
,
axios
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_module_name
,
challonge_queue_callbacks
,
challonge_type
,
chat_color
,
config
,
cppversion
,
crypto
,
dataManager
,
date
,
deck_name_match
,
default_config
,
default_data
,
dialogues
,
disconnect_list
,
dns
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
getSeedTimet
,
get_callback
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
import_datas
,
imported
,
is_challonge_requesting
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_tips
,
log
,
long_resolve_cards
,
m
,
memory_usage
,
merge
,
moment
,
n
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
plugin_filename
,
plugin_list
,
plugin_path
,
qs
,
real_windbot_server_ip
,
ref
,
ref1
,
ref2
,
refresh_challonge_cache
,
release_disconnect
,
replaced_index
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
spawn_windbot
,
tips
,
url
,
users_cache
,
util
,
wait_room_start
,
wait_room_start_arena
,
windbot_looplimit
,
windbot_process
,
windbots
,
ygopro
,
zlib
;
var
AthleticChecker
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
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
,
DataManager
,
Q
,
ROOM_all
,
ROOM_bad_ip
,
ROOM_ban_player
,
ROOM_clear_disconnect
,
ROOM_connected_ip
,
ROOM_find_by_name
,
ROOM_find_by_pid
,
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_kick
,
ROOM_player_flee
,
ROOM_player_get_score
,
ROOM_player_lose
,
ROOM_player_win
,
ROOM_players_oppentlist
,
ROOM_players_scores
,
ROOM_unwelcome
,
ROOM_validate
,
ReplayParser
,
ResolveData
,
Room
,
SERVER_clear_disconnect
,
SERVER_kick
,
SOCKET_flush_data
,
_
,
_async
,
addCallback
,
athleticChecker
,
auth
,
axios
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_module_name
,
challonge_queue_callbacks
,
challonge_type
,
chat_color
,
config
,
cppversion
,
crypto
,
dataManager
,
date
,
deck_name_match
,
default_config
,
default_data
,
dialogues
,
disconnect_list
,
dns
,
duel_log
,
e
,
exec
,
execFile
,
fs
,
geoip
,
getSeedTimet
,
get_callback
,
get_memory_usage
,
http
,
http_server
,
https
,
https_server
,
import_datas
,
imported
,
is_challonge_requesting
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
lflists
,
list
,
loadJSON
,
load_dialogues
,
load_tips
,
log
,
long_resolve_cards
,
m
,
memory_usage
,
merge
,
moment
,
n
,
net
,
oldbadwords
,
oldconfig
,
olddialogues
,
oldduellog
,
oldtips
,
options
,
os
,
path
,
pgClient
,
pg_client
,
pg_query
,
plugin_filename
,
plugin_list
,
plugin_path
,
qs
,
real_windbot_server_ip
,
ref
,
ref1
,
ref2
,
refresh_challonge_cache
,
release_disconnect
,
replaced_index
,
report_to_big_brother
,
request
,
requestListener
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
spawn_windbot
,
tips
,
url
,
users_cache
,
util
,
wait_room_start
,
wait_room_start_arena
,
windbot_looplimit
,
windbot_process
,
windbots
,
ygopro
,
zlib
;
net
=
require
(
'
net
'
);
net
=
require
(
'
net
'
);
...
@@ -624,14 +624,10 @@
...
@@ -624,14 +624,10 @@
setInterval
(
get_memory_usage
,
3000
);
setInterval
(
get_memory_usage
,
3000
);
Cloud_replay_ids
=
global
.
Cloud_replay_ids
=
[];
ROOM_all
=
global
.
ROOM_all
=
[];
ROOM_all
=
global
.
ROOM_all
=
[];
ROOM_players_oppentlist
=
global
.
ROOM_players_oppentlist
=
{};
ROOM_players_oppentlist
=
global
.
ROOM_players_oppentlist
=
{};
ROOM_players_banned
=
global
.
ROOM_players_banned
=
[];
ROOM_players_scores
=
global
.
ROOM_players_scores
=
{};
ROOM_players_scores
=
global
.
ROOM_players_scores
=
{};
ROOM_connected_ip
=
global
.
ROOM_connected_ip
=
{};
ROOM_connected_ip
=
global
.
ROOM_connected_ip
=
{};
...
@@ -675,37 +671,13 @@
...
@@ -675,37 +671,13 @@
};
};
// automatically ban user to use random duel
// automatically ban user to use random duel
ROOM_ban_player
=
global
.
ROOM_ban_player
=
function
(
name
,
ip
,
reason
,
countadd
=
1
)
{
ROOM_ban_player
=
global
.
ROOM_ban_player
=
async
function
(
name
,
ip
,
reason
,
countadd
=
1
)
{
var
bannedplayer
,
bantime
;
if
(
settings
.
modules
.
test_mode
.
no_ban_player
||
!
settings
.
modules
.
mysql
.
enabled
)
{
if
(
settings
.
modules
.
test_mode
.
no_ban_player
)
{
return
;
return
;
}
}
bannedplayer
=
_
.
find
(
ROOM_players_banned
,
function
(
bannedplayer
)
{
await
dataManager
.
randomDuelBanPlayer
(
ip
,
reason
,
countadd
);
return
ip
===
bannedplayer
.
ip
;
});
if
(
bannedplayer
)
{
bannedplayer
.
count
=
bannedplayer
.
count
+
countadd
;
bantime
=
bannedplayer
.
count
>
3
?
Math
.
pow
(
2
,
bannedplayer
.
count
-
3
)
*
2
:
0
;
bannedplayer
.
time
=
moment
()
<
bannedplayer
.
time
?
moment
(
bannedplayer
.
time
).
add
(
bantime
,
'
m
'
)
:
moment
().
add
(
bantime
,
'
m
'
);
if
(
!
_
.
find
(
bannedplayer
.
reasons
,
function
(
bannedreason
)
{
return
bannedreason
===
reason
;
}))
{
bannedplayer
.
reasons
.
push
(
reason
);
}
bannedplayer
.
need_tip
=
true
;
}
else
{
bannedplayer
=
{
"
ip
"
:
ip
,
"
time
"
:
moment
(),
"
count
"
:
countadd
,
"
reasons
"
:
[
reason
],
"
need_tip
"
:
true
};
ROOM_players_banned
.
push
(
bannedplayer
);
}
};
};
//log.info("banned", name, ip, reason, bannedplayer.count)
ROOM_kick
=
function
(
name
,
callback
)
{
ROOM_kick
=
function
(
name
,
callback
)
{
var
found
;
var
found
;
found
=
false
;
found
=
false
;
...
@@ -812,14 +784,14 @@
...
@@ -812,14 +784,14 @@
},
60000
);
},
60000
);
}
}
ROOM_find_or_create_by_name
=
global
.
ROOM_find_or_create_by_name
=
function
(
name
,
player_ip
)
{
ROOM_find_or_create_by_name
=
global
.
ROOM_find_or_create_by_name
=
async
function
(
name
,
player_ip
)
{
var
room
,
uname
;
var
room
,
uname
;
uname
=
name
.
toUpperCase
();
uname
=
name
.
toUpperCase
();
if
(
settings
.
modules
.
windbot
.
enabled
&&
(
uname
.
slice
(
0
,
2
)
===
'
AI
'
||
(
!
settings
.
modules
.
random_duel
.
enabled
&&
uname
===
''
)))
{
if
(
settings
.
modules
.
windbot
.
enabled
&&
(
uname
.
slice
(
0
,
2
)
===
'
AI
'
||
(
!
settings
.
modules
.
random_duel
.
enabled
&&
uname
===
''
)))
{
return
ROOM_find_or_create_ai
(
name
);
return
ROOM_find_or_create_ai
(
name
);
}
}
if
(
settings
.
modules
.
random_duel
.
enabled
&&
(
uname
===
''
||
uname
===
'
S
'
||
uname
===
'
M
'
||
uname
===
'
T
'
))
{
if
(
settings
.
modules
.
random_duel
.
enabled
&&
(
uname
===
''
||
uname
===
'
S
'
||
uname
===
'
M
'
||
uname
===
'
T
'
))
{
return
ROOM_find_or_create_random
(
uname
,
player_ip
);
return
(
await
ROOM_find_or_create_random
(
uname
,
player_ip
)
);
}
}
if
(
room
=
ROOM_find_by_name
(
name
))
{
if
(
room
=
ROOM_find_by_name
(
name
))
{
return
room
;
return
room
;
...
@@ -830,33 +802,36 @@
...
@@ -830,33 +802,36 @@
}
}
};
};
ROOM_find_or_create_random
=
global
.
ROOM_find_or_create_random
=
function
(
type
,
player_ip
)
{
ROOM_find_or_create_random
=
global
.
ROOM_find_or_create_random
=
async
function
(
type
,
player_ip
)
{
var
bannedplayer
,
max_player
,
name
,
playerbanned
,
result
;
var
max_player
,
name
,
playerbanned
,
randomDuelBanRecord
,
result
;
bannedplayer
=
_
.
find
(
ROOM_players_banned
,
function
(
bannedplayer
)
{
if
(
settings
.
modules
.
mysql
.
enabled
)
{
return
player_ip
===
bannedplayer
.
ip
;
randomDuelBanRecord
=
(
await
dataManager
.
getRandomDuelBan
(
player_ip
));
});
if
(
randomDuelBanRecord
)
{
if
(
bannedplayer
)
{
if
(
randomDuelBanRecord
.
count
>
6
&&
moment
().
isBefore
(
randomDuelBanRecord
.
time
))
{
if
(
bannedplayer
.
count
>
6
&&
moment
()
<
bannedplayer
.
time
)
{
return
{
return
{
"
error
"
:
`\${random_banned_part1}
${
bannedplayer
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_banned_part2}
${
moment
(
bannedplayer
.
time
).
fromNow
(
true
)}
\${random_banned_part3}`
"
error
"
:
`\${random_banned_part1}
${
randomDuelBanRecord
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_banned_part2}
${
moment
(
randomDuelBanRecord
.
time
).
fromNow
(
true
)}
\${random_banned_part3}`
};
};
}
}
if
(
bannedplayer
.
count
>
3
&&
moment
()
<
bannedplayer
.
time
&&
bannedplayer
.
need_tip
&&
type
!==
'
T
'
)
{
if
(
randomDuelBanRecord
.
count
>
3
&&
moment
().
isBefore
(
randomDuelBanRecord
.
time
)
&&
randomDuelBanRecord
.
getNeedTip
()
&&
type
!==
'
T
'
)
{
bannedplayer
.
need_tip
=
false
;
randomDuelBanRecord
.
setNeedTip
(
false
);
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
);
return
{
return
{
"
error
"
:
`\${random_deprecated_part1}
${
bannedplayer
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_deprecated_part2}
${
moment
(
bannedplayer
.
time
).
fromNow
(
true
)}
\${random_deprecated_part3}`
"
error
"
:
`\${random_deprecated_part1}
${
randomDuelBanRecord
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_deprecated_part2}
${
moment
(
randomDuelBanRecord
.
time
).
fromNow
(
true
)}
\${random_deprecated_part3}`
};
};
}
else
if
(
bannedplayer
.
need_tip
)
{
}
else
if
(
randomDuelBanRecord
.
getNeedTip
())
{
bannedplayer
.
need_tip
=
false
;
randomDuelBanRecord
.
setNeedTip
(
false
);
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
);
return
{
return
{
"
error
"
:
`\${random_warn_part1}
${
bannedplayer
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_warn_part2}`
"
error
"
:
`\${random_warn_part1}
${
randomDuelBanRecord
.
reasons
.
join
(
'
${random_ban_reason_separator}
'
)}
\${random_warn_part2}`
};
};
}
else
if
(
bannedplayer
.
count
>
2
)
{
}
else
if
(
randomDuelBanRecord
.
count
>
2
)
{
bannedplayer
.
need_tip
=
true
;
randomDuelBanRecord
.
setNeedTip
(
true
);
await
dataManager
.
updateRandomDuelBan
(
randomDuelBanRecord
);
}
}
}
}
}
max_player
=
type
===
'
T
'
?
4
:
2
;
max_player
=
type
===
'
T
'
?
4
:
2
;
playerbanned
=
bannedplayer
&&
bannedplayer
.
count
>
3
&&
moment
()
<
bannedplayer
.
time
;
playerbanned
=
randomDuelBanRecord
&&
randomDuelBanRecord
.
count
>
3
&&
moment
()
<
randomDuelBanRecord
.
time
;
result
=
_
.
find
(
ROOM_all
,
function
(
room
)
{
result
=
_
.
find
(
ROOM_all
,
function
(
room
)
{
return
room
&&
room
.
random_type
!==
''
&&
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
!
room
.
windbot
&&
((
type
===
''
&&
(
room
.
random_type
===
settings
.
modules
.
random_duel
.
default_type
||
settings
.
modules
.
random_duel
.
blank_pass_modes
[
room
.
random_type
]))
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
settings
.
modules
.
random_duel
.
no_rematch_check
||
room
.
get_host
()
===
null
||
room
.
get_host
().
ip
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
||
type
===
'
T
'
);
return
room
&&
room
.
random_type
!==
''
&&
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
!
room
.
windbot
&&
((
type
===
''
&&
(
room
.
random_type
===
settings
.
modules
.
random_duel
.
default_type
||
settings
.
modules
.
random_duel
.
blank_pass_modes
[
room
.
random_type
]))
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
settings
.
modules
.
random_duel
.
no_rematch_check
||
room
.
get_host
()
===
null
||
room
.
get_host
().
ip
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
||
type
===
'
T
'
);
});
});
...
@@ -2605,7 +2580,7 @@
...
@@ -2605,7 +2580,7 @@
}
}
return
(
checksum
&
0xFF
)
===
0
;
return
(
checksum
&
0xFF
)
===
0
;
};
};
create_room_with_action
=
function
(
buffer
,
decrypted_buffer
,
match_permit
)
{
create_room_with_action
=
async
function
(
buffer
,
decrypted_buffer
,
match_permit
)
{
var
action
,
len4
,
len5
,
name
,
o
,
opt1
,
opt2
,
opt3
,
options
,
p
,
player
,
ref3
,
ref4
,
room
,
room_title
,
title
;
var
action
,
len4
,
len5
,
name
,
o
,
opt1
,
opt2
,
opt3
,
options
,
p
,
player
,
ref3
,
ref4
,
room
,
room_title
,
title
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
...
@@ -2693,7 +2668,7 @@
...
@@ -2693,7 +2668,7 @@
ygopro
.
stoc_die
(
client
,
'
${invalid_password_unauthorized}
'
);
ygopro
.
stoc_die
(
client
,
'
${invalid_password_unauthorized}
'
);
return
;
return
;
}
}
room
=
ROOM_find_or_create_by_name
(
'
M#
'
+
info
.
pass
.
slice
(
8
));
room
=
(
await
ROOM_find_or_create_by_name
(
'
M#
'
+
info
.
pass
.
slice
(
8
)
));
if
(
room
)
{
if
(
room
)
{
ref3
=
room
.
get_playing_player
();
ref3
=
room
.
get_playing_player
();
for
(
o
=
0
,
len4
=
ref3
.
length
;
o
<
len4
;
o
++
)
{
for
(
o
=
0
,
len4
=
ref3
.
length
;
o
<
len4
;
o
++
)
{
...
@@ -2895,7 +2870,7 @@
...
@@ -2895,7 +2870,7 @@
no_cache
:
!!
recover_match
no_cache
:
!!
recover_match
});
});
}
}
},
function
(
err
,
datas
)
{
},
async
function
(
err
,
datas
)
{
var
create_room_name
,
found
,
k
,
len5
,
len6
,
match
,
p
,
player
,
q
,
ref4
,
ref5
,
ref6
,
ref7
,
user
;
var
create_room_name
,
found
,
k
,
len5
,
len6
,
match
,
p
,
player
,
q
,
ref4
,
ref5
,
ref6
,
ref7
,
user
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
...
@@ -2939,7 +2914,7 @@
...
@@ -2939,7 +2914,7 @@
if
(
recover_match
)
{
if
(
recover_match
)
{
create_room_name
=
recover_match
[
0
]
+
'
,
'
+
create_room_name
;
create_room_name
=
recover_match
[
0
]
+
'
,
'
+
create_room_name
;
}
}
room
=
ROOM_find_or_create_by_name
(
create_room_name
);
room
=
(
await
ROOM_find_or_create_by_name
(
create_room_name
)
);
if
(
room
)
{
if
(
room
)
{
room
.
challonge_info
=
found
;
room
.
challonge_info
=
found
;
// room.max_player = 2
// room.max_player = 2
...
@@ -3032,7 +3007,7 @@
...
@@ -3032,7 +3007,7 @@
buffer
=
struct
.
buffer
;
buffer
=
struct
.
buffer
;
}
}
//log.info 'join_game',info.pass, client.name
//log.info 'join_game',info.pass, client.name
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
);
room
=
(
await
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
);
if
(
!
room
)
{
if
(
!
room
)
{
ygopro
.
stoc_die
(
client
,
"
${server_full}
"
);
ygopro
.
stoc_die
(
client
,
"
${server_full}
"
);
}
else
if
(
room
.
error
)
{
}
else
if
(
room
.
error
)
{
...
@@ -3624,7 +3599,7 @@
...
@@ -3624,7 +3599,7 @@
client
.
kick_count
=
client
.
kick_count
?
client
.
kick_count
+
1
:
1
;
client
.
kick_count
=
client
.
kick_count
?
client
.
kick_count
+
1
:
1
;
if
(
client
.
kick_count
>=
5
&&
room
.
random_type
)
{
if
(
client
.
kick_count
>=
5
&&
room
.
random_type
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
await
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
CLIENT_kick
(
client
);
CLIENT_kick
(
client
);
return
true
;
return
true
;
}
}
...
@@ -3801,7 +3776,7 @@
...
@@ -3801,7 +3776,7 @@
for
(
n
=
0
,
len3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
n
=
0
,
len3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
player
=
ref3
[
n
];
player
=
ref3
[
n
];
if
(
player
&&
player
.
is_host
)
{
if
(
player
&&
player
.
is_host
)
{
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
await
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
${random_ban_reason_zombie}
"
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
player
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
player
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
CLIENT_kick
(
player
);
CLIENT_kick
(
player
);
}
}
...
@@ -4185,8 +4160,8 @@
...
@@ -4185,8 +4160,8 @@
cancel
=
true
;
cancel
=
true
;
if
(
client
.
abuse_count
>
0
)
{
if
(
client
.
abuse_count
>
0
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${banned_duel_tip}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${banned_duel_tip}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
);
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
);
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
,
3
);
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
,
3
);
CLIENT_send_replays
(
client
,
room
);
CLIENT_send_replays
(
client
,
room
);
CLIENT_kick
(
client
);
CLIENT_kick
(
client
);
return
true
;
return
true
;
...
@@ -4247,7 +4222,7 @@
...
@@ -4247,7 +4222,7 @@
}
}
if
(
client
.
abuse_count
>=
5
)
{
if
(
client
.
abuse_count
>=
5
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${chat_banned}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${chat_banned}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
);
await
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_abuse}
"
);
}
}
if
(
!
cancel
&&
settings
.
modules
.
display_watchers
&&
client
.
is_post_watcher
)
{
if
(
!
cancel
&&
settings
.
modules
.
display_watchers
&&
client
.
is_post_watcher
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
:
${
msg
}
`
,
9
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
:
${
msg
}
`
,
9
);
...
@@ -4690,9 +4665,6 @@
...
@@ -4690,9 +4665,6 @@
if
(
!
room
)
{
if
(
!
room
)
{
return
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
block_replay_to_player
||
settings
.
modules
.
replay_delay
;
return
settings
.
modules
.
tournament_mode
.
enabled
&&
settings
.
modules
.
tournament_mode
.
block_replay_to_player
||
settings
.
modules
.
replay_delay
;
}
}
if
(
settings
.
modules
.
cloud_replay
.
enabled
&&
room
.
random_type
)
{
Cloud_replay_ids
.
push
(
room
.
cloud_replay_id
);
}
if
(
!
room
.
replays
[
room
.
duel_count
-
1
])
{
if
(
!
room
.
replays
[
room
.
duel_count
-
1
])
{
// console.log("Replay saved: ", room.duel_count - 1, client.pos)
// console.log("Replay saved: ", room.duel_count - 1, client.pos)
room
.
replays
[
room
.
duel_count
-
1
]
=
buffer
;
room
.
replays
[
room
.
duel_count
-
1
]
=
buffer
;
...
@@ -4763,18 +4735,18 @@
...
@@ -4763,18 +4735,18 @@
});
});
if
(
settings
.
modules
.
random_duel
.
enabled
)
{
if
(
settings
.
modules
.
random_duel
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
async
function
()
{
_async
.
each
(
ROOM_all
,
function
(
room
,
done
)
{
var
len3
,
n
,
room
,
time_passed
;
var
time_passed
;
for
(
n
=
0
,
len3
=
ROOM_all
.
length
;
n
<
len3
;
n
++
)
{
room
=
ROOM_all
[
n
];
if
(
!
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
random_type
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
&&
(
!
settings
.
modules
.
side_timeout
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
&&
!
room
.
recovered
))
{
if
(
!
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
random_type
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
&&
(
!
settings
.
modules
.
side_timeout
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
&&
!
room
.
recovered
))
{
done
();
continue
;
return
;
}
}
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
);
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
);
//log.info time_passed
//log.info time_passed
if
(
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
)
{
if
(
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
)
{
room
.
last_active_time
=
moment
();
room
.
last_active_time
=
moment
();
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"
${random_ban_reason_AFK}
"
);
await
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"
${random_ban_reason_AFK}
"
);
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
;
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
...
@@ -4784,18 +4756,17 @@
...
@@ -4784,18 +4756,17 @@
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${afk_warn_part1}
${
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
\${afk_warn_part2}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${afk_warn_part1}
${
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
\${afk_warn_part2}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_unwelcome
(
room
,
room
.
waiting_for_player
,
"
${random_ban_reason_AFK}
"
);
ROOM_unwelcome
(
room
,
room
.
waiting_for_player
,
"
${random_ban_reason_AFK}
"
);
}
}
done
();
}
});
},
1000
);
},
1000
);
}
}
if
(
settings
.
modules
.
mycard
.
enabled
)
{
if
(
settings
.
modules
.
mycard
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
_async
.
each
(
ROOM_all
,
function
(
room
,
done
)
{
var
len3
,
len4
,
n
,
o
,
player
,
room
,
time_passed
,
waited_time
;
var
time_passed
;
for
(
n
=
0
,
len3
=
ROOM_all
.
length
;
n
<
len3
;
n
++
)
{
room
=
ROOM_all
[
n
];
if
(
!
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
arena
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
&&
(
!
settings
.
modules
.
side_timeout
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
&&
!
room
.
recovered
))
{
if
(
!
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
arena
&&
room
.
last_active_time
&&
room
.
waiting_for_player
&&
room
.
get_disconnected_count
()
===
0
&&
(
!
settings
.
modules
.
side_timeout
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
&&
!
room
.
recovered
))
{
done
();
continue
;
return
;
}
}
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
);
time_passed
=
Math
.
floor
((
moment
()
-
room
.
last_active_time
)
/
1000
);
//log.info time_passed
//log.info time_passed
...
@@ -4809,14 +4780,13 @@
...
@@ -4809,14 +4780,13 @@
}
else
if
(
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
&&
!
(
time_passed
%
10
))
{
}
else
if
(
time_passed
>=
(
settings
.
modules
.
random_duel
.
hang_timeout
-
20
)
&&
!
(
time_passed
%
10
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${afk_warn_part1}
${
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
\${afk_warn_part2}`
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${afk_warn_part1}
${
settings
.
modules
.
random_duel
.
hang_timeout
-
time_passed
}
\${afk_warn_part2}`
,
ygopro
.
constants
.
COLORS
.
RED
);
}
}
done
();
}
})
;
return
;
if
(
true
)
{
// settings.modules.arena_mode.punish_quit_before_match
if
(
true
)
{
// settings.modules.arena_mode.punish_quit_before_match
_async
.
each
(
ROOM_all
,
function
(
room
,
done
)
{
for
(
o
=
0
,
len4
=
ROOM_all
.
length
;
o
<
len4
;
o
++
)
{
var
player
,
waited_time
;
room
=
ROOM_all
[
o
]
;
if
(
!
(
room
&&
room
.
arena
&&
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
get_playing_player
().
length
<
2
))
{
if
(
!
(
room
&&
room
.
arena
&&
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
get_playing_player
().
length
<
2
))
{
done
();
continue
;
return
;
}
}
player
=
room
.
get_playing_player
()[
0
];
player
=
room
.
get_playing_player
()[
0
];
if
(
player
&&
player
.
join_time
&&
!
player
.
arena_quit_free
)
{
if
(
player
&&
player
.
join_time
&&
!
player
.
arena_quit_free
)
{
...
@@ -4828,39 +4798,42 @@
...
@@ -4828,39 +4798,42 @@
ygopro
.
stoc_send_chat
(
player
,
"
${arena_wait_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
player
,
"
${arena_wait_hint}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
done
();
}
});
}
}
},
1000
);
},
1000
);
}
}
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
if
(
settings
.
modules
.
heartbeat_detection
.
enabled
)
{
setInterval
(
function
()
{
setInterval
(
function
()
{
_async
.
each
(
ROOM_all
,
function
(
room
,
done
)
{
var
len3
,
len4
,
n
,
o
,
player
,
ref3
,
room
;
for
(
n
=
0
,
len3
=
ROOM_all
.
length
;
n
<
len3
;
n
++
)
{
room
=
ROOM_all
[
n
];
if
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
(
room
.
hostinfo
.
time_limit
===
0
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
DUELING
)
&&
!
room
.
windbot
)
{
if
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
(
room
.
hostinfo
.
time_limit
===
0
||
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
DUELING
)
&&
!
room
.
windbot
)
{
return
_async
.
each
(
room
.
get_playing_player
(),
function
(
player
,
_done
)
{
ref3
=
room
.
get_playing_player
();
for
(
o
=
0
,
len4
=
ref3
.
length
;
o
<
len4
;
o
++
)
{
player
=
ref3
[
o
];
if
(
player
&&
(
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
||
player
.
selected_preduel
))
{
if
(
player
&&
(
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
||
player
.
selected_preduel
))
{
CLIENT_heartbeat_register
(
player
,
true
);
CLIENT_heartbeat_register
(
player
,
true
);
}
}
return
_done
();
},
done
);
}
else
{
return
done
();
}
}
});
}
}
},
settings
.
modules
.
heartbeat_detection
.
interval
);
},
settings
.
modules
.
heartbeat_detection
.
interval
);
}
}
setInterval
(
function
()
{
setInterval
(
function
()
{
var
current_time
;
var
current_time
,
len3
,
n
,
results
,
room
;
current_time
=
moment
();
current_time
=
moment
();
return
_async
.
each
(
ROOM_all
,
function
(
room
,
done
)
{
results
=
[];
if
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
hostinfo
.
auto_death
&&
!
room
.
auto_death_triggered
&&
current_time
-
moment
(
room
.
start_time
)
>
60000
*
room
.
hostinfo
.
auto_death
)
{
for
(
n
=
0
,
len3
=
ROOM_all
.
length
;
n
<
len3
;
n
++
)
{
room
=
ROOM_all
[
n
];
if
(
!
(
room
&&
room
.
duel_stage
!==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
hostinfo
.
auto_death
&&
!
room
.
auto_death_triggered
&&
current_time
-
moment
(
room
.
start_time
)
>
60000
*
room
.
hostinfo
.
auto_death
))
{
continue
;
}
room
.
auto_death_triggered
=
true
;
room
.
auto_death_triggered
=
true
;
room
.
start_death
(
);
results
.
push
(
room
.
start_death
()
);
}
}
return
done
();
return
results
;
});
},
1000
);
},
1000
);
// spawn windbot
// spawn windbot
...
...
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