Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
srvpro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
srvpro
Commits
69ffdd7e
Commit
69ffdd7e
authored
Jan 01, 2016
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add deck stats util
parent
45c95767
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
181 additions
and
0 deletions
+181
-0
ygopro-deck-stats.js
ygopro-deck-stats.js
+181
-0
No files found.
ygopro-deck-stats.js
0 → 100644
View file @
69ffdd7e
/*
ygopro-deck-stats.js
get card usage from decks
Author: mercury233
License: MIT
读取指定文件夹里所有卡组,得出卡片使用量,生成csv
*/
var
sqlite3
=
require
(
'
sqlite3
'
).
verbose
();
var
fs
=
require
(
'
fs
'
);
var
constants
=
require
(
'
./constants.json
'
);
var
DECKPATH
=
"
S:
\\
deck
\\
replays
"
var
DBFILE
=
"
F:
\\
Works
\\
deck
\\
cards.cdb
"
var
ALL_MAIN_CARDS
=
{};
var
ALL_SIDE_CARDS
=
{};
var
ALL_CARD_DATAS
=
{};
function
add_to_deck
(
deck
,
id
)
{
if
(
deck
[
id
])
{
deck
[
id
]
=
deck
[
id
]
+
1
;
}
else
{
deck
[
id
]
=
1
;
}
}
function
add_to_all_list
(
LIST
,
id
,
use
)
{
if
(
ALL_CARD_DATAS
[
id
].
alias
)
{
id
=
ALL_CARD_DATAS
[
id
].
alias
;
}
if
(
!
LIST
[
id
])
{
LIST
[
id
]
=
{
"
use1
"
:
0
,
"
use2
"
:
0
,
"
use3
"
:
0
};
}
if
(
use
==
1
)
{
LIST
[
id
].
use1
=
LIST
[
id
].
use1
+
1
;
}
else
if
(
use
==
2
)
{
LIST
[
id
].
use2
=
LIST
[
id
].
use2
+
1
;
}
else
{
LIST
[
id
].
use3
=
LIST
[
id
].
use3
+
1
;
}
}
function
read_deck_file
(
filename
)
{
console
.
log
(
"
reading
"
+
filename
);
var
deck_text
=
fs
.
readFileSync
(
DECKPATH
+
"
\\
"
+
filename
,{
encoding
:
"
ASCII
"
})
var
deck_array
=
deck_text
.
split
(
"
\r\n
"
);
var
deck_main
=
{};
var
deck_side
=
{};
var
current_deck
=
deck_main
;
for
(
var
i
in
deck_array
)
{
if
(
deck_array
[
i
]
==
"
!side
"
)
current_deck
=
deck_side
;
var
card
=
parseInt
(
deck_array
[
i
]);
if
(
!
isNaN
(
card
))
{
add_to_deck
(
current_deck
,
card
);
}
}
for
(
var
i
in
deck_main
)
{
add_to_all_list
(
ALL_MAIN_CARDS
,
i
,
deck_main
[
i
]);
}
for
(
var
i
in
deck_side
)
{
add_to_all_list
(
ALL_SIDE_CARDS
,
i
,
deck_side
[
i
]);
}
}
function
load_database
(
callback
)
{
var
db
=
new
sqlite3
.
Database
(
DBFILE
);
db
.
each
(
"
select * from datas,texts where datas.id=texts.id
"
,
function
(
err
,
result
)
{
if
(
err
)
{
console
.
log
(
DBFILE
+
"
:
"
+
err
);
return
;
}
else
{
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TOKEN
)
{
return
;
}
var
card
=
{};
card
.
name
=
result
.
name
;
card
.
alias
=
result
.
alias
;
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_MONSTER
)
{
if
((
result
.
type
&
constants
.
TYPES
.
TYPE_FUSION
)
||
(
result
.
type
&
constants
.
TYPES
.
TYPE_SYNCHRO
)
||
(
result
.
type
&
constants
.
TYPES
.
TYPE_XYZ
))
card
.
type
=
"
额外
"
;
else
card
.
type
=
"
怪兽
"
;
}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_SPELL
){
card
.
type
=
"
魔法
"
;
}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TRAP
){
card
.
type
=
"
陷阱
"
;
}
var
cardTypes
=
[];
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_MONSTER
)
{
cardTypes
.
push
(
"
怪兽
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_SPELL
)
{
cardTypes
.
push
(
"
魔法
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TRAP
)
{
cardTypes
.
push
(
"
陷阱
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_NORMAL
)
{
cardTypes
.
push
(
"
通常
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_EFFECT
)
{
cardTypes
.
push
(
"
效果
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_FUSION
)
{
cardTypes
.
push
(
"
融合
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_RITUAL
)
{
cardTypes
.
push
(
"
仪式
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TRAPMONSTER
)
{
cardTypes
.
push
(
"
陷阱怪兽
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_SPIRIT
)
{
cardTypes
.
push
(
"
灵魂
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_UNION
)
{
cardTypes
.
push
(
"
同盟
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_DUAL
)
{
cardTypes
.
push
(
"
二重
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TUNER
)
{
cardTypes
.
push
(
"
调整
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_SYNCHRO
)
{
cardTypes
.
push
(
"
同调
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TOKEN
)
{
cardTypes
.
push
(
"
衍生物
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_QUICKPLAY
)
{
cardTypes
.
push
(
"
速攻
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_CONTINUOUS
)
{
cardTypes
.
push
(
"
永续
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_EQUIP
)
{
cardTypes
.
push
(
"
装备
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_FIELD
)
{
cardTypes
.
push
(
"
场地
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_COUNTER
)
{
cardTypes
.
push
(
"
反击
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_FLIP
)
{
cardTypes
.
push
(
"
反转
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_TOON
)
{
cardTypes
.
push
(
"
卡通
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_XYZ
)
{
cardTypes
.
push
(
"
超量
"
);}
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_PENDULUM
)
{
cardTypes
.
push
(
"
灵摆
"
);}
card
.
fulltype
=
cardTypes
.
join
(
'
|
'
);
if
(
result
.
type
&
constants
.
TYPES
.
TYPE_MONSTER
)
{
if
(
result
.
level
<=
12
)
{
card
.
level
=
result
.
level
;
}
else
{
//转化为16位,0x01010004,前2位是左刻度,2-4是右刻度,末2位是等级
var
levelHex
=
parseInt
(
result
.
level
,
10
).
toString
(
16
);
card
.
level
=
parseInt
(
levelHex
.
slice
(
-
2
),
16
);
card
.
LScale
=
parseInt
(
levelHex
.
slice
(
-
8
,
-
6
),
16
);
//card.RScale=parseInt(levelHex.slice(-6,-4), 16);
}
}
ALL_CARD_DATAS
[
result
.
id
]
=
card
;
}
},
callback
);
}
function
read_decks
()
{
var
ALL_DECKS
=
fs
.
readdirSync
(
DECKPATH
);
for
(
var
i
in
ALL_DECKS
)
{
var
filename
=
ALL_DECKS
[
i
];
if
(
filename
.
indexOf
(
"
.ydk
"
)
>
0
)
{
read_deck_file
(
filename
);
}
}
output_csv
(
ALL_MAIN_CARDS
,
"
main.csv
"
);
//output_csv(ALL_SIDE_CARDS,"side.csv");
}
function
output_csv
(
list
,
filename
)
{
//console.log(JSON.stringify(list));
var
file
=
fs
.
openSync
(
filename
,
"
w
"
);
for
(
var
i
in
list
)
{
var
card
=
ALL_CARD_DATAS
[
i
];
var
card_usage
=
list
[
i
];
console
.
log
(
"
writing
"
+
card
.
name
);
var
line
=
[];
line
.
push
(
card
.
name
);
line
.
push
(
card
.
type
);
line
.
push
(
card
.
fulltype
);
//line.push(card.level ? card.level : "");
//line.push(card.LScale ? card.LScale : "");
line
.
push
(
card_usage
.
use1
+
card_usage
.
use2
+
card_usage
.
use3
);
line
.
push
(
card_usage
.
use1
);
line
.
push
(
card_usage
.
use2
);
line
.
push
(
card_usage
.
use3
);
var
linetext
=
"
\"
"
+
line
.
join
(
"
\"
,
\"
"
)
+
"
\"\r\n
"
;
fs
.
writeSync
(
file
,
linetext
);
}
}
load_database
(
read_decks
);
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