Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGO DeckAnalyzer
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
JoyJ
YGO DeckAnalyzer
Commits
bc1dac15
Commit
bc1dac15
authored
Jun 29, 2025
by
JoyJ
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added a new rules.txt file that contains all card series rules in a structured format
parent
9c91dc00
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1165 additions
and
1187 deletions
+1165
-1187
YGO_DeckAnalyzer/App.config
YGO_DeckAnalyzer/App.config
+3
-0
YGO_DeckAnalyzer/Properties/Settings.Designer.cs
YGO_DeckAnalyzer/Properties/Settings.Designer.cs
+13
-1
YGO_DeckAnalyzer/Properties/Settings.settings
YGO_DeckAnalyzer/Properties/Settings.settings
+3
-0
YGO_DeckAnalyzer/YGO_DeckAnalyzer.Designer.cs
YGO_DeckAnalyzer/YGO_DeckAnalyzer.Designer.cs
+73
-20
YGO_DeckAnalyzer/YGO_DeckAnalyzer.cs
YGO_DeckAnalyzer/YGO_DeckAnalyzer.cs
+295
-1166
YGO_DeckAnalyzer/YGO_DeckAnalyzer.csproj
YGO_DeckAnalyzer/YGO_DeckAnalyzer.csproj
+5
-0
YGO_DeckAnalyzer/YGO_DeckAnalyzer.resx
YGO_DeckAnalyzer/YGO_DeckAnalyzer.resx
+6
-0
YGO_DeckAnalyzer/rules.txt
YGO_DeckAnalyzer/rules.txt
+767
-0
No files found.
YGO_DeckAnalyzer/App.config
View file @
bc1dac15
...
@@ -47,6 +47,9 @@
...
@@ -47,6 +47,9 @@
<
setting
name
=
"MostOnly"
serializeAs
=
"String"
>
<
setting
name
=
"MostOnly"
serializeAs
=
"String"
>
<
value
>
True
</
value
>
<
value
>
True
</
value
>
</
setting
>
</
setting
>
<
setting
name
=
"IgnoreNum"
serializeAs
=
"String"
>
<
value
>
False
</
value
>
</
setting
>
</
YGO_DeckAnalyzer
.
Properties
.
Settings
>
</
YGO_DeckAnalyzer
.
Properties
.
Settings
>
</
userSettings
>
</
userSettings
>
<
system
.
data
>
<
system
.
data
>
...
...
YGO_DeckAnalyzer/Properties/Settings.Designer.cs
View file @
bc1dac15
...
@@ -12,7 +12,7 @@ namespace YGO_DeckAnalyzer.Properties {
...
@@ -12,7 +12,7 @@ namespace YGO_DeckAnalyzer.Properties {
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
,
"1
6.2
.0.0"
)]
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
,
"1
7.14
.0.0"
)]
internal
sealed
partial
class
Settings
:
global
::
System
.
Configuration
.
ApplicationSettingsBase
{
internal
sealed
partial
class
Settings
:
global
::
System
.
Configuration
.
ApplicationSettingsBase
{
private
static
Settings
defaultInstance
=
((
Settings
)(
global
::
System
.
Configuration
.
ApplicationSettingsBase
.
Synchronized
(
new
Settings
())));
private
static
Settings
defaultInstance
=
((
Settings
)(
global
::
System
.
Configuration
.
ApplicationSettingsBase
.
Synchronized
(
new
Settings
())));
...
@@ -118,5 +118,17 @@ namespace YGO_DeckAnalyzer.Properties {
...
@@ -118,5 +118,17 @@ namespace YGO_DeckAnalyzer.Properties {
this
[
"MostOnly"
]
=
value
;
this
[
"MostOnly"
]
=
value
;
}
}
}
}
[
global
::
System
.
Configuration
.
UserScopedSettingAttribute
()]
[
global
::
System
.
Diagnostics
.
DebuggerNonUserCodeAttribute
()]
[
global
::
System
.
Configuration
.
DefaultSettingValueAttribute
(
"False"
)]
public
bool
IgnoreNum
{
get
{
return
((
bool
)(
this
[
"IgnoreNum"
]));
}
set
{
this
[
"IgnoreNum"
]
=
value
;
}
}
}
}
}
}
YGO_DeckAnalyzer/Properties/Settings.settings
View file @
bc1dac15
...
@@ -26,5 +26,8 @@
...
@@ -26,5 +26,8 @@
<Setting
Name=
"MostOnly"
Type=
"System.Boolean"
Scope=
"User"
>
<Setting
Name=
"MostOnly"
Type=
"System.Boolean"
Scope=
"User"
>
<Value
Profile=
"(Default)"
>
True
</Value>
<Value
Profile=
"(Default)"
>
True
</Value>
</Setting>
</Setting>
<Setting
Name=
"IgnoreNum"
Type=
"System.Boolean"
Scope=
"User"
>
<Value
Profile=
"(Default)"
>
False
</Value>
</Setting>
</Settings>
</Settings>
</SettingsFile>
</SettingsFile>
\ No newline at end of file
YGO_DeckAnalyzer/YGO_DeckAnalyzer.Designer.cs
View file @
bc1dac15
...
@@ -48,6 +48,11 @@
...
@@ -48,6 +48,11 @@
this
.
bwWorker
=
new
System
.
ComponentModel
.
BackgroundWorker
();
this
.
bwWorker
=
new
System
.
ComponentModel
.
BackgroundWorker
();
this
.
statusStrip1
=
new
System
.
Windows
.
Forms
.
StatusStrip
();
this
.
statusStrip1
=
new
System
.
Windows
.
Forms
.
StatusStrip
();
this
.
txtStatus
=
new
System
.
Windows
.
Forms
.
ToolStripStatusLabel
();
this
.
txtStatus
=
new
System
.
Windows
.
Forms
.
ToolStripStatusLabel
();
this
.
btnChooseFile
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
ofdSelectFile
=
new
System
.
Windows
.
Forms
.
OpenFileDialog
();
this
.
fbdSelect
=
new
System
.
Windows
.
Forms
.
FolderBrowserDialog
();
this
.
checkIgnoreNum
=
new
System
.
Windows
.
Forms
.
CheckBox
();
this
.
btnReloadRules
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
statusStrip1
.
SuspendLayout
();
this
.
statusStrip1
.
SuspendLayout
();
this
.
SuspendLayout
();
this
.
SuspendLayout
();
//
//
...
@@ -59,9 +64,9 @@
...
@@ -59,9 +64,9 @@
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
listDecks
.
FormattingEnabled
=
true
;
this
.
listDecks
.
FormattingEnabled
=
true
;
this
.
listDecks
.
ItemHeight
=
12
;
this
.
listDecks
.
ItemHeight
=
12
;
this
.
listDecks
.
Location
=
new
System
.
Drawing
.
Point
(
1
2
,
12
);
this
.
listDecks
.
Location
=
new
System
.
Drawing
.
Point
(
1
0
,
12
);
this
.
listDecks
.
Name
=
"listDecks"
;
this
.
listDecks
.
Name
=
"listDecks"
;
this
.
listDecks
.
Size
=
new
System
.
Drawing
.
Size
(
3
39
,
412
);
this
.
listDecks
.
Size
=
new
System
.
Drawing
.
Size
(
3
54
,
400
);
this
.
listDecks
.
TabIndex
=
0
;
this
.
listDecks
.
TabIndex
=
0
;
this
.
listDecks
.
DragDrop
+=
new
System
.
Windows
.
Forms
.
DragEventHandler
(
this
.
listDecks_DragDrop
);
this
.
listDecks
.
DragDrop
+=
new
System
.
Windows
.
Forms
.
DragEventHandler
(
this
.
listDecks_DragDrop
);
this
.
listDecks
.
DragEnter
+=
new
System
.
Windows
.
Forms
.
DragEventHandler
(
this
.
listDecks_DragEnter
);
this
.
listDecks
.
DragEnter
+=
new
System
.
Windows
.
Forms
.
DragEventHandler
(
this
.
listDecks_DragEnter
);
...
@@ -69,9 +74,9 @@
...
@@ -69,9 +74,9 @@
// btnStart
// btnStart
//
//
this
.
btnStart
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnStart
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnStart
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
365
);
this
.
btnStart
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
356
);
this
.
btnStart
.
Name
=
"btnStart"
;
this
.
btnStart
.
Name
=
"btnStart"
;
this
.
btnStart
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
59
);
this
.
btnStart
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
30
);
this
.
btnStart
.
TabIndex
=
1
;
this
.
btnStart
.
TabIndex
=
1
;
this
.
btnStart
.
Text
=
"让我康康!"
;
this
.
btnStart
.
Text
=
"让我康康!"
;
this
.
btnStart
.
UseVisualStyleBackColor
=
true
;
this
.
btnStart
.
UseVisualStyleBackColor
=
true
;
...
@@ -85,7 +90,7 @@
...
@@ -85,7 +90,7 @@
// btnChooseStringsConf
// btnChooseStringsConf
//
//
this
.
btnChooseStringsConf
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnChooseStringsConf
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnChooseStringsConf
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
54
);
this
.
btnChooseStringsConf
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
54
);
this
.
btnChooseStringsConf
.
Name
=
"btnChooseStringsConf"
;
this
.
btnChooseStringsConf
.
Name
=
"btnChooseStringsConf"
;
this
.
btnChooseStringsConf
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
btnChooseStringsConf
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
btnChooseStringsConf
.
TabIndex
=
2
;
this
.
btnChooseStringsConf
.
TabIndex
=
2
;
...
@@ -96,7 +101,7 @@
...
@@ -96,7 +101,7 @@
// txtStringsConf
// txtStringsConf
//
//
this
.
txtStringsConf
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
txtStringsConf
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
txtStringsConf
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
27
);
this
.
txtStringsConf
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
27
);
this
.
txtStringsConf
.
Name
=
"txtStringsConf"
;
this
.
txtStringsConf
.
Name
=
"txtStringsConf"
;
this
.
txtStringsConf
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
21
);
this
.
txtStringsConf
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
21
);
this
.
txtStringsConf
.
TabIndex
=
3
;
this
.
txtStringsConf
.
TabIndex
=
3
;
...
@@ -106,7 +111,7 @@
...
@@ -106,7 +111,7 @@
//
//
this
.
label1
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
label1
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
3
55
,
12
);
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
3
70
,
12
);
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
101
,
12
);
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
101
,
12
);
this
.
label1
.
TabIndex
=
4
;
this
.
label1
.
TabIndex
=
4
;
...
@@ -116,7 +121,7 @@
...
@@ -116,7 +121,7 @@
//
//
this
.
label2
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
label2
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
3
55
,
81
);
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
3
70
,
81
);
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
83
,
12
);
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
83
,
12
);
this
.
label2
.
TabIndex
=
7
;
this
.
label2
.
TabIndex
=
7
;
...
@@ -125,7 +130,7 @@
...
@@ -125,7 +130,7 @@
// txtCardsCdb
// txtCardsCdb
//
//
this
.
txtCardsCdb
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
txtCardsCdb
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
txtCardsCdb
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
96
);
this
.
txtCardsCdb
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
96
);
this
.
txtCardsCdb
.
Name
=
"txtCardsCdb"
;
this
.
txtCardsCdb
.
Name
=
"txtCardsCdb"
;
this
.
txtCardsCdb
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
21
);
this
.
txtCardsCdb
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
21
);
this
.
txtCardsCdb
.
TabIndex
=
6
;
this
.
txtCardsCdb
.
TabIndex
=
6
;
...
@@ -134,7 +139,7 @@
...
@@ -134,7 +139,7 @@
// btnChooseCardsCdb
// btnChooseCardsCdb
//
//
this
.
btnChooseCardsCdb
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnChooseCardsCdb
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnChooseCardsCdb
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
123
);
this
.
btnChooseCardsCdb
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
123
);
this
.
btnChooseCardsCdb
.
Name
=
"btnChooseCardsCdb"
;
this
.
btnChooseCardsCdb
.
Name
=
"btnChooseCardsCdb"
;
this
.
btnChooseCardsCdb
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
btnChooseCardsCdb
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
btnChooseCardsCdb
.
TabIndex
=
5
;
this
.
btnChooseCardsCdb
.
TabIndex
=
5
;
...
@@ -155,9 +160,9 @@
...
@@ -155,9 +160,9 @@
// btnClear
// btnClear
//
//
this
.
btnClear
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnClear
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnClear
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
301
);
this
.
btnClear
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
329
);
this
.
btnClear
.
Name
=
"btnClear"
;
this
.
btnClear
.
Name
=
"btnClear"
;
this
.
btnClear
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
58
);
this
.
btnClear
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
24
);
this
.
btnClear
.
TabIndex
=
8
;
this
.
btnClear
.
TabIndex
=
8
;
this
.
btnClear
.
Text
=
"全部清空"
;
this
.
btnClear
.
Text
=
"全部清空"
;
this
.
btnClear
.
UseVisualStyleBackColor
=
true
;
this
.
btnClear
.
UseVisualStyleBackColor
=
true
;
...
@@ -167,7 +172,7 @@
...
@@ -167,7 +172,7 @@
//
//
this
.
checkAllowMixDeck
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkAllowMixDeck
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkAllowMixDeck
.
AutoSize
=
true
;
this
.
checkAllowMixDeck
.
AutoSize
=
true
;
this
.
checkAllowMixDeck
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
152
);
this
.
checkAllowMixDeck
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
152
);
this
.
checkAllowMixDeck
.
Name
=
"checkAllowMixDeck"
;
this
.
checkAllowMixDeck
.
Name
=
"checkAllowMixDeck"
;
this
.
checkAllowMixDeck
.
Size
=
new
System
.
Drawing
.
Size
(
132
,
16
);
this
.
checkAllowMixDeck
.
Size
=
new
System
.
Drawing
.
Size
(
132
,
16
);
this
.
checkAllowMixDeck
.
TabIndex
=
9
;
this
.
checkAllowMixDeck
.
TabIndex
=
9
;
...
@@ -179,7 +184,7 @@
...
@@ -179,7 +184,7 @@
//
//
this
.
checkOutputDescription
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkOutputDescription
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkOutputDescription
.
AutoSize
=
true
;
this
.
checkOutputDescription
.
AutoSize
=
true
;
this
.
checkOutputDescription
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
174
);
this
.
checkOutputDescription
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
174
);
this
.
checkOutputDescription
.
Name
=
"checkOutputDescription"
;
this
.
checkOutputDescription
.
Name
=
"checkOutputDescription"
;
this
.
checkOutputDescription
.
Size
=
new
System
.
Drawing
.
Size
(
96
,
16
);
this
.
checkOutputDescription
.
Size
=
new
System
.
Drawing
.
Size
(
96
,
16
);
this
.
checkOutputDescription
.
TabIndex
=
10
;
this
.
checkOutputDescription
.
TabIndex
=
10
;
...
@@ -191,7 +196,7 @@
...
@@ -191,7 +196,7 @@
//
//
this
.
checkNoFile
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkNoFile
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkNoFile
.
AutoSize
=
true
;
this
.
checkNoFile
.
AutoSize
=
true
;
this
.
checkNoFile
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
218
);
this
.
checkNoFile
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
218
);
this
.
checkNoFile
.
Name
=
"checkNoFile"
;
this
.
checkNoFile
.
Name
=
"checkNoFile"
;
this
.
checkNoFile
.
Size
=
new
System
.
Drawing
.
Size
(
108
,
16
);
this
.
checkNoFile
.
Size
=
new
System
.
Drawing
.
Size
(
108
,
16
);
this
.
checkNoFile
.
TabIndex
=
11
;
this
.
checkNoFile
.
TabIndex
=
11
;
...
@@ -203,7 +208,7 @@
...
@@ -203,7 +208,7 @@
//
//
this
.
checkMostOnly
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkMostOnly
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkMostOnly
.
AutoSize
=
true
;
this
.
checkMostOnly
.
AutoSize
=
true
;
this
.
checkMostOnly
.
Location
=
new
System
.
Drawing
.
Point
(
3
57
,
196
);
this
.
checkMostOnly
.
Location
=
new
System
.
Drawing
.
Point
(
3
72
,
196
);
this
.
checkMostOnly
.
Name
=
"checkMostOnly"
;
this
.
checkMostOnly
.
Name
=
"checkMostOnly"
;
this
.
checkMostOnly
.
Size
=
new
System
.
Drawing
.
Size
(
144
,
16
);
this
.
checkMostOnly
.
Size
=
new
System
.
Drawing
.
Size
(
144
,
16
);
this
.
checkMostOnly
.
TabIndex
=
12
;
this
.
checkMostOnly
.
TabIndex
=
12
;
...
@@ -220,11 +225,12 @@
...
@@ -220,11 +225,12 @@
//
//
// statusStrip1
// statusStrip1
//
//
this
.
statusStrip1
.
ImageScalingSize
=
new
System
.
Drawing
.
Size
(
40
,
40
);
this
.
statusStrip1
.
Items
.
AddRange
(
new
System
.
Windows
.
Forms
.
ToolStripItem
[]
{
this
.
statusStrip1
.
Items
.
AddRange
(
new
System
.
Windows
.
Forms
.
ToolStripItem
[]
{
this
.
txtStatus
});
this
.
txtStatus
});
this
.
statusStrip1
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
42
8
);
this
.
statusStrip1
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
38
8
);
this
.
statusStrip1
.
Name
=
"statusStrip1"
;
this
.
statusStrip1
.
Name
=
"statusStrip1"
;
this
.
statusStrip1
.
Size
=
new
System
.
Drawing
.
Size
(
5
04
,
22
);
this
.
statusStrip1
.
Size
=
new
System
.
Drawing
.
Size
(
5
19
,
22
);
this
.
statusStrip1
.
TabIndex
=
13
;
this
.
statusStrip1
.
TabIndex
=
13
;
this
.
statusStrip1
.
Text
=
"statusStrip1"
;
this
.
statusStrip1
.
Text
=
"statusStrip1"
;
//
//
...
@@ -234,11 +240,53 @@
...
@@ -234,11 +240,53 @@
this
.
txtStatus
.
Size
=
new
System
.
Drawing
.
Size
(
42
,
17
);
this
.
txtStatus
.
Size
=
new
System
.
Drawing
.
Size
(
42
,
17
);
this
.
txtStatus
.
Text
=
"status"
;
this
.
txtStatus
.
Text
=
"status"
;
//
//
// btnChooseFile
//
this
.
btnChooseFile
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnChooseFile
.
Location
=
new
System
.
Drawing
.
Point
(
372
,
294
);
this
.
btnChooseFile
.
Name
=
"btnChooseFile"
;
this
.
btnChooseFile
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
28
);
this
.
btnChooseFile
.
TabIndex
=
14
;
this
.
btnChooseFile
.
Text
=
"选择文件"
;
this
.
btnChooseFile
.
UseVisualStyleBackColor
=
true
;
this
.
btnChooseFile
.
Click
+=
new
System
.
EventHandler
(
this
.
btnChooseFile_Click
);
//
// ofdSelectFile
//
this
.
ofdSelectFile
.
Filter
=
"YDK 文件|*.ydk|所有文件|*.*"
;
this
.
ofdSelectFile
.
Multiselect
=
true
;
//
// checkIgnoreNum
//
this
.
checkIgnoreNum
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
checkIgnoreNum
.
AutoSize
=
true
;
this
.
checkIgnoreNum
.
Location
=
new
System
.
Drawing
.
Point
(
372
,
238
);
this
.
checkIgnoreNum
.
Name
=
"checkIgnoreNum"
;
this
.
checkIgnoreNum
.
Size
=
new
System
.
Drawing
.
Size
(
108
,
16
);
this
.
checkIgnoreNum
.
TabIndex
=
15
;
this
.
checkIgnoreNum
.
Text
=
"不关心系列占比"
;
this
.
checkIgnoreNum
.
UseVisualStyleBackColor
=
true
;
this
.
checkIgnoreNum
.
CheckedChanged
+=
new
System
.
EventHandler
(
this
.
checkIgnoreNum_CheckedChanged
);
//
// btnReloadRules
//
this
.
btnReloadRules
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnReloadRules
.
Location
=
new
System
.
Drawing
.
Point
(
372
,
260
);
this
.
btnReloadRules
.
Name
=
"btnReloadRules"
;
this
.
btnReloadRules
.
Size
=
new
System
.
Drawing
.
Size
(
135
,
28
);
this
.
btnReloadRules
.
TabIndex
=
16
;
this
.
btnReloadRules
.
Text
=
"重载规则集"
;
this
.
btnReloadRules
.
UseVisualStyleBackColor
=
true
;
this
.
btnReloadRules
.
Click
+=
new
System
.
EventHandler
(
this
.
btnReloadRules_Click
);
//
// YGODeckAnalyzer
// YGODeckAnalyzer
//
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
504
,
450
);
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
519
,
410
);
this
.
Controls
.
Add
(
this
.
btnReloadRules
);
this
.
Controls
.
Add
(
this
.
checkIgnoreNum
);
this
.
Controls
.
Add
(
this
.
btnChooseFile
);
this
.
Controls
.
Add
(
this
.
statusStrip1
);
this
.
Controls
.
Add
(
this
.
statusStrip1
);
this
.
Controls
.
Add
(
this
.
checkMostOnly
);
this
.
Controls
.
Add
(
this
.
checkMostOnly
);
this
.
Controls
.
Add
(
this
.
checkNoFile
);
this
.
Controls
.
Add
(
this
.
checkNoFile
);
...
@@ -254,7 +302,7 @@
...
@@ -254,7 +302,7 @@
this
.
Controls
.
Add
(
this
.
btnStart
);
this
.
Controls
.
Add
(
this
.
btnStart
);
this
.
Controls
.
Add
(
this
.
listDecks
);
this
.
Controls
.
Add
(
this
.
listDecks
);
this
.
Name
=
"YGODeckAnalyzer"
;
this
.
Name
=
"YGODeckAnalyzer"
;
this
.
Text
=
"游戏王卡组统计器 v1.
3e
by JoyJ"
;
this
.
Text
=
"游戏王卡组统计器 v1.
4
by JoyJ"
;
this
.
Load
+=
new
System
.
EventHandler
(
this
.
Form1_Load
);
this
.
Load
+=
new
System
.
EventHandler
(
this
.
Form1_Load
);
this
.
statusStrip1
.
ResumeLayout
(
false
);
this
.
statusStrip1
.
ResumeLayout
(
false
);
this
.
statusStrip1
.
PerformLayout
();
this
.
statusStrip1
.
PerformLayout
();
...
@@ -285,6 +333,11 @@
...
@@ -285,6 +333,11 @@
private
System
.
ComponentModel
.
BackgroundWorker
bwWorker
;
private
System
.
ComponentModel
.
BackgroundWorker
bwWorker
;
private
System
.
Windows
.
Forms
.
StatusStrip
statusStrip1
;
private
System
.
Windows
.
Forms
.
StatusStrip
statusStrip1
;
private
System
.
Windows
.
Forms
.
ToolStripStatusLabel
txtStatus
;
private
System
.
Windows
.
Forms
.
ToolStripStatusLabel
txtStatus
;
private
System
.
Windows
.
Forms
.
Button
btnChooseFile
;
private
System
.
Windows
.
Forms
.
OpenFileDialog
ofdSelectFile
;
private
System
.
Windows
.
Forms
.
FolderBrowserDialog
fbdSelect
;
private
System
.
Windows
.
Forms
.
CheckBox
checkIgnoreNum
;
private
System
.
Windows
.
Forms
.
Button
btnReloadRules
;
}
}
}
}
YGO_DeckAnalyzer/YGO_DeckAnalyzer.cs
View file @
bc1dac15
...
@@ -11,1127 +11,186 @@ namespace YGO_DeckAnalyzer
...
@@ -11,1127 +11,186 @@ namespace YGO_DeckAnalyzer
{
{
public
partial
class
YGODeckAnalyzer
:
Form
public
partial
class
YGODeckAnalyzer
:
Form
{
{
// 用于存储从rules.txt读取的规则
private
Dictionary
<
long
,
List
<
string
>>
cardSeriesRules
=
new
Dictionary
<
long
,
List
<
string
>>();
private
Dictionary
<
string
,
string
>
customSeriesNames
=
new
Dictionary
<
string
,
string
>();
private
Dictionary
<
string
,
string
>
seriesRenames
=
new
Dictionary
<
string
,
string
>();
private
HashSet
<
string
>
seriesToDelete
=
new
HashSet
<
string
>();
public
YGODeckAnalyzer
()
public
YGODeckAnalyzer
()
{
{
this
.
InitializeComponent
();
this
.
InitializeComponent
();
// 初始化时加载规则文件
LoadRulesFromFile
();
}
}
private
void
btnStart_Click
(
object
sender
,
EventArgs
e
)
private
Dictionary
<
string
,
int
>
seriesPriorities
=
new
Dictionary
<
string
,
int
>();
{
// 从rules.txt加载规则
btnStart
.
Enabled
=
false
;
private
void
LoadRulesFromFile
()
if
(!
checkNoFile
.
Checked
)
{
{
if
(
this
.
sfdSave
.
ShowDialog
()
!=
DialogResult
.
OK
)
string
rulesFilePath
=
Path
.
Combine
(
Application
.
StartupPath
,
"rules.txt"
);
if
(!
File
.
Exists
(
rulesFilePath
))
{
{
MessageBox
.
Show
(
"找不到规则文件: rules.txt"
,
"错误"
,
MessageBoxButtons
.
OK
,
MessageBoxIcon
.
Error
);
return
;
return
;
}
}
File
.
Delete
(
this
.
sfdSave
.
FileName
);
}
bwWorker
.
RunWorkerAsync
();
}
private
string
SpecialProcess_SeriesJudge
(
long
card
)
try
{
{
switch
(
card
)
string
[]
lines
=
File
.
ReadAllLines
(
rulesFilePath
,
Encoding
.
UTF8
);
{
foreach
(
string
line
in
lines
)
case
21362970
:
case
67757079
:
case
94878265
:
return
"00毛扎"
;
case
32465539
:
case
94344242
:
case
68950538
:
case
58600555
:
case
12615446
:
case
85004150
:
case
83048208
:
return
"电子光虫"
;
case
64631466
:
case
94259633
:
case
15173384
:
case
41426869
:
return
"0110"
;
//纳祭
case
22339232
:
case
32274490
:
case
36021814
:
case
37675138
:
case
40991587
:
case
57473560
:
case
90243945
:
return
"00白骨"
;
case
26400609
:
case
27415516
:
case
53797637
:
case
53804307
:
case
89185742
:
case
89399912
:
case
90411554
:
case
91020571
:
case
27770341
:
case
45725480
:
return
"00征龙"
;
case
46947713
:
case
88093706
:
case
71278040
:
case
18789533
:
return
"0101"
;
//各类码语者
case
5560911
:
case
28985331
:
case
7409792
:
case
9411399
:
case
3431737
:
case
9742784
:
case
25472513
:
case
67723438
:
case
65536818
:
case
53325667
:
case
94973028
:
case
74644400
:
case
72291078
:
case
75944053
:
return
"00均卡"
;
case
5697558
:
return
"00ED"
;
//地中
case
86120751
:
case
97973692
:
case
74063034
:
case
47679935
:
case
458748
:
case
47457347
:
return
"0召唤师"
;
case
71564252
:
case
15397015
:
case
71197066
:
case
40605147
:
case
41420027
:
case
84749824
:
case
36975314
:
case
5851097
:
case
63845230
:
case
36584821
:
case
30241314
:
case
35059553
:
case
81674782
:
return
"BEAT"
;
case
41373230
:
case
1984618
:
case
68468459
:
return
"0145"
;
//教导
case
39185163
:
case
66570171
:
case
4064256
:
case
92964816
:
return
"不死世界"
;
case
11110587
:
return
"00割草"
;
case
11827244
:
return
"003B"
;
//圆融魔术-真红眼
case
31443476
:
return
"010F"
;
//速攻旋转 - 弹丸
case
53936268
:
return
"0103"
;
//个人欺骗攻击 - 骚灵
case
30603688
:
case
7084129
:
case
1784686
:
case
73616671
:
case
47222536
:
case
7922915
:
case
48680970
:
case
96471335
:
case
85551711
:
case
75380687
:
case
41721210
:
return
"10A2"
;
//黑魔导
case
15180041
:
case
19502505
:
case
41175645
:
case
25290459
:
case
90500169
:
return
"0041"
;
//LV - 无LV的卡
case
18940556
:
case
41782653
:
case
38572779
:
case
44335251
:
case
36042004
:
case
38179121
:
return
"00恐龙"
;
case
79814787
:
case
71039903
:
case
72855441
:
case
34627841
:
case
45644898
:
case
8240199
:
case
36734924
:
case
88241506
:
case
2783661
:
case
29432790
:
case
50371210
:
case
56920308
:
case
93437091
:
case
17655904
:
case
57043986
:
return
"00DD"
;
//青眼
case
11012154
:
case
6990577
:
case
43411769
:
case
79905468
:
case
84899094
:
case
59537380
:
case
13143275
:
case
86148577
:
case
87571563
:
case
50186558
:
case
47393199
:
case
11908584
:
return
"0守护龙"
;
case
37694547
:
return
"0007"
;
//齿车街 - 古代机械
case
10000040
:
case
10000000
:
case
10000010
:
case
10000020
:
return
"0三幻神"
;
case
87116928
:
case
79229522
:
return
"1093"
;
//电子龙 - 嵌合
case
67831115
:
case
27705190
:
case
89320376
:
return
"0104"
;
//机怪虫 - 几张机怪虫相关星遗物
case
36468556
:
case
91623717
:
case
18252559
:
case
24068492
:
case
27053506
:
return
"BURN"
;
case
2819435
:
return
"00FA"
;
//幻煌
case
30012506
:
case
77411244
:
case
3405259
:
case
1561110
:
return
"0ABC"
;
case
51126152
:
case
52481437
:
case
13647631
:
case
88875132
:
case
24919805
:
case
76136345
:
case
25274141
:
case
26096328
:
return
"00列车"
;
case
92379223
:
case
31434645
:
return
"0黄金国"
;
case
53855409
:
case
96363153
:
case
37675907
:
case
50091196
:
case
20932152
:
case
80457744
:
return
"00废二"
;
case
89397517
:
return
"00A0"
;
//传说的骑士->传说之龙
case
26293219
:
case
99899504
:
case
63804806
:
return
"0骷髅头"
;
case
90764875
:
case
64379261
:
case
37984162
:
case
84401683
:
case
37168514
:
return
"00蛇头"
;
case
93130021
:
case
10992251
:
case
10642488
:
case
14089428
:
case
5494820
:
case
14291024
:
return
"0胜利蛇"
;
case
62340868
:
case
25955164
:
case
98434877
:
case
25833572
:
return
"属性魔神"
;
case
36562627
:
case
49511705
:
case
96012004
:
case
70050374
:
case
28112535
:
case
76728962
:
case
3549275
:
case
39454112
:
case
93078761
:
return
"00赌博"
;
case
81171949
:
return
"头奖壶7"
;
case
6853254
:
return
"00DD0巨神龙"
;
case
6075801
:
case
33282498
:
case
33460840
:
case
60681103
:
case
69868555
:
case
87835759
:
return
"0巨神龙"
;
case
4148264
:
case
58012707
:
return
"0G战队"
;
case
899287
:
case
14512825
:
case
41916534
:
case
45072394
:
case
46294982
:
case
72283691
:
case
73405179
:
case
78527720
:
return
"00金宫"
;
case
59160188
:
case
50383626
:
case
29424328
:
case
23898021
:
case
25643346
:
case
86377375
:
return
"黯黑世界"
;
case
24096499
:
case
36318200
:
case
77797992
:
case
97317530
:
return
"森之圣兽"
;
case
28118128
:
case
92729410
:
case
39972129
:
return
"00子狸"
;
case
80208158
:
case
15574615
:
case
16796157
:
case
43791861
:
case
79185500
:
return
"00罗宾"
;
case
8198712
:
case
32828635
:
case
69217334
:
case
95612049
:
case
81306186
:
case
59913418
:
case
72426662
:
case
86124104
:
return
"世界末日"
;
case
95308449
:
return
"0倒计时"
;
case
94212438
:
case
67287533
:
case
31893528
:
case
30170981
:
case
94772232
:
case
40771118
:
case
14386013
:
case
16625614
:
return
"0通灵盘"
;
case
93151201
:
case
84530620
:
case
15510988
:
case
70797118
:
case
57019473
:
case
21524779
:
case
27217742
:
return
"雷电家族"
;
case
75917088
:
case
2316186
:
case
72709014
:
case
74270067
:
case
58015506
:
return
"王女试炼"
;
case
440556
:
case
80727036
:
case
7500772
:
case
50449881
:
case
50532786
:
case
70655556
:
case
11954712
:
case
23536866
:
case
51227866
:
case
17201174
:
case
67111213
:
case
43138260
:
case
70101178
:
case
71923655
:
case
20838380
:
case
2584136
:
case
32393580
:
case
84224627
:
case
14306092
:
case
5014629
:
case
28593363
:
case
49221191
:
case
37798171
:
case
44223284
:
case
21954587
:
case
34290067
:
case
93830681
:
case
70156946
:
case
69155991
:
case
47840168
:
case
20358953
:
case
71015787
:
case
13429800
:
case
51254277
:
case
11845050
:
case
10532969
:
case
25484449
:
case
64319467
:
case
17643265
:
case
7150545
:
case
63193879
:
case
37792478
:
case
87047161
:
case
23672629
:
case
59479050
:
case
31320433
:
case
37279508
:
case
65676461
:
return
"00鲨鱼"
;
case
77506119
:
case
49389523
:
case
63595262
:
case
64047146
:
case
13995824
:
case
10321588
:
case
20351153
:
case
58807980
:
case
58685438
:
case
22318971
:
return
"0独角兽"
;
case
58901502
:
case
63364266
:
case
59255742
:
case
84305651
:
case
98637386
:
case
7391448
:
return
"00御用"
;
case
3070049
:
case
67675300
:
case
73659078
:
case
15893860
:
case
32750510
:
case
24661486
:
return
"冰指示物"
;
case
61802346
:
case
50920465
:
case
43694481
:
case
96565487
:
case
28348537
:
case
51706604
:
return
"00雪暴"
;
case
95929069
:
case
68535320
:
case
16223761
:
return
"冰火手"
;
case
49003308
:
case
9053187
:
case
43793530
:
case
39674352
:
case
53776525
:
return
"魔蜥义豪"
;
case
39389320
:
case
42233477
:
case
78621186
:
case
40453765
:
case
20394040
:
return
"0野蛮人"
;
case
20765952
:
case
22610082
:
case
29549364
:
case
57882509
:
case
56948373
:
case
82432018
:
case
94377247
:
case
49064413
:
case
48948935
:
return
"假面魔兽"
;
case
8508055
:
case
55550921
:
case
82452993
:
case
3810071
:
case
49814180
:
case
96458440
:
case
97570038
:
return
"00格斗"
;
case
84814897
:
case
91597389
:
case
87798440
:
case
7369217
:
case
87564935
:
case
8964854
:
case
63676256
:
case
59364406
:
case
47415292
:
case
31768112
:
case
12965761
:
case
69456283
:
case
11678191
:
case
72083436
:
case
11743119
:
case
99249638
:
case
26931058
:
case
39778366
:
case
19086954
:
case
46181000
:
case
85359414
:
case
47693640
:
case
57062206
:
return
"00同盟"
;
case
96029574
:
case
95750695
:
case
91798373
:
case
81601517
:
case
19041767
:
case
26120084
:
case
16984449
:
return
"00二重"
;
case
80476891
:
case
55100740
:
case
44088292
:
case
38026562
:
case
18993198
:
return
"0化合兽"
;
case
99173029
:
case
92394653
:
case
92200612
:
case
90365482
:
case
82841979
:
case
74115234
:
case
73055622
:
case
66815913
:
case
52900000
:
case
48716139
:
case
43543777
:
case
43378076
:
case
39817919
:
case
37406863
:
case
32181268
:
case
30461781
:
case
25415052
:
case
24701235
:
case
16889337
:
case
9553721
:
case
6544078
:
case
1200843
:
case
276357
:
return
"00灵魂"
;
case
42352091
:
case
79747096
:
case
4019153
:
case
15232745
:
case
42230449
:
case
78625448
:
case
77402960
:
case
41418852
:
return
"源数之门"
;
}
return
null
;
}
private
void
AddCustomSeries
(
ref
Dictionary
<
string
,
string
>
series
)
{
{
series
.
Add
(
"00恐龙"
,
"恐龙"
);
string
trimmedLine
=
line
.
Trim
();
series
.
Add
(
"0ABC"
,
"ABC"
);
series
.
Add
(
"BEAT"
,
"METABEAT"
);
series
.
Add
(
"不死世界"
,
"不死世界"
);
series
.
Add
(
"00割草"
,
"割草"
);
series
.
Add
(
"00均卡"
,
"均卡(LINK/同调)"
);
series
.
Add
(
"0守护龙"
,
"守护龙"
);
series
.
Add
(
"0三幻神"
,
"三幻神"
);
series
.
Add
(
"BURN"
,
"烧血"
);
series
.
Add
(
"00列车"
,
"列车"
);
series
.
Add
(
"0召唤师"
,
"召唤师"
);
series
.
Add
(
"00废二"
,
"废二"
);
series
.
Add
(
"00幻魔"
,
"幻魔"
);
series
.
Add
(
"00征龙"
,
"征龙"
);
series
.
Add
(
"00白骨"
,
"白骨"
);
series
.
Add
(
"电子光虫"
,
"电子光虫"
);
series
.
Add
(
"00毛扎"
,
"毛扎"
);
series
.
Add
(
"0骷髅头"
,
"燃烧骷髅头"
);
series
.
Add
(
"00蛇头"
,
"蛇头"
);
series
.
Add
(
"0胜利蛇"
,
"胜利蛇"
);
series
.
Add
(
"属性魔神"
,
"门之守护神"
);
series
.
Add
(
"00赌博"
,
"骰子与硬币"
);
series
.
Add
(
"头奖壶7"
,
"头奖壶"
);
series
.
Add
(
"0巨神龙"
,
"巨神龙"
);
series
.
Add
(
"0G战队"
,
"G战队"
);
series
.
Add
(
"00金宫"
,
"急流山的金宫"
);
series
.
Add
(
"黯黑世界"
,
"黯黑世界"
);
series
.
Add
(
"森之圣兽"
,
"森之圣兽"
);
series
.
Add
(
"00子狸"
,
"子狸"
);
series
.
Add
(
"00罗宾"
,
"星斗罗宾"
);
series
.
Add
(
"世界末日"
,
"世界末日"
);
series
.
Add
(
"0倒计时"
,
"倒计时"
);
series
.
Add
(
"0通灵盘"
,
"通灵盘"
);
series
.
Add
(
"雷电家族"
,
"雷电家族"
);
series
.
Add
(
"王女试炼"
,
"王女试炼"
);
series
.
Add
(
"00鲨鱼"
,
"鲨"
);
series
.
Add
(
"0独角兽"
,
"独角兽"
);
series
.
Add
(
"00御用"
,
"御用"
);
series
.
Add
(
"冰指示物"
,
"冰指示物"
);
series
.
Add
(
"00雪暴"
,
"雪暴"
);
series
.
Add
(
"0冰火手"
,
"冰火手"
);
series
.
Add
(
"魔蜥义豪"
,
"魔蜥义豪"
);
series
.
Add
(
"0野蛮人"
,
"野蛮人"
);
series
.
Add
(
"假面魔兽"
,
"假面魔兽"
);
series
.
Add
(
"00格斗"
,
"格斗武僧"
);
series
.
Add
(
"00同盟"
,
"各种同盟均"
);
series
.
Add
(
"00二重"
,
"各种二重均"
);
series
.
Add
(
"00灵魂"
,
"各种灵魂均"
);
series
.
Add
(
"0化合兽"
,
"化合兽"
);
series
.
Add
(
"源数之门"
,
"源数之门"
);
}
private
Dictionary
<
string
,
string
>
SpecialProcess
(
Dictionary
<
string
,
string
>
series
)
// 跳过注释行和空行
{
if
(
string
.
IsNullOrEmpty
(
trimmedLine
)
||
trimmedLine
.
StartsWith
(
"#"
))
this
.
AddCustomSeries
(
ref
series
)
;
continue
;
if
(
series
.
Keys
.
Contains
(
"004B"
))
// 解析规则
{
string
[]
parts
=
trimmedLine
.
Split
(
'|'
);
series
[
"004B"
]
=
"极星"
;
if
(
parts
.
Length
<
2
)
}
continue
;
if
(
series
.
Keys
.
Contains
(
"010E"
))
//进化药
{
string
command
=
parts
[
0
].
Trim
();
series
[
"010E"
]
=
"恐龙"
;
}
switch
(
command
)
if
(
series
.
Keys
.
Contains
(
"00B9"
))
{
series
[
"00B9"
]
=
"火山"
;
}
if
(
series
.
Keys
.
Contains
(
"0125"
))
{
series
[
"0125"
]
=
null
;
//笑容
}
if
(
series
.
Keys
.
Contains
(
"00B6"
))
{
series
[
"00B6"
]
=
null
;
//外神
}
if
(
series
.
Keys
.
Contains
(
"00B7"
))
{
series
[
"00B7"
]
=
null
;
//古神
}
if
(
series
.
Keys
.
Contains
(
"00B8"
))
{
series
[
"00B8"
]
=
null
;
//旧神
}
if
(
series
.
Keys
.
Contains
(
"1017"
))
{
series
[
"1017"
]
=
null
;
//同调士
}
if
(
series
.
Keys
.
Contains
(
"00C2"
))
{
series
[
"00C2"
]
=
null
;
//动力工具
}
if
(
series
.
Keys
.
Contains
(
"0123"
))
{
series
[
"0123"
]
=
"蔷薇龙"
;
//蔷薇
}
if
(
series
.
Keys
.
Contains
(
"007E"
))
{
series
[
"007E"
]
=
"霍普"
;
}
if
(
series
.
Keys
.
Contains
(
"00A0"
))
{
series
[
"00A0"
]
=
"传说之龙"
;
//传说的骑士
}
if
(
series
.
Keys
.
Contains
(
"2017"
))
{
series
[
"2017"
]
=
null
;
//同调龙
}
if
(
series
.
Keys
.
Contains
(
"0061"
))
{
series
[
"0061"
]
=
"忍者"
;
}
if
(
series
.
Keys
.
Contains
(
"001E"
))
{
series
[
"001E"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"001F"
))
{
series
[
"001F"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"0007"
))
{
series
[
"0007"
]
=
"古代机械"
;
}
if
(
series
.
Keys
.
Contains
(
"00A3"
))
{
series
[
"00A3"
]
=
null
;
//星尘
}
if
(
series
.
Keys
.
Contains
(
"011D"
))
{
series
[
"011D"
]
=
null
;
//禁忌的
}
if
(
series
.
Keys
.
Contains
(
"0073"
))
{
series
[
"0073"
]
=
null
;
//超量
}
if
(
series
.
Keys
.
Contains
(
"0110"
))
{
series
[
"0110"
]
=
"纳祭"
;
}
if
(
series
.
Keys
.
Contains
(
"0066"
))
{
series
[
"0066"
]
=
"废二"
;
}
if
(
series
.
Keys
.
Contains
(
"0119"
))
{
series
[
"0119"
]
=
"炎兽"
;
}
if
(
series
.
Keys
.
Contains
(
"0118"
))
{
series
[
"0118"
]
=
null
;
}
if
(
series
.
Keys
.
Contains
(
"0101"
))
{
series
[
"0101"
]
=
"电子界"
;
}
if
(
series
.
Keys
.
Contains
(
"0065"
))
{
series
[
"0065"
]
=
"入魔"
;
}
if
(
series
.
Keys
.
Contains
(
"00DB"
))
{
series
[
"00DB"
]
=
"幻影骑士团"
;
}
if
(
series
.
Keys
.
Contains
(
"00C5"
))
{
series
[
"00C5"
]
=
"狱火机"
;
}
if
(
series
.
Keys
.
Contains
(
"004C"
))
{
series
[
"004C"
]
=
null
;
//落穴
}
if
(
series
.
Keys
.
Contains
(
"0040"
))
{
series
[
"0040"
]
=
"艾克佐迪亚"
;
}
if
(
series
.
Keys
.
Contains
(
"00AB"
))
{
series
[
"00AB"
]
=
"文具人"
;
}
if
(
series
.
Keys
.
Contains
(
"010D"
))
{
series
[
"010D"
]
=
"魔导兽"
;
}
if
(
series
.
Keys
.
Contains
(
"0099"
))
{
series
[
"0099"
]
=
"魔术师"
;
}
if
(
series
.
Keys
.
Contains
(
"1002"
))
{
series
[
"1002"
]
=
"次世代"
;
}
if
(
series
.
Keys
.
Contains
(
"3008"
))
{
series
[
"3008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"5008"
))
{
series
[
"5008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"6008"
))
{
series
[
"6008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"A008"
))
{
series
[
"A008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"C008"
))
{
series
[
"C008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"0071"
))
{
series
[
"0071"
]
=
"甜点"
;
}
if
(
series
.
Keys
.
Contains
(
"0009"
))
{
series
[
"0009"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"0008"
))
{
series
[
"0008"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"100A"
))
{
series
[
"100A"
]
=
"入魔"
;
}
if
(
series
.
Keys
.
Contains
(
"3013"
))
{
series
[
"3013"
]
=
"机皇"
;
}
if
(
series
.
Keys
.
Contains
(
"6013"
))
{
series
[
"6013"
]
=
"机皇"
;
}
if
(
series
.
Keys
.
Contains
(
"0020"
))
{
series
[
"0020"
]
=
"六武众"
;
}
if
(
series
.
Keys
.
Contains
(
"1033"
))
{
series
[
"1033"
]
=
"黑羽"
;
}
if
(
series
.
Keys
.
Contains
(
"0034"
))
{
series
[
"0034"
]
=
"宝玉兽"
;
}
if
(
series
.
Keys
.
Contains
(
"2034"
))
{
series
[
"2034"
]
=
"宝玉兽"
;
}
if
(
series
.
Keys
.
Contains
(
"103D"
))
{
series
[
"103D"
]
=
"六武众"
;
}
if
(
series
.
Keys
.
Contains
(
"3042"
))
{
series
[
"3042"
]
=
"极星"
;
}
if
(
series
.
Keys
.
Contains
(
"5042"
))
{
series
[
"5042"
]
=
"极星"
;
}
if
(
series
.
Keys
.
Contains
(
"6042"
))
{
series
[
"6042"
]
=
"极星"
;
}
if
(
series
.
Keys
.
Contains
(
"A042"
))
{
series
[
"A042"
]
=
"极星"
;
}
if
(
series
.
Keys
.
Contains
(
"0047"
))
{
series
[
"0047"
]
=
"宝石骑士"
;
}
if
(
series
.
Keys
.
Contains
(
"010C"
))
{
series
[
"010C"
]
=
"机界"
;
}
if
(
series
.
Keys
.
Contains
(
"0112"
))
{
series
[
"0112"
]
=
null
;
//幻崩
}
if
(
series
.
Keys
.
Contains
(
"0048"
))
{
series
[
"0048"
]
=
null
;
//No
}
if
(
series
.
Keys
.
Contains
(
"1048"
))
{
series
[
"1048"
]
=
null
;
//CNo
}
if
(
series
.
Keys
.
Contains
(
"1073"
))
{
series
[
"1073"
]
=
null
;
//CX
}
if
(
series
.
Keys
.
Contains
(
"2073"
))
{
series
[
"2073"
]
=
null
;
//超量龙
}
if
(
series
.
Keys
.
Contains
(
"0046"
))
{
series
[
"0046"
]
=
null
;
//融合
}
if
(
series
.
Keys
.
Contains
(
"0096"
))
{
series
[
"0096"
]
=
null
;
//电子鱼人
}
if
(
series
.
Keys
.
Contains
(
"0095"
))
{
series
[
"0095"
]
=
null
;
//升阶魔法
}
if
(
series
.
Keys
.
Contains
(
"304E"
))
{
series
[
"304E"
]
=
"进化龙"
;
}
if
(
series
.
Keys
.
Contains
(
"504E"
))
{
series
[
"504E"
]
=
"进化龙"
;
}
if
(
series
.
Keys
.
Contains
(
"006F"
))
{
series
[
"006F"
]
=
"英豪挑战者"
;
}
if
(
series
.
Keys
.
Contains
(
"0092"
))
{
series
[
"0092"
]
=
"纹章兽"
;
}
if
(
series
.
Keys
.
Contains
(
"1072"
))
{
series
[
"1072"
]
=
"齿轮齿轮"
;
}
if
(
series
.
Keys
.
Contains
(
"10F8"
))
{
series
[
"10F8"
]
=
"魔术师"
;
}
if
(
series
.
Keys
.
Contains
(
"20F8"
))
{
series
[
"20F8"
]
=
null
;
}
if
(
series
.
Keys
.
Contains
(
"010D"
))
{
series
[
"010D"
]
=
"魔导兽"
;
}
if
(
series
.
Keys
.
Contains
(
"107A"
))
{
series
[
"107A"
]
=
"圣骑士"
;
}
if
(
series
.
Keys
.
Contains
(
"207A"
))
{
series
[
"207A"
]
=
"圣骑士"
;
}
if
(
series
.
Keys
.
Contains
(
"007B"
))
{
series
[
"007B"
]
=
"银河眼"
;
}
if
(
series
.
Keys
.
Contains
(
"0055"
))
{
series
[
"0055"
]
=
"银河眼"
;
}
if
(
series
.
Keys
.
Contains
(
"307B"
))
{
series
[
"307B"
]
=
"银河眼"
;
}
if
(
series
.
Keys
.
Contains
(
"009F"
))
{
series
[
"009F"
]
=
"魔术师"
;
}
if
(
series
.
Keys
.
Contains
(
"007D"
))
{
series
[
"007D"
]
=
"阳炎兽"
;
}
if
(
series
.
Keys
.
Contains
(
"107F"
))
{
series
[
"107F"
]
=
"霍普"
;
}
if
(
series
.
Keys
.
Contains
(
"207F"
))
{
series
[
"207F"
]
=
"霍普"
;
}
if
(
series
.
Keys
.
Contains
(
"1081"
))
{
series
[
"1081"
]
=
"炎王"
;
}
if
(
series
.
Keys
.
Contains
(
"0075"
))
{
series
[
"0075"
]
=
null
;
//深渊
}
if
(
series
.
Keys
.
Contains
(
"0093"
))
{
series
[
"0093"
]
=
"电子龙"
;
}
if
(
series
.
Keys
.
Contains
(
"0094"
))
{
series
[
"0094"
]
=
"电子龙"
;
}
if
(
series
.
Keys
.
Contains
(
"109A"
))
{
series
[
"109A"
]
=
"超重武者"
;
}
if
(
series
.
Keys
.
Contains
(
"109B"
))
{
series
[
"109B"
]
=
"幻奏"
;
}
if
(
series
.
Keys
.
Contains
(
"109C"
))
{
series
[
"109C"
]
=
"星守"
;
}
if
(
series
.
Keys
.
Contains
(
"10A2"
))
{
series
[
"10A2"
]
=
"黑魔导"
;
}
if
(
series
.
Keys
.
Contains
(
"20A2"
))
{
series
[
"20A2"
]
=
"黑魔导"
;
}
if
(
series
.
Keys
.
Contains
(
"30A2"
))
{
series
[
"30A2"
]
=
"黑魔导"
;
}
if
(
series
.
Keys
.
Contains
(
"10A4"
))
{
series
[
"10A4"
]
=
"栗子球"
;
//羽翼栗子球
}
if
(
series
.
Keys
.
Contains
(
"00A5"
))
{
series
[
"00A5"
]
=
"HERO"
;
}
if
(
series
.
Keys
.
Contains
(
"10AA"
))
{
series
[
"10AA"
]
=
"机壳"
;
}
if
(
series
.
Keys
.
Contains
(
"00AF"
))
{
{
series
[
"00AF"
]
=
"DDD"
;
case
"卡片追加字段"
:
}
if
(
parts
.
Length
>=
3
)
if
(
series
.
Keys
.
Contains
(
"00D7"
))
{
{
series
[
"00D7"
]
=
"破坏剑"
;
long
cardId
;
}
if
(
long
.
TryParse
(
parts
[
1
],
out
cardId
))
if
(
series
.
Keys
.
Contains
(
"00C6"
))
{
{
series
[
"00C6"
]
=
"魔术师"
;
if
(!
cardSeriesRules
.
ContainsKey
(
cardId
))
}
if
(
series
.
Keys
.
Contains
(
"00C7"
))
{
{
series
[
"00C7"
]
=
"魔术师"
;
cardSeriesRules
[
cardId
]
=
new
List
<
string
>()
;
}
}
if
(
series
.
Keys
.
Contains
(
"00CE"
)
)
if
(
parts
[
2
].
Length
!=
4
)
{
{
series
[
"00CE"
]
=
"水伶女"
;
throw
new
Exception
(
$"错误:读取
{
parts
[
1
]}
|
{
parts
[
2
]}
时出错,卡片字段长度必须是4!"
)
;
}
}
if
(
series
.
Keys
.
Contains
(
"00A9"
))
cardSeriesRules
[
cardId
].
Add
(
parts
[
2
]);
{
series
[
"00A9"
]
=
"魔玩具"
;
}
}
if
(
series
.
Keys
.
Contains
(
"00C3"
))
{
series
[
"00C3"
]
=
"魔玩具"
;
}
}
if
(
series
.
Keys
.
Contains
(
"10B5"
))
break
;
case
"设置优先级"
:
if
(
parts
.
Length
>=
3
)
{
{
series
[
"10B5"
]
=
"灵兽"
;
string
seriesName
=
parts
[
1
]
;
}
int
priority
;
if
(
series
.
Keys
.
Contains
(
"20B5"
))
if
(
int
.
TryParse
(
parts
[
2
],
out
priority
))
{
{
series
[
"20B5"
]
=
"灵兽"
;
seriesPriorities
[
seriesName
]
=
priority
;
}
}
if
(
series
.
Keys
.
Contains
(
"40B5"
))
{
series
[
"40B5"
]
=
"灵兽"
;
}
}
if
(
series
.
Keys
.
Contains
(
"10C1"
))
break
;
case
"字段归入系列"
:
if
(
parts
.
Length
>=
3
)
{
{
series
[
"10C1"
]
=
"PSY骨架"
;
customSeriesNames
[
parts
[
1
]]
=
parts
[
2
]
;
}
}
if
(
series
.
Keys
.
Contains
(
"10D9"
))
break
;
case
"系列重命名"
:
if
(
parts
.
Length
>=
3
)
{
{
series
[
"10D9"
]
=
"不知火"
;
seriesRenames
[
parts
[
1
]]
=
parts
[
2
]
;
}
}
if
(
series
.
Keys
.
Contains
(
"00EA"
))
break
;
case
"删除系列"
:
if
(
parts
.
Length
>=
2
)
{
{
series
[
"00EA"
]
=
"水晶机巧"
;
seriesToDelete
.
Add
(
parts
[
1
])
;
}
}
if
(
series
.
Keys
.
Contains
(
"10DC"
))
break
;
case
"按条件删除分类"
:
if
(
parts
.
Length
>=
3
)
{
{
series
[
"10DC"
]
=
"超级量子"
;
string
condition
=
parts
[
1
];
}
string
toDelete
=
parts
[
2
];
if
(
series
.
Keys
.
Contains
(
"20DC"
))
if
(!
conditionalDeleteRules
.
ContainsKey
(
condition
))
{
{
series
[
"20DC"
]
=
"超级量子"
;
conditionalDeleteRules
[
condition
]
=
new
List
<
string
>()
;
}
}
if
(
series
.
Keys
.
Contains
(
"20EC"
))
{
conditionalDeleteRules
[
condition
].
Add
(
toDelete
);
series
[
"20EC"
]
=
"魔界剧团"
;
}
}
if
(
series
.
Keys
.
Contains
(
"10ED"
))
break
;
{
series
[
"10ED"
]
=
"地中族"
;
}
}
if
(
series
.
Keys
.
Contains
(
"10EE"
))
{
series
[
"10EE"
]
=
"秘旋谍"
;
}
}
if
(
series
.
Keys
.
Contains
(
"20EE"
))
{
series
[
"20EE"
]
=
"秘旋谍"
;
}
}
if
(
series
.
Keys
.
Contains
(
"00F2"
)
)
catch
(
Exception
ex
)
{
{
series
[
"00F2"
]
=
"魔术师"
;
MessageBox
.
Show
(
$"加载规则文件时出错:
{
ex
.
Message
}
"
,
"错误"
,
MessageBoxButtons
.
OK
,
MessageBoxIcon
.
Error
)
;
}
}
if
(
series
.
Keys
.
Contains
(
"10F2"
))
{
series
[
"10F2"
]
=
"魔术师"
;
}
}
if
(
series
.
Keys
.
Contains
(
"20F2"
))
// 替代原来的SpecialProcess_SeriesJudge方法
private
string
SpecialProcess_SeriesJudge
(
long
card
)
{
{
series
[
"20F2"
]
=
"魔术师"
;
// 将所有系列合并为一个字符串,每个系列占4个字符
}
StringBuilder
result
=
new
StringBuilder
();
if
(
series
.
Keys
.
Contains
(
"00F3"
))
if
(
cardSeriesRules
.
ContainsKey
(
card
))
{
{
series
[
"00F3"
]
=
"捕食植物"
;
foreach
(
string
series
in
cardSeriesRules
[
card
])
}
if
(
series
.
Keys
.
Contains
(
"00F4"
))
{
{
series
[
"00F4"
]
=
"召唤师"
;
result
.
Append
(
series
.
PadRight
(
4
,
'0'
).
Substring
(
0
,
4
))
;
}
}
if
(
series
.
Keys
.
Contains
(
"0102"
))
return
result
.
ToString
();
{
series
[
"0102"
]
=
"枪管"
;
}
}
if
(
series
.
Keys
.
Contains
(
"1115"
))
return
null
;
{
series
[
"1115"
]
=
"闪刀"
;
}
}
if
(
series
.
Keys
.
Contains
(
"00FD"
))
// 替代原来的AddCustomSeries方法
private
void
AddCustomSeries
(
ref
Dictionary
<
string
,
string
>
series
)
{
{
series
[
"00FD"
]
=
"星遗物"
;
foreach
(
var
pair
in
customSeriesNames
)
}
if
(
series
.
Keys
.
Contains
(
"1130"
))
{
{
series
[
"1130"
]
=
"破械"
;
series
[
pair
.
Key
]
=
pair
.
Value
;
}
}
if
(
series
.
Keys
.
Contains
(
"013B"
))
{
series
[
"013B"
]
=
null
;
//叛逆
}
}
if
(
series
.
Keys
.
Contains
(
"013C"
))
// 替代原来的SpecialProcess方法
private
Dictionary
<
string
,
string
>
SpecialProcess
(
Dictionary
<
string
,
string
>
series
)
{
{
series
[
"013C"
]
=
null
;
//代码破坏者
this
.
AddCustomSeries
(
ref
series
);
}
if
(
series
.
Keys
.
Contains
(
"0143"
))
// 处理系列重命名
foreach
(
var
pair
in
seriesRenames
)
{
{
series
[
"0143"
]
=
"黄金国"
;
if
(
series
.
Keys
.
Contains
(
pair
.
Key
))
}
if
(
series
.
Keys
.
Contains
(
"2142"
))
{
{
series
[
"2142"
]
=
"黄金国"
;
series
[
pair
.
Key
]
=
pair
.
Value
;
}
}
if
(
series
.
Keys
.
Contains
(
"1143"
))
{
series
[
"1143"
]
=
"黄金国"
;
}
}
if
(
series
.
Keys
.
Contains
(
"0148"
))
// 处理系列删除
foreach
(
string
seriesKey
in
seriesToDelete
)
{
{
series
[
"0148"
]
=
"圣骑士"
;
if
(
series
.
Keys
.
Contains
(
seriesKey
))
}
if
(
series
.
Keys
.
Contains
(
"0054"
))
{
{
series
[
"0054"
]
=
"拟声(我我我/怒怒怒等)"
;
series
[
seriesKey
]
=
null
;
}
}
if
(
series
.
Keys
.
Contains
(
"0059"
))
{
series
[
"0059"
]
=
"拟声(我我我/怒怒怒等)"
;
}
}
if
(
series
.
Keys
.
Contains
(
"008F"
))
{
return
series
;
series
[
"008F"
]
=
"拟声(我我我/怒怒怒等)"
;
}
}
if
(
series
.
Keys
.
Contains
(
"013A"
))
private
void
btnStart_Click
(
object
sender
,
EventArgs
e
)
{
{
series
[
"013A"
]
=
"拟声(我我我/怒怒怒等)"
;
btnStart
.
Enabled
=
false
;
}
if
(!
checkNoFile
.
Checked
)
if
(
series
.
Keys
.
Contains
(
"0082"
))
{
{
series
[
"0082"
]
=
"拟声(我我我/怒怒怒等)"
;
//蔷薇
if
(
this
.
sfdSave
.
ShowDialog
()
!=
DialogResult
.
OK
)
}
if
(
series
.
Keys
.
Contains
(
"00C0"
))
{
{
series
[
"00C0"
]
=
"灵使"
;
//蔷薇
btnStart
.
Enabled
=
true
;
return
;
}
}
if
(
series
.
Keys
.
Contains
(
"0091"
))
File
.
Delete
(
this
.
sfdSave
.
FileName
);
{
series
[
"0091"
]
=
"守墓"
;
//蔷薇
}
}
return
series
;
bwWorker
.
RunWorkerAsync
()
;
}
}
private
void
btnChooseStringsConf_Click
(
object
sender
,
EventArgs
e
)
private
void
btnChooseStringsConf_Click
(
object
sender
,
EventArgs
e
)
...
@@ -1154,6 +213,7 @@ namespace YGO_DeckAnalyzer
...
@@ -1154,6 +213,7 @@ namespace YGO_DeckAnalyzer
this
.
checkAllowMixDeck
.
Checked
=
Properties
.
Settings
.
Default
.
AllowMixDeck
;
this
.
checkAllowMixDeck
.
Checked
=
Properties
.
Settings
.
Default
.
AllowMixDeck
;
this
.
checkNoFile
.
Checked
=
Properties
.
Settings
.
Default
.
NoFile
;
this
.
checkNoFile
.
Checked
=
Properties
.
Settings
.
Default
.
NoFile
;
this
.
checkMostOnly
.
Checked
=
Properties
.
Settings
.
Default
.
MostOnly
;
this
.
checkMostOnly
.
Checked
=
Properties
.
Settings
.
Default
.
MostOnly
;
this
.
checkIgnoreNum
.
Checked
=
Properties
.
Settings
.
Default
.
IgnoreNum
;
this
.
init
=
false
;
this
.
init
=
false
;
}
}
...
@@ -1241,6 +301,7 @@ namespace YGO_DeckAnalyzer
...
@@ -1241,6 +301,7 @@ namespace YGO_DeckAnalyzer
Properties
.
Settings
.
Default
.
MostOnly
=
checkMostOnly
.
Checked
;
Properties
.
Settings
.
Default
.
MostOnly
=
checkMostOnly
.
Checked
;
this
.
SaveOptions
();
this
.
SaveOptions
();
}
}
private
Dictionary
<
string
,
List
<
string
>>
conditionalDeleteRules
=
new
Dictionary
<
string
,
List
<
string
>>();
private
void
bwWorker_DoWork
(
object
sender
,
DoWorkEventArgs
e
)
private
void
bwWorker_DoWork
(
object
sender
,
DoWorkEventArgs
e
)
{
{
...
@@ -1332,7 +393,11 @@ namespace YGO_DeckAnalyzer
...
@@ -1332,7 +393,11 @@ namespace YGO_DeckAnalyzer
{
{
main
++;
main
++;
}
}
string
setcodeString
=
cardSetCode
[
card
];
string
setcodeString
=
""
;
if
(
cardSetCode
.
ContainsKey
(
card
))
{
setcodeString
=
cardSetCode
[
card
];
}
string
processing
=
this
.
SpecialProcess_SeriesJudge
(
card
);
string
processing
=
this
.
SpecialProcess_SeriesJudge
(
card
);
if
(
processing
!=
null
)
if
(
processing
!=
null
)
{
{
...
@@ -1364,7 +429,11 @@ namespace YGO_DeckAnalyzer
...
@@ -1364,7 +429,11 @@ namespace YGO_DeckAnalyzer
foreach
(
KeyValuePair
<
string
,
int
>
kvp
in
deckCardSeries
)
foreach
(
KeyValuePair
<
string
,
int
>
kvp
in
deckCardSeries
)
{
{
string
serie
=
""
;
string
serie
=
""
;
if
(!
series
.
ContainsKey
(
kvp
.
Key
))
if
(
customSeriesNames
.
ContainsKey
(
kvp
.
Key
))
{
serie
=
customSeriesNames
[
kvp
.
Key
];
}
else
if
(!
series
.
ContainsKey
(
kvp
.
Key
))
{
{
serie
=
$"未知(0x
{
kvp
.
Key
}
)"
;
serie
=
$"未知(0x
{
kvp
.
Key
}
)"
;
}
}
...
@@ -1384,101 +453,101 @@ namespace YGO_DeckAnalyzer
...
@@ -1384,101 +453,101 @@ namespace YGO_DeckAnalyzer
}
}
}
}
}
}
// 修改bwWorker_DoWork方法中处理卡组类型的部分
string
postfix
=
""
;
string
postfix
=
""
;
while
(
deckCardSeriesFilter
.
Count
>
0
)
{
// 创建SeriesInfo列表
most
=
0
;
List
<
SeriesInfo
>
seriesInfoList
=
new
List
<
SeriesInfo
>();
mostType
=
""
;
//foreach (KeyValuePair<string,int> kvp in deckCardSeries)
//{
// if (kvp.Value > most)
// {
// most = kvp.Value;
// mostTypeKey = kvp.Key;
// if (!series.ContainsKey(mostTypeKey))
// {
// mostType = $"未知(0x{mostTypeKey})";
// }
// else
// {
// mostType = series[mostTypeKey];
// }
// }
//}
foreach
(
KeyValuePair
<
string
,
int
>
kvp
in
deckCardSeriesFilter
)
foreach
(
KeyValuePair
<
string
,
int
>
kvp
in
deckCardSeriesFilter
)
{
{
if
(
kvp
.
Value
>
most
)
// 获取系列的优先级,如果没有设置则默认为0
int
priority
=
0
;
if
(
seriesPriorities
.
ContainsKey
(
kvp
.
Key
))
{
{
most
=
kvp
.
Value
;
priority
=
seriesPriorities
[
kvp
.
Key
];
mostType
=
kvp
.
Key
;
}
}
seriesInfoList
.
Add
(
new
SeriesInfo
(
kvp
.
Key
,
kvp
.
Value
,
priority
));
}
}
if
(
most
<=
6
&&
(!
checkMostOnly
.
Checked
||
most
<=
3
))
// 根据checkIgnoreNum选项进行排序
if
(
checkIgnoreNum
.
Checked
)
{
// 按优先级排序,优先级相同时按字符串排序
seriesInfoList
.
Sort
((
a
,
b
)
=>
{
// 首先按优先级排序(降序)
int
priorityCompare
=
b
.
Priority
.
CompareTo
(
a
.
Priority
);
if
(
priorityCompare
!=
0
)
return
priorityCompare
;
// 如果优先级相同,按字符串排序(升序)
return
string
.
Compare
(
a
.
Name
,
b
.
Name
);
});
// 添加满足条件的系列到deckType
foreach
(
SeriesInfo
seriesInfo
in
seriesInfoList
)
{
{
if
(
deckCardSeriesFilter
.
Keys
.
Contains
(
"割草"
))
if
(
seriesInfo
.
Count
>
6
||
(
checkMostOnly
.
Checked
&&
seriesInfo
.
Count
>
3
))
{
{
deckType
.
Add
(
"割草"
);
if
(!
deckType
.
Contains
(
seriesInfo
.
Name
))
}
if
(
deckCardSeriesFilter
.
Keys
.
Contains
(
"机巧蛇"
))
{
{
deckType
.
Add
(
"机巧蛇"
);
deckType
.
Add
(
seriesInfo
.
Name
);
if
(
this
.
checkOutputDescription
.
Checked
&&
!
checkNoFile
.
Checked
)
{
sw
.
WriteLine
(
$"
{
seriesInfo
.
Name
}
系列投入:
{
seriesInfo
.
Count
}
"
);
}
}
}
}
}
break
;
}
}
else
else
{
{
// 按优先级排序,优先级相同时按数量排序
seriesInfoList
.
Sort
((
a
,
b
)
=>
{
// 首先按优先级排序(降序)
int
priorityCompare
=
b
.
Priority
.
CompareTo
(
a
.
Priority
);
if
(
priorityCompare
!=
0
)
return
priorityCompare
;
// 如果优先级相同,按数量排序(降序)
return
b
.
Count
.
CompareTo
(
a
.
Count
);
});
// 添加满足条件的系列到deckType
foreach
(
SeriesInfo
seriesInfo
in
seriesInfoList
)
{
if
(
seriesInfo
.
Count
>
6
||
(
checkMostOnly
.
Checked
&&
seriesInfo
.
Count
>
3
))
{
if
(!
deckType
.
Contains
(
seriesInfo
.
Name
))
{
deckType
.
Add
(
seriesInfo
.
Name
);
if
(
this
.
checkOutputDescription
.
Checked
&&
!
checkNoFile
.
Checked
)
if
(
this
.
checkOutputDescription
.
Checked
&&
!
checkNoFile
.
Checked
)
{
{
sw
.
WriteLine
(
$"
{
mostType
}
系列投入:
{
most
}
"
);
sw
.
WriteLine
(
$"
{
seriesInfo
.
Name
}
系列投入:
{
seriesInfo
.
Count
}
"
);
}
}
}
if
(!
deckType
.
Contains
(
mostType
))
{
deckType
.
Add
(
mostType
);
}
}
deckCardSeriesFilter
.
Remove
(
mostType
);
}
}
}
}
// 如果没有找到任何系列,添加"其他"
if
(
deckType
.
Count
==
0
)
if
(
deckType
.
Count
==
0
)
{
{
deckType
.
Add
(
"其他"
);
deckType
.
Add
(
"其他"
);
}
}
//deckType.Sort();
//deckType.Sort();
string
realDeckType
=
""
;
string
realDeckType
=
""
;
if
(!
checkMostOnly
.
Checked
)
{
if
(
deckType
.
Contains
(
"割草"
))
{
realDeckType
=
"割草"
;
deckType
.
Remove
(
"割草"
);
}
if
(
main
>
55
&&
realDeckType
!=
"割草"
)
{
realDeckType
=
$"
{
main
}
张"
;
}
}
if
(
deckType
.
Count
>
1
)
if
(
deckType
.
Count
>
1
)
{
{
if
(
deckType
.
Contains
(
"METABEAT"
))
// 应用条件删除规则
foreach
(
var
rule
in
conditionalDeleteRules
)
{
{
deckType
.
Remove
(
"METABEAT"
);
if
(
deckType
.
Contains
(
rule
.
Key
))
}
if
(
deckType
.
Contains
(
"均卡(LINK/同调)"
))
{
{
deckType
.
Remove
(
"均卡(LINK/同调)"
);
foreach
(
var
typeToRemove
in
rule
.
Value
)
}
if
(
deckType
.
Contains
(
"黑魔导"
)
||
deckType
.
Contains
(
"召唤师"
))
{
{
deckType
.
Remove
(
"风魔女"
);
deckType
.
Remove
(
typeToRemove
);
}
}
if
(
deckType
.
Contains
(
"恩底弥翁"
))
{
deckType
.
Remove
(
"魔导兽"
);
}
}
if
(
deckType
.
Contains
(
"甘多拉"
))
{
deckType
.
Remove
(
"守护龙"
);
deckType
.
Remove
(
"圣像骑士"
);
deckType
.
Remove
(
"龙骑兵团"
);
}
}
}
}
if
(
deckType
.
Count
>=
3
&&
this
.
checkAllowMixDeck
.
Checked
)
if
(
deckType
.
Count
>=
3
&&
this
.
checkAllowMixDeck
.
Checked
)
...
@@ -1514,7 +583,10 @@ namespace YGO_DeckAnalyzer
...
@@ -1514,7 +583,10 @@ namespace YGO_DeckAnalyzer
overAllDeckType
[
realDeckType
]++;
overAllDeckType
[
realDeckType
]++;
}
}
}
}
catch
catch
(
Exception
ex
)
#if DEBUG
when
(
false
)
#endif
{
{
failed
++;
failed
++;
}
}
...
@@ -1595,7 +667,7 @@ namespace YGO_DeckAnalyzer
...
@@ -1595,7 +667,7 @@ namespace YGO_DeckAnalyzer
string
message
=
"处理结束"
;
string
message
=
"处理结束"
;
if
(
failed
>
0
)
if
(
failed
>
0
)
{
{
message
+=
",失败{failed}个"
;
message
+=
$
",失败
{
failed
}
个"
;
}
}
if
(!
checkNoFile
.
Checked
)
if
(!
checkNoFile
.
Checked
)
{
{
...
@@ -1608,7 +680,7 @@ namespace YGO_DeckAnalyzer
...
@@ -1608,7 +680,7 @@ namespace YGO_DeckAnalyzer
{
{
if
(
e
.
UserState
is
Dictionary
<
string
,
int
>)
if
(
e
.
UserState
is
Dictionary
<
string
,
int
>)
{
{
FormChart
form
=
new
FormChart
(
e
.
UserState
as
Dictionary
<
string
,
int
>);
FormChart
form
=
new
FormChart
(
e
.
UserState
as
Dictionary
<
string
,
int
>);
form
.
Show
();
form
.
Show
();
}
}
else
else
...
@@ -1621,5 +693,62 @@ namespace YGO_DeckAnalyzer
...
@@ -1621,5 +693,62 @@ namespace YGO_DeckAnalyzer
{
{
btnStart
.
Enabled
=
true
;
btnStart
.
Enabled
=
true
;
}
}
private
void
btnChooseFile_Click
(
object
sender
,
EventArgs
e
)
{
if
(
ofdSelectFile
.
ShowDialog
()
==
DialogResult
.
OK
)
{
listDecks
.
Items
.
AddRange
(
ofdSelectFile
.
FileNames
);
}
}
private
void
checkIgnoreNum_CheckedChanged
(
object
sender
,
EventArgs
e
)
{
Properties
.
Settings
.
Default
.
IgnoreNum
=
checkIgnoreNum
.
Checked
;
this
.
SaveOptions
();
}
private
void
btnReloadRules_Click
(
object
sender
,
EventArgs
e
)
{
// 清除现有规则
cardSeriesRules
.
Clear
();
customSeriesNames
.
Clear
();
seriesRenames
.
Clear
();
seriesToDelete
.
Clear
();
seriesPriorities
.
Clear
();
conditionalDeleteRules
.
Clear
();
// 重新加载规则文件
LoadRulesFromFile
();
// 显示消息框通知用户
MessageBox
.
Show
(
"规则文件重新加载完成"
,
"提示"
,
MessageBoxButtons
.
OK
,
MessageBoxIcon
.
Information
);
}
}
}
// 创建一个辅助类来保存系列信息,包括名称、数量和优先级
class
SeriesInfo
:
IComparable
<
SeriesInfo
>
{
public
string
Name
{
get
;
set
;
}
public
int
Count
{
get
;
set
;
}
public
int
Priority
{
get
;
set
;
}
public
SeriesInfo
(
string
name
,
int
count
,
int
priority
)
{
Name
=
name
;
Count
=
count
;
Priority
=
priority
;
}
public
int
CompareTo
(
SeriesInfo
other
)
{
// 首先按优先级排序(降序)
int
priorityCompare
=
other
.
Priority
.
CompareTo
(
this
.
Priority
);
if
(
priorityCompare
!=
0
)
return
priorityCompare
;
// 如果优先级相同,按数量排序(降序)
return
other
.
Count
.
CompareTo
(
this
.
Count
);
}
}
}
}
YGO_DeckAnalyzer/YGO_DeckAnalyzer.csproj
View file @
bc1dac15
...
@@ -116,6 +116,11 @@
...
@@ -116,6 +116,11 @@
<ItemGroup>
<ItemGroup>
<Folder
Include=
"pics\"
/>
<Folder
Include=
"pics\"
/>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<Content
Include=
"rules.txt"
>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<Target
Name=
"EnsureNuGetPackageBuildImports"
BeforeTargets=
"PrepareForBuild"
>
<Target
Name=
"EnsureNuGetPackageBuildImports"
BeforeTargets=
"PrepareForBuild"
>
<PropertyGroup>
<PropertyGroup>
...
...
YGO_DeckAnalyzer/YGO_DeckAnalyzer.resx
View file @
bc1dac15
...
@@ -135,4 +135,10 @@
...
@@ -135,4 +135,10 @@
<metadata
name=
"statusStrip1.TrayLocation"
type=
"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
>
<metadata
name=
"statusStrip1.TrayLocation"
type=
"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
>
<value>
678, 17
</value>
<value>
678, 17
</value>
</metadata>
</metadata>
<metadata
name=
"ofdSelectFile.TrayLocation"
type=
"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
>
<value>
799, 17
</value>
</metadata>
<metadata
name=
"fbdSelect.TrayLocation"
type=
"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
>
<value>
926, 17
</value>
</metadata>
</root>
</root>
\ No newline at end of file
YGO_DeckAnalyzer/rules.txt
0 → 100644
View file @
bc1dac15
# 游戏王卡片分析规则文件
# 以#开头的行是注释行,不执行
# 先后顺序理论上是有影响的
# 注意【字段】和【系列】的区别:
# 字段是string.conf里规定的值转化成的4位字符串,用于判断单卡,类似!setname 0x186→0186
# 字段一定是4位的,不能长也不能短
# 系列则是卡组最终归类名称
# 一句话:卡→字段;卡组→系列。
# 卡片追加字段命令,将卡号设为指定的字段,对应SpecialProcess_SeriesJudge的处理
# 注意:中文英文都没关系,但长度必须是4。
# 这里的【字段】仅作判断用,实际输出时使用的名字在【字段归入系列】【系列重命名】里
# 可以多次追加同一个字段,1张当多张来算。
卡片追加字段|21362970|00毛扎
卡片追加字段|67757079|00毛扎
卡片追加字段|94878265|00毛扎
卡片追加字段|32465539|电子光虫
卡片追加字段|94344242|电子光虫
卡片追加字段|68950538|电子光虫
卡片追加字段|58600555|电子光虫
卡片追加字段|12615446|电子光虫
卡片追加字段|85004150|电子光虫
卡片追加字段|83048208|电子光虫
#纳祭之魔
卡片追加字段|64631466|0110
卡片追加字段|94259633|0110
卡片追加字段|15173384|0110
卡片追加字段|41426869|0110
卡片追加字段|22339232|00白骨
卡片追加字段|32274490|00白骨
卡片追加字段|36021814|00白骨
卡片追加字段|37675138|00白骨
卡片追加字段|40991587|00白骨
卡片追加字段|57473560|00白骨
卡片追加字段|90243945|00白骨
#码语者
卡片追加字段|46947713|0101
卡片追加字段|88093706|0101
卡片追加字段|71278040|0101
卡片追加字段|18789533|0101
卡片追加字段|5560911|00均卡
卡片追加字段|28985331|00均卡
卡片追加字段|7409792|00均卡
卡片追加字段|9411399|00均卡
卡片追加字段|3431737|00均卡
卡片追加字段|9742784|00均卡
卡片追加字段|25472513|00均卡
卡片追加字段|67723438|00均卡
卡片追加字段|65536818|00均卡
卡片追加字段|53325667|00均卡
卡片追加字段|94973028|00均卡
卡片追加字段|74644400|00均卡
卡片追加字段|72291078|00均卡
卡片追加字段|75944053|00均卡
#地中
卡片追加字段|5697558|00ED
卡片追加字段|86120751|0召唤师
卡片追加字段|97973692|0召唤师
卡片追加字段|74063034|0召唤师
卡片追加字段|47679935|0召唤师
卡片追加字段|458748|0召唤师
卡片追加字段|47457347|0召唤师
卡片追加字段|71564252|BEAT
卡片追加字段|15397015|BEAT
卡片追加字段|71197066|BEAT
卡片追加字段|40605147|BEAT
卡片追加字段|41420027|BEAT
卡片追加字段|84749824|BEAT
卡片追加字段|36975314|BEAT
卡片追加字段|5851097|BEAT
卡片追加字段|63845230|BEAT
卡片追加字段|36584821|BEAT
卡片追加字段|30241314|BEAT
卡片追加字段|35059553|BEAT
卡片追加字段|81674782|BEAT
#教导
卡片追加字段|41373230|0145
卡片追加字段|1984618|0145
卡片追加字段|68468459|0145
卡片追加字段|39185163|不死世界
卡片追加字段|66570171|不死世界
卡片追加字段|4064256|不死世界
卡片追加字段|92964816|不死世界
# 割草特殊处理
# 因为要到6张才算卡组成立,所以这里1张按6张卡计算
卡片追加字段|11110587|00割草
卡片追加字段|11110587|00割草
卡片追加字段|11110587|00割草
卡片追加字段|11110587|00割草
卡片追加字段|11110587|00割草
卡片追加字段|11110587|00割草
#真红眼
卡片追加字段|11827244|003B
#枪管
卡片追加字段|31443476|010F
#骚灵
卡片追加字段|53936268|0103
#黑魔术
卡片追加字段|30603688|10A2
卡片追加字段|7084129|10A2
卡片追加字段|1784686|10A2
卡片追加字段|73616671|10A2
卡片追加字段|47222536|10A2
卡片追加字段|7922915|10A2
卡片追加字段|48680970|10A2
卡片追加字段|96471335|10A2
卡片追加字段|85551711|10A2
卡片追加字段|75380687|10A2
卡片追加字段|41721210|10A2
#LV
卡片追加字段|15180041|0041
卡片追加字段|19502505|0041
卡片追加字段|41175645|0041
卡片追加字段|25290459|0041
卡片追加字段|90500169|0041
卡片追加字段|18940556|00恐龙
卡片追加字段|41782653|00恐龙
卡片追加字段|38572779|00恐龙
卡片追加字段|44335251|00恐龙
卡片追加字段|36042004|00恐龙
卡片追加字段|38179121|00恐龙
#青眼
卡片追加字段|79814787|00DD
卡片追加字段|71039903|00DD
卡片追加字段|72855441|00DD
卡片追加字段|34627841|00DD
卡片追加字段|45644898|00DD
卡片追加字段|8240199|00DD
卡片追加字段|36734924|00DD
卡片追加字段|88241506|00DD
卡片追加字段|2783661|00DD
卡片追加字段|29432790|00DD
卡片追加字段|50371210|00DD
卡片追加字段|56920308|00DD
卡片追加字段|93437091|00DD
卡片追加字段|17655904|00DD
卡片追加字段|57043986|00DD
卡片追加字段|11012154|0守护龙
卡片追加字段|6990577|0守护龙
卡片追加字段|43411769|0守护龙
卡片追加字段|79905468|0守护龙
卡片追加字段|84899094|0守护龙
卡片追加字段|59537380|0守护龙
卡片追加字段|13143275|0守护龙
卡片追加字段|86148577|0守护龙
卡片追加字段|87571563|0守护龙
卡片追加字段|50186558|0守护龙
卡片追加字段|47393199|0守护龙
卡片追加字段|11908584|0守护龙
#古代机械
卡片追加字段|37694547|0007
卡片追加字段|10000040|0三幻神
卡片追加字段|10000000|0三幻神
卡片追加字段|10000010|0三幻神
卡片追加字段|10000020|0三幻神
#电子龙
卡片追加字段|87116928|1093
卡片追加字段|79229522|1093
#机怪虫
卡片追加字段|67831115|0104
卡片追加字段|27705190|0104
卡片追加字段|89320376|0104
卡片追加字段|36468556|BURN
卡片追加字段|91623717|BURN
卡片追加字段|18252559|BURN
卡片追加字段|24068492|BURN
卡片追加字段|27053506|BURN
#幻煌龙
卡片追加字段|2819435|00FA
卡片追加字段|30012506|ABC龙
卡片追加字段|77411244|ABC龙
卡片追加字段|3405259|ABC龙
卡片追加字段|1561110|ABC龙
卡片追加字段|51126152|00列车
卡片追加字段|52481437|00列车
卡片追加字段|13647631|00列车
卡片追加字段|88875132|00列车
卡片追加字段|24919805|00列车
卡片追加字段|76136345|00列车
卡片追加字段|25274141|00列车
卡片追加字段|26096328|00列车
卡片追加字段|92379223|0黄金国
卡片追加字段|31434645|0黄金国
卡片追加字段|53855409|00废二
卡片追加字段|96363153|00废二
卡片追加字段|37675907|00废二
卡片追加字段|50091196|00废二
卡片追加字段|20932152|00废二
卡片追加字段|80457744|00废二
#传说骑士
卡片追加字段|89397517|00A0
卡片追加字段|26293219|0骷髅头
卡片追加字段|99899504|0骷髅头
卡片追加字段|63804806|0骷髅头
卡片追加字段|90764875|00蛇头
卡片追加字段|64379261|00蛇头
卡片追加字段|37984162|00蛇头
卡片追加字段|84401683|00蛇头
卡片追加字段|37168514|00蛇头
卡片追加字段|93130021|0胜利蛇
卡片追加字段|10992251|0胜利蛇
卡片追加字段|10642488|0胜利蛇
卡片追加字段|14089428|0胜利蛇
卡片追加字段|5494820|0胜利蛇
卡片追加字段|14291024|0胜利蛇
卡片追加字段|62340868|属性魔神
卡片追加字段|25955164|属性魔神
卡片追加字段|98434877|属性魔神
卡片追加字段|25833572|属性魔神
卡片追加字段|36562627|00赌博
卡片追加字段|49511705|00赌博
卡片追加字段|96012004|00赌博
卡片追加字段|70050374|00赌博
卡片追加字段|28112535|00赌博
卡片追加字段|76728962|00赌博
卡片追加字段|3549275|00赌博
卡片追加字段|39454112|00赌博
卡片追加字段|93078761|00赌博
卡片追加字段|81171949|头奖壶7
卡片追加字段|6853254|00DD|0巨神龙
卡片追加字段|6075801|0巨神龙
卡片追加字段|33282498|0巨神龙
卡片追加字段|33460840|0巨神龙
卡片追加字段|60681103|0巨神龙
卡片追加字段|69868555|0巨神龙
卡片追加字段|87835759|0巨神龙
卡片追加字段|4148264|0G战队
卡片追加字段|58012707|0G战队
卡片追加字段|899287|00金宫
卡片追加字段|14512825|00金宫
卡片追加字段|41916534|00金宫
卡片追加字段|45072394|00金宫
卡片追加字段|46294982|00金宫
卡片追加字段|72283691|00金宫
卡片追加字段|73405179|00金宫
卡片追加字段|78527720|00金宫
卡片追加字段|59160188|黯黑世界
卡片追加字段|50383626|黯黑世界
卡片追加字段|29424328|黯黑世界
卡片追加字段|23898021|黯黑世界
卡片追加字段|25643346|黯黑世界
卡片追加字段|86377375|黯黑世界
卡片追加字段|24096499|森之圣兽
卡片追加字段|36318200|森之圣兽
卡片追加字段|77797992|森之圣兽
卡片追加字段|97317530|森之圣兽
卡片追加字段|28118128|00子狸
卡片追加字段|92729410|00子狸
卡片追加字段|39972129|00子狸
卡片追加字段|80208158|00罗宾
卡片追加字段|15574615|00罗宾
卡片追加字段|16796157|00罗宾
卡片追加字段|43791861|00罗宾
卡片追加字段|79185500|00罗宾
卡片追加字段|8198712|世界末日
卡片追加字段|32828635|世界末日
卡片追加字段|69217334|世界末日
卡片追加字段|95612049|世界末日
卡片追加字段|81306186|世界末日
卡片追加字段|59913418|世界末日
卡片追加字段|72426662|世界末日
卡片追加字段|86124104|世界末日
#倒计时特殊处理,1张当6张计算
卡片追加字段|95308449|0倒计时
卡片追加字段|95308449|0倒计时
卡片追加字段|95308449|0倒计时
卡片追加字段|95308449|0倒计时
卡片追加字段|95308449|0倒计时
卡片追加字段|95308449|0倒计时
卡片追加字段|94212438|0通灵盘
卡片追加字段|67287533|0通灵盘
卡片追加字段|31893528|0通灵盘
卡片追加字段|30170981|0通灵盘
卡片追加字段|94772232|0通灵盘
卡片追加字段|40771118|0通灵盘
卡片追加字段|14386013|0通灵盘
卡片追加字段|16625614|0通灵盘
卡片追加字段|93151201|雷电家族
卡片追加字段|84530620|雷电家族
卡片追加字段|15510988|雷电家族
卡片追加字段|70797118|雷电家族
卡片追加字段|57019473|雷电家族
卡片追加字段|21524779|雷电家族
卡片追加字段|27217742|雷电家族
卡片追加字段|75917088|王女试炼
卡片追加字段|2316186|王女试炼
卡片追加字段|72709014|王女试炼
卡片追加字段|74270067|王女试炼
卡片追加字段|58015506|王女试炼
卡片追加字段|77506119|0独角兽
卡片追加字段|49389523|0独角兽
卡片追加字段|63595262|0独角兽
卡片追加字段|64047146|0独角兽
卡片追加字段|13995824|0独角兽
卡片追加字段|10321588|0独角兽
卡片追加字段|20351153|0独角兽
卡片追加字段|58807980|0独角兽
卡片追加字段|58685438|0独角兽
卡片追加字段|22318971|0独角兽
卡片追加字段|58901502|00御用
卡片追加字段|63364266|00御用
卡片追加字段|59255742|00御用
卡片追加字段|84305651|00御用
卡片追加字段|98637386|00御用
卡片追加字段|7391448|00御用
卡片追加字段|3070049|冰指示物
卡片追加字段|67675300|冰指示物
卡片追加字段|73659078|冰指示物
卡片追加字段|15893860|冰指示物
卡片追加字段|32750510|冰指示物
卡片追加字段|24661486|冰指示物
卡片追加字段|61802346|00雪暴
卡片追加字段|50920465|00雪暴
卡片追加字段|43694481|00雪暴
卡片追加字段|96565487|00雪暴
卡片追加字段|28348537|00雪暴
卡片追加字段|51706604|00雪暴
卡片追加字段|95929069|0冰火手
卡片追加字段|68535320|0冰火手
卡片追加字段|16223761|0冰火手
卡片追加字段|49003308|魔蜥义豪
卡片追加字段|9053187|魔蜥义豪
卡片追加字段|43793530|魔蜥义豪
卡片追加字段|39674352|魔蜥义豪
卡片追加字段|53776525|魔蜥义豪
卡片追加字段|39389320|0野蛮人
卡片追加字段|42233477|0野蛮人
卡片追加字段|78621186|0野蛮人
卡片追加字段|40453765|0野蛮人
卡片追加字段|20394040|0野蛮人
卡片追加字段|20765952|假面魔兽
卡片追加字段|22610082|假面魔兽
卡片追加字段|29549364|假面魔兽
卡片追加字段|57882509|假面魔兽
卡片追加字段|56948373|假面魔兽
卡片追加字段|82432018|假面魔兽
卡片追加字段|94377247|假面魔兽
卡片追加字段|49064413|假面魔兽
卡片追加字段|48948935|假面魔兽
卡片追加字段|8508055|00格斗
卡片追加字段|55550921|00格斗
卡片追加字段|82452993|00格斗
卡片追加字段|3810071|00格斗
卡片追加字段|49814180|00格斗
卡片追加字段|96458440|00格斗
卡片追加字段|97570038|00格斗
卡片追加字段|84814897|00同盟
卡片追加字段|91597389|00同盟
卡片追加字段|87798440|00同盟
卡片追加字段|7369217|00同盟
卡片追加字段|87564935|00同盟
卡片追加字段|8964854|00同盟
卡片追加字段|63676256|00同盟
卡片追加字段|59364406|00同盟
卡片追加字段|47415292|00同盟
卡片追加字段|31768112|00同盟
卡片追加字段|12965761|00同盟
卡片追加字段|69456283|00同盟
卡片追加字段|11678191|00同盟
卡片追加字段|72083436|00同盟
卡片追加字段|11743119|00同盟
卡片追加字段|99249638|00同盟
卡片追加字段|26931058|00同盟
卡片追加字段|39778366|00同盟
卡片追加字段|19086954|00同盟
卡片追加字段|46181000|00同盟
卡片追加字段|85359414|00同盟
卡片追加字段|47693640|00同盟
卡片追加字段|57062206|00同盟
卡片追加字段|96029574|00二重
卡片追加字段|95750695|00二重
卡片追加字段|91798373|00二重
卡片追加字段|81601517|00二重
卡片追加字段|19041767|00二重
卡片追加字段|26120084|00二重
卡片追加字段|16984449|00二重
卡片追加字段|80476891|0化合兽
卡片追加字段|55100740|0化合兽
卡片追加字段|44088292|0化合兽
卡片追加字段|38026562|0化合兽
卡片追加字段|18993198|0化合兽
卡片追加字段|99173029|00灵魂
卡片追加字段|92394653|00灵魂
卡片追加字段|92200612|00灵魂
卡片追加字段|90365482|00灵魂
卡片追加字段|82841979|00灵魂
卡片追加字段|74115234|00灵魂
卡片追加字段|73055622|00灵魂
卡片追加字段|66815913|00灵魂
卡片追加字段|52900000|00灵魂
卡片追加字段|48716139|00灵魂
卡片追加字段|43543777|00灵魂
卡片追加字段|43378076|00灵魂
卡片追加字段|39817919|00灵魂
卡片追加字段|37406863|00灵魂
卡片追加字段|32181268|00灵魂
卡片追加字段|30461781|00灵魂
卡片追加字段|25415052|00灵魂
卡片追加字段|24701235|00灵魂
卡片追加字段|16889337|00灵魂
卡片追加字段|9553721|00灵魂
卡片追加字段|6544078|00灵魂
卡片追加字段|1200843|00灵魂
卡片追加字段|276357|00灵魂
#有些源数不是源数之门,不能做简单源数→源数之门替换
卡片追加字段|42352091|源数之门
卡片追加字段|79747096|源数之门
卡片追加字段|4019153|源数之门
卡片追加字段|15232745|源数之门
卡片追加字段|42230449|源数之门
卡片追加字段|78625448|源数之门
卡片追加字段|77402960|源数之门
卡片追加字段|41418852|源数之门
卡片追加字段|84869738|00扎克
卡片追加字段|13331639|00扎克
卡片追加字段|89194033|王家神殿
卡片追加字段|29762407|王家神殿
#九头蛇,1张当6张计算
卡片追加字段|44009443|0九头蛇
卡片追加字段|44009443|0九头蛇
卡片追加字段|44009443|0九头蛇
卡片追加字段|44009443|0九头蛇
卡片追加字段|44009443|0九头蛇
卡片追加字段|44009443|0九头蛇
卡片追加字段|93953933|0九头蛇
#混沌战士
卡片追加字段|45948430|10CF
卡片追加字段|32360466|10CF
卡片追加字段|6628343|10CF
卡片追加字段|32013448|10CF
卡片追加字段|79234734|10CF
# 老艾特殊处理
# 因为要到6张才算卡组成立,所以这里1张老艾头按2张卡计算(0x0040=被封印的)
卡片追加字段|33396948|0040
卡片追加字段|33396948|0040
#弱肉一色,1张当2张计算
卡片追加字段|66926224|弱肉一色
卡片追加字段|66926224|弱肉一色
#祝台特殊胜利,1张当6张计算
卡片追加字段|77751766|00祝台
卡片追加字段|77751766|00祝台
卡片追加字段|77751766|00祝台
卡片追加字段|77751766|00祝台
卡片追加字段|77751766|00祝台
卡片追加字段|77751766|00祝台
# 字段归入系列命令,将字段归入系列
字段归入系列|00恐龙|恐龙
字段归入系列|0黄金国|黄金国
字段归入系列|0九头蛇|九头蛇
字段归入系列|00割草|割草
字段归入系列|00祝台|祝台
字段归入系列|弱肉一色|弱肉一色
字段归入系列|王家神殿|王家神殿
字段归入系列|00扎克|扎克
字段归入系列|ABC龙|ABC
字段归入系列|BEAT|METABEAT
字段归入系列|不死世界|不死世界
字段归入系列|00均卡|均卡(LINK/同调)
字段归入系列|0守护龙|守护龙
字段归入系列|0三幻神|三幻神
字段归入系列|BURN|烧血
字段归入系列|00列车|列车
字段归入系列|0召唤师|召唤师
字段归入系列|00废二|废二
字段归入系列|00幻魔|幻魔
字段归入系列|00白骨|白骨
字段归入系列|电子光虫|电子光虫
字段归入系列|00毛扎|毛扎
字段归入系列|0骷髅头|燃烧骷髅头
字段归入系列|00蛇头|蛇头
字段归入系列|0胜利蛇|胜利蛇
字段归入系列|属性魔神|门之守护神
字段归入系列|00赌博|骰子与硬币
字段归入系列|头奖壶7|头奖壶
字段归入系列|0巨神龙|巨神龙
字段归入系列|0G战队|G战队
字段归入系列|00金宫|急流山的金宫
字段归入系列|黯黑世界|黯黑世界
字段归入系列|森之圣兽|森之圣兽
字段归入系列|00子狸|子狸
字段归入系列|00罗宾|星斗罗宾
字段归入系列|世界末日|世界末日
字段归入系列|0倒计时|倒计时
字段归入系列|0通灵盘|通灵盘
字段归入系列|雷电家族|雷电家族
字段归入系列|王女试炼|王女试炼
字段归入系列|0独角兽|独角兽
字段归入系列|00御用|御用
字段归入系列|冰指示物|冰指示物
字段归入系列|00雪暴|雪暴
字段归入系列|0冰火手|冰火手
字段归入系列|魔蜥义豪|魔蜥义豪
字段归入系列|0野蛮人|野蛮人
字段归入系列|假面魔兽|假面魔兽
字段归入系列|00格斗|格斗武僧
字段归入系列|00同盟|各种同盟均
字段归入系列|00二重|各种二重均
字段归入系列|00灵魂|各种灵魂均
字段归入系列|0化合兽|化合兽
字段归入系列|源数之门|源数之门
# 对应SpecialProcess的处理
系列重命名|0040|艾克佐迪亚
系列重命名|004B|极星
系列重命名|010E|恐龙
系列重命名|00B9|火山
删除系列|0125
删除系列|00B6
删除系列|00B7
删除系列|00B8
删除系列|1017
删除系列|00C2
系列重命名|0123|蔷薇龙
系列重命名|007E|霍普
系列重命名|00A0|传说之龙
删除系列|2017
系列重命名|0061|忍者
系列重命名|001E|HERO
系列重命名|001F|HERO
系列重命名|0007|古代机械
删除系列|00A3
删除系列|011D
删除系列|0073
系列重命名|0110|纳祭
系列重命名|0066|废二
系列重命名|0119|炎兽
删除系列|0118
系列重命名|0101|电子界
系列重命名|0065|入魔
系列重命名|00DB|幻影骑士团
系列重命名|00C5|狱火机
删除系列|004C
系列重命名|0040|艾克佐迪亚
系列重命名|00AB|文具人
系列重命名|010D|魔导兽
系列重命名|0099|魔术师
系列重命名|1002|次世代
系列重命名|3008|HERO
系列重命名|5008|HERO
系列重命名|6008|HERO
系列重命名|A008|HERO
系列重命名|C008|HERO
系列重命名|0071|甜点
系列重命名|0009|HERO
系列重命名|0008|HERO
系列重命名|100A|入魔
系列重命名|3013|机皇
系列重命名|6013|机皇
系列重命名|0020|六武众
系列重命名|1033|黑羽
系列重命名|0034|宝玉兽
系列重命名|2034|宝玉兽
系列重命名|103D|六武众
系列重命名|3042|极星
系列重命名|5042|极星
系列重命名|6042|极星
系列重命名|A042|极星
系列重命名|0047|宝石骑士
系列重命名|010C|机界
删除系列|0112
删除系列|0048
删除系列|1048
删除系列|1073
删除系列|2073
删除系列|0046
删除系列|0096
删除系列|0095
系列重命名|304E|进化龙
系列重命名|504E|进化龙
系列重命名|006F|英豪挑战者
系列重命名|0092|纹章兽
系列重命名|1072|齿轮齿轮
系列重命名|10F8|魔术师
删除系列|20F8
系列重命名|010D|魔导兽
系列重命名|107A|圣骑士
系列重命名|207A|圣骑士
系列重命名|007B|银河眼
系列重命名|0055|银河眼
系列重命名|307B|银河眼
系列重命名|009F|魔术师
系列重命名|007D|阳炎兽
系列重命名|107F|霍普
系列重命名|207F|霍普
系列重命名|1081|炎王
删除系列|0075
系列重命名|0093|电子龙
系列重命名|0094|电子龙
系列重命名|109A|超重武者
系列重命名|109B|幻奏
系列重命名|109C|星守
系列重命名|10A2|黑魔导
系列重命名|20A2|黑魔导
系列重命名|30A2|黑魔导
系列重命名|10A4|栗子球
系列重命名|00A5|HERO
系列重命名|10AA|机壳
系列重命名|00AF|DDD
系列重命名|00D7|破坏剑
系列重命名|00C6|魔术师
系列重命名|00C7|魔术师
系列重命名|00CE|水伶女
系列重命名|00A9|魔玩具
系列重命名|00C3|魔玩具
系列重命名|10B5|灵兽
系列重命名|20B5|灵兽
系列重命名|40B5|灵兽
系列重命名|10C1|PSY骨架
系列重命名|10D9|不知火
系列重命名|00EA|水晶机巧
系列重命名|10DC|超级量子
系列重命名|20DC|超级量子
系列重命名|20EC|魔界剧团
系列重命名|10ED|地中族
系列重命名|10EE|秘旋谍
系列重命名|20EE|秘旋谍
系列重命名|00F2|魔术师
系列重命名|10F2|魔术师
系列重命名|20F2|魔术师
系列重命名|00F3|捕食植物
系列重命名|00F4|召唤师
系列重命名|0102|枪管
系列重命名|1115|闪刀
系列重命名|00FD|星遗物
系列重命名|1130|破械
删除系列|013B
删除系列|013C
系列重命名|0143|黄金国
系列重命名|2142|黄金国
系列重命名|1143|黄金国
系列重命名|0148|圣骑士
系列重命名|0054|拟声
系列重命名|0059|拟声
系列重命名|008F|拟声
系列重命名|013A|拟声
系列重命名|0082|拟声
系列重命名|00C0|灵使
系列重命名|0091|守墓
#以下2025/06/29新增,对应从0x114e~0x1ce的处理
系列重命名|114E|电脑堺
系列重命名|1151|直播双子
系列重命名|2151|直播双子
系列重命名|0152|直播双子
系列重命名|0153|直播双子
系列重命名|1158|圣天树
系列重命名|015B|惊乐园
系列重命名|015C|惊乐园
系列重命名|1162|七音服
系列重命名|2167|森之圣兽
系列重命名|0168|水母
系列重命名|0169|源数之门
系列重命名|017E|白银城
系列重命名|117E|白银城
系列重命名|2185|涂鸦兽
系列重命名|0189|俱舍怒威
系列重命名|0197|新式魔厨
系列重命名|119B|迪亚贝尔
系列重命名|119D|荷鲁斯
系列重命名|01A9|天杯
系列重命名|01AA|天杯
系列重命名|01A2|百夫长
系列重命名|01B3|百夫长
系列重命名|01B6|千年
系列重命名|11B8|鲨
系列重命名|01BE|雷火
#降阶魔法
删除系列|015E
#七皇
删除系列|0175
#异晶人的
删除系列|0176
#桥梁
删除系列|0187
#至爱
#此处仅删除了系列,暂时还没把至爱卡归类
删除系列|0194
#维萨斯
删除系列|0198
#反击
删除系列|0199
#哈特
删除系列|01A0
#时空
#此处仅删除了系列,暂时还没把时空卡归类
删除系列|01B4
#蓝泪
删除系列|01B5
#统王
删除系列|01C6
#瞬间移动
删除系列|01CC
# 按条件删除分类:仅当有2个以上系列时,删除单个分类
# 使用场景:比如当METABEAT+黄金国时,仅保留黄金国;但如果一个卡组分类仅为METABEAT,就仍然输出METABEAT。
# 其他使用场景:类似甘多拉+守护龙的卡组,守护龙仅为了甘多拉服务,就不需要留下守护龙分类了。
# 语法上:当存在第二个值时,删除第三个种类。
按条件删除分类|烧血|烧血
按条件删除分类|METABEAT|METABEAT
按条件删除分类|均卡(LINK/同调)|均卡(LINK/同调)
按条件删除分类|黑魔导|风魔女
按条件删除分类|召唤师|风魔女
按条件删除分类|恩底弥翁|魔导兽
按条件删除分类|甘多拉|守护龙
按条件删除分类|甘多拉|圣像骑士
按条件删除分类|甘多拉|龙骑兵团
按条件删除分类|九头蛇|九头蛇
# 设置优先级:优先级越高,排列顺序就总是更靠前;即使它们的占比更低。
# 在【不关系占比】模式下仍然生效。
# 比如【割草】系列总排列在其他任何标签前(比如:割草狱火机)
# 语法:设置优先级||优先级(数字)
# 没有设置优先级的系列,优先级默认为0。
# 可以设置负数优先级,让其在排列时总是靠后。
# 同一优先级按字符串顺序自然排列。
设置优先级|割草|10000
设置优先级|艾克佐迪亚|-10000
设置优先级|祝台|-10000
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment