Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
mycard
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
syntax_j
mycard
Commits
ac57d1d8
Commit
ac57d1d8
authored
Oct 25, 2016
by
wudizhanche1000
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'v3' of
https://github.com/mycard/mycard
into v3
parents
d22b570c
b10efc6e
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
303 additions
and
102 deletions
+303
-102
app/apps.component.css
app/apps.component.css
+4
-0
app/apps.component.html
app/apps.component.html
+16
-21
app/apps.component.ts
app/apps.component.ts
+7
-5
app/ygopro.component.css
app/ygopro.component.css
+74
-0
app/ygopro.component.html
app/ygopro.component.html
+36
-17
app/ygopro.component.ts
app/ygopro.component.ts
+116
-7
apps.json
apps.json
+50
-52
No files found.
app/apps.component.css
View file @
ac57d1d8
...
@@ -18,4 +18,8 @@ a {
...
@@ -18,4 +18,8 @@ a {
.active
>
a
{
.active
>
a
{
color
:
#fff
;
color
:
#fff
;
}
span
{
margin-left
:
8px
;
}
}
\ No newline at end of file
app/apps.component.html
View file @
ac57d1d8
<span>
已安装
</span>
<span
*ngIf=
"grouped_apps.installed"
>
已安装
</span>
<ul
class=
"nav nav-sidebar"
>
<ul
*ngIf=
"grouped_apps.installed"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.installed"
[class.active]=
"app.id==routingService.app"
>
<li
*ngFor=
"let app of grouped_apps.installed"
[class.active]=
"app.id==routingService.app"
>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
</li>
</li>
</ul>
</ul>
<span
>
未安装
</span>
<span
*ngIf=
"grouped_apps.yugioh"
>
游戏王
</span>
<ul
class=
"nav nav-sidebar"
>
<ul
*ngIf=
"grouped_apps.yugioh"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.
not_installed
"
[class.active]=
"app.id==routingService.app"
>
<li
*ngFor=
"let app of grouped_apps.
yugioh
"
[class.active]=
"app.id==routingService.app"
>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
</li>
</li>
</ul>
</ul>
<!--<ul class="nav nav-sidebar">
<span
*ngIf=
"grouped_apps.touhou"
>
东方 Project
</span>
<li><a href="">Nav item</a></li>
<ul
*ngIf=
"grouped_apps.touhou"
class=
"nav nav-sidebar"
>
<li><a href="">Nav item again</a></li>
<li
*ngFor=
"let app of grouped_apps.touhou"
[class.active]=
"app.id==routingService.app"
>
<li><a href="">One more nav</a></li>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
<li><a href="">Another nav item</a></li>
</li>
<li><a href="">More navigation</a></li>
</ul>
</ul>
<ul class="nav nav-sidebar">
<span
*ngIf=
"grouped_apps.touhou_pc98"
>
东方旧作
</span>
<li><a href="">Nav item again</a></li>
<ul
*ngIf=
"grouped_apps.touhou_pc98"
class=
"nav nav-sidebar"
>
<li><a href="">One more nav</a></li>
<li
*ngFor=
"let app of grouped_apps.touhou_pc98"
[class.active]=
"app.id==routingService.app"
>
<li><a href="">Another nav item</a></li>
<a
(click)=
"selectApp(app.id)"
href=
"#"
>
{{app.name[app.locales[0]]}}
</a>
</ul>-->
</li>
</ul>
\ No newline at end of file
<!--<div class="list-group">
</div>-->
\ No newline at end of file
app/apps.component.ts
View file @
ac57d1d8
...
@@ -42,16 +42,18 @@ export class AppsComponent {
...
@@ -42,16 +42,18 @@ export class AppsComponent {
}
}
get
grouped_apps
()
{
get
grouped_apps
()
{
let
result
=
{
'
installed
'
:
[],
'
not_installed
'
:
[]};
let
result
=
{
'
installed
'
:
[]};
for
(
let
app
of
this
.
apps
)
{
for
(
let
app
of
this
.
apps
)
{
if
(
app
.
local
)
{
if
(
app
.
local
)
{
result
.
installed
.
push
(
app
)
result
.
installed
.
push
(
app
)
}
else
{
}
else
{
result
.
not_installed
.
push
(
app
)
if
(
!
result
[
app
.
tags
[
0
]])
{
result
[
app
.
tags
[
0
]]
=
[]
}
result
[
app
.
tags
[
0
]].
push
(
app
)
}
}
}
}
//console.log(result)
return
result
return
result
}
}
}
}
\ No newline at end of file
app/ygopro.component.css
View file @
ac57d1d8
#game-list-modal
tbody
{
display
:
block
;
overflow-y
:
auto
;
height
:
21.5rem
;
}
#game-list-modal
thead
{
position
:
relative
;
display
:
block
;
}
#game-list-modal
tr
{
width
:
100%
;
display
:
table
;
}
#game-list-modal
.table
{
margin-bottom
:
0
;
}
#game-list-modal
.avatar
{
width
:
25px
;
height
:
25px
;
border-radius
:
50%
;
}
#game-list-modal
.players
{
padding-top
:
.5rem
;
padding-bottom
:
.5rem
;
}
#game-list-modal
.close
{
position
:
absolute
;
top
:
15px
;
right
:
15px
;
}
#game-list-modal
.modal-header
{
padding-left
:
0
;
padding-right
:
0
;
}
#game-list-modal
.modal-header
th
{
line-height
:
36px
;
padding-top
:
0
;
padding-bottom
:
0
;
border
:
none
;
}
#game-list-modal
.modal-body
{
padding
:
0
;
height
:
21.4rem
;
}
#game-list-modal
.modal-body
tr
:first-child
td
{
border-top
:
none
;
}
#game-list-modal
.modal-body
tr
:last-child
td
{
border-bottom
:
none
;
}
/*fixme: auto width*/
#game-list-modal
.title
{
width
:
25%
;
}
#game-list-modal
.users
{
width
:
20%
;
}
#game-list-modal
.mode
{
width
:
20%
;
}
#game-list-modal
.extra
{
width
:
35%
;
}
.float-left
{
float
:
left
;
}
\ No newline at end of file
app/ygopro.component.html
View file @
ac57d1d8
...
@@ -53,19 +53,20 @@
...
@@ -53,19 +53,20 @@
</button>
</button>
<h4
class=
"modal-title"
id=
"myModalLabel"
>
创建房间
</h4>
<h4
class=
"modal-title"
id=
"myModalLabel"
>
创建房间
</h4>
</div>
</div>
<form
id=
"game-create"
>
<form
id=
"game-create"
(submit)=
"create_room(room)"
>
<div
class=
"modal-body"
>
<div
class=
"modal-body"
>
<div
class=
"form-group row"
>
<div
class=
"form-group row"
>
<label
for=
"game-create-title"
class=
"col-sm-2 form-control-label"
>
游戏标题
</label>
<label
for=
"game-create-title"
class=
"col-sm-2 form-control-label"
>
游戏标题
</label>
<div
class=
"col-sm-10"
>
<div
class=
"col-sm-10"
>
<input
type=
"text"
class=
"form-control"
id=
"game-create-title"
name=
"title"
>
<input
type=
"text"
class=
"form-control"
id=
"game-create-title"
name=
"title"
[(ngModel)]=
"room.title"
>
</div>
</div>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"form-group row"
>
<label
for=
"game-create-rule"
class=
"col-sm-2 form-control-label"
>
卡片允许
</label>
<label
for=
"game-create-rule"
class=
"col-sm-2 form-control-label"
>
卡片允许
</label>
<div
class=
"col-sm-10"
>
<div
class=
"col-sm-10"
>
<select
class=
"form-control"
id=
"game-create-rule"
name=
"rule"
>
<select
class=
"form-control"
id=
"game-create-rule"
name=
"rule"
[(ngModel)]=
"room.rule"
>
<option
value=
"0"
selected
>
OCG
</option>
<option
value=
"0"
>
OCG
</option>
<option
value=
"1"
>
TCG
</option>
<option
value=
"1"
>
TCG
</option>
<option
value=
"2"
>
OCG
&
TCG
</option>
<option
value=
"2"
>
OCG
&
TCG
</option>
<option
value=
"3"
>
专有卡禁止
</option>
<option
value=
"3"
>
专有卡禁止
</option>
...
@@ -75,22 +76,22 @@
...
@@ -75,22 +76,22 @@
<div
class=
"form-group row"
>
<div
class=
"form-group row"
>
<label
for=
"game-create-mode"
class=
"col-sm-2 form-control-label"
>
决斗模式
</label>
<label
for=
"game-create-mode"
class=
"col-sm-2 form-control-label"
>
决斗模式
</label>
<div
class=
"col-sm-10"
>
<div
class=
"col-sm-10"
>
<select
class=
"form-control"
id=
"game-create-mode"
name=
"mode"
>
<select
class=
"form-control"
id=
"game-create-mode"
name=
"mode"
[(ngModel)]=
"room.mode"
>
<option
value=
"0"
>
单局模式
</option>
<option
value=
"0"
>
单局模式
</option>
<option
value=
"1"
selected
>
比赛模式
</option>
<option
value=
"1"
>
比赛模式
</option>
<option
value=
"2"
>
TAG
</option>
<option
value=
"2"
>
TAG
</option>
</select>
</select>
</div>
</div>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"form-group row"
>
<label
class=
"col-sm-2 form-control-label"
>
额外选项
</label>
<label
class=
"col-sm-2 form-control-label"
>
额外选项
</label>
<div
class=
"col-sm-
4
"
>
<div
class=
"col-sm-
5
"
>
<div
class=
"row"
>
<div
class=
"row"
>
<label
for=
"game-create-start-lp"
class=
"col-sm-6 form-control-label"
>
初始 LP
</label>
<label
for=
"game-create-start-lp"
class=
"col-sm-6 form-control-label"
>
初始 LP
</label>
<div
class=
"col-sm-6"
>
<div
class=
"col-sm-6"
>
<input
name=
"start_lp"
type=
"number"
value=
"8000"
min=
"1"
max=
"65536"
<input
name=
"start_lp"
type=
"number"
value=
"8000"
min=
"1"
max=
"65536"
class=
"form-control form-control-sm game-create-extra"
class=
"form-control form-control-sm game-create-extra"
id=
"game-create-start-lp"
>
id=
"game-create-start-lp"
[(ngModel)]=
"room.start_lp"
>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
...
@@ -98,7 +99,7 @@
...
@@ -98,7 +99,7 @@
<div
class=
"col-sm-6"
>
<div
class=
"col-sm-6"
>
<input
name=
"start_hand"
type=
"number"
value=
"5"
min=
"0"
max=
"16"
<input
name=
"start_hand"
type=
"number"
value=
"5"
min=
"0"
max=
"16"
class=
"form-control form-control-sm game-create-extra"
class=
"form-control form-control-sm game-create-extra"
id=
"game-create-start-hand"
>
id=
"game-create-start-hand"
[(ngModel)]=
"room.start_hand"
>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
...
@@ -106,29 +107,29 @@
...
@@ -106,29 +107,29 @@
<div
class=
"col-sm-6"
>
<div
class=
"col-sm-6"
>
<input
name=
"draw_count"
type=
"number"
value=
"1"
min=
"0"
max=
"16"
<input
name=
"draw_count"
type=
"number"
value=
"1"
min=
"0"
max=
"16"
class=
"form-control form-control-sm game-create-extra"
class=
"form-control form-control-sm game-create-extra"
id=
"game-create-draw-count"
>
id=
"game-create-draw-count"
[(ngModel)]=
"room.draw_count"
>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"col-sm-
6
"
>
<div
class=
"col-sm-
5
"
>
<div
class=
"checkbox"
>
<div
class=
"checkbox"
>
<label>
<label>
<input
name=
"enable_priority"
type=
"checkbox"
>
允许启动效果优先权
<input
name=
"enable_priority"
type=
"checkbox"
[(ngModel)]=
"room.enable_priority"
>
允许启动效果优先权
</label>
</label>
</div>
</div>
<div
class=
"checkbox"
>
<div
class=
"checkbox"
>
<label>
<label>
<input
name=
"no_check_deck"
type=
"checkbox"
>
不检查卡组
<input
name=
"no_check_deck"
type=
"checkbox"
[(ngModel)]=
"room.no_check_deck"
>
不检查卡组
</label>
</label>
</div>
</div>
<div
class=
"checkbox"
>
<div
class=
"checkbox"
>
<label>
<label>
<input
name=
"no_shuffle_deck"
type=
"checkbox"
>
开局不洗卡组
<input
name=
"no_shuffle_deck"
type=
"checkbox"
[(ngModel)]=
"room.no_shuffle_deck"
>
开局不洗卡组
</label>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"form-group row"
>
<
!--<
div class="form-group row">
<label class="col-sm-2">私密房间</label>
<label class="col-sm-2">私密房间</label>
<div class="col-sm-10">
<div class="col-sm-10">
<div class="checkbox">
<div class="checkbox">
...
@@ -137,7 +138,7 @@
...
@@ -137,7 +138,7 @@
</label>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
-->
</div>
</div>
<div
class=
"modal-footer"
>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary float-left"
data-dismiss=
"modal"
data-toggle=
"modal"
<button
type=
"button"
class=
"btn btn-secondary float-left"
data-dismiss=
"modal"
data-toggle=
"modal"
...
@@ -164,7 +165,25 @@
...
@@ -164,7 +165,25 @@
<th
class=
"extra"
>
额外选项
</th>
<th
class=
"extra"
>
额外选项
</th>
</tr>
</tr>
</thead>
</thead>
<tbody
class=
"modal-body"
></tbody>
<tbody
class=
"modal-body"
>
<tr
*ngFor=
"let room of rooms"
class=
"room"
(click)=
"join_room(room)"
>
<td
class=
"title"
>
{{room.title}}
</td>
<td
class=
"users"
>
<img
*ngFor=
"let user of room.users"
class=
"avatar"
[src]=
"'https://ygobbs.com/user_avatar/ygobbs.com/' + user.username + '/25/1.png'"
>
</td>
<td
class=
"mode"
>
{{{'0': '单局模式', '1': '比赛模式', '2': 'TAG'}[room.mode]}}
</td>
<td
class=
"extra"
>
<span
*ngIf=
"room.rule != default_options.rule"
>
{{{'0': 'OCG', '1': 'TCG', '2': 'O/T', '3': '专有卡禁止'}[room.rule]}}
</span>
<span
*ngIf=
"room.start_lp != default_options.start_lp"
>
{{room.start_lp}} LP
</span>
<span
*ngIf=
"room.start_hand != default_options.start_hand"
>
{{room.start_hand}} 初始
</span>
<span
*ngIf=
"room.draw_count != default_options.draw_count"
>
{{room.draw_count}} 抽卡
</span>
<span
*ngIf=
"room.enable_priority != default_options.enable_priority"
>
优先权
</span>
<span
*ngIf=
"room.no_check_deck != default_options.no_check_deck"
>
不检查
</span>
<span
*ngIf=
"room.no_shuffle_deck != default_options.no_shuffle_deck"
>
不洗卡
</span>
</td>
</tbody>
</table>
</table>
<button
type=
"button"
class=
"close"
data-dismiss=
"modal"
aria-label=
"Close"
>
<button
type=
"button"
class=
"close"
data-dismiss=
"modal"
aria-label=
"Close"
>
<span
aria-hidden=
"true"
>
×
</span>
<span
aria-hidden=
"true"
>
×
</span>
...
...
app/ygopro.component.ts
View file @
ac57d1d8
/**
/**
* Created by zh99998 on 16/9/2.
* Created by zh99998 on 16/9/2.
*/
*/
import
{
Component
}
from
'
@angular/core
'
;
import
{
Component
,
OnInit
,
ChangeDetectorRef
}
from
'
@angular/core
'
;
import
{
AppsService
}
from
"
./apps.service
"
;
import
{
AppsService
}
from
"
./apps.service
"
;
import
{
RoutingService
}
from
"
./routing.service
"
;
import
{
RoutingService
}
from
"
./routing.service
"
;
declare
var
process
;
declare
var
process
;
declare
var
System
;
declare
var
System
;
declare
var
$
;
const
fs
=
System
.
_nodeRequire
(
'
fs
'
);
const
fs
=
System
.
_nodeRequire
(
'
fs
'
);
const
path
=
System
.
_nodeRequire
(
'
path
'
);
const
path
=
System
.
_nodeRequire
(
'
path
'
);
const
crypto
=
System
.
_nodeRequire
(
'
crypto
'
);
const
child_process
=
System
.
_nodeRequire
(
'
child_process
'
);
const
child_process
=
System
.
_nodeRequire
(
'
child_process
'
);
//const Promise = System._nodeRequire('bluebird');
//const Promise = System._nodeRequire('bluebird');
const
ini
=
System
.
_nodeRequire
(
'
ini
'
);
const
ini
=
System
.
_nodeRequire
(
'
ini
'
);
...
@@ -19,7 +23,7 @@ const electron = System._nodeRequire('electron');
...
@@ -19,7 +23,7 @@ const electron = System._nodeRequire('electron');
templateUrl
:
'
app/ygopro.component.html
'
,
templateUrl
:
'
app/ygopro.component.html
'
,
styleUrls
:
[
'
app/ygopro.component.css
'
],
styleUrls
:
[
'
app/ygopro.component.css
'
],
})
})
export
class
YGOProComponent
{
export
class
YGOProComponent
implements
OnInit
{
app
=
this
.
appsService
.
searchApp
(
'
ygopro
'
);
app
=
this
.
appsService
.
searchApp
(
'
ygopro
'
);
decks
=
[];
decks
=
[];
current_deck
;
current_deck
;
...
@@ -30,10 +34,69 @@ export class YGOProComponent {
...
@@ -30,10 +34,69 @@ export class YGOProComponent {
windbot
=
[
"
琪露诺
"
,
"
谜之剑士LV4
"
,
"
复制植物
"
,
"
尼亚
"
];
windbot
=
[
"
琪露诺
"
,
"
谜之剑士LV4
"
,
"
复制植物
"
,
"
尼亚
"
];
servers
=
[{
address
:
"
112.124.105.11
"
,
port
:
7911
}];
servers
=
[{
id
:
'
tiramisu
'
,
url
:
'
wss://tiramisu.mycard.moe:7923
'
,
address
:
"
112.124.105.11
"
,
port
:
7911
}];
user
=
{
external_id
:
1
,
username
:
'
zh99998
'
};
// for test
default_options
=
{
mode
:
1
,
rule
:
0
,
start_lp
:
8000
,
start_hand
:
5
,
draw_count
:
1
,
enable_priority
:
false
,
no_check_deck
:
false
,
no_shuffle_deck
:
false
};
room
=
Object
.
assign
({
title
:
this
.
user
.
username
+
'
的房间
'
},
this
.
default_options
);
constructor
(
private
appsService
:
AppsService
,
private
routingService
:
RoutingService
)
{
rooms
=
[];
this
.
refresh
()
connections
=
[];
constructor
(
private
appsService
:
AppsService
,
private
routingService
:
RoutingService
,
private
ref
:
ChangeDetectorRef
)
{
this
.
refresh
();
}
ngOnInit
()
{
let
modal
=
$
(
'
#game-list-modal
'
);
modal
.
on
(
'
show.bs.modal
'
,
(
event
)
=>
{
this
.
connections
=
this
.
servers
.
map
((
server
)
=>
{
let
connection
=
new
WebSocket
(
server
.
url
);
connection
.
onclose
=
()
=>
{
this
.
rooms
=
this
.
rooms
.
filter
(
room
=>
room
.
server
!=
server
)
};
connection
.
onmessage
=
(
event
)
=>
{
let
message
=
JSON
.
parse
(
event
.
data
);
//console.log(message)
switch
(
message
.
event
)
{
case
'
init
'
:
this
.
rooms
=
this
.
rooms
.
filter
(
room
=>
room
.
server
!=
server
).
concat
(
message
.
data
.
map
(
data
=>
Object
.
assign
({
server
:
server
},
this
.
default_options
,
data
)));
break
;
case
'
create
'
:
this
.
rooms
.
push
(
Object
.
assign
({
server
:
server
},
this
.
default_options
,
message
.
data
));
break
;
case
'
update
'
:
Object
.
assign
(
this
.
rooms
.
find
(
room
=>
room
.
server
==
server
&&
room
.
id
==
message
.
data
.
id
),
this
.
default_options
,
message
.
data
);
break
;
case
'
delete
'
:
this
.
rooms
.
splice
(
this
.
rooms
.
findIndex
(
room
=>
room
.
server
==
server
&&
room
.
id
==
message
.
data
),
1
);
}
this
.
ref
.
detectChanges
()
};
return
connection
;
});
});
modal
.
on
(
'
hide.bs.modal
'
,
(
event
)
=>
{
for
(
let
connection
of
this
.
connections
)
{
connection
.
close
();
}
this
.
connections
=
[]
});
}
}
refresh
=
()
=>
{
refresh
=
()
=>
{
...
@@ -124,16 +187,18 @@ export class YGOProComponent {
...
@@ -124,16 +187,18 @@ export class YGOProComponent {
data
[
'
lastip
'
]
=
server
.
address
;
data
[
'
lastip
'
]
=
server
.
address
;
data
[
'
lastport
'
]
=
server
.
port
;
data
[
'
lastport
'
]
=
server
.
port
;
data
[
'
roompass
'
]
=
name
;
data
[
'
roompass
'
]
=
name
;
data
[
'
nickname
'
]
=
this
.
user
.
username
;
console
.
log
(
data
)
return
data
return
data
})
})
.
then
(
this
.
save_system_conf
)
.
then
(
this
.
save_system_conf
)
.
then
(()
=>
[
'
-j
'
])
.
then
(()
=>
[
'
-j
'
])
.
then
(
this
.
start_game
)
.
then
(
this
.
start_game
)
.
catch
(
reason
=>
console
.
log
(
reason
))
.
catch
(
reason
=>
alert
(
reason
))
};
};
join_windbot
(
name
)
{
join_windbot
(
name
)
{
this
.
join
(
'
AI#
'
+
name
,
this
.
servers
[
0
])
this
.
join
(
'
AI#
'
+
name
,
this
.
servers
[
0
])
}
}
start_game
=
(
args
)
=>
{
start_game
=
(
args
)
=>
{
...
@@ -152,4 +217,48 @@ export class YGOProComponent {
...
@@ -152,4 +217,48 @@ export class YGOProComponent {
})
})
})
})
};
};
create_room
(
options
)
{
let
options_buffer
=
new
Buffer
(
6
);
// 建主密码 https://docs.google.com/document/d/1rvrCGIONua2KeRaYNjKBLqyG9uybs9ZI-AmzZKNftOI/edit
options_buffer
.
writeUInt8
((
options
.
private
?
2
:
1
)
<<
4
,
1
);
options_buffer
.
writeUInt8
(
parseInt
(
options
.
rule
)
<<
5
|
parseInt
(
options
.
mode
)
<<
3
|
(
options
.
enable_priority
?
1
<<
2
:
0
)
|
(
options
.
no_check_deck
?
1
<<
1
:
0
)
|
(
options
.
no_shuffle_deck
?
1
:
0
),
2
);
options_buffer
.
writeUInt16LE
(
parseInt
(
options
.
start_lp
),
3
);
options_buffer
.
writeUInt8
(
parseInt
(
options
.
start_hand
)
<<
4
|
parseInt
(
options
.
draw_count
),
5
);
let
checksum
=
0
;
for
(
let
i
=
1
;
i
<
options_buffer
.
length
;
i
++
)
{
checksum
-=
options_buffer
.
readUInt8
(
i
)
}
options_buffer
.
writeUInt8
(
checksum
&
0xFF
,
0
);
let
secret
=
this
.
user
.
external_id
%
65535
+
1
;
for
(
let
i
=
0
;
i
<
options_buffer
.
length
;
i
+=
2
)
{
options_buffer
.
writeUInt16LE
(
options_buffer
.
readUInt16LE
(
i
)
^
secret
,
i
)
}
let
password
=
options_buffer
.
toString
(
'
base64
'
)
+
options
.
title
.
replace
(
/
\s
/
,
String
.
fromCharCode
(
0xFEFF
));
let
room_id
=
crypto
.
createHash
(
'
md5
'
).
update
(
password
+
this
.
user
.
username
).
digest
(
'
base64
'
).
slice
(
0
,
10
).
replace
(
'
+
'
,
'
-
'
).
replace
(
'
/
'
,
'
_
'
)
this
.
join
(
password
,
this
.
servers
[
0
]);
}
join_room
(
room
)
{
let
options_buffer
=
new
Buffer
(
6
);
options_buffer
.
writeUInt8
(
3
<<
4
,
1
);
let
checksum
=
0
;
for
(
var
i
=
1
;
i
<
options_buffer
.
length
;
i
++
)
{
checksum
-=
options_buffer
.
readUInt8
(
i
)
}
options_buffer
.
writeUInt8
(
checksum
&
0xFF
,
0
);
let
secret
=
this
.
user
.
external_id
%
65535
+
1
;
for
(
i
=
0
;
i
<
options_buffer
.
length
;
i
+=
2
)
{
options_buffer
.
writeUInt16LE
(
options_buffer
.
readUInt16LE
(
i
)
^
secret
,
i
)
}
let
password
=
options_buffer
.
toString
(
'
base64
'
)
+
room
.
id
;
this
.
join
(
password
,
room
.
server
);
}
}
}
apps.json
View file @
ac57d1d8
...
@@ -48,7 +48,7 @@
...
@@ -48,7 +48,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7ea2
\u
9b54
\u
4e61
\u
8bed
\u
8a00
\u
5305(
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方红魔乡 语言包(繁体中文
)"
}
}
},
},
{
{
...
@@ -57,7 +57,7 @@
...
@@ -57,7 +57,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -118,7 +118,7 @@
...
@@ -118,7 +118,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7ea2
\u
9b54
\u
4e61
"
"zh-CN"
:
"
东方红魔乡
"
}
}
},
},
{
{
...
@@ -156,8 +156,7 @@
...
@@ -156,8 +156,7 @@
"darwin"
:
"1.06"
"darwin"
:
"1.06"
},
},
"references"
:
{
"references"
:
{
"win32"
:
[
"win32"
:
[],
],
"darwin"
:
[]
"darwin"
:
[]
},
},
"download"
:
{
"download"
:
{
...
@@ -170,7 +169,7 @@
...
@@ -170,7 +169,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
8403
\u
68a6
\u
60f3
\u
8bed
\u
8a00
\u
5305(
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方萃梦想 语言包(繁体中文
)"
}
}
},
},
{
{
...
@@ -179,7 +178,7 @@
...
@@ -179,7 +178,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -221,7 +220,7 @@
...
@@ -221,7 +220,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
8403
\u
68a6
\u
60f3
"
"zh-CN"
:
"
东方萃梦想
"
}
}
},
},
{
{
...
@@ -272,7 +271,7 @@
...
@@ -272,7 +271,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5996
\u
5996
\u
68a6
\u
8bed
\u
8a00
\u
5305(
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方妖妖梦 语言包(繁体中文
)"
}
}
},
},
{
{
...
@@ -281,7 +280,7 @@
...
@@ -281,7 +280,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -323,7 +322,7 @@
...
@@ -323,7 +322,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5996
\u
5996
\u
68a6
"
"zh-CN"
:
"
东方妖妖梦
"
}
}
},
},
{
{
...
@@ -374,7 +373,7 @@
...
@@ -374,7 +373,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
6c38
\u
591c
\u
6284
\u
8bed
\u
8a00
\u
5305(
\u
7b80
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方永夜抄 语言包(简体中文
)"
}
}
},
},
{
{
...
@@ -383,7 +382,7 @@
...
@@ -383,7 +382,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -425,7 +424,7 @@
...
@@ -425,7 +424,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
6c38
\u
591c
\u
6284
"
"zh-CN"
:
"
东方永夜抄
"
}
}
},
},
{
{
...
@@ -476,7 +475,7 @@
...
@@ -476,7 +475,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
6587
\u
82b1
\u
5e16 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方文花帖 (繁体中文
)"
}
}
},
},
{
{
...
@@ -485,7 +484,7 @@
...
@@ -485,7 +484,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -527,7 +526,7 @@
...
@@ -527,7 +526,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
6587
\u
82b1
\u
5e16
"
"zh-CN"
:
"
东方文花帖
"
}
}
},
},
{
{
...
@@ -578,7 +577,7 @@
...
@@ -578,7 +577,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
82b1
\u
6620
\u
51a2 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方花映冢 (繁体中文
)"
}
}
},
},
{
{
...
@@ -587,7 +586,7 @@
...
@@ -587,7 +586,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -629,7 +628,7 @@
...
@@ -629,7 +628,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
82b1
\u
6620
\u
51a2
"
"zh-CN"
:
"
东方花映冢
"
}
}
},
},
{
{
...
@@ -680,7 +679,7 @@
...
@@ -680,7 +679,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7eef
\u
60f3
\u
5929
\u
8bed
\u
8a00
\u
5305 (
\u
7b80
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方绯想天 语言包 (简体中文
)"
}
}
},
},
{
{
...
@@ -689,7 +688,7 @@
...
@@ -689,7 +688,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -731,7 +730,7 @@
...
@@ -731,7 +730,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7eef
\u
60f3
\u
5929
"
"zh-CN"
:
"
东方绯想天
"
}
}
},
},
{
{
...
@@ -782,7 +781,7 @@
...
@@ -782,7 +781,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
98ce
\u
795e
\u
5f55
\u
8bed
\u
8a00
\u
5305 (
\u
7b80
\u
4f53
\u
4e2d
\u
6587,
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方风神录 语言包 (简体中文, 繁体中文
)"
}
}
},
},
{
{
...
@@ -791,7 +790,7 @@
...
@@ -791,7 +790,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -833,7 +832,7 @@
...
@@ -833,7 +832,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
98ce
\u
795e
\u
5f55
"
"zh-CN"
:
"
东方风神录
"
}
}
},
},
{
{
...
@@ -884,7 +883,7 @@
...
@@ -884,7 +883,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5730
\u
7075
\u
6bbf
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方地灵殿 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -893,7 +892,7 @@
...
@@ -893,7 +892,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -935,7 +934,7 @@
...
@@ -935,7 +934,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5730
\u
7075
\u
6bbf
"
"zh-CN"
:
"
东方地灵殿
"
}
}
},
},
{
{
...
@@ -986,7 +985,7 @@
...
@@ -986,7 +985,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
975e
\u
60f3
\u
5929
\u
5219
\u
8bed
\u
8a00
\u
5305 (
\u
7b80
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方非想天则 语言包 (简体中文
)"
}
}
},
},
{
{
...
@@ -995,7 +994,7 @@
...
@@ -995,7 +994,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1037,7 +1036,7 @@
...
@@ -1037,7 +1036,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
975e
\u
60f3
\u
5929
\u
5219
"
"zh-CN"
:
"
东方非想天则
"
}
}
},
},
{
{
...
@@ -1088,7 +1087,7 @@
...
@@ -1088,7 +1087,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
661f
\u
83b2
\u
8239
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方星莲船 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1097,7 +1096,7 @@
...
@@ -1097,7 +1096,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1139,7 +1138,7 @@
...
@@ -1139,7 +1138,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
661f
\u
83b2
\u
8239
"
"zh-CN"
:
"
东方星莲船
"
}
}
},
},
{
{
...
@@ -1190,7 +1189,7 @@
...
@@ -1190,7 +1189,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7075
\u
5f02
\u
4f20
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方灵异传 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1199,7 +1198,7 @@
...
@@ -1199,7 +1198,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou_pc98
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1241,7 +1240,7 @@
...
@@ -1241,7 +1240,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
7075
\u
5f02
\u
4f20
"
"zh-CN"
:
"
东方灵异传
"
}
}
},
},
{
{
...
@@ -1292,7 +1291,7 @@
...
@@ -1292,7 +1291,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
68a6
\u
65f6
\u
7a7a
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方梦时空 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1301,7 +1300,7 @@
...
@@ -1301,7 +1300,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou_pc98
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1343,7 +1342,7 @@
...
@@ -1343,7 +1342,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
68a6
\u
65f6
\u
7a7a
"
"zh-CN"
:
"
东方梦时空
"
}
}
},
},
{
{
...
@@ -1394,7 +1393,7 @@
...
@@ -1394,7 +1393,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5c01
\u
9b54
\u
5f55
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方封魔录 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1403,7 +1402,7 @@
...
@@ -1403,7 +1402,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou_pc98
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1445,7 +1444,7 @@
...
@@ -1445,7 +1444,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5c01
\u
9b54
\u
5f55
"
"zh-CN"
:
"
东方封魔录
"
}
}
},
},
{
{
...
@@ -1496,7 +1495,7 @@
...
@@ -1496,7 +1495,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5e7b
\u
60f3
\u
4e61
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方幻想乡 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1505,7 +1504,7 @@
...
@@ -1505,7 +1504,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou_pc98
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1547,7 +1546,7 @@
...
@@ -1547,7 +1546,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
5e7b
\u
60f3
\u
4e61
"
"zh-CN"
:
"
东方幻想乡
"
}
}
},
},
{
{
...
@@ -1598,7 +1597,7 @@
...
@@ -1598,7 +1597,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
602a
\u
7eee
\u
8c08
\u
8bed
\u
8a00
\u
5305 (
\u
7e41
\u
4f53
\u
4e2d
\u
6587
)"
"zh-CN"
:
"
东方怪绮谈 语言包 (繁体中文
)"
}
}
},
},
{
{
...
@@ -1607,7 +1606,7 @@
...
@@ -1607,7 +1606,7 @@
"zh-CN"
:
"fxt desc"
"zh-CN"
:
"fxt desc"
},
},
"tags"
:
[
"tags"
:
[
"
game
"
"
touhou_pc98
"
],
],
"homepage"
:
"http://www.myacg.cc"
,
"homepage"
:
"http://www.myacg.cc"
,
"author"
:
"ZUN"
,
"author"
:
"ZUN"
,
...
@@ -1649,7 +1648,7 @@
...
@@ -1649,7 +1648,7 @@
"zh-CN"
"zh-CN"
],
],
"name"
:
{
"name"
:
{
"zh-CN"
:
"
\u
4e1c
\u
65b9
\u
602a
\u
7eee
\u
8c08
"
"zh-CN"
:
"
东方怪绮谈
"
}
}
},
},
{
{
...
@@ -1662,8 +1661,7 @@
...
@@ -1662,8 +1661,7 @@
},
},
"category"
:
"game"
,
"category"
:
"game"
,
"tags"
:
[
"tags"
:
[
"game"
,
"yugioh"
"card"
],
],
"locales"
:
[
"locales"
:
[
"zh-CN"
"zh-CN"
...
...
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