Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
srvpro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
srvpro
Commits
6bf0003b
Commit
6bf0003b
authored
Nov 15, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vip info
parent
56f15b58
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
669 additions
and
746 deletions
+669
-746
data-manager/DataManager.js
data-manager/DataManager.js
+20
-0
data-manager/DataManager.ts
data-manager/DataManager.ts
+21
-0
data-manager/entities/Ban.js
data-manager/entities/Ban.js
+23
-20
data-manager/entities/BasePlayer.js
data-manager/entities/BasePlayer.js
+17
-14
data-manager/entities/CloudReplay.js
data-manager/entities/CloudReplay.js
+41
-38
data-manager/entities/CloudReplayPlayer.js
data-manager/entities/CloudReplayPlayer.js
+25
-22
data-manager/entities/DuelLog.js
data-manager/entities/DuelLog.js
+71
-68
data-manager/entities/DuelLogPlayer.js
data-manager/entities/DuelLogPlayer.js
+83
-80
data-manager/entities/RandomDuelBan.js
data-manager/entities/RandomDuelBan.js
+34
-31
data-manager/entities/User.js
data-manager/entities/User.js
+40
-37
data-manager/entities/UserDialog.js
data-manager/entities/UserDialog.js
+25
-22
data-manager/entities/VipKey.js
data-manager/entities/VipKey.js
+32
-29
data/i18n.json
data/i18n.json
+2
-0
ygopro-server.coffee
ygopro-server.coffee
+87
-135
ygopro-server.js
ygopro-server.js
+148
-250
No files found.
data-manager/DataManager.js
View file @
6bf0003b
...
@@ -335,6 +335,10 @@ class DataManager {
...
@@ -335,6 +335,10 @@ class DataManager {
user
.
chatColor
=
color
;
user
.
chatColor
=
color
;
return
await
this
.
saveUser
(
user
);
return
await
this
.
saveUser
(
user
);
}
}
async
isUserVip
(
key
)
{
const
user
=
await
this
.
getUser
(
key
);
return
user
?
user
.
isVip
()
:
false
;
}
async
getUserDialogueText
(
key
,
cardCode
)
{
async
getUserDialogueText
(
key
,
cardCode
)
{
try
{
try
{
const
dialogue
=
await
this
.
db
.
getRepository
(
UserDialog_1
.
UserDialog
)
const
dialogue
=
await
this
.
db
.
getRepository
(
UserDialog_1
.
UserDialog
)
...
@@ -395,6 +399,20 @@ class DataManager {
...
@@ -395,6 +399,20 @@ class DataManager {
}
}
});
});
}
}
async
removeUserDialogues
(
key
,
cardCode
)
{
try
{
await
this
.
db
.
createQueryBuilder
()
.
delete
()
.
from
(
UserDialog_1
.
UserDialog
)
.
where
(
"
cardCode = :cardCode and userKey = :key
"
,
{
cardCode
,
key
})
.
execute
();
return
true
;
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to remove dialogue:
${
e
.
toString
()}
`
);
return
false
;
}
}
async
migrateChatColors
(
data
)
{
async
migrateChatColors
(
data
)
{
await
this
.
transaction
(
async
(
mdb
)
=>
{
await
this
.
transaction
(
async
(
mdb
)
=>
{
try
{
try
{
...
@@ -443,9 +461,11 @@ class DataManager {
...
@@ -443,9 +461,11 @@ class DataManager {
});
});
try
{
try
{
await
this
.
db
.
manager
.
save
(
vipKeys
);
await
this
.
db
.
manager
.
save
(
vipKeys
);
return
true
;
}
}
catch
(
e
)
{
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to generate keys of keyType
${
keyType
}
:
${
e
.
toString
()}
`
);
this
.
log
.
warn
(
`Failed to generate keys of keyType
${
keyType
}
:
${
e
.
toString
()}
`
);
return
false
;
}
}
}
}
async
useVipKey
(
userKey
,
vipKeyText
)
{
async
useVipKey
(
userKey
,
vipKeyText
)
{
...
...
data-manager/DataManager.ts
View file @
6bf0003b
...
@@ -359,6 +359,10 @@ export class DataManager {
...
@@ -359,6 +359,10 @@ export class DataManager {
user
.
chatColor
=
color
;
user
.
chatColor
=
color
;
return
await
this
.
saveUser
(
user
);
return
await
this
.
saveUser
(
user
);
}
}
async
isUserVip
(
key
:
string
)
{
const
user
=
await
this
.
getUser
(
key
);
return
user
?
user
.
isVip
()
:
false
;
}
async
getUserDialogueText
(
key
:
string
,
cardCode
:
number
)
{
async
getUserDialogueText
(
key
:
string
,
cardCode
:
number
)
{
try
{
try
{
const
dialogue
=
await
this
.
db
.
getRepository
(
UserDialog
)
const
dialogue
=
await
this
.
db
.
getRepository
(
UserDialog
)
...
@@ -418,6 +422,21 @@ export class DataManager {
...
@@ -418,6 +422,21 @@ export class DataManager {
}
}
async
removeUserDialogues
(
key
:
string
,
cardCode
:
number
)
{
try
{
await
this
.
db
.
createQueryBuilder
()
.
delete
()
.
from
(
UserDialog
)
.
where
(
"
cardCode = :cardCode and userKey = :key
"
,
{
cardCode
,
key
})
.
execute
();
return
true
;
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to remove dialogue:
${
e
.
toString
()}
`
);
return
false
;
}
}
async
migrateChatColors
(
data
:
any
)
{
async
migrateChatColors
(
data
:
any
)
{
await
this
.
transaction
(
async
(
mdb
)
=>
{
await
this
.
transaction
(
async
(
mdb
)
=>
{
try
{
try
{
...
@@ -467,8 +486,10 @@ export class DataManager {
...
@@ -467,8 +486,10 @@ export class DataManager {
});
});
try
{
try
{
await
this
.
db
.
manager
.
save
(
vipKeys
);
await
this
.
db
.
manager
.
save
(
vipKeys
);
return
true
;
}
catch
(
e
)
{
}
catch
(
e
)
{
this
.
log
.
warn
(
`Failed to generate keys of keyType
${
keyType
}
:
${
e
.
toString
()}
`
);
this
.
log
.
warn
(
`Failed to generate keys of keyType
${
keyType
}
:
${
e
.
toString
()}
`
);
return
false
;
}
}
}
}
...
...
data-manager/entities/Ban.js
View file @
6bf0003b
...
@@ -11,25 +11,28 @@ var __metadata = (this && this.__metadata) || function (k, v) {
...
@@ -11,25 +11,28 @@ var __metadata = (this && this.__metadata) || function (k, v) {
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
Ban
=
void
0
;
exports
.
Ban
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
let
Ban
=
class
Ban
{
let
Ban
=
/** @class */
(()
=>
{
};
let
Ban
=
class
Ban
{
__decorate
([
};
__decorate
([
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
Ban
.
prototype
,
"
id
"
,
void
0
);
],
Ban
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
64
,
nullable
:
true
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
64
,
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
Ban
.
prototype
,
"
ip
"
,
void
0
);
],
Ban
.
prototype
,
"
ip
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
,
nullable
:
true
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
,
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
Ban
.
prototype
,
"
name
"
,
void
0
);
],
Ban
.
prototype
,
"
name
"
,
void
0
);
Ban
=
__decorate
([
Ban
=
__decorate
([
typeorm_1
.
Entity
(),
typeorm_1
.
Entity
(),
typeorm_1
.
Unique
([
"
ip
"
,
"
name
"
])
typeorm_1
.
Unique
([
"
ip
"
,
"
name
"
])
],
Ban
);
],
Ban
);
return
Ban
;
})();
exports
.
Ban
=
Ban
;
exports
.
Ban
=
Ban
;
//# sourceMappingURL=Ban.js.map
//# sourceMappingURL=Ban.js.map
\ No newline at end of file
data-manager/entities/BasePlayer.js
View file @
6bf0003b
...
@@ -11,19 +11,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
...
@@ -11,19 +11,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
BasePlayer
=
void
0
;
exports
.
BasePlayer
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
class
BasePlayer
{
let
BasePlayer
=
/** @class */
(()
=>
{
}
class
BasePlayer
{
__decorate
([
}
__decorate
([
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
BasePlayer
.
prototype
,
"
id
"
,
void
0
);
],
BasePlayer
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
BasePlayer
.
prototype
,
"
name
"
,
void
0
);
],
BasePlayer
.
prototype
,
"
name
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
tinyint
"
}),
typeorm_1
.
Column
({
type
:
"
tinyint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
BasePlayer
.
prototype
,
"
pos
"
,
void
0
);
],
BasePlayer
.
prototype
,
"
pos
"
,
void
0
);
return
BasePlayer
;
})();
exports
.
BasePlayer
=
BasePlayer
;
exports
.
BasePlayer
=
BasePlayer
;
//# sourceMappingURL=BasePlayer.js.map
//# sourceMappingURL=BasePlayer.js.map
\ No newline at end of file
data-manager/entities/CloudReplay.js
View file @
6bf0003b
...
@@ -17,7 +17,8 @@ const typeorm_1 = require("typeorm");
...
@@ -17,7 +17,8 @@ const typeorm_1 = require("typeorm");
const
CloudReplayPlayer_1
=
require
(
"
./CloudReplayPlayer
"
);
const
CloudReplayPlayer_1
=
require
(
"
./CloudReplayPlayer
"
);
const
underscore_1
=
__importDefault
(
require
(
"
underscore
"
));
const
underscore_1
=
__importDefault
(
require
(
"
underscore
"
));
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
let
CloudReplay
=
class
CloudReplay
{
let
CloudReplay
=
/** @class */
(()
=>
{
let
CloudReplay
=
class
CloudReplay
{
fromBuffer
(
buffer
)
{
fromBuffer
(
buffer
)
{
this
.
data
=
buffer
.
toString
(
"
base64
"
);
this
.
data
=
buffer
.
toString
(
"
base64
"
);
}
}
...
@@ -35,25 +36,27 @@ let CloudReplay = class CloudReplay {
...
@@ -35,25 +36,27 @@ let CloudReplay = class CloudReplay {
getDisplayString
()
{
getDisplayString
()
{
return
`R#
${
this
.
id
}
${
this
.
getPlayerNamesString
()}
${
this
.
getDateString
()}
`
;
return
`R#
${
this
.
id
}
${
this
.
getPlayerNamesString
()}
${
this
.
getDateString
()}
`
;
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
PrimaryColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
CloudReplay
.
prototype
,
"
id
"
,
void
0
);
],
CloudReplay
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
text
"
}),
typeorm_1
.
Column
({
type
:
"
text
"
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
CloudReplay
.
prototype
,
"
data
"
,
void
0
);
],
CloudReplay
.
prototype
,
"
data
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
datetime
"
}),
typeorm_1
.
Column
({
type
:
"
datetime
"
}),
__metadata
(
"
design:type
"
,
Date
)
__metadata
(
"
design:type
"
,
Date
)
],
CloudReplay
.
prototype
,
"
date
"
,
void
0
);
],
CloudReplay
.
prototype
,
"
date
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
OneToMany
(()
=>
CloudReplayPlayer_1
.
CloudReplayPlayer
,
player
=>
player
.
cloudReplay
),
typeorm_1
.
OneToMany
(()
=>
CloudReplayPlayer_1
.
CloudReplayPlayer
,
player
=>
player
.
cloudReplay
),
__metadata
(
"
design:type
"
,
Array
)
__metadata
(
"
design:type
"
,
Array
)
],
CloudReplay
.
prototype
,
"
players
"
,
void
0
);
],
CloudReplay
.
prototype
,
"
players
"
,
void
0
);
CloudReplay
=
__decorate
([
CloudReplay
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
CloudReplay
);
],
CloudReplay
);
return
CloudReplay
;
})();
exports
.
CloudReplay
=
CloudReplay
;
exports
.
CloudReplay
=
CloudReplay
;
//# sourceMappingURL=CloudReplay.js.map
//# sourceMappingURL=CloudReplay.js.map
\ No newline at end of file
data-manager/entities/CloudReplayPlayer.js
View file @
6bf0003b
...
@@ -8,13 +8,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
...
@@ -8,13 +8,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
var
__metadata
=
(
this
&&
this
.
__metadata
)
||
function
(
k
,
v
)
{
var
__metadata
=
(
this
&&
this
.
__metadata
)
||
function
(
k
,
v
)
{
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
};
};
var
CloudReplayPlayer_1
;
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
CloudReplayPlayer
=
void
0
;
exports
.
CloudReplayPlayer
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
const
CloudReplay_1
=
require
(
"
./CloudReplay
"
);
const
CloudReplay_1
=
require
(
"
./CloudReplay
"
);
const
BasePlayer_1
=
require
(
"
./BasePlayer
"
);
const
BasePlayer_1
=
require
(
"
./BasePlayer
"
);
let
CloudReplayPlayer
=
CloudReplayPlayer_1
=
class
CloudReplayPlayer
extends
BasePlayer_1
.
BasePlayer
{
let
CloudReplayPlayer
=
/** @class */
(()
=>
{
var
CloudReplayPlayer_1
;
let
CloudReplayPlayer
=
CloudReplayPlayer_1
=
class
CloudReplayPlayer
extends
BasePlayer_1
.
BasePlayer
{
static
fromPlayerInfo
(
info
)
{
static
fromPlayerInfo
(
info
)
{
const
p
=
new
CloudReplayPlayer_1
();
const
p
=
new
CloudReplayPlayer_1
();
p
.
key
=
info
.
key
;
p
.
key
=
info
.
key
;
...
@@ -22,18 +23,20 @@ let CloudReplayPlayer = CloudReplayPlayer_1 = class CloudReplayPlayer extends Ba
...
@@ -22,18 +23,20 @@ let CloudReplayPlayer = CloudReplayPlayer_1 = class CloudReplayPlayer extends Ba
p
.
pos
=
info
.
pos
;
p
.
pos
=
info
.
pos
;
return
p
;
return
p
;
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
40
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
40
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
CloudReplayPlayer
.
prototype
,
"
key
"
,
void
0
);
],
CloudReplayPlayer
.
prototype
,
"
key
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
ManyToOne
(()
=>
CloudReplay_1
.
CloudReplay
,
replay
=>
replay
.
players
),
typeorm_1
.
ManyToOne
(()
=>
CloudReplay_1
.
CloudReplay
,
replay
=>
replay
.
players
),
__metadata
(
"
design:type
"
,
CloudReplay_1
.
CloudReplay
)
__metadata
(
"
design:type
"
,
CloudReplay_1
.
CloudReplay
)
],
CloudReplayPlayer
.
prototype
,
"
cloudReplay
"
,
void
0
);
],
CloudReplayPlayer
.
prototype
,
"
cloudReplay
"
,
void
0
);
CloudReplayPlayer
=
CloudReplayPlayer_1
=
__decorate
([
CloudReplayPlayer
=
CloudReplayPlayer_1
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
CloudReplayPlayer
);
],
CloudReplayPlayer
);
return
CloudReplayPlayer
;
})();
exports
.
CloudReplayPlayer
=
CloudReplayPlayer
;
exports
.
CloudReplayPlayer
=
CloudReplayPlayer
;
//# sourceMappingURL=CloudReplayPlayer.js.map
//# sourceMappingURL=CloudReplayPlayer.js.map
\ No newline at end of file
data-manager/entities/DuelLog.js
View file @
6bf0003b
...
@@ -17,7 +17,8 @@ const typeorm_1 = require("typeorm");
...
@@ -17,7 +17,8 @@ const typeorm_1 = require("typeorm");
const
DuelLogPlayer_1
=
require
(
"
./DuelLogPlayer
"
);
const
DuelLogPlayer_1
=
require
(
"
./DuelLogPlayer
"
);
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
const
underscore_1
=
__importDefault
(
require
(
"
underscore
"
));
const
underscore_1
=
__importDefault
(
require
(
"
underscore
"
));
let
DuelLog
=
class
DuelLog
{
let
DuelLog
=
/** @class */
(()
=>
{
let
DuelLog
=
class
DuelLog
{
getViewString
()
{
getViewString
()
{
const
viewPlayers
=
underscore_1
.
default
.
clone
(
this
.
players
);
const
viewPlayers
=
underscore_1
.
default
.
clone
(
this
.
players
);
viewPlayers
.
sort
((
p1
,
p2
)
=>
p1
.
pos
-
p2
.
pos
);
viewPlayers
.
sort
((
p1
,
p2
)
=>
p1
.
pos
-
p2
.
pos
);
...
@@ -44,46 +45,48 @@ let DuelLog = class DuelLog {
...
@@ -44,46 +45,48 @@ let DuelLog = class DuelLog {
};
};
return
data
;
return
data
;
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLog
.
prototype
,
"
id
"
,
void
0
);
],
DuelLog
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
datetime
"
),
typeorm_1
.
Column
(
"
datetime
"
),
__metadata
(
"
design:type
"
,
Date
)
__metadata
(
"
design:type
"
,
Date
)
],
DuelLog
.
prototype
,
"
time
"
,
void
0
);
],
DuelLog
.
prototype
,
"
time
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLog
.
prototype
,
"
name
"
,
void
0
);
],
DuelLog
.
prototype
,
"
name
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
int
"
),
typeorm_1
.
Column
(
"
int
"
),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLog
.
prototype
,
"
roomId
"
,
void
0
);
],
DuelLog
.
prototype
,
"
roomId
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
bigint
"
),
typeorm_1
.
Column
(
"
bigint
"
),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLog
.
prototype
,
"
cloudReplayId
"
,
void
0
);
],
DuelLog
.
prototype
,
"
cloudReplayId
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
256
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
256
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLog
.
prototype
,
"
replayFileName
"
,
void
0
);
],
DuelLog
.
prototype
,
"
replayFileName
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLog
.
prototype
,
"
roomMode
"
,
void
0
);
],
DuelLog
.
prototype
,
"
roomMode
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLog
.
prototype
,
"
duelCount
"
,
void
0
);
],
DuelLog
.
prototype
,
"
duelCount
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
OneToMany
(()
=>
DuelLogPlayer_1
.
DuelLogPlayer
,
player
=>
player
.
duelLog
),
typeorm_1
.
OneToMany
(()
=>
DuelLogPlayer_1
.
DuelLogPlayer
,
player
=>
player
.
duelLog
),
__metadata
(
"
design:type
"
,
Array
)
__metadata
(
"
design:type
"
,
Array
)
],
DuelLog
.
prototype
,
"
players
"
,
void
0
);
],
DuelLog
.
prototype
,
"
players
"
,
void
0
);
DuelLog
=
__decorate
([
DuelLog
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
DuelLog
);
],
DuelLog
);
return
DuelLog
;
})();
exports
.
DuelLog
=
DuelLog
;
exports
.
DuelLog
=
DuelLog
;
//# sourceMappingURL=DuelLog.js.map
//# sourceMappingURL=DuelLog.js.map
\ No newline at end of file
data-manager/entities/DuelLogPlayer.js
View file @
6bf0003b
...
@@ -8,14 +8,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
...
@@ -8,14 +8,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
var
__metadata
=
(
this
&&
this
.
__metadata
)
||
function
(
k
,
v
)
{
var
__metadata
=
(
this
&&
this
.
__metadata
)
||
function
(
k
,
v
)
{
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
if
(
typeof
Reflect
===
"
object
"
&&
typeof
Reflect
.
metadata
===
"
function
"
)
return
Reflect
.
metadata
(
k
,
v
);
};
};
var
DuelLogPlayer_1
;
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
DuelLogPlayer
=
void
0
;
exports
.
DuelLogPlayer
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
const
BasePlayer_1
=
require
(
"
./BasePlayer
"
);
const
BasePlayer_1
=
require
(
"
./BasePlayer
"
);
const
DuelLog_1
=
require
(
"
./DuelLog
"
);
const
DuelLog_1
=
require
(
"
./DuelLog
"
);
const
DeckEncoder_1
=
require
(
"
../DeckEncoder
"
);
const
DeckEncoder_1
=
require
(
"
../DeckEncoder
"
);
let
DuelLogPlayer
=
DuelLogPlayer_1
=
class
DuelLogPlayer
extends
BasePlayer_1
.
BasePlayer
{
let
DuelLogPlayer
=
/** @class */
(()
=>
{
var
DuelLogPlayer_1
;
let
DuelLogPlayer
=
DuelLogPlayer_1
=
class
DuelLogPlayer
extends
BasePlayer_1
.
BasePlayer
{
setStartDeck
(
deck
)
{
setStartDeck
(
deck
)
{
if
(
deck
===
null
)
{
if
(
deck
===
null
)
{
this
.
startDeckBuffer
=
null
;
this
.
startDeckBuffer
=
null
;
...
@@ -51,50 +52,52 @@ let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.B
...
@@ -51,50 +52,52 @@ let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.B
p
.
setCurrentDeck
(
info
.
deck
);
p
.
setCurrentDeck
(
info
.
deck
);
return
p
;
return
p
;
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
20
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLogPlayer
.
prototype
,
"
realName
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
realName
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
64
,
nullable
:
true
}),
typeorm_1
.
Column
({
type
:
"
varchar
"
,
length
:
64
,
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLogPlayer
.
prototype
,
"
ip
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
ip
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLogPlayer
.
prototype
,
"
isFirst
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
isFirst
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
),
typeorm_1
.
Column
(
"
tinyint
"
),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLogPlayer
.
prototype
,
"
score
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
score
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
int
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
int
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLogPlayer
.
prototype
,
"
lp
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
lp
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
smallint
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
smallint
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLogPlayer
.
prototype
,
"
cardCount
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
cardCount
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLogPlayer
.
prototype
,
"
startDeckBuffer
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
startDeckBuffer
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
DuelLogPlayer
.
prototype
,
"
currentDeckBuffer
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
currentDeckBuffer
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
),
typeorm_1
.
Column
(
"
tinyint
"
),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
DuelLogPlayer
.
prototype
,
"
winner
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
winner
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
ManyToOne
(()
=>
DuelLog_1
.
DuelLog
,
duelLog
=>
duelLog
.
players
),
typeorm_1
.
ManyToOne
(()
=>
DuelLog_1
.
DuelLog
,
duelLog
=>
duelLog
.
players
),
__metadata
(
"
design:type
"
,
DuelLog_1
.
DuelLog
)
__metadata
(
"
design:type
"
,
DuelLog_1
.
DuelLog
)
],
DuelLogPlayer
.
prototype
,
"
duelLog
"
,
void
0
);
],
DuelLogPlayer
.
prototype
,
"
duelLog
"
,
void
0
);
DuelLogPlayer
=
DuelLogPlayer_1
=
__decorate
([
DuelLogPlayer
=
DuelLogPlayer_1
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
DuelLogPlayer
);
],
DuelLogPlayer
);
return
DuelLogPlayer
;
})();
exports
.
DuelLogPlayer
=
DuelLogPlayer
;
exports
.
DuelLogPlayer
=
DuelLogPlayer
;
//# sourceMappingURL=DuelLogPlayer.js.map
//# sourceMappingURL=DuelLogPlayer.js.map
\ No newline at end of file
data-manager/entities/RandomDuelBan.js
View file @
6bf0003b
...
@@ -11,36 +11,39 @@ var __metadata = (this && this.__metadata) || function (k, v) {
...
@@ -11,36 +11,39 @@ var __metadata = (this && this.__metadata) || function (k, v) {
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
RandomDuelBan
=
void
0
;
exports
.
RandomDuelBan
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
let
RandomDuelBan
=
class
RandomDuelBan
{
let
RandomDuelBan
=
/** @class */
(()
=>
{
let
RandomDuelBan
=
class
RandomDuelBan
{
setNeedTip
(
need
)
{
setNeedTip
(
need
)
{
this
.
needTip
=
need
?
1
:
0
;
this
.
needTip
=
need
?
1
:
0
;
}
}
getNeedTip
()
{
getNeedTip
()
{
return
this
.
needTip
>
0
?
true
:
false
;
return
this
.
needTip
>
0
?
true
:
false
;
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
64
}),
typeorm_1
.
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
64
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
RandomDuelBan
.
prototype
,
"
ip
"
,
void
0
);
],
RandomDuelBan
.
prototype
,
"
ip
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
datetime
"
),
typeorm_1
.
Column
(
"
datetime
"
),
__metadata
(
"
design:type
"
,
Date
)
__metadata
(
"
design:type
"
,
Date
)
],
RandomDuelBan
.
prototype
,
"
time
"
,
void
0
);
],
RandomDuelBan
.
prototype
,
"
time
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
smallint
"
),
typeorm_1
.
Column
(
"
smallint
"
),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
RandomDuelBan
.
prototype
,
"
count
"
,
void
0
);
],
RandomDuelBan
.
prototype
,
"
count
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
simple-array
"
}),
typeorm_1
.
Column
({
type
:
"
simple-array
"
}),
__metadata
(
"
design:type
"
,
Array
)
__metadata
(
"
design:type
"
,
Array
)
],
RandomDuelBan
.
prototype
,
"
reasons
"
,
void
0
);
],
RandomDuelBan
.
prototype
,
"
reasons
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
({
type
:
"
tinyint
"
,
unsigned
:
true
}),
typeorm_1
.
Column
({
type
:
"
tinyint
"
,
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
RandomDuelBan
.
prototype
,
"
needTip
"
,
void
0
);
],
RandomDuelBan
.
prototype
,
"
needTip
"
,
void
0
);
RandomDuelBan
=
__decorate
([
RandomDuelBan
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
RandomDuelBan
);
],
RandomDuelBan
);
return
RandomDuelBan
;
})();
exports
.
RandomDuelBan
=
RandomDuelBan
;
exports
.
RandomDuelBan
=
RandomDuelBan
;
//# sourceMappingURL=RandomDuelBan.js.map
//# sourceMappingURL=RandomDuelBan.js.map
\ No newline at end of file
data-manager/entities/User.js
View file @
6bf0003b
...
@@ -17,42 +17,45 @@ const typeorm_1 = require("typeorm");
...
@@ -17,42 +17,45 @@ const typeorm_1 = require("typeorm");
const
UserDialog_1
=
require
(
"
./UserDialog
"
);
const
UserDialog_1
=
require
(
"
./UserDialog
"
);
const
VipKey_1
=
require
(
"
./VipKey
"
);
const
VipKey_1
=
require
(
"
./VipKey
"
);
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
const
moment_1
=
__importDefault
(
require
(
"
moment
"
));
let
User
=
class
User
{
let
User
=
/** @class */
(()
=>
{
let
User
=
class
User
{
isVip
()
{
isVip
()
{
return
this
.
vipExpireDate
&&
moment_1
.
default
().
isBefore
(
this
.
vipExpireDate
);
return
this
.
vipExpireDate
&&
moment_1
.
default
().
isBefore
(
this
.
vipExpireDate
);
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
128
}),
typeorm_1
.
PrimaryColumn
({
type
:
"
varchar
"
,
length
:
128
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
User
.
prototype
,
"
key
"
,
void
0
);
],
User
.
prototype
,
"
key
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
varchar
"
,
{
length
:
16
,
nullable
:
true
}),
typeorm_1
.
Column
(
"
varchar
"
,
{
length
:
16
,
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
User
.
prototype
,
"
chatColor
"
,
void
0
);
],
User
.
prototype
,
"
chatColor
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
(
"
datetime
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
datetime
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
Date
)
__metadata
(
"
design:type
"
,
Date
)
],
User
.
prototype
,
"
vipExpireDate
"
,
void
0
);
],
User
.
prototype
,
"
vipExpireDate
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
User
.
prototype
,
"
victory
"
,
void
0
);
],
User
.
prototype
,
"
victory
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
typeorm_1
.
Column
(
"
text
"
,
{
nullable
:
true
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
User
.
prototype
,
"
words
"
,
void
0
);
],
User
.
prototype
,
"
words
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
OneToMany
(()
=>
UserDialog_1
.
UserDialog
,
dialog
=>
dialog
.
user
),
typeorm_1
.
OneToMany
(()
=>
UserDialog_1
.
UserDialog
,
dialog
=>
dialog
.
user
),
__metadata
(
"
design:type
"
,
Array
)
__metadata
(
"
design:type
"
,
Array
)
],
User
.
prototype
,
"
dialogues
"
,
void
0
);
],
User
.
prototype
,
"
dialogues
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
OneToMany
(()
=>
VipKey_1
.
VipKey
,
vipKey
=>
vipKey
.
usedBy
),
typeorm_1
.
OneToMany
(()
=>
VipKey_1
.
VipKey
,
vipKey
=>
vipKey
.
usedBy
),
__metadata
(
"
design:type
"
,
Array
)
__metadata
(
"
design:type
"
,
Array
)
],
User
.
prototype
,
"
usedKeys
"
,
void
0
);
],
User
.
prototype
,
"
usedKeys
"
,
void
0
);
User
=
__decorate
([
User
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
User
);
],
User
);
return
User
;
})();
exports
.
User
=
User
;
exports
.
User
=
User
;
//# sourceMappingURL=User.js.map
//# sourceMappingURL=User.js.map
\ No newline at end of file
data-manager/entities/UserDialog.js
View file @
6bf0003b
...
@@ -12,27 +12,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
...
@@ -12,27 +12,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports
.
UserDialog
=
void
0
;
exports
.
UserDialog
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
const
User_1
=
require
(
"
./User
"
);
const
User_1
=
require
(
"
./User
"
);
let
UserDialog
=
class
UserDialog
{
let
UserDialog
=
/** @class */
(()
=>
{
};
let
UserDialog
=
class
UserDialog
{
__decorate
([
};
__decorate
([
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
UserDialog
.
prototype
,
"
id
"
,
void
0
);
],
UserDialog
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
(),
typeorm_1
.
Index
(),
typeorm_1
.
Column
(
"
int
"
,
{
unsigned
:
true
}),
typeorm_1
.
Column
(
"
int
"
,
{
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
UserDialog
.
prototype
,
"
cardCode
"
,
void
0
);
],
UserDialog
.
prototype
,
"
cardCode
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
text
"
),
typeorm_1
.
Column
(
"
text
"
),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
UserDialog
.
prototype
,
"
text
"
,
void
0
);
],
UserDialog
.
prototype
,
"
text
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
ManyToOne
(()
=>
User_1
.
User
,
user
=>
user
.
dialogues
),
typeorm_1
.
ManyToOne
(()
=>
User_1
.
User
,
user
=>
user
.
dialogues
),
__metadata
(
"
design:type
"
,
User_1
.
User
)
__metadata
(
"
design:type
"
,
User_1
.
User
)
],
UserDialog
.
prototype
,
"
user
"
,
void
0
);
],
UserDialog
.
prototype
,
"
user
"
,
void
0
);
UserDialog
=
__decorate
([
UserDialog
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
UserDialog
);
],
UserDialog
);
return
UserDialog
;
})();
exports
.
UserDialog
=
UserDialog
;
exports
.
UserDialog
=
UserDialog
;
//# sourceMappingURL=UserDialog.js.map
//# sourceMappingURL=UserDialog.js.map
\ No newline at end of file
data-manager/entities/VipKey.js
View file @
6bf0003b
...
@@ -12,34 +12,37 @@ Object.defineProperty(exports, "__esModule", { value: true });
...
@@ -12,34 +12,37 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports
.
VipKey
=
void
0
;
exports
.
VipKey
=
void
0
;
const
typeorm_1
=
require
(
"
typeorm
"
);
const
typeorm_1
=
require
(
"
typeorm
"
);
const
User_1
=
require
(
"
./User
"
);
const
User_1
=
require
(
"
./User
"
);
let
VipKey
=
class
VipKey
{
let
VipKey
=
/** @class */
(()
=>
{
let
VipKey
=
class
VipKey
{
toJSON
()
{
toJSON
()
{
return
{
key
:
this
.
key
,
type
:
this
.
type
};
return
{
key
:
this
.
key
,
type
:
this
.
type
};
}
}
};
};
__decorate
([
__decorate
([
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
typeorm_1
.
PrimaryGeneratedColumn
({
unsigned
:
true
,
type
:
"
bigint
"
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
VipKey
.
prototype
,
"
id
"
,
void
0
);
],
VipKey
.
prototype
,
"
id
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Index
({
unique
:
true
}),
typeorm_1
.
Index
({
unique
:
true
}),
typeorm_1
.
Column
(
"
varchar
"
,
{
length
:
30
}),
typeorm_1
.
Column
(
"
varchar
"
,
{
length
:
30
}),
__metadata
(
"
design:type
"
,
String
)
__metadata
(
"
design:type
"
,
String
)
],
VipKey
.
prototype
,
"
key
"
,
void
0
);
],
VipKey
.
prototype
,
"
key
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
int
"
,
{
unsigned
:
true
}),
typeorm_1
.
Column
(
"
int
"
,
{
unsigned
:
true
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
VipKey
.
prototype
,
"
type
"
,
void
0
);
],
VipKey
.
prototype
,
"
type
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
,
default
:
0
}),
typeorm_1
.
Column
(
"
tinyint
"
,
{
unsigned
:
true
,
default
:
0
}),
__metadata
(
"
design:type
"
,
Number
)
__metadata
(
"
design:type
"
,
Number
)
],
VipKey
.
prototype
,
"
isUsed
"
,
void
0
);
],
VipKey
.
prototype
,
"
isUsed
"
,
void
0
);
__decorate
([
__decorate
([
typeorm_1
.
ManyToOne
(()
=>
User_1
.
User
,
user
=>
user
.
usedKeys
),
typeorm_1
.
ManyToOne
(()
=>
User_1
.
User
,
user
=>
user
.
usedKeys
),
__metadata
(
"
design:type
"
,
User_1
.
User
)
__metadata
(
"
design:type
"
,
User_1
.
User
)
],
VipKey
.
prototype
,
"
usedBy
"
,
void
0
);
],
VipKey
.
prototype
,
"
usedBy
"
,
void
0
);
VipKey
=
__decorate
([
VipKey
=
__decorate
([
typeorm_1
.
Entity
()
typeorm_1
.
Entity
()
],
VipKey
);
],
VipKey
);
return
VipKey
;
})();
exports
.
VipKey
=
VipKey
;
exports
.
VipKey
=
VipKey
;
//# sourceMappingURL=VipKey.js.map
//# sourceMappingURL=VipKey.js.map
\ No newline at end of file
data/i18n.json
View file @
6bf0003b
...
@@ -193,6 +193,7 @@
...
@@ -193,6 +193,7 @@
"vip_set_victory"
:
"Your victory word have been set."
,
"vip_set_victory"
:
"Your victory word have been set."
,
"vip_password_changed"
:
"Password changed."
,
"vip_password_changed"
:
"Password changed."
,
"vip_player_name_too_long"
:
"Your username or password is too long to log in. Please change your username and try again."
,
"vip_player_name_too_long"
:
"Your username or password is too long to log in. Please change your username and try again."
,
"vip_no_pass"
:
"You must use the name format of Name$Password to support."
,
"replay_hint_part1"
:
"Sending the replay of the duel number "
,
"replay_hint_part1"
:
"Sending the replay of the duel number "
,
"replay_hint_part2"
:
"."
,
"replay_hint_part2"
:
"."
,
"arena_wait_hint"
:
"If you opponent does not appear within 25 seconds, you may quit without any penalty."
,
"arena_wait_hint"
:
"If you opponent does not appear within 25 seconds, you may quit without any penalty."
,
...
@@ -543,6 +544,7 @@
...
@@ -543,6 +544,7 @@
"vip_set_victory"
:
"已设置胜利台词。"
,
"vip_set_victory"
:
"已设置胜利台词。"
,
"vip_password_changed"
:
"密码修改成功。"
,
"vip_password_changed"
:
"密码修改成功。"
,
"vip_player_name_too_long"
:
"你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。"
,
"vip_player_name_too_long"
:
"你的用户名或设置的密码太长,使用此用户名可能会无法登陆。请更换用户名重试。"
,
"vip_no_pass"
:
"为了保证未来可以识别您的身份,请使用 用户名$密码 的格式重试。"
,
"replay_hint_part1"
:
"正在发送第"
,
"replay_hint_part1"
:
"正在发送第"
,
"replay_hint_part2"
:
"局决斗的录像。"
,
"replay_hint_part2"
:
"局决斗的录像。"
,
"arena_wait_hint"
:
"若对手在25秒内不进入游戏,您退房时不会进行扣分。"
,
"arena_wait_hint"
:
"若对手在25秒内不进入游戏,您退房时不会进行扣分。"
,
...
...
ygopro-server.coffee
View file @
6bf0003b
...
@@ -128,69 +128,33 @@ setting_change = global.setting_change = (settings, path, val) ->
...
@@ -128,69 +128,33 @@ setting_change = global.setting_change = (settings, path, val) ->
return
return
VIP_generate_cdkeys
=
global
.
VIP_generate_cdkeys
=
(
key_type
,
count
)
->
VIP_generate_cdkeys
=
global
.
VIP_generate_cdkeys
=
(
key_type
,
count
)
->
return
false
unless
settings
.
modules
.
vip
.
enabled
and
vip_info
.
cdkeys
[
key_type
]
return
false
unless
settings
.
modules
.
vip
.
enabled
for
i
in
[
0
...
count
]
return
await
dataManager
.
generateVipKeys
(
key_type
,
count
)
key
=
Math
.
floor
(
Math
.
random
()
*
10000000000000000
).
toString
()
vip_info
.
cdkeys
[
key_type
].
push
(
key
)
setting_save
(
vip_info
)
log
.
info
(
"keys generated"
,
key_type
,
count
,
vip_info
.
cdkeys
[
key_type
].
length
)
return
true
CLIENT_use_cdkey
=
global
.
CLIENT_use_cdkey
=
(
client
,
pkey
)
->
CLIENT_use_cdkey
=
global
.
CLIENT_use_cdkey
=
(
client
,
pkey
)
->
return
0
unless
settings
.
modules
.
vip
.
enabled
and
pkey
key
=
CLIENT_get_authorize_key
(
client
)
found_type
=
null
return
await
dataManager
.
useVipKey
(
key
,
pkey
)
for
type
,
keys
of
vip_info
.
cdkeys
for
key
in
keys
when
pkey
==
key
or
pkey
==
(
type
+
"D"
+
settings
.
port
+
":"
+
key
)
# support web given format
CLIENT_get_save_data
=
global
.
CLIENT_get_save_data
=
(
client
)
->
found_type
=
parseInt
(
type
)
return
await
dataManager
.
getUser
(
CLIENT_get_authorize_key
(
client
))
index
=
_
.
indexOf
(
keys
,
key
)
keys
.
splice
(
index
,
1
)
unless
index
==
-
1
break
if
found_type
break
if
!
found_type
return
0
if
!
vip_info
.
cdkeys
[
found_type
].
length
VIP_generate_cdkeys
(
found_type
,
settings
.
modules
.
vip
.
generate_count
)
client
.
vip
=
true
new_vip
=
false
if
vip_info
.
players
[
client
.
name
]
current_date
=
moment
()
if
current_date
.
isSameOrBefore
(
vip_info
.
players
[
client
.
name
].
expire_date
)
current_date
=
moment
(
vip_info
.
players
[
client
.
name
].
expire_date
,
'YYYY-MM-DD HH:mm:ss'
)
vip_info
.
players
[
client
.
name
].
expire_date
=
current_date
.
add
(
found_type
,
'd'
).
format
(
'YYYY-MM-DD HH:mm:ss'
)
else
if
!
client
.
vpass
client
.
vpass
=
Math
.
floor
(
Math
.
random
()
*
100000
).
toString
()
vip_info
.
players
[
client
.
name
]
=
{
password
:
client
.
vpass
,
expire_date
:
moment
().
add
(
found_type
,
'd'
).
format
(
'YYYY-MM-DD HH:mm:ss'
),
dialogues
:
{}
}
new_vip
=
true
setting_save
(
vip_info
)
return
(
if
new_vip
then
1
else
2
)
CLIENT_check_vip
=
global
.
CLIENT_check_vip
=
(
client
)
->
CLIENT_check_vip
=
global
.
CLIENT_check_vip
=
(
client
)
->
if
!
settings
.
modules
.
vip
.
enabled
key
=
CLIENT_get_authorize_key
(
client
)
return
false
return
await
dataManager
.
isUserVip
(
key
)
if
!
vip_info
.
players
[
client
.
name
]
return
false
if
vip_info
.
players
[
client
.
name
].
password
!=
client
.
vpass
return
false
return
moment
().
isSameOrBefore
(
vip_info
.
players
[
client
.
name
].
expire_date
)
CLIENT_send_vip_status
=
global
.
CLIENT_send_vip_status
=
(
client
,
display
)
->
CLIENT_send_vip_status
=
global
.
CLIENT_send_vip_status
=
(
client
,
display
)
->
if
!
settings
.
modules
.
vip
.
enabled
if
!
settings
.
modules
.
vip
.
enabled
return
false
return
false
if
client
.
vip
userData
=
await
CLIENT_get_save_data
(
client
)
if
userData
.
isVip
()
if
display
if
display
ygopro
.
stoc_send_chat
(
client
,
"${vip_remain_part1}"
+
vip_info
.
players
[
client
.
name
].
expire_date
+
"${vip_remain_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_remain_part1}"
+
moment
(
userData
.
vipExpireDate
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
+
"${vip_remain_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
else
ygopro
.
stoc_send_chat
(
client
,
"${vip_remain}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_remain}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
if
!
vip_info
.
players
[
client
.
name
]
or
vip_info
.
players
[
client
.
name
].
password
!=
client
.
vpass
else
if
!
userData
.
vipExpireDate
ygopro
.
stoc_send_chat
(
client
,
"${vip_not_bought}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_not_bought}"
,
ygopro
.
constants
.
COLORS
.
RED
)
else
else
ygopro
.
stoc_send_chat
(
client
,
"${vip_expired_part1}"
+
vip_info
.
players
[
client
.
name
].
expire_date
+
"${vip_expired_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_expired_part1}"
+
moment
(
userData
.
vipExpireDate
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
+
"${vip_expired_part2}"
,
ygopro
.
constants
.
COLORS
.
RED
)
concat_name
=
global
.
concat_name
=
(
name
,
num
)
->
concat_name
=
global
.
concat_name
=
(
name
,
num
)
->
if
!
name
[
num
]
if
!
name
[
num
]
...
@@ -253,7 +217,6 @@ roomlist = null
...
@@ -253,7 +217,6 @@ roomlist = null
settings
=
{}
settings
=
{}
tips
=
null
tips
=
null
words
=
null
words
=
null
vip_info
=
null
dialogues
=
null
dialogues
=
null
badwords
=
null
badwords
=
null
lflists
=
global
.
lflists
=
[]
lflists
=
global
.
lflists
=
[]
...
@@ -402,6 +365,10 @@ init = () ->
...
@@ -402,6 +365,10 @@ init = () ->
settings
.
modules
.
chat_color
.
enabled
=
false
settings
.
modules
.
chat_color
.
enabled
=
false
await
setting_save
(
settings
)
await
setting_save
(
settings
)
log
.
warn
(
"Chat color cannot be enabled because no MySQL."
)
log
.
warn
(
"Chat color cannot be enabled because no MySQL."
)
if
settings
.
modules
.
vip
.
enabled
settings
.
modules
.
vip
.
enabled
=
false
await
setting_save
(
settings
)
log
.
warn
(
"VIP mode cannot be enabled because no MySQL."
)
# 读取数据
# 读取数据
default_data
=
await
loadJSONAsync
(
'./data/default_data.json'
)
default_data
=
await
loadJSONAsync
(
'./data/default_data.json'
)
try
try
...
@@ -419,11 +386,14 @@ init = () ->
...
@@ -419,11 +386,14 @@ init = () ->
catch
catch
words
=
global
.
words
=
default_data
.
words
words
=
global
.
words
=
default_data
.
words
await
setting_save
(
words
)
await
setting_save
(
words
)
if
settings
.
modules
.
vip
.
enabled
and
await
checkFileExists
(
'./config/vip_info.json'
)
try
try
vip_info
=
global
.
vip_info
=
await
loadJSONAsync
(
'./config/vip_info.json'
)
vip_info
=
await
loadJSONAsync
(
'./config/vip_info.json'
)
if
vip_info
await
dataManager
.
migrateFromOldVipInfo
(
vip_info
);
await
fs
.
promises
.
rename
(
'./config/vip_info.json'
,
'./config/vip_info.json.bak'
)
log
.
info
(
"VIP info migrated."
)
catch
catch
vip_info
=
global
.
vip_info
=
default_data
.
vip_info
await
setting_save
(
vip_info
)
try
try
badwords
=
global
.
badwords
=
await
loadJSONAsync
(
'./config/badwords.json'
)
badwords
=
global
.
badwords
=
await
loadJSONAsync
(
'./config/badwords.json'
)
catch
catch
...
@@ -669,10 +639,6 @@ init = () ->
...
@@ -669,10 +639,6 @@ init = () ->
,
1000
,
1000
if
settings
.
modules
.
vip
.
enabled
for
k
,
v
of
vip_info
.
cdkeys
when
v
.
length
==
0
VIP_generate_cdkeys
(
k
,
settings
.
modules
.
vip
.
generate_count
)
net
.
createServer
(
netRequestHandler
).
listen
settings
.
port
,
->
net
.
createServer
(
netRequestHandler
).
listen
settings
.
port
,
->
log
.
info
"server started"
,
settings
.
port
log
.
info
"server started"
,
settings
.
port
return
return
...
@@ -972,8 +938,6 @@ CLIENT_get_authorize_key = global.CLIENT_get_authorize_key = (client) ->
...
@@ -972,8 +938,6 @@ CLIENT_get_authorize_key = global.CLIENT_get_authorize_key = (client) ->
return
client
.
name_vpass
return
client
.
name_vpass
else
if
settings
.
modules
.
mycard
.
enabled
or
settings
.
modules
.
tournament_mode
.
enabled
or
settings
.
modules
.
challonge
.
enabled
or
client
.
is_local
else
if
settings
.
modules
.
mycard
.
enabled
or
settings
.
modules
.
tournament_mode
.
enabled
or
settings
.
modules
.
challonge
.
enabled
or
client
.
is_local
return
client
.
name
return
client
.
name
else
if
client
.
vip
return
client
.
name
+
"$"
+
client
.
vpass
else
else
return
client
.
ip
+
":"
+
client
.
name
return
client
.
ip
+
":"
+
client
.
name
...
@@ -1847,6 +1811,10 @@ class Room
...
@@ -1847,6 +1811,10 @@ class Room
))
))
await
return
await
return
playLines
:
(
lines
)
->
for
line
in
_
.
lines
lines
ygopro
.
stoc_send_chat_to_room
(
this
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
# 网络连接
# 网络连接
netRequestHandler
=
(
client
)
->
netRequestHandler
=
(
client
)
->
client
.
ip
=
client
.
remoteAddress
client
.
ip
=
client
.
remoteAddress
...
@@ -2075,7 +2043,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
...
@@ -2075,7 +2043,7 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
client
.
vpass
=
vpass
client
.
vpass
=
vpass
client
.
name_vpass
=
if
vpass
then
name
+
"$"
+
vpass
else
name
client
.
name_vpass
=
if
vpass
then
name
+
"$"
+
vpass
else
name
#console.log client.name, client.vpass
#console.log client.name, client.vpass
if
settings
.
modules
.
vip
.
enabled
and
CLIENT_check_vip
(
client
)
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
client
)
client
.
vip
=
true
client
.
vip
=
true
if
not
settings
.
modules
.
i18n
.
auto_pick
or
client
.
is_local
if
not
settings
.
modules
.
i18n
.
auto_pick
or
client
.
is_local
...
@@ -2275,12 +2243,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2275,12 +2243,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
is_post_watcher
=
true
client
.
is_post_watcher
=
true
if
settings
.
modules
.
vip
.
enabled
and
client
.
vip
and
vip_info
.
players
[
client
.
name
].
words
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
client
)
for
line
in
_
.
lines
vip_info
.
players
[
client
.
name
].
words
words
=
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
))
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
words
room
.
playLines
(
words
)
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
for
line
in
_
.
lines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
room
.
playLines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
room
.
watchers
.
push
client
room
.
watchers
.
push
client
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
...
@@ -2466,12 +2434,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2466,12 +2434,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
#client.setTimeout(300000) #连接后超时5分钟
#client.setTimeout(300000) #连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
is_post_watcher
=
true
client
.
is_post_watcher
=
true
if
settings
.
modules
.
vip
.
enabled
and
client
.
vip
and
vip_info
.
players
[
client
.
name
].
words
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
client
)
for
line
in
_
.
lines
vip_info
.
players
[
client
.
name
].
words
words
=
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
))
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
words
room
.
playLines
(
words
)
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
for
line
in
_
.
lines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
room
.
playLines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
room
.
watchers
.
push
client
room
.
watchers
.
push
client
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
...
@@ -2554,12 +2522,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
...
@@ -2554,12 +2522,12 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
setTimeout
(
300000
)
#连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
)
client
.
is_post_watcher
=
true
client
.
is_post_watcher
=
true
if
settings
.
modules
.
vip
.
enabled
and
client
.
vip
and
vip_info
.
players
[
client
.
name
].
words
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
client
)
for
line
in
_
.
lines
vip_info
.
players
[
client
.
name
].
words
words
=
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
))
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
words
room
.
playLines
(
words
)
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
for
line
in
_
.
lines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
room
.
playLines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
${watch_join}"
)
room
.
watchers
.
push
client
room
.
watchers
.
push
client
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${watch_watching}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
...
@@ -2581,12 +2549,12 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
...
@@ -2581,12 +2549,12 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
return
unless
room
and
!
client
.
reconnecting
return
unless
room
and
!
client
.
reconnecting
if
!
room
.
join_game_buffer
if
!
room
.
join_game_buffer
room
.
join_game_buffer
=
buffer
room
.
join_game_buffer
=
buffer
if
settings
.
modules
.
vip
.
enabled
and
client
.
vip
and
vip_info
.
players
[
client
.
name
].
words
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
client
)
for
line
in
_
.
lines
vip_info
.
players
[
client
.
name
].
words
words
=
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
))
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
words
room
.
playLines
(
words
)
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
else
if
settings
.
modules
.
words
.
enabled
and
words
.
words
[
client
.
name
]
for
line
in
_
.
lines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
room
.
playLines
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
settings
.
modules
.
welcome
if
settings
.
modules
.
welcome
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
welcome
,
ygopro
.
constants
.
COLORS
.
GREEN
)
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
welcome
,
ygopro
.
constants
.
COLORS
.
GREEN
)
if
room
.
welcome
if
room
.
welcome
...
@@ -2804,12 +2772,14 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
...
@@ -2804,12 +2772,14 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
if
room
.
match_kill
if
room
.
match_kill
room
.
match_kill
=
false
room
.
match_kill
=
false
room
.
scores
[
room
.
winner_name
]
=
99
room
.
scores
[
room
.
winner_name
]
=
99
if
settings
.
modules
.
vip
.
enabled
and
room
.
dueling_players
[
pos
].
vip
and
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
if
settings
.
modules
.
vip
.
enabled
for
line
in
_
.
lines
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
victoryWordPlayerList
=
[
room
.
dueling_players
[
pos
]]
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
room
.
hostinfo
.
mode
==
2
else
if
room
.
hostinfo
.
mode
==
2
and
settings
.
modules
.
vip
.
enabled
and
room
.
dueling_players
[
pos
+
1
].
vip
and
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
victoryWordPlayerList
.
push
(
room
.
dueling_players
[
pos
+
1
])
for
line
in
_
.
lines
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
for
player
in
victoryWordPlayerList
when
await
CLIENT_check_vip
(
player
)
and
await
dataManager
.
getUserVictoryWords
(
CLIENT_get_authorize_key
(
player
))
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
words
=
await
dataManager
.
getUserVictoryWords
(
CLIENT_get_authorize_key
(
player
))
room
.
playLines
(
words
)
break
if
room
.
death
if
room
.
death
if
settings
.
modules
.
http
.
quick_death_rule
==
1
or
settings
.
modules
.
http
.
quick_death_rule
==
3
if
settings
.
modules
.
http
.
quick_death_rule
==
1
or
settings
.
modules
.
http
.
quick_death_rule
==
3
room
.
death
=
-
1
room
.
death
=
-
1
...
@@ -2939,18 +2909,14 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
...
@@ -2939,18 +2909,14 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
if
room
.
hostinfo
.
mode
==
2
if
room
.
hostinfo
.
mode
==
2
act_pos
=
act_pos
*
2
act_pos
=
act_pos
*
2
if
ygopro
.
constants
.
MSG
[
msg
]
!=
'CHAINING'
or
(
trigger_location
&
0x8
)
and
client
.
ready_trap
if
ygopro
.
constants
.
MSG
[
msg
]
!=
'CHAINING'
or
(
trigger_location
&
0x8
)
and
client
.
ready_trap
if
settings
.
modules
.
vip
.
enabled
and
room
.
dueling_players
[
act_pos
].
vip
and
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
]
if
settings
.
modules
.
vip
.
enabled
and
await
CLIENT_check_vip
(
room
.
dueling_players
[
act_pos
])
and
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
]),
card
)
for
line
in
_
.
lines
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
]
room
.
playLines
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
]),
card
)
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
else
if
settings
.
modules
.
vip
.
enabled
and
room
.
hostinfo
.
mode
==
2
and
await
CLIENT_check_vip
(
room
.
dueling_players
[
act_pos
+
1
])
and
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
+
1
]),
card
)
else
if
settings
.
modules
.
vip
.
enabled
and
room
.
hostinfo
.
mode
==
2
and
room
.
dueling_players
[
act_pos
+
1
].
vip
and
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
]
room
.
playLines
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
+
1
]),
card
)
for
line
in
_
.
lines
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
]
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
else
if
settings
.
modules
.
dialogues
.
enabled
and
dialogues
.
dialogues
[
card
]
else
if
settings
.
modules
.
dialogues
.
enabled
and
dialogues
.
dialogues
[
card
]
for
line
in
_
.
lines
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]
room
.
playLines
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
else
if
settings
.
modules
.
dialogues
.
enabled
and
dialogues
.
dialogues_custom
[
card
]
else
if
settings
.
modules
.
dialogues
.
enabled
and
dialogues
.
dialogues_custom
[
card
]
for
line
in
_
.
lines
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]
room
.
playLines
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
)
if
ygopro
.
constants
.
MSG
[
msg
]
==
'POS_CHANGE'
if
ygopro
.
constants
.
MSG
[
msg
]
==
'POS_CHANGE'
loc
=
buffer
.
readUInt8
(
6
)
loc
=
buffer
.
readUInt8
(
6
)
ppos
=
buffer
.
readUInt8
(
8
)
ppos
=
buffer
.
readUInt8
(
8
)
...
@@ -3382,22 +3348,20 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3382,22 +3348,20 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
when
'status'
when
'status'
CLIENT_send_vip_status
(
client
,
true
)
CLIENT_send_vip_status
(
client
,
true
)
when
'buy'
when
'buy'
if
vip_info
.
players
[
client
.
name
]
and
vip_info
.
players
[
client
.
name
].
password
!=
client
.
vpass
if
!
client
.
vpass
ygopro
.
stoc_send_chat
(
client
,
"${vip_account_existed}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_no_pass}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
if
(
!
client
.
vpass
and
client
.
name
.
length
>
13
)
or
(
client
.
vpass
and
(
client
.
name
.
length
+
client
.
vpass
.
length
)
>
18
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_player_name_too_long}"
,
ygopro
.
constants
.
COLORS
.
RED
)
else
else
key
=
cmd
[
2
]
key
=
cmd
[
2
]
buy_result
=
CLIENT_use_cdkey
(
client
,
key
)
buy_result
=
await
CLIENT_use_cdkey
(
client
,
key
)
switch
buy_result
switch
buy_result
when
0
when
0
ygopro
.
stoc_send_chat
(
client
,
"${vip_key_not_found}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_key_not_found}"
,
ygopro
.
constants
.
COLORS
.
RED
)
when
1
when
1
ygopro
.
stoc_send_chat
(
client
,
"${vip_success_new_part1}"
+
client
.
name
+
"$"
+
client
.
vpass
+
"${vip_success_new_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_success_new_part1}"
+
client
.
name
_
vpass
+
"${vip_success_new_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
when
2
when
2
ygopro
.
stoc_send_chat
(
client
,
"${vip_success_renew}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_success_renew}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
when
'dialogues'
when
'dialogues'
if
!
client
.
vip
if
!
await
CLIENT_check_vip
(
client
)
CLIENT_send_vip_status
(
client
)
CLIENT_send_vip_status
(
client
)
else
else
code
=
cmd
[
2
]
code
=
cmd
[
2
]
...
@@ -3405,12 +3369,10 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3405,12 +3369,10 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
if
!
code
or
!
parseInt
(
code
)
if
!
code
or
!
parseInt
(
code
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_invalid_card_code}"
,
ygopro
.
constants
.
COLORS
.
RED
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_invalid_card_code}"
,
ygopro
.
constants
.
COLORS
.
RED
)
else
if
!
word
else
if
!
word
delete
vip_info
.
players
[
client
.
name
].
dialogues
[
parseInt
(
code
)]
await
dataManager
.
removeUserDialogues
(
CLIENT_get_authorize_key
(
client
),
parseInt
(
code
))
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_dialogues_part1}"
+
code
+
"${vip_cleared_dialogues_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_dialogues_part1}"
+
code
+
"${vip_cleared_dialogues_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
else
vip_info
.
players
[
client
.
name
].
dialogues
[
parseInt
(
code
)]
=
word
await
dataManager
.
setUserDialogues
(
CLIENT_get_authorize_key
(
client
),
parseInt
(
code
),
word
)
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_dialogues_part1}"
+
code
+
"${vip_set_dialogues_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_dialogues_part1}"
+
code
+
"${vip_set_dialogues_part2}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
when
'words'
when
'words'
if
!
client
.
vip
if
!
client
.
vip
...
@@ -3418,12 +3380,10 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3418,12 +3380,10 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
else
else
word
=
concat_name
(
cmd
,
2
)
word
=
concat_name
(
cmd
,
2
)
if
!
word
if
!
word
delete
vip_info
.
players
[
client
.
name
].
words
await
dataManager
.
setUserWords
(
CLIENT_get_authorize_key
(
client
),
null
)
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_words}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_words}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
else
vip_info
.
players
[
client
.
name
].
words
=
word
await
dataManager
.
setUserWords
(
CLIENT_get_authorize_key
(
client
),
word
)
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_words}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_words}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
when
'victory'
when
'victory'
if
!
client
.
vip
if
!
client
.
vip
...
@@ -3431,23 +3391,21 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
...
@@ -3431,23 +3391,21 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
else
else
word
=
concat_name
(
cmd
,
2
)
word
=
concat_name
(
cmd
,
2
)
if
!
word
if
!
word
delete
vip_info
.
players
[
client
.
name
].
victory
await
dataManager
.
setUserVictoryWords
(
CLIENT_get_authorize_key
(
client
),
null
)
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_victory}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_cleared_victory}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
else
else
vip_info
.
players
[
client
.
name
].
victory
=
word
await
dataManager
.
setUserVictoryWords
(
CLIENT_get_authorize_key
(
client
),
word
)
setting_save
(
vip_info
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_victory}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
ygopro
.
stoc_send_chat
(
client
,
"${vip_set_victory}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
when
'password'
#
when 'password'
if
!
client
.
vip
#
if !client.vip
CLIENT_send_vip_status
(
client
)
#
CLIENT_send_vip_status(client)
else
#
else
word
=
cmd
[
2
]
#
word = cmd[2]
if
word
and
(
client
.
name
.
length
+
word
.
length
)
<=
18
#
if word and (client.name.length + word.length) <= 18
vip_info
.
players
[
client
.
name
].
password
=
word
#
vip_info.players[client.name].password = word
client
.
vpass
=
word
#
client.vpass = word
setting_save
(
vip_info
)
#
setting_save(vip_info)
ygopro
.
stoc_send_chat
(
client
,
"${vip_password_changed}"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
# ygopro.stoc_send_chat(client, "${vip_password_changed}", ygopro.constants.#
COLORS.BABYBLUE)
else
else
CLIENT_send_vip_status
(
client
)
CLIENT_send_vip_status
(
client
)
...
@@ -3985,15 +3943,9 @@ if true
...
@@ -3985,15 +3943,9 @@ if true
response
.
writeHead
(
200
)
response
.
writeHead
(
200
)
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"Unauthorized."
))
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"Unauthorized."
))
return
return
else
if
!
u
.
query
.
keytype
or
!
vip_info
.
cdkeys
[
u
.
query
.
keytype
]
response
.
writeHead
(
200
)
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"Key type not found."
))
return
else
else
ret_keys
=
JSON
.
stringify
(
await
dataMager
.
getVipKeys
(
parseInt
(
u
.
query
.
keytype
)),
null
,
2
)
response
.
writeHead
(
200
)
response
.
writeHead
(
200
)
ret_keys
=
""
for
key
in
vip_info
.
cdkeys
[
u
.
query
.
keytype
]
ret_keys
=
ret_keys
+
u
.
query
.
keytype
+
"D"
+
settings
.
port
+
":"
+
key
+
"
\n
"
response
.
end
(
addCallback
(
u
.
query
.
callback
,
ret_keys
))
response
.
end
(
addCallback
(
u
.
query
.
callback
,
ret_keys
))
else
if
u
.
pathname
==
'/api/archive.zip'
and
settings
.
modules
.
mysql
.
enabled
else
if
u
.
pathname
==
'/api/archive.zip'
and
settings
.
modules
.
mysql
.
enabled
...
...
ygopro-server.js
View file @
6bf0003b
// Generated by CoffeeScript 2.5.1
// Generated by CoffeeScript 2.5.1
(
function
()
{
(
function
()
{
// 标准库
// 标准库
var
CLIENT_check_vip
,
CLIENT_get_absolute_pos
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
CLIENT_get_partner
,
CLIENT_
heartbeat_register
,
CLIENT_heartbeat_unregister
,
CLIENT_import_data
,
CLIENT_is_able_to_kick_reconnect
,
CLIENT_is_able_to_reconnect
,
CLIENT_is_banned_by_mc
,
CLIENT_is_player
,
CLIENT_kick
,
CLIENT_kick_reconnect
,
CLIENT_pre_reconnect
,
CLIENT_reconnect
,
CLIENT_reconnect_register
,
CLIENT_reconnect_unregister
,
CLIENT_send_pre_reconnect_info
,
CLIENT_send_reconnect_info
,
CLIENT_send_replays
,
CLIENT_send_vip_status
,
CLIENT_use_cdkey
,
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
,
VIP_generate_cdkeys
,
_
,
_async
,
addCallback
,
athleticChecker
,
auth
,
axios
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_queue_callbacks
,
checkFileExists
,
concat_name
,
createDirectoryIfNotExists
,
crypto
,
dataManager
,
deck_name_match
,
dialogues
,
disconnect_list
,
exec
,
execFile
,
fs
,
geoip
,
getSeedTimet
,
get_callback
,
get_memory_usage
,
http
,
httpRequestListener
,
importOldConfig
,
import_datas
,
init
,
is_challonge_requesting
,
lflists
,
loadJSON
,
loadJSONAsync
,
loadLFList
,
loadRemoteData
,
load_dialogues
,
load_dialogues_custom
,
load_tips
,
load_tips_zh
,
load_words
,
log
,
long_resolve_cards
,
memory_usage
,
merge
,
moment
,
net
,
netRequestHandler
,
os
,
path
,
qs
,
real_windbot_server_ip
,
refresh_challonge_cache
,
release_disconnect
,
replaced_index
,
report_to_big_brother
,
request
,
roomlist
,
setting_change
,
setting_save
,
settings
,
spawn
,
spawnSync
,
spawn_windbot
,
tips
,
url
,
users_cache
,
util
,
vip_info
,
wait_room_start
,
wait_room_start_arena
,
windbot_looplimit
,
windbot_process
,
windbots
,
words
,
ygopro
,
zlib
;
var
CLIENT_check_vip
,
CLIENT_get_absolute_pos
,
CLIENT_get_authorize_key
,
CLIENT_get_kick_reconnect_target
,
CLIENT_get_partner
,
CLIENT_
get_save_data
,
CLIENT_heartbeat_register
,
CLIENT_heartbeat_unregister
,
CLIENT_import_data
,
CLIENT_is_able_to_kick_reconnect
,
CLIENT_is_able_to_reconnect
,
CLIENT_is_banned_by_mc
,
CLIENT_is_player
,
CLIENT_kick
,
CLIENT_kick_reconnect
,
CLIENT_pre_reconnect
,
CLIENT_reconnect
,
CLIENT_reconnect_register
,
CLIENT_reconnect_unregister
,
CLIENT_send_pre_reconnect_info
,
CLIENT_send_reconnect_info
,
CLIENT_send_replays
,
CLIENT_send_vip_status
,
CLIENT_use_cdkey
,
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
,
VIP_generate_cdkeys
,
_
,
_async
,
addCallback
,
athleticChecker
,
auth
,
axios
,
badwords
,
ban_user
,
bunyan
,
challonge
,
challonge_cache
,
challonge_queue_callbacks
,
checkFileExists
,
concat_name
,
createDirectoryIfNotExists
,
crypto
,
dataManager
,
deck_name_match
,
dialogues
,
disconnect_list
,
exec
,
execFile
,
fs
,
geoip
,
getSeedTimet
,
get_callback
,
get_memory_usage
,
http
,
httpRequestListener
,
importOldConfig
,
import_datas
,
init
,
is_challonge_requesting
,
lflists
,
loadJSON
,
loadJSONAsync
,
loadLFList
,
loadRemoteData
,
load_dialogues
,
load_dialogues_custom
,
load_tips
,
load_tips_zh
,
load_words
,
log
,
long_resolve_cards
,
memory_usage
,
merge
,
moment
,
net
,
netRequestHandler
,
os
,
path
,
qs
,
real_windbot_server_ip
,
refresh_challonge_cache
,
release_disconnect
,
replaced_index
,
report_to_big_brother
,
request
,
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
,
words
,
ygopro
,
zlib
;
net
=
require
(
'
net
'
);
net
=
require
(
'
net
'
);
...
@@ -133,102 +133,45 @@
...
@@ -133,102 +133,45 @@
await
setting_save
(
settings
);
await
setting_save
(
settings
);
};
};
VIP_generate_cdkeys
=
global
.
VIP_generate_cdkeys
=
function
(
key_type
,
count
)
{
VIP_generate_cdkeys
=
global
.
VIP_generate_cdkeys
=
async
function
(
key_type
,
count
)
{
var
i
,
j
,
key
,
ref
;
if
(
!
settings
.
modules
.
vip
.
enabled
)
{
if
(
!
(
settings
.
modules
.
vip
.
enabled
&&
vip_info
.
cdkeys
[
key_type
]))
{
return
false
;
return
false
;
}
}
for
(
i
=
j
=
0
,
ref
=
count
;
(
0
<=
ref
?
j
<
ref
:
j
>
ref
);
i
=
0
<=
ref
?
++
j
:
--
j
)
{
return
(
await
dataManager
.
generateVipKeys
(
key_type
,
count
));
key
=
Math
.
floor
(
Math
.
random
()
*
10000000000000000
).
toString
();
vip_info
.
cdkeys
[
key_type
].
push
(
key
);
}
setting_save
(
vip_info
);
log
.
info
(
"
keys generated
"
,
key_type
,
count
,
vip_info
.
cdkeys
[
key_type
].
length
);
return
true
;
};
};
CLIENT_use_cdkey
=
global
.
CLIENT_use_cdkey
=
function
(
client
,
pkey
)
{
CLIENT_use_cdkey
=
global
.
CLIENT_use_cdkey
=
async
function
(
client
,
pkey
)
{
var
current_date
,
found_type
,
index
,
j
,
key
,
keys
,
len
,
new_vip
,
ref
,
type
;
var
key
;
if
(
!
(
settings
.
modules
.
vip
.
enabled
&&
pkey
))
{
key
=
CLIENT_get_authorize_key
(
client
);
return
0
;
return
(
await
dataManager
.
useVipKey
(
key
,
pkey
));
}
found_type
=
null
;
ref
=
vip_info
.
cdkeys
;
for
(
type
in
ref
)
{
keys
=
ref
[
type
];
// support web given format
for
(
j
=
0
,
len
=
keys
.
length
;
j
<
len
;
j
++
)
{
key
=
keys
[
j
];
if
(
!
(
pkey
===
key
||
pkey
===
(
type
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
)))
{
continue
;
}
found_type
=
parseInt
(
type
);
index
=
_
.
indexOf
(
keys
,
key
);
if
(
index
!==
-
1
)
{
keys
.
splice
(
index
,
1
);
}
break
;
}
if
(
found_type
)
{
break
;
}
}
if
(
!
found_type
)
{
return
0
;
}
if
(
!
vip_info
.
cdkeys
[
found_type
].
length
)
{
VIP_generate_cdkeys
(
found_type
,
settings
.
modules
.
vip
.
generate_count
);
}
client
.
vip
=
true
;
new_vip
=
false
;
if
(
vip_info
.
players
[
client
.
name
])
{
current_date
=
moment
();
if
(
current_date
.
isSameOrBefore
(
vip_info
.
players
[
client
.
name
].
expire_date
))
{
current_date
=
moment
(
vip_info
.
players
[
client
.
name
].
expire_date
,
'
YYYY-MM-DD HH:mm:ss
'
);
}
vip_info
.
players
[
client
.
name
].
expire_date
=
current_date
.
add
(
found_type
,
'
d
'
).
format
(
'
YYYY-MM-DD HH:mm:ss
'
);
}
else
{
if
(
!
client
.
vpass
)
{
client
.
vpass
=
Math
.
floor
(
Math
.
random
()
*
100000
).
toString
();
}
vip_info
.
players
[
client
.
name
]
=
{
password
:
client
.
vpass
,
expire_date
:
moment
().
add
(
found_type
,
'
d
'
).
format
(
'
YYYY-MM-DD HH:mm:ss
'
),
dialogues
:
{}
};
};
new_vip
=
true
;
}
CLIENT_get_save_data
=
global
.
CLIENT_get_save_data
=
async
function
(
client
)
{
setting_save
(
vip_info
);
return
(
await
dataManager
.
getUser
(
CLIENT_get_authorize_key
(
client
)));
return
(
new_vip
?
1
:
2
);
};
};
CLIENT_check_vip
=
global
.
CLIENT_check_vip
=
function
(
client
)
{
CLIENT_check_vip
=
global
.
CLIENT_check_vip
=
async
function
(
client
)
{
if
(
!
settings
.
modules
.
vip
.
enabled
)
{
var
key
;
return
false
;
key
=
CLIENT_get_authorize_key
(
client
);
}
return
(
await
dataManager
.
isUserVip
(
key
));
if
(
!
vip_info
.
players
[
client
.
name
])
{
return
false
;
}
if
(
vip_info
.
players
[
client
.
name
].
password
!==
client
.
vpass
)
{
return
false
;
}
return
moment
().
isSameOrBefore
(
vip_info
.
players
[
client
.
name
].
expire_date
);
};
};
CLIENT_send_vip_status
=
global
.
CLIENT_send_vip_status
=
function
(
client
,
display
)
{
CLIENT_send_vip_status
=
global
.
CLIENT_send_vip_status
=
async
function
(
client
,
display
)
{
var
userData
;
if
(
!
settings
.
modules
.
vip
.
enabled
)
{
if
(
!
settings
.
modules
.
vip
.
enabled
)
{
return
false
;
return
false
;
}
}
if
(
client
.
vip
)
{
userData
=
(
await
CLIENT_get_save_data
(
client
));
if
(
userData
.
isVip
())
{
if
(
display
)
{
if
(
display
)
{
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_remain_part1}
"
+
vip_info
.
players
[
client
.
name
].
expire_date
+
"
${vip_remain_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_remain_part1}
"
+
moment
(
userData
.
vipExpireDate
).
format
(
"
YYYY-MM-DD HH:mm:ss
"
)
+
"
${vip_remain_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
{
}
else
{
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_remain}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_remain}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
else
if
(
!
vip_info
.
players
[
client
.
name
]
||
vip_info
.
players
[
client
.
name
].
password
!==
client
.
vpass
)
{
}
else
if
(
!
userData
.
vipExpireDate
)
{
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_not_bought}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_not_bought}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
else
{
}
else
{
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_expired_part1}
"
+
vip_info
.
players
[
client
.
name
].
expire_date
+
"
${vip_expired_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
return
ygopro
.
stoc_send_chat
(
client
,
"
${vip_expired_part1}
"
+
moment
(
userData
.
vipExpireDate
).
format
(
"
YYYY-MM-DD HH:mm:ss
"
)
+
"
${vip_expired_part2}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
}
};
};
...
@@ -318,8 +261,6 @@
...
@@ -318,8 +261,6 @@
words
=
null
;
words
=
null
;
vip_info
=
null
;
dialogues
=
null
;
dialogues
=
null
;
badwords
=
null
;
badwords
=
null
;
...
@@ -413,7 +354,7 @@
...
@@ -413,7 +354,7 @@
};
};
init
=
async
function
()
{
init
=
async
function
()
{
var
AthleticChecker
,
DataManager
,
challonge_module_name
,
challonge_type
,
chat_color
,
config
,
cppversion
,
defaultConfig
,
default_data
,
dns
,
e
,
http_server
,
https
,
https_server
,
imported
,
j
,
k
,
l
,
len
,
len1
,
len2
,
m
,
mkdirList
,
options
,
pgClient
,
pg_client
,
pg_query
,
plugin_filename
,
plugin_list
,
plugin_path
,
postData
,
ref
,
ref1
,
v
;
var
AthleticChecker
,
DataManager
,
challonge_module_name
,
challonge_type
,
chat_color
,
config
,
cppversion
,
defaultConfig
,
default_data
,
dns
,
e
,
http_server
,
https
,
https_server
,
imported
,
j
,
l
,
len
,
len1
,
len2
,
m
,
mkdirList
,
options
,
pgClient
,
pg_client
,
pg_query
,
plugin_filename
,
plugin_list
,
plugin_path
,
postData
,
ref
,
vip_info
;
await
createDirectoryIfNotExists
(
"
./config
"
);
await
createDirectoryIfNotExists
(
"
./config
"
);
await
importOldConfig
();
await
importOldConfig
();
defaultConfig
=
(
await
loadJSONAsync
(
'
./data/default_config.json
'
));
defaultConfig
=
(
await
loadJSONAsync
(
'
./data/default_config.json
'
));
...
@@ -539,6 +480,11 @@
...
@@ -539,6 +480,11 @@
await
setting_save
(
settings
);
await
setting_save
(
settings
);
log
.
warn
(
"
Chat color cannot be enabled because no MySQL.
"
);
log
.
warn
(
"
Chat color cannot be enabled because no MySQL.
"
);
}
}
if
(
settings
.
modules
.
vip
.
enabled
)
{
settings
.
modules
.
vip
.
enabled
=
false
;
await
setting_save
(
settings
);
log
.
warn
(
"
VIP mode cannot be enabled because no MySQL.
"
);
}
}
}
// 读取数据
// 读取数据
default_data
=
(
await
loadJSONAsync
(
'
./data/default_data.json
'
));
default_data
=
(
await
loadJSONAsync
(
'
./data/default_data.json
'
));
...
@@ -560,11 +506,17 @@
...
@@ -560,11 +506,17 @@
words
=
global
.
words
=
default_data
.
words
;
words
=
global
.
words
=
default_data
.
words
;
await
setting_save
(
words
);
await
setting_save
(
words
);
}
}
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
checkFileExists
(
'
./config/vip_info.json
'
)))
{
try
{
try
{
vip_info
=
global
.
vip_info
=
(
await
loadJSONAsync
(
'
./config/vip_info.json
'
));
vip_info
=
(
await
loadJSONAsync
(
'
./config/vip_info.json
'
));
if
(
vip_info
)
{
await
dataManager
.
migrateFromOldVipInfo
(
vip_info
);
await
fs
.
promises
.
rename
(
'
./config/vip_info.json
'
,
'
./config/vip_info.json.bak
'
);
log
.
info
(
"
VIP info migrated.
"
);
}
}
catch
(
error1
)
{
}
catch
(
error1
)
{
vip_info
=
global
.
vip_info
=
default_data
.
vip_info
;
await
setting_save
(
vip_info
);
}
}
}
try
{
try
{
badwords
=
global
.
badwords
=
(
await
loadJSONAsync
(
'
./config/badwords.json
'
));
badwords
=
global
.
badwords
=
(
await
loadJSONAsync
(
'
./config/badwords.json
'
));
...
@@ -888,15 +840,6 @@
...
@@ -888,15 +840,6 @@
}
}
return
results
;
return
results
;
},
1000
);
},
1000
);
if
(
settings
.
modules
.
vip
.
enabled
)
{
ref1
=
vip_info
.
cdkeys
;
for
(
k
in
ref1
)
{
v
=
ref1
[
k
];
if
(
v
.
length
===
0
)
{
VIP_generate_cdkeys
(
k
,
settings
.
modules
.
vip
.
generate_count
);
}
}
}
net
.
createServer
(
netRequestHandler
).
listen
(
settings
.
port
,
function
()
{
net
.
createServer
(
netRequestHandler
).
listen
(
settings
.
port
,
function
()
{
log
.
info
(
"
server started
"
,
settings
.
port
);
log
.
info
(
"
server started
"
,
settings
.
port
);
});
});
...
@@ -1312,8 +1255,6 @@
...
@@ -1312,8 +1255,6 @@
return
client
.
name_vpass
;
return
client
.
name_vpass
;
}
else
if
(
settings
.
modules
.
mycard
.
enabled
||
settings
.
modules
.
tournament_mode
.
enabled
||
settings
.
modules
.
challonge
.
enabled
||
client
.
is_local
)
{
}
else
if
(
settings
.
modules
.
mycard
.
enabled
||
settings
.
modules
.
tournament_mode
.
enabled
||
settings
.
modules
.
challonge
.
enabled
||
client
.
is_local
)
{
return
client
.
name
;
return
client
.
name
;
}
else
if
(
client
.
vip
)
{
return
client
.
name
+
"
$
"
+
client
.
vpass
;
}
else
{
}
else
{
return
client
.
ip
+
"
:
"
+
client
.
name
;
return
client
.
ip
+
"
:
"
+
client
.
name
;
}
}
...
@@ -2524,6 +2465,17 @@
...
@@ -2524,6 +2465,17 @@
}));
}));
}
}
playLines
(
lines
)
{
var
j
,
len
,
line
,
ref
,
results
;
ref
=
_
.
lines
(
lines
);
results
=
[];
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
line
=
ref
[
j
];
results
.
push
(
ygopro
.
stoc_send_chat_to_room
(
this
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
));
}
return
results
;
}
};
};
// 网络连接
// 网络连接
...
@@ -2816,7 +2768,7 @@
...
@@ -2816,7 +2768,7 @@
client
.
vpass
=
vpass
;
client
.
vpass
=
vpass
;
client
.
name_vpass
=
vpass
?
name
+
"
$
"
+
vpass
:
name
;
client
.
name_vpass
=
vpass
?
name
+
"
$
"
+
vpass
:
name
;
//console.log client.name, client.vpass
//console.log client.name, client.vpass
if
(
settings
.
modules
.
vip
.
enabled
&&
CLIENT_check_vip
(
client
))
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
client
)
))
{
client
.
vip
=
true
;
client
.
vip
=
true
;
}
}
if
(
!
settings
.
modules
.
i18n
.
auto_pick
||
client
.
is_local
)
{
if
(
!
settings
.
modules
.
i18n
.
auto_pick
||
client
.
is_local
)
{
...
@@ -2839,7 +2791,7 @@
...
@@ -2839,7 +2791,7 @@
});
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
available_logs
,
check_buffer_indentity
,
create_room_with_action
,
duelLog
,
exactBan
,
index
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
len4
,
len5
,
line
,
m
,
n
,
name
,
o
,
p
,
pre_room
,
recover_match
,
ref
,
ref1
,
ref2
,
ref3
,
replay
,
replay_id
,
replays
,
room
,
struct
;
var
available_logs
,
check_buffer_indentity
,
create_room_with_action
,
duelLog
,
exactBan
,
index
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
m
,
n
,
name
,
pre_room
,
recover_match
,
ref
,
ref1
,
replay
,
replay_id
,
replays
,
room
,
struct
;
//log.info info
//log.info info
info
.
pass
=
info
.
pass
.
trim
();
info
.
pass
=
info
.
pass
.
trim
();
client
.
pass
=
info
.
pass
;
client
.
pass
=
info
.
pass
;
...
@@ -2917,7 +2869,7 @@
...
@@ -2917,7 +2869,7 @@
return
(
checksum
&
0xFF
)
===
0
;
return
(
checksum
&
0xFF
)
===
0
;
};
};
create_room_with_action
=
async
function
(
buffer
,
decrypted_buffer
,
match_permit
)
{
create_room_with_action
=
async
function
(
buffer
,
decrypted_buffer
,
match_permit
)
{
var
action
,
len2
,
len3
,
len4
,
len5
,
line
,
m
,
n
,
name
,
o
,
opt1
,
opt2
,
opt3
,
options
,
p
,
player
,
ref
,
ref1
,
ref2
,
ref3
,
room
,
room_title
,
title
;
var
action
,
len2
,
len3
,
m
,
n
,
name
,
opt1
,
opt2
,
opt3
,
options
,
player
,
ref
,
ref1
,
room
,
room_title
,
title
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
}
}
...
@@ -3044,25 +2996,20 @@
...
@@ -3044,25 +2996,20 @@
client
.
setTimeout
(
300000
);
//连接后超时5分钟
client
.
setTimeout
(
300000
);
//连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
client
)))
{
ref1
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
words
=
(
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
)));
for
(
n
=
0
,
len3
=
ref1
.
length
;
n
<
len3
;
n
++
)
{
if
(
words
)
{
line
=
ref1
[
n
];
room
.
playLines
(
words
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref2
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
room
.
playLines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
o
=
0
,
len4
=
ref2
.
length
;
o
<
len4
;
o
++
)
{
line
=
ref2
[
o
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
3
=
room
.
watcher_buffers
;
ref
1
=
room
.
watcher_buffers
;
for
(
p
=
0
,
len5
=
ref3
.
length
;
p
<
len5
;
p
++
)
{
for
(
n
=
0
,
len3
=
ref1
.
length
;
n
<
len3
;
n
++
)
{
buffer
=
ref
3
[
p
];
buffer
=
ref
1
[
n
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
}
else
{
}
else
{
...
@@ -3220,7 +3167,7 @@
...
@@ -3220,7 +3167,7 @@
});
});
}
}
},
async
function
(
err
,
datas
)
{
},
async
function
(
err
,
datas
)
{
var
create_room_name
,
found
,
k
,
len3
,
len4
,
len5
,
len6
,
line
,
match
,
n
,
o
,
p
,
player
,
q
,
ref1
,
ref2
,
ref3
,
ref4
,
ref5
,
ref6
,
user
;
var
create_room_name
,
found
,
k
,
len3
,
len4
,
match
,
n
,
o
,
player
,
ref1
,
ref2
,
ref3
,
ref4
,
user
;
if
(
client
.
closed
)
{
if
(
client
.
closed
)
{
return
;
return
;
}
}
...
@@ -3278,25 +3225,20 @@
...
@@ -3278,25 +3225,20 @@
//client.setTimeout(300000) #连接后超时5分钟
//client.setTimeout(300000) #连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
client
)))
{
ref3
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
words
=
(
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
)));
for
(
n
=
0
,
len3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
if
(
words
)
{
line
=
ref3
[
n
];
room
.
playLines
(
words
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref4
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
room
.
playLines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
o
=
0
,
len4
=
ref4
.
length
;
o
<
len4
;
o
++
)
{
line
=
ref4
[
o
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
5
=
room
.
watcher_buffers
;
ref
3
=
room
.
watcher_buffers
;
for
(
p
=
0
,
len5
=
ref5
.
length
;
p
<
len5
;
p
++
)
{
for
(
n
=
0
,
len3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
buffer
=
ref
5
[
p
];
buffer
=
ref
3
[
n
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
}
else
{
}
else
{
...
@@ -3305,9 +3247,9 @@
...
@@ -3305,9 +3247,9 @@
}
else
if
(
room
.
hostinfo
.
no_watch
&&
room
.
players
.
length
>=
(
room
.
hostinfo
.
mode
===
2
?
4
:
2
))
{
}
else
if
(
room
.
hostinfo
.
no_watch
&&
room
.
players
.
length
>=
(
room
.
hostinfo
.
mode
===
2
?
4
:
2
))
{
ygopro
.
stoc_die
(
client
,
"
${watch_denied_room}
"
);
ygopro
.
stoc_die
(
client
,
"
${watch_denied_room}
"
);
}
else
{
}
else
{
ref
6
=
room
.
get_playing_player
();
ref
4
=
room
.
get_playing_player
();
for
(
q
=
0
,
len6
=
ref6
.
length
;
q
<
len6
;
q
++
)
{
for
(
o
=
0
,
len4
=
ref4
.
length
;
o
<
len4
;
o
++
)
{
player
=
ref
6
[
q
];
player
=
ref
4
[
o
];
if
(
!
(
player
&&
player
!==
client
&&
player
.
challonge_info
.
id
===
client
.
challonge_info
.
id
))
{
if
(
!
(
player
&&
player
!==
client
&&
player
.
challonge_info
.
id
===
client
.
challonge_info
.
id
))
{
continue
;
continue
;
}
}
...
@@ -3379,25 +3321,20 @@
...
@@ -3379,25 +3321,20 @@
client
.
setTimeout
(
300000
);
//连接后超时5分钟
client
.
setTimeout
(
300000
);
//连接后超时5分钟
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
rid
=
_
.
indexOf
(
ROOM_all
,
room
);
client
.
is_post_watcher
=
true
;
client
.
is_post_watcher
=
true
;
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
client
)))
{
ref1
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
words
=
(
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
)));
for
(
n
=
0
,
len3
=
ref1
.
length
;
n
<
len3
;
n
++
)
{
if
(
words
)
{
line
=
ref1
[
n
];
room
.
playLines
(
words
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref2
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
room
.
playLines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
o
=
0
,
len4
=
ref2
.
length
;
o
<
len4
;
o
++
)
{
line
=
ref2
[
o
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
client
.
name
}
\${watch_join}`
);
room
.
watchers
.
push
(
client
);
room
.
watchers
.
push
(
client
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${watch_watching}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ref
3
=
room
.
watcher_buffers
;
ref
1
=
room
.
watcher_buffers
;
for
(
p
=
0
,
len5
=
ref3
.
length
;
p
<
len5
;
p
++
)
{
for
(
n
=
0
,
len3
=
ref1
.
length
;
n
<
len3
;
n
++
)
{
buffer
=
ref
3
[
p
];
buffer
=
ref
1
[
n
];
client
.
write
(
buffer
);
client
.
write
(
buffer
);
}
}
}
else
{
}
else
{
...
@@ -3414,7 +3351,7 @@
...
@@ -3414,7 +3351,7 @@
});
});
ygopro
.
stoc_follow
(
'
JOIN_GAME
'
,
false
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
JOIN_GAME
'
,
false
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
j
,
l
,
len
,
len1
,
len2
,
line
,
m
,
player
,
recorder
,
ref
,
ref1
,
ref2
,
room
,
watcher
;
var
j
,
l
en
,
player
,
recorder
,
ref
,
room
,
watcher
;
//欢迎信息
//欢迎信息
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
...
@@ -3423,18 +3360,13 @@
...
@@ -3423,18 +3360,13 @@
if
(
!
room
.
join_game_buffer
)
{
if
(
!
room
.
join_game_buffer
)
{
room
.
join_game_buffer
=
buffer
;
room
.
join_game_buffer
=
buffer
;
}
}
if
(
settings
.
modules
.
vip
.
enabled
&&
client
.
vip
&&
vip_info
.
players
[
client
.
name
].
words
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
client
)))
{
ref
=
_
.
lines
(
vip_info
.
players
[
client
.
name
].
words
);
words
=
(
await
dataManager
.
getUserWords
(
CLIENT_get_authorize_key
(
client
)));
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
if
(
words
)
{
line
=
ref
[
j
];
room
.
playLines
(
words
);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
}
else
if
(
settings
.
modules
.
words
.
enabled
&&
words
.
words
[
client
.
name
])
{
ref1
=
_
.
lines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
room
.
playLines
(
words
.
words
[
client
.
name
][
Math
.
floor
(
Math
.
random
()
*
words
.
words
[
client
.
name
].
length
)]);
for
(
l
=
0
,
len1
=
ref1
.
length
;
l
<
len1
;
l
++
)
{
line
=
ref1
[
l
];
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
if
(
settings
.
modules
.
welcome
)
{
if
(
settings
.
modules
.
welcome
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
welcome
,
ygopro
.
constants
.
COLORS
.
GREEN
);
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
welcome
,
ygopro
.
constants
.
COLORS
.
GREEN
);
...
@@ -3465,9 +3397,9 @@
...
@@ -3465,9 +3397,9 @@
//client.score_shown = true
//client.score_shown = true
if
(
settings
.
modules
.
random_duel
.
record_match_scores
&&
room
.
random_type
===
'
M
'
)
{
if
(
settings
.
modules
.
random_duel
.
record_match_scores
&&
room
.
random_type
===
'
M
'
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
ROOM_player_get_score
(
client
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ygopro
.
stoc_send_chat_to_room
(
room
,
ROOM_player_get_score
(
client
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ref
2
=
room
.
players
;
ref
=
room
.
players
;
for
(
m
=
0
,
len2
=
ref2
.
length
;
m
<
len2
;
m
++
)
{
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
player
=
ref
2
[
m
];
player
=
ref
[
j
];
if
(
player
.
pos
!==
7
&&
player
!==
client
)
{
if
(
player
.
pos
!==
7
&&
player
!==
client
)
{
ygopro
.
stoc_send_chat
(
client
,
ROOM_player_get_score
(
player
),
ygopro
.
constants
.
COLORS
.
GREEN
);
ygopro
.
stoc_send_chat
(
client
,
ROOM_player_get_score
(
player
),
ygopro
.
constants
.
COLORS
.
GREEN
);
}
}
...
@@ -3505,15 +3437,15 @@
...
@@ -3505,15 +3437,15 @@
ygopro
.
ctos_send
(
watcher
,
'
HS_TOOBSERVER
'
);
ygopro
.
ctos_send
(
watcher
,
'
HS_TOOBSERVER
'
);
});
});
watcher
.
on
(
'
data
'
,
function
(
data
)
{
watcher
.
on
(
'
data
'
,
function
(
data
)
{
var
l
en3
,
n
,
ref3
,
w
;
var
l
,
len1
,
ref1
,
w
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
room
)
{
if
(
!
room
)
{
return
;
return
;
}
}
room
.
watcher_buffers
.
push
(
data
);
room
.
watcher_buffers
.
push
(
data
);
ref
3
=
room
.
watchers
;
ref
1
=
room
.
watchers
;
for
(
n
=
0
,
len3
=
ref3
.
length
;
n
<
len3
;
n
++
)
{
for
(
l
=
0
,
len1
=
ref1
.
length
;
l
<
len1
;
l
++
)
{
w
=
ref
3
[
n
];
w
=
ref
1
[
l
];
if
(
w
)
{
//a WTF fix
if
(
w
)
{
//a WTF fix
w
.
write
(
data
);
w
.
write
(
data
);
}
}
...
@@ -3539,7 +3471,7 @@
...
@@ -3539,7 +3471,7 @@
};
};
ygopro
.
stoc_follow
(
'
GAME_MSG
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
ygopro
.
stoc_follow
(
'
GAME_MSG
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
var
act_pos
,
card
,
chain
,
check
,
count
,
cpos
,
deck_found
,
found
,
hint_type
,
i
,
id
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
l
en4
,
len5
,
len6
,
len7
,
len8
,
limbo_found
,
line
,
loc
,
m
,
max_loop
,
msg
,
n
,
o
,
oppo_pos
,
p
,
phase
,
player
,
playertype
,
pos
,
ppos
,
q
,
r
,
r_player
,
reason
,
ref
,
ref1
,
ref10
,
ref2
,
ref3
,
ref4
,
ref5
,
ref6
,
ref7
,
ref8
,
ref9
,
room
,
s
,
t
,
trigger_location
,
val
,
win_pos
;
var
act_pos
,
card
,
chain
,
check
,
count
,
cpos
,
deck_found
,
found
,
hint_type
,
i
,
id
,
j
,
l
,
len
,
len1
,
len2
,
len3
,
l
imbo_found
,
loc
,
m
,
max_loop
,
msg
,
n
,
o
,
oppo_pos
,
phase
,
player
,
playertype
,
pos
,
ppos
,
r_player
,
reason
,
ref
,
ref1
,
ref2
,
ref3
,
ref4
,
room
,
trigger_location
,
val
,
victoryWordPlayerList
,
win_pos
;
room
=
ROOM_all
[
client
.
rid
];
room
=
ROOM_all
[
client
.
rid
];
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
if
(
!
(
room
&&
!
client
.
reconnecting
))
{
return
;
return
;
...
@@ -3715,17 +3647,19 @@
...
@@ -3715,17 +3647,19 @@
room
.
match_kill
=
false
;
room
.
match_kill
=
false
;
room
.
scores
[
room
.
winner_name
]
=
99
;
room
.
scores
[
room
.
winner_name
]
=
99
;
}
}
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
)
{
if
(
settings
.
modules
.
vip
.
enabled
)
{
ref1
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
].
name
].
victory
);
victoryWordPlayerList
=
[
room
.
dueling_players
[
pos
]];
for
(
l
=
0
,
len1
=
ref1
.
length
;
l
<
len1
;
l
++
)
{
if
(
room
.
hostinfo
.
mode
===
2
)
{
line
=
ref1
[
l
];
victoryWordPlayerList
.
push
(
room
.
dueling_players
[
pos
+
1
]);
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
else
if
(
room
.
hostinfo
.
mode
===
2
&&
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
)
{
for
(
l
=
0
,
len1
=
victoryWordPlayerList
.
length
;
l
<
len1
;
l
++
)
{
ref2
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
pos
+
1
].
name
].
victory
);
player
=
victoryWordPlayerList
[
l
];
for
(
m
=
0
,
len2
=
ref2
.
length
;
m
<
len2
;
m
++
)
{
if
(
!
((
await
CLIENT_check_vip
(
player
))
&&
(
await
dataManager
.
getUserVictoryWords
(
CLIENT_get_authorize_key
(
player
)))))
{
line
=
ref2
[
m
];
continue
;
ygopro
.
stoc_send_chat_to_room
(
room
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
words
=
(
await
dataManager
.
getUserVictoryWords
(
CLIENT_get_authorize_key
(
player
)));
room
.
playLines
(
words
);
break
;
}
}
}
}
}
}
...
@@ -3754,7 +3688,7 @@
...
@@ -3754,7 +3688,7 @@
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
room
.
dueling_players
[
pos
].
lp
=
0
;
room
.
dueling_players
[
pos
].
lp
=
0
;
}
}
if
((
0
<
(
ref
3
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref3
<=
100
))
{
if
((
0
<
(
ref
1
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref1
<=
100
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_opponent}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_opponent}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
}
...
@@ -3793,7 +3727,7 @@
...
@@ -3793,7 +3727,7 @@
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
if
(
room
.
dueling_players
[
pos
].
lp
<
0
)
{
room
.
dueling_players
[
pos
].
lp
=
0
;
room
.
dueling_players
[
pos
].
lp
=
0
;
}
}
if
((
0
<
(
ref
4
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref4
<=
100
))
{
if
((
0
<
(
ref
2
=
room
.
dueling_players
[
pos
].
lp
)
&&
ref2
<=
100
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_self}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
ygopro
.
stoc_send_chat_to_room
(
room
,
"
${lp_low_self}
"
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
}
...
@@ -3834,7 +3768,7 @@
...
@@ -3834,7 +3768,7 @@
max_loop
=
3
+
(
count
-
1
)
*
7
;
max_loop
=
3
+
(
count
-
1
)
*
7
;
deck_found
=
0
;
deck_found
=
0
;
limbo_found
=
0
;
// support custom cards which may be in location 0 in KoishiPro or EdoPro
limbo_found
=
0
;
// support custom cards which may be in location 0 in KoishiPro or EdoPro
for
(
i
=
n
=
3
,
ref5
=
max_loop
;
n
<=
ref5
;
i
=
n
+=
7
)
{
for
(
i
=
m
=
3
,
ref3
=
max_loop
;
m
<=
ref3
;
i
=
m
+=
7
)
{
loc
=
buffer
.
readInt8
(
i
+
5
);
loc
=
buffer
.
readInt8
(
i
+
5
);
if
((
loc
&
0x41
)
>
0
)
{
if
((
loc
&
0x41
)
>
0
)
{
deck_found
++
;
deck_found
++
;
...
@@ -3856,8 +3790,8 @@
...
@@ -3856,8 +3790,8 @@
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
CHAINING
'
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
===
'
CHAINING
'
)
{
card
=
buffer
.
readUInt32LE
(
1
);
card
=
buffer
.
readUInt32LE
(
1
);
found
=
false
;
found
=
false
;
for
(
o
=
0
,
len3
=
long_resolve_cards
.
length
;
o
<
len3
;
o
++
)
{
for
(
n
=
0
,
len2
=
long_resolve_cards
.
length
;
n
<
len2
;
n
++
)
{
id
=
long_resolve_cards
[
o
];
id
=
long_resolve_cards
[
n
];
if
(
!
(
id
===
card
))
{
if
(
!
(
id
===
card
))
{
continue
;
continue
;
}
}
...
@@ -3882,9 +3816,9 @@
...
@@ -3882,9 +3816,9 @@
chain
=
buffer
.
readInt8
(
1
);
chain
=
buffer
.
readInt8
(
1
);
// console.log(2,chain)
// console.log(2,chain)
if
(
room
.
long_resolve_chain
[
chain
])
{
if
(
room
.
long_resolve_chain
[
chain
])
{
ref
6
=
room
.
get_playing_player
();
ref
4
=
room
.
get_playing_player
();
for
(
p
=
0
,
len4
=
ref6
.
length
;
p
<
len4
;
p
++
)
{
for
(
o
=
0
,
len3
=
ref4
.
length
;
o
<
len3
;
o
++
)
{
player
=
ref
6
[
p
];
player
=
ref
4
[
o
];
player
.
heartbeat_protected
=
true
;
player
.
heartbeat_protected
=
true
;
}
}
}
}
...
@@ -3911,30 +3845,14 @@
...
@@ -3911,30 +3845,14 @@
act_pos
=
act_pos
*
2
;
act_pos
=
act_pos
*
2
;
}
}
if
(
ygopro
.
constants
.
MSG
[
msg
]
!==
'
CHAINING
'
||
(
trigger_location
&
0x8
)
&&
client
.
ready_trap
)
{
if
(
ygopro
.
constants
.
MSG
[
msg
]
!==
'
CHAINING
'
||
(
trigger_location
&
0x8
)
&&
client
.
ready_trap
)
{
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
dueling_players
[
act_pos
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
])
{
if
(
settings
.
modules
.
vip
.
enabled
&&
(
await
CLIENT_check_vip
(
room
.
dueling_players
[
act_pos
]))
&&
(
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
]),
card
)))
{
ref7
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
].
name
].
dialogues
[
card
]);
room
.
playLines
((
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
]),
card
)));
for
(
q
=
0
,
len5
=
ref7
.
length
;
q
<
len5
;
q
++
)
{
}
else
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
hostinfo
.
mode
===
2
&&
(
await
CLIENT_check_vip
(
room
.
dueling_players
[
act_pos
+
1
]))
&&
(
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
+
1
]),
card
)))
{
line
=
ref7
[
q
];
room
.
playLines
((
await
dataManager
.
getUserDialogueText
(
CLIENT_get_authorize_key
(
room
.
dueling_players
[
act_pos
+
1
]),
card
)));
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
else
if
(
settings
.
modules
.
vip
.
enabled
&&
room
.
hostinfo
.
mode
===
2
&&
room
.
dueling_players
[
act_pos
+
1
].
vip
&&
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
])
{
ref8
=
_
.
lines
(
vip_info
.
players
[
room
.
dueling_players
[
act_pos
+
1
].
name
].
dialogues
[
card
]);
for
(
r
=
0
,
len6
=
ref8
.
length
;
r
<
len6
;
r
++
)
{
line
=
ref8
[
r
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues
[
card
])
{
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues
[
card
])
{
ref9
=
_
.
lines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
room
.
playLines
(
dialogues
.
dialogues
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues
[
card
].
length
)]);
for
(
s
=
0
,
len7
=
ref9
.
length
;
s
<
len7
;
s
++
)
{
line
=
ref9
[
s
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues_custom
[
card
])
{
}
else
if
(
settings
.
modules
.
dialogues
.
enabled
&&
dialogues
.
dialogues_custom
[
card
])
{
ref10
=
_
.
lines
(
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]);
room
.
playLines
(
dialogues
.
dialogues_custom
[
card
][
Math
.
floor
(
Math
.
random
()
*
dialogues
.
dialogues_custom
[
card
].
length
)]);
for
(
t
=
0
,
len8
=
ref10
.
length
;
t
<
len8
;
t
++
)
{
line
=
ref10
[
t
];
ygopro
.
stoc_send_chat
(
client
,
line
,
ygopro
.
constants
.
COLORS
.
PINK
);
}
}
}
}
}
}
}
...
@@ -4586,19 +4504,17 @@
...
@@ -4586,19 +4504,17 @@
CLIENT_send_vip_status
(
client
,
true
);
CLIENT_send_vip_status
(
client
,
true
);
break
;
break
;
case
'
buy
'
:
case
'
buy
'
:
if
(
vip_info
.
players
[
client
.
name
]
&&
vip_info
.
players
[
client
.
name
].
password
!==
client
.
vpass
)
{
if
(
!
client
.
vpass
)
{
ygopro
.
stoc_send_chat
(
client
,
"
${vip_account_existed}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_no_pass}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
if
((
!
client
.
vpass
&&
client
.
name
.
length
>
13
)
||
(
client
.
vpass
&&
(
client
.
name
.
length
+
client
.
vpass
.
length
)
>
18
))
{
ygopro
.
stoc_send_chat
(
client
,
"
${vip_player_name_too_long}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
else
{
}
else
{
key
=
cmd
[
2
];
key
=
cmd
[
2
];
buy_result
=
CLIENT_use_cdkey
(
client
,
key
);
buy_result
=
(
await
CLIENT_use_cdkey
(
client
,
key
)
);
switch
(
buy_result
)
{
switch
(
buy_result
)
{
case
0
:
case
0
:
ygopro
.
stoc_send_chat
(
client
,
"
${vip_key_not_found}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_key_not_found}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
break
;
break
;
case
1
:
case
1
:
ygopro
.
stoc_send_chat
(
client
,
"
${vip_success_new_part1}
"
+
client
.
name
+
"
$
"
+
client
.
vpass
+
"
${vip_success_new_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_success_new_part1}
"
+
client
.
name
_
vpass
+
"
${vip_success_new_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
break
;
break
;
case
2
:
case
2
:
ygopro
.
stoc_send_chat
(
client
,
"
${vip_success_renew}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_success_renew}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
...
@@ -4606,7 +4522,7 @@
...
@@ -4606,7 +4522,7 @@
}
}
break
;
break
;
case
'
dialogues
'
:
case
'
dialogues
'
:
if
(
!
client
.
vip
)
{
if
(
!
(
await
CLIENT_check_vip
(
client
))
)
{
CLIENT_send_vip_status
(
client
);
CLIENT_send_vip_status
(
client
);
}
else
{
}
else
{
code
=
cmd
[
2
];
code
=
cmd
[
2
];
...
@@ -4614,12 +4530,10 @@
...
@@ -4614,12 +4530,10 @@
if
(
!
code
||
!
parseInt
(
code
))
{
if
(
!
code
||
!
parseInt
(
code
))
{
ygopro
.
stoc_send_chat
(
client
,
"
${vip_invalid_card_code}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_invalid_card_code}
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
else
if
(
!
word
)
{
}
else
if
(
!
word
)
{
delete
vip_info
.
players
[
client
.
name
].
dialogues
[
parseInt
(
code
)];
await
dataManager
.
removeUserDialogues
(
CLIENT_get_authorize_key
(
client
),
parseInt
(
code
));
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_dialogues_part1}
"
+
code
+
"
${vip_cleared_dialogues_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_dialogues_part1}
"
+
code
+
"
${vip_cleared_dialogues_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
{
}
else
{
vip_info
.
players
[
client
.
name
].
dialogues
[
parseInt
(
code
)]
=
word
;
await
dataManager
.
setUserDialogues
(
CLIENT_get_authorize_key
(
client
),
parseInt
(
code
),
word
);
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_dialogues_part1}
"
+
code
+
"
${vip_set_dialogues_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_dialogues_part1}
"
+
code
+
"
${vip_set_dialogues_part2}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
...
@@ -4630,12 +4544,10 @@
...
@@ -4630,12 +4544,10 @@
}
else
{
}
else
{
word
=
concat_name
(
cmd
,
2
);
word
=
concat_name
(
cmd
,
2
);
if
(
!
word
)
{
if
(
!
word
)
{
delete
vip_info
.
players
[
client
.
name
].
words
;
await
dataManager
.
setUserWords
(
CLIENT_get_authorize_key
(
client
),
null
);
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_words}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_words}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
{
}
else
{
vip_info
.
players
[
client
.
name
].
words
=
word
;
await
dataManager
.
setUserWords
(
CLIENT_get_authorize_key
(
client
),
word
);
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_words}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_words}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
...
@@ -4646,30 +4558,25 @@
...
@@ -4646,30 +4558,25 @@
}
else
{
}
else
{
word
=
concat_name
(
cmd
,
2
);
word
=
concat_name
(
cmd
,
2
);
if
(
!
word
)
{
if
(
!
word
)
{
delete
vip_info
.
players
[
client
.
name
].
victory
;
await
dataManager
.
setUserVictoryWords
(
CLIENT_get_authorize_key
(
client
),
null
);
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_victory}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_cleared_victory}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
else
{
}
else
{
vip_info
.
players
[
client
.
name
].
victory
=
word
;
await
dataManager
.
setUserVictoryWords
(
CLIENT_get_authorize_key
(
client
),
word
);
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_victory}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_set_victory}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
break
;
case
'
password
'
:
if
(
!
client
.
vip
)
{
CLIENT_send_vip_status
(
client
);
}
else
{
word
=
cmd
[
2
];
if
(
word
&&
(
client
.
name
.
length
+
word
.
length
)
<=
18
)
{
vip_info
.
players
[
client
.
name
].
password
=
word
;
client
.
vpass
=
word
;
setting_save
(
vip_info
);
ygopro
.
stoc_send_chat
(
client
,
"
${vip_password_changed}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
}
}
}
}
else
{
}
else
{
//when 'password'
// if !client.vip
// CLIENT_send_vip_status(client)
// else
// word = cmd[2]
// if word and (client.name.length + word.length) <= 18
// vip_info.players[client.name].password = word
// client.vpass = word
// setting_save(vip_info)
// ygopro.stoc_send_chat(client, "${vip_password_changed}", ygopro.constants.#COLORS.BABYBLUE)
CLIENT_send_vip_status
(
client
);
CLIENT_send_vip_status
(
client
);
}
}
}
}
...
@@ -5322,7 +5229,7 @@
...
@@ -5322,7 +5229,7 @@
return
callback
+
"
(
"
+
text
+
"
);
"
;
return
callback
+
"
(
"
+
text
+
"
);
"
;
};
};
httpRequestListener
=
async
function
(
request
,
response
)
{
httpRequestListener
=
async
function
(
request
,
response
)
{
var
archive_args
,
archive_name
,
archive_process
,
buffer
,
check
,
death_room_found
,
duellog
,
e
,
err
,
error
,
filename
,
getpath
,
j
,
key
,
l
,
len
,
len1
,
parseQueryString
,
pass_validated
,
ref
,
ref1
,
ret_keys
,
roomsjson
,
success
,
u
;
var
archive_args
,
archive_name
,
archive_process
,
buffer
,
check
,
death_room_found
,
duellog
,
e
,
err
,
error
,
filename
,
getpath
,
j
,
len
,
parseQueryString
,
pass_validated
,
ref
,
ret_keys
,
roomsjson
,
success
,
u
;
parseQueryString
=
true
;
parseQueryString
=
true
;
u
=
url
.
parse
(
request
.
url
,
parseQueryString
);
u
=
url
.
parse
(
request
.
url
,
parseQueryString
);
//pass_validated = u.query.pass == settings.modules.http.password
//pass_validated = u.query.pass == settings.modules.http.password
...
@@ -5393,18 +5300,9 @@
...
@@ -5393,18 +5300,9 @@
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
Unauthorized.
"
));
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
Unauthorized.
"
));
return
;
return
;
}
else
if
(
!
u
.
query
.
keytype
||
!
vip_info
.
cdkeys
[
u
.
query
.
keytype
])
{
response
.
writeHead
(
200
);
response
.
end
(
addCallback
(
u
.
query
.
callback
,
"
Key type not found.
"
));
return
;
}
else
{
}
else
{
ret_keys
=
JSON
.
stringify
((
await
dataMager
.
getVipKeys
(
parseInt
(
u
.
query
.
keytype
))),
null
,
2
);
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
ret_keys
=
""
;
ref
=
vip_info
.
cdkeys
[
u
.
query
.
keytype
];
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
key
=
ref
[
j
];
ret_keys
=
ret_keys
+
u
.
query
.
keytype
+
"
D
"
+
settings
.
port
+
"
:
"
+
key
+
"
\n
"
;
}
response
.
end
(
addCallback
(
u
.
query
.
callback
,
ret_keys
));
response
.
end
(
addCallback
(
u
.
query
.
callback
,
ret_keys
));
}
}
}
else
if
(
u
.
pathname
===
'
/api/archive.zip
'
&&
settings
.
modules
.
mysql
.
enabled
)
{
}
else
if
(
u
.
pathname
===
'
/api/archive.zip
'
&&
settings
.
modules
.
mysql
.
enabled
)
{
...
@@ -5417,9 +5315,9 @@
...
@@ -5417,9 +5315,9 @@
archive_name
=
moment
().
format
(
'
YYYY-MM-DD HH-mm-ss
'
)
+
"
.zip
"
;
archive_name
=
moment
().
format
(
'
YYYY-MM-DD HH-mm-ss
'
)
+
"
.zip
"
;
archive_args
=
[
"
a
"
,
"
-mx0
"
,
"
-y
"
,
archive_name
];
archive_args
=
[
"
a
"
,
"
-mx0
"
,
"
-y
"
,
archive_name
];
check
=
false
;
check
=
false
;
ref
1
=
(
await
dataManager
.
getAllReplayFilenames
());
ref
=
(
await
dataManager
.
getAllReplayFilenames
());
for
(
l
=
0
,
len1
=
ref1
.
length
;
l
<
len1
;
l
++
)
{
for
(
j
=
0
,
len
=
ref
.
length
;
j
<
len
;
j
++
)
{
filename
=
ref
1
[
l
];
filename
=
ref
[
j
];
check
=
true
;
check
=
true
;
archive_args
.
push
(
filename
);
archive_args
.
push
(
filename
);
}
}
...
...
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